]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
53de3e74a4c834db37fb89b209f3da0a97e6011e
[tmp/jakarta-migration.git] /
1 /**
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:
5
6  *  http://www.collectionspace.org
7  *  http://wiki.collectionspace.org
8
9  *  Copyright 2009 University of California at Berkeley
10
11  *  Licensed under the Educational Community License (ECL), Version 2.0.
12  *  You may not use this file except in compliance with this License.
13
14  *  You may obtain a copy of the ECL 2.0 License at
15
16  *  https://source.collectionspace.org/collection-space/LICENSE.txt
17
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.
23  */
24 package org.collectionspace.services.location.nuxeo;
25
26 import java.util.Iterator;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.List;
30 import java.util.Map;
31
32 import org.collectionspace.services.LocationJAXBSchema;
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.location.LocationsCommon;
39 import org.collectionspace.services.location.LocationsCommonList;
40 import org.collectionspace.services.location.LocationsCommonList.LocationListItem;
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;
45
46 /**
47  * LocationDocumentModelHandler
48  *
49  * $LastChangedRevision: $
50  * $LastChangedDate: $
51  */
52 /**
53  * @author pschmitz
54  *
55  */
56 public class LocationDocumentModelHandler
57         extends RemoteDocumentModelHandlerImpl<LocationsCommon, LocationsCommonList> {
58
59     /** The logger. */
60     private final Logger logger = LoggerFactory.getLogger(LocationDocumentModelHandler.class);
61     /**
62      * Common part schema label
63      */
64     private static final String COMMON_PART_LABEL = "locations_common";
65     
66     /**
67      * location is used to stash JAXB object to use when handle is called
68      * for Action.CREATE, Action.UPDATE or Action.GET
69      */
70     private LocationsCommon location;
71     /**
72      * locationList is stashed when handle is called
73      * for ACTION.GET_ALL
74      */
75     private LocationsCommonList locationList;
76     
77     /**
78      * inAuthority is the parent OrgAuthority for this context
79      */
80     private String inAuthority;
81
82     /**
83      * Gets the in authority.
84      *
85      * @return the in authority
86      */
87     public String getInAuthority() {
88                 return inAuthority;
89         }
90
91         /**
92          * Sets the in authority.
93          *
94          * @param inAuthority the new in authority
95          */
96         public void setInAuthority(String inAuthority) {
97                 this.inAuthority = inAuthority;
98         }
99
100         
101     /* (non-Javadoc)
102      * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#handleCreate(org.collectionspace.services.common.document.DocumentWrapper)
103      */
104     @Override
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());
109     }
110     
111     /* (non-Javadoc)
112      * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#handleUpdate(org.collectionspace.services.common.document.DocumentWrapper)
113      */
114     @Override
115     public void handleUpdate(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
116         super.handleUpdate(wrapDoc);
117         handleDisplayName(wrapDoc.getWrappedObject());
118     }
119
120     /**
121      * Handle display name.
122      *
123      * @param docModel the doc model
124      * @throws Exception the exception
125      */
126     private void handleDisplayName(DocumentModel docModel) throws Exception {
127         String commonPartLabel = getServiceContext().getCommonPartLabel("locations");
128         Boolean displayNameComputed = (Boolean) docModel.getProperty(commonPartLabel,
129                         LocationJAXBSchema.DISPLAY_NAME_COMPUTED);
130         if (displayNameComputed) {
131                 String displayName = prepareDefaultDisplayName(
132                         (String)docModel.getProperty(commonPartLabel, LocationJAXBSchema.NAME ));
133                         docModel.setProperty(commonPartLabel, LocationJAXBSchema.DISPLAY_NAME,
134                                         displayName);
135         }
136     }
137         
138     /**
139      * Produces a default displayName from the basic name and dates fields.
140      * @see LocationAuthorityClientUtils.prepareDefaultDisplayName() which
141      * duplicates this logic, until we define a service-general utils package
142      * that is neither client nor service specific.
143      * @param foreName  
144      * @param middleName
145      * @param surName
146      * @param birthDate
147      * @param deathDate
148      * @return
149      * @throws Exception
150      */
151     private static String prepareDefaultDisplayName(
152                 String name ) throws Exception {
153         StringBuilder newStr = new StringBuilder();
154                         newStr.append(name);
155                         return newStr.toString();
156     }
157     
158     /**
159      * getCommonPart get associated location
160      * @return
161      */
162     @Override
163     public LocationsCommon getCommonPart() {
164         return location;
165     }
166
167     /**
168      * setCommonPart set associated location
169      * @param location
170      */
171     @Override
172     public void setCommonPart(LocationsCommon location) {
173         this.location = location;
174     }
175
176     /**
177      * getCommonPartList get associated location (for index/GET_ALL)
178      * @return
179      */
180     @Override
181     public LocationsCommonList getCommonPartList() {
182         return locationList;
183     }
184
185     /* (non-Javadoc)
186      * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#setCommonPartList(java.lang.Object)
187      */
188     @Override
189     public void setCommonPartList(LocationsCommonList locationList) {
190         this.locationList = locationList;
191     }
192
193     /* (non-Javadoc)
194      * @see org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl#extractPart(org.nuxeo.ecm.core.api.DocumentModel, java.lang.String, org.collectionspace.services.common.service.ObjectPartType)
195      */
196     @Override
197     protected Map<String, Object> extractPart(DocumentModel docModel, String schema, ObjectPartType partMeta)
198             throws Exception {
199         Map<String, Object> unQObjectProperties = super.extractPart(docModel, schema, partMeta);
200         
201         // Add the CSID to the common part
202         if (partMeta.getLabel().equalsIgnoreCase(COMMON_PART_LABEL)) {
203                 String csid = NuxeoUtils.extractId(docModel.getPathAsString());
204                 unQObjectProperties.put("csid", csid);
205         }
206         
207         return unQObjectProperties;
208     }
209     
210     /* (non-Javadoc)
211      * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#extractCommonPart(org.collectionspace.services.common.document.DocumentWrapper)
212      */
213     @Override
214     public LocationsCommon extractCommonPart(DocumentWrapper wrapDoc)
215             throws Exception {
216         throw new UnsupportedOperationException();
217     }
218
219     /* (non-Javadoc)
220      * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#fillCommonPart(java.lang.Object, org.collectionspace.services.common.document.DocumentWrapper)
221      */
222     @Override
223     public void fillCommonPart(LocationsCommon locationObject, DocumentWrapper wrapDoc) throws Exception {
224         throw new UnsupportedOperationException();
225     }
226
227     /* (non-Javadoc)
228      * @see org.collectionspace.services.nuxeo.client.java.DocumentModelHandler#extractCommonPartList(org.collectionspace.services.common.document.DocumentWrapper)
229      */
230     @Override
231         public LocationsCommonList extractCommonPartList(
232                         DocumentWrapper<DocumentModelList> wrapDoc) throws Exception {
233                 LocationsCommonList coList = extractPagingInfo(new LocationsCommonList(), wrapDoc);
234                 List<LocationsCommonList.LocationListItem> list = coList.getLocationListItem();
235                 Iterator<DocumentModel> iter = wrapDoc.getWrappedObject().iterator();
236                 String commonPartLabel = getServiceContext().getCommonPartLabel(
237                                 "locations");
238                 while (iter.hasNext()) {
239                         DocumentModel docModel = iter.next();
240                         LocationListItem ilistItem = new LocationListItem();
241                         ilistItem.setDisplayName((String) docModel.getProperty(
242                                         commonPartLabel, LocationJAXBSchema.DISPLAY_NAME));
243                         ilistItem.setRefName((String) docModel.getProperty(commonPartLabel,
244                                         LocationJAXBSchema.REF_NAME));
245                         String id = NuxeoUtils.extractId(docModel.getPathAsString());
246                         ilistItem.setUri("/locationauthorities/" + inAuthority + "/items/"
247                                         + id);
248                         ilistItem.setCsid(id);
249                         list.add(ilistItem);
250                 }
251
252                 return coList;
253         }
254
255     /**
256      * getQProperty converts the given property to qualified schema property
257      * @param prop
258      * @return
259      */
260     @Override
261     public String getQProperty(String prop) {
262         return LocationConstants.NUXEO_SCHEMA_NAME + ":" + prop;
263     }
264 }
265