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
19 import org.dom4j.Document;
\r
20 import org.dom4j.DocumentException;
\r
21 import org.dom4j.io.SAXReader;
\r
22 import org.restlet.resource.Representation;
\r
28 public class CollectionObjectServiceNuxeoImpl extends
\r
29 CollectionSpaceServiceNuxeoImpl implements CollectionObjectService {
\r
31 final static String CO_NUXEO_DOCTYPE = "CollectionObject";
\r
32 final static String CO_NUXEO_SCHEMA_NAME = "collectionobject";
\r
33 final static String CO_NUXEO_DC_TITLE = "CollectionSpace-CollectionObject";
\r
35 // replace WORKSPACE_UID for resource workspace
\r
36 static String CS_COLLECTIONOBJECT_WORKSPACE_UID = "9dd20955-fce7-4a87-8319-040ab9543f4f";
\r
38 public Document deleteCollectionObject(String csid)
\r
39 throws DocumentException, IOException {
\r
41 NuxeoRESTClient nxClient = getClient();
\r
42 List<String> pathParams = new ArrayList<String>();
\r
43 Map<String, String> queryParams = new HashMap<String, String>();
\r
45 pathParams.add("default");
\r
46 pathParams.add(csid);
\r
47 pathParams.add("deleteDocumentRestlet");
\r
48 Representation res = nxClient.get(pathParams, queryParams);
\r
49 SAXReader reader = new SAXReader();
\r
50 Document document = reader.read(res.getStream());
\r
55 public Document getCollectionObject(String csid) throws DocumentException,
\r
57 List<String> pathParams = new ArrayList<String>();
\r
58 Map<String, String> queryParams = new HashMap<String, String>();
\r
60 pathParams.add("default");
\r
61 pathParams.add(csid);
\r
62 pathParams.add("export");
\r
63 queryParams.put("format", "XML");
\r
65 NuxeoRESTClient nxClient = getClient();
\r
66 Representation res = nxClient.get(pathParams, queryParams);
\r
68 SAXReader reader = new SAXReader();
\r
69 Document document = reader.read(res.getStream());
\r
74 public Document getCollectionObjectList() throws DocumentException,
\r
76 Document result = null;
\r
78 NuxeoRESTClient nxClient = getClient();
\r
79 List<String> pathParams = new ArrayList<String>();
\r
80 Map<String, String> queryParams = new HashMap<String, String>();
\r
81 pathParams = Arrays.asList("default",
\r
82 CS_COLLECTIONOBJECT_WORKSPACE_UID, "browse");
\r
83 Representation res = nxClient.get(pathParams, queryParams);
\r
84 SAXReader reader = new SAXReader();
\r
85 result = reader.read(res.getStream());
\r
90 public Document postCollectionObject(CollectionObject co)
\r
91 throws DocumentException, IOException {
\r
92 NuxeoRESTClient nxClient = getClient();
\r
94 List<String> pathParams = new ArrayList<String>();
\r
95 Map<String, String> queryParams = new HashMap<String, String>();
\r
96 pathParams.add("default");
\r
97 pathParams.add(CS_COLLECTIONOBJECT_WORKSPACE_UID);
\r
98 pathParams.add("createDocument");
\r
99 queryParams.put("docType", CO_NUXEO_DOCTYPE);
\r
101 // a default title for the Dublin Core schema
\r
102 queryParams.put("dublincore:title", CO_NUXEO_DC_TITLE);
\r
104 // CollectionObject core values
\r
105 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
106 + CollectionObjectJAXBSchema.OBJECT_NUMBER, co
\r
107 .getObjectNumber());
\r
108 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
109 + CollectionObjectJAXBSchema.OTHER_NUMBER, co.getOtherNumber());
\r
110 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
111 + CollectionObjectJAXBSchema.BRIEF_DESCRIPTION, co
\r
112 .getBriefDescription());
\r
113 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
114 + CollectionObjectJAXBSchema.COMMENTS, co.getComments());
\r
115 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
116 + CollectionObjectJAXBSchema.DIST_FEATURES, co
\r
117 .getDistFeatures());
\r
118 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
119 + CollectionObjectJAXBSchema.OBJECT_NAME, co.getObjectName());
\r
120 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
121 + CollectionObjectJAXBSchema.RESPONSIBLE_DEPT, co
\r
122 .getResponsibleDept());
\r
123 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
124 + CollectionObjectJAXBSchema.TITLE, co.getTitle());
\r
126 ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
\r
127 Representation res = nxClient.post(pathParams, queryParams, bais);
\r
129 SAXReader reader = new SAXReader();
\r
130 Document document = reader.read(res.getStream());
\r
135 public Document putCollectionObject(String csid, CollectionObject theUpdate)
\r
136 throws DocumentException, IOException {
\r
137 List<String> pathParams = new ArrayList<String>();
\r
138 Map<String, String> queryParams = new HashMap<String, String>();
\r
139 pathParams.add("default");
\r
140 pathParams.add(csid);
\r
141 pathParams.add("updateDocumentRestlet");
\r
143 // todo: intelligent merge needed
\r
144 if (theUpdate.getObjectNumber() != null) {
\r
145 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
146 + CollectionObjectJAXBSchema.OBJECT_NUMBER, theUpdate
\r
147 .getObjectNumber());
\r
150 if (theUpdate.getOtherNumber() != null) {
\r
151 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
152 + CollectionObjectJAXBSchema.OTHER_NUMBER, theUpdate
\r
153 .getOtherNumber());
\r
156 if (theUpdate.getBriefDescription() != null) {
\r
157 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
158 + CollectionObjectJAXBSchema.BRIEF_DESCRIPTION, theUpdate
\r
159 .getBriefDescription());
\r
162 if (theUpdate.getComments() != null) {
\r
163 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
164 + CollectionObjectJAXBSchema.COMMENTS, theUpdate
\r
168 if (theUpdate.getDistFeatures() != null) {
\r
169 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
170 + CollectionObjectJAXBSchema.DIST_FEATURES, theUpdate
\r
171 .getDistFeatures());
\r
174 if (theUpdate.getObjectName() != null) {
\r
175 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
176 + CollectionObjectJAXBSchema.OBJECT_NAME, theUpdate
\r
180 if (theUpdate.getResponsibleDept() != null) {
\r
181 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
182 + CollectionObjectJAXBSchema.RESPONSIBLE_DEPT, theUpdate
\r
183 .getResponsibleDept());
\r
186 if (theUpdate.getTitle() != null) {
\r
187 queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"
\r
188 + CollectionObjectJAXBSchema.TITLE, theUpdate.getTitle());
\r
191 NuxeoRESTClient nxClient = getClient();
\r
192 Representation res = nxClient.get(pathParams, queryParams);
\r
193 SAXReader reader = new SAXReader();
\r
194 Document document = reader.read(res.getStream());
\r