]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
6267b2c72b833534574a97ed517d498782f67f7f
[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.acquisition.nuxeo;
25
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.StringTokenizer;
29
30 import org.collectionspace.services.AcquisitionListItemJAXBSchema;
31 import org.collectionspace.services.common.document.DocumentWrapper;
32 import org.collectionspace.services.acquisition.AcquisitionsCommon;
33 import org.collectionspace.services.acquisition.AcquisitionsCommonList;
34 import org.collectionspace.services.acquisition.AcquisitionsCommonList.AcquisitionListItem;
35 import org.collectionspace.services.acquisition.AcquisitionSourceList;
36 import org.collectionspace.services.acquisition.OwnerList;
37 import org.collectionspace.services.common.document.DocumentHandler.Action;
38 import org.collectionspace.services.jaxb.AbstractCommonList;
39 import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl;
40 import org.collectionspace.services.nuxeo.util.NuxeoUtils;
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  * AcquisitionDocumentModelHandler
48  *
49  * $LastChangedRevision: $
50  * $LastChangedDate: $
51  */
52 public class AcquisitionDocumentModelHandler
53         extends RemoteDocumentModelHandlerImpl<AcquisitionsCommon, AcquisitionsCommonList> {
54
55     private final Logger logger = LoggerFactory.getLogger(AcquisitionDocumentModelHandler.class);
56     /**
57      * acquisition is used to stash JAXB object to use when handle is called
58      * for Action.CREATE, Action.UPDATE or Action.GET
59      */
60     private AcquisitionsCommon acquisition;
61     /**
62      * acquisitionList is stashed when handle is called
63      * for ACTION.GET_ALL
64      */
65     private AcquisitionsCommonList acquisitionList;
66
67
68     /**
69      * getCommonPart get associated acquisition
70      * @return
71      */
72     @Override
73     public AcquisitionsCommon getCommonPart() {
74         return acquisition;
75     }
76
77     /**
78      * setCommonPart set associated acquisition
79      * @param acquisition
80      */
81     @Override
82     public void setCommonPart(AcquisitionsCommon acquisition) {
83         this.acquisition = acquisition;
84     }
85
86     /**
87      * getAcquisitionList get associated acquisition (for index/GET_ALL)
88      * @return
89      */
90     @Override
91     public AcquisitionsCommonList getCommonPartList() {
92         return acquisitionList;
93     }
94
95     @Override
96     public void setCommonPartList(AcquisitionsCommonList acquisitionList) {
97         this.acquisitionList = acquisitionList;
98     }
99
100     @Override
101     public AcquisitionsCommon extractCommonPart(DocumentWrapper<DocumentModel> wrapDoc)
102             throws Exception {
103         throw new UnsupportedOperationException();
104     }
105
106     @Override
107     public void fillCommonPart(AcquisitionsCommon acquisitionObject, DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
108         throw new UnsupportedOperationException();
109     }
110
111     @Override
112     public AcquisitionsCommonList extractCommonPartList(DocumentWrapper<DocumentModelList> wrapDoc) throws Exception {
113         AcquisitionsCommonList coList = this.extractPagingInfo(new AcquisitionsCommonList(), wrapDoc);
114         AbstractCommonList commonList = (AbstractCommonList) coList;
115         commonList.setFieldsReturned("acquisitionReferenceNumber|acquisitionSources|owners|uri|csid");
116         List<AcquisitionsCommonList.AcquisitionListItem> list = coList.getAcquisitionListItem();
117         Iterator<DocumentModel> iter = wrapDoc.getWrappedObject().iterator();
118         String label = getServiceContext().getCommonPartLabel();
119         while (iter.hasNext()) {
120             DocumentModel docModel = iter.next();
121             AcquisitionListItem listItem = new AcquisitionListItem();
122
123             listItem.setAcquisitionReferenceNumber((String) docModel.getProperty(label,
124                     AcquisitionListItemJAXBSchema.ACQUISITION_REFERENCE_NUMBER));
125
126             List<Object> acquisitionSources =(List<Object>) docModel.getProperty(label,AcquisitionListItemJAXBSchema.ACQUISITION_SOURCES);
127             String primaryAcquisitionSource = primaryValueFromMultivalue(acquisitionSources,AcquisitionListItemJAXBSchema.ACQUISITION_SOURCE);
128             listItem.setAcquisitionSource(primaryAcquisitionSource);
129
130             List<Object> owners =(List<Object>) docModel.getProperty(label,AcquisitionListItemJAXBSchema.OWNERS);
131             String primaryOwner = primaryValueFromMultivalue(owners,AcquisitionListItemJAXBSchema.OWNER);
132             listItem.setOwner(primaryOwner);
133
134             //need fully qualified context for URI
135             String id = NuxeoUtils.extractId(docModel.getPathAsString());
136             listItem.setUri(getServiceContextPath() + id);
137             listItem.setCsid(id);
138             list.add(listItem);
139         }
140
141         return coList;
142     }
143
144     @Override
145     public void fillAllParts(DocumentWrapper<DocumentModel> wrapDoc, Action action) throws Exception {
146
147         super.fillAllParts(wrapDoc, action);
148         fillDublinCoreObject(wrapDoc); //dublincore might not be needed in future
149     }
150
151     private void fillDublinCoreObject(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
152         DocumentModel docModel = wrapDoc.getWrappedObject();
153         //FIXME property setter should be dynamically set using schema inspection
154         //so it does not require hard coding
155         // a default title for the Dublin Core schema
156         docModel.setPropertyValue("dublincore:title", AcquisitionConstants.NUXEO_DC_TITLE);
157     }
158
159
160     /**
161      * getQProperty converts the given property to qualified schema property
162      * @param prop
163      * @return
164      */
165     @Override
166     public String getQProperty(String prop) {
167         return AcquisitionConstants.NUXEO_SCHEMA_NAME + ":" + prop;
168     }
169
170     // The following are all private in DocumentUtils;
171     // might be moved to a common class.
172     private static String NAME_VALUE_SEPARATOR = "|";
173
174     private static class NameValue {
175         NameValue() {
176                         // default scoped constructor to remove "synthetic accessor" warning
177                 }
178         String name;
179         String value;
180     };
181
182 }
183