]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
7a8aa883957989453ae6cd823b9d8aa0483f3363
[tmp/jakarta-migration.git] /
1 /**\r
2  * This document is a part of the source code and related artifacts\r
3  * for CollectionSpace, an open source collections management system\r
4  * for museums and related institutions:\r
5  *\r
6  * http://www.collectionspace.org\r
7  * http://wiki.collectionspace.org\r
8  *\r
9  * Copyright (c)) 2009 Regents of the University of California\r
10  *\r
11  * Licensed under the Educational Community License (ECL), Version 2.0.\r
12  * You may not use this file except in compliance with this License.\r
13  *\r
14  * You may obtain a copy of the ECL 2.0 License at\r
15  * https://source.collectionspace.org/collection-space/LICENSE.txt\r
16  *\r
17  * Unless required by applicable law or agreed to in writing, software\r
18  * distributed under the License is distributed on an "AS IS" BASIS,\r
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
20  * See the License for the specific language governing permissions and\r
21  * limitations under the License.\r
22  */\r
23 \r
24 package org.collectionspace.services.vocabulary.client.sample;\r
25 \r
26 import java.util.ArrayList;\r
27 import java.util.Arrays;\r
28 import java.util.HashMap;\r
29 import java.util.List;\r
30 \r
31 import javax.ws.rs.core.MediaType;\r
32 import javax.ws.rs.core.MultivaluedMap;\r
33 import javax.ws.rs.core.Response;\r
34 \r
35 import org.apache.log4j.BasicConfigurator;\r
36 //import org.collectionspace.services.VocabularyItemJAXBSchema; \r
37 import org.collectionspace.services.common.vocabulary.AuthorityItemJAXBSchema;\r
38 \r
39 import org.collectionspace.services.client.PayloadInputPart;\r
40 import org.collectionspace.services.client.PoxPayloadIn;\r
41 import org.collectionspace.services.client.PoxPayloadOut;\r
42 import org.collectionspace.services.client.VocabularyClient;\r
43 import org.collectionspace.services.client.VocabularyClientUtils;\r
44 import org.collectionspace.services.client.test.ServiceRequestType;\r
45 import org.collectionspace.services.vocabulary.VocabulariesCommon;\r
46 import org.collectionspace.services.vocabulary.VocabulariesCommonList;\r
47 import org.collectionspace.services.vocabulary.VocabularyitemsCommon;\r
48 import org.collectionspace.services.vocabulary.VocabularyitemsCommonList;\r
49 import org.jboss.resteasy.client.ClientResponse;\r
50 import org.jboss.resteasy.plugins.providers.multipart.InputPart;\r
51 import org.jboss.resteasy.plugins.providers.multipart.OutputPart;\r
52 import org.slf4j.Logger;\r
53 import org.slf4j.LoggerFactory;\r
54 \r
55 /**\r
56  * VocabularyServiceTest, carries out tests against a\r
57  * deployed and running Vocabulary Service.\r
58  *\r
59  * $LastChangedRevision$\r
60  * $LastChangedDate$\r
61  */\r
62 public class Sample {\r
63     private static final Logger logger =\r
64         LoggerFactory.getLogger(Sample.class);\r
65 \r
66     // Instance variables specific to this test.\r
67     private VocabularyClient client = new VocabularyClient();\r
68     final String SERVICE_PATH_COMPONENT = "vocabularies";\r
69     final String ITEM_SERVICE_PATH_COMPONENT = "items";\r
70 \r
71 \r
72     // ---------------------------------------------------------------\r
73     // Create\r
74     // ---------------------------------------------------------------\r
75 \r
76     public void createEnumeration(String vocabName, List<String> enumValues ) {\r
77 \r
78         // Expected status code: 201 Created\r
79         int EXPECTED_STATUS_CODE = Response.Status.CREATED.getStatusCode();\r
80         // Type of service request being tested\r
81         ServiceRequestType REQUEST_TYPE = ServiceRequestType.CREATE;\r
82 \r
83         if(logger.isDebugEnabled()){\r
84                 logger.debug("Import: Create vocabulary: \"" + vocabName +"\"");\r
85         }\r
86 \r
87         String displaySuffix = "displayName-" + System.currentTimeMillis(); //TODO: Laramie20100728 temp fix, made-up displaySuffix.\r
88         String baseVocabRefName = VocabularyClientUtils.createVocabularyRefName(vocabName, displaySuffix);   //TODO: Laramie20100728 temp fix  was vocabName, false\r
89         String fullVocabRefName = VocabularyClientUtils.createVocabularyRefName(vocabName, displaySuffix);   //TODO: Laramie20100728 temp fix  was vocabName, true\r
90         PoxPayloadOut multipart = VocabularyClientUtils.createEnumerationInstance(\r
91                         vocabName, fullVocabRefName, client.getCommonPartName());\r
92         ClientResponse<Response> res = client.create(multipart);\r
93 \r
94         int statusCode = res.getStatus();\r
95 \r
96         if(!REQUEST_TYPE.isValidStatusCode(statusCode)) {\r
97                 throw new RuntimeException("Could not create enumeration: \""+vocabName\r
98                                 +"\" "+ VocabularyClientUtils.invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
99         }\r
100         if(statusCode != EXPECTED_STATUS_CODE) {\r
101                 throw new RuntimeException("Unexpected Status when creating enumeration: \""\r
102                                 +vocabName +"\", Status:"+ statusCode);\r
103         }\r
104 \r
105         // Store the ID returned from this create operation\r
106         // for additional tests below.\r
107         String newVocabId = VocabularyClientUtils.extractId(res);\r
108         if(logger.isDebugEnabled()){\r
109                 logger.debug("Import: Created vocabulary: \"" + vocabName +"\" ID:"\r
110                                 +newVocabId );\r
111         }\r
112         for(String itemName : enumValues){\r
113             HashMap<String, String> itemInfo = new HashMap<String, String>();\r
114             itemInfo.put(AuthorityItemJAXBSchema.DISPLAY_NAME, itemName);\r
115                 VocabularyClientUtils.createItemInVocabulary(newVocabId, \r
116                                 baseVocabRefName, itemInfo, client);\r
117         }\r
118     }\r
119     \r
120    // ---------------------------------------------------------------\r
121    // Read\r
122    // ---------------------------------------------------------------\r
123 \r
124    private VocabulariesCommonList readVocabularies() {\r
125 \r
126         // Expected status code: 200 OK\r
127         int EXPECTED_STATUS_CODE = Response.Status.OK.getStatusCode();\r
128         // Type of service request being tested\r
129         ServiceRequestType REQUEST_TYPE = ServiceRequestType.READ;\r
130 \r
131         // Submit the request to the service and store the response.\r
132         ClientResponse<VocabulariesCommonList> res = client.readList();\r
133         VocabulariesCommonList list = res.getEntity();\r
134 \r
135         int statusCode = res.getStatus();\r
136         if(!REQUEST_TYPE.isValidStatusCode(statusCode)) {\r
137                 throw new RuntimeException("Could not read list of vocabularies: "\r
138                 + VocabularyClientUtils.invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
139         }\r
140         if(statusCode != EXPECTED_STATUS_CODE) {\r
141                 throw new RuntimeException("Unexpected Status when reading " +\r
142                 "list of vocabularies, Status:"+ statusCode);\r
143         }\r
144 \r
145         return list;\r
146    }\r
147 \r
148     private List<String> readVocabularyIds(VocabulariesCommonList list) {\r
149 \r
150         List<String> ids = new ArrayList<String>();\r
151         List<VocabulariesCommonList.VocabularyListItem> vocabularies =\r
152             list.getVocabularyListItem();\r
153         for (VocabulariesCommonList.VocabularyListItem vocabulary : vocabularies) {\r
154             ids.add(vocabulary.getCsid());\r
155         }\r
156         return ids;\r
157    }\r
158     \r
159    private VocabulariesCommon readVocabulary(String vocabId) {\r
160 \r
161         // Expected status code: 200 OK\r
162         int EXPECTED_STATUS_CODE = Response.Status.OK.getStatusCode();\r
163         // Type of service request being tested\r
164         ServiceRequestType REQUEST_TYPE = ServiceRequestType.READ;\r
165 \r
166         // Submit the request to the service and store the response.\r
167         VocabulariesCommon vocabulary = null;\r
168         try {\r
169             ClientResponse<String> res = client.read(vocabId);\r
170             int statusCode = res.getStatus();\r
171             if(!REQUEST_TYPE.isValidStatusCode(statusCode)) {\r
172                 throw new RuntimeException("Could not read vocabulary"\r
173                     + VocabularyClientUtils.invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
174             }\r
175             if(statusCode != EXPECTED_STATUS_CODE) {\r
176                 throw new RuntimeException("Unexpected Status when reading " +\r
177                     "vocabulary, Status:"+ statusCode);\r
178             }\r
179             PoxPayloadIn input = new PoxPayloadIn(res.getEntity());\r
180             vocabulary = (VocabulariesCommon) extractPart(input,\r
181                     client.getCommonPartName(), VocabulariesCommon.class);\r
182         } catch (Exception e) {\r
183             throw new RuntimeException("Could not read vocabulary: ", e);\r
184         }\r
185 \r
186         return vocabulary;\r
187     }\r
188 \r
189     private VocabularyitemsCommonList readItemsInVocab(String vocabId) {\r
190 \r
191         // Expected status code: 200 OK\r
192         int EXPECTED_STATUS_CODE = Response.Status.OK.getStatusCode();\r
193         // Type of service request being tested\r
194         ServiceRequestType REQUEST_TYPE = ServiceRequestType.READ;\r
195 \r
196         // Submit the request to the service and store the response.\r
197                           //  readItemList(String inAuthority, String partialTerm, String keywords)\r
198         ClientResponse<VocabularyitemsCommonList> res =  client.readItemList(vocabId, "", ""); //TODO: figure out these params.  I just put in empty string to make it recompile after refactoring.  Laramie20100728\r
199         VocabularyitemsCommonList list = res.getEntity();\r
200 \r
201         int statusCode = res.getStatus();\r
202 \r
203         if(!REQUEST_TYPE.isValidStatusCode(statusCode)) {\r
204                 throw new RuntimeException("Could not read items in vocabulary: "\r
205                 + VocabularyClientUtils.invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
206         }\r
207         if(statusCode != EXPECTED_STATUS_CODE) {\r
208                 throw new RuntimeException("Unexpected Status when reading " +\r
209                 "items in vocabulary, Status:"+ statusCode);\r
210         }\r
211 \r
212         return list;\r
213     }\r
214 \r
215     private List<String> readVocabularyItemIds(VocabularyitemsCommonList list) {\r
216 \r
217         List<String> ids = new ArrayList<String>();\r
218         List<VocabularyitemsCommonList.VocabularyitemListItem> items =\r
219             list.getVocabularyitemListItem();\r
220         for (VocabularyitemsCommonList.VocabularyitemListItem item : items) {\r
221             ids.add(item.getCsid());\r
222         }\r
223         return ids;\r
224    }\r
225 \r
226     // ---------------------------------------------------------------\r
227     // Delete\r
228     // ---------------------------------------------------------------\r
229 \r
230     private void deleteVocabulary(String vcsid) {\r
231          // Expected status code: 200 OK\r
232         int EXPECTED_STATUS_CODE = Response.Status.OK.getStatusCode();\r
233         // Type of service request being tested\r
234         ServiceRequestType REQUEST_TYPE = ServiceRequestType.DELETE;\r
235 \r
236         ClientResponse<Response> res = client.delete(vcsid);\r
237         int statusCode = res.getStatus();\r
238 \r
239         if(!REQUEST_TYPE.isValidStatusCode(statusCode)) {\r
240                 throw new RuntimeException("Could not delete vocabulary: "\r
241                 + VocabularyClientUtils.invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
242         }\r
243         if(statusCode != EXPECTED_STATUS_CODE) {\r
244                 throw new RuntimeException("Unexpected Status when deleting " +\r
245                 "vocabulary, Status:"+ statusCode);\r
246         }\r
247     }\r
248 \r
249     private void deleteAllVocabularies() {\r
250         List<String> ids = readVocabularyIds(readVocabularies());\r
251         for (String id : ids) {\r
252             deleteVocabulary(id);\r
253         }\r
254     }\r
255 \r
256         private void deleteVocabularyItem(String vcsid, String itemcsid) {\r
257          // Expected status code: 200 OK\r
258         int EXPECTED_STATUS_CODE = Response.Status.OK.getStatusCode();\r
259         // Type of service request being tested\r
260         ServiceRequestType REQUEST_TYPE = ServiceRequestType.DELETE;\r
261 \r
262         ClientResponse<Response> res = client.deleteItem(vcsid, itemcsid);\r
263         int statusCode = res.getStatus();\r
264 \r
265         if(!REQUEST_TYPE.isValidStatusCode(statusCode)) {\r
266                 throw new RuntimeException("Could not delete vocabulary item: "\r
267                 + VocabularyClientUtils.invalidStatusCodeMessage(REQUEST_TYPE, statusCode));\r
268         }\r
269         if(statusCode != EXPECTED_STATUS_CODE) {\r
270                 throw new RuntimeException("Unexpected Status when deleting " +\r
271                 "vocabulary item, Status:"+ statusCode);\r
272         }\r
273     }\r
274 \r
275     private void deleteAllItemsForVocab(String vocabId) {\r
276         List<String> itemIds = readVocabularyItemIds(readItemsInVocab(vocabId));\r
277         for (String itemId : itemIds) {\r
278             deleteVocabularyItem(vocabId, itemId);\r
279         }\r
280     }\r
281 \r
282     // ---------------------------------------------------------------\r
283     // Utility methods used by tests above\r
284     // ---------------------------------------------------------------\r
285 \r
286     // Retrieve individual fields of vocabulary records.\r
287 \r
288     private String displayAllVocabularies(VocabulariesCommonList list) {\r
289         StringBuffer sb = new StringBuffer();\r
290             List<VocabulariesCommonList.VocabularyListItem> vocabularies =\r
291                     list.getVocabularyListItem();\r
292             int i = 0;\r
293         for (VocabulariesCommonList.VocabularyListItem vocabulary : vocabularies) {\r
294             sb.append("vocabulary [" + i + "]" + "\n");\r
295             sb.append(displayVocabularyDetails(vocabulary));\r
296             i++;\r
297         }\r
298         return sb.toString();\r
299     }\r
300 \r
301     private String displayVocabularyDetails(\r
302         VocabulariesCommonList.VocabularyListItem vocabulary) {\r
303             StringBuffer sb = new StringBuffer();\r
304             sb.append("displayName=" + vocabulary.getDisplayName() + "\n");\r
305             sb.append("vocabType=" + vocabulary.getVocabType() + "\n");\r
306             // sb.append("csid=" + vocabulary.getCsid() + "\n");\r
307             sb.append("URI=" + vocabulary.getUri() + "\n");\r
308         return sb.toString();\r
309     }\r
310 \r
311     // Retrieve individual fields of vocabulary item records.\r
312 \r
313     private String displayAllVocabularyItems(VocabularyitemsCommonList list) {\r
314         StringBuffer sb = new StringBuffer();\r
315         List<VocabularyitemsCommonList.VocabularyitemListItem> items =\r
316                 list.getVocabularyitemListItem();\r
317         int i = 0;\r
318         for (VocabularyitemsCommonList.VocabularyitemListItem item : items) {\r
319             sb.append("vocabulary item [" + i + "]" + "\n");\r
320             sb.append(displayVocabularyItemDetails(item));\r
321             i++;\r
322         }\r
323         return sb.toString();\r
324     }\r
325 \r
326     private String displayVocabularyItemDetails(\r
327         VocabularyitemsCommonList.VocabularyitemListItem item) {\r
328             StringBuffer sb = new StringBuffer();\r
329             sb.append("csid=" + item.getCsid() + "\n");\r
330             sb.append("displayName=" + item.getDisplayName() + "\n");\r
331             // sb.append("URI=" + item.getUri() + "\n");\r
332         return sb.toString();\r
333     }\r
334 \r
335     // TODO this should be moved to a common utils class\r
336     private Object extractPart(PoxPayloadIn input, String label,\r
337         Class clazz) throws Exception {\r
338         Object obj = null;\r
339         for(PayloadInputPart part : input.getParts()){\r
340             String partLabel = part.getHeaders().getFirst("label");\r
341             if(label.equalsIgnoreCase(partLabel)){\r
342                 String partStr = part.getBodyAsString();\r
343                 if(logger.isDebugEnabled()){\r
344                     logger.debug("extracted part str=\n" + partStr);\r
345                 }\r
346                 obj = part.getBody(clazz, null);\r
347                 if(logger.isDebugEnabled()){\r
348                     logger.debug("extracted part obj=\n", obj, clazz);\r
349                 }\r
350                 break;\r
351             }\r
352         }\r
353         return obj;\r
354     }\r
355 \r
356         public static void main(String[] args) {\r
357 \r
358         // Configure logging.\r
359                 BasicConfigurator.configure();\r
360 \r
361         logger.info("VocabularyBaseImport starting...");\r
362 \r
363                 Sample vbi = new Sample();\r
364         VocabulariesCommonList vocabularies;\r
365         List<String> vocabIds;\r
366         String details = "";\r
367 \r
368         // Optionally delete all vocabularies and vocabulary items.\r
369 \r
370         boolean ENABLE_DELETE_ALL = false;\r
371         if (ENABLE_DELETE_ALL) {\r
372 \r
373             logger.info("Deleting all vocabulary items and vocabularies ...");\r
374 \r
375             // For each vocabulary ...\r
376             vocabularies = vbi.readVocabularies();\r
377             vocabIds = vbi.readVocabularyIds(vocabularies);\r
378             for (String vocabId : vocabIds) {\r
379                 logger.info("Deleting all vocabulary items for vocabulary ...");\r
380                 vbi.deleteAllItemsForVocab(vocabId);\r
381                 logger.info("Deleting vocabulary ...");\r
382                 vbi.deleteVocabulary(vocabId);\r
383             }\r
384 \r
385             logger.info("Reading vocabularies after deletion ...");\r
386             vocabularies = vbi.readVocabularies();\r
387             details = vbi.displayAllVocabularies(vocabularies);\r
388             logger.info(details);\r
389 \r
390             logger.info("Reading items in each vocabulary after deletion ...");\r
391             vocabIds = vbi.readVocabularyIds(vocabularies);\r
392             for (String vocabId : vocabIds) {\r
393                 VocabularyitemsCommonList items = vbi.readItemsInVocab(vocabId);\r
394                 details = vbi.displayAllVocabularyItems(items);\r
395                 logger.info(details);\r
396             }\r
397 \r
398         }\r
399 \r
400         // Create new vocabularies, each populated with vocabulary items.\r
401 \r
402                 final String acquisitionMethodsVocabName = "Acquisition Methods";\r
403                 final String entryMethodsVocabName = "Entry Methods";\r
404                 final String entryReasonsVocabName = "Entry Reasons";\r
405                 final String responsibleDeptsVocabName = "Responsible Departments";\r
406 \r
407                 List<String> acquisitionMethodsEnumValues = \r
408                         Arrays.asList("Gift","Purchase","Exchange","Transfer","Treasure");\r
409                 List<String> entryMethodsEnumValues = \r
410                         Arrays.asList("In person","Post","Found on doorstep");\r
411                 List<String> entryReasonsEnumValues = \r
412                         Arrays.asList("Enquiry","Commission","Loan");\r
413                 List<String> respDeptNamesEnumValues = \r
414                         Arrays.asList("Antiquities","Architecture and Design","Decorative Arts",\r
415                                                                         "Ethnography","Herpetology","Media and Performance Art",\r
416                                                                         "Paintings and Sculpture","Paleobotany","Photographs",\r
417                                                                         "Prints and Drawings");\r
418         \r
419                 vbi.createEnumeration(acquisitionMethodsVocabName, acquisitionMethodsEnumValues);\r
420                 vbi.createEnumeration(entryMethodsVocabName, entryMethodsEnumValues);\r
421                 vbi.createEnumeration(entryReasonsVocabName, entryReasonsEnumValues);\r
422                 vbi.createEnumeration(responsibleDeptsVocabName, respDeptNamesEnumValues);\r
423 \r
424                 logger.info("VocabularyBaseImport complete.");\r
425 \r
426         logger.info("Reading vocabularies and items ...");\r
427         // Get a list of vocabularies.\r
428         vocabularies = vbi.readVocabularies();\r
429         // For each vocabulary ...\r
430         for (VocabulariesCommonList.VocabularyListItem\r
431             vocabulary : vocabularies.getVocabularyListItem()) {\r
432             // Get its display name.\r
433             logger.info(vocabulary.getDisplayName());\r
434             // Get a list of the vocabulary items in this vocabulary.\r
435             VocabularyitemsCommonList items =\r
436                 vbi.readItemsInVocab(vocabulary.getCsid());\r
437             // For each vocabulary item ...\r
438             for (VocabularyitemsCommonList.VocabularyitemListItem\r
439                 item : items.getVocabularyitemListItem()) {\r
440                 // Get its display name.\r
441                 logger.info(" " + item.getDisplayName());\r
442             }\r
443         }\r
444 \r
445         // Sample alternate methods of reading all vocabularies and\r
446         // vocabulary items separately.\r
447         boolean RUN_ADDITIONAL_SAMPLES = false;\r
448         if (RUN_ADDITIONAL_SAMPLES) {\r
449 \r
450             logger.info("Reading all vocabularies ...");\r
451             details = vbi.displayAllVocabularies(vocabularies);\r
452             logger.info(details);\r
453 \r
454             logger.info("Reading all vocabulary items ...");\r
455             vocabIds = vbi.readVocabularyIds(vocabularies);\r
456             for (String vocabId : vocabIds) {\r
457                 VocabularyitemsCommonList items = vbi.readItemsInVocab(vocabId);\r
458                 details = vbi.displayAllVocabularyItems(items);\r
459                 logger.info(details);\r
460             }\r
461 \r
462         }\r
463 \r
464         }\r
465 \r
466 }\r