001/*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.ole.select.service.impl;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.incubator.SolrRequestReponseHandler;
020import org.kuali.ole.docstore.common.document.Bib;
021import org.kuali.ole.docstore.model.bo.OleDocument;
022import org.kuali.ole.docstore.model.bo.WorkBibDocument;
023import org.kuali.ole.docstore.model.bo.WorkInstanceDocument;
024import org.kuali.ole.docstore.model.xmlpojo.ingest.*;
025import org.kuali.ole.docstore.model.xstream.ingest.RequestHandler;
026import org.kuali.ole.select.OleSelectConstant;
027import org.kuali.ole.select.businessobject.BibInfoBean;
028import org.kuali.ole.select.businessobject.DocInfoBean;
029import org.kuali.ole.select.service.*;
030import org.kuali.ole.sys.OLEConstants;
031import org.kuali.ole.sys.context.SpringContext;
032import org.kuali.rice.core.api.config.property.ConfigurationService;
033import org.kuali.rice.krad.util.GlobalVariables;
034import org.springframework.core.io.ClassPathResource;
035import org.w3c.dom.Document;
036import org.w3c.dom.Node;
037import org.w3c.dom.NodeList;
038
039import javax.xml.parsers.DocumentBuilder;
040import javax.xml.parsers.DocumentBuilderFactory;
041import javax.xml.xpath.XPath;
042import javax.xml.xpath.XPathConstants;
043import javax.xml.xpath.XPathExpression;
044import javax.xml.xpath.XPathFactory;
045import java.io.File;
046import java.io.IOException;
047import java.net.URLEncoder;
048import java.text.DateFormat;
049import java.text.SimpleDateFormat;
050import java.util.*;
051import org.kuali.ole.docstore.common.client.DocstoreClient;
052
053public class BibInfoServiceImpl implements BibInfoService {
054
055    //private static BibInfoServiceImpl docStoreInstance;
056    private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BibInfoServiceImpl.class);
057
058    protected ConfigurationService configurationService;
059    protected WebClientService webClientService;
060    protected BibMarcXMLGenerationService bibMarcXMLGenerationService;
061    protected ItemMarcXMLGenerationService itemMarcXMLGenerationService;
062    protected FileProcessingService fileProcessingService;
063    private DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
064
065    private DocstoreClient docstoreClient;
066
067    protected BibInfoServiceImpl() {
068
069    }
070
071/*    public DocstoreClient getDocstoreClient() {
072        if (docstoreClient == null) {
073            docstoreClient = SpringContext.getBean(DocstoreLocalClient.class);
074        }
075        return docstoreClient;
076    }*/
077
078/*    public static BibInfoServiceImpl getInstance() {
079        if (docStoreInstance == null)
080            docStoreInstance = new BibInfoServiceImpl();
081        return docStoreInstance;
082    }*/
083
084    @Override
085    public String save(BibInfoBean bibInfoBean) throws Exception {
086        if (LOG.isDebugEnabled()) {
087            LOG.debug("inside BibInfoService save..............");
088        }
089        BibInfoBeanToBibXML bibInfoBeanToBibXML = new BibInfoBeanToBibXML();
090        bibInfoBeanToBibXML.exportToXMLFile(bibInfoBean);
091        return bibInfoBean.getTitleId();
092    }
093
094/*    public String save(BibInfoBean bibInfoBean,HashMap dataMap) throws Exception {
095        String urlString = getWebClientPropertyValue("docstoreurl");
096        String contentType = getWebClientPropertyValue("contenttype");
097        String xmlString = convertBibInfoBeanToMarcXMLString(bibInfoBean,dataMap);
098        String data = getFormData(xmlString);
099        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}