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
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 }