2 * This document is a part of the source code and related artifacts
3 * for CollectionSpace, an open source collections management system
4 * for museums and related institutions:
6 * http://www.collectionspace.org
7 * http://wiki.collectionspace.org
9 * Copyright 2009 University of California at Berkeley
11 * Licensed under the Educational Community License (ECL), Version 2.0.
12 * You may not use this file except in compliance with this License.
14 * You may obtain a copy of the ECL 2.0 License at
16 * https://source.collectionspace.org/collection-space/LICENSE.txt
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an "AS IS" BASIS,
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
24 package org.collectionspace.services.person.nuxeo;
26 import java.util.Iterator;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.List;
32 import org.collectionspace.services.PersonJAXBSchema;
33 import org.collectionspace.services.common.document.DocumentFilter;
34 import org.collectionspace.services.common.document.DocumentWrapper;
35 import org.collectionspace.services.common.service.ObjectPartType;
36 import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl;
37 import org.collectionspace.services.nuxeo.util.NuxeoUtils;
38 import org.collectionspace.services.person.PersonsCommon;
39 import org.collectionspace.services.person.PersonsCommonList;
40 import org.collectionspace.services.person.PersonsCommonList.PersonListItem;
41 import org.nuxeo.ecm.core.api.DocumentModel;
42 import org.nuxeo.ecm.core.api.DocumentModelList;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
47 * PersonDocumentModelHandler
49 * $LastChangedRevision: $
56 public class PersonDocumentModelHandler
57 extends RemoteDocumentModelHandlerImpl<PersonsCommon, PersonsCommonList> {
60 private final Logger logger = LoggerFactory.getLogger(PersonDocumentModelHandler.class);
62 * Common part schema label
64 private static final String COMMON_PART_LABEL = "persons_common";
67 * person is used to stash JAXB object to use when handle is called
68 * for Action.CREATE, Action.UPDATE or Action.GET
70 private PersonsCommon person;
72 * personList is stashed when handle is called
75 private PersonsCommonList personList;
78 * inAuthority is the parent OrgAuthority for this context
80 private String inAuthority;
83 * Gets the in authority.
85 * @return the in authority
87 public String getInAuthority() {
92 * Sets the in authority.
94 * @param inAuthority the new in authority
96 public void setInAuthority(String inAuthority) {
97 this.inAuthority = inAuthority;
102 * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#handleCreate(org.collectionspace.services.common.document.DocumentWrapper)
105 public void handleCreate(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
106 // first fill all the parts of the document
107 super.handleCreate(wrapDoc);
108 handleDisplayName(wrapDoc.getWrappedObject());
112 * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#handleUpdate(org.collectionspace.services.common.document.DocumentWrapper)
115 public void handleUpdate(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
116 super.handleUpdate(wrapDoc);
117 handleDisplayName(wrapDoc.getWrappedObject());
121 * Handle display name.
123 * @param docModel the doc model
124 * @throws Exception the exception
126 private void handleDisplayName(DocumentModel docModel) throws Exception {
127 String commonPartLabel = getServiceContext().getCommonPartLabel("persons");
128 Boolean displayNameComputed = (Boolean) docModel.getProperty(commonPartLabel,
129 PersonJAXBSchema.DISPLAY_NAME_COMPUTED);
130 if (displayNameComputed) {
131 String displayName = prepareDefaultDisplayName(
132 (String)docModel.getProperty(commonPartLabel, PersonJAXBSchema.FORE_NAME ),
133 (String)docModel.getProperty(commonPartLabel, PersonJAXBSchema.MIDDLE_NAME ),
134 (String)docModel.getProperty(commonPartLabel, PersonJAXBSchema.SUR_NAME ),
135 (String)docModel.getProperty(commonPartLabel, PersonJAXBSchema.BIRTH_DATE ),
136 (String)docModel.getProperty(commonPartLabel, PersonJAXBSchema.DEATH_DATE )
138 docModel.setProperty(commonPartLabel, PersonJAXBSchema.DISPLAY_NAME,
144 * Produces a default displayName from the basic name and dates fields.
145 * @see PersonAuthorityClientUtils.prepareDefaultDisplayName() which
146 * duplicates this logic, until we define a service-general utils package
147 * that is neither client nor service specific.
156 private static String prepareDefaultDisplayName(
157 String foreName, String middleName, String surName,
158 String birthDate, String deathDate ) throws Exception {
159 StringBuilder newStr = new StringBuilder();
160 final String sep = " ";
161 final String dateSep = "-";
162 List<String> nameStrings =
163 Arrays.asList(foreName, middleName, surName);
164 boolean firstAdded = false;
165 for(String partStr : nameStrings ){
166 if(null != partStr ) {
170 newStr.append(partStr);
174 // Now we add the dates. In theory could have dates with no name, but that is their problem.
175 boolean foundBirth = false;
176 if(null != birthDate) {
180 newStr.append(birthDate);
181 newStr.append(dateSep); // Put this in whether there is a death date or not
184 if(null != deathDate) {
189 newStr.append(dateSep);
191 newStr.append(deathDate);
193 return newStr.toString();
197 * getCommonPart get associated person
201 public PersonsCommon getCommonPart() {
206 * setCommonPart set associated person
210 public void setCommonPart(PersonsCommon person) {
211 this.person = person;
215 * getCommonPartList get associated person (for index/GET_ALL)
219 public PersonsCommonList getCommonPartList() {
224 * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#setCommonPartList(java.lang.Object)
227 public void setCommonPartList(PersonsCommonList personList) {
228 this.personList = personList;
232 * @see org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl#extractPart(org.nuxeo.ecm.core.api.DocumentModel, java.lang.String, org.collectionspace.services.common.service.ObjectPartType)
235 protected Map<String, Object> extractPart(DocumentModel docModel, String schema, ObjectPartType partMeta)
237 Map<String, Object> unQObjectProperties = super.extractPart(docModel, schema, partMeta);
239 // Add the CSID to the common part
240 if (partMeta.getLabel().equalsIgnoreCase(COMMON_PART_LABEL)) {
241 String csid = NuxeoUtils.extractId(docModel.getPathAsString());
242 unQObjectProperties.put("csid", csid);
245 return unQObjectProperties;
249 * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#extractCommonPart(org.collectionspace.services.common.document.DocumentWrapper)
252 public PersonsCommon extractCommonPart(DocumentWrapper wrapDoc)
254 throw new UnsupportedOperationException();
258 * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#fillCommonPart(java.lang.Object, org.collectionspace.services.common.document.DocumentWrapper)
261 public void fillCommonPart(PersonsCommon personObject, DocumentWrapper wrapDoc) throws Exception {
262 throw new UnsupportedOperationException();
266 * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#extractCommonPartList(org.collectionspace.services.common.document.DocumentWrapper)
269 public PersonsCommonList extractCommonPartList(
270 DocumentWrapper<DocumentModelList> wrapDoc) throws Exception {
271 PersonsCommonList coList = extractPagingInfo(new PersonsCommonList(), wrapDoc);
272 List<PersonsCommonList.PersonListItem> list = coList.getPersonListItem();
273 Iterator<DocumentModel> iter = wrapDoc.getWrappedObject().iterator();
274 String commonPartLabel = getServiceContext().getCommonPartLabel(
276 while (iter.hasNext()) {
277 DocumentModel docModel = iter.next();
278 PersonListItem ilistItem = new PersonListItem();
279 ilistItem.setDisplayName((String) docModel.getProperty(
280 commonPartLabel, PersonJAXBSchema.DISPLAY_NAME));
281 ilistItem.setRefName((String) docModel.getProperty(commonPartLabel,
282 PersonJAXBSchema.REF_NAME));
283 String id = NuxeoUtils.extractId(docModel.getPathAsString());
284 ilistItem.setUri("/personauthorities/" + inAuthority + "/items/"
286 ilistItem.setCsid(id);
294 * getQProperty converts the given property to qualified schema property
299 public String getQProperty(String prop) {
300 return PersonConstants.NUXEO_SCHEMA_NAME + ":" + prop;