1 package org.kuali.ole.editor.service;
2
3
4 import org.apache.log4j.Logger;
5 import org.kuali.ole.*;
6 import org.kuali.ole.docstore.discovery.service.QueryService;
7 import org.kuali.ole.docstore.discovery.service.QueryServiceImpl;
8 import org.kuali.ole.docstore.model.bo.WorkBibDocument;
9 import org.kuali.ole.docstore.model.xmlpojo.ingest.*;
10 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.DataField;
11 import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.SubField;
12 import org.kuali.ole.docstore.model.xmlpojo.work.instance.oleml.*;
13 import org.kuali.ole.docstore.model.xstream.ingest.RequestHandler;
14 import org.kuali.ole.docstore.model.xstream.ingest.ResponseHandler;
15 import org.kuali.ole.docstore.model.xstream.work.instance.oleml.WorkHoldingOlemlRecordProcessor;
16 import org.kuali.ole.docstore.model.xstream.work.instance.oleml.WorkInstanceOlemlRecordProcessor;
17 import org.kuali.ole.docstore.model.xstream.work.instance.oleml.WorkItemOlemlRecordProcessor;
18 import org.kuali.ole.ingest.pojo.ProfileAttributeBo;
19 import org.kuali.ole.pojo.ProfileAttribute;
20 import org.kuali.ole.pojo.bib.BibliographicRecord;
21 import org.kuali.ole.pojo.bib.Collection;
22 import org.kuali.ole.pojo.edi.LineItemOrder;
23 import org.kuali.rice.krad.util.GlobalVariables;
24
25 import java.io.BufferedReader;
26 import java.io.InputStreamReader;
27 import java.io.OutputStreamWriter;
28 import java.io.Writer;
29 import java.net.URL;
30 import java.net.URLConnection;
31 import java.net.URLEncoder;
32 import java.text.DateFormat;
33 import java.text.SimpleDateFormat;
34 import java.util.ArrayList;
35 import java.util.Date;
36 import java.util.Iterator;
37 import java.util.List;
38
39
40
41
42
43
44
45 public class DocstoreHelperService {
46
47 private static final String DOCSTORE_URL = "docstore.url";
48 private final String CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING = "docAction=ingestContent&stringContent=";
49 private final String CHECKOUT_DOCSTORE_RECORD_QUERY_STRING = "docAction=checkOut&uuid=";
50 private final String UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING = "docAction=checkIn&stringContent=";
51 private final String ROLLBACK_DATA_FROM_DOCSTORE = "docAction=deleteWithLinkedDocs&requestContent=";
52 private final String TRANSFER_INSTANCES_QUERY_STRING = "docAction=transferInstances&stringContent=";
53 private final String TRANSFER_ITEMS_QUERY_STRING = "docAction=transferItems&stringContent=";
54 private WorkHoldingOlemlRecordProcessor workHoldingOlemlRecordProcessor;
55 private WorkItemOlemlRecordProcessor workItemOlemlRecordProcessor;
56 private static final Logger LOG = Logger.getLogger(DocstoreHelperService.class);
57
58 private List<ProfileAttribute> attributes = new ArrayList<ProfileAttribute>();
59
60 public String persistToDocstoreForEditor(String content, String uuid, String format) throws Exception {
61 String responseFromDocstore = callToDocstore(null, content, uuid, format);
62 return responseFromDocstore;
63 }
64
65 public String persistToDocstoreFromUnifiedEditor(String reqContent, String uuid, String format) throws Exception {
66 String responseFromDocstore = callToDocstore(reqContent, null, uuid, format);
67 return responseFromDocstore;
68 }
69
70 private String callToDocstore(String reqContent, String content, String uuid, String format) throws Exception {
71 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
72 String queryString = null;
73 if (null == uuid) {
74 String xmlContent = "";
75 if (reqContent != null) {
76 xmlContent = reqContent;
77 }
78 else {
79 xmlContent = buildRequestDocXML(content, format);
80 }
81 queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
82 }
83 else {
84 String xmlContent = buildRequestDocXML(content, uuid, format);
85 queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
86 }
87
88 return postData(docstoreURL, queryString);
89 }
90
91
92 private String callToDocstoreWithAdditionalAttributes(String content, AdditionalAttributes additionalAttributes, String uuid, String format) throws Exception {
93 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
94 String queryString = null;
95
96 if (null == uuid) {
97 String xmlContent = buildRequestDocXMLWithAdditionalAttributes(content, additionalAttributes, format);
98 queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
99 }
100 else {
101 String xmlContent = buildRequestDocXMLWithAdditionalAttributes(content, additionalAttributes, uuid, format);
102 queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
103 }
104
105 return postData(docstoreURL, queryString);
106 }
107
108
109
110 public String persistToDocstoreWithAdditionalAttributesForEditor(String content,
111 AdditionalAttributes additionalAttributes,
112 String uuid, String format) throws Exception {
113 String responseFromDocstore = callToDocstoreWithAdditionalAttributes(content, additionalAttributes, uuid,
114 format);
115 return responseFromDocstore;
116 }
117
118 public String persistNewToDocstoreForIngest(BibliographicRecord bibliographicRecord, List<ProfileAttributeBo> profileAttributes) throws Exception {
119 this.attributes = buildListOfProfileAttributes(profileAttributes);
120 BibliographicRecordHandler bibliographicRecordHandler = new BibliographicRecordHandler();
121 String bibXMLContent = bibliographicRecordHandler.generateXML(bibliographicRecord);
122 String instanceXMLContent = getInstanceXML(bibliographicRecord);
123 String requestXML = buildReuestDocXMLForIngest(bibXMLContent, instanceXMLContent);
124 String queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(requestXML);
125 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
126 String responseXML = postData(docstoreURL, queryString + queryString);
127 return responseXML;
128 }
129
130 public String persistNewToDocstoreForIngest(LineItemOrder lineItemOrder,BibliographicRecord bibliographicRecord, List<ProfileAttributeBo> profileAttributes) throws Exception {
131 this.attributes = buildListOfProfileAttributes(profileAttributes);
132 BibliographicRecordHandler bibliographicRecordHandler = new BibliographicRecordHandler();
133 String bibXMLContent = bibliographicRecordHandler.generateXML(bibliographicRecord);
134 String instanceXMLContent = getInstanceXML(lineItemOrder, bibliographicRecord);
135 String requestXML = buildReuestDocXMLForIngest(bibXMLContent, instanceXMLContent);
136 String queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(requestXML);
137 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
138 String responseXML = postData(docstoreURL, queryString + queryString);
139 return responseXML;
140 }
141
142 public String getDocstoreData(String uuid) throws Exception {
143 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
144 System.out.println("DocstoreHelperService docstoreURLlllllll "+docstoreURL);
145 String queryString = CHECKOUT_DOCSTORE_RECORD_QUERY_STRING + uuid;
146 System.out.println("DocstoreHelperService queryString "+queryString);
147 String responseFromDocstore = postData(docstoreURL, queryString);
148 Response response = new ResponseHandler().toObject(responseFromDocstore);
149 String responseContent = getResponseContent(response);
150 return responseContent;
151 }
152
153
154 public ResponseDocument checkOutDocument(String uuid) throws Exception {
155 ResponseDocument responseDocument = null;
156 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
157 String queryString = CHECKOUT_DOCSTORE_RECORD_QUERY_STRING + uuid;
158 String responseFromDocstore = postData(docstoreURL, queryString);
159 Response response = new ResponseHandler().toObject(responseFromDocstore);
160 responseDocument = response.getDocuments().get(0);
161 return responseDocument;
162 }
163
164 public String getResponseContent(Response response) {
165 String responseString = null;
166 List<ResponseDocument> responseDocumentList = response.getDocuments();
167 for (ResponseDocument responseDocument : responseDocumentList) {
168 Content contentObj = responseDocument.getContent();
169 responseString = contentObj.getContent();
170 }
171 return responseString;
172 }
173
174
175 public static String postData(String target, String content) throws Exception {
176 String response = "";
177 URL url = new URL(target);
178 URLConnection conn = url.openConnection();
179 conn.setDoInput(true);
180 conn.setDoOutput(true);
181 conn.setUseCaches(false);
182 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
183
184 Writer w = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
185 w.write(content);
186 w.close();
187 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
188 String temp;
189 while ((temp = in.readLine()) != null) {
190 response += temp + "\n";
191 }
192 in.close();
193 return response;
194 }
195
196
197 private String buildRequestDocXML(String xmlContent, String format) {
198 return buildRequestDocXML(xmlContent, null, format);
199 }
200
201 private String buildRequestDocXMLWithAdditionalAttributes(String xmlContent, AdditionalAttributes additionalAttributes, String format) {
202 return buildRequestDocXMLWithAdditionalAttributes(xmlContent, additionalAttributes, null, format);
203 }
204
205 public String buildReuestDocXMLForIngest(String bibXML, String instanceXML) {
206 Request requestObject = new Request();
207 requestObject.setUser(GlobalVariables.getUserSession()!=null?GlobalVariables.getUserSession().getPrincipalName():"");
208 requestObject.setOperation(OLEConstants.INGEST_OPERATION);
209 RequestDocument requestDocument = new RequestDocument();
210 requestDocument.setId("1");
211 requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
212 requestDocument.setType(OLEConstants.BIB_DOC_TYPE);
213 requestDocument.setFormat(OLEConstants.MARC_FORMAT);
214 requestDocument.setContent(new Content(bibXML));
215
216 AdditionalAttributes additionalAttributes = new AdditionalAttributes();
217 DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
218 additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
219 additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
220 additionalAttributes.setFastAddFlag("true");
221 additionalAttributes.setSupressFromPublic("false");
222 additionalAttributes.setAttribute("dateEntered",String.valueOf(dateFormat.format(new Date())));
223 additionalAttributes.setAttribute("lastUpdated",String.valueOf(dateFormat.format(new Date())));
224 additionalAttributes.setAttribute("fastAddFlag","true");
225 additionalAttributes.setAttribute("supressFromPublic","false");
226 requestDocument.setAdditionalAttributes(additionalAttributes);
227
228 RequestDocument linkedRequestDocument = new RequestDocument();
229 linkedRequestDocument.setId("2");
230 linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
231 linkedRequestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
232 linkedRequestDocument.setContent(new Content(instanceXML));
233 linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
234
235 ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
236 linkedRequestDocuments.add(linkedRequestDocument);
237
238 requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
239
240 ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
241 requestDocuments.add(requestDocument);
242 requestObject.setRequestDocuments(requestDocuments);
243
244 RequestHandler requestHandler = new RequestHandler();
245 String xml = requestHandler.toXML(requestObject);
246 return xml;
247 }
248
249
250 private String buildRequestDocXML(String xmlContent, String uuid, String format) {
251 String INSTANCE_MARC_XML_STRING = "<instanceCollection>\n" +
252 " <instance>\n" +
253 "<instanceIdentifier></instanceIdentifier>\n" +
254 " <oleHoldings primary=\"true\">\n" +
255 " <holdingsIdentifier></holdingsIdentifier>\n" +
256 " <receiptStatus></receiptStatus>\n" +
257 " <uri></uri>\n" +
258 " <note type=\"public\"></note>\n" +
259 " <location primary=\"true\" status=\"permanent\">\n" +
260 " <locationLevel>\n" +
261 " <name></name>\n" +
262 " <level></level>\n" +
263 " <locationLevel>\n" +
264 " <name></name>\n" +
265 " <level></level>\n" +
266 " <locationLevel>\n" +
267 " <name></name>\n" +
268 " <level></level>\n" +
269 " <locationLevel>\n" +
270 " <name></name>\n" +
271 " <level></level>\n" +
272 " </locationLevel>\n" +
273 " </locationLevel>\n" +
274 " </locationLevel>\n" +
275 " </locationLevel>\n" +
276 " </location>\n" +
277 " <extension>\n" +
278 " <additionalAttributes>\n" +
279 " <createdBy></createdBy>\n" +
280 " <dateEntered></dateEntered>\n" +
281 " </additionalAttributes>\n" +
282 " </extension>\n" +
283 " <callNumber>\n" +
284 " <type></type>\n" +
285 " <prefix></prefix>\n" +
286 " <number></number>\n" +
287 " <shelvingScheme>\n" +
288 " <codeValue></codeValue>\n" +
289 " </shelvingScheme>\n" +
290 " <shelvingOrder>\n" +
291 " <codeValue></codeValue>\n" +
292 " </shelvingOrder>\n" +
293 " </callNumber>\n" +
294 " </oleHoldings>\n" +
295 " <items>\n" +
296 " <item>\n" +
297 " <staffOnlyFlag>false</staffOnlyFlag>\n" +
298 " <fastAddFlag>false</fastAddFlag>\n" +
299 " <extension reference=\"../../../oleHoldings/extension\"/>\n" +
300 " </item>\n" +
301 " </items>\n" +
302 " </instance>\n" +
303 "</instanceCollection>" ;
304 Request requestObject = new Request();
305 RequestDocument requestDocument = new RequestDocument();
306
307 if (null == uuid) {
308 requestDocument.setId("1");
309 RequestDocument linkedRequestDocument = new RequestDocument();
310 linkedRequestDocument.setId("2");
311 linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
312 linkedRequestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
313 linkedRequestDocument.setContent(new Content(INSTANCE_MARC_XML_STRING));
314 linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
315
316 ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
317 linkedRequestDocuments.add(linkedRequestDocument);
318
319 requestObject.setOperation(OLEConstants.INGEST_OPERATION);
320 requestObject.setUser(GlobalVariables.getUserSession()!=null ?GlobalVariables.getUserSession().getPrincipalName():"");
321 requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
322 } else {
323 requestDocument.setId(uuid);
324 requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
325 requestObject.setUser("editor");
326 }
327 requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
328 requestDocument.setType(OLEConstants.BIB_DOC_TYPE);
329
330 if (format.equalsIgnoreCase("marc")) {
331 requestDocument.setFormat(OLEConstants.MARC_FORMAT);
332 } else if (format.equalsIgnoreCase("dublinunq")) {
333 requestDocument.setFormat(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT);
334 }
335
336 requestDocument.setContent(new Content(xmlContent));
337
338 if (format.equalsIgnoreCase("marc")) {
339 AdditionalAttributes additionalAttributes = new AdditionalAttributes();
340 DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
341 if (null == uuid) {
342 additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
343 }
344 additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
345 additionalAttributes.setFastAddFlag("true");
346 additionalAttributes.setSupressFromPublic("false");
347 requestDocument.setAdditionalAttributes(additionalAttributes);
348 }
349
350 ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
351 requestDocuments.add(requestDocument);
352 requestObject.setRequestDocuments(requestDocuments);
353
354 RequestHandler requestHandler = new RequestHandler();
355 String xml = requestHandler.toXML(requestObject);
356
357 if (format.equalsIgnoreCase(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT)) {
358 xml = modifyXmlContent(xml);
359 }
360 return xml;
361 }
362
363 private String buildRequestDocXMLWithAdditionalAttributes(String xmlContent,
364 AdditionalAttributes additionalAttributes, String uuid,
365 String format) {
366 String INSTANCE_MARC_XML_STRING = "<instanceCollection>\n" +
367 " <instance>\n" +
368 "<instanceIdentifier></instanceIdentifier>\n" +
369 " <oleHoldings primary=\"true\">\n" +
370 " <holdingsIdentifier></holdingsIdentifier>\n" +
371 " <!--Zero or more repetitions:-->\n" +
372 " <extentOfOwnership>\n" +
373 " <textualHoldings></textualHoldings>\n" +
374 " <!--Zero or more repetitions:-->\n" +
375 " <note type=\"string\"></note>\n" +
376 " <type></type>\n" +
377 " </extentOfOwnership>\n" +
378 " <receiptStatus></receiptStatus>\n" +
379 " <uri></uri>\n" +
380 " <note type=\"public\"></note>\n" +
381 " <location primary=\"true\" status=\"permanent\">\n" +
382 " <locationLevel>\n" +
383 " <name>New Holdings</name>\n" +
384 " <level></level>\n" +
385 " <locationLevel>\n" +
386 " <name></name>\n" +
387 " <level></level>\n" +
388 " <locationLevel>\n" +
389 " <name></name>\n" +
390 " <level></level>\n" +
391 " <locationLevel>\n" +
392 " <name></name>\n" +
393 " <level></level>\n" +
394 " </locationLevel>\n" +
395 " </locationLevel>\n" +
396 " </locationLevel>\n" +
397 " </locationLevel>\n" +
398 " </location>\n" +
399 " <extension>\n" +
400 " <additionalAttributes>\n" +
401 " <createdBy></createdBy>\n" +
402 " <dateEntered></dateEntered>\n" +
403 " </additionalAttributes>\n" +
404 " </extension>\n" +
405 " <callNumber>\n" +
406 " <type></type>\n" +
407 " <prefix></prefix>\n" +
408 " <number></number>\n" +
409 " <shelvingScheme>\n" +
410 " <codeValue></codeValue>\n" +
411 " </shelvingScheme>\n" +
412 " <shelvingOrder>\n" +
413 " <codeValue></codeValue>\n" +
414 " </shelvingOrder>\n" +
415 " </callNumber>\n" +
416 " </oleHoldings>\n" +
417 " <items>\n" +
418 " <item>\n" +
419 " <accessInformation>\n" +
420 " <barcode>New</barcode>\n" +
421 " </accessInformation>\n" +
422 " <callNumber>\n" +
423 " <number>Item</number>\n" +
424 " </callNumber>\n" +
425 " <staffOnlyFlag>false</staffOnlyFlag>\n" +
426 " <fastAddFlag>false</fastAddFlag>\n" +
427 " <extension reference=\"../../../oleHoldings/extension\"/>\n" +
428 " </item>\n" +
429 " </items>\n" +
430 " </instance>\n" +
431 "</instanceCollection>";
432 Request requestObject = new Request();
433 RequestDocument requestDocument = new RequestDocument();
434 if (null == uuid) {
435 requestDocument.setId("1");
436 RequestDocument linkedRequestDocument = new RequestDocument();
437 linkedRequestDocument.setId("2");
438 linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
439 linkedRequestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
440 linkedRequestDocument.setContent(new Content(INSTANCE_MARC_XML_STRING));
441 linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
442
443 ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
444 linkedRequestDocuments.add(linkedRequestDocument);
445
446 requestObject.setOperation(OLEConstants.INGEST_OPERATION);
447 requestObject.setUser(
448 GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName()
449 : "");
450 requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
451 }
452 else {
453 requestDocument.setId(uuid);
454 requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
455 requestObject.setUser("editor");
456 }
457 requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
458 requestDocument.setType(OLEConstants.BIB_DOC_TYPE);
459
460 if (format.equalsIgnoreCase("marc")) {
461 requestDocument.setFormat(OLEConstants.MARC_FORMAT);
462 }
463 else if (format.equalsIgnoreCase("dublinunq")) {
464 requestDocument.setFormat(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT);
465 }
466
467 requestDocument.setContent(new Content(xmlContent));
468 if (additionalAttributes != null && requestDocument.getType().equalsIgnoreCase(OLEConstants.BIB_DOC_TYPE)) {
469 requestDocument.setAdditionalAttributes(additionalAttributes);
470 }
471
472 ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
473 requestDocuments.add(requestDocument);
474 requestObject.setRequestDocuments(requestDocuments);
475
476 RequestHandler requestHandler = new RequestHandler();
477 String xml = requestHandler.toXML(requestObject);
478 if (format.equalsIgnoreCase(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT)) {
479 xml = modifyXmlContent(xml);
480 }
481 return xml;
482 }
483
484 public String getInstanceXML(BibliographicRecord bibliographicRecord) {
485 WorkInstanceOlemlRecordProcessor workInstanceOlemlRecordProcessor = new WorkInstanceOlemlRecordProcessor();
486 InstanceCollection instanceCollection = new InstanceCollection();
487 Instance oleInstance = new Instance();
488 List<Item> oleItemList = new ArrayList<Item>();
489 oleItemList.add(getOleItem(bibliographicRecord)) ;
490 if(oleInstance.getItems() == null){
491 oleInstance.setItems(new Items());
492 }
493 oleInstance.getItems().setItem(oleItemList);
494 oleInstance.setOleHoldings(getOleHolding(bibliographicRecord));
495
496 Extension extension = new Extension();
497 AdditionalAttributes additionalAttributes = new AdditionalAttributes();
498 DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
499 additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
500 additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
501 additionalAttributes.setSupressFromPublic("false");
502 additionalAttributes.setFastAddFlag("false");
503 additionalAttributes.setHarvestable("true");
504 additionalAttributes.setStatus("n");
505 additionalAttributes.setAttribute("dateEntered", additionalAttributes.getDateEntered());
506 additionalAttributes.setAttribute("lastUpdated", additionalAttributes.getLastUpdated());
507 additionalAttributes.setAttribute("fastAddFlag",additionalAttributes.getFastAddFlag());
508 additionalAttributes.setAttribute("supressFromPublic", additionalAttributes.getSupressFromPublic());
509 additionalAttributes.setAttribute("harvestable",additionalAttributes.getHarvestable());
510 additionalAttributes.setAttribute("status",additionalAttributes.getStatus());
511 extension.getContent().add(additionalAttributes);
512
513
514 oleInstance.setExtension(extension);
515 oleInstance.getOleHoldings().setPrimary(OLEConstants.TRUE);
516
517 Uri uri = new Uri();
518 uri.setValue("");
519 uri.setResolvable(null);
520 oleInstance.getOleHoldings().getUri().add(uri);
521 Note note = new Note();
522 note.setType(OLEConstants.NOTE_TYPE);
523 oleInstance.getOleHoldings().getNote().add(note);
524 CallNumber callNumber = new CallNumber();
525 ShelvingScheme shelvingScheme = new ShelvingScheme();
526 ShelvingOrder shelvingOrder = new ShelvingOrder();
527 callNumber.setType("");
528 callNumber.setPrefix("");
529 callNumber.setNumber("");
530 shelvingScheme.setCodeValue("");
531 shelvingOrder.setCodeValue("");
532 callNumber.setShelvingScheme(shelvingScheme);
533 callNumber.setShelvingOrder(shelvingOrder);
534 oleInstance.getOleHoldings().setCallNumber(callNumber);
535 List<Instance> oleInstanceList = new ArrayList<Instance>();
536 OleHoldings oleHoldings = oleInstance.getOleHoldings();
537 if(oleHoldings.getLocation() == null ) {
538 LocationLevel locationLevel = new LocationLevel();
539 Location location = new Location();
540 locationLevel.setLevel("");
541 locationLevel.setName("");
542 location.setPrimary(OLEConstants.TRUE);
543 location.setStatus(OLEConstants.PERMANENT);
544 location.setLocationLevel(locationLevel);
545 oleInstance.getOleHoldings().setLocation(location);
546 }
547 oleInstanceList.add(oleInstance);
548 instanceCollection.setInstance(oleInstanceList);
549
550 String instanceXML = workInstanceOlemlRecordProcessor.toXML(instanceCollection);
551 return instanceXML;
552 }
553
554 public String getInstanceXML(LineItemOrder lineItemOrder, BibliographicRecord bibliographicRecord) {
555 WorkInstanceOlemlRecordProcessor workInstanceOlemlRecordProcessor = new WorkInstanceOlemlRecordProcessor();
556 InstanceCollection instanceCollection = new InstanceCollection();
557 Instance oleInstance = new Instance();
558 List<Item> oleItemList = new ArrayList<Item>();
559 oleItemList.add(getOleItem(lineItemOrder, bibliographicRecord)) ;
560 if(oleInstance.getItems() == null){
561 oleInstance.setItems(new Items());
562 }
563 oleInstance.getItems().setItem(oleItemList);
564 oleInstance.setOleHoldings(getOleHolding(bibliographicRecord));
565
566 Extension extension = new Extension();
567 AdditionalAttributes additionalAttributes = new AdditionalAttributes();
568 DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
569 additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
570 additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
571 additionalAttributes.setSupressFromPublic("false");
572 additionalAttributes.setFastAddFlag("false");
573 additionalAttributes.setHarvestable("true");
574 additionalAttributes.setStatus("n");
575 additionalAttributes.setAttribute("dateEntered", additionalAttributes.getDateEntered());
576 additionalAttributes.setAttribute("lastUpdated", additionalAttributes.getLastUpdated());
577 additionalAttributes.setAttribute("fastAddFlag",additionalAttributes.getFastAddFlag());
578 additionalAttributes.setAttribute("supressFromPublic", additionalAttributes.getSupressFromPublic());
579 additionalAttributes.setAttribute("harvestable",additionalAttributes.getHarvestable());
580 additionalAttributes.setAttribute("status",additionalAttributes.getStatus());
581 extension.getContent().add(additionalAttributes);
582
583
584 oleInstance.setExtension(extension);
585 oleInstance.getOleHoldings().setPrimary(OLEConstants.TRUE);
586
587 Uri uri = new Uri();
588 uri.setValue("");
589 uri.setResolvable(null);
590 oleInstance.getOleHoldings().getUri().add(uri);
591 Note note = new Note();
592 note.setType(OLEConstants.NOTE_TYPE);
593 oleInstance.getOleHoldings().getNote().add(note);
594 CallNumber callNumber = new CallNumber();
595 ShelvingScheme shelvingScheme = new ShelvingScheme();
596 ShelvingOrder shelvingOrder = new ShelvingOrder();
597 callNumber.setType("");
598 callNumber.setPrefix("");
599 callNumber.setNumber("");
600 shelvingScheme.setCodeValue("");
601 shelvingOrder.setCodeValue("");
602 callNumber.setShelvingScheme(shelvingScheme);
603 callNumber.setShelvingOrder(shelvingOrder);
604 oleInstance.getOleHoldings().setCallNumber(callNumber);
605 List<Instance> oleInstanceList = new ArrayList<Instance>();
606 OleHoldings oleHoldings = oleInstance.getOleHoldings();
607 if(oleHoldings.getLocation() == null ) {
608 LocationLevel locationLevel = new LocationLevel();
609 Location location = new Location();
610 locationLevel.setLevel("");
611 locationLevel.setName("");
612 location.setPrimary(OLEConstants.TRUE);
613 location.setStatus(OLEConstants.PERMANENT);
614 location.setLocationLevel(locationLevel);
615 oleInstance.getOleHoldings().setLocation(location);
616 }
617 oleInstanceList.add(oleInstance);
618 instanceCollection.setInstance(oleInstanceList);
619
620 String instanceXML = workInstanceOlemlRecordProcessor.toXML(instanceCollection);
621 return instanceXML;
622 }
623
624 public OleHoldings getOleHolding(BibliographicRecord bibliographicRecord) {
625 return new OleHoldingsRecordHandler().getOleHoldings(bibliographicRecord, attributes);
626 }
627
628 public Item getOleItem(BibliographicRecord bibliographicRecord) {
629 for(DataField dataField : bibliographicRecord.getDatafields()){
630 if(dataField.getTag().equalsIgnoreCase(OLEConstants.DATA_FIELD_985)){
631 List<SubField> subFieldList = dataField.getSubFields();
632 SubField subField = new SubField();
633 subField.setCode(OLEConstants.SUB_FIELD_A);
634 subField.setValue(OLEConstants.DEFAULT_LOCATION_LEVEL_INSTITUTION);
635 subFieldList.add(subField);
636 dataField.setSubFields(subFieldList);
637 }
638 }
639 return new OleItemRecordHandler().getOleItem(bibliographicRecord, attributes);
640 }
641
642 public Item getOleItem(LineItemOrder lineItemOrder, BibliographicRecord bibliographicRecord) {
643 for(DataField dataField : bibliographicRecord.getDatafields()){
644 if(dataField.getTag().equalsIgnoreCase(OLEConstants.DATA_FIELD_985)){
645 List<SubField> subFieldList = dataField.getSubFields();
646 SubField subField = new SubField();
647 subField.setCode(OLEConstants.SUB_FIELD_A);
648 subField.setValue(OLEConstants.DEFAULT_LOCATION_LEVEL_INSTITUTION);
649 subFieldList.add(subField);
650 dataField.setSubFields(subFieldList);
651 }
652 }
653 return new OleItemRecordHandler().getOleItem(lineItemOrder, bibliographicRecord, attributes);
654 }
655
656 private List<ProfileAttribute> buildListOfProfileAttributes(List<ProfileAttributeBo> profileAttributes) {
657 for (Iterator iterator = profileAttributes.iterator(); iterator.hasNext(); ) {
658 ProfileAttributeBo profileAttributeBo = (ProfileAttributeBo) iterator.next();
659 ProfileAttribute profileAttribute = new ProfileAttribute();
660 profileAttribute.setAgendaName(profileAttributeBo.getAgendaName());
661 profileAttribute.setAttributeName(profileAttributeBo.getAttributeName());
662 profileAttribute.setAttributeValue(profileAttributeBo.getAttributeValue());
663 profileAttribute.setSystemValue(profileAttributeBo.getSystemValue());
664 attributes.add(profileAttribute);
665 }
666 return attributes;
667 }
668
669 private String modifyXmlContent(String inputXmlContent) {
670 StringBuffer modifiedContent = new StringBuffer(inputXmlContent);
671 modifiedContent.replace(modifiedContent.indexOf("<oai_dc:dc"), modifiedContent.indexOf(">", modifiedContent.indexOf("<oai_dc:dc")),
672 "<oai_dc:dc xmlns:oai_dc=\"http://www.openarchives.org/OAI/2.0/oai_dc/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"");
673 return modifiedContent.toString();
674 }
675
676 public void rollbackData(String xmlForRollback) throws Exception {
677 String queryString = ROLLBACK_DATA_FROM_DOCSTORE + URLEncoder.encode(xmlForRollback, "UTF-8");
678 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
679 postData(docstoreURL, queryString + queryString);
680 }
681
682
683 public String updateItem(BibliographicRecord bibliographicRecord, String itemUUID){
684 String responseXML = null;
685 try{
686 Item oleItem = getOleItem(bibliographicRecord);
687 OleItemRecordHandler oleItemRecordHandler = new OleItemRecordHandler();
688 String itemXML = oleItemRecordHandler.toXML(oleItem);
689 String requestXML = buildReuestDocXMLForUpdate(itemXML,itemUUID) ;
690 String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(requestXML, "UTF-8");
691 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
692 responseXML = postData(docstoreURL, queryString);
693 }catch(Exception e){
694 e.printStackTrace();
695 }
696 return responseXML;
697 }
698 public String buildReuestDocXMLForUpdate(String itemXML,String itemUUID) {
699 Request requestObject = new Request();
700 RequestDocument requestDocument = new RequestDocument();
701 requestDocument.setId(itemUUID);
702 requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
703 requestDocument.setType(OLEConstants.ITEM_DOC_TYPE);
704 requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
705 requestDocument.setContent(new Content(itemXML));
706
707 ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
708 requestDocuments.add(requestDocument);
709 requestObject.setRequestDocuments(requestDocuments);
710 RequestHandler requestHandler = new RequestHandler();
711 String xml = requestHandler.toXML(requestObject);
712 return xml;
713 }
714
715
716
717
718
719
720
721
722
723 public String instanceRecordCallToDocstore(String content, String uuid, String format) throws Exception {
724 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
725 String queryString = null;
726 String xmlContent = buildInstanceRequestDocXML(content, uuid, format);
727 queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
728 return postData(docstoreURL, queryString);
729 }
730
731
732
733
734
735
736
737
738 private String buildInstanceRequestDocXML(String xmlContent, String uuid, String format) {
739 Request requestObject = new Request();
740 RequestDocument requestDocument = new RequestDocument();
741 if (null == uuid) {
742 requestDocument.setId("1");
743 requestObject.setOperation(OLEConstants.INGEST_OPERATION);
744 } else {
745 requestDocument.setId(uuid);
746 requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
747 }
748 requestObject.setUser("editor");
749 requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
750 requestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
751 requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
752
753 requestDocument.setContent(new Content(xmlContent));
754
755 ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
756 requestDocuments.add(requestDocument);
757 requestObject.setRequestDocuments(requestDocuments);
758
759 RequestHandler requestHandler = new RequestHandler();
760 String requestXml = requestHandler.toXML(requestObject);
761 return requestXml;
762 }
763
764
765
766
767
768
769
770
771
772 public String updateInstanceRecord(String uuid, String docType, String xmlContent) throws Exception {
773 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
774 Request requestObject = new Request();
775 requestObject.setUser(GlobalVariables.getUserSession()!=null?GlobalVariables.getUserSession().getPrincipalId():"");
776 requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
777 RequestDocument requestDocument = new RequestDocument();
778
779 requestDocument.setId(uuid);
780 requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
781 requestDocument.setType(docType);
782 requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
783 requestDocument.setContent(new Content(xmlContent));
784
785 ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
786 requestDocuments.add(requestDocument);
787 requestObject.setRequestDocuments(requestDocuments);
788
789 RequestHandler requestHandler = new RequestHandler();
790 String xml = requestHandler.toXML(requestObject);
791
792 String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xml, "UTF-8");
793
794 return postData(docstoreURL, queryString);
795 }
796
797
798
799
800
801
802
803
804 public String deleteInstanceRecord(Instance instance) throws Exception {
805 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
806
807 String uuid = instance.getInstanceIdentifier();
808 String queryString = "docAction=delete&requestContent=" + uuid;
809 String response = postData(docstoreURL,queryString);
810 return response;
811
812 }
813
814
815
816
817
818
819
820 public String deleteDocstoreRecord(String uuid) throws Exception {
821 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
822 String queryString = "docAction=delete&requestContent=" + uuid;
823 String response = postData(docstoreURL,queryString);
824 return response;
825
826 }
827
828
829
830
831
832
833
834
835 public String createItemForInstanceRecord (String instanceUuid, String docType, String xmlContent) throws Exception {
836 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
837 Request requestObject = new Request();
838 requestObject.setUser(GlobalVariables.getUserSession()!=null?GlobalVariables.getUserSession().getPrincipalId():"");
839 requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
840 RequestDocument requestDocument = new RequestDocument();
841
842 requestDocument.setId(instanceUuid);
843 requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
844 requestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
845 requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
846
847
848 RequestDocument linkedRequestDocument = new RequestDocument();
849 linkedRequestDocument.setId(OLEConstants.NEW_ITEM_ID);
850 linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
851 linkedRequestDocument.setType(docType);
852 linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
853 linkedRequestDocument.setContent(new Content(xmlContent));
854
855 List<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
856 linkedRequestDocuments.add(linkedRequestDocument);
857 requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
858
859
860 ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
861 requestDocuments.add(requestDocument);
862 requestObject.setRequestDocuments(requestDocuments);
863
864 RequestHandler requestHandler = new RequestHandler();
865 String xml = requestHandler.toXML(requestObject);
866
867 String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xml, "UTF-8");
868
869 return postData(docstoreURL, queryString);
870
871 }
872 public void transferInstances(String requestXML) throws Exception{
873 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
874 System.out.println("transferInstances docstoreURL "+docstoreURL);
875 String queryString=TRANSFER_INSTANCES_QUERY_STRING + URLEncoder.encode(requestXML, "UTF-8");
876 postData(docstoreURL, queryString);
877 }
878
879
880 public void transferItems(String requestXML) throws Exception{
881 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
882 System.out.println("transferItems docstoreURL "+docstoreURL);
883 String queryString=TRANSFER_ITEMS_QUERY_STRING + URLEncoder.encode(requestXML, "UTF-8");
884 postData(docstoreURL, queryString);
885 }
886
887
888 public String deleteItemrecord(String uuid) throws Exception {
889 String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
890 String queryString = "docAction=delete&requestContent=" + uuid;
891 String response = postData(docstoreURL,queryString);
892 return response;
893
894 }
895
896 public WorkBibDocument getInfoForBibTree(WorkBibDocument workBibDocument) {
897 QueryService queryService = QueryServiceImpl.getInstance();
898
899 try {
900 workBibDocument = queryService.queryForBibTree(workBibDocument);
901 } catch (Exception e) {
902 e.printStackTrace();
903 }
904 return workBibDocument;
905
906 }
907
908 public List<WorkBibDocument> getInfoForBibTree(List<WorkBibDocument> bibDocumentList) {
909 List<WorkBibDocument> workBibDocumentList = new ArrayList<WorkBibDocument>();
910 for (WorkBibDocument workBibDocument : bibDocumentList) {
911 getInfoForBibTree(workBibDocument);
912 workBibDocumentList.add(workBibDocument);
913 }
914
915 return workBibDocumentList;
916 }
917
918 public BibliographicRecord getBibliographicRecord(String bibUUID)throws Exception{
919 BibliographicRecord bibliographicRecord = null;
920 String responseDocStoreData = getDocstoreData(bibUUID);
921
922
923
924
925 Collection bibliographicRecords = new BibliographicRecordHandler().fromXML(responseDocStoreData);
926 List<BibliographicRecord> bibliographicRecordList = bibliographicRecords.getRecords();
927 Iterator<BibliographicRecord> bibliographicRecordListIterator = bibliographicRecordList.iterator();
928 if(bibliographicRecordListIterator.hasNext()){
929 bibliographicRecord = bibliographicRecordListIterator.next();
930 }
931 return bibliographicRecord;
932 }
933
934 public InstanceCollection getInstanceCollection(String instanceUUID)throws Exception{
935 String responseFromDocstore = getDocstoreData(instanceUUID);
936 InstanceCollection instanceCollection = new WorkInstanceOlemlRecordProcessor().fromXML(responseFromDocstore);
937 return instanceCollection;
938 }
939
940 public String updateOleHoldingToDocstore(OleHoldings oleHoldings)throws Exception{
941 String oleHoldingXMLString = getWorkHoldingOlemlRecordProcessor().toXML(oleHoldings);
942 String oleHoldingUUID = oleHoldings.getHoldingsIdentifier();
943 String response = updateInstanceRecord(oleHoldingUUID, OLEConstants.HOLDING_DOC_TYPE, oleHoldingXMLString);
944 return response;
945 }
946
947 public String updateOleItemToDocstore(Item item)throws Exception{
948 String oleItemXMLString = getWorkItemOlemlRecordProcessor().toXML(item);
949 String oleItemUUID = item.getItemIdentifier();
950 if(LOG.isInfoEnabled()){
951 LOG.info("oleItemUUID---------->"+oleItemUUID);
952 }
953 String response = updateInstanceRecord(oleItemUUID, OLEConstants.ITEM_DOC_TYPE, oleItemXMLString);
954 return response;
955 }
956
957 public WorkHoldingOlemlRecordProcessor getWorkHoldingOlemlRecordProcessor() {
958 if(workHoldingOlemlRecordProcessor == null){
959 workHoldingOlemlRecordProcessor = new WorkHoldingOlemlRecordProcessor();
960 }
961 return workHoldingOlemlRecordProcessor;
962 }
963
964 private WorkItemOlemlRecordProcessor getWorkItemOlemlRecordProcessor() {
965 if(workItemOlemlRecordProcessor == null){
966 workItemOlemlRecordProcessor = new WorkItemOlemlRecordProcessor();
967 }
968 return workItemOlemlRecordProcessor;
969 }
970 }