View Javadoc
1   package org.kuali.ole.ncip.service.impl;
2   
3   import org.apache.commons.lang.StringUtils;
4   import org.apache.log4j.Logger;
5   import org.kuali.asr.handler.CheckinItemResponseHandler;
6   import org.kuali.asr.handler.ResponseHandler;
7   import org.kuali.ole.OLEConstants;
8   import org.kuali.ole.deliver.bo.OleCirculationDesk;
9   import org.kuali.ole.deliver.drools.CheckedInItem;
10  import org.kuali.ole.deliver.drools.DroolsConstants;
11  import org.kuali.ole.deliver.drools.DroolsExchange;
12  import org.kuali.ole.deliver.form.OLEForm;
13  import org.kuali.ole.deliver.service.CircDeskLocationResolver;
14  import org.kuali.ole.deliver.util.DroolsResponse;
15  import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
16  import org.kuali.ole.bo.OLECheckInItem;
17  import org.kuali.ole.deliver.controller.checkin.CheckInAPIController;
18  import org.kuali.ole.sys.context.SpringContext;
19  import org.kuali.rice.core.api.config.property.ConfigContext;
20  
21  import java.util.Map;
22  
23  /**
24   * Created by chenchulakshmig on 8/27/15.
25   */
26  public abstract class CheckinItemService {
27  
28      private static final Logger LOG = Logger.getLogger(CheckinItemService.class);
29  
30      protected String responseFormatType;
31      protected String response;
32  
33      private ResponseHandler responseHandler;
34      private CircDeskLocationResolver circDeskLocationResolver;
35      private DocstoreClientLocator docstoreClientLocator;
36  
37      public ResponseHandler getResponseHandler() {
38          if (null == responseHandler) {
39              responseHandler = new CheckinItemResponseHandler();
40          }
41          return responseHandler;
42      }
43  
44      public void setResponseHandler(ResponseHandler responseHandler) {
45          this.responseHandler = responseHandler;
46      }
47  
48      public CircDeskLocationResolver getCircDeskLocationResolver() {
49          if (circDeskLocationResolver == null) {
50              circDeskLocationResolver = new CircDeskLocationResolver();
51          }
52          return circDeskLocationResolver;
53      }
54  
55      public void setCircDeskLocationResolver(CircDeskLocationResolver circDeskLocationResolver) {
56          this.circDeskLocationResolver = circDeskLocationResolver;
57      }
58  
59      public DocstoreClientLocator getDocstoreClientLocator() {
60          if (docstoreClientLocator == null) {
61              docstoreClientLocator = (DocstoreClientLocator) SpringContext.getService("docstoreClientLocator");
62          }
63          return docstoreClientLocator;
64      }
65  
66      public void setDocstoreClientLocator(DocstoreClientLocator docstoreClientLocator) {
67          this.docstoreClientLocator = docstoreClientLocator;
68      }
69  
70      public String checkinItem(Map checkinParameters) {
71  
72          CheckInAPIController checkInAPIController = new CheckInAPIController();
73  
74          OLECheckInItem oleCheckInItem = new OLECheckInItem();
75  
76          String operatorId = getOperatorId((String) checkinParameters.get("operatorId"));
77          String itemBarcode = (String) checkinParameters.get("itemBarcode");
78          responseFormatType = (String) checkinParameters.get("responseFormatType");
79          String deleteIndicator = (String) checkinParameters.get("deleteIndicator");
80          if (responseFormatType == null) {
81              responseFormatType = "xml";
82          }
83          responseFormatType = responseFormatType.toUpperCase();
84  
85          OleCirculationDesk oleCirculationDesk = getCircDeskLocationResolver().getCircDeskForOpertorId(operatorId);
86          if (null == oleCirculationDesk) {
87              oleCheckInItem.setCode("026");
88              oleCheckInItem.setMessage(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.CIRCULATION_DESK_NOT_MAPPED_OPERATOR));
89              return prepareResponse(oleCheckInItem);
90          }
91  
92          if (StringUtils.isBlank(itemBarcode)) {
93              oleCheckInItem.setCode("900");
94              oleCheckInItem.setMessage(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.ITEM_BARCODE_REQUIRED));
95              return prepareResponse(oleCheckInItem);
96          }
97  
98          DroolsExchange droolsExchange = new DroolsExchange();
99          droolsExchange.addToContext("itemBarcode", itemBarcode);
100         droolsExchange.addToContext("selectedCirculationDesk", oleCirculationDesk.getCirculationDeskId());
101         droolsExchange.addToContext("operatorId", operatorId);
102         OLEForm oleAPIForm = new OLEForm();
103         oleAPIForm.setDroolsExchange(droolsExchange);
104 
105         try {
106             DroolsResponse droolsResponse = checkInAPIController.checkin(oleAPIForm);
107             if (droolsResponse != null && StringUtils.isNotBlank(droolsResponse.getErrorMessage().getErrorMessage())) {
108                 String checkinErrorMessage = droolsResponse.getErrorMessage().getErrorMessage();
109                 String responseMessage = null;
110                 if (droolsResponse.retriveErrorCode() != null) {
111                     if (droolsResponse.retriveErrorCode().equalsIgnoreCase(DroolsConstants.ITEM_CLAIMS_RETURNED)) {
112                         responseMessage = "Item is Claims Returned";
113                     } else if (droolsResponse.retriveErrorCode().equalsIgnoreCase(DroolsConstants.ITEM_MISSING_PIECE)) {
114                         responseMessage = "Item has missing pieces";
115                     } else if (droolsResponse.retriveErrorCode().equalsIgnoreCase(DroolsConstants.ITEM_DAMAGED)) {
116                         responseMessage = "Item is Damaged.";
117                     } else if (droolsResponse.retriveErrorCode().equalsIgnoreCase(DroolsConstants.CHECKIN_REQUEST_EXITS_FOR_THIS_ITEM)) {
118                         responseMessage = "Requests exists for this item";
119                     }
120                 }
121                 if (StringUtils.isNotBlank(responseMessage)) {
122                     oleCheckInItem.setCode("500");
123                     oleCheckInItem.setMessage(responseMessage);
124                     return prepareResponse(oleCheckInItem);
125                 } else if (checkinErrorMessage.equalsIgnoreCase("Invalid item barcode!")) {
126                     oleCheckInItem.setCode("014");
127                     oleCheckInItem.setMessage(checkinErrorMessage);
128                     return prepareResponse(oleCheckInItem);
129                 }
130                 oleCheckInItem.setCode("500");
131                 oleCheckInItem.setMessage(checkinErrorMessage);
132                 return prepareResponse(oleCheckInItem);
133             } else {
134                 CheckedInItem checkedInItem = (CheckedInItem) droolsExchange.getFromContext("checkedInItem");
135                 if (checkedInItem != null) {
136                     oleCheckInItem.setAuthor(checkedInItem.getAuthor());
137                     oleCheckInItem.setTitle(checkedInItem.getTitle());
138                     oleCheckInItem.setCallNumber(checkedInItem.getCallNumber());
139                     oleCheckInItem.setBarcode(checkedInItem.getItemBarcode());
140                     oleCheckInItem.setUserId(checkedInItem.getPatronId());
141                     oleCheckInItem.setUserType(checkedInItem.getBorrowerType());
142                     oleCheckInItem.setItemType(checkedInItem.getItemType());
143                     oleCheckInItem.setCode("024");
144                     oleCheckInItem.setMessage(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.SUCCESSFULLEY_CHECKED_IN));
145 
146                     if (StringUtils.isNotBlank(deleteIndicator) && deleteIndicator.equalsIgnoreCase("y")) {
147                         try {
148                             org.kuali.ole.docstore.common.document.Item item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(checkedInItem.getItemUuid());
149                             String bibId = item.getHolding().getBib().getId();
150                             getDocstoreClientLocator().getDocstoreClient().deleteBib(bibId);
151                         } catch (Exception e) {
152                             LOG.error("Exception while deleting bib" + e);
153                             oleCheckInItem.setMessage("Item " + ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.SUCCESSFULLEY_CHECKED_IN) + " but Deletion is failed");
154                             return prepareResponse(oleCheckInItem);
155                         }
156                     }
157                     return prepareResponse(oleCheckInItem);
158                 } else {
159                     oleCheckInItem.setCode("025");
160                     oleCheckInItem.setMessage(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.CHECK_IN_FAILED));
161                     return prepareResponse(oleCheckInItem);
162                 }
163             }
164         } catch (Exception e) {
165             LOG.error("Exception " + e);
166             oleCheckInItem.setCode("025");
167             oleCheckInItem.setMessage(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.CHECK_IN_FAILED));
168             return prepareResponse(oleCheckInItem);
169         }
170     }
171 
172     public abstract String prepareResponse(OLECheckInItem oleCheckInItem);
173 
174     public abstract String getOperatorId(String operatorId);
175 }