4 package org.collectionspace.services;
\r
6 import java.io.ByteArrayInputStream;
\r
7 import java.io.IOException;
\r
8 import java.util.ArrayList;
\r
9 import java.util.Arrays;
\r
10 import java.util.HashMap;
\r
11 import java.util.List;
\r
12 import java.util.Map;
\r
14 import org.collectionspace.services.nuxeo.NuxeoRESTClient;
\r
15 import org.collectionspace.services.nuxeo.CollectionSpaceServiceNuxeoImpl;
\r
16 import org.collectionspace.services.collectionobject.CollectionObject;
\r
17 import org.collectionspace.services.CollectionObjectJAXBSchema;
\r
18 import org.collectionspace.services.nuxeo.NuxeoUtils;
\r
20 import org.dom4j.Document;
\r
21 import org.dom4j.DocumentException;
\r
22 import org.dom4j.io.SAXReader;
\r
23 import org.restlet.resource.Representation;
\r
25 import org.nuxeo.ecm.core.api.IdRef;
\r
26 import org.nuxeo.ecm.core.api.repository.RepositoryInstance;
\r
27 import org.nuxeo.ecm.core.api.DocumentModel;
\r
28 import org.nuxeo.ecm.core.api.DocumentRef;
\r
36 public class CollectionObjectServiceNuxeoImpl extends
\r
37 CollectionSpaceServiceNuxeoImpl implements CollectionObjectService {
\r
39 final static String CO_NUXEO_DOCTYPE = "CollectionObject";
\r
40 final static String CO_NUXEO_SCHEMA_NAME = "collectionobject";
\r
41 final static String CO_NUXEO_DC_TITLE = "CollectionSpace-CollectionObject";
\r
43 // replace WORKSPACE_UID for resource workspace
\r
44 static String CS_COLLECTIONOBJECT_WORKSPACE_UID = "9dd20955-fce7-4a87-8319-040ab9543f4f";
\r
46 public Document deleteCollectionObject(String csid)
\r
47 throws DocumentException, IOException {
\r
49 NuxeoRESTClient nxClient = getClient();
\r
50 List<String> pathParams = new ArrayList<String>();
\r
51 Map<String, String> queryParams = new HashMap<String, String>();
\r
53 pathParams.add("default");
\r
54 pathParams.add(csid);
\r
55 pathParams.add("deleteDocumentRestlet");
\r
56 Representation res = nxClient.get(pathParams, queryParams);
\r
57 SAXReader reader = new SAXReader();
\r
58 Document document = reader.read(res.getStream());
\r
63 public Document getCollectionObject(String csid) throws DocumentException,
\r
66 // Calling via Nuxeo Java API
\r
67 //getCollectionObjectViaJavaAPI(csid);
\r
69 // Return to normal Nuxeo REST call
\r
70 List<String> pathParams = new ArrayList<String>();
\r
71 Map<String, String> queryParams = new HashMap<String, String>();
\r
73 pathParams.add("default");
\r
74 pathParams.add(csid);
\r
75 pathParams.add("export");
\r
76 queryParams.put("format", "XML");
\r
78 NuxeoRESTClient nxClient = getClient();
\r
79 Representation res = nxClient.get(pathParams, queryParams);
\r
81 SAXReader reader = new SAXReader();
\r
82 Document document = reader.read(res.getStream());
\r
88 * Prototype method for calling the Nuxeo Java API
\r
90 private Document getCollectionObjectViaJavaAPI(String csid)
\r
91 throws DocumentException, IOException {
\r
92 Document result = null;
\r
93 RepositoryInstance repoSession = null;
\r
96 repoSession = getRepositorySession();
\r
97 DocumentRef documentRef = new IdRef(csid);
\r
98 DocumentModel documentModel = repoSession.getDocument(documentRef);
\r
99 result = NuxeoUtils.getDocument(repoSession, documentModel);
\r
100 } catch (Exception e) {
\r
101 if (logger.isDebugEnabled()) {
\r
102 e.printStackTrace();
\r
105 if (repoSession != null) {
\r
106 releaseRepositorySession(repoSession);
\r
110 // Dump out the contents of the result to stdout
\r
111 System.out.println(result.asXML());
\r
116 public Document getCollectionObjectList() throws DocumentException,
\r
118 Document result = null;
\r
120 NuxeoRESTClient nxClient = getClient();
\r
121 List<String> pathParams = new ArrayList<String>();
\r
122 Map<String, String> queryParams = new HashMap<String, String>();
\r
123 pathParams = Arrays.asList("default",
\r
124 CS_COLLECTIONOBJECT_WORKSPACE_UID, "browse");
\r
125 Representation res = nxClient.get(pathParams, queryParams);
\r
126 SAXReader reader = new SAXReader();
\r
127 result = reader.read(res.getStream());
\r
132 public Document postCollectionObject(CollectionObject co)
\r
133 throws DocumentException, IOException {
\r
134 NuxeoRESTClient nxClient = getClient();
\r
136 List<String> pathParams = new ArrayList<String>();
\r
137 Map<String, String> queryParams = new HashMap<String, String>();
\r
138 pathParams.add("default");
\r
139 pathParams.add(CS_COLLECTIONOBJECT_WORKSPACE_UID);
\r
140 pathParams.add("createDocument");
\r
141 queryParams.put("docType", CO_NUXEO_DOCTYPE);
\r
143 // a default title for the Dublin Core schema
\r
144 queryParams.put("dublincore:title", CO_NUXEO_DC_TITLE);
\r
146 // CollectionObject core values
\r
147 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
148 + CollectionObjectJAXBSchema.OBJECT_NUMBER, co
\r
149 .getObjectNumber());
\r
150 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
151 + CollectionObjectJAXBSchema.OTHER_NUMBER, co.getOtherNumber());
\r
152 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
153 + CollectionObjectJAXBSchema.BRIEF_DESCRIPTION, co
\r
154 .getBriefDescription());
\r
155 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
156 + CollectionObjectJAXBSchema.COMMENTS, co.getComments());
\r
157 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
158 + CollectionObjectJAXBSchema.DIST_FEATURES, co
\r
159 .getDistFeatures());
\r
160 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
161 + CollectionObjectJAXBSchema.OBJECT_NAME, co.getObjectName());
\r
162 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
163 + CollectionObjectJAXBSchema.RESPONSIBLE_DEPT, co
\r
164 .getResponsibleDept());
\r
165 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
166 + CollectionObjectJAXBSchema.TITLE, co.getTitle());
\r
168 ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
\r
169 Representation res = nxClient.post(pathParams, queryParams, bais);
\r
171 SAXReader reader = new SAXReader();
\r
172 Document document = reader.read(res.getStream());
\r
177 public Document putCollectionObject(String csid, CollectionObject theUpdate)
\r
178 throws DocumentException, IOException {
\r
179 List<String> pathParams = new ArrayList<String>();
\r
180 Map<String, String> queryParams = new HashMap<String, String>();
\r
181 pathParams.add("default");
\r
182 pathParams.add(csid);
\r
183 pathParams.add("updateDocumentRestlet");
\r
185 // todo: intelligent merge needed
\r
186 if (theUpdate.getObjectNumber() != null) {
\r
187 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
188 + CollectionObjectJAXBSchema.OBJECT_NUMBER, theUpdate
\r
189 .getObjectNumber());
\r
192 if (theUpdate.getOtherNumber() != null) {
\r
193 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
194 + CollectionObjectJAXBSchema.OTHER_NUMBER, theUpdate
\r
195 .getOtherNumber());
\r
198 if (theUpdate.getBriefDescription() != null) {
\r
199 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
200 + CollectionObjectJAXBSchema.BRIEF_DESCRIPTION, theUpdate
\r
201 .getBriefDescription());
\r
204 if (theUpdate.getComments() != null) {
\r
205 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
206 + CollectionObjectJAXBSchema.COMMENTS, theUpdate
\r
210 if (theUpdate.getDistFeatures() != null) {
\r
211 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
212 + CollectionObjectJAXBSchema.DIST_FEATURES, theUpdate
\r
213 .getDistFeatures());
\r
216 if (theUpdate.getObjectName() != null) {
\r
217 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
218 + CollectionObjectJAXBSchema.OBJECT_NAME, theUpdate
\r
222 if (theUpdate.getResponsibleDept() != null) {
\r
223 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
224 + CollectionObjectJAXBSchema.RESPONSIBLE_DEPT, theUpdate
\r
225 .getResponsibleDept());
\r
228 if (theUpdate.getTitle() != null) {
\r
229 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
230 + CollectionObjectJAXBSchema.TITLE, theUpdate.getTitle());
\r
233 NuxeoRESTClient nxClient = getClient();
\r
234 Representation res = nxClient.get(pathParams, queryParams);
\r
235 SAXReader reader = new SAXReader();
\r
236 Document document = reader.read(res.getStream());
\r