001package org.kuali.ole.docstore.discovery.service; 002 003import com.thoughtworks.xstream.XStream; 004import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; 005import org.kuali.ole.docstore.common.document.content.instance.*; 006import org.kuali.ole.docstore.model.xmlpojo.ingest.AdditionalAttributes; 007 008 009/** 010 * Created with IntelliJ IDEA. 011 * User: ? 012 * Date: 2/12/13 013 * Time: 11:26 AM 014 * To change this template use File | Settings | File Templates. 015 */ 016public class OleInstanceXmlConverterService { 017 018 019 /** 020 * @param instanceCollection 021 * @return the required format of the instance xml 022 */ 023 public String generateInstanceCollectionsXml(InstanceCollection instanceCollection) { 024 XStream stream = new XStream(); 025 stream = generateInstanceCollectionXml(stream); 026 String xml = stream.toXML(instanceCollection); 027 xml = xml.replace("<string>", ""); 028 xml = xml.replace("</string>", ""); 029 String output = xml.replace("<ole:instanceCollection>", "<ole:instanceCollection xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + 030 " xsi:schemaLocation=\"http://ole.kuali.org/standards/ole-instance instance9.1.1-circulation.xsd\"\n" + 031 " xmlns:circ=\"http://ole.kuali.org/standards/ole-instance-circulation\"\n" + 032 " xmlns:ole=\"http://ole.kuali.org/standards/ole-instance\">"); 033 return output; 034 } 035 036 /** 037 * @param instanceCollection 038 * @return the json content of the instance collection object 039 */ 040 public String generateInstanceCollectionsJSON(InstanceCollection instanceCollection) { 041 XStream stream = new XStream(new JettisonMappedXmlDriver()); 042 stream.autodetectAnnotations(true); 043 stream.processAnnotations(InstanceCollection.class); 044 stream.setMode(XStream.NO_REFERENCES); 045 stream = generateInstanceCollectionXml(stream); 046 047 String jsonContent = stream.toXML(instanceCollection); 048 return jsonContent; 049 050 } 051 052 /** 053 * @param xstream 054 * @return the xstream object with the information for the Location object to xml conversion 055 */ 056 private XStream generateLocationXml(XStream xstream) { 057 xstream.alias("ole:location", Location.class); 058 xstream.aliasField("ole:primary", Location.class, "primary"); 059 xstream.aliasField("ole:status", Location.class, "status"); 060 xstream.aliasField("circ:locationLevel", Location.class, "locationLevel"); 061 xstream = generateLocationLevelXml(xstream); 062 return xstream; 063 } 064 065 /** 066 * @param xstream 067 * @return the xstream object with the information for the LocationLevel object to xml conversion 068 */ 069 private XStream generateLocationLevelXml(XStream xstream) { 070 xstream.alias("circ:locationLevel", LocationLevel.class); 071 xstream.aliasField("ole:name", LocationLevel.class, "name"); 072 xstream.aliasField("ole:level", LocationLevel.class, "level"); 073 xstream.aliasField("circ:locationLevel", LocationLevel.class, "locationLevel"); 074 return xstream; 075 } 076 077 /** 078 * @param xstream 079 * @return the xstream object with the information for the Note object to xml conversion 080 */ 081 private XStream generateNoteXml(XStream xstream) { 082 xstream.alias("ole:note", Note.class); 083 xstream.aliasField("ole:value", Note.class, "value"); 084 // xstream.aliasField("ole:type",Note.class,"type"); 085 return xstream; 086 } 087 088 /** 089 * @param xstream 090 * @return the xstream object with the information for the Uri object to xml conversion 091 */ 092 private XStream generateUriXml(XStream xstream) { 093 xstream.alias("ole:uri", Uri.class); 094 xstream.aliasField("ole:value", Uri.class, "value"); 095 xstream.aliasField("ole:resolvable", Uri.class, "resolvable"); 096 return xstream; 097 } 098 099 /** 100 * @param xstream 101 * @return the xstream object with the information for the HighDensityStorage object to xml conversion 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 * @param xstream 117 * @return the xstream object with the information for the ItemType object to xml conversion 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 * @param xstream 131 * @return the xstream object with the information for the TypeOrSource object to xml conversion 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 * @param xstream 142 * @return the xstream object with the information for the StatisticalSearchingCode object to xml conversion 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 * @param xstream 154 * @return the xstream object with the information for the Identifier object to xml conversion 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 * @param xstream 165 * @return the xstream object with the information for the AccessInformation object to xml conversion 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 * @param xstream 177 * @return the xstream object with the information for the SourceHoldings object to xml conversion 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 // xstream.omitField(SourceHoldings.class,"primary"); 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 * @param xstream 192 * @return the xstream object with the information for the ShelvingOrder object to xml conversion 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 * @param xstream 206 * @return the xstream object with the information for the ShelvingScheme object to xml conversion 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 * @param xstream 220 * @return the xstream object with the information for the CallNumber object to xml conversion 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 * @param xstream 240 * @return the xstream object with the information for the AdditionalAttributes object to xml conversion 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 //map attribute map 253 return xstream; 254 } 255 256 /** 257 * @param xstream 258 * @return the xstream object with the information for the Extension object to xml conversion 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 * @param xstream 271 * @return the xstream object with the information for the ExtentOfOwnership object to xml conversion 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 * @param xstream 286 * @return the xstream object with the information for the FormerIdentifier object to xml conversion 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 * @param xstream 298 * @return the xstream object with the information for the OleHoldings object to xml conversion 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 // xstream.omitField(OleHoldings.class,"primary"); 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 * @param xstream 318 * @return the xstream object with the information for the Item object to xml conversion 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 * @param xstream 375 * @return the xstream object with the information for the Items object to xml conversion 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 * @param xstream 387 * @return the xstream object with the information for the Instance object to xml conversion 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 * @param xstream 412 * @return the xstream object with the information for the InstanceCollection object to xml conversion 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}