View Javadoc
1   package org.kuali.asr.service;
2   
3   import org.apache.log4j.Logger;
4   import org.jfree.util.Log;
5   import org.kuali.asr.ASRConstants;
6   import org.kuali.asr.bo.*;
7   import org.kuali.asr.bo.ASRItem;
8   import org.kuali.ole.OLEConstants;
9   import org.kuali.ole.deliver.batch.OleNoticeBo;
10  import org.kuali.ole.deliver.bo.*;
11  import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl;
12  import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
13  import org.kuali.ole.docstore.common.document.content.instance.Item;
14  import org.kuali.ole.docstore.common.document.content.instance.ItemStatus;
15  import org.kuali.ole.docstore.common.document.content.instance.xstream.ItemOlemlRecordProcessor;
16  import org.kuali.ole.docstore.common.search.*;
17  import org.kuali.ole.docstore.model.bo.WorkItemDocument;
18  import org.kuali.ole.docstore.model.enums.DocType;
19  import org.kuali.ole.sys.context.SpringContext;
20  import org.kuali.rice.core.api.criteria.QueryByCriteria;
21  import org.kuali.rice.coreservice.impl.parameter.ParameterBo;
22  import org.kuali.rice.kim.api.role.RoleService;
23  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
24  import org.kuali.rice.kns.service.KNSServiceLocator;
25  import org.kuali.rice.krad.bo.DataObjectBase;
26  import org.kuali.rice.krad.data.DataObjectService;
27  import org.kuali.rice.krad.service.BusinessObjectService;
28  import org.kuali.rice.krad.service.KRADServiceLocator;
29  
30  import java.text.SimpleDateFormat;
31  import java.util.*;
32  
33  /**
34   * Created with IntelliJ IDEA.
35   * User: sheiksalahudeenm
36   * Date: 1/8/14
37   * Time: 1:13 PM
38   * To change this template use File | Settings | File Templates.
39   */
40  
41  public class ASRHelperServiceImpl {
42      private static final Logger LOG = Logger.getLogger(ASRHelperServiceImpl.class);
43      private DataObjectService dataObjectService=getDataObjectService();
44      private DocstoreClientLocator docstoreClientLocator=getDocstoreClientLocator();
45  
46      public DocstoreClientLocator getDocstoreClientLocator() {
47          if (null == docstoreClientLocator) {
48              return SpringContext.getBean(DocstoreClientLocator.class);
49          }
50          return docstoreClientLocator;
51      }
52  
53      public DataObjectService getDataObjectService(){
54          if(dataObjectService == null){
55              dataObjectService = KRADServiceLocator.getDataObjectService();
56          }
57          return dataObjectService;
58      }
59  
60      //  private OLEASRPlaceRequestHelperServiceImpl oleasrPlaceReqestHelperService=new OLEASRPlaceRequestHelperServiceImpl();
61  
62  
63      public boolean isAuthorized(String principalId) {
64          /*PermissionService service = KimApiServiceLocator.getPermissionService();
65          return service.hasPermission(principalId, "OLE-PTRN", "Mapping Circulation Desk");*/
66          return processOperator(principalId);
67      }
68  
69  /*    public Object getAllASRItems() {
70          Map<String,String> parameterMap=new HashMap<>();
71          parameterMap.put("LocationLevel_search","ASR");
72          List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap));
73          System.out.println("docs-->" + workItemDocuments.size());
74          if(workItemDocuments==null || workItemDocuments.size()<=0)
75              return generateResponse(ASRConstants.ITEM_NOT_FOUND_CODE, ASRConstants.ITEM_NOT_FOUND,ASRConstants.ITEM_NOT_FOUND_STATUS);
76          return generateASRItems(workItemDocuments);
77      }*/
78  
79  /*    public boolean validateBarcode(String barcode) {
80          Map<String,String> parameterMap=new HashMap<>();
81          parameterMap.put("ItemBarcode_search",barcode);
82          List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap));
83          return (workItemDocuments!=null && workItemDocuments.size()>0);
84      }*/
85  /*
86      public boolean validateBarcode(String barcode,String location) {
87          Map<String,String> parameterMap=new HashMap<>();
88          parameterMap.put("ItemBarcode_search",barcode);
89          parameterMap.put("LocationLevel_search",location);
90          List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap));
91          return (workItemDocuments!=null && workItemDocuments.size()>0);
92      }*/
93  
94      /*    public  Object validateASRItem(String itemBarcode) {
95              List<SearchCondition> searchConditionList=new ArrayList<>();
96              Map<String,String> parameterMap=new HashMap<>();
97              parameterMap.put("ItemBarcode_search",itemBarcode);
98              List<WorkItemDocument> workItemDocuments = retriveItemFromDocstore(buildSearchParams(parameterMap));
99              //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 }