View Javadoc
1   /*
2    * Copyright 2011 The Kuali Foundation.
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.select.service.impl;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.incubator.SolrRequestReponseHandler;
20  import org.kuali.ole.docstore.common.document.Bib;
21  import org.kuali.ole.docstore.model.bo.OleDocument;
22  import org.kuali.ole.docstore.model.bo.WorkBibDocument;
23  import org.kuali.ole.docstore.model.bo.WorkInstanceDocument;
24  import org.kuali.ole.docstore.model.xmlpojo.ingest.*;
25  import org.kuali.ole.docstore.model.xstream.ingest.RequestHandler;
26  import org.kuali.ole.select.OleSelectConstant;
27  import org.kuali.ole.select.businessobject.BibInfoBean;
28  import org.kuali.ole.select.businessobject.DocInfoBean;
29  import org.kuali.ole.select.service.*;
30  import org.kuali.ole.sys.OLEConstants;
31  import org.kuali.ole.sys.context.SpringContext;
32  import org.kuali.rice.core.api.config.property.ConfigurationService;
33  import org.kuali.rice.krad.util.GlobalVariables;
34  import org.springframework.core.io.ClassPathResource;
35  import org.w3c.dom.Document;
36  import org.w3c.dom.Node;
37  import org.w3c.dom.NodeList;
38  
39  import javax.xml.parsers.DocumentBuilder;
40  import javax.xml.parsers.DocumentBuilderFactory;
41  import javax.xml.xpath.XPath;
42  import javax.xml.xpath.XPathConstants;
43  import javax.xml.xpath.XPathExpression;
44  import javax.xml.xpath.XPathFactory;
45  import java.io.File;
46  import java.io.IOException;
47  import java.net.URLEncoder;
48  import java.text.DateFormat;
49  import java.text.SimpleDateFormat;
50  import java.util.*;
51  import org.kuali.ole.docstore.common.client.DocstoreClient;
52  
53  public class BibInfoServiceImpl implements BibInfoService {
54  
55      //private static BibInfoServiceImpl docStoreInstance;
56      private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BibInfoServiceImpl.class);
57  
58      protected ConfigurationService configurationService;
59      protected WebClientService webClientService;
60      protected BibMarcXMLGenerationService bibMarcXMLGenerationService;
61      protected ItemMarcXMLGenerationService itemMarcXMLGenerationService;
62      protected FileProcessingService fileProcessingService;
63      private DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
64  
65      private DocstoreClient docstoreClient;
66  
67      protected BibInfoServiceImpl() {
68  
69      }
70  
71  /*    public DocstoreClient getDocstoreClient() {
72          if (docstoreClient == null) {
73              docstoreClient = SpringContext.getBean(DocstoreLocalClient.class);
74          }
75          return docstoreClient;
76      }*/
77  
78  /*    public static BibInfoServiceImpl getInstance() {
79          if (docStoreInstance == null)
80              docStoreInstance = new BibInfoServiceImpl();
81          return docStoreInstance;
82      }*/
83  
84      @Override
85      public String save(BibInfoBean bibInfoBean) throws Exception {
86          if (LOG.isDebugEnabled()) {
87              LOG.debug("inside BibInfoService save..............");
88          }
89          BibInfoBeanToBibXML bibInfoBeanToBibXML = new BibInfoBeanToBibXML();
90          bibInfoBeanToBibXML.exportToXMLFile(bibInfoBean);
91          return bibInfoBean.getTitleId();
92      }
93  
94  /*    public String save(BibInfoBean bibInfoBean,HashMap dataMap) throws Exception {
95          String urlString = getWebClientPropertyValue("docstoreurl");
96          String contentType = getWebClientPropertyValue("contenttype");
97          String xmlString = convertBibInfoBeanToMarcXMLString(bibInfoBean,dataMap);
98          String data = getFormData(xmlString);
99          String response="";
100         String responseData="";
101         WebClientService webClient = SpringContext.getBean(WebClientServiceImpl.class);
102         response=webClient.sendRequest(urlString, contentType, data);
103         responseData=webClient.getDataFromResponseXMLForDocStore(response);
104         return responseData;
105     }*/
106 
107     @Override
108     public String save(BibInfoBean bibInfoBean, HashMap dataMap) throws Exception {
109         LOG.debug("inside BibInfoService save(BibInfoBean bibInfoBean, HashMap dataMap)");
110         String xmlString = generateXMLStringForIngest(bibInfoBean, dataMap);
111         String userName;
112         //Changes to include userId and userAction in docstore ingest.
113         if (GlobalVariables.getUserSession() != null) {
114             userName = GlobalVariables.getUserSession().getPrincipalName();
115         } else {
116             userName = configurationService.getPropertyValueAsString("userName");
117         }
118         xmlString = xmlString.concat("&userId=" + userName + "&userAction=" + bibInfoBean.getRequestSource());
119         String encodedXMLString = URLEncoder.encode(xmlString, "UTF-8");
120         dataMap.put(OleSelectConstant.DOCSTORE_REQUEST_XMLSTRING, encodedXMLString);
121         if (LOG.isDebugEnabled()) {
122             LOG.debug("XMLString ------------->>>>>> " + xmlString);
123         }
124         String response = getDocStoreResponse(dataMap);
125         String responseElement = getDocStoreResponseElement(response, dataMap);
126         return responseElement;
127     }
128 
129     @Override
130     public List<BibInfoBean> getUUID(List<BibInfoBean> bibInfoBeanList, HashMap dataMap) throws Exception {
131         LOG.debug("inside BibInfoService save(BibInfoBean bibInfoBean, HashMap dataMap)");
132         String xmlString = generateXMLStringForIngest(bibInfoBeanList, dataMap);
133         String userName;
134         if (GlobalVariables.getUserSession() != null) {
135             userName = GlobalVariables.getUserSession().getPrincipalName();
136         } else {
137             userName = configurationService.getPropertyValueAsString("userName");
138         }
139         xmlString = xmlString.concat("&userId=" + userName + "&userAction=" + OleSelectConstant.REQUEST_SRC_TYPE_BATCHINGEST);
140         String encodedXMLString = URLEncoder.encode(xmlString, "UTF-8");
141         dataMap.put(OleSelectConstant.DOCSTORE_REQUEST_XMLSTRING, encodedXMLString);
142         if (LOG.isDebugEnabled()) {
143             LOG.debug("XMLString ------------->>>>>> " + xmlString);
144         }
145         String response = getDocStoreResponse(dataMap);
146         if (LOG.isDebugEnabled()) {
147             LOG.debug("responseXMLString ------------->>>>>> " + response);
148         }
149         bibInfoBeanList = getDocStoreResponseElement(response, dataMap, bibInfoBeanList);
150         return bibInfoBeanList;
151     }
152 
153     @Override
154     public String getDocStoreResponse(HashMap<String, String> dataMap) throws Exception {
155         String urlString = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_URL_KEY_FOR_POS);
156         //String urlString = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_APP_URL_KEY);
157         String contentType = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_APP_CONTENT_TYPE_KEY);
158         if (LOG.isDebugEnabled()) {
159             LOG.debug("docstoreurl-------->" + urlString);
160         }
161         String data = getFormData(dataMap);
162         String response = webClientService.sendRequest(urlString, contentType, data);
163         return response;
164     }
165 
166     private String getDocStoreResponseElement(String response, HashMap<String, String> dataMap) throws Exception {
167         String responseElement = webClientService.getDataFromResponseXMLForDocStore(response, dataMap);
168         return responseElement;
169     }
170 
171     private List<BibInfoBean> getDocStoreResponseElement(String response, HashMap<String, String> dataMap, List<BibInfoBean> bibInfoBeanList) throws Exception {
172         bibInfoBeanList = webClientService.getUUIDFromResponseXMLForDocStore(response, dataMap, bibInfoBeanList);
173         return bibInfoBeanList;
174     }
175 
176     @Override
177     public String getDocSearchResponse(BibInfoBean bibInfoBean) throws Exception {
178         String urlString = configurationService.getPropertyValueAsString(OLEConstants.DOCSEARCH_URL_KEY);
179         if (LOG.isDebugEnabled()) {
180             LOG.debug("docstoreurl-------->" + urlString);
181         }
182         String contentType = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_APP_CONTENT_TYPE_KEY);
183         String query = buildDocSearchQuery(bibInfoBean);
184         String response = webClientService.sendRequest(urlString, contentType, query);
185         return response;
186     }
187 
188     @Override
189     public String convertBibInfoBeanToMarcXMLString(BibInfoBean bibInfoBean, HashMap<String, String> dataMap) throws Exception {
190         String xmlString = bibMarcXMLGenerationService.getMarcXML(bibInfoBean, dataMap);
191         //xmlString = OleSelectConstant.CDATA_START_TAG+xmlString+OleSelectConstant.CDATA_END_TAG;
192         return xmlString;
193     }
194 
195     @Override
196     public String generateItemMarcXMLString(BibInfoBean bibInfoBean, HashMap<String, String> dataMap) throws Exception {
197         String xmlString = itemMarcXMLGenerationService.getMarcXML(bibInfoBean, dataMap);
198         //xmlString = OleSelectConstant.CDATA_START_TAG+xmlString+OleSelectConstant.CDATA_END_TAG;
199         return xmlString;
200     }
201 
202     public String generateInstanceMarcXMLString(BibInfoBean bibInfoBean, HashMap<String, String> dataMap) throws Exception {
203         String xmlString = OLEConstants.INSTANCE_MARC_XML_STRING;
204         return xmlString;
205     }
206 
207     @Override
208     public String generateXMLStringForIngest(BibInfoBean bibInfoBean, HashMap<String, String> dataMap) throws Exception {
209         String bibMarcXMLString;
210         String itemMarcXMLString;
211         if (!dataMap.containsKey(OleSelectConstant.BIB_MARC_XMLSTRING)) {
212             bibMarcXMLString = convertBibInfoBeanToMarcXMLString(bibInfoBean, dataMap);
213             dataMap.put(OleSelectConstant.BIB_MARC_XMLSTRING, bibMarcXMLString);
214         }
215         if (!dataMap.containsKey(OleSelectConstant.ITEM_MARC_XMLSTRING)) {
216             itemMarcXMLString = generateItemMarcXMLString(bibInfoBean, dataMap);
217             dataMap.put(OleSelectConstant.ITEM_MARC_XMLSTRING, itemMarcXMLString);
218         }
219         if (!dataMap.containsKey(OleSelectConstant.INSTANCE_MARC_XMLSTRING)) {
220             itemMarcXMLString = generateInstanceMarcXMLString(bibInfoBean, dataMap);
221             dataMap.put(OleSelectConstant.INSTANCE_MARC_XMLSTRING, itemMarcXMLString);
222         }
223         String requestXMLString = generateRequestXMLString(bibInfoBean, dataMap);
224         //requestXMLString = replaceStringWithSymbols(requestXMLString);
225         if (LOG.isDebugEnabled()) {
226             LOG.debug("requestXMLString ------------->" + requestXMLString);
227         }
228         return requestXMLString;
229     }
230 
231     public String generateXMLStringForIngest(List<BibInfoBean> bibInfoBeanList, HashMap<String, String> dataMap) throws Exception {
232         String requestXMLString = generateRequestXMLString(bibInfoBeanList, dataMap);
233         //requestXMLString = replaceStringWithSymbols(requestXMLString);
234         if (LOG.isDebugEnabled()) {
235             LOG.debug("requestXMLString ------------->" + requestXMLString);
236         }
237         return requestXMLString;
238     }
239 
240     private String replaceStringWithSymbols(String requestXMLString) throws Exception {
241         requestXMLString = requestXMLString.replaceAll("&lt;", "<");
242         requestXMLString = requestXMLString.replaceAll("&gt;", ">");
243         requestXMLString = requestXMLString.replaceAll("&quot;", "\"");
244         requestXMLString = requestXMLString.replaceAll("&apos;", "\'");
245         //requestXMLString = requestXMLString.replaceAll("&amp;", "#8805");
246         return requestXMLString;
247     }
248 
249     @Override
250     public String generateRequestXMLString(BibInfoBean bibInfoBean, HashMap<String, String> dataMap) throws Exception {
251         Request requestObject = new Request();
252         int i = 0;
253         String bibId = String.valueOf(i++);
254         String itemId = String.valueOf(i++);
255         if (GlobalVariables.getUserSession() != null) {
256             requestObject.setUser(GlobalVariables.getUserSession().getPrincipalName());
257         } else {
258             requestObject.setUser(configurationService.getPropertyValueAsString("userName"));
259         }
260         requestObject.setOperation(OleSelectConstant.DOCSTORE_OPERATION_INGEST);
261         RequestDocument requestDocument = new RequestDocument();
262         requestDocument.setId(bibId);
263         requestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_WORK);
264         requestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_BIB);
265         requestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_MARC);
266         requestDocument.setContent(new Content(dataMap.get(OleSelectConstant.BIB_MARC_XMLSTRING)));
267 
268         AdditionalAttributes additionalAttributes = new AdditionalAttributes();
269         additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
270         additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
271         additionalAttributes.setFastAddFlag("true");
272         additionalAttributes.setSupressFromPublic("false");
273         additionalAttributes.setHarvestable("false");
274         additionalAttributes.setStatus("n");
275         requestDocument.setAdditionalAttributes(additionalAttributes);
276 
277         RequestDocument linkedRequestDocument = new RequestDocument();
278         linkedRequestDocument.setId(itemId);
279         linkedRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_WORK);
280         linkedRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_INSTANCE);
281         linkedRequestDocument.setContent(new Content(dataMap.get(OleSelectConstant.INSTANCE_MARC_XMLSTRING)));
282         linkedRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_OLEML);
283 
284         ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
285         linkedRequestDocuments.add(linkedRequestDocument);
286 
287         requestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
288 
289 
290         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
291         requestDocuments.add(requestDocument);
292         removeElements(dataMap);
293         requestObject.setRequestDocuments(requestDocuments);
294         RequestHandler requestHandler = new RequestHandler();
295         String requestXMLString = requestHandler.toXML(requestObject);
296         return requestXMLString;
297     }
298 
299 /*    public String generateRequestXMLString(List<BibInfoBean> bibInfoBeanList,HashMap<String,String> dataMap)throws Exception{
300         Request requestObject = new Request();
301         ArrayList<String> bibMarcXMLStringList = new ArrayList<String>();
302         ArrayList<String> itemMarcXMLStringList = new ArrayList<String>();
303         ArrayList<DocStoreDocument> requestDocuments = new ArrayList<DocStoreDocument>();
304         ArrayList<LinkInfo> links = new ArrayList<LinkInfo>();
305         Iterator iterator = bibInfoBeanList.iterator();
306         int i = 0;
307         String bibId;
308         String itemId;
309         if(GlobalVariables.getUserSession()!=null){
310             requestObject.setUser(GlobalVariables.getUserSession().getPrincipalName());
311         }else{
312             requestObject.setUser(getPropertyValue("userName"));
313         }
314         requestObject.setOperation(OleSelectConstant.DOCSTORE_OPERATION_BATCHINGEST);
315         while (iterator.hasNext()) {
316             BibInfoBean bibInfoBean = (BibInfoBean)iterator.next();
317             bibId = String.valueOf(i++);
318             itemId = String.valueOf(i++);
319             String bibMarcXMLString = convertBibInfoBeanToMarcXMLString(bibInfoBean, dataMap);
320             String itemMarcXMLString = generateItemMarcXMLString(bibInfoBean, dataMap);
321             DocStoreDocument bibRequestDocument = new DocStoreDocument();
322             bibInfoBean.setDocStoreIngestionId(itemId);
323             bibRequestDocument.setId(bibId);
324             bibRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_BIB);
325             bibRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_BIB);
326             bibRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_MARC);
327             bibRequestDocument.setContent(bibMarcXMLString);
328             DocStoreDocument itemRequestDocument = new DocStoreDocument();
329             itemRequestDocument.setId(itemId);
330             itemRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_BIB);
331             itemRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_ITEM);
332             itemRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_MARC);
333             itemRequestDocument.setContent(itemMarcXMLString);
334             requestDocuments.add(bibRequestDocument);
335             requestDocuments.add(itemRequestDocument);
336             LinkInfo linkInfo = new LinkInfo();
337             linkInfo.setFrom(bibId);
338             linkInfo.setTo(itemId);
339             links.add(linkInfo);
340         }
341         requestObject.setRequestDocuments(requestDocuments);
342         requestObject.setLinks(links);
343         RequestHandler requestHandler = new RequestHandler();
344         String requestXMLString = requestHandler.toXML(requestObject);
345         return requestXMLString;
346     }*/
347 
348     public String generateRequestXMLString(List<BibInfoBean> bibInfoBeanList, HashMap<String, String> dataMap) throws Exception {
349         Request requestObject = new Request();
350         ArrayList<String> bibMarcXMLStringList = new ArrayList<String>();
351         ArrayList<String> itemMarcXMLStringList = new ArrayList<String>();
352         ArrayList<String> instanceMarcXMLStringList = new ArrayList<String>();
353         ArrayList<RequestDocument> requestDocuments = new ArrayList<RequestDocument>();
354         ArrayList<LinkInfo> links = new ArrayList<LinkInfo>();
355         Iterator bibInfoBeanListIterator = bibInfoBeanList.iterator();
356         RequestDocument docStoreDocument;
357         int i = 0;
358         String bibId;
359         String itemId;
360         if (GlobalVariables.getUserSession() != null) {
361             requestObject.setUser(GlobalVariables.getUserSession().getPrincipalName());
362         } else {
363             requestObject.setUser(configurationService.getPropertyValueAsString("userName"));
364         }
365         requestObject.setOperation(OleSelectConstant.DOCSTORE_OPERATION_BATCHINGEST);
366         while (bibInfoBeanListIterator.hasNext()) {
367             BibInfoBean bibInfoBean = (BibInfoBean) bibInfoBeanListIterator.next();
368             String bibMarcXMLString = convertBibInfoBeanToMarcXMLString(bibInfoBean, dataMap);
369             //String itemMarcXMLString = generateItemMarcXMLString(bibInfoBean, dataMap);
370             String instanceXMLString = generateInstanceMarcXMLString(bibInfoBean, dataMap);
371 
372             bibMarcXMLStringList.add(bibMarcXMLString);
373             //itemMarcXMLStringList.add(itemMarcXMLString);
374             instanceMarcXMLStringList.add(instanceXMLString);
375 
376         }
377         Iterator bibMarcXMLStringListIterator = bibMarcXMLStringList.iterator();
378         Iterator itemMarcXMLStringListIterator = itemMarcXMLStringList.iterator();
379         int idCounter = 0;
380         bibInfoBeanListIterator = bibInfoBeanList.iterator();
381         while (bibMarcXMLStringListIterator.hasNext()) {
382             docStoreDocument = getBibDocStoreDocument(bibMarcXMLStringListIterator.next().toString(), String.valueOf(idCounter));
383             requestDocuments.add(docStoreDocument);
384             BibInfoBean bibInfoBean = (BibInfoBean) bibInfoBeanListIterator.next();
385             bibInfoBean.setDocStoreIngestionId(String.valueOf(idCounter));
386             idCounter++;
387         }
388         /*bibInfoBeanListIterator = bibInfoBeanList.iterator();
389         while(itemMarcXMLStringListIterator.hasNext()){
390             docStoreDocument = getItemDocStoreDocument(itemMarcXMLStringListIterator.next().toString(),String.valueOf(idCounter));
391             requestDocuments.add(docStoreDocument);
392             BibInfoBean bibInfoBean = (BibInfoBean)bibInfoBeanListIterator.next();
393             bibInfoBean.setDocStoreIngestionId(String.valueOf(idCounter));
394             idCounter++;
395         }*/
396         requestObject.setRequestDocuments(requestDocuments);
397         links = getLinkInfo(bibInfoBeanList);
398         //requestObject.setLinks(links);
399         RequestHandler requestHandler = new RequestHandler();
400         String requestXMLString = requestHandler.toXML(requestObject);
401         return requestXMLString;
402     }
403 
404 
405     private RequestDocument getBibDocStoreDocument(String xmlString, String id) throws Exception {
406         RequestDocument bibRequestDocument = new RequestDocument();
407         int itemId = Integer.valueOf(id);
408         bibRequestDocument.setId(id);
409         /*bibRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_BIB);
410         bibRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_BIB);
411         bibRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_MARC);
412         bibRequestDocument.setContent(new Content(xmlString));*/
413         bibRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_WORK);
414         bibRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_BIB);
415         bibRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_MARC);
416         bibRequestDocument.setContent(new Content(xmlString));
417         AdditionalAttributes additionalAttributes = new AdditionalAttributes();
418         additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
419         additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
420         additionalAttributes.setFastAddFlag("true");
421         additionalAttributes.setSupressFromPublic("false");
422         additionalAttributes.setHarvestable("false");
423         additionalAttributes.setStatus("n");
424         bibRequestDocument.setAdditionalAttributes(additionalAttributes);
425 
426         RequestDocument linkedRequestDocument = new RequestDocument();
427         linkedRequestDocument.setId(String.valueOf(++itemId));
428         linkedRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_WORK);
429         linkedRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_INSTANCE);
430         linkedRequestDocument.setContent(new Content(OLEConstants.INSTANCE_MARC_XML_STRING));
431         linkedRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_OLEML);
432 
433         ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
434         linkedRequestDocuments.add(linkedRequestDocument);
435 
436         bibRequestDocument.setLinkedRequestDocuments(linkedRequestDocuments);
437         return bibRequestDocument;
438     }
439 
440     private RequestDocument getItemDocStoreDocument(String xmlString, String id) throws Exception {
441         RequestDocument bibRequestDocument = new RequestDocument();
442         int itemId = Integer.valueOf(id);
443         bibRequestDocument.setId(id);
444         bibRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_WORK);
445         bibRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_BIB);
446         bibRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_MARC);
447         bibRequestDocument.setContent(new Content(xmlString));
448         AdditionalAttributes additionalAttributes = new AdditionalAttributes();
449         additionalAttributes.setDateEntered(String.valueOf(dateFormat.format(new Date())));
450         additionalAttributes.setLastUpdated(String.valueOf(dateFormat.format(new Date())));
451         additionalAttributes.setFastAddFlag("true");
452         additionalAttributes.setSupressFromPublic("false");
453         additionalAttributes.setHarvestable("false");
454         additionalAttributes.setStatus("n");
455         bibRequestDocument.setAdditionalAttributes(additionalAttributes);
456 
457         RequestDocument linkedRequestDocument = new RequestDocument();
458         linkedRequestDocument.setId(String.valueOf(++itemId));
459         linkedRequestDocument.setCategory(OleSelectConstant.DOCSTORE_CATEGORY_WORK);
460         linkedRequestDocument.setType(OleSelectConstant.DOCSTORE_TYPE_INSTANCE);
461         linkedRequestDocument.setContent(new Content(OLEConstants.INSTANCE_MARC_XML_STRING));
462         linkedRequestDocument.setFormat(OleSelectConstant.DOCSTORE_FORMAT_OLEML);
463 
464         ArrayList<RequestDocument> linkedRequestDocuments = new ArrayList<RequestDocument>();
465         linkedRequestDocuments.add(linkedRequestDocument);
466         return bibRequestDocument;
467     }
468 
469     private ArrayList<LinkInfo> getLinkInfo(List<BibInfoBean> bibInfoBeanList) throws Exception {
470         ArrayList<LinkInfo> links = new ArrayList<LinkInfo>();
471         for (int i = 0; i < bibInfoBeanList.size(); i++) {
472             LinkInfo linkInfo = new LinkInfo();
473             linkInfo.setFrom(String.valueOf(i));
474             linkInfo.setTo(bibInfoBeanList.get(i).getDocStoreIngestionId());
475             links.add(linkInfo);
476         }
477         return links;
478     }
479 
480     private void removeElements(HashMap<String, String> dataMap) throws Exception {
481         dataMap.remove(OleSelectConstant.BIB_MARC_XMLSTRING);
482         dataMap.remove(OleSelectConstant.ITEM_MARC_XMLSTRING);
483     }
484 
485     private Properties loadPropertiesFromClassPath(String classPath) throws Exception {
486         ClassPathResource classPathResource = new ClassPathResource(classPath);
487         Properties properties = new Properties();
488         try {
489             properties.load(classPathResource.getInputStream());
490         } catch (IOException e) {
491             throw new RuntimeException("Invalid class path: " + classPath, e);
492         }
493         return properties;
494     }
495 
496     public String getFormData(HashMap<String, String> dataMap) throws Exception {
497         String postdata = "";
498         if (dataMap.containsKey(OleSelectConstant.IS_BIB_EDIT)) {
499             if (dataMap.get(OleSelectConstant.IS_BIB_EDIT).equalsIgnoreCase("true")) {
500                 postdata = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_APP_POST_DATA_EDIT_KEY);
501                 postdata = postdata + "&uuid=" + dataMap.get(OleSelectConstant.TITLE_ID) + "&fileContent=";
502             } else {
503                 postdata = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_APP_POST_DATA_KEY);
504             }
505         } else {
506             postdata = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_APP_POST_DATA_KEY);
507             postdata = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_APP_POST_DATA_KEY);
508         }
509         postdata = postdata + dataMap.get(OleSelectConstant.DOCSTORE_REQUEST_XMLSTRING);
510         return postdata;
511     }
512 
513     public BibInfoBean retrieve(String titleId) throws Exception {
514         if (LOG.isDebugEnabled()) {
515             LOG.debug("inside BibInfoService retrieve-- titleid----------->" + titleId);
516         }
517         XPathFactory xFactory = XPathFactory.newInstance();
518         XPath xpath = xFactory.newXPath();
519         XPathExpression expr = xpath.compile("//bibData[titleId='" + titleId + "']");
520         Object result = expr.evaluate(parseDocStoreContent(), XPathConstants.NODESET);
521         NodeList nodes = (NodeList) result;
522         BibInfoBean bibInfoBean = new BibInfoBean();
523         if (nodes.getLength() > 0) {
524             Node node = nodes.item(0);
525             NodeList list = node.getChildNodes();
526             for (int i = 0; i < list.getLength(); i++) {
527                 Node tempNode = list.item(i);
528                 convertToBean(bibInfoBean, tempNode.getNodeName(), tempNode.getTextContent());
529                 if (LOG.isDebugEnabled()) {
530                     LOG.debug("node name--------->" + tempNode.getNodeName());
531                     LOG.debug("node text--------->" + tempNode.getTextContent());
532                 }
533             }
534         }
535         return bibInfoBean;
536     }
537 
538     //public BibInfoBean retrieveFromDocStore(String titleId) throws Exception {
539     @Override
540     public BibInfoBean retrieveFromDocStore(HashMap<String, String> dataMap) throws Exception {
541         BibInfoBean bibInfoBean = new BibInfoBean();
542         bibInfoBean.setTitleId(dataMap.get(OleSelectConstant.TITLE_ID));
543         bibInfoBean.setDocCategoryType(dataMap.get(OleSelectConstant.DOC_CATEGORY_TYPE));
544         List<BibInfoBean> bibInfoBeanList = searchBibInfo(bibInfoBean);
545         if (LOG.isDebugEnabled()) {
546             LOG.debug("bibInfoBeanList.size----------->" + bibInfoBeanList.size());
547         }
548         for (int i = 0; i < bibInfoBeanList.size(); i++) {
549             if (bibInfoBeanList.get(i).getTitle() != null) {
550                 bibInfoBean = bibInfoBeanList.get(i);
551             }
552             if (LOG.isDebugEnabled()) {
553                 LOG.debug("title---------" + i + "->" + bibInfoBeanList.get(i).getTitle());
554             }
555         }
556 /*        for (Iterator<BibInfoBean> iterator = bibInfoBeanList.iterator(); iterator.hasNext(); ) {
557             BibInfoBean infoBean = iterator.next();
558             if (null != infoBean.getTitle()) {
559                 return bibInfoBean;
560             }
561         }*/
562 /*        if(bibInfoBeanList.iterator().hasNext())
563             bibInfoBean = bibInfoBeanList.iterator().next();*/
564         return bibInfoBean;
565     }
566 
567     private void convertToBean(BibInfoBean bibInfoBean, String nodeName, String textContent) {
568         if ("titleId".equals(nodeName)) {
569             bibInfoBean.setTitleId(textContent);
570         } else if ("title".equals(nodeName)) {
571             bibInfoBean.setTitle(textContent);
572         } else if ("author".equals(nodeName)) {
573             bibInfoBean.setAuthor(textContent);
574         } else if ("edition".equals(nodeName)) {
575             bibInfoBean.setEdition(textContent);
576         } else if ("standardNumber".equals(nodeName)) {
577             bibInfoBean.setStandardNumber(textContent);
578         } else if ("publisher".equals(nodeName)) {
579             bibInfoBean.setPublisher(textContent);
580         } else if ("placeOfPublication".equals(nodeName)) {
581             bibInfoBean.setPlaceOfPublication(textContent);
582         } else if ("yearOfPublication".equals(nodeName)) {
583             bibInfoBean.setYearOfPublication(textContent);
584         } else if ("physicalDescription".equals(nodeName)) {
585             bibInfoBean.setPhysicalDescription(textContent);
586         } else if ("format".equals(nodeName)) {
587             bibInfoBean.setFormat(textContent);
588         } else if ("series".equals(nodeName)) {
589             bibInfoBean.setSeries(textContent);
590         } else if ("subjects".equals(nodeName)) {
591             bibInfoBean.setSubjects(textContent);
592         } else if ("price".equals(nodeName)) {
593             bibInfoBean.setPrice(textContent);
594         } else if ("requestorContact".equals(nodeName)) {
595             bibInfoBean.setRequestorContact(textContent);
596         } else if ("requestersNotes".equals(nodeName)) {
597             bibInfoBean.setRequestersNotes(textContent);
598         } else if ("noOfCopies".equals(nodeName)) {
599             bibInfoBean.setNoOfCopies(textContent);
600         } else if ("category".equals(nodeName)) {
601             bibInfoBean.setCategory(textContent);
602         } else if ("requestSource".equals(nodeName)) {
603             bibInfoBean.setRequestSource(textContent);
604         } else if ("selector".equals(nodeName)) {
605             bibInfoBean.setSelector(textContent);
606         } else if ("selectorNotes".equals(nodeName)) {
607             bibInfoBean.setSelectorNotes(textContent);
608         } else if ("startPage".equals(nodeName)) {
609             if (textContent != null && !"".equals(textContent)) {
610                 bibInfoBean.setStartPage(Long.valueOf(textContent));
611             }
612         } else if ("endPage".equals(nodeName)) {
613             if (textContent != null && !"".equals(textContent)) {
614                 bibInfoBean.setEndPage(Long.valueOf(textContent));
615             }
616         }
617     }
618 
619     private List<BibInfoBean> convertToBibInfoBeanList(List<DocInfoBean> docInfoBeanList) throws Exception {
620         List<BibInfoBean> bibInfoBeanList = new ArrayList<BibInfoBean>();
621         for (DocInfoBean docInfoBean : docInfoBeanList) {
622             BibInfoBean bibInfoBean = new BibInfoBean();
623             bibInfoBean.setTitleId(manipulateStringValue(docInfoBean.getTitleId()));
624             bibInfoBean.setTitle(manipulateStringValue(docInfoBean.getTitle_display()));
625             bibInfoBean.setAuthor(manipulateStringValue(docInfoBean.getAuthor_display()));
626             bibInfoBean.setPublisher(manipulateStringValue(docInfoBean.getPublisher_display()));
627             bibInfoBean.setIsbn(manipulateStringValue(docInfoBean.getIsbn_display()));
628             bibInfoBean.setYearOfPublication(manipulateStringValue(docInfoBean.getYearOfPublication()));
629             bibInfoBeanList.add(bibInfoBean);
630         }
631         return bibInfoBeanList;
632     }
633 
634     private String manipulateStringValue(String value) throws Exception {
635         if (value != null) {
636             value = value.trim();
637             value = value.replace("||", "");
638         }
639         return value;
640     }
641 
642     private Document parseDocStoreContent() throws Exception {
643         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
644         factory.setNamespaceAware(true);
645         DocumentBuilder builder = factory.newDocumentBuilder();
646         String externalDirectory = configurationService.getPropertyValueAsString(OLEConstants.STAGING_DIRECTORY_KEY);
647         String fileName = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_FILE_KEY);
648         if (LOG.isInfoEnabled()) {
649             LOG.info("parseDocStoreContent externalDirectory------------>" + externalDirectory);
650             LOG.info("parseDocStoreContent fileName------------>" + fileName);
651         }
652         File file = new File(externalDirectory + fileName);
653         if (!file.exists()) {
654             return null;
655         }
656         Document doc = builder.parse(file.getAbsolutePath());
657         return doc;
658     }
659 
660     @Override
661     public boolean isExists(HashMap map) throws Exception {
662         String externalDirectory = configurationService.getPropertyValueAsString(OLEConstants.STAGING_DIRECTORY_KEY);
663         String fileName = configurationService.getPropertyValueAsString(OLEConstants.DOCSTORE_FILE_KEY);
664         if (LOG.isInfoEnabled()) {
665             LOG.info("Doc Store file Path :" + externalDirectory + fileName);
666         }
667         File file = new File(externalDirectory + fileName);
668         if (!file.exists()) {
669             return false;
670         }
671         if (map.size() == 0) {
672             return false;
673         }
674         XPathFactory xFactory = XPathFactory.newInstance();
675         XPath xpath = xFactory.newXPath();
676         StringBuilder sBuff = new StringBuilder("//bibData");
677         Set set = map.keySet();
678         Iterator<String> setIt = set.iterator();
679         String value = null;
680         while (setIt.hasNext()) {
681             String key = setIt.next();
682             //sBuff.append("[" + key + "='" + map.get(key) + "']");
683             value = (String) map.get(key);
684             if (value.indexOf("\"") != -1) {
685                 sBuff.append("[translate(" + key + ",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')=translate('" + map.get(key) + "','ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')]");
686             } else {
687                 sBuff.append("[translate(" + key + ",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')=translate(\"" + map.get(key) + "\",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')]");
688             }
689         }
690         if (LOG.isDebugEnabled()) {
691             LOG.debug("XPath expr :" + sBuff.toString());
692         }
693         XPathExpression expr = xpath.compile(sBuff.toString());
694         Object result = expr.evaluate(parseDocStoreContent(), XPathConstants.NODESET);
695         NodeList nodeList = (NodeList) result;
696         if (LOG.isDebugEnabled()) {
697             LOG.debug("NodeList length :" + nodeList.getLength());
698         }
699         if (nodeList.getLength() > 0) {
700             return true;
701         } else {
702             return false;
703         }
704     }
705 
706     @Override
707     public boolean isDuplicateRecord(BibInfoBean bibInfoBean) throws Exception {
708         List<DocInfoBean> docInfoBeanList = search(bibInfoBean);
709         for (DocInfoBean docInfoBean : docInfoBeanList) {
710             if (bibInfoBean.getTitle().trim().equalsIgnoreCase(docInfoBean.getTitle_display().trim())) {
711                 return true;
712             }
713         }
714         return false;
715     }
716 
717     @Override
718     public List<BibInfoBean> searchBibInfo(BibInfoBean bibInfoBean) throws Exception {
719         List<DocInfoBean> docInfoBeanList = search(bibInfoBean);
720         List<BibInfoBean> bibInfoBeanList = convertToBibInfoBeanList(docInfoBeanList);
721         return bibInfoBeanList;
722     }
723 
724     public List<DocInfoBean> search(BibInfoBean bibInfoBean) throws Exception {
725         List<DocInfoBean> docInfoBeanList;
726         String title = bibInfoBean.getTitle();
727         if (title != null) {
728             title = title.replaceAll(" ", "%20");
729         }
730         String query = buildDocSearchQuery(bibInfoBean);
731         docInfoBeanList = getResponse(query);
732         if (LOG.isDebugEnabled()) {
733             LOG.debug("docsearch query------>" + query);
734         }
735         return docInfoBeanList;
736     }
737 
738 
739     /**
740      * This method takes map as the parameter takes values in map and generate docstore query
741      *
742      * @param map
743      * @return
744      */
745     public String buildDocSearchQuery(Map map) {
746         LOG.debug(" BibInfoServiceImpl.buildDocSearchQuery(Map map) method starts ");
747         StringBuilder query = new StringBuilder();
748         query.append("q=");
749         Set set = map.keySet();
750         Iterator setIterator = set.iterator();
751         String key = null;
752         String value = null;
753         String operator = null;
754         int count = 0;
755         while (setIterator.hasNext()) {
756             key = (String) setIterator.next();
757             //value = (String) map.get(key);
758             value = map.get(key).toString().toLowerCase();
759             if (OleSelectConstant.DocStoreDetails.DOCSTORE_QUERY_KEYS.containsKey(key)) {
760                 if (!OleSelectConstant.DocStoreDetails.DOCSTORE_QUERY_KEYS.get(key).equals(OleSelectConstant.DocStoreDetails.ITEMLINKS_VALUE)) {
761                     if (value.indexOf("\"") == 0 && value.lastIndexOf("\"") == value.length() - 1) {
762                         operator = " AND ";
763                     } else {
764                         operator = " OR ";
765                     }
766                     value = value.replaceAll("[^a-zA-Z 0-9*]+", "");
767                     value = value.replaceAll("\\s+", " ");
768                     value = value.trim().replace(" ", operator);
769                 }
770                 if (count == 0) {
771                     query.append("(" + OleSelectConstant.DocStoreDetails.DOCSTORE_QUERY_KEYS.get(key) + ":(\"" + value + "\"))");
772                 } else {
773                     query.append("AND(" + OleSelectConstant.DocStoreDetails.DOCSTORE_QUERY_KEYS.get(key) + ":(\"" + value + "\"))");
774                 }
775                 count++;
776             }
777         }
778         query.append("&fl=instanceIdentifier,uniqueId,bibIdentifier,Title_display,Author_display,PublicationDate_search,ISBN_display,Publisher_search");
779         int noOfRows = Integer.parseInt(SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.DOCSEARCH_LIMIT_KEY));
780         query.append("&rows=" + noOfRows);
781         if (GlobalVariables.getUserSession() != null) {
782             query.append("&userId=" + GlobalVariables.getUserSession().getPerson().getPrincipalName());
783         }
784         if (LOG.isDebugEnabled()) {
785             LOG.debug("docsearch query1------>" + query.toString());
786             LOG.debug(" BibInfoServiceImpl.buildDocSearchQuery(Map map) method ends ");
787         }
788         return query.toString();
789     }
790 
791     private String buildDocSearchQuery(BibInfoBean bibInfoBean) throws Exception {
792         StringBuilder query = new StringBuilder();
793         String id = "instanceIdentifier";
794         if (bibInfoBean.getDocCategoryType() != null) {
795             id = bibInfoBean.getDocCategoryType();
796         }
797         query.append("q=");
798         if (bibInfoBean.getTitleId() != null) {
799             query.append("(" + id + ":" + bibInfoBean.getTitleId() + ")");
800         } else {
801             query.append("(Title_display:" + bibInfoBean.getTitle() + ")");
802             if (bibInfoBean.getAuthor() != null && !StringUtils.isEmpty(bibInfoBean.getAuthor())) {
803                 query.append("AND(Author_display:" + bibInfoBean.getAuthor() + ")");
804             }
805             if (bibInfoBean.getTypeOfStandardNumber() != null) {
806                 if (bibInfoBean.getTypeOfStandardNumber().equalsIgnoreCase("ISBN")) {
807                     query.append("AND(ISBN_display:" + bibInfoBean.getStandardNumber() + ")");
808                 } else if (bibInfoBean.getTypeOfStandardNumber().equalsIgnoreCase("ISSN")) {
809                     query.append("AND(ISSN_display:" + bibInfoBean.getTypeOfStandardNumber() + ")");
810                 }
811             }
812         }
813         query.append("&fl=" + id + ",Title_display,Author_display,YearOfPublication,ISBN_display,Publisher_display");
814         int noOfRows = Integer.parseInt(SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.DOCSEARCH_LIMIT_KEY));
815         query.append("&rows=" + noOfRows);
816         // Changes to include userId in docstore URl.
817         if (GlobalVariables.getUserSession() != null) {
818             query.append("&userId=" + GlobalVariables.getUserSession().getPerson().getPrincipalName());
819         }
820         if (LOG.isDebugEnabled()) {
821             LOG.debug("docsearch query------>" + query.toString());
822         }
823         return query.toString();
824     }
825 
826     private List<DocInfoBean> getResponse(String query) {
827         LOG.debug(" BibInfoServiceImpl.getResponse method starts ");
828         List<DocInfoBean> docInfoBeanList = new ArrayList<DocInfoBean>(0);
829         BuildDocInfoBean buildVendorDocInfoBean = new BuildDocInfoBean();
830         docInfoBeanList = buildVendorDocInfoBean.getDocInfoBeanList(query);
831         LOG.debug(" BibInfoServiceImpl.getResponse method ends ");
832         return docInfoBeanList;
833     }
834 
835     /**
836      * @see org.kuali.ole.select.service.BibInfoService#search(java.util.Map)
837      */
838     @Override
839     public List search(Map map) throws Exception {
840         LOG.debug(" BibInfoServiceImpl.search(Map map) method starts ");
841         List<DocInfoBean> docInfoBeanList;
842         String query = buildDocSearchQuery(map);
843         docInfoBeanList = getResponse(query);
844         LOG.debug(" BibInfoServiceImpl.search(Map map) method ends ");
845         return docInfoBeanList;
846     }
847 
848     @Override
849     public List search(HashMap map, int noOfRecords) throws Exception {
850         List<BibInfoBean> bibInfoBeanList = new ArrayList<BibInfoBean>();
851         XPathFactory xFactory = XPathFactory.newInstance();
852         XPath xpath = xFactory.newXPath();
853         StringBuilder stringExpression = new StringBuilder("//bibData");
854         Set set = map.keySet();
855         Iterator<String> setIt = set.iterator();
856         String value = null;
857         while (setIt.hasNext()) {
858             String key = setIt.next();
859             //sBuff.append("[" + key + "='" + map.get(key) + "']");
860             value = (String) map.get(key);
861             if (value.indexOf("\"") != -1) {
862                 stringExpression.append("[translate(" + key + ",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')=translate('" + map.get(key) + "','ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')]");
863             } else {
864                 stringExpression.append("[translate(" + key + ",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')=translate(\"" + map.get(key) + "\",'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')]");
865             }
866         }
867         if (LOG.isDebugEnabled()) {
868             LOG.debug("XPath expr :" + stringExpression.toString());
869         }
870         XPathExpression expr = xpath.compile(stringExpression.toString());
871         Object result = expr.evaluate(parseDocStoreContent(), XPathConstants.NODESET);
872         NodeList nodeList = (NodeList) result;
873 
874         BibInfoBean bibInfoBean;
875         for (int i = 0; i < nodeList.getLength(); i++) {
876             Node node = nodeList.item(i);
877             NodeList list = node.getChildNodes();
878             bibInfoBean = new BibInfoBean();
879             for (int j = 0; j < list.getLength(); j++) {
880                 Node tempNode = list.item(j);
881                 convertToBean(bibInfoBean, tempNode.getNodeName(), tempNode.getTextContent());
882             }
883             bibInfoBeanList.add(bibInfoBean);
884             if (i == (noOfRecords - 1)) {
885                 break;
886             }
887         }
888 
889         return bibInfoBeanList;
890     }
891 
892     @Override
893     public String getTitleIdByMarcXMLFileProcessing(BibInfoBean bibInfoBean, HashMap<String, String> dataMap) throws Exception {
894         String titleId = null;
895         BibInfoBean xmlBibInfoBean = new BibInfoBean();
896         FileProcessingService fileProcessingService = SpringContext.getBean(FileProcessingService.class);
897         String bibMarcXmlString = fileProcessingService.getFileContentAndDeleteFile(dataMap).get(OleSelectConstant.XML_FILE_CONTENT);
898         if (bibMarcXmlString != null) {
899             //bibMarcXmlString = OleSelectConstant.CDATA_START_TAG + bibMarcXmlString + OleSelectConstant.CDATA_END_TAG;
900             dataMap.put(OleSelectConstant.BIB_MARC_XMLSTRING, bibMarcXmlString);
901             dataMap.put(OleSelectConstant.DOC_CATEGORY_TYPE, OleSelectConstant.DOC_CATEGORY_TYPE_ITEM);
902             titleId = save(bibInfoBean, dataMap);
903         }
904         return titleId;
905     }
906 
907 
908     public ConfigurationService getConfigurationService() {
909         return configurationService;
910     }
911 
912     public void setConfigurationService(ConfigurationService kualiConfigurationService) {
913         this.configurationService = kualiConfigurationService;
914     }
915 
916     public WebClientService getWebClientService() {
917         return webClientService;
918     }
919 
920     public void setWebClientService(WebClientService webClientService) {
921         this.webClientService = webClientService;
922     }
923 
924     public BibMarcXMLGenerationService getBibMarcXMLGenerationService() {
925         return bibMarcXMLGenerationService;
926     }
927 
928     public void setBibMarcXMLGenerationService(BibMarcXMLGenerationService bibMarcXMLGenerationService) {
929         this.bibMarcXMLGenerationService = bibMarcXMLGenerationService;
930     }
931 
932     public ItemMarcXMLGenerationService getItemMarcXMLGenerationService() {
933         return itemMarcXMLGenerationService;
934     }
935 
936     public void setItemMarcXMLGenerationService(ItemMarcXMLGenerationService itemMarcXMLGenerationService) {
937         this.itemMarcXMLGenerationService = itemMarcXMLGenerationService;
938     }
939 
940     public FileProcessingService getFileProcessingService() {
941         return fileProcessingService;
942     }
943 
944     public void setFileProcessingService(FileProcessingService fileProcessingService) {
945         this.fileProcessingService = fileProcessingService;
946     }
947 
948     @Override
949     public List<DocInfoBean> getResult(List isbnList) throws Exception {
950 
951         List<DocInfoBean> docInfoBeanList = new ArrayList<DocInfoBean>(0);
952         StringBuilder query = new StringBuilder("q=");
953         query.append("(");
954         HashMap titleIdMap = new HashMap();
955         for (int i = 0; i < isbnList.size(); i++) {
956             if (isbnList.get(i) != null && !("".equals(isbnList.get(i)))) {
957                 query.append("(ISBN_display:" + isbnList.get(i) + ")");
958             }
959         }
960         query.append(")");
961         // Changes to include userId in docstore URl.
962         if (GlobalVariables.getUserSession() != null) {
963             query.append("&userId=" + GlobalVariables.getUserSession().getPerson().getPrincipalName());
964         }
965         if (isbnList.size() > 0) {
966             if (LOG.isDebugEnabled()) {
967                 LOG.debug("Doc Store Query :" + query.toString());
968             }
969             docInfoBeanList = getResponse(query.toString());
970         }
971         if (docInfoBeanList.size() > 0) {
972             String maxLimit = docInfoBeanList.get(0).getNoOfRecords();
973             query.append("&fl=uniqueId,bibIdentifier,ISBN_display");
974             query.append("&rows=" + maxLimit);
975             if (LOG.isDebugEnabled()) {
976                 LOG.debug("Doc Store Query :" + query.toString());
977             }
978             if (isbnList.size() > 0) {
979                 docInfoBeanList = getResponse(query.toString());
980             }
981         }
982         return docInfoBeanList;
983     }
984 //    public String getWebClientPropertyValue(String key)throws Exception{
985 //        if ( LOG.isDebugEnabled() ) {
986 //            LOG.debug("Webclient property key - "+key);
987 //        }
988 //        Properties properties = PropertyUtil.loadPropertiesFromClassPath("org/kuali/ole/select/service/impl/webclient.properties");
989 //        if ( LOG.isDebugEnabled() ) {
990 //            LOG.debug("Properties loaded from classpath - "+properties);
991 //        }
992 //        if(OLEConstants.WebclientProperties.DOCSEARCH_URL.equals(key) || OLEConstants.WebclientProperties.DOCSTORE_URL.equals(key)){
993 //            key = OLEConstants.WebclientProperties.WEBCLIENT_PROPERTIES.get(key);
994 //        }
995 //        if ( LOG.isDebugEnabled() ) {
996 //            LOG.debug("Final key for which value has to be retrieved - "+key);
997 //        }
998 //        String propertyValue = properties.getProperty(key);
999 //        if ( LOG.isDebugEnabled() ) {
1000 //            LOG.debug("Value retrieved - "+propertyValue);
1001 //        }
1002 //        return propertyValue;
1003 //    }
1004 
1005     public BibInfoBean retrieveFromSolrQuery(Map map) throws Exception {
1006         String key = null;
1007         String value = null;
1008         OleDocument oleDocument = new WorkBibDocument();
1009         WorkInstanceDocument workInstance = new WorkInstanceDocument();
1010         Iterator iterator = map.keySet().iterator();
1011         StringBuffer sb = new StringBuffer();
1012         String id = null;
1013         while (iterator.hasNext()) {
1014             key = (String) iterator.next();
1015             value = (String) map.get(key);
1016             if (map.get("instanceIdentifier") != null) {
1017                 workInstance.setInstanceIdentifier((String) map.get("instanceIdentifier"));
1018                 ((org.kuali.ole.docstore.model.bo.WorkBibDocument) oleDocument).setInstanceDocument(workInstance);
1019                 id = (String) map.get("instanceIdentifier");
1020             }
1021         }
1022         String queryString = "instanceIdentifier:" + id;
1023         SolrRequestReponseHandler solrResponse = new SolrRequestReponseHandler();
1024         List<HashMap<String, Object>> bibInfo = solrResponse.retriveResults(queryString);
1025         BibInfoBean bibInfoList = setBibInfoBean(bibInfo);
1026         return bibInfoList;
1027     }
1028 
1029 /*    public BibInfoBean retrieveFromSolrQueryNew(Map map) throws Exception {
1030         org.kuali.ole.docstore.common.document.Bib bib = getDocstoreClient().findBib(map);
1031         BibInfoBean bibInfoList = setBibInfoBeanNew(bib);
1032         return bibInfoList;
1033     }*/
1034 
1035 
1036     public BibInfoBean setBibInfoBean(List<HashMap<String, Object>> bibInfo) {
1037         BibInfoBean bibInfoBean = new BibInfoBean();
1038         Iterator itr = bibInfo.iterator();
1039         String author = null;
1040         String title = null;
1041         String publisher = null;
1042         String isbn = null;
1043         while (itr.hasNext()) {
1044             HashMap<String, Object> resultMap = (HashMap<String, Object>) itr.next();
1045             if (resultMap.get("Author_display") != null) {
1046                 author = (String) resultMap.get("Author_display").toString();
1047                 author = author.replace('[', ' ').replace(']', ' ');
1048             }
1049             if (resultMap.get("Title_display") != null) {
1050                 title = (String) resultMap.get("Title_display").toString();
1051                 title = title.replace('[', ' ').replace(']', ' ');
1052             }
1053             if (resultMap.get("Publisher_display") != null) {
1054                 publisher = (String) resultMap.get("Publisher_display").toString();
1055                 publisher = publisher.replace('[', ' ').replace(']', ' ');
1056             }
1057             if (resultMap.get("ISBN_display") != null) {
1058                 isbn = (String) resultMap.get("ISBN_display").toString();
1059                 isbn = isbn.replace('[', ' ').replace(']', ' ');
1060             }
1061         }
1062         bibInfoBean.setAuthor(author);
1063         bibInfoBean.setTitle(title);
1064         bibInfoBean.setPublisher(publisher);
1065         bibInfoBean.setIsbn(isbn);
1066 
1067         return bibInfoBean;
1068     }
1069     public BibInfoBean setBibInfoBeanNew(Bib bib) {
1070         BibInfoBean bibInfoBean = new BibInfoBean();
1071         bibInfoBean.setTitle(bib.getTitle());
1072         bibInfoBean.setAuthor(bib.getAuthor());
1073         bibInfoBean.setIsbn(bib.getIsbn());
1074         return bibInfoBean;
1075     }
1076 }