--- /dev/null
+/**\r
+ * \r
+ */\r
+package org.collectionspace.services;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.collectionspace.services.nuxeo.NuxeoRESTClient;\r
+import org.collectionspace.services.nuxeo.CollectionSpaceServiceNuxeoImpl;\r
+import org.collectionspace.services.collectionobject.CollectionObject;\r
+import org.collectionspace.services.CollectionObjectJAXBSchema;\r
+\r
+import org.dom4j.Document;\r
+import org.dom4j.DocumentException;\r
+import org.dom4j.io.SAXReader;\r
+import org.restlet.resource.Representation;\r
+\r
+/**\r
+ * @author remillet\r
+ * \r
+ */\r
+public class CollectionObjectServiceNuxeoImpl extends\r
+ CollectionSpaceServiceNuxeoImpl implements CollectionObjectService {\r
+\r
+ final static String CO_NUXEO_DOCTYPE = "CollectionObject";\r
+ final static String CO_NUXEO_SCHEMA_NAME = "collectionobject";\r
+ final static String CO_NUXEO_DC_TITLE = "CollectionSpace-CollectionObject";\r
+\r
+ // replace WORKSPACE_UID for resource workspace\r
+ static String CS_COLLECTIONOBJECT_WORKSPACE_UID = "e4a8e3d4-0954-4c10-963a-cc4ed09d5112";\r
+\r
+ public Document deleteCollectionObject(String csid)\r
+ throws DocumentException, IOException {\r
+\r
+ NuxeoRESTClient nxClient = getClient();\r
+ List<String> pathParams = new ArrayList<String>();\r
+ Map<String, String> queryParams = new HashMap<String, String>();\r
+\r
+ pathParams.add("default");\r
+ pathParams.add(csid);\r
+ pathParams.add("deleteDocumentRestlet");\r
+ Representation res = nxClient.get(pathParams, queryParams);\r
+ SAXReader reader = new SAXReader();\r
+ Document document = reader.read(res.getStream());\r
+ \r
+ return document;\r
+ }\r
+\r
+ public Document getCollectionObject(String csid) throws DocumentException,\r
+ IOException {\r
+ List<String> pathParams = new ArrayList<String>();\r
+ Map<String, String> queryParams = new HashMap<String, String>();\r
+\r
+ pathParams.add("default");\r
+ pathParams.add(csid);\r
+ pathParams.add("export");\r
+ queryParams.put("format", "XML");\r
+\r
+ NuxeoRESTClient nxClient = getClient();\r
+ Representation res = nxClient.get(pathParams, queryParams);\r
+\r
+ SAXReader reader = new SAXReader();\r
+ Document document = reader.read(res.getStream());\r
+\r
+ return document;\r
+ }\r
+\r
+ public Document getCollectionObjectList() throws DocumentException,\r
+ IOException {\r
+ Document result = null;\r
+\r
+ NuxeoRESTClient nxClient = getClient();\r
+ List<String> pathParams = new ArrayList<String>();\r
+ Map<String, String> queryParams = new HashMap<String, String>();\r
+ pathParams = Arrays.asList("default",\r
+ CS_COLLECTIONOBJECT_WORKSPACE_UID, "browse");\r
+ Representation res = nxClient.get(pathParams, queryParams);\r
+ SAXReader reader = new SAXReader();\r
+ result = reader.read(res.getStream());\r
+\r
+ return result;\r
+ }\r
+\r
+ public Document postCollectionObject(CollectionObject co)\r
+ throws DocumentException, IOException {\r
+ NuxeoRESTClient nxClient = getClient();\r
+\r
+ List<String> pathParams = new ArrayList<String>();\r
+ Map<String, String> queryParams = new HashMap<String, String>();\r
+ pathParams.add("default");\r
+ pathParams.add(CS_COLLECTIONOBJECT_WORKSPACE_UID);\r
+ pathParams.add("createDocument");\r
+ queryParams.put("docType", CO_NUXEO_DOCTYPE);\r
+\r
+ // a default title for the Dublin Core schema\r
+ queryParams.put("dublincore:title", CO_NUXEO_DC_TITLE);\r
+\r
+ // CollectionObject core values\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.OBJECT_NUMBER, co\r
+ .getObjectNumber());\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.OTHER_NUMBER, co.getOtherNumber());\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.BRIEF_DESCRIPTION, co\r
+ .getBriefDescription());\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.COMMENTS, co.getComments());\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.DIST_FEATURES, co\r
+ .getDistFeatures());\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.OBJECT_NAME, co.getObjectName());\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.RESPONSIBLE_DEPT, co\r
+ .getResponsibleDept());\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.TITLE, co.getTitle());\r
+\r
+ ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);\r
+ Representation res = nxClient.post(pathParams, queryParams, bais);\r
+\r
+ SAXReader reader = new SAXReader();\r
+ Document document = reader.read(res.getStream());\r
+\r
+ return document;\r
+ }\r
+\r
+ public Document putCollectionObject(String csid, CollectionObject theUpdate)\r
+ throws DocumentException, IOException {\r
+ List<String> pathParams = new ArrayList<String>();\r
+ Map<String, String> queryParams = new HashMap<String, String>();\r
+ pathParams.add("default");\r
+ pathParams.add(csid);\r
+ pathParams.add("updateDocumentRestlet");\r
+\r
+ // todo: intelligent merge needed\r
+ if (theUpdate.getObjectNumber() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.OBJECT_NUMBER, theUpdate\r
+ .getObjectNumber());\r
+ }\r
+\r
+ if (theUpdate.getOtherNumber() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.OTHER_NUMBER, theUpdate\r
+ .getOtherNumber());\r
+ }\r
+\r
+ if (theUpdate.getBriefDescription() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.BRIEF_DESCRIPTION, theUpdate\r
+ .getBriefDescription());\r
+ }\r
+\r
+ if (theUpdate.getComments() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.COMMENTS, theUpdate\r
+ .getComments());\r
+ }\r
+\r
+ if (theUpdate.getDistFeatures() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.DIST_FEATURES, theUpdate\r
+ .getDistFeatures());\r
+ }\r
+\r
+ if (theUpdate.getObjectName() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.OBJECT_NAME, theUpdate\r
+ .getObjectName());\r
+ }\r
+\r
+ if (theUpdate.getResponsibleDept() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.RESPONSIBLE_DEPT, theUpdate\r
+ .getResponsibleDept());\r
+ }\r
+\r
+ if (theUpdate.getTitle() != null) {\r
+ queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
+ + CollectionObjectJAXBSchema.TITLE, theUpdate.getTitle());\r
+ }\r
+\r
+ NuxeoRESTClient nxClient = getClient();\r
+ Representation res = nxClient.get(pathParams, queryParams);\r
+ SAXReader reader = new SAXReader();\r
+ Document document = reader.read(res.getStream());\r
+\r
+ return document;\r
+ }\r
+\r
+}\r