View Javadoc

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  //import org.kuali.ole.pojo.item.OleHolding;
40  //import org.kuali.ole.pojo.item.OleItem;
41  
42  /**
43   * DocstoreHelperService is the service class to access Docstore services
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     //Additional Attributes
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"); // new Record
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         //List<Extension>   extensionList = new ArrayList<Extension>();
513         //extensionList.add(extension);
514         oleInstance.setExtension(extension);
515         oleInstance.getOleHoldings().setPrimary(OLEConstants.TRUE);
516         //oleInstance.getOleHoldings().setReceiptStatus("");
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         //String instanceXML = workInstanceOlemlRecordProcessor.generateXML(getOleHolding(), getOleItem(bibliographicRecord));
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"); // new Record
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         //List<Extension>   extensionList = new ArrayList<Extension>();
583         //extensionList.add(extension);
584         oleInstance.setExtension(extension);
585         oleInstance.getOleHoldings().setPrimary(OLEConstants.TRUE);
586         //oleInstance.getOleHoldings().setReceiptStatus("");
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         //String instanceXML = workInstanceOlemlRecordProcessor.generateXML(getOleHolding(), getOleItem(bibliographicRecord));
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      *   Method to generate Request XML and ingest Instance record to docstore
717      * @param content
718      * @param uuid
719      * @param format
720      * @return  Docstore response for Ingesting New Instance Record
721      * @throws Exception
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      * Method to generate Request xml for Ingesting Instance record
733      * @param xmlContent
734      * @param uuid
735      * @param format
736      * @return   Request XML content
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      * Method to update Holding or Item record of an Instance record
766      * @param uuid
767      * @param docType
768      * @param xmlContent
769      * @return  Docstore XML response with success/failure status
770      * @throws Exception
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);  // docType should be either holdings or item
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      * This method used to delete a instance record
799      * @param instance
800      * @return
801      * @throws Exception
802      */
803 
804     public String deleteInstanceRecord(Instance instance) throws Exception {
805         String docstoreURL = PropertyUtil.getPropertyUtil().getProperty(DOCSTORE_URL);
806         //  Request deleteRequest = buildDeleteRequest(instance);
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      * This method used to delete a docstore record based on uuid
816      * @param uuid
817      * @return
818      * @throws Exception
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      * Method to add NEW ITEM for existing Instance record
829      * @param instanceUuid
830      * @param docType
831      * @param xmlContent
832      * @return  Docstore XML response with success/failure status
833      * @throws Exception
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 /*        ResponseHandler responseHandler = new ResponseHandler();
922         Response response = responseHandler.toObject(responseDocStoreData);
923         String responseContentXMLString = getResponseContent(response);
924         Collection bibliographicRecords = new BibliographicRecordHandler().fromXML(responseContentXMLString);*/
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 }