]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
ee006622b566b8139a4ee8427c459ac1d8930d86
[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         obj = input.getPart(label);\r
340         /*\r
341         for(PayloadInputPart part : input.getParts()){\r
342             String partLabel = part.getHeaders().getFirst("label");\r
343             if(label.equalsIgnoreCase(partLabel)){\r
344                 String partStr = part.getBodyAsString();\r
345                 if(logger.isDebugEnabled()){\r
346                     logger.debug("extracted part str=\n" + partStr);\r
347                 }\r
348                 obj = part.getBody(clazz, null);\r
349                 if(logger.isDebugEnabled()){\r
350                     logger.debug("extracted part obj=\n", obj, clazz);\r
351                 }\r
352                 break;\r
353             }\r
354         }\r
355         */\r
356         return obj;\r
357     }\r
358 \r
359         public static void main(String[] args) {\r
360 \r
361         // Configure logging.\r
362                 BasicConfigurator.configure();\r
363 \r
364         logger.info("VocabularyBaseImport starting...");\r
365 \r
366                 Sample vbi = new Sample();\r
367         VocabulariesCommonList vocabularies;\r
368         List<String> vocabIds;\r
369         String details = "";\r
370 \r
371         // Optionally delete all vocabularies and vocabulary items.\r
372 \r
373         boolean ENABLE_DELETE_ALL = false;\r
374         if (ENABLE_DELETE_ALL) {\r
375 \r
376             logger.info("Deleting all vocabulary items and vocabularies ...");\r
377 \r
378             // For each vocabulary ...\r
379             vocabularies = vbi.readVocabularies();\r
380             vocabIds = vbi.readVocabularyIds(vocabularies);\r
381             for (String vocabId : vocabIds) {\r
382                 logger.info("Deleting all vocabulary items for vocabulary ...");\r
383                 vbi.deleteAllItemsForVocab(vocabId);\r
384                 logger.info("Deleting vocabulary ...");\r
385                 vbi.deleteVocabulary(vocabId);\r
386             }\r
387 \r
388             logger.info("Reading vocabularies after deletion ...");\r
389             vocabularies = vbi.readVocabularies();\r
390             details = vbi.displayAllVocabularies(vocabularies);\r
391             logger.info(details);\r
392 \r
393             logger.info("Reading items in each vocabulary after deletion ...");\r
394             vocabIds = vbi.readVocabularyIds(vocabularies);\r
395             for (String vocabId : vocabIds) {\r
396                 VocabularyitemsCommonList items = vbi.readItemsInVocab(vocabId);\r
397                 details = vbi.displayAllVocabularyItems(items);\r
398                 logger.info(details);\r
399             }\r
400 \r
401         }\r
402 \r
403         // Create new vocabularies, each populated with vocabulary items.\r
404 \r
405                 final String acquisitionMethodsVocabName = "Acquisition Methods";\r
406                 final String entryMethodsVocabName = "Entry Methods";\r
407                 final String entryReasonsVocabName = "Entry Reasons";\r
408                 final String responsibleDeptsVocabName = "Responsible Departments";\r
409 \r
410                 List<String> acquisitionMethodsEnumValues = \r
411                         Arrays.asList("Gift","Purchase","Exchange","Transfer","Treasure");\r
412                 List<String> entryMethodsEnumValues = \r
413                         Arrays.asList("In person","Post","Found on doorstep");\r
414                 List<String> entryReasonsEnumValues = \r
415                         Arrays.asList("Enquiry","Commission","Loan");\r
416                 List<String> respDeptNamesEnumValues = \r
417                         Arrays.asList("Antiquities","Architecture and Design","Decorative Arts",\r
418                                                                         "Ethnography","Herpetology","Media and Performance Art",\r
419                                                                         "Paintings and Sculpture","Paleobotany","Photographs",\r
420                                                                         "Prints and Drawings");\r
421         \r
422                 vbi.createEnumeration(acquisitionMethodsVocabName, acquisitionMethodsEnumValues);\r
423                 vbi.createEnumeration(entryMethodsVocabName, entryMethodsEnumValues);\r
424                 vbi.createEnumeration(entryReasonsVocabName, entryReasonsEnumValues);\r
425                 vbi.createEnumeration(responsibleDeptsVocabName, respDeptNamesEnumValues);\r
426 \r
427                 logger.info("VocabularyBaseImport complete.");\r
428 \r
429         logger.info("Reading vocabularies and items ...");\r
430         // Get a list of vocabularies.\r
431         vocabularies = vbi.readVocabularies();\r
432         // For each vocabulary ...\r
433         for (VocabulariesCommonList.VocabularyListItem\r
434             vocabulary : vocabularies.getVocabularyListItem()) {\r
435             // Get its display name.\r
436             logger.info(vocabulary.getDisplayName());\r
437             // Get a list of the vocabulary items in this vocabulary.\r
438             VocabularyitemsCommonList items =\r
439                 vbi.readItemsInVocab(vocabulary.getCsid());\r
440             // For each vocabulary item ...\r
441             for (VocabularyitemsCommonList.VocabularyitemListItem\r
442                 item : items.getVocabularyitemListItem()) {\r
443                 // Get its display name.\r
444                 logger.info(" " + item.getDisplayName());\r
445             }\r
446         }\r
447 \r
448         // Sample alternate methods of reading all vocabularies and\r
449         // vocabulary items separately.\r
450         boolean RUN_ADDITIONAL_SAMPLES = false;\r
451         if (RUN_ADDITIONAL_SAMPLES) {\r
452 \r
453             logger.info("Reading all vocabularies ...");\r
454             details = vbi.displayAllVocabularies(vocabularies);\r
455             logger.info(details);\r
456 \r
457             logger.info("Reading all vocabulary items ...");\r
458             vocabIds = vbi.readVocabularyIds(vocabularies);\r
459             for (String vocabId : vocabIds) {\r
460                 VocabularyitemsCommonList items = vbi.readItemsInVocab(vocabId);\r
461                 details = vbi.displayAllVocabularyItems(items);\r
462                 logger.info(details);\r
463             }\r
464 \r
465         }\r
466 \r
467         }\r
468 \r
469 }\r