]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
fe863707f5c9cc84422400989c7031abb7c9b718
[tmp/jakarta-migration.git] /
1 /**\r
2  * \r
3  */\r
4 package org.collectionspace.services;\r
5 \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
13 \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
19 \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
24 \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
29 \r
30 \r
31 \r
32 /**\r
33  * @author remillet\r
34  * \r
35  */\r
36 public class CollectionObjectServiceNuxeoImpl extends\r
37                 CollectionSpaceServiceNuxeoImpl implements CollectionObjectService {\r
38 \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
42 \r
43         // replace WORKSPACE_UID for resource workspace\r
44         static String CS_COLLECTIONOBJECT_WORKSPACE_UID = "9dd20955-fce7-4a87-8319-040ab9543f4f";\r
45 \r
46         public Document deleteCollectionObject(String csid)\r
47                         throws DocumentException, IOException {\r
48 \r
49                 NuxeoRESTClient nxClient = getClient();\r
50                 List<String> pathParams = new ArrayList<String>();\r
51                 Map<String, String> queryParams = new HashMap<String, String>();\r
52 \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
59                 \r
60                 return document;\r
61         }\r
62 \r
63         public Document getCollectionObject(String csid) throws DocumentException,\r
64                         IOException {\r
65                 \r
66                 // Calling via Nuxeo Java API\r
67                 //getCollectionObjectViaJavaAPI(csid);\r
68                 \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
72 \r
73                 pathParams.add("default");\r
74                 pathParams.add(csid);\r
75                 pathParams.add("export");\r
76                 queryParams.put("format", "XML");\r
77 \r
78                 NuxeoRESTClient nxClient = getClient();\r
79                 Representation res = nxClient.get(pathParams, queryParams);\r
80 \r
81                 SAXReader reader = new SAXReader();\r
82                 Document document = reader.read(res.getStream());\r
83 \r
84                 return document;\r
85         }\r
86         \r
87         /*\r
88          * Prototype method for calling the Nuxeo Java API\r
89          */\r
90         private Document getCollectionObjectViaJavaAPI(String csid)\r
91                         throws DocumentException, IOException {\r
92                 Document result = null;\r
93                 RepositoryInstance repoSession = null;\r
94                 \r
95                 try {\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
103                         }\r
104                 } finally {\r
105                         if (repoSession != null) {\r
106                                 releaseRepositorySession(repoSession);\r
107                         }\r
108                 }\r
109                 \r
110                 // Dump out the contents of the result to stdout\r
111                 System.out.println(result.asXML());\r
112                 \r
113                 return result;\r
114         }\r
115 \r
116         public Document getCollectionObjectList() throws DocumentException,\r
117                         IOException {\r
118                 Document result = null;\r
119 \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
128 \r
129                 return result;\r
130         }\r
131 \r
132         public Document postCollectionObject(CollectionObject co)\r
133                         throws DocumentException, IOException {\r
134                 NuxeoRESTClient nxClient = getClient();\r
135 \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
142 \r
143                 // a default title for the Dublin Core schema\r
144                 queryParams.put("dublincore:title", CO_NUXEO_DC_TITLE);\r
145 \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
167 \r
168                 ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);\r
169                 Representation res = nxClient.post(pathParams, queryParams, bais);\r
170 \r
171                 SAXReader reader = new SAXReader();\r
172                 Document document = reader.read(res.getStream());\r
173 \r
174                 return document;\r
175         }\r
176 \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
184 \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
190                 }\r
191 \r
192                 if (theUpdate.getOtherNumber() != null) {\r
193                         queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
194                                         + CollectionObjectJAXBSchema.OTHER_NUMBER, theUpdate\r
195                                         .getOtherNumber());\r
196                 }\r
197 \r
198                 if (theUpdate.getBriefDescription() != null) {\r
199                         queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
200                                         + CollectionObjectJAXBSchema.BRIEF_DESCRIPTION, theUpdate\r
201                                         .getBriefDescription());\r
202                 }\r
203 \r
204                 if (theUpdate.getComments() != null) {\r
205                         queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
206                                         + CollectionObjectJAXBSchema.COMMENTS, theUpdate\r
207                                         .getComments());\r
208                 }\r
209 \r
210                 if (theUpdate.getDistFeatures() != null) {\r
211                         queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
212                                         + CollectionObjectJAXBSchema.DIST_FEATURES, theUpdate\r
213                                         .getDistFeatures());\r
214                 }\r
215 \r
216                 if (theUpdate.getObjectName() != null) {\r
217                         queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
218                                         + CollectionObjectJAXBSchema.OBJECT_NAME, theUpdate\r
219                                         .getObjectName());\r
220                 }\r
221 \r
222                 if (theUpdate.getResponsibleDept() != null) {\r
223                         queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
224                                         + CollectionObjectJAXBSchema.RESPONSIBLE_DEPT, theUpdate\r
225                                         .getResponsibleDept());\r
226                 }\r
227 \r
228                 if (theUpdate.getTitle() != null) {\r
229                         queryParams.put(CO_NUXEO_SCHEMA_NAME + ":"\r
230                                         + CollectionObjectJAXBSchema.TITLE, theUpdate.getTitle());\r
231                 }\r
232 \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
237 \r
238                 return document;\r
239         }\r
240 \r
241 }\r