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("<", "<"); 242 requestXMLString = requestXMLString.replaceAll(">", ">"); 243 requestXMLString = requestXMLString.replaceAll(""", "\""); 244 requestXMLString = requestXMLString.replaceAll("'", "\'"); 245 //requestXMLString = requestXMLString.replaceAll("&", "#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}