001package org.kuali.asr.service; 002 003import org.apache.log4j.Logger; 004import org.jfree.util.Log; 005import org.kuali.asr.ASRConstants; 006import org.kuali.asr.bo.*; 007import org.kuali.asr.bo.ASRItem; 008import org.kuali.ole.OLEConstants; 009import org.kuali.ole.deliver.batch.OleNoticeBo; 010import org.kuali.ole.deliver.bo.*; 011import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl; 012import org.kuali.ole.docstore.common.client.DocstoreClientLocator; 013import org.kuali.ole.docstore.common.document.content.instance.Item; 014import org.kuali.ole.docstore.common.document.content.instance.ItemStatus; 015import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor; 016import org.kuali.ole.docstore.common.search.*; 017import org.kuali.ole.docstore.model.bo.WorkItemDocument; 018import org.kuali.ole.docstore.model.enums.DocType; 019import org.kuali.ole.sys.context.SpringContext; 020import org.kuali.rice.core.api.criteria.QueryByCriteria; 021import org.kuali.rice.coreservice.impl.parameter.ParameterBo; 022import org.kuali.rice.kim.api.role.RoleService; 023import org.kuali.rice.kim.api.services.KimApiServiceLocator; 024import org.kuali.rice.kns.service.KNSServiceLocator; 025import org.kuali.rice.krad.bo.DataObjectBase; 026import org.kuali.rice.krad.data.DataObjectService; 027import org.kuali.rice.krad.service.BusinessObjectService; 028import org.kuali.rice.krad.service.KRADServiceLocator; 029 030import java.text.SimpleDateFormat; 031import java.util.*; 032 033/** 034 * Created with IntelliJ IDEA. 035 * User: sheiksalahudeenm 036 * Date: 1/8/14 037 * Time: 1:13 PM 038 * To change this template use File | Settings | File Templates. 039 */ 040 041public class ASRHelperServiceImpl { 042 private static final Logger LOG = Logger.getLogger(ASRHelperServiceImpl.class); 043 private DataObjectService dataObjectService=getDataObjectService(); 044 private DocstoreClientLocator docstoreClientLocator=getDocstoreClientLocator(); 045 046 public DocstoreClientLocator getDocstoreClientLocator() { 047 if (null == docstoreClientLocator) { 048 return SpringContext.getBean(DocstoreClientLocator.class); 049 } 050 return docstoreClientLocator; 051 } 052 053 public DataObjectService getDataObjectService(){ 054 if(dataObjectService == null){ 055 dataObjectService = KRADServiceLocator.getDataObjectService(); 056 } 057 return dataObjectService; 058 } 059 060 // private OLEASRPlaceRequestHelperServiceImpl oleasrPlaceReqestHelperService=new OLEASRPlaceRequestHelperServiceImpl(); 061 062 063 public boolean isAuthorized(String principalId) { 064 /*PermissionService service = KimApiServiceLocator.getPermissionService(); 065 return service.hasPermission(principalId, "OLE-PTRN", "Mapping Circulation Desk");*/ 066 return processOperator(principalId); 067 } 068 069/* public Object getAllASRItems() { 070 Map<String,String> parameterMap=new HashMap<>(); 071 parameterMap.put("LocationLevel_search","ASR"); 072 List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap)); 073 System.out.println("docs-->" + workItemDocuments.size()); 074 if(workItemDocuments==null || workItemDocuments.size()<=0) 075 return generateResponse(ASRConstants.ITEM_NOT_FOUND_CODE, ASRConstants.ITEM_NOT_FOUND,ASRConstants.ITEM_NOT_FOUND_STATUS); 076 return generateASRItems(workItemDocuments); 077 }*/ 078 079/* public boolean validateBarcode(String barcode) { 080 Map<String,String> parameterMap=new HashMap<>(); 081 parameterMap.put("ItemBarcode_search",barcode); 082 List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap)); 083 return (workItemDocuments!=null && workItemDocuments.size()>0); 084 }*/ 085/* 086 public boolean validateBarcode(String barcode,String location) { 087 Map<String,String> parameterMap=new HashMap<>(); 088 parameterMap.put("ItemBarcode_search",barcode); 089 parameterMap.put("LocationLevel_search",location); 090 List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap)); 091 return (workItemDocuments!=null && workItemDocuments.size()>0); 092 }*/ 093 094 /* public Object validateASRItem(String itemBarcode) { 095 List<SearchCondition> searchConditionList=new ArrayList<>(); 096 Map<String,String> parameterMap=new HashMap<>(); 097 parameterMap.put("ItemBarcode_search",itemBarcode); 098 List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap)); 099 //validate from system parameter 100 if(workItemDocuments!=null && workItemDocuments.size()>0){ 101 String[] libraryArray= getParameter("ASR_VALUES").split("[';']"); 102 for(String library:libraryArray){ 103 if(workItemDocuments.get(0).getLocation().contains(library)){ 104 return workItemDocuments.get(0); 105 } 106 else{ 107 return generateResponse(ASRConstants.ITEM_NOT_FOUND_CODE, ASRConstants.ITEM_NOT_FOUND,ASRConstants.ITEM_NOT_FOUND_STATUS); 108 } 109 } 110 return generateResponse("015","ASR Library is not found",200); 111 } 112 else{ 113 return generateResponse(ASRConstants.ITEM_NOT_FOUND_CODE, ASRConstants.ITEM_NOT_FOUND,ASRConstants.ITEM_NOT_FOUND_STATUS); 114 } 115 *//*if(workItemDocuments==null || workItemDocuments.size()<=0) 116 return false; 117 parameterMap.clear(); 118 parameterMap.put("id",workItemDocuments.get(0).getHoldingIdentifier()); 119 parameterMap.put("LocationLevel_search","B-EDUC"); 120 List<WorkHoldingsDocument> workHoldingsDocumentList=queryService.getHoldingDocuments(buildSearchParams(parameterMap)); 121 return (workHoldingsDocumentList!=null && workHoldingsDocumentList.size()>0);*//* 122 }*/ 123 public boolean validatePatron(String patronId){ 124 Map<String, String> patronMap = new HashMap<String, String>(); 125 patronMap.put("olePatronId", patronId); 126 OleNoticeBo oleNoticeBo = new OleNoticeBo(); 127 List<OlePatronDocument> olePatronDocumentList = (List<OlePatronDocument>) dataObjectService.findMatching(OlePatronDocument.class, QueryByCriteria.Builder.andAttributes(patronMap).build()).getResults(); 128 return (olePatronDocumentList!=null && olePatronDocumentList.size()>0); 129 } 130 131 public boolean validatePickupLocation(String pickupLocation){ 132 Map<String,String> circulationDeskMap = new HashMap<String,String>(); 133 circulationDeskMap.put("circulationDeskCode",pickupLocation); 134 circulationDeskMap.put("asrPickupLocation","true"); 135 List<OleCirculationDesk> oleCirculationDeskList = (List<OleCirculationDesk>)dataObjectService.findMatching(OleCirculationDesk.class,QueryByCriteria.Builder.andAttributes(circulationDeskMap).build()).getResults(); 136 return (oleCirculationDeskList!=null && oleCirculationDeskList.size()>0); 137 } 138 139 public SearchParams buildSearchParams(Map<String, String> queryParams) { 140 SearchParams searchParams = new SearchParams(); 141 List<SearchCondition> searchConditionList = new ArrayList<SearchCondition>(); 142 List<SearchCondition> searchConditions = new ArrayList<>(); 143 if (null != queryParams) { 144 for (Iterator<String> keys = queryParams.keySet().iterator(); keys.hasNext(); ) { 145 String key = keys.next(); 146 String value = queryParams.get(key); 147 if(org.apache.commons.lang.StringUtils.isNotEmpty(value)) { 148 //searchConditions.add(searchParams.buildSearchCondition("AND", searchParams.buildSearchField("item", key, value), "AND")); 149 searchParams.getSearchConditions().add(searchParams.buildSearchCondition("AND", searchParams.buildSearchField("item", key, value), "AND")); 150 } 151 } 152 } 153 return searchParams; 154 } 155 156 public ASRResponseBo generateResponse(String code, String message, int statusCode){ 157 ASRResponseBo asrResponseBo=new ASRResponseBo(); 158 asrResponseBo.setCode(code); 159 asrResponseBo.setMessage(message); 160 asrResponseBo.setStatusCode(statusCode); 161 return asrResponseBo; 162 } 163 164 public ASRItems generateASRItems(List<WorkItemDocument> workItemDocumentList){ 165 ASRItems asrItems=new ASRItems(); 166 List<ASRItem> asrItemList=new ArrayList<>(); 167 ASRItem asrItem=null; 168 for(WorkItemDocument workItemDocument:workItemDocumentList){ 169 asrItem=new ASRItem(); 170 asrItem.setAuthor(workItemDocument.getItemStatus()); 171 asrItem.setCallNumber(workItemDocument.getCallNumber()); 172 asrItem.setItemBarcode(workItemDocument.getBarcode()); 173 asrItem.setTitle(workItemDocument.getBibTitle()); 174 asrItemList.add(asrItem); 175 } 176 asrItems.setAsrItems(asrItemList); 177 return asrItems; 178 } 179 180 /*public List<WorkItemDocument> retriveItemFromDocstore(SearchParams searchParams){ 181 List<WorkItemDocument> workItemDocumentList=new ArrayList<>(); 182 try { 183 workItemDocumentList=queryService.getItemDocuments(searchParams); 184 } catch (Exception e) { 185 e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 186 } 187 return workItemDocumentList; 188 189 }*/ 190 191 192 193 public boolean updateItemStatus(Item oleItem, String itemStatus) throws Exception { 194 LOG.debug("Inside the updateItemStatus method"); 195 if(oleItem==null){ 196 return false; 197 } 198 try { 199 String itemUuid = oleItem.getItemIdentifier(); 200 String itemXmlContent = buildItemContentWithItemStatus(oleItem, itemStatus); 201 LOG.info("itemXmlContent" + itemXmlContent); 202 String itemRecordUpdateResponse = ""; 203 // getDocstoreHelperService().updateInstanceRecord(itemUuid, OLEConstants.ITEM_DOC_TYPE, itemXmlContent); 204 LOG.info(itemRecordUpdateResponse); 205 return true; 206 207 } catch (Exception e) { 208 LOG.error(OLEConstants.ITM_STS_TO_DOC_FAIL + e, e); 209 return false; 210 211 } 212 } 213 214 public String buildItemContentWithItemStatus(Item oleItem, String itemStatus) throws Exception { 215 LOG.debug("Inside the buildItemContentWithItemStatus method"); 216 ItemStatus itemStatus1 = new ItemStatus(); 217 itemStatus1.setCodeValue(itemStatus); 218 itemStatus1.setFullValue(itemStatus); 219 oleItem.setItemStatus(itemStatus1); 220 oleItem.setItemStatusEffectiveDate(String.valueOf(new SimpleDateFormat(OLEConstants.DAT_FORMAT_EFFECTIVE).format(new Date()))); 221 String itemContent = new ItemOlemlRecordProcessor().toXML(oleItem); 222 return itemContent; 223 } 224 225/* public Object getRequests(String operatorId,String asrLocation){ 226 if(!isAuthorized(operatorId)){ 227 return generateResponse(ASRConstants.OPERATOR_NOT_FOUND_CODE, ASRConstants.OPERATOR_NOT_FOUND,ASRConstants.OPERATOR_NOT_FOUND_STATUS); 228 } 229 Map<String,String> patronMap = new HashMap<String,String>(); 230 List<OleDeliverRequestBo> oleDeliverRequestBos=new ArrayList<>(); 231 patronMap.put("requestTypeId","9"); 232 List<OleDeliverRequestBo> oleDeliverRequestBoList=(List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,patronMap); 233 oleDeliverRequestBoList=validateLocationInItem(oleDeliverRequestBoList,asrLocation); 234 ASRRequests asrRequests=getASRRequest(oleDeliverRequestBoList); 235 if(asrRequests.getAsrRequests() !=null && asrRequests.getAsrRequests().size()>0) 236 return asrRequests; 237 else 238 return generateResponse(ASRConstants.REQUEST_NOT_FOUND_CODE,ASRConstants.REQUEST_NOT_FOUND,ASRConstants.REQUEST_NOT_FOUND_STATUS); 239 }*/ 240 241 242 243 public Object cancelRequest(String operatorId,String requestId){ 244 if(!isAuthorized(operatorId)){ 245 return generateResponse(ASRConstants.OPERATOR_NOT_FOUND_CODE, ASRConstants.OPERATOR_NOT_FOUND,ASRConstants.OPERATOR_NOT_FOUND_STATUS); 246 } 247 Map<String,String> requestMap = new HashMap<String,String>(); 248 requestMap.put("requestId",requestId); 249 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 250 if(oleDeliverRequestBoList!=null && oleDeliverRequestBoList.size()>0){ 251 OleDeliverRequestBo oleDeliverRequestBo = oleDeliverRequestBoList.get(0); 252 oleDeliverRequestBo.setOperatorCreateId(operatorId); 253 if(!true){ 254 return generateResponse(ASRConstants.REQUEST_NOT_FOUND_CODE,ASRConstants.REQUEST_NOT_FOUND,ASRConstants.REQUEST_NOT_FOUND_STATUS); 255 } 256 // oleasrPlaceReqestHelperService.cancelDocument(oleDeliverRequestBo); 257 return generateResponse(ASRConstants.REQUEST_CANCELED_CODE,ASRConstants.REQUEST_CANCELED,ASRConstants.REQUEST_CANCELED_STATUS); 258 } else{ 259 return generateResponse(ASRConstants.REQUEST_NOT_FOUND_CODE,ASRConstants.REQUEST_NOT_FOUND,ASRConstants.REQUEST_NOT_FOUND_STATUS); 260 } 261 } 262 263 public String getParameter(String name) { 264 String parameter = ""; 265 try { 266 Map<String, String> criteriaMap = new HashMap<String, String>(); 267 criteriaMap.put("namespaceCode", OLEConstants.DLVR_NMSPC); 268 criteriaMap.put("componentCode", OLEConstants.DLVR_CMPNT); 269 criteriaMap.put("name", name); 270 List<ParameterBo> parametersList = (List<ParameterBo>) dataObjectService.findMatching(ParameterBo.class, QueryByCriteria.Builder.andAttributes(criteriaMap).build()).getResults(); 271 for (ParameterBo parameterBo : parametersList) { 272 parameter = parameterBo.getValue(); 273 } 274 } catch (Exception e) { 275 LOG.error(e, e); 276 } 277 return parameter; 278 } 279 280/* 281 public List<OleDeliverRequestBo> validateLocationInItem(List<OleDeliverRequestBo> oleDeliverRequestBoList,String location){ 282 List<OleDeliverRequestBo> returnRequestObject=new ArrayList<>(); 283 Map<String,String> parameterMap=new HashMap<>(); 284 for(OleDeliverRequestBo oleDeliverRequestBo:oleDeliverRequestBoList){ 285 parameterMap.put("ItemBarcode_search",oleDeliverRequestBo.getItemId()); 286 List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap)); 287 if (workItemDocuments!=null && workItemDocuments.size()>0){ 288 if(StringUtils.isNotEmpty(workItemDocuments.get(0).getLocation())){ 289 for(String itemLocation:workItemDocuments.get(0).getLocation().split("['/']")){ 290 if(itemLocation.equals(location)){ 291 returnRequestObject.add(oleDeliverRequestBo); 292 break; 293 } 294 } 295 296 } 297 } 298 } 299 return returnRequestObject; 300 } 301*/ 302 303 304 public ASRItems getNewASRItems(){ 305 ASRItems asrItems = new ASRItems(); 306 List<ASRItem> asrItemList = new ArrayList<ASRItem>(); 307 List<org.kuali.ole.deliver.bo.ASRItem> asrItemsList = (List<org.kuali.ole.deliver.bo.ASRItem>)dataObjectService.findMatching(org.kuali.ole.deliver.bo.ASRItem.class, QueryByCriteria.Builder.create().build()).getResults(); 308 ASRItem asrItem; 309 if(asrItemsList.size()>0){ 310 for(org.kuali.ole.deliver.bo.ASRItem asrItemBo : asrItemsList){ 311 asrItem = new ASRItem(); 312 asrItem.setItemBarcode(asrItemBo.getItemBarcode()); 313 asrItem.setTitle(asrItemBo.getTitle()); 314 asrItem.setAuthor(asrItemBo.getAuthor()); 315 asrItem.setCallNumber(asrItemBo.getCallNumber()); 316 asrItemList.add(asrItem); 317 } 318 } 319 asrItems.setAsrItems(asrItemList); 320 if(asrItemList!=null && asrItemList.size()>0){ 321 dataObjectService.delete(asrItemsList); 322 } 323 return asrItems; 324 } 325 326 327 public Map<String, String> getItemFieldValue(String searchField, String searchFieldValue, List<String> resultFields) { 328 Map<String, String> resultMap = new HashMap<>(); 329 Map<String,String> searchParamsMap = new HashMap<String,String>(); 330 searchParamsMap.put(searchField,searchFieldValue); 331 SearchParams searchParams = buildSearchParams(searchParamsMap); 332 for(String resultField :resultFields) { 333 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("item", resultField)); 334 } 335 try { 336 337 SearchResponse searchResponse = getDocstoreClientLocator().getDocstoreClient().search(searchParams); 338 for(SearchResult searchResult : searchResponse.getSearchResults()){ 339 for(SearchResultField searchResultField : searchResult.getSearchResultFields()) { 340 if(searchResultField.getDocType().equalsIgnoreCase(DocType.ITEM.getCode())) { 341 for(String resultField : resultFields) { 342 if(searchResultField.getFieldName().equalsIgnoreCase(resultField)) { 343 resultMap.put(resultField, searchResultField.getFieldValue()); 344 } 345 } 346 } 347 } 348 } 349 }catch(Exception e){ 350 Log.error(e,e); 351 } 352 return resultMap; 353 } 354 355 public Map<String, String> getHoldingFieldValue(String searchField, String searchFieldValue, List<String> resultFields) { 356 Map<String, String> resultMap = new HashMap<>(); 357 Map<String,String> searchParamsMap = new HashMap<String,String>(); 358 searchParamsMap.put(searchField,searchFieldValue); 359 SearchParams searchParams = buildSearchParamsForHoldings(searchParamsMap); 360 for(String resultField :resultFields) { 361 searchParams.getSearchResultFields().add(searchParams.buildSearchResultField("holdings", resultField)); 362 } 363 try { 364 365 SearchResponse searchResponse = getDocstoreClientLocator().getDocstoreClient().search(searchParams); 366 for(SearchResult searchResult : searchResponse.getSearchResults()){ 367 for(SearchResultField searchResultField : searchResult.getSearchResultFields()) { 368 if(searchResultField.getDocType().equalsIgnoreCase(DocType.HOLDINGS.getCode())) { 369 for(String resultField : resultFields) { 370 if(searchResultField.getFieldName().equalsIgnoreCase(resultField)) { 371 resultMap.put(resultField, searchResultField.getFieldValue()); 372 } 373 } 374 } 375 } 376 } 377 }catch(Exception e){ 378 Log.error(e,e); 379 } 380 return resultMap; 381 } 382 383 384 public org.kuali.ole.docstore.common.document.Item getItem(String itemUUID){ 385 org.kuali.ole.docstore.common.document.Item item = null; 386 try { 387 item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(itemUUID); 388 } catch (Exception e) { 389 e.printStackTrace(); 390 } 391 return item; 392 } 393 394 public org.kuali.ole.docstore.common.document.Item getItemUsingBarcode(String barcode){ 395 org.kuali.ole.docstore.common.document.Item item = null; 396 List<String> searchList = new ArrayList<String>(); 397 searchList.add("id"); 398 Map<String,String> resultMap = getItemFieldValue("ItemBarcode_display", barcode, searchList); 399 String itemUUID = resultMap.get("id"); 400 if(itemUUID!=null){ 401 item = getItem(itemUUID); 402 } 403 return item; 404 } 405 406 public boolean isAnASRItem(String itemLocation) { 407 boolean asrItem = false; 408 String[] libraryArray = getParameter("ASR_LOCATIONS").split("[';']"); 409 for (String library : libraryArray) { 410 if (itemLocation != null) { 411 for (String location : itemLocation.split("['/']")) { 412 if (location.equals(library)) { 413 asrItem = true; 414 break; 415 } 416 } 417 } 418 } 419 return asrItem; 420 421 } 422 423 424 public List<ASRTypeRequest> getASRRequest(String searchParameter,String value){ 425 Map<String,String> requestMap = new HashMap<String,String>(); 426 requestMap.put(searchParameter,value); 427 List<ASRTypeRequest> asrTypeRequests = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 428 if(asrTypeRequests.size()>0){ 429 return asrTypeRequests; 430 } 431 return null; 432 } 433 434 public boolean updateRequestStatus(ASRTypeRequest asrTypeRequest,String holdId,String requestStatus){ 435 boolean updated = false; 436 Map<String,String> parameterMap = new HashMap<>(); 437 parameterMap.put("requestId",holdId); 438 List<OleDeliverRequestBo> oleDeliverRequestBoList = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(parameterMap).build()).getResults(); 439 if(oleDeliverRequestBoList!=null && oleDeliverRequestBoList.size()>0){ 440 OleDeliverRequestBo oleDeliverRequestBo = oleDeliverRequestBoList.get(0); 441 oleDeliverRequestBo.setRequestStatus(requestStatus); 442 dataObjectService.save(oleDeliverRequestBo); 443 List<ASRTypeRequest> asrTypeRequests; 444 if(asrTypeRequest == null){ 445 asrTypeRequests = getASRRequest("requestId", holdId); 446 if(asrTypeRequests!=null && asrTypeRequests.size()>0){ 447 asrTypeRequest = asrTypeRequests.get(0); 448 449 } else{ 450 return false; 451 } 452 } 453 asrTypeRequest.setRequestStatus(requestStatus); 454 ASRTypeRequest asrTypeRequest1=dataObjectService.save(asrTypeRequest); 455 if(asrTypeRequest1!=null){ 456 updated = true; 457 } 458 } 459 return updated; 460 } 461 462 public boolean updateItemStatus(String itemBarcode,String status){ 463 boolean updated = false; 464 Item items = null; 465 org.kuali.ole.docstore.common.document.Item item = getItemUsingBarcode(itemBarcode); 466 if(item!=null){ 467 String itemContent = item.getContent(); 468 if(itemContent!=null){ 469 ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor(); 470 items=itemOlemlRecordProcessor.fromXML(itemContent); 471 if(items!=null && items.getItemStatus()!=null){ 472 ItemStatus itemStatus = new ItemStatus(); 473 itemStatus.setCodeValue(status); 474 items.setItemStatus(itemStatus); 475 item.setContent(itemOlemlRecordProcessor.toXML(items)); 476 try{ 477 getDocstoreClientLocator().getDocstoreClient().updateItem(item); 478 updated=true; 479 } catch(Exception e){ 480 Log.error(e,e); 481 } 482 } 483 } 484 } 485 486 return updated; 487 } 488 489 public boolean updateItemStatusForInTransit(String itemBarcode,String status){ 490 boolean updated = false; 491 Item items = null; 492 org.kuali.ole.docstore.common.document.Item item = getItemUsingBarcode(itemBarcode); 493 if(item!=null){ 494 String itemContent = item.getContent(); 495 if(itemContent!=null){ 496 ItemOlemlRecordProcessor itemOlemlRecordProcessor = new ItemOlemlRecordProcessor(); 497 items=itemOlemlRecordProcessor.fromXML(itemContent); 498 if(items!=null && items.getItemStatus()!=null && items.getItemStatus().getCodeValue().equals(ASRConstants.IN_TRANSIT)){ 499 ItemStatus itemStatus = new ItemStatus(); 500 itemStatus.setCodeValue(status); 501 items.setItemStatus(itemStatus); 502 item.setContent(itemOlemlRecordProcessor.toXML(items)); 503 try{ 504 getDocstoreClientLocator().getDocstoreClient().updateItem(item); 505 updated=true; 506 } catch(Exception e){ 507 Log.error(e,e); 508 } 509 } 510 } 511 } 512 513 return updated; 514 } 515 516 public ASRRequests getASRRequest(List<ASRTypeRequest> asrRequestTypeList){ 517 ASRRequests asrRequests=new ASRRequests(); 518 List<ASRRequest> asrRequestList=new ArrayList<>(); 519 ASRRequest asrRequest=null; 520 for(ASRTypeRequest asrTypeRequest:asrRequestTypeList){ 521 asrRequest=new ASRRequest(); 522 asrRequest.setHoldId(asrTypeRequest.getRequestId()); 523 asrRequest.setItemBarcode(asrTypeRequest.getItemId()); 524 asrRequestList.add(asrRequest); 525 } 526 asrRequests.setAsrRequests(asrRequestList); 527 528 return asrRequests; 529 } 530 531 532 public ASRRequests getASRTypeRequest(String status){ 533 ASRRequests asrRequests = new ASRRequests(); 534 Map<String,String> requestMap = new HashMap<String,String>(); 535 requestMap.put("requestStatus",status); 536 List<ASRTypeRequest> requestsList = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 537 if(requestsList.size()>0){ 538 asrRequests = getASRRequest(requestsList); 539 } 540 return asrRequests; 541 542 } 543 544 545 public void deleteASRRequest(String itemBarcode){ 546 OleDeliverRequestDocumentHelperServiceImpl oleDeliverRequestDocumentHelperService = new OleDeliverRequestDocumentHelperServiceImpl(); 547 Map<String,String> requestMap = new HashMap<String,String>(); 548 requestMap.put("itemId",itemBarcode); 549 List<OleDeliverRequestBo> oleDeliverRequestBos = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 550 if(oleDeliverRequestBos.size()>0){ 551 for(OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBos){ 552 oleDeliverRequestDocumentHelperService.cancelDocument(oleDeliverRequestBo); 553 } 554 } 555 List<ASRTypeRequest> asrTypeRequests = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 556 dataObjectService.delete(asrTypeRequests); 557 558 } 559 560 561 public ASRRequestDetailBo generateASRDetailBo(OleDeliverRequestBo oleDeliverRequestBo){ 562 ASRRequestDetailBo asrRequestDetailBo = new ASRRequestDetailBo(); 563 asrRequestDetailBo.setRequestId(oleDeliverRequestBo.getRequestId()); 564 asrRequestDetailBo.setAvailable(false); 565 asrRequestDetailBo.setDateAvailable(""); 566 asrRequestDetailBo.setDateAvailableExpires(""); 567 asrRequestDetailBo.setDateExpires(oleDeliverRequestBo.getRequestExpiryDate().toString()); 568 if(oleDeliverRequestBo.getRecallDueDate()!=null) 569 asrRequestDetailBo.setDateRecalled(oleDeliverRequestBo.getRecallDueDate().toString()); 570 asrRequestDetailBo.setPatronId(oleDeliverRequestBo.getBorrowerBarcode()); 571 asrRequestDetailBo.setPickupLocation(oleDeliverRequestBo.getPickUpLocationCode()); 572 //asrRequestDetailBo.setRecallStatus(); 573 if(oleDeliverRequestBo.getBorrowerQueuePosition()!=null) 574 asrRequestDetailBo.setPriority(oleDeliverRequestBo.getBorrowerQueuePosition().toString()); 575 asrRequestDetailBo.setRequestType(oleDeliverRequestBo.getRequestTypeCode()); 576 asrRequestDetailBo.setRequestStatus(oleDeliverRequestBo.getRequestStatus()); 577 return asrRequestDetailBo; 578 } 579 580 581 public ASRRequestDetailsBo generateASRequestDetailsBo(List<OleDeliverRequestBo> oleDeliverRequestBos){ 582 ASRRequestDetailsBo asrRequestDetailsBo = new ASRRequestDetailsBo(); 583 List<ASRRequestDetailBo> asrRequestDetailBoList; 584 if(oleDeliverRequestBos.size()>0){ 585 asrRequestDetailBoList = new ArrayList<ASRRequestDetailBo>(); 586 for(OleDeliverRequestBo oleDeliverRequestBo : oleDeliverRequestBos){ 587 asrRequestDetailBoList.add(generateASRDetailBo(oleDeliverRequestBo)); 588 } 589 asrRequestDetailsBo.setAsrRequestDetailBos(asrRequestDetailBoList); 590 return asrRequestDetailsBo; 591 } 592 return null; 593 } 594 595 public ASRRequestDetailsBo getRequests(String itemBarcode){ 596 List<OleDeliverRequestBo> oleDeliverRequestBos =null; 597 Map<String,String> requestMap = new HashMap<String,String>(); 598 requestMap.put("itemId",itemBarcode); 599 List<ASRTypeRequest> asrTypeRequests = (List<ASRTypeRequest>)dataObjectService.findMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 600 if(asrTypeRequests.size()>0){ 601 oleDeliverRequestBos = new ArrayList<OleDeliverRequestBo>(); 602 for(ASRTypeRequest asrTypeRequest : asrTypeRequests){ 603 requestMap.put("itemId",asrTypeRequest.getItemId()); 604 List<OleDeliverRequestBo> oleDeliverRequestBos1 = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 605 if(oleDeliverRequestBos1.size()>0){ 606 oleDeliverRequestBos.addAll(oleDeliverRequestBos1); 607 break; 608 } 609 } 610 } 611 if(oleDeliverRequestBos!=null && oleDeliverRequestBos.size()>0){ 612 ASRRequestDetailsBo asrRequestDetailsBo = generateASRequestDetailsBo(oleDeliverRequestBos); 613 if(asrRequestDetailsBo !=null){ 614 return asrRequestDetailsBo; 615 } 616 } 617 return null; 618 } 619 620 public OleDeliverRequestBo getPrioritizedRequest(String itemBarcode){ 621 OleDeliverRequestBo oleDeliverRequestBo = null; 622 Map<String,String> requestMap = new HashMap<String,String>(); 623 requestMap.put("itemId",itemBarcode); 624 requestMap.put("borrowerQueuePosition","1"); 625 List<OleDeliverRequestBo> oleDeliverRequestBos = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 626 if(oleDeliverRequestBos.size()>0){ 627 oleDeliverRequestBo = oleDeliverRequestBos.get(0); 628 } 629 return oleDeliverRequestBo; 630 } 631 632 633 public boolean validateLocation(String operatorId,String itemLocation){ 634 boolean valid=false; 635 Map<String,String> circulationDeskDetailMap = new HashMap<String,String>(); 636 Map<String,String> circulationLocationMap = new HashMap<String,String>(); 637 circulationDeskDetailMap.put("operatorId",operatorId); 638 circulationDeskDetailMap.put("defaultLocation","true"); 639 List<OleCirculationDeskDetail> oleCirculationDeskDetails = (List<OleCirculationDeskDetail>)dataObjectService.findMatching(OleCirculationDeskDetail.class,QueryByCriteria.Builder.andAttributes(circulationDeskDetailMap).build()).getResults(); 640 if(oleCirculationDeskDetails.size()>0){ 641 circulationLocationMap.put("circulationDeskId",oleCirculationDeskDetails.get(0).getCirculationDeskId()); 642 List<OleCirculationDeskLocation> oleCirculationDeskLocations = (List<OleCirculationDeskLocation>)dataObjectService.findMatching(OleCirculationDeskLocation.class,QueryByCriteria.Builder.andAttributes(circulationLocationMap).build()).getResults(); 643 if(oleCirculationDeskLocations.size()>0){ 644 for(OleCirculationDeskLocation oleCirculationDeskLocation : oleCirculationDeskLocations){ 645 //for(String location:oleCirculationDeskLocation.getLocation().getFullLocationPath().split("['/']")){ 646 if(oleCirculationDeskLocation.getLocation().getFullLocationPath().equals(itemLocation)){ 647 valid = true; 648 break; 649 } 650 //} 651 /*if(oleCirculationDeskLocation.getLocation().getFullLocationPath().contains(itemLocation)){ 652 valid = true; 653 }*/ 654 } 655 } 656 } 657 return valid; 658 } 659 660 661 662 public boolean validPatron(String patronId){ 663 boolean valid=false; 664 Map<String,String> patronMap = new HashMap<String,String>(); 665 patronMap.put("olePatronId",patronId); 666 List<OlePatronDocument> olePatronDocuments = (List<OlePatronDocument>)dataObjectService.findMatching(OlePatronDocument.class,QueryByCriteria.Builder.andAttributes(patronMap).build()).getResults(); 667 if(olePatronDocuments!=null && olePatronDocuments.size()>0){ 668 valid=true; 669 } 670 return valid; 671 } 672 673 674 675 public boolean saveASRRequest(ASRRequestBo asrRequestBo){ 676 boolean saved = false; 677 ASRTypeRequest asrTypeRequest = new ASRTypeRequest(); 678 asrTypeRequest.setItemId(asrRequestBo.getItemBarcode()); 679 asrTypeRequest.setPatronId(asrRequestBo.getPatronBarcode()); 680 asrTypeRequest.setPickUpLocation(asrRequestBo.getPickupLocation()); 681 asrTypeRequest.setPatronName(asrRequestBo.getPatronName()); 682 ASRTypeRequest asrTypeRequest1 = dataObjectService.save(asrTypeRequest); 683 if(asrTypeRequest1!=null){ 684 saved =true; 685 } 686 return saved; 687 } 688 689 690 public boolean saveASRItem(ASRItem asrItem){ 691 boolean saved = false; 692 org.kuali.ole.deliver.bo.ASRItem asrItems = new org.kuali.ole.deliver.bo.ASRItem(); 693 asrItems.setItemBarcode(asrItem.getItemBarcode()); 694 asrItems.setCallNumber(asrItem.getCallNumber()); 695 asrItems.setAuthor(asrItem.getAuthor()); 696 asrItems.setTitle(asrItem.getTitle()); 697 698 org.kuali.ole.deliver.bo.ASRItem asrItem1 = dataObjectService.save(asrItems); 699 if(asrItem1!=null){ 700 saved = true; 701 } 702 return saved; 703 } 704 705 public List<OleDeliverRequestBo> getDeliverRequest(Map<String,String> requestMap){ 706 List<OleDeliverRequestBo> oleDeliverRequestBos = (List<OleDeliverRequestBo>)dataObjectService.findMatching(OleDeliverRequestBo.class,QueryByCriteria.Builder.andAttributes(requestMap).build()).getResults(); 707 if(oleDeliverRequestBos.size()>0){ 708 return oleDeliverRequestBos; 709 } 710 return null; 711 } 712 713 714 public void deleteASRTypeRequest(String requestId){ 715 Map<String,String> asrTypeMap = new HashMap<String,String>(); 716 asrTypeMap.put("requestId",requestId); 717 dataObjectService.deleteMatching(ASRTypeRequest.class,QueryByCriteria.Builder.andAttributes(asrTypeMap).build()); 718 } 719 720 public boolean isCirculationDesksLocation(String itemLocation,String circulationDeskId){ 721 boolean valid=false; 722 Map<String,String> circulationLocationMap = new HashMap<String,String>(); 723 circulationLocationMap.put("circulationDeskId",circulationDeskId); 724 List<OleCirculationDeskLocation> oleCirculationDeskLocations = (List<OleCirculationDeskLocation>)dataObjectService.findMatching(OleCirculationDeskLocation.class,QueryByCriteria.Builder.andAttributes(circulationLocationMap).build()).getResults(); 725 if(oleCirculationDeskLocations.size()>0){ 726 for(OleCirculationDeskLocation oleCirculationDeskLocation : oleCirculationDeskLocations){ 727 //for(String location:oleCirculationDeskLocation.getLocation().getFullLocationPath().split("['/']")){ 728 if(oleCirculationDeskLocation.getLocation().getFullLocationPath().equals(itemLocation)){ 729 valid = true; 730 break; 731 } 732 //} 733 /*if(oleCirculationDeskLocation.getLocation().getFullLocationPath().contains(itemLocation)){ 734 valid = true; 735 }*/ 736 } 737 } 738 return valid; 739 } 740 741 public String getLocation(String itemBarcode){ 742 List<String> resultList = new ArrayList<String>(); 743 resultList.add(ASRConstants.LOCATION_LEVEL_DISPLAY); 744 resultList.add("holdingsIdentifier"); 745 Map<String,String> resultMap = getItemFieldValue(ASRConstants.ITEM_BARCODE_DISPLAY,itemBarcode,resultList); 746 String location = resultMap.get(ASRConstants.LOCATION_LEVEL_DISPLAY); 747 if(location == null){ 748 String holdingsId = resultMap.get("holdingsIdentifier"); 749 resultList.clear(); 750 resultList.add(ASRConstants.LOCATION_LEVEL_DISPLAY); 751 Map<String,String> resultMap1 = getHoldingFieldValue("id",holdingsId, resultList); 752 location = resultMap1.get(ASRConstants.LOCATION_LEVEL_DISPLAY); 753 } 754 return location; 755 756 } 757 758 public SearchParams buildSearchParamsForHoldings(Map<String, String> queryParams) { 759 SearchParams searchParams = new SearchParams(); 760 List<SearchCondition> searchConditionList = new ArrayList<SearchCondition>(); 761 List<SearchCondition> searchConditions = new ArrayList<>(); 762 if (null != queryParams) { 763 for (Iterator<String> keys = queryParams.keySet().iterator(); keys.hasNext(); ) { 764 String key = keys.next(); 765 String value = queryParams.get(key); 766 if(org.apache.commons.lang.StringUtils.isNotEmpty(value)) { 767 //searchConditions.add(searchParams.buildSearchCondition("AND", searchParams.buildSearchField("item", key, value), "AND")); 768 searchParams.getSearchConditions().add(searchParams.buildSearchCondition("AND", searchParams.buildSearchField("holdings", key, value), "AND")); 769 } 770 } 771 } 772 return searchParams; 773 } 774 775 public ASRRequests getASRRequestBasedOnLocation(ASRRequests asrRequests,String location){ 776 List<ASRRequest> requestList = new ArrayList<ASRRequest>(); 777 if(asrRequests.getAsrRequests()!=null){ 778 for(ASRRequest asrRequest:asrRequests.getAsrRequests()){ 779 String itemBarcode = asrRequest.getItemBarcode(); 780 String itemLocation = getLocation(itemBarcode); 781 if(isLocationMatch(itemLocation,location)){ 782 requestList.add(asrRequest); 783 } 784 } 785 } 786 asrRequests.setAsrRequests(requestList); 787 return asrRequests; 788 789 790 } 791 792 public boolean isLocationMatch(String itemLocation,String asrLocation) { 793 boolean asrItem = false; 794 if(itemLocation!=null){ 795 String[] libraryArray = itemLocation.split("['/']"); 796 for (String library : libraryArray) { 797 if (asrLocation.equals(library)) { 798 asrItem = true; 799 } 800 } 801 } 802 803 804 return asrItem; 805 806 } 807 808 public boolean deleteAllASRItems(ASRItems asrItems){ 809 boolean isAllDeleted = false; 810 List<org.kuali.ole.deliver.bo.ASRItem> deleteList = new ArrayList<>(); 811 List<org.kuali.ole.deliver.bo.ASRItem> asrItemList = new ArrayList<>(); 812 asrItemList=(List<org.kuali.ole.deliver.bo.ASRItem>)getDataObjectService().findMatching(org.kuali.ole.deliver.bo.ASRItem.class, QueryByCriteria.Builder.create().build()).getResults(); 813 for(ASRItem asrItem:asrItems.getAsrItems()){ 814 for(org.kuali.ole.deliver.bo.ASRItem dlvrASRItem:asrItemList){ 815 if(dlvrASRItem.getItemBarcode() !=null && dlvrASRItem.getItemBarcode().equals(asrItem.getItemBarcode())){ 816 deleteList.add(dlvrASRItem); 817 break; 818 } 819 } 820 } 821 getDataObjectService().delete(deleteList); 822 isAllDeleted=true; 823 return isAllDeleted; 824 } 825 826 public boolean processOperator(String principalId) { 827 /*if (getPermissionService().hasPermission(oleDeliverRequestBo.getOperatorCreateId(), OLEConstants.OlePatron.PATRON_NAMESPACE, OLEConstants.CAN_LOAN)) { 828 return true; 829 }*/ 830 // Modified as per comments in Jira OLE-4901 831 boolean isOperator = true; 832 Collection<String> roles = getRoleService().getRoleMemberPrincipalIds(OLEConstants.OlePatron.PATRON_NAMESPACE, OLEConstants.OleDeliverRequest.REQUESTER_OPERATOR, null); 833 if (roles != null) { 834 isOperator = roles.contains(principalId); 835 } 836 return isOperator; 837 } 838 839 private RoleService getRoleService() { 840 RoleService service = KimApiServiceLocator.getRoleService(); 841 return service; 842 } 843 844 845}