View Javadoc
1   package org.kuali.ole.describe.service;
2   
3   
4   import org.apache.commons.httpclient.HttpClient;
5   import org.apache.commons.httpclient.NameValuePair;
6   import org.apache.commons.httpclient.methods.DeleteMethod;
7   import org.apache.commons.httpclient.methods.GetMethod;
8   import org.apache.commons.io.IOUtils;
9   import org.apache.commons.lang.StringUtils;
10  import org.apache.log4j.Logger;
11  import org.apache.solr.client.solrj.SolrServerException;
12  import org.kuali.ole.BibliographicRecordHandler;
13  import org.kuali.ole.OLEConstants;
14  import org.kuali.ole.OleItemRecordHandler;
15  import org.kuali.ole.deliver.bo.OleDeliverRequestBo;
16  import org.kuali.ole.deliver.bo.OleItemSearch;
17  import org.kuali.ole.describe.keyvalue.LocationValuesBuilder;
18  import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
19  import org.kuali.ole.docstore.common.document.*;
20  import org.kuali.ole.docstore.common.document.content.instance.*;
21  import org.kuali.ole.docstore.common.document.content.instance.Item;
22  import org.kuali.ole.docstore.common.document.content.instance.Items;
23  import org.kuali.ole.docstore.common.document.content.instance.xstream.HoldingOlemlRecordProcessor;
24  import org.kuali.ole.docstore.common.document.content.instance.xstream.InstanceOlemlRecordProcessor;
25  import org.kuali.ole.docstore.discovery.service.QueryService;
26  import org.kuali.ole.docstore.discovery.service.QueryServiceImpl;
27  import org.kuali.ole.docstore.model.bo.WorkBibDocument;
28  import org.kuali.ole.docstore.model.enums.DocCategory;
29  import org.kuali.ole.docstore.model.enums.DocFormat;
30  import org.kuali.ole.docstore.model.enums.DocType;
31  import org.kuali.ole.docstore.model.jaxb.config.DocumentConfigConverter;
32  import org.kuali.ole.docstore.model.xmlpojo.config.DocumentConfig;
33  import org.kuali.ole.docstore.model.xmlpojo.ingest.*;
34  import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.DataField;
35  import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.SubField;
36  import org.kuali.ole.docstore.model.xstream.ingest.RequestHandler;
37  import org.kuali.ole.docstore.model.xstream.ingest.ResponseHandler;
38  import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor;
39  import org.kuali.ole.ingest.pojo.ProfileAttributeBo;
40  import org.kuali.ole.pojo.ProfileAttribute;
41  import org.kuali.ole.pojo.bib.BibliographicRecord;
42  import org.kuali.ole.pojo.bib.Collection;
43  import org.kuali.ole.pojo.edi.LineItemOrder;
44  import org.kuali.ole.select.bo.OLEInstanceSearch;
45  import org.kuali.ole.sys.context.SpringContext;
46  import org.kuali.rice.core.api.config.property.ConfigContext;
47  import org.kuali.rice.krad.util.GlobalVariables;
48  
49  import java.io.*;
50  import java.net.URL;
51  import java.net.URLConnection;
52  import java.net.URLEncoder;
53  import java.text.DateFormat;
54  import java.text.SimpleDateFormat;
55  import java.util.*;
56  
57  //import org.kuali.ole.pojo.item.OleHolding;
58  //import org.kuali.ole.pojo.item.OleItem;
59  
60  /**
61   * DocstoreHelperService is the service class to access Docstore services
62   */
63  public class DocstoreHelperService {
64  
65      private static final String DOCSTORE_URL = "docstore.url";
66      private final String CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING = "docAction=ingestContent&stringContent=";
67      private final String CHECKOUT_DOCSTORE_RECORD_QUERY_STRING = "docAction=checkOut&uuid=";
68      private final String UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING = "docAction=checkIn&stringContent=";
69      private final String ROLLBACK_DATA_FROM_DOCSTORE = "docAction=deleteWithLinkedDocs&requestContent=";
70      private final String TRANSFER_INSTANCES_QUERY_STRING = "docAction=transferInstances&stringContent=";
71      private final String TRANSFER_ITEMS_QUERY_STRING = "docAction=transferItems&stringContent=";
72      private static final String DOCSTORE_BASE_URL = "ole.docstore.url.base";
73      private static final String DOC_CONFIG_INFO = "/getDocumentConfigInfo";
74      private InstanceOlemlRecordProcessor instanceOlemlRecordProcessor;
75      private HoldingOlemlRecordProcessor holdingOlemlRecordProcessor;
76      private ItemOlemlRecordProcessor itemOlemlRecordProcessor;
77  
78      private static final Logger LOG = Logger.getLogger(DocstoreHelperService.class);
79  
80      private List<ProfileAttribute> attributes = new ArrayList<ProfileAttribute>();
81  
82      private DocstoreClientLocator docstoreClientLocator;
83  
84      public DocstoreClientLocator getDocstoreClientLocator() {
85          if (docstoreClientLocator == null) {
86              docstoreClientLocator = SpringContext.getBean(DocstoreClientLocator.class);
87          }
88          return docstoreClientLocator;
89      }
90  
91      public InstanceOlemlRecordProcessor getInstanceOlemlRecordProcessor() {
92          if (instanceOlemlRecordProcessor == null) {
93              instanceOlemlRecordProcessor = new InstanceOlemlRecordProcessor();
94          }
95          return instanceOlemlRecordProcessor;
96      }
97  
98      public HoldingOlemlRecordProcessor getHoldingOlemlRecordProcessor() {
99          if (holdingOlemlRecordProcessor == null) {
100             holdingOlemlRecordProcessor = new HoldingOlemlRecordProcessor();
101         }
102         return holdingOlemlRecordProcessor;
103     }
104 
105     private ItemOlemlRecordProcessor getItemOlemlRecordProcessor() {
106         if (itemOlemlRecordProcessor == null) {
107             itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
108         }
109         return itemOlemlRecordProcessor;
110     }
111 
112     public String persistToDocstoreForEditor(String content, String uuid, String format) throws Exception {
113         String responseFromDocstore = callToDocstore(null, content, uuid, format);
114         return responseFromDocstore;
115     }
116 
117     public String persistToDocstoreFromUnifiedEditor(String reqContent, String uuid, String format) throws Exception {
118         String responseFromDocstore = callToDocstore(reqContent, null, uuid, format);
119         return responseFromDocstore;
120     }
121 
122     private String callToDocstore(String reqContent, String content, String uuid, String format) throws Exception {
123         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
124         String queryString = null;
125         if (null == uuid) {
126             String xmlContent = "";
127             if (reqContent != null) {
128                 xmlContent = reqContent;
129             } else {
130                 xmlContent = buildRequestDocXML(content, format);
131             }
132             queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
133         } else {
134             String xmlContent = buildRequestDocXML(content, uuid, format);
135             queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
136         }
137 
138         return postData(docstoreURL, queryString);
139     }
140 
141 
142     private String callToDocstoreWithAdditionalAttributes(String content, AdditionalAttributes additionalAttributes, String uuid, String format) throws Exception {
143         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
144         String queryString = null;
145 
146         if (null == uuid) {
147             String xmlContent = buildRequestDocXMLWithAdditionalAttributes(content, additionalAttributes, format);
148             queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
149         } else {
150             String xmlContent = buildRequestDocXMLWithAdditionalAttributes(content, additionalAttributes, uuid, format);
151             queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
152         }
153 
154         return postData(docstoreURL, queryString);
155     }
156 
157     //Additional Attributes
158 
159     public String persistToDocstoreWithAdditionalAttributesForEditor(String content,
160                                                                      AdditionalAttributes additionalAttributes,
161                                                                      String uuid, String format) throws Exception {
162         String responseFromDocstore = callToDocstoreWithAdditionalAttributes(content, additionalAttributes, uuid,
163                 format);
164         return responseFromDocstore;
165     }
166 
167     public String persistNewToDocstoreForIngest(BibliographicRecord bibliographicRecord, List<ProfileAttributeBo> profileAttributes) throws Exception {
168         this.attributes = buildListOfProfileAttributes(profileAttributes);
169         BibliographicRecordHandler bibliographicRecordHandler = new BibliographicRecordHandler();
170         String bibXMLContent = bibliographicRecordHandler.generateXML(bibliographicRecord);
171         String instanceXMLContent = getInstanceXML(bibliographicRecord);
172         String requestXML = buildReuestDocXMLForIngest(bibXMLContent, instanceXMLContent);
173         String queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(requestXML);
174         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
175         String responseXML = postData(docstoreURL, queryString + queryString);
176         return responseXML;
177     }
178 
179     public String persistNewToDocstoreForIngest(LineItemOrder lineItemOrder, BibliographicRecord bibliographicRecord, List<ProfileAttributeBo> profileAttributes) throws Exception {
180         this.attributes = buildListOfProfileAttributes(profileAttributes);
181         BibliographicRecordHandler bibliographicRecordHandler = new BibliographicRecordHandler();
182         String bibXMLContent = bibliographicRecordHandler.generateXML(bibliographicRecord);
183         String instanceXMLContent = getInstanceXML(lineItemOrder, bibliographicRecord);
184         String requestXML = buildReuestDocXMLForIngest(bibXMLContent, instanceXMLContent);
185         String queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(requestXML);
186         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
187         String responseXML = postData(docstoreURL, queryString + queryString);
188         return responseXML;
189     }
190 
191     public String getDocstoreData(String uuid) throws Exception {
192         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
193         String queryString = CHECKOUT_DOCSTORE_RECORD_QUERY_STRING + uuid;
194         String responseFromDocstore = postData(docstoreURL, queryString);
195         Response response = new ResponseHandler().toObject(responseFromDocstore);
196         String responseContent = getResponseContent(response);
197         return responseContent;
198     }
199 
200     public String getDocstoreData(String docCategory, String docType, String docFormat, String uuid) throws Exception {
201         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
202         String queryString = CHECKOUT_DOCSTORE_RECORD_QUERY_STRING + uuid + "&docCategory=" + docCategory + "&docType=" + docType + "&docFormat=" + docFormat;
203         String responseFromDocstore = postData(docstoreURL, queryString);
204         Response response = new ResponseHandler().toObject(responseFromDocstore);
205         String responseContent = getResponseContent(response);
206         return responseContent;
207     }
208 
209     public ResponseDocument checkOutDocument(String docCategory, String docType, String docFormat, String uuid) throws Exception {
210         ResponseDocument responseDocument = null;
211         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
212         String queryString = CHECKOUT_DOCSTORE_RECORD_QUERY_STRING + uuid + "&docCategory=" + docCategory + "&docType=" + docType + "&docFormat=" + docFormat;
213         String responseFromDocstore = postData(docstoreURL, queryString);
214         Response response = new ResponseHandler().toObject(responseFromDocstore);
215         responseDocument = response.getDocuments().get(0);
216         return responseDocument;
217     }
218 
219     public String getResponseContent(Response response) {
220         String responseString = null;
221         if (response != null) {
222             List<ResponseDocument> responseDocumentList = response.getDocuments();
223             if (responseDocumentList.size() > 0) {
224                 ResponseDocument responseDocument = responseDocumentList.get(0);
225                 if(responseDocument.getStatus() != null && responseDocument.getStatus().contains("Failed")) {
226                     return null;
227                 }
228                 Content contentObj = responseDocument.getContent();
229                 if (contentObj != null) {
230                     responseString = contentObj.getContent();
231                 }
232             }
233         }
234         return responseString;
235     }
236 
237 
238     public static String postData(String target, String content) throws Exception {
239         String response = "";
240         URL url = new URL(target);
241         URLConnection conn = url.openConnection();
242         conn.setDoInput(true);
243         conn.setDoOutput(true);
244         conn.setUseCaches(false);
245         conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
246 
247         Writer w = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
248         w.write(content);
249         w.close();
250         BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
251         String temp;
252         while ((temp = in.readLine()) != null) {
253             response += temp + "\n";
254         }
255         in.close();
256         return response;
257     }
258 
259 
260     private String buildRequestDocXML(String xmlContent, String format) {
261         return buildRequestDocXML(xmlContent, null, format);
262     }
263 
264     private String buildRequestDocXMLWithAdditionalAttributes(String xmlContent, AdditionalAttributes additionalAttributes, String format) {
265         return buildRequestDocXMLWithAdditionalAttributes(xmlContent, additionalAttributes, null, format);
266     }
267 
268     public String buildReuestDocXMLForIngest(String bibXML, String instanceXML) {
269         Request requestObject = new Request();
270         requestObject.setUser(GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName() : "");
271         requestObject.setOperation(OLEConstants.INGEST_OPERATION);
272         RequestDocument requestDocument = new RequestDocument();
273         requestDocument.setId("1");
274         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
275         requestDocument.setType(OLEConstants.BIB_DOC_TYPE);
276         requestDocument.setFormat(OLEConstants.MARC_FORMAT);
277         requestDocument.setContent(new Content(bibXML));
278 
279         AdditionalAttributes additionalAttributes = new AdditionalAttributes();
280         DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
281         additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
282         additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
283         additionalAttributes.setFastAddFlag("true");
284         additionalAttributes.setSupressFromPublic("false");
285         additionalAttributes.setAttribute("dateEntered", String.valueOf(dateFormat.format(new Date())));
286         additionalAttributes.setAttribute("lastUpdated", String.valueOf(dateFormat.format(new Date())));
287         additionalAttributes.setAttribute("fastAddFlag", "true");
288         additionalAttributes.setAttribute("supressFromPublic", "false");
289         requestDocument.setAdditionalAttributes(additionalAttributes);
290 
291         RequestDocument linkedRequestDocument = new RequestDocument();
292         linkedRequestDocument.setId("2");
293         linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
294         linkedRequestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
295         linkedRequestDocument.setContent(new Content(instanceXML));
296         linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
297 
298         ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
299         linkedRequestDocuments.add(linkedRequestDocument);
300 
301         requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
302 
303         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
304         requestDocuments.add(requestDocument);
305         requestObject.setRequestDocuments(requestDocuments);
306 
307         RequestHandler requestHandler = new RequestHandler();
308         String xml = requestHandler.toXML(requestObject);
309         return xml;
310     }
311 
312 
313     private String buildRequestDocXML(String xmlContent, String uuid, String format) {
314         String INSTANCE_MARC_XML_STRING = "<instanceCollection>\n" +
315                 "  <instance>\n" +
316                 "<instanceIdentifier></instanceIdentifier>\n" +
317                 "    <oleHoldings primary=\"true\">\n" +
318                 "       <holdingsIdentifier></holdingsIdentifier>\n" +
319                 "       <receiptStatus></receiptStatus>\n" +
320                 "       <uri></uri>\n" +
321                 "       <note type=\"public\"></note>\n" +
322                 "       <location primary=\"true\" status=\"permanent\">\n" +
323                 "           <locationLevel>\n" +
324                 "               <name></name>\n" +
325                 "               <level></level>\n" +
326                 "               <locationLevel>\n" +
327                 "                   <name></name>\n" +
328                 "                   <level></level>\n" +
329                 "                   <locationLevel>\n" +
330                 "                       <name></name>\n" +
331                 "                       <level></level>\n" +
332                 "                       <locationLevel>\n" +
333                 "                           <name></name>\n" +
334                 "                           <level></level>\n" +
335                 "                       </locationLevel>\n" +
336                 "                    </locationLevel>\n" +
337                 "                </locationLevel>\n" +
338                 "        </locationLevel>\n" +
339                 "      </location>\n" +
340                 "      <extension>\n" +
341                 "        <additionalAttributes>\n" +
342                 "          <createdBy></createdBy>\n" +
343                 "          <dateEntered></dateEntered>\n" +
344                 "        </additionalAttributes>\n" +
345                 "      </extension>\n" +
346                 "      <callNumber>\n" +
347                 "        <type></type>\n" +
348                 "        <prefix></prefix>\n" +
349                 "        <number></number>\n" +
350                 "        <shelvingScheme>\n" +
351                 "          <codeValue></codeValue>\n" +
352                 "        </shelvingScheme>\n" +
353                 "        <shelvingOrder>\n" +
354                 "          <codeValue></codeValue>\n" +
355                 "        </shelvingOrder>\n" +
356                 "      </callNumber>\n" +
357                 "    </oleHoldings>\n" +
358                 "    <items>\n" +
359                 "      <item>\n" +
360                 "        <staffOnlyFlag>false</staffOnlyFlag>\n" +
361                 "        <fastAddFlag>false</fastAddFlag>\n" +
362                 "        <extension reference=\"../../../oleHoldings/extension\"/>\n" +
363                 "      </item>\n" +
364                 "    </items>\n" +
365                 "  </instance>\n" +
366                 "</instanceCollection>";
367         Request requestObject = new Request();
368         RequestDocument requestDocument = new RequestDocument();
369 
370         if (null == uuid) {
371             requestDocument.setId("1");
372             RequestDocument linkedRequestDocument = new RequestDocument();
373             linkedRequestDocument.setId("2");
374             linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
375             linkedRequestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
376             linkedRequestDocument.setContent(new Content(INSTANCE_MARC_XML_STRING));
377             linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
378 
379             ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
380             linkedRequestDocuments.add(linkedRequestDocument);
381 
382             requestObject.setOperation(OLEConstants.INGEST_OPERATION);
383             requestObject.setUser(GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName() : "");
384             requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
385         } else {
386             requestDocument.setId(uuid);
387             requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
388             requestObject.setUser("editor");
389         }
390         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
391         requestDocument.setType(OLEConstants.BIB_DOC_TYPE);
392 
393         if (format.equalsIgnoreCase("marc")) {
394             requestDocument.setFormat(OLEConstants.MARC_FORMAT);
395         } else if (format.equalsIgnoreCase("dublinunq")) {
396             requestDocument.setFormat(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT);
397         }
398 
399         requestDocument.setContent(new Content(xmlContent));
400 
401         if (format.equalsIgnoreCase("marc")) {
402             AdditionalAttributes additionalAttributes = new AdditionalAttributes();
403             DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
404             if (null == uuid) {
405                 additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
406             }
407             additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
408             additionalAttributes.setFastAddFlag("true");
409             additionalAttributes.setSupressFromPublic("false");
410             requestDocument.setAdditionalAttributes(additionalAttributes);
411         }
412 
413         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
414         requestDocuments.add(requestDocument);
415         requestObject.setRequestDocuments(requestDocuments);
416 
417         RequestHandler requestHandler = new RequestHandler();
418         String xml = requestHandler.toXML(requestObject);
419 
420         if (format.equalsIgnoreCase(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT)) {
421             xml = modifyXmlContent(xml);
422         }
423         return xml;
424     }
425 
426     private String buildRequestDocXMLWithAdditionalAttributes(String xmlContent,
427                                                               AdditionalAttributes additionalAttributes, String uuid,
428                                                               String format) {
429         String user = null;
430         user = GlobalVariables.getUserSession().getPrincipalName();
431         String INSTANCE_MARC_XML_STRING = "<instanceCollection>\n" +
432                 "  <instance>\n" +
433                 "<instanceIdentifier></instanceIdentifier>\n" +
434                 "    <oleHoldings primary=\"true\">\n" +
435                 "       <holdingsIdentifier></holdingsIdentifier>\n" +
436                 "       <!--Zero or more repetitions:-->\n" +
437                 "       <extentOfOwnership>\n" +
438                 "          <textualHoldings></textualHoldings>\n" +
439                 "              <!--Zero or more repetitions:-->\n" +
440                 "                 <note type=\"string\"></note>\n" +
441                 "           <type></type>\n" +
442                 "       </extentOfOwnership>\n" +
443                 "       <receiptStatus></receiptStatus>\n" +
444                 "       <uri></uri>\n" +
445                 "       <note type=\"public\"></note>\n" +
446 /*
447                                           "       <location primary=\"true\" status=\"permanent\">\n" +
448                                           "           <locationLevel>\n" +
449                                           "               <name>Holdings</name>\n" +
450                                           "               <level></level>\n" +
451                                           "               <locationLevel>\n" +
452                                           "                   <name></name>\n" +
453                                           "                   <level></level>\n" +
454                                           "                   <locationLevel>\n" +
455                                           "                       <name></name>\n" +
456                                           "                       <level></level>\n" +
457                                           "                       <locationLevel>\n" +
458                                           "                           <name></name>\n" +
459                                           "                           <level></level>\n" +
460                                           "                       </locationLevel>\n" +
461                                           "                    </locationLevel>\n" +
462                                           "                </locationLevel>\n" +
463                                           "        </locationLevel>\n" +
464                                           "      </location>\n" +
465 */
466                 "      <extension>\n" +
467                 "        <additionalAttributes>\n" +
468                 "          <createdBy>" + user + "</createdBy>\n" +
469                 "          <dateEntered></dateEntered>\n" +
470                 "        </additionalAttributes>\n" +
471                 "      </extension>\n" +
472                 "      <callNumber>\n" +
473                 "        <type></type>\n" +
474                 "        <prefix></prefix>\n" +
475                 "        <number></number>\n" +
476                 "        <shelvingScheme>\n" +
477                 "          <codeValue></codeValue>\n" +
478                 "        </shelvingScheme>\n" +
479                 "        <shelvingOrder>\n" +
480                 "          <codeValue></codeValue>\n" +
481                 "          <fullValue></fullValue>\n" +
482                 "        </shelvingOrder>\n" +
483                 "      </callNumber>\n" +
484                 "    </oleHoldings>\n" +
485                 "    <items>\n" +
486                 "      <item>\n" +
487                 "          <copyNumber></copyNumber>\n" +
488                 "           <volumeNumber></volumeNumber>\n" +
489                 "          <note type=\"public\"></note>" +
490                 "          <callNumber>\n" +
491                 "                <number></number>\n" +
492                 "          </callNumber>\n" +
493                 "        <staffOnlyFlag>false</staffOnlyFlag>\n" +
494                 "        <fastAddFlag>false</fastAddFlag>\n" +
495                 "        <extension reference=\"../../../oleHoldings/extension\"/>\n" +
496                 "      </item>\n" +
497                 "    </items>\n" +
498                 "  </instance>\n" +
499                 "</instanceCollection>";
500         Request requestObject = new Request();
501         RequestDocument requestDocument = new RequestDocument();
502         if (null == uuid) {
503             requestDocument.setId("1");
504             RequestDocument linkedRequestDocument = new RequestDocument();
505             linkedRequestDocument.setId("2");
506             linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
507             linkedRequestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
508             linkedRequestDocument.setContent(new Content(INSTANCE_MARC_XML_STRING));
509             linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
510 
511             ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
512             linkedRequestDocuments.add(linkedRequestDocument);
513 
514             requestObject.setOperation(OLEConstants.INGEST_OPERATION);
515             requestObject.setUser(
516                     GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName()
517                             : "");
518             requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
519         } else {
520             requestDocument.setId(uuid);
521             requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
522             requestObject.setUser(
523                     GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName()
524                             : "");
525             //requestObject.setUser("editor");
526         }
527         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
528         requestDocument.setType(OLEConstants.BIB_DOC_TYPE);
529 
530         if (format.equalsIgnoreCase("marc")) {
531             requestDocument.setFormat(OLEConstants.MARC_FORMAT);
532         } else if (format.equalsIgnoreCase("dublinunq")) {
533             requestDocument.setFormat(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT);
534         }
535 
536         requestDocument.setContent(new Content(xmlContent));
537         if (additionalAttributes != null && requestDocument.getType().equalsIgnoreCase(OLEConstants.BIB_DOC_TYPE)) {
538             requestDocument.setAdditionalAttributes(additionalAttributes);
539         }
540 
541         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
542         requestDocuments.add(requestDocument);
543         requestObject.setRequestDocuments(requestDocuments);
544 
545         RequestHandler requestHandler = new RequestHandler();
546         String xml = requestHandler.toXML(requestObject);
547         if (format.equalsIgnoreCase(OLEConstants.UNQUALIFIED_DUBLIN_FORMAT)) {
548             xml = modifyXmlContent(xml);
549         }
550         return xml;
551     }
552 
553     public String getInstanceXML(BibliographicRecord bibliographicRecord) {
554         InstanceOlemlRecordProcessor instanceOlemlRecordProcessor = new InstanceOlemlRecordProcessor();
555         InstanceCollection instanceCollection = new InstanceCollection();
556         Instance oleInstance = new Instance();
557         List<Item> oleItemList = new ArrayList<Item>();
558         oleItemList.add(getOleItem(bibliographicRecord));
559         if (oleInstance.getItems() == null) {
560             oleInstance.setItems(new Items());
561         }
562         oleInstance.getItems().setItem(oleItemList);
563         oleInstance.setOleHoldings(getOleHolding(bibliographicRecord));
564 
565         Extension extension = new Extension();
566         AdditionalAttributes additionalAttributes = new AdditionalAttributes();
567         DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
568         additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
569         additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
570         additionalAttributes.setSupressFromPublic("false");
571         additionalAttributes.setFastAddFlag("false");
572         additionalAttributes.setHarvestable("true");
573         additionalAttributes.setStatus("n"); // new Record
574         additionalAttributes.setAttribute("dateEntered", additionalAttributes.getDateEntered());
575         additionalAttributes.setAttribute("lastUpdated", additionalAttributes.getLastUpdated());
576         additionalAttributes.setAttribute("fastAddFlag", additionalAttributes.getFastAddFlag());
577         additionalAttributes.setAttribute("supressFromPublic", additionalAttributes.getSupressFromPublic());
578         additionalAttributes.setAttribute("harvestable", additionalAttributes.getHarvestable());
579         additionalAttributes.setAttribute("status", additionalAttributes.getStatus());
580         extension.getContent().add(additionalAttributes);
581         //List<Extension>   extensionList = new ArrayList<Extension>();
582         //extensionList.add(extension);
583         oleInstance.setExtension(extension);
584         oleInstance.getOleHoldings().setPrimary(OLEConstants.TRUE);
585         //oleInstance.getOleHoldings().setReceiptStatus("");
586         Uri uri = new Uri();
587         uri.setValue("");
588         uri.setResolvable(null);
589         oleInstance.getOleHoldings().getUri().add(uri);
590         Note note = new Note();
591         note.setType(OLEConstants.NOTE_TYPE);
592         oleInstance.getOleHoldings().getNote().add(note);
593         CallNumber callNumber = new CallNumber();
594         ShelvingScheme shelvingScheme = new ShelvingScheme();
595         ShelvingOrder shelvingOrder = new ShelvingOrder();
596         callNumber.setType("");
597         callNumber.setPrefix("");
598         callNumber.setNumber("");
599         shelvingScheme.setCodeValue("");
600         shelvingOrder.setCodeValue("");
601         callNumber.setShelvingScheme(shelvingScheme);
602         callNumber.setShelvingOrder(shelvingOrder);
603         oleInstance.getOleHoldings().setCallNumber(callNumber);
604         List<Instance> oleInstanceList = new ArrayList<Instance>();
605         OleHoldings oleHoldings = oleInstance.getOleHoldings();
606         if (oleHoldings.getLocation() == null) {
607             LocationLevel locationLevel = new LocationLevel();
608             Location location = new Location();
609             locationLevel.setLevel("");
610             locationLevel.setName("");
611             location.setPrimary(OLEConstants.TRUE);
612             location.setStatus(OLEConstants.PERMANENT);
613             location.setLocationLevel(locationLevel);
614             oleInstance.getOleHoldings().setLocation(location);
615         }
616         oleInstanceList.add(oleInstance);
617         instanceCollection.setInstance(oleInstanceList);
618         //String instanceXML = instanceOlemlRecordProcessor.generateXML(getOleHolding(), getOleItem(bibliographicRecord));
619         String instanceXML = instanceOlemlRecordProcessor.toXML(instanceCollection);
620         return instanceXML;
621     }
622 
623     public String getInstanceXML(LineItemOrder lineItemOrder, BibliographicRecord bibliographicRecord) {
624         InstanceOlemlRecordProcessor instanceOlemlRecordProcessor = new InstanceOlemlRecordProcessor();
625         InstanceCollection instanceCollection = new InstanceCollection();
626         Instance oleInstance = new Instance();
627         List<Item> oleItemList = new ArrayList<Item>();
628         oleItemList.add(getOleItem(lineItemOrder, bibliographicRecord));
629         if (oleInstance.getItems() == null) {
630             oleInstance.setItems(new Items());
631         }
632         oleInstance.getItems().setItem(oleItemList);
633         oleInstance.setOleHoldings(getOleHolding(bibliographicRecord));
634 
635         Extension extension = new Extension();
636         AdditionalAttributes additionalAttributes = new AdditionalAttributes();
637         DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
638         additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
639         additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
640         additionalAttributes.setSupressFromPublic("false");
641         additionalAttributes.setFastAddFlag("false");
642         additionalAttributes.setHarvestable("true");
643         additionalAttributes.setStatus("n"); // new Record
644         additionalAttributes.setAttribute("dateEntered", additionalAttributes.getDateEntered());
645         additionalAttributes.setAttribute("lastUpdated", additionalAttributes.getLastUpdated());
646         additionalAttributes.setAttribute("fastAddFlag", additionalAttributes.getFastAddFlag());
647         additionalAttributes.setAttribute("supressFromPublic", additionalAttributes.getSupressFromPublic());
648         additionalAttributes.setAttribute("harvestable", additionalAttributes.getHarvestable());
649         additionalAttributes.setAttribute("status", additionalAttributes.getStatus());
650         extension.getContent().add(additionalAttributes);
651         //List<Extension>   extensionList = new ArrayList<Extension>();
652         //extensionList.add(extension);
653         oleInstance.setExtension(extension);
654         oleInstance.getOleHoldings().setPrimary(OLEConstants.TRUE);
655         //oleInstance.getOleHoldings().setReceiptStatus("");
656         Uri uri = new Uri();
657         uri.setValue("");
658         uri.setResolvable(null);
659         oleInstance.getOleHoldings().getUri().add(uri);
660         Note note = new Note();
661         note.setType(OLEConstants.NOTE_TYPE);
662         oleInstance.getOleHoldings().getNote().add(note);
663         CallNumber callNumber = new CallNumber();
664         ShelvingScheme shelvingScheme = new ShelvingScheme();
665         ShelvingOrder shelvingOrder = new ShelvingOrder();
666         callNumber.setType("");
667         callNumber.setPrefix("");
668         callNumber.setNumber("");
669         shelvingScheme.setCodeValue("");
670         shelvingOrder.setCodeValue("");
671         callNumber.setShelvingScheme(shelvingScheme);
672         callNumber.setShelvingOrder(shelvingOrder);
673         oleInstance.getOleHoldings().setCallNumber(callNumber);
674         List<Instance> oleInstanceList = new ArrayList<Instance>();
675         OleHoldings oleHoldings = oleInstance.getOleHoldings();
676         if (oleHoldings.getLocation() == null) {
677             LocationLevel locationLevel = new LocationLevel();
678             Location location = new Location();
679             locationLevel.setLevel("");
680             locationLevel.setName("");
681             location.setPrimary(OLEConstants.TRUE);
682             location.setStatus(OLEConstants.PERMANENT);
683             location.setLocationLevel(locationLevel);
684             oleInstance.getOleHoldings().setLocation(location);
685         }
686         oleInstanceList.add(oleInstance);
687         instanceCollection.setInstance(oleInstanceList);
688         //String instanceXML = instanceOlemlRecordProcessor.generateXML(getOleHolding(), getOleItem(bibliographicRecord));
689         String instanceXML = instanceOlemlRecordProcessor.toXML(instanceCollection);
690         return instanceXML;
691     }
692 
693     public OleHoldings getOleHolding(BibliographicRecord bibliographicRecord) {
694         //TODO: return ole holdings as in OleHoldingsRecordHandler().getOleHoldings()
695         return null; //new OleHoldingsRecordHandler().getOleHoldings(bibliographicRecord, attributes);
696     }
697 
698     public Item getOleItem(BibliographicRecord bibliographicRecord) {
699         for (DataField dataField : bibliographicRecord.getDatafields()) {
700             if (dataField.getTag().equalsIgnoreCase(OLEConstants.DATA_FIELD_985)) {
701                 List<SubField> subFieldList = dataField.getSubFields();
702                 SubField subField = new SubField();
703                 subField.setCode(OLEConstants.SUB_FIELD_A);
704                 subField.setValue(OLEConstants.DEFAULT_LOCATION_LEVEL_INSTITUTION);
705                 subFieldList.add(subField);
706                 dataField.setSubFields(subFieldList);
707             }
708         }
709         //TODO: return ole holdings as in OleItemRecordHandler().getOleItem()
710         return null; //new OleItemRecordHandler().getOleItem(bibliographicRecord, attributes);
711     }
712 
713     public Item getOleItem(LineItemOrder lineItemOrder, BibliographicRecord bibliographicRecord) {
714         for (DataField dataField : bibliographicRecord.getDatafields()) {
715             if (dataField.getTag().equalsIgnoreCase(OLEConstants.DATA_FIELD_985)) {
716                 List<SubField> subFieldList = dataField.getSubFields();
717                 SubField subField = new SubField();
718                 subField.setCode(OLEConstants.SUB_FIELD_A);
719                 subField.setValue(OLEConstants.DEFAULT_LOCATION_LEVEL_INSTITUTION);
720                 subFieldList.add(subField);
721                 dataField.setSubFields(subFieldList);
722             }
723         }
724         //TODO: return ole holdings as in OleItemRecordHandler().getOleItem()
725         return null; //new OleItemRecordHandler().getOleItem(lineItemOrder, bibliographicRecord, attributes);
726     }
727 
728     private List<ProfileAttribute> buildListOfProfileAttributes(List<ProfileAttributeBo> profileAttributes) {
729         for (Iterator iterator = profileAttributes.iterator(); iterator.hasNext(); ) {
730             ProfileAttributeBo profileAttributeBo = (ProfileAttributeBo) iterator.next();
731             ProfileAttribute profileAttribute = new ProfileAttribute();
732             profileAttribute.setAgendaName(profileAttributeBo.getAgendaName());
733             profileAttribute.setAttributeName(profileAttributeBo.getAttributeName());
734             profileAttribute.setAttributeValue(profileAttributeBo.getAttributeValue());
735             profileAttribute.setSystemValue(profileAttributeBo.getSystemValue());
736             attributes.add(profileAttribute);
737         }
738         return attributes;
739     }
740 
741     private String modifyXmlContent(String inputXmlContent) {
742         StringBuffer modifiedContent = new StringBuffer(inputXmlContent);
743         modifiedContent.replace(modifiedContent.indexOf("<oai_dc:dc"), modifiedContent.indexOf(">", modifiedContent.indexOf("<oai_dc:dc")),
744                 "<oai_dc:dc xmlns:oai_dc=\"http://www.openarchives.org/OAI/2.0/oai_dc/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"");
745         return modifiedContent.toString();
746     }
747 
748     public void rollbackData(String xmlForRollback) throws Exception {
749         String queryString = ROLLBACK_DATA_FROM_DOCSTORE + URLEncoder.encode(xmlForRollback, "UTF-8");
750         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
751         postData(docstoreURL, queryString + queryString);
752     }
753 
754 
755     public String updateItem(BibliographicRecord bibliographicRecord, String itemUUID) {
756         String responseXML = null;
757         try {
758             Item oleItem = getOleItem(bibliographicRecord);
759             OleItemRecordHandler oleItemRecordHandler = new OleItemRecordHandler();
760             //TODO : use ole-docstore-common code
761             String itemXML = ""; //oleItemRecordHandler.toXML(oleItem);
762             String requestXML = buildReuestDocXMLForUpdate(itemXML, itemUUID);
763             String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(requestXML, "UTF-8");
764             String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
765             responseXML = postData(docstoreURL, queryString);
766         } catch (Exception e) {
767             //e.printStackTrace();
768             LOG.error("updateItem Exception:" + e);
769         }
770         return responseXML;
771     }
772 
773     public String buildReuestDocXMLForUpdate(String itemXML, String itemUUID) {
774         Request requestObject = new Request();
775         RequestDocument requestDocument = new RequestDocument();
776         requestDocument.setId(itemUUID);
777         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
778         requestDocument.setType(OLEConstants.ITEM_DOC_TYPE);
779         requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
780         requestDocument.setContent(new Content(itemXML));
781 
782         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
783         requestDocuments.add(requestDocument);
784         requestObject.setRequestDocuments(requestDocuments);
785         RequestHandler requestHandler = new RequestHandler();
786         String xml = requestHandler.toXML(requestObject);
787         return xml;
788     }
789 
790     /**
791      * Method to generate Request XML and ingest Instance record to docstore
792      *
793      * @param content
794      * @param uuid
795      * @param format
796      * @return Docstore response for Ingesting New Instance Record
797      * @throws Exception
798      */
799     public String instanceRecordCallToDocstore(String content, String uuid, String format) throws Exception {
800         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
801         String queryString = null;
802         String xmlContent = buildInstanceRequestDocXML(content, uuid, format);
803         queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xmlContent, "UTF-8");
804         return postData(docstoreURL, queryString);
805     }
806 
807     /**
808      * Method to generate Request xml for Ingesting Instance record
809      *
810      * @param xmlContent
811      * @param uuid
812      * @param format
813      * @return Request XML content
814      */
815     private String buildInstanceRequestDocXML(String xmlContent, String uuid, String format) {
816         Request requestObject = new Request();
817         RequestDocument requestDocument = new RequestDocument();
818         if (null == uuid) {
819             requestDocument.setId("1");
820             requestObject.setOperation(OLEConstants.INGEST_OPERATION);
821         } else {
822             requestDocument.setId(uuid);
823             requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
824         }
825         requestObject.setUser(GlobalVariables.getUserSession().getPrincipalName());
826         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
827         requestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
828         requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
829 
830         requestDocument.setContent(new Content(xmlContent));
831 
832         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
833         requestDocuments.add(requestDocument);
834         requestObject.setRequestDocuments(requestDocuments);
835 
836         RequestHandler requestHandler = new RequestHandler();
837         String requestXml = requestHandler.toXML(requestObject);
838         return requestXml;
839     }
840 
841     /**
842      * Method to update Holding or Item record of an Instance record
843      *
844      * @param uuid
845      * @param docType
846      * @param xmlContent
847      * @return Docstore XML response with success/failure status
848      * @throws Exception
849      */
850     public String updateInstanceRecord(String uuid, String docType, String xmlContent) throws Exception {
851         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
852         Request requestObject = new Request();
853         requestObject.setUser(GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName() :
854                 "admin");
855         LOG.info("requestObject.getUser()" + requestObject.getUser());
856         requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
857         RequestDocument requestDocument = new RequestDocument();
858 
859         requestDocument.setId(uuid);
860         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
861         requestDocument.setType(docType);  // docType should be either holdings or item
862         requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
863         requestDocument.setContent(new Content(xmlContent));
864 
865         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
866         requestDocuments.add(requestDocument);
867         requestObject.setRequestDocuments(requestDocuments);
868 
869         RequestHandler requestHandler = new RequestHandler();
870         String xml = requestHandler.toXML(requestObject);
871 
872         String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xml, "UTF-8");
873 
874         return postData(docstoreURL, queryString);
875     }
876 
877     public String updateInstanceRecord(String uuid, String docType, String xmlContent, AdditionalAttributes additionalAttributes) throws Exception {
878         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
879         Request requestObject = new Request();
880         requestObject.setUser(GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName() :
881                 "admin");
882         LOG.info("requestObject.getUser()" + requestObject.getUser());
883         requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
884         RequestDocument requestDocument = new RequestDocument();
885 
886         requestDocument.setId(uuid);
887         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
888         requestDocument.setType(docType);  // docType should be either holdings or item
889         requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
890         requestDocument.setContent(new Content(xmlContent));
891         requestDocument.setAdditionalAttributes(additionalAttributes);
892 
893         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
894         requestDocuments.add(requestDocument);
895         requestObject.setRequestDocuments(requestDocuments);
896 
897         RequestHandler requestHandler = new RequestHandler();
898         String xml = requestHandler.toXML(requestObject);
899 
900         String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xml, "UTF-8");
901 
902         return postData(docstoreURL, queryString);
903     }
904 
905     /**
906      * This method used to delete a instance record
907      *
908      * @param instance
909      * @return
910      * @throws Exception
911      */
912 
913     public String deleteInstanceRecord(Instance instance) throws Exception {
914         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
915         //  Request deleteRequest = buildDeleteRequest(instance);
916         String uuid = instance.getInstanceIdentifier();
917         String queryString = "docAction=delete&requestContent=" + uuid;
918         String response = postData(docstoreURL, queryString);
919         return response;
920 
921     }
922 
923     /**
924      * This method used to delete a docstore record based on uuid
925      *
926      * @param uuid
927      * @return
928      * @throws Exception
929      */
930     public String deleteDocstoreRecord(String uuid) throws Exception {
931         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
932         String queryString = "docAction=delete&requestContent=" + uuid;
933         String response = postData(docstoreURL, queryString);
934         return response;
935 
936     }
937 
938     /**
939      * Method to add NEW ITEM for existing Instance record
940      *
941      * @param instanceUuid
942      * @param docType
943      * @param xmlContent
944      * @return Docstore XML response with success/failure status
945      * @throws Exception
946      */
947     public String createItemForInstanceRecord(String instanceUuid, String docType, String xmlContent) throws Exception {
948         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
949         Request requestObject = new Request();
950         requestObject.setUser(GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName() : "");
951         requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
952         RequestDocument requestDocument = new RequestDocument();
953 
954         requestDocument.setId(instanceUuid);
955         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
956         requestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
957         requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
958 
959 
960         RequestDocument linkedRequestDocument = new RequestDocument();
961         linkedRequestDocument.setId(OLEConstants.NEW_ITEM_ID);
962         linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
963         linkedRequestDocument.setType(docType);
964         linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
965         linkedRequestDocument.setContent(new Content(xmlContent));
966 
967         List<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
968         linkedRequestDocuments.add(linkedRequestDocument);
969         requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
970 
971 
972         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
973         requestDocuments.add(requestDocument);
974         requestObject.setRequestDocuments(requestDocuments);
975 
976         RequestHandler requestHandler = new RequestHandler();
977         String xml = requestHandler.toXML(requestObject);
978 
979         String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xml, "UTF-8");
980 
981         return postData(docstoreURL, queryString);
982 
983     }
984 
985     public String createItemForInstanceRecord(String instanceUuid, String docType, String xmlContent, AdditionalAttributes additionalAttributes) throws Exception {
986         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
987         Request requestObject = new Request();
988         requestObject.setUser(GlobalVariables.getUserSession() != null ? GlobalVariables.getUserSession().getPrincipalName() : "");
989         requestObject.setOperation(OLEConstants.CHECK_IN_OPERATION);
990         RequestDocument requestDocument = new RequestDocument();
991 
992         requestDocument.setId(instanceUuid);
993         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
994         requestDocument.setType(OLEConstants.INSTANCE_DOC_TYPE);
995         requestDocument.setFormat(OLEConstants.OLEML_FORMAT);
996         requestDocument.setAdditionalAttributes(additionalAttributes);
997 
998 
999         RequestDocument linkedRequestDocument = new RequestDocument();
1000         linkedRequestDocument.setId(OLEConstants.NEW_ITEM_ID);
1001         linkedRequestDocument.setCategory(OLEConstants.WORK_CATEGORY);
1002         linkedRequestDocument.setType(docType);
1003         linkedRequestDocument.setFormat(OLEConstants.OLEML_FORMAT);
1004         linkedRequestDocument.setContent(new Content(xmlContent));
1005 
1006         List<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
1007         linkedRequestDocuments.add(linkedRequestDocument);
1008         requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
1009 
1010 
1011         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
1012         requestDocuments.add(requestDocument);
1013         requestObject.setRequestDocuments(requestDocuments);
1014 
1015         RequestHandler requestHandler = new RequestHandler();
1016         String xml = requestHandler.toXML(requestObject);
1017 
1018         String queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(xml, "UTF-8");
1019 
1020         return postData(docstoreURL, queryString);
1021 
1022     }
1023 
1024     public void transferInstances(String requestXML) throws Exception {
1025         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
1026         LOG.debug("transferInstances docstoreURL " + docstoreURL);
1027         String queryString = TRANSFER_INSTANCES_QUERY_STRING + URLEncoder.encode(requestXML, "UTF-8");
1028         postData(docstoreURL, queryString);
1029     }
1030 
1031 
1032     public String transferItems(String requestXML) throws Exception {
1033         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
1034         LOG.debug("transferItems docstoreURL " + docstoreURL);
1035         String queryString = TRANSFER_ITEMS_QUERY_STRING + URLEncoder.encode(requestXML, "UTF-8");
1036         String response = postData(docstoreURL, queryString);
1037         LOG.debug("response transferItems " + response);
1038         return response;
1039     }
1040 
1041 
1042     public String deleteItemrecord(String uuid) throws Exception {
1043         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
1044         String queryString = "docAction=delete&requestContent=" + uuid;
1045         String response = postData(docstoreURL, queryString);
1046         return response;
1047 
1048     }
1049 
1050     public WorkBibDocument getInfoForBibTree(WorkBibDocument workBibDocument) {
1051         QueryService queryService = QueryServiceImpl.getInstance();
1052 
1053         try {
1054             workBibDocument = queryService.queryForBibTree(workBibDocument);
1055         } catch (Exception e) {
1056             //e.printStackTrace();
1057             LOG.error("getInfoForBibTree Exception:" + e);
1058         }
1059         return workBibDocument;
1060 
1061     }
1062 
1063     public List<WorkBibDocument> getInfoForBibTree(List<WorkBibDocument> bibDocumentList) {
1064         List<WorkBibDocument> workBibDocumentList = new ArrayList<WorkBibDocument>();
1065         for (WorkBibDocument workBibDocument : bibDocumentList) {
1066             getInfoForBibTree(workBibDocument);
1067             workBibDocumentList.add(workBibDocument);
1068         }
1069 
1070         return workBibDocumentList;
1071     }
1072 
1073     public BibliographicRecord getBibliographicRecord(String bibUUID) throws Exception {
1074         BibliographicRecord bibliographicRecord = null;
1075         String responseDocStoreData = getDocstoreData(bibUUID);
1076 /*        ResponseHandler responseHandler = new ResponseHandler();
1077         Response response = responseHandler.toObject(responseDocStoreData);
1078         String responseContentXMLString = getResponseContent(response);
1079         Collection bibliographicRecords = new BibliographicRecordHandler().fromXML(responseContentXMLString);*/
1080         Collection bibliographicRecords = new BibliographicRecordHandler().fromXML(responseDocStoreData);
1081         List<BibliographicRecord> bibliographicRecordList = bibliographicRecords.getRecords();
1082         Iterator<BibliographicRecord> bibliographicRecordListIterator = bibliographicRecordList.iterator();
1083         if (bibliographicRecordListIterator.hasNext()) {
1084             bibliographicRecord = bibliographicRecordListIterator.next();
1085         }
1086         return bibliographicRecord;
1087     }
1088 
1089     public InstanceCollection getInstanceCollection(String instanceUUID) throws Exception {
1090         String responseFromDocstore = getDocstoreData(instanceUUID);
1091         InstanceCollection instanceCollection = new InstanceOlemlRecordProcessor().fromXML(responseFromDocstore);
1092         return instanceCollection;
1093     }
1094 
1095     public String updateInstanceToDocstore(InstanceCollection instanceCollection) throws Exception {
1096         String instanceXMLString = getInstanceOlemlRecordProcessor().toXML(instanceCollection);
1097         String instanceUUID = instanceCollection.getInstance().iterator().next().getInstanceIdentifier();
1098         String response = updateInstanceRecord(instanceUUID, OLEConstants.INSTANCE_DOC_TYPE, instanceXMLString);
1099         return response;
1100     }
1101 
1102     public String updateOleHoldingToDocstore(OleHoldings oleHoldings) throws Exception {
1103         String oleHoldingXMLString = getHoldingOlemlRecordProcessor().toXML(oleHoldings);
1104         String oleHoldingUUID = oleHoldings.getHoldingsIdentifier();
1105         String response = updateInstanceRecord(oleHoldingUUID, OLEConstants.HOLDING_DOC_TYPE, oleHoldingXMLString);
1106         return response;
1107     }
1108 
1109     public String updateOleItemToDocstore(Item item) throws Exception {
1110         String itemXMLString = getItemOlemlRecordProcessor().toXML(item);
1111         String oleItemUUID = item.getItemIdentifier();
1112         if (LOG.isInfoEnabled()) {
1113             LOG.info("oleItemUUID---------->" + oleItemUUID);
1114         }
1115         String response = updateInstanceRecord(oleItemUUID, OLEConstants.ITEM_DOC_TYPE, itemXMLString);
1116         return response;
1117     }
1118 
1119     public String persistNewToDocstoreForIngest(BibliographicRecord bibliographicRecord, Item item, OleHoldings oleHoldings) {
1120 
1121         BibliographicRecordHandler bibliographicRecordHandler = new BibliographicRecordHandler();
1122         InstanceOlemlRecordProcessor instanceOlemlRecordProcessor = new InstanceOlemlRecordProcessor();
1123         DocstoreHelperService docstoreHelperService = new DocstoreHelperService();
1124 
1125         String responseXML = null;
1126         Items items = new Items();
1127         List<Item> itemList = new ArrayList<Item>();
1128         try {
1129 
1130 
1131             String bibXML = bibliographicRecordHandler.generateXML(bibliographicRecord);
1132             itemList.add(item);
1133             InstanceCollection instanceCollection = new InstanceCollection();
1134             Instance oleInstance = new Instance();
1135 
1136             if (oleInstance.getItems() == null) {
1137                 oleInstance.setItems(new Items());
1138             }
1139             oleInstance.getItems().setItem(itemList);
1140             oleInstance.setOleHoldings(oleHoldings);
1141             //oleInstance.setExtension(extension);
1142             List<Instance> oleInstanceList = new ArrayList<Instance>();
1143             oleInstanceList.add(oleInstance);
1144             instanceCollection.setInstance(oleInstanceList);
1145             String instanceXML = instanceOlemlRecordProcessor.toXML(instanceCollection);
1146             String requestXML = docstoreHelperService.buildReuestDocXMLForIngest(bibXML, instanceXML);
1147             if (LOG.isDebugEnabled()) {
1148                 LOG.debug("Fast Add instance xml : " + instanceXML);
1149                 LOG.debug("Fast Add request xml : " + requestXML);
1150             }
1151             String queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(requestXML);
1152             String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
1153             responseXML = docstoreHelperService.postData(docstoreURL, queryString + queryString);
1154             if (LOG.isDebugEnabled()) {
1155                 LOG.debug("Fast Add response xml : " + responseXML);
1156             }
1157         } catch (Exception ex) {
1158             LOG.info("exception ---> " + ex.getStackTrace());
1159         }
1160         return responseXML;
1161     }
1162 
1163 
1164     /**
1165      * Converts item xml to item pojo.
1166      *
1167      * @param itemXml
1168      * @return
1169      * @throws Exception
1170      */
1171     public Item getItemPojo(String itemXml) throws Exception {
1172         LOG.debug("Inside the getItemPojo method");
1173         Item oleItem = null;
1174         try {
1175             ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor();
1176             oleItem = itemOlemlRecordProcessor.fromXML(itemXml);
1177         } catch (Exception e) {
1178             LOG.error(OLEConstants.PAR_EXP);
1179             throw new Exception(OLEConstants.PAR_EXP);
1180         }
1181         return oleItem;
1182     }
1183 
1184 
1185     /**
1186      * Retrieves item xml using itemuuid.
1187      *
1188      * @param itemUUID
1189      * @return
1190      * @throws Exception
1191      */
1192     public String getItemXML(String itemUUID) throws Exception {
1193         LOG.debug("Inside the getItemXML method");
1194         String itemXml = "";
1195         try {
1196             itemXml = getDocstoreData(itemUUID);
1197             LOG.info("item XML ----- > " + itemXml);
1198         } catch (Exception e) {
1199             LOG.error(OLEConstants.ITM_BARCD_NT_AVAL_DOC);
1200             throw new Exception(OLEConstants.ITM_BARCD_NT_AVAL_DOC);
1201         }
1202         return itemXml;
1203     }
1204 
1205 
1206     /**
1207      * Retrieves Holding Object for given instance UUID.
1208      *
1209      * @param instanceUUID
1210      * @return
1211      * @throws Exception
1212      */
1213     public OleHoldings getOleHoldings(String instanceUUID) throws Exception {
1214         LOG.info("--Inside getOleHoldings---");
1215         DocstoreHelperService docstoreHelperService = new DocstoreHelperService();
1216         String responseFromDocstore = docstoreHelperService.getDocstoreData(instanceUUID);
1217         InstanceCollection instanceCollection = new InstanceOlemlRecordProcessor().fromXML(responseFromDocstore);
1218         List<Instance> instances = instanceCollection != null ? instanceCollection.getInstance() : new ArrayList<Instance>();
1219         Instance instance = instances.size() > 0 ? instances.get(0) : null;
1220         OleHoldings oleHoldings = instance != null ? instance.getOleHoldings() : null;
1221         return oleHoldings;
1222     }
1223 
1224 
1225     private List<OleItemSearch> getOleItemListByItemInfo(String solrQuery, Map<String, String> searchCriteria) {
1226 
1227         List<OleItemSearch> oleItemSearchList = new ArrayList<OleItemSearch>();
1228         int rowSize = 10;
1229         String bibIdentifier = null;
1230         String itemIdentfier = "";
1231         String instanceIdentifier = "";
1232         String holdingsIdentifier = "";
1233         if (searchCriteria.get("rowSize") != null)
1234             rowSize = Integer.parseInt(searchCriteria.get("rowSize"));
1235         try {
1236 
1237             List<HashMap<String, Object>> documentList = QueryServiceImpl.getInstance().retriveResults("(DocType:item) AND (" + solrQuery + ")", rowSize);
1238             for (int i = 0; i < documentList.size(); i++) {
1239                 OleItemSearch oleItemSearch = null;
1240                 try {
1241                     if (documentList.get(i).get("ItemIdentifier_display") != null) {
1242                         itemIdentfier = (String) ((ArrayList) documentList.get(i).get("ItemIdentifier_display")).get(0);
1243                         instanceIdentifier = (String) ((ArrayList) documentList.get(i).get("instanceIdentifier")).get(0);
1244                         holdingsIdentifier = (String) ((ArrayList) documentList.get(i).get("holdingsIdentifier")).get(0);
1245                         bibIdentifier = (String) ((ArrayList) documentList.get(i).get("bibIdentifier")).get(0);
1246                     }
1247                     String itemXml = getItemXML(itemIdentfier);
1248                     Item oleItem = getItemPojo(itemXml);
1249                     if (oleItem != null) {
1250                         if (oleItem != null && ((oleItem.getLocation() == null || oleItem.getCallNumber() == null) || (oleItem.getCallNumber()!=null && StringUtils.isEmpty(oleItem.getCallNumber().getNumber())))) {
1251                             OleHoldings oleHoldings = getOleHoldings(instanceIdentifier);
1252                             oleItem.setLocation(oleHoldings.getLocation());
1253                             oleItem.setCallNumber(oleHoldings.getCallNumber());
1254                         }
1255                         if (oleItem != null && (oleItem.getLocation() != null)) {
1256                             if (oleItem != null && oleItem.getLocation().getLocationLevel() == null) {
1257                                 OleHoldings oleHoldings = getOleHoldings(instanceIdentifier);
1258                                 oleItem.setLocation(oleHoldings.getLocation());
1259                                 oleItem.setCallNumber(oleHoldings.getCallNumber());
1260                             }
1261                         }
1262                         LocationValuesBuilder locationValuesBuilder = new LocationValuesBuilder();
1263                         /*OleHoldings oleHoldings = getOleHoldings(instanceIdentifier);
1264                         oleItem.setLocation(oleHoldings.getLocation());*/
1265                         oleItemSearch = new OleItemSearch();
1266                         oleItemSearch.setItemBarCode(oleItem.getAccessInformation() == null ? "" : oleItem.getAccessInformation().getBarcode());
1267                         oleItemSearch.setCallNumber(oleItem.getCallNumber() == null ? "" : oleItem.getCallNumber().getNumber());
1268                         oleItemSearch.setItemType(oleItem.getItemType() == null ? "" : oleItem.getItemType().getCodeValue());
1269                         oleItemSearch.setItemUUID(oleItem.getItemIdentifier());
1270                         oleItemSearch.setInstanceUUID(instanceIdentifier);
1271                         oleItemSearch.setBibUUID(bibIdentifier);
1272                         oleItemSearch.setCopyNumber(oleItem.getCopyNumber());
1273                         oleItemSearch.setShelvingLocation(locationValuesBuilder.getShelvingLocation(oleItem.getLocation()));
1274                         if (oleItem.getItemStatus() != null) {
1275                             oleItemSearch.setItemStatus(oleItem.getItemStatus().getCodeValue());
1276                         }
1277                         oleItemSearch.setHoldingUUID(holdingsIdentifier);
1278                         if (bibIdentifier != null) {
1279                             Map<String, String> bibDetails = QueryServiceImpl.getInstance().getBibInformation(bibIdentifier, searchCriteria);
1280                             if (bibDetails != null) {
1281                                 if (bibDetails.get("Title") != null)
1282                                     oleItemSearch.setTitle((String) bibDetails.get("Title"));
1283                                 if (bibDetails.get("Author") != null)
1284                                     oleItemSearch.setAuthor((String) bibDetails.get("Author"));
1285                                 if (bibDetails.get("Publisher") != null)
1286                                     oleItemSearch.setPublisher((String) bibDetails.get("Publisher"));
1287 
1288                                 oleItemSearchList.add(oleItemSearch);
1289                             }
1290                         }
1291 
1292                     }
1293                 } catch (Exception e) {
1294                     //e.printStackTrace();
1295                     LOG.error("getOleItemListByItemInfo Exception:" + e);
1296                 }
1297 
1298 
1299             }
1300         } catch (Exception ex) {
1301             LOG.info("Exception ------> " + ex);
1302             ex.printStackTrace();
1303         }
1304 
1305         return oleItemSearchList;
1306     }
1307 
1308     private List<OleItemSearch> getOleItemListByBibInfo(String solrQuery, Map<String, String> searchCriteria) {
1309 
1310         int rowSize = 10;
1311         List<OleItemSearch> oleItemSearchList = new ArrayList<OleItemSearch>();
1312         if (searchCriteria.get("rowSize") != null)
1313             rowSize = Integer.parseInt(searchCriteria.get("rowSize"));
1314         try {
1315 
1316             List<HashMap<String, Object>> documentList = QueryServiceImpl.getInstance().retriveResults("(DocType:bibliographic) AND (" + solrQuery + ")", rowSize);
1317             for (int i = 0; i < documentList.size(); i++) {
1318                 String instanceIdentifier = null;
1319                 OleItemSearch oleItemSearch = new OleItemSearch();
1320                 Item itemDetails = null;
1321                 try {
1322                     HashMap<String, Object> itemvalues = documentList.get(i);
1323                     if (itemvalues.get("Title_display") != null)
1324                         oleItemSearch.setTitle((String) ((ArrayList) itemvalues.get("Title_display")).get(0));
1325                     else if (itemvalues.get("Title_search") != null)
1326                         oleItemSearch.setTitle((String) ((ArrayList) itemvalues.get("Title_search")).get(0));
1327                     if (itemvalues.get("Author_display") != null)
1328                         oleItemSearch.setAuthor((String) ((ArrayList) itemvalues.get("Author_display")).get(0));
1329                     else if (itemvalues.get("Author_search") != null)
1330                         oleItemSearch.setAuthor((String) ((ArrayList) itemvalues.get("Author_search")).get(0));
1331                     if (itemvalues.get("Publisher_display") != null)
1332                         oleItemSearch.setPublisher((String) ((ArrayList) itemvalues.get("Publisher_display")).get(0));
1333                     else if (itemvalues.get("Publisher_search") != null)
1334                         oleItemSearch.setPublisher((String) ((ArrayList) itemvalues.get("Publisher_search")).get(0));
1335 
1336                     if (itemvalues.get("uniqueId") != null)
1337                         oleItemSearch.setBibUUID((String) itemvalues.get("uniqueId"));
1338                     if (itemvalues.get("instanceIdentifier") != null) {
1339                         instanceIdentifier = ((String) ((ArrayList) itemvalues.get("instanceIdentifier")).get(0));
1340                         if (!"".equals(instanceIdentifier) && instanceIdentifier != null) {
1341                             oleItemSearch.setInstanceUUID(instanceIdentifier);
1342                             String query = "id:" + instanceIdentifier;
1343                             List<HashMap<String, Object>> documentList1 = QueryServiceImpl.getInstance().retriveResults(query);
1344                             if (documentList1.size() > 0) {
1345                                 HashMap<String, Object> itemIDvalues = documentList1.get(0);
1346                                 String itemUUID = (String) ((ArrayList) itemIDvalues.get("itemIdentifier")).get(0);
1347                                 String holdingUUID = (String) ((ArrayList) itemIDvalues.get("holdingsIdentifier")).get(0);
1348                                 oleItemSearch.setItemUUID(itemUUID);
1349                                 oleItemSearch.setHoldingUUID(holdingUUID);
1350                             }
1351                         }
1352                     }
1353 
1354                     if (instanceIdentifier != null) {
1355                         itemDetails = getItemInformation(instanceIdentifier, searchCriteria, oleItemSearch.getItemUUID());
1356                         if (itemDetails != null) {
1357                             LocationValuesBuilder locationValuesBuilder = new LocationValuesBuilder();
1358                             oleItemSearch.setItemBarCode(itemDetails.getAccessInformation() == null ? "" : itemDetails.getAccessInformation().getBarcode());
1359                             oleItemSearch.setCallNumber(itemDetails.getCallNumber() == null ? "" : itemDetails.getCallNumber().getNumber());
1360                             oleItemSearch.setItemType(itemDetails.getItemType() == null ? "" : itemDetails.getItemType().getCodeValue());
1361                             oleItemSearch.setCopyNumber(itemDetails.getCopyNumber());
1362                             oleItemSearch.setItemStatus(itemDetails.getItemStatus().getCodeValue());
1363                             if (itemDetails.getLocation() != null)
1364                                 oleItemSearch.setShelvingLocation(locationValuesBuilder.getShelvingLocation(itemDetails.getLocation()));
1365 
1366                         }
1367 
1368                     }
1369                 } catch (Exception e) {
1370                     //e.printStackTrace();
1371                     LOG.error("getOleItemListByBibInfo Exception:" + e);
1372                 }
1373                 if (itemDetails != null && !"".equals(oleItemSearch.getTitle()) && oleItemSearch.getTitle() != null)
1374                     oleItemSearchList.add(oleItemSearch);
1375             }
1376 
1377         } catch (Exception ex) {
1378             //LOG.info("Exception ------> " + ex);
1379             LOG.error("getOleItemListByBibInfo Exception:" + ex);
1380         }
1381 
1382         return oleItemSearchList;
1383     }
1384 
1385     private Item getItemInformation(String instanceIdentifier, Map<String, String> searchCriteria, String itemIdentfier) throws Exception {
1386 
1387         String callNumber = (String) searchCriteria.get("callNumber");
1388         String itemType = (String) searchCriteria.get("itemType");
1389         String itemBarCode = (String) searchCriteria.get("itemBarCode");
1390 
1391         StringBuffer solrQuery = new StringBuffer();
1392 
1393         if (callNumber != null && !callNumber.equals(""))
1394             solrQuery.append("(CallNumber_search:" + callNumber.toLowerCase() + "*) AND ");
1395         if (itemType != null && !itemType.equals(""))
1396             solrQuery.append("(ItemTypeCodeValue_search:" + itemType.toLowerCase() + ") AND ");
1397         if (itemBarCode != null && !itemBarCode.equals(""))
1398             solrQuery.append("(ItemBarcode_display:" + itemBarCode + ") AND ");
1399 
1400         if (!solrQuery.toString().equals("")) {
1401             solrQuery.append("(id:" + itemIdentfier + ") AND ");
1402             String query = solrQuery.substring(0, solrQuery.lastIndexOf("AND"));
1403             List<HashMap<String, Object>> documentList = QueryServiceImpl.getInstance().retriveResults("(DocType:item) AND (" + query + ")");
1404             if (documentList.size() == 0) {
1405                 return null;
1406             }
1407         }
1408         String itemXml = getItemXML(itemIdentfier);
1409         Item oleItem = getItemPojo(itemXml);
1410         if (oleItem != null && ((oleItem.getLocation() == null || oleItem.getCallNumber() == null) || (oleItem.getCallNumber()!=null && StringUtils.isEmpty(oleItem.getCallNumber().getNumber())))) {
1411             OleHoldings oleHoldings = getOleHoldings(instanceIdentifier);
1412             oleItem.setLocation(oleHoldings.getLocation());
1413             oleItem.setCallNumber(oleHoldings.getCallNumber());
1414             return oleItem;
1415         }
1416         if (oleItem != null && (oleItem.getLocation() != null)) {
1417             if (oleItem != null && oleItem.getLocation().getLocationLevel() == null) {
1418                 OleHoldings oleHoldings = getOleHoldings(instanceIdentifier);
1419                 oleItem.setLocation(oleHoldings.getLocation());
1420                 oleItem.setCallNumber(oleHoldings.getCallNumber());
1421                 return oleItem;
1422             }
1423         }
1424         return oleItem;
1425     }
1426 
1427 
1428     /**
1429      * Thsi method is to check whether the item is available in doc store or not
1430      *
1431      * @param oleDeliverRequestBo
1432      * @return boolean
1433      */
1434     public boolean isItemAvailableInDocStore(OleDeliverRequestBo oleDeliverRequestBo) {
1435         LOG.info("Inside isItemAvailableInDocStore");
1436         boolean available = false;
1437         Map<String, String> itemMap = new HashMap<String, String>();
1438         LocationValuesBuilder locationValuesBuilder = new LocationValuesBuilder();
1439         try {
1440             Map<String, String> itemUUIDMap = QueryServiceImpl.getInstance().getItemDetails(oleDeliverRequestBo.getItemId(), null);
1441             String itemUUID = itemUUIDMap.get(OLEConstants.ITEM_UUID);
1442             oleDeliverRequestBo.setItemUuid(itemUUID);
1443 
1444             itemMap.put(OLEConstants.ITEM_UUID, oleDeliverRequestBo.getItemUuid());
1445             List<OleItemSearch> itemSearchList = getOleItemSearchList(itemMap);
1446             if (itemSearchList != null && itemSearchList.size() > 0) {
1447                 oleDeliverRequestBo.setTitle(itemSearchList.get(0).getTitle());
1448                 oleDeliverRequestBo.setAuthor(itemSearchList.get(0).getAuthor());
1449                 oleDeliverRequestBo.setCallNumber(itemSearchList.get(0).getCallNumber());
1450                 oleDeliverRequestBo.setItemType(itemSearchList.get(0).getItemType());
1451             }
1452             String itemXml = getItemXML(oleDeliverRequestBo.getItemUuid());
1453             Item oleItem = getItemPojo(itemXml);
1454             oleDeliverRequestBo.setOleItem(oleItem);
1455             oleDeliverRequestBo.setCopyNumber(oleItem.getCopyNumber());
1456             oleDeliverRequestBo.setItemStatus(oleItem.getItemStatus().getCodeValue());
1457             locationValuesBuilder.getLocation(oleItem, oleDeliverRequestBo, (String) itemUUIDMap.get(OLEConstants.INSTANCE_UUID));
1458             available = true;
1459         } catch (Exception e) {
1460             LOG.error(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.INVAL_LOC) + e);
1461         }
1462 
1463 
1464         return available;
1465     }
1466 
1467 
1468     public List<OleItemSearch> getOleItemSearchList(Map<String, String> searchCriteria) {
1469 
1470         List<OleItemSearch> oleItemSearchList = new ArrayList<OleItemSearch>();
1471         StringBuffer query = new StringBuffer("");
1472         String title = ((String) searchCriteria.get("title"));
1473         String author = ((String) searchCriteria.get("author"));
1474         String publisher = ((String) searchCriteria.get("publisher"));
1475         String callNumber = ((String) searchCriteria.get("callNumber"));
1476         String itemType = ((String) searchCriteria.get("itemType"));
1477         String itemBarCode = (String) searchCriteria.get("itemBarCode");
1478         String itemUuid = (String) searchCriteria.get("itemUuid");
1479 
1480 
1481         if (title != null && !title.equals(""))
1482             query.append("((Title_search:" + title.toLowerCase() + ")OR(Title_search:" + title.toLowerCase() + "*)) AND ");
1483         if (author != null && !author.equals(""))
1484             query.append("((Author_search:" + author.toLowerCase() + ")OR(Author_search:" + author.toLowerCase() + "*)) AND ");
1485         if (publisher != null && !publisher.equals(""))
1486             query.append("((Publisher_search:" + publisher.toLowerCase() + ")OR(Publisher_search:" + publisher.toLowerCase() + "*)) AND");
1487 
1488         if (!query.toString().equals("")) {
1489             query = new StringBuffer(query.substring(0, query.lastIndexOf("AND")));
1490             oleItemSearchList = getOleItemListByBibInfo(query.toString(), searchCriteria);
1491             return oleItemSearchList;
1492         }
1493 
1494 
1495         if (itemBarCode != null && !itemBarCode.equals(""))
1496             query.append("(ItemBarcode_display:" + itemBarCode + ") AND ");
1497         if (callNumber != null && !callNumber.equals(""))
1498             query.append("((CallNumber_search:" + callNumber.toLowerCase() + ")OR(CallNumber_search:" + callNumber.toLowerCase() + "*)) AND ");
1499         if (itemType != null && !itemType.equals(""))
1500             query.append("(ItemTypeCodeValue_search:" + itemType.toLowerCase() + ") AND ");
1501         if (itemUuid != null && !itemUuid.equals(""))
1502             query.append("(id:" + itemUuid + ") AND ");
1503 
1504         if (!query.toString().equals("")) {
1505             query = new StringBuffer(query.substring(0, query.lastIndexOf("AND")));
1506             oleItemSearchList = getOleItemListByItemInfo(query.toString(), searchCriteria);
1507             return oleItemSearchList;
1508         }
1509 
1510         if (query.toString().equals("")) {
1511             query.append("*:*");
1512             oleItemSearchList = getOleItemListByBibInfo(query.toString(), searchCriteria);
1513         }
1514         return oleItemSearchList;
1515     }
1516 
1517     public DocumentConfig getDocumentConfigObj() {
1518         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_BASE_URL);
1519         DocumentConfigConverter documentConverter = new DocumentConfigConverter();
1520         DocumentConfig documentConfig = null;
1521         try {
1522             URL url = new URL(docstoreURL + DOC_CONFIG_INFO);
1523             InputStream in = new BufferedInputStream(url.openStream());
1524             BufferedReader br = new BufferedReader(new InputStreamReader(in));
1525             String line;
1526             StringBuilder sb = new StringBuilder();
1527             while ((line = br.readLine()) != null) {
1528                 sb.append(line);
1529             }
1530             String docXml = sb.toString();
1531             documentConfig = documentConverter.unmarshal(docXml);
1532         } catch (Exception e) {
1533             LOG.error(e);
1534         }
1535 
1536         return documentConfig;
1537     }
1538 
1539     /**
1540      * @param uuids
1541      * @param fieldValueList
1542      * @return
1543      * @throws SolrServerException
1544      */
1545     public boolean checkItemStatus(List<String> uuids, List<String> fieldValueList) throws SolrServerException {
1546         for (String uuid : uuids) {
1547             boolean isNotValidItem = QueryServiceImpl.getInstance()
1548                     .verifyFieldValue(uuid, "ItemStatus_display", fieldValueList);
1549             if (isNotValidItem) {
1550                 return true;
1551             }
1552         }
1553         return false;
1554     }
1555 
1556     /**
1557      * @param instanceIds
1558      * @param fieldValueList
1559      * @return
1560      * @throws SolrServerException
1561      */
1562     public boolean checkItemStatusForInstances(List<String> instanceIds, List<String> fieldValueList) throws SolrServerException {
1563 
1564         List<String> itemIds = QueryServiceImpl.getInstance().getItemIdsForInstanceIds(instanceIds);
1565 
1566         return checkItemStatus(itemIds, fieldValueList);
1567     }
1568 
1569 
1570     //OLEINSTANCE SEARCH
1571     public List<OLEInstanceSearch> getOleInstanceSearchList(Map<String, String> searchCriteria) {
1572 
1573         List<OLEInstanceSearch> oleInstanceSearchList = new ArrayList<OLEInstanceSearch>();
1574         StringBuffer query = new StringBuffer("");
1575         String title = ((String) searchCriteria.get("title"));
1576         String author = ((String) searchCriteria.get("author"));
1577         String publisher = ((String) searchCriteria.get("publisher"));
1578         String instanceId = ((String) searchCriteria.get("instanceIdentifier"));
1579 
1580         if (title != null && !title.equals(""))
1581             query.append("((Title_search:" + title.toLowerCase() + ")OR(Title_search:" + title.toLowerCase() + "*)) AND ");
1582         if (author != null && !author.equals(""))
1583             query.append("((Author_search:" + author.toLowerCase() + ")OR(Author_search:" + author.toLowerCase() + "*)) AND ");
1584         if (publisher != null && !publisher.equals(""))
1585             query.append("((Publisher_search:" + publisher.toLowerCase() + ")OR(Publisher_search:" + publisher.toLowerCase() + "*)) AND");
1586         if (instanceId != null && !instanceId.equals(""))
1587             query.append("((instanceIdentifier:" + instanceId + ")OR(instanceIdentifier:" + instanceId + "*)) AND");
1588 
1589         if (!query.toString().equals("")) {
1590             query = new StringBuffer(query.substring(0, query.lastIndexOf("AND")));
1591             oleInstanceSearchList = getOleInstanceListByBibInfo(query.toString(), searchCriteria);
1592             return oleInstanceSearchList;
1593         }
1594         return oleInstanceSearchList;
1595     }
1596 
1597 
1598     private List<OLEInstanceSearch> getOleInstanceListByBibInfo(String solrQuery, Map<String, String> searchCriteria) {
1599 
1600         int rowSize = 10;
1601         List<OLEInstanceSearch> oleInstanceSearchList = new ArrayList<OLEInstanceSearch>();
1602         if (searchCriteria.get("rowSize") != null)
1603             rowSize = Integer.parseInt(searchCriteria.get("rowSize"));
1604         try {
1605             List<HashMap<String, Object>> documentList = QueryServiceImpl.getInstance().retriveResults("(DocType:bibliographic) AND " + solrQuery + "", rowSize);
1606 
1607             for (int i = 0; i < documentList.size(); i++) {
1608                 String instanceIdentifier = null;
1609                 String bibIdentifier = null;
1610 
1611                 OLEInstanceSearch oleInstanceSearch = new OLEInstanceSearch();
1612                 try {
1613                     HashMap<String, Object> itemvalues = documentList.get(i);
1614                     if (itemvalues.get("Title_display") != null)
1615                         oleInstanceSearch.setTitle((String) ((ArrayList) itemvalues.get("Title_display")).get(0));
1616                     else if (itemvalues.get("Title_search") != null)
1617                         oleInstanceSearch.setTitle((String) ((ArrayList) itemvalues.get("Title_search")).get(0));
1618                     if (itemvalues.get("Author_display") != null)
1619                         oleInstanceSearch.setAuthor((String) ((ArrayList) itemvalues.get("Author_display")).get(0));
1620                     else if (itemvalues.get("Author_search") != null)
1621                         oleInstanceSearch.setAuthor((String) ((ArrayList) itemvalues.get("Author_search")).get(0));
1622                     if (itemvalues.get("Publisher_display") != null)
1623                         oleInstanceSearch.setPublisher((String) ((ArrayList) itemvalues.get("Publisher_display")).get(0));
1624                     else if (itemvalues.get("Publisher_search") != null)
1625                         oleInstanceSearch.setPublisher((String) ((ArrayList) itemvalues.get("Publisher_search")).get(0));
1626                     if (itemvalues.get("LocalId_display") != null) {
1627                         oleInstanceSearch.setLocalId((String) itemvalues.get("LocalId_display"));
1628                     }
1629                     if (itemvalues.get("ISSN_display") != null) {
1630                         oleInstanceSearch.setIssn((String) itemvalues.get("ISSN_display"));
1631                     }
1632                     if (itemvalues.get("instanceIdentifier") != null) {
1633                         ArrayList<String> list = ((ArrayList) itemvalues.get("instanceIdentifier"));
1634                         oleInstanceSearch.setInstanceIdList(list);
1635                     }
1636                     if (itemvalues.get("id") != null) {
1637                         bibIdentifier = (String) itemvalues.get("id");
1638                     }
1639                     oleInstanceSearch.setBibId(bibIdentifier);
1640                 } catch (Exception e) {
1641                     //e.printStackTrace();
1642                     LOG.error("getOleInstanceListByBibInfo Exception:" + e);
1643                 }
1644                 oleInstanceSearchList.add(oleInstanceSearch);
1645 
1646             }
1647 
1648         } catch (Exception ex) {
1649             LOG.info("Exception ------> " + ex);
1650             LOG.error("getOleInstanceListByBibInfo Exception:" + ex);
1651         }
1652         return oleInstanceSearchList;
1653     }
1654 
1655 
1656     public void getInstanceLocation(OLEInstanceSearch instanceSearch) {
1657 
1658         //for getting holdindsidentifier
1659         String query = "id:" + instanceSearch.getInstanceId();
1660         List<HashMap<String, Object>> documentList1 = QueryServiceImpl.getInstance().retriveResults(query);
1661         HashMap<String, Object> itemIDvalues = documentList1.get(0);
1662         String holdingUUID = itemIDvalues != null && itemIDvalues.get("holdingsIdentifier") != null ? (String) ((ArrayList) itemIDvalues.get("holdingsIdentifier")).get(0) : null;
1663         String location = "";
1664         String callNumber = "";
1665         String copyNumber="";
1666         //for getting location
1667         if (holdingUUID != null) {
1668             String queryForLocation = "id:" + holdingUUID;
1669             List<HashMap<String, Object>> documentList = QueryServiceImpl.getInstance().retriveResults(queryForLocation);
1670             HashMap<String, Object> itemlocvalues = documentList != null && documentList.size() > 0 ? documentList.get(0) : null;
1671             Object locationValue = itemlocvalues.get("Location_display");
1672             if(locationValue!=null){
1673                 if (locationValue instanceof String) {
1674                     location= itemlocvalues.get("Location_display").toString();
1675                 } else if (locationValue instanceof List) {
1676                     location= (String)((ArrayList) itemlocvalues.get("Location_display")).get(0);
1677                 }
1678             }
1679             instanceSearch.setLocation(location);
1680             Object callNumberValue = itemlocvalues.get("CallNumber_display");
1681             if(callNumberValue!=null){
1682                 if (callNumberValue instanceof String) {
1683                     callNumber= itemlocvalues.get("CallNumber_display").toString();
1684                 } else if (callNumberValue instanceof List) {
1685                     callNumber= (String)((ArrayList) itemlocvalues.get("CallNumber_display")).get(0);
1686                 }
1687             }
1688             instanceSearch.setCallNumber(callNumber);
1689 
1690             Object value = itemlocvalues.get("CopyNumber_display");
1691             if(value!=null){
1692                 if (value instanceof String) {
1693                     copyNumber= itemlocvalues.get("CopyNumber_display").toString();
1694                 } else if (value instanceof List) {
1695                     copyNumber= (String)((ArrayList) itemlocvalues.get("CopyNumber_display")).get(0);
1696                 }
1697             }
1698             instanceSearch.setCopyNumber(copyNumber);
1699         }
1700         //   return location;
1701 
1702     }
1703 
1704     public String getContentFromDocStore(String uuid) throws IOException {
1705         String docStoreResponse = null;
1706         String restfulUrl = ConfigContext.getCurrentContextConfig().getProperty("docstore.restful.url");
1707         restfulUrl = restfulUrl.concat("/") + uuid;
1708         LOG.info("restful url-->" + restfulUrl);
1709         HttpClient client = new HttpClient();
1710         GetMethod getMethod = new GetMethod(restfulUrl);
1711         client.executeMethod(getMethod);
1712         InputStream inputStream = getMethod.getResponseBodyAsStream();
1713         docStoreResponse = IOUtils.toString(inputStream);
1714         return docStoreResponse;
1715     }
1716 
1717 
1718     /*  public String buildRequestForIngest(String category, String type, String format, String content, AdditionalAttributes additionalAttributes) {
1719 
1720         String reqXml = "";
1721         Request request = new Request();
1722         List<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
1723         request.setOperation(Request.Operation.ingest.name());
1724         request.setUser("editor");
1725         RequestDocument requestDocument = new RequestDocument();
1726         Content contentObj = new Content();
1727         contentObj.setContent(content);
1728         requestDocument.setContent(contentObj);
1729         requestDocument.setCategory(category);
1730         requestDocument.setType(type);
1731         requestDocument.setFormat(format);
1732         if (additionalAttributes != null) {
1733             requestDocument.setAdditionalAttributes(additionalAttributes);
1734         }
1735         requestDocuments.add(requestDocument);
1736         request.setRequestDocuments(requestDocuments);
1737         reqXml = new RequestHandler().toXML(request);
1738         return reqXml;
1739     }
1740 
1741   public String persistDocstore(String reqContent, String uuid) throws Exception {
1742         String docstoreURL = ConfigContext.getCurrentContextConfig().getProperty(DOCSTORE_URL);
1743 
1744         String queryString = "";
1745         if (uuid != null) {
1746             queryString = UPDATE_EXISTING_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(reqContent, "UTF-8");
1747         } else {
1748             queryString = CREATE_NEW_DOCSTORE_RECORD_QUERY_STRING + URLEncoder.encode(reqContent, "UTF-8");
1749         }
1750 
1751 
1752         return postData(docstoreURL, queryString);
1753     }
1754     public Map getBibIdsForBatchDelete(String searchData, String dataField) {
1755 
1756         String solrQuery = "";
1757         Map batchDeleteMap = new HashMap();
1758         List bibIDsList = new ArrayList(0);
1759 
1760         if ("001".equals(dataField)) {
1761             solrQuery = "id" + ":\"wbm-" + searchData + "\"";
1762         } else {
1763             solrQuery = dataField + ":\"" + searchData + "\"";
1764         }
1765 
1766         LOG.info("solrQuery for batch delete : ---> " + solrQuery);
1767         try {
1768             List solrHits = QueryServiceImpl.getInstance().retriveResults(solrQuery);
1769             if (solrHits != null && solrHits.size() == 0) {
1770                 batchDeleteMap.put(OLEConstants.OLEBatchProcess.FAILURE_INFO, OLEConstants.OLEBatchProcess.BIB_REC_NOT_FOUND);
1771                 return batchDeleteMap;
1772             } else if (solrHits != null && solrHits.size() > 1) {
1773                 batchDeleteMap.put(OLEConstants.OLEBatchProcess.FAILURE_INFO, OLEConstants.OLEBatchProcess.MORE_BIB_RECORDS);
1774                 return batchDeleteMap;
1775             }
1776 
1777             HashMap bibSolrMap = (HashMap) solrHits.get(0);
1778             if (bibSolrMap.get(OLEConstants.INSTANCE_SEARCH) != null) {
1779                 List instanceIdList = (ArrayList) bibSolrMap.get(OLEConstants.INSTANCE_SEARCH);
1780                 if (instanceIdList != null && instanceIdList.size() > 1) {                //instanceIdList size >1 return null list
1781                     batchDeleteMap.put(OLEConstants.OLEBatchProcess.FAILURE_INFO, OLEConstants.OLEBatchProcess.MORE_INSTANCES);
1782                     return batchDeleteMap;
1783                 }
1784                 HashMap instanceSolrMap = null;
1785                 List instSolrHits = QueryServiceImpl.getInstance().queryForBibs((String) instanceIdList.get(0));
1786                 if (instSolrHits != null && instSolrHits.size() > 1) {
1787                     batchDeleteMap.put(OLEConstants.OLEBatchProcess.FAILURE_INFO, OLEConstants.OLEBatchProcess.BIB_BOUNDS_WITH);
1788                     return batchDeleteMap;
1789                 }
1790             }
1791             if (bibSolrMap.get("id") != null) {
1792                 bibIDsList.add(bibSolrMap.get("id"));
1793                 batchDeleteMap.put(OLEConstants.BIB_SEARCH, bibIDsList);
1794             }
1795 
1796 
1797         } catch (Exception e) {
1798             //e.printStackTrace();
1799             LOG.error("getBibIdsForBatchDelete Exception:" + e);
1800         }
1801         return batchDeleteMap;
1802     }
1803 
1804     public List<Response> batchDeleteRecords(List bibIdsList) throws Exception {
1805 
1806         List<Response> responseList = new ArrayList<Response>();
1807         //Request request = buildRequestForDelete(bibIdsList);
1808         String ids = buildRequestIdsForDelete(bibIdsList);
1809         Response response = performRestFulOperation(DocCategory.WORK.getCode(), DocType.BIB.getDescription(), DocFormat.MARC.getCode(), ids);
1810         responseList.add(response);
1811         return responseList;
1812     } */
1813 
1814 
1815     public String buildRequestIdsForDelete(List bibIdsList) {
1816         StringBuffer ids = new StringBuffer("");
1817         if (bibIdsList != null && bibIdsList.size() > 0) {
1818             int i = 0;
1819             for (; i < bibIdsList.size() - 1; i++) {
1820                 ids.append(bibIdsList.get(i) + ",");
1821             }
1822             ids.append(bibIdsList.get(i));
1823 
1824         }
1825         return ids.toString();
1826     }
1827 
1828     public Response performRestFulOperation(String docCategory, String docType, String docFormat, String ids) throws Exception {
1829 
1830         String restfulUrl = ConfigContext.getCurrentContextConfig().getProperty("docstore.restful.url");
1831         restfulUrl = restfulUrl.concat("/") + ids;
1832         HttpClient httpClient = new HttpClient();
1833         DeleteMethod deleteMethod = new DeleteMethod(restfulUrl);
1834         NameValuePair nvp1 = new NameValuePair("identifierType", "UUID");
1835         NameValuePair nvp2 = new NameValuePair("operation", "delete");
1836         // NameValuePair nvp3 = new NameValuePair("id", ids);
1837         NameValuePair category = new NameValuePair("docCategory", docCategory);
1838         NameValuePair type = new NameValuePair("docType", docType);
1839         NameValuePair format = new NameValuePair("docFormat", docFormat);
1840         deleteMethod.setQueryString(new NameValuePair[]{nvp1, nvp2, category, type, format});
1841         int statusCode = httpClient.executeMethod(deleteMethod);
1842         LOG.info("statusCode-->" + statusCode);
1843         InputStream inputStream = deleteMethod.getResponseBodyAsStream();
1844         String responseXML = IOUtils.toString(inputStream, "UTF-8");
1845         LOG.info("Response-->" + responseXML);
1846         return new ResponseHandler().toObject(responseXML);
1847     }
1848 
1849 
1850     public RequestDocument buildRequestDocument(String bibXML, String uuid) {
1851         RequestDocument requestDocument = new RequestDocument();
1852         if (StringUtils.isNotEmpty(uuid)) {
1853             requestDocument.setId(uuid);
1854             requestDocument.setUuid(uuid);
1855         } else {
1856             requestDocument.setId("1");
1857 
1858         }
1859         requestDocument.setCategory(OLEConstants.WORK_CATEGORY);
1860         requestDocument.setType(OLEConstants.BIB_DOC_TYPE);
1861         requestDocument.setFormat(OLEConstants.MARC_FORMAT);
1862         requestDocument.setContent(new Content(bibXML));
1863 
1864         AdditionalAttributes additionalAttributes = new AdditionalAttributes();
1865 //        DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
1866 //        additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
1867 //        additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
1868 //        additionalAttributes.setFastAddFlag("true");
1869 //        additionalAttributes.setSupressFromPublic("false");
1870 //        additionalAttributes.setAttribute("dateEntered",String.valueOf(dateFormat.format(new Date())));
1871 //        additionalAttributes.setAttribute("lastUpdated",String.valueOf(dateFormat.format(new Date())));
1872 //        additionalAttributes.setAttribute("fastAddFlag","true");
1873 //        additionalAttributes.setAttribute("supressFromPublic","false");
1874         requestDocument.setAdditionalAttributes(additionalAttributes);
1875 
1876         return requestDocument;
1877     }
1878 
1879     /* public List getItemIdList(String bibId) throws SolrServerException {
1880 
1881        List itemIdList = QueryServiceImpl.getInstance().queryForItems(bibId);
1882        return itemIdList;
1883    }
1884 
1885   public Object getInstanceCollectionData(String instanceUUID) throws Exception {
1886 public List getItemIdsInInstance(String instanceId) throws SolrServerException {
1887      List<String> instanceIdList = new ArrayList<String>();
1888      instanceIdList.add(instanceId);
1889      List itemIdList = QueryServiceImpl.getInstance().getItemIdsForInstanceIds(instanceIdList);
1890      return itemIdList;
1891  }
1892 
1893      String responseFromDocstore = getDocstoreData(instanceUUID);
1894      Object instanceCollection = new InstanceOlemlRecordProcessor().getInstance(responseFromDocstore);
1895      return instanceCollection;
1896  }
1897 
1898 public String getBibId(String itemId) throws SolrServerException {
1899      String bibId = QueryServiceImpl.getInstance().queryForBib(itemId);
1900      return bibId;
1901  } */
1902     public Item getPO(String itemXml) throws Exception {
1903 
1904         return getItemPojo(itemXml);
1905     }
1906 
1907 }