]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
a643066c00e9eef33582f3954ece63b794a0a59b
[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             listItem.setAcquisitionReferenceNumber((String) docModel.getProperty(label,
123                     AcquisitionListItemJAXBSchema.ACQUISITION_REFERENCE_NUMBER));
124             
125             // docModel.getProperty returns an ArrayList here.
126             List<String> acquisitionSources =
127                  (List<String>) docModel.getProperty(label,
128                      AcquisitionListItemJAXBSchema.ACQUISITION_SOURCES);
129             AcquisitionSourceList acquisitionSourceList = new AcquisitionSourceList();
130             for (String acquisitionSource : acquisitionSources) {
131                   acquisitionSourceList.getAcquisitionSource().add(acquisitionSource);
132             }
133             listItem.setAcquisitionSources(acquisitionSourceList);
134
135             // and here ...
136             List<String> owners = 
137                  (List<String>) docModel.getProperty(label,
138                      AcquisitionListItemJAXBSchema.OWNERS);
139             OwnerList ownerList = new OwnerList();
140             for (String owner : owners) {
141                   acquisitionSourceList.getAcquisitionSource().add(owner);
142             }
143             listItem.setOwners(ownerList);
144
145             //need fully qualified context for URI
146             String id = NuxeoUtils.extractId(docModel.getPathAsString());
147             listItem.setUri(getServiceContextPath() + id);
148             listItem.setCsid(id);
149             list.add(listItem);
150         }
151
152         return coList;
153     }
154
155     @Override
156     public void fillAllParts(DocumentWrapper<DocumentModel> wrapDoc, Action action) throws Exception {
157
158         super.fillAllParts(wrapDoc, action);
159         fillDublinCoreObject(wrapDoc); //dublincore might not be needed in future
160     }
161
162     private void fillDublinCoreObject(DocumentWrapper<DocumentModel> wrapDoc) throws Exception {
163         DocumentModel docModel = wrapDoc.getWrappedObject();
164         //FIXME property setter should be dynamically set using schema inspection
165         //so it does not require hard coding
166         // a default title for the Dublin Core schema
167         docModel.setPropertyValue("dublincore:title", AcquisitionConstants.NUXEO_DC_TITLE);
168     }
169
170
171     /**
172      * getQProperty converts the given property to qualified schema property
173      * @param prop
174      * @return
175      */
176     @Override
177     public String getQProperty(String prop) {
178         return AcquisitionConstants.NUXEO_SCHEMA_NAME + ":" + prop;
179     }
180
181     // The following are all private in DocumentUtils;
182     // might be moved to a common class.
183     private static String NAME_VALUE_SEPARATOR = "|";
184
185     private static class NameValue {
186         NameValue() {
187                         // default scoped constructor to remove "synthetic accessor" warning
188                 }
189         String name;
190         String value;
191     };
192
193 }
194