1 package org.kuali.ole.docstore.discovery.service;
2
3 import com.thoughtworks.xstream.XStream;
4 import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
5 import org.kuali.ole.docstore.common.document.content.instance.*;
6 import org.kuali.ole.docstore.model.xmlpojo.ingest.AdditionalAttributes;
7
8
9
10
11
12
13
14
15
16 public class OleInstanceXmlConverterService {
17
18
19
20
21
22
23 public String generateInstanceCollectionsXml(InstanceCollection instanceCollection) {
24 XStream stream = new XStream();
25 stream = generateInstanceCollectionXml(stream);
26 String xml = stream.toXML(instanceCollection);
27 xml = xml.replace("<string>", "");
28 xml = xml.replace("</string>", "");
29 String output = xml.replace("<ole:instanceCollection>", "<ole:instanceCollection xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
30 " xsi:schemaLocation=\"http://ole.kuali.org/standards/ole-instance instance9.1.1-circulation.xsd\"\n" +
31 " xmlns:circ=\"http://ole.kuali.org/standards/ole-instance-circulation\"\n" +
32 " xmlns:ole=\"http://ole.kuali.org/standards/ole-instance\">");
33 return output;
34 }
35
36
37
38
39
40 public String generateInstanceCollectionsJSON(InstanceCollection instanceCollection) {
41 XStream stream = new XStream(new JettisonMappedXmlDriver());
42 stream.autodetectAnnotations(true);
43 stream.processAnnotations(InstanceCollection.class);
44 stream.setMode(XStream.NO_REFERENCES);
45 stream = generateInstanceCollectionXml(stream);
46
47 String jsonContent = stream.toXML(instanceCollection);
48 return jsonContent;
49
50 }
51
52
53
54
55
56 private XStream generateLocationXml(XStream xstream) {
57 xstream.alias("ole:location", Location.class);
58 xstream.aliasField("ole:primary", Location.class, "primary");
59 xstream.aliasField("ole:status", Location.class, "status");
60 xstream.aliasField("circ:locationLevel", Location.class, "locationLevel");
61 xstream = generateLocationLevelXml(xstream);
62 return xstream;
63 }
64
65
66
67
68
69 private XStream generateLocationLevelXml(XStream xstream) {
70 xstream.alias("circ:locationLevel", LocationLevel.class);
71 xstream.aliasField("ole:name", LocationLevel.class, "name");
72 xstream.aliasField("ole:level", LocationLevel.class, "level");
73 xstream.aliasField("circ:locationLevel", LocationLevel.class, "locationLevel");
74 return xstream;
75 }
76
77
78
79
80
81 private XStream generateNoteXml(XStream xstream) {
82 xstream.alias("ole:note", Note.class);
83 xstream.aliasField("ole:value", Note.class, "value");
84
85 return xstream;
86 }
87
88
89
90
91
92 private XStream generateUriXml(XStream xstream) {
93 xstream.alias("ole:uri", Uri.class);
94 xstream.aliasField("ole:value", Uri.class, "value");
95 xstream.aliasField("ole:resolvable", Uri.class, "resolvable");
96 return xstream;
97 }
98
99
100
101
102
103 private XStream generateHighDensityStorageXml(XStream xstream) {
104 xstream.alias("ole:highDensityStorage", HighDensityStorage.class);
105 xstream.aliasField("ole:row", HighDensityStorage.class, "row");
106 xstream.omitField(HighDensityStorage.class, "module");
107 xstream.omitField(HighDensityStorage.class, "shelf");
108 xstream.omitField(HighDensityStorage.class, "tray");
109 xstream.aliasField("ole:module", HighDensityStorage.class, "module");
110 xstream.aliasField("ole:shelf", HighDensityStorage.class, "shelf");
111 xstream.aliasField("ole:tray", HighDensityStorage.class, "tray");
112 return xstream;
113 }
114
115
116
117
118
119 private XStream generateItemTypeXml(XStream xstream) {
120 xstream.alias("ole:itemType", ItemType.class);
121 xstream.aliasField("ole:codeValue", ItemType.class, "codeValue");
122 xstream.omitField(ItemType.class, "fullValue");
123 xstream.aliasField("ole:fullValue", ItemType.class, "fullValue");
124 xstream.aliasField("ole:typeOrSource", ItemType.class, "typeOrSource");
125 xstream = generateTypeOrSourceXml(xstream);
126 return xstream;
127 }
128
129
130
131
132
133 private XStream generateTypeOrSourceXml(XStream xstream) {
134 xstream.alias("typeOrSource", TypeOrSource.class);
135 xstream.aliasField("ole:pointer", TypeOrSource.class, "pointer");
136 xstream.aliasField("ole:text", TypeOrSource.class, "text");
137 return xstream;
138 }
139
140
141
142
143
144 private XStream generateStatisticalSearchingCodeXml(XStream xstream) {
145 xstream.alias("ole:statisticalSearchingCode", StatisticalSearchingCode.class);
146 xstream.aliasField("ole:codeValue", StatisticalSearchingCode.class, "codeValue");
147 xstream.aliasField("ole:fullValue", StatisticalSearchingCode.class, "fullValue");
148 xstream.aliasField("ole:typeOrSource", StatisticalSearchingCode.class, "typeOrSource");
149 return xstream;
150 }
151
152
153
154
155
156 private XStream generateIdentifierXml(XStream xstream) {
157 xstream.alias("ole:identifier", Identifier.class);
158 xstream.aliasField("ole:identifierValue", Identifier.class, "identifierValue");
159 xstream.aliasField("ole:source", Identifier.class, "source");
160 return xstream;
161 }
162
163
164
165
166
167 private XStream generateAccessInformationXml(XStream xstream) {
168 xstream.alias("ole:accessInformation", AccessInformation.class);
169 xstream.aliasField("ole:barcode", AccessInformation.class, "barcode");
170 xstream.aliasField("ole:uri", AccessInformation.class, "uri");
171 xstream = generateUriXml(xstream);
172 return xstream;
173 }
174
175
176
177
178
179 private XStream generateSourceHoldingsXml(XStream xstream) {
180 xstream.alias("ole:sourceHoldings", SourceHoldings.class);
181 xstream.aliasField("ole:holdingsIdentifier", SourceHoldings.class, "holdingsIdentifier");
182 xstream.aliasField("ole:name", SourceHoldings.class, "name");
183
184 xstream.aliasField("ole:primary", SourceHoldings.class, "primary");
185 xstream.aliasField("ole:extension", SourceHoldings.class, "extension");
186 xstream.aliasField("ole:holdings", SourceHoldings.class, "holdings");
187 return xstream;
188 }
189
190
191
192
193
194 private XStream generateShelvingOrderXml(XStream xstream) {
195 xstream.alias("ole:shelvingOrder", ShelvingOrder.class);
196 xstream.aliasField("ole:codeValue", ShelvingOrder.class, "codeValue");
197 xstream.aliasField("ole:fullValue", ShelvingOrder.class, "fullValue");
198 xstream.aliasField("ole:typeOrSource", ShelvingOrder.class, "typeOrSource");
199 xstream.omitField(ShelvingOrder.class, "fullValue");
200 xstream.omitField(ShelvingOrder.class, "typeOrSource");
201 return xstream;
202 }
203
204
205
206
207
208 private XStream generateShelvingSchemeXml(XStream xstream) {
209 xstream.alias("ole:shelvingScheme", ShelvingScheme.class);
210 xstream.aliasField("ole:codeValue", ShelvingScheme.class, "codeValue");
211 xstream.aliasField("ole:fullValue", ShelvingScheme.class, "fullValue");
212 xstream.aliasField("ole:typeOrSource", ShelvingScheme.class, "typeOrSource");
213 xstream.omitField(ShelvingScheme.class, "fullValue");
214 xstream.omitField(ShelvingScheme.class, "typeOrSource");
215 return xstream;
216 }
217
218
219
220
221
222 private XStream generateCallNumberXml(XStream xstream) {
223 xstream.alias("ole:callNumber", CallNumber.class);
224 xstream.aliasField("ole:type", CallNumber.class, "type");
225 xstream.aliasField("ole:prefix", CallNumber.class, "prefix");
226 xstream.aliasField("ole:number", CallNumber.class, "number");
227 xstream.aliasField("ole:classificationPart", CallNumber.class, "classificationPart");
228 xstream.aliasField("ole:itemPart", CallNumber.class, "itemPart");
229 xstream.omitField(CallNumber.class, "classificationPart");
230 xstream.omitField(CallNumber.class, "itemPart");
231 xstream.aliasField("ole:shelvingScheme", CallNumber.class, "shelvingScheme");
232 xstream.aliasField("ole:shelvingOrder", CallNumber.class, "shelvingOrder");
233 xstream = generateShelvingOrderXml(xstream);
234 xstream = generateShelvingSchemeXml(xstream);
235 return xstream;
236 }
237
238
239
240
241
242 private XStream generateAdditionalAttributesXml(XStream xstream) {
243 xstream.alias("ole:additionalAttributes", AdditionalAttributes.class);
244 xstream.aliasField("ole:dateEntered", AdditionalAttributes.class, "dateEntered");
245 xstream.aliasField("ole:lastUpdated", AdditionalAttributes.class, "lastUpdated");
246 xstream.aliasField("ole:fastAddFlag", AdditionalAttributes.class, "fastAddFlag");
247 xstream.aliasField("ole:supressFromPublic", AdditionalAttributes.class, "supressFromPublic");
248 xstream.aliasField("ole:harvestable", AdditionalAttributes.class, "harvestable");
249 xstream.aliasField("ole:fastAddFlag", AdditionalAttributes.class, "status");
250 xstream.aliasField("ole:supressFromPublic", AdditionalAttributes.class, "createdBy");
251 xstream.aliasField("ole:harvestable", AdditionalAttributes.class, "updatedBy");
252
253 return xstream;
254 }
255
256
257
258
259
260 private XStream generateExtensionXml(XStream xstream) {
261 xstream.alias("ole:extension", Extension.class);
262 xstream.aliasField("ole:displayLabel", Extension.class, "displayLabel");
263 xstream.omitField(Extension.class, "displayLabel");
264 xstream.aliasField("ole:additionalAttributes", Extension.class, "content");
265 xstream.addImplicitCollection(Extension.class, "content", AdditionalAttributes.class);
266 return xstream;
267 }
268
269
270
271
272
273 private XStream generateExtentOfOwnershipXml(XStream xstream) {
274 xstream.alias("ole:extentOfOwnership", ExtentOfOwnership.class);
275 xstream.aliasField("ole:textualHoldings", ExtentOfOwnership.class, "textualHoldings");
276 xstream.aliasField("ole:type", ExtentOfOwnership.class, "type");
277 xstream.aliasField("ole:notes", ExtentOfOwnership.class, "note");
278 xstream.aliasAttribute(Note.class, "type", "type");
279 xstream.addImplicitCollection(ExtentOfOwnership.class, "note", Note.class);
280 xstream = generateNoteXml(xstream);
281 return xstream;
282 }
283
284
285
286
287
288 private XStream generateFormerIdentifierXml(XStream xstream) {
289 xstream.alias("ole:formerIdentifier", FormerIdentifier.class);
290 xstream.aliasField("ole:identifierType", FormerIdentifier.class, "identifierType");
291 xstream.aliasField("ole:identifier", FormerIdentifier.class, "identifier");
292 xstream = generateIdentifierXml(xstream);
293 return xstream;
294 }
295
296
297
298
299
300 private XStream generateOleHoldingsXml(XStream xstream) {
301 xstream.alias("ole:oleHoldings", OleHoldings.class);
302 xstream.aliasField("ole:holdingsIdentifier", OleHoldings.class, "holdingsIdentifier");
303 xstream.aliasField("ole:receiptStatus", OleHoldings.class, "receiptStatus");
304
305 xstream.addImplicitCollection(OleHoldings.class, "extentOfOwnership", ExtentOfOwnership.class);
306 xstream.addImplicitCollection(OleHoldings.class, "uri", Uri.class);
307 xstream.addImplicitCollection(OleHoldings.class, "note", Note.class);
308 xstream.aliasField("ole:extension", OleHoldings.class, "extension");
309 xstream.aliasField("ole:callNumber", OleHoldings.class, "callNumber");
310 xstream.aliasField("ole:location", OleHoldings.class, "location");
311 xstream = generateLocationXml(xstream);
312 xstream = generateExtentOfOwnershipXml(xstream);
313 return xstream;
314 }
315
316
317
318
319
320 private XStream generateItemXml(XStream xstream) {
321 xstream.alias("ole:item", Item.class);
322 xstream.aliasField("ole:itemIdentifier", Item.class, "itemIdentifier");
323 xstream.aliasField("ole:purchaseOrderLineItemIdentifier", Item.class, "purchaseOrderLineItemIdentifier");
324 xstream.aliasField("ole:vendorLineItemIdentifier", Item.class, "vendorLineItemIdentifier");
325 xstream.aliasField("ole:accessInformation", Item.class, "accessInformation");
326 xstream.omitField(Item.class, "location");
327 xstream = generateAccessInformationXml(xstream);
328 xstream.aliasField("circ:itemType", Item.class, "itemType");
329 xstream = generateItemTypeXml(xstream);
330 xstream.aliasField("ole:location", Item.class, "location");
331 xstream = generateLocationXml(xstream);
332 xstream.aliasField("ole:note", Item.class, "note");
333 xstream = generateNoteXml(xstream);
334 xstream.aliasField("ole:highDensityStorage", Item.class, "highDensityStorage");
335 xstream = generateHighDensityStorageXml(xstream);
336 xstream.aliasField("circ:temporaryItemType", Item.class, "temporaryItemType");
337 xstream = generateItemTypeXml(xstream);
338 xstream.aliasField("ole:callNumber", Item.class, "callNumber");
339 xstream = generateCallNumberXml(xstream);
340 xstream.aliasField("ole:extension", Item.class, "extension");
341 xstream = generateExtensionXml(xstream);
342 xstream = generateStatisticalSearchingCodeXml(xstream);
343 xstream = generateAdditionalAttributesXml(xstream);
344 xstream.aliasField("ole:additionalAttributes", Item.class, "content");
345 xstream.aliasField("ole:barcodeARSL", Item.class, "barcodeARSL");
346 xstream.aliasField("ole:copyNumber", Item.class, "copyNumber");
347 xstream.aliasField("ole:copyNumberLabel", Item.class, "copyNumberLabel");
348 xstream.aliasField("ole:volumeNumber", Item.class, "volumeNumber");
349 xstream.aliasField("ole:volumeNumberLabel", Item.class, "volumeNumberLabel");
350 xstream.aliasField("ole:enumeration", Item.class, "enumeration");
351 xstream.aliasField("ole:chronology", Item.class, "chronology");
352 xstream.aliasField("ole:fund", Item.class, "fund");
353 xstream.aliasField("ole:donorPublicDisplay", Item.class, "donorPublicDisplay");
354 xstream.aliasField("ole:donorNote", Item.class, "donorNote");
355 xstream.aliasField("ole:price", Item.class, "price");
356 xstream.aliasField("ole:numberOfPieces", Item.class, "numberOfPieces");
357 xstream.aliasField("circ:itemStatus", Item.class, "itemStatus");
358 xstream.aliasField("ole:itemStatusEffectiveDate", Item.class, "itemStatusEffectiveDate");
359 xstream.aliasField("ole:checkinNote", Item.class, "checkinNote");
360 xstream.aliasField("ole:staffOnlyFlag", Item.class, "staffOnlyFlag");
361 xstream.aliasField("ole:fastAddFlag", Item.class, "fastAddFlag");
362 xstream.omitField(Item.class, "analytic");
363 xstream.omitField(Item.class, "resourceIdentifier");
364 xstream.aliasField("ole:analytic", Item.class, "analytic");
365 xstream.aliasField("ole:resourceIdentifier", Item.class, "resourceIdentifier");
366 xstream.aliasField("ole:formerIdentifiers", Item.class, "formerIdentifier");
367 xstream.aliasField("ole:statisticalSearchingCodes", Item.class, "statisticalSearchingCode");
368 xstream.addImplicitCollection(Item.class, "formerIdentifier", FormerIdentifier.class);
369 xstream.addImplicitCollection(Item.class, "statisticalSearchingCode", StatisticalSearchingCode.class);
370 return xstream;
371 }
372
373
374
375
376
377 public XStream generateItemsXml(XStream xstream) {
378 xstream.alias("ole:items", Items.class);
379 xstream.aliasField("ole:items", Items.class, "item");
380 xstream = generateItemXml(xstream);
381 xstream.addImplicitCollection(Items.class, "item", Item.class);
382 return xstream;
383 }
384
385
386
387
388
389 public XStream generateInstanceXml(XStream xstream) {
390 xstream.alias("ole:instance", Instance.class);
391 xstream.aliasField("ole:instanceIdentifier", Instance.class, "instanceIdentifier");
392 xstream.aliasField("ole:resourceIdentifier", Instance.class, "resourceIdentifier");
393 xstream.aliasField("ole:oleHoldings", Instance.class, "oleHoldings");
394 xstream.aliasAttribute(OleHoldings.class, "primary", "primary");
395 xstream.aliasField("ole:sourceHoldings", Instance.class, "sourceHoldings");
396 xstream.aliasField("ole:items", Instance.class, "items");
397 xstream.aliasField("ole:extension", Instance.class, "extension");
398 xstream.omitField(Instance.class, "extension");
399 xstream.omitField(Instance.class, "formerResourceIdentifier");
400 xstream.aliasField("ole:formerResourceIdentifiers", Instance.class, "formerResourceIdentifier");
401 xstream = generateItemsXml(xstream);
402 xstream = generateFormerIdentifierXml(xstream);
403 xstream = generateOleHoldingsXml(xstream);
404 xstream = generateSourceHoldingsXml(xstream);
405 xstream.addImplicitCollection(Instance.class, "formerResourceIdentifier", FormerIdentifier.class);
406 return xstream;
407
408 }
409
410
411
412
413
414 public XStream generateInstanceCollectionXml(XStream xstream) {
415 xstream.alias("ole:instanceCollection", InstanceCollection.class);
416 xstream.aliasField("ole:instances", Instance.class, "instance");
417 xstream.addImplicitCollection(InstanceCollection.class, "instance", Instance.class);
418 xstream = generateInstanceXml(xstream);
419 return xstream;
420 }
421
422
423 }