1 package org.kuali.ole.deliver.service;
2
3 import org.apache.commons.lang3.StringUtils;
4 import org.apache.log4j.Logger;
5 import org.kuali.asr.service.ASRHelperServiceImpl;
6 import org.kuali.ole.OLEConstants;
7 import org.kuali.ole.OLEParameterConstants;
8 import org.kuali.ole.deliver.batch.OleMailer;
9 import org.kuali.ole.deliver.bo.*;
10 import org.kuali.ole.deliver.notice.util.NoticeUtil;
11 import org.kuali.ole.deliver.processor.LoanProcessor;
12 import org.kuali.ole.describe.bo.OleInstanceItemType;
13 import org.kuali.ole.describe.keyvalue.LocationValuesBuilder;
14 import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
15 import org.kuali.ole.docstore.common.document.ItemOleml;
16 import org.kuali.ole.docstore.common.document.content.instance.Item;
17 import org.kuali.ole.docstore.common.search.SearchResponse;
18 import org.kuali.ole.docstore.common.search.SearchResult;
19 import org.kuali.ole.docstore.common.search.SearchResultField;
20 import org.kuali.ole.sys.context.SpringContext;
21 import org.kuali.ole.util.DocstoreUtil;
22 import org.kuali.rice.core.api.config.property.ConfigContext;
23 import org.kuali.rice.core.api.mail.EmailBody;
24 import org.kuali.rice.core.api.mail.EmailFrom;
25 import org.kuali.rice.core.api.mail.EmailSubject;
26 import org.kuali.rice.core.api.mail.EmailTo;
27 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
28 import org.kuali.rice.kim.impl.identity.type.EntityTypeContactInfoBo;
29 import org.kuali.rice.krad.service.BusinessObjectService;
30 import org.kuali.rice.krad.service.KRADServiceLocator;
31 import org.kuali.rice.krad.util.GlobalVariables;
32 import org.kuali.rice.krad.util.KRADConstants;
33
34 import javax.sql.rowset.serial.SerialBlob;
35 import java.sql.Blob;
36 import java.sql.Timestamp;
37 import java.util.*;
38
39
40
41
42 public abstract class NoticesExecutor implements Runnable {
43
44 private static final Logger LOG = Logger.getLogger(NoticesExecutor.class);
45 private BusinessObjectService businessObjectService;
46 private ParameterValueResolver parameterResolverInstance;
47 private OleMailer oleMailer;
48 private CircDeskLocationResolver circDeskLocationResolver;
49 private DocstoreClientLocator docstoreClientLocator;
50 private DocstoreUtil docstoreUtil;
51 private NoticeUtil noticeUtil;
52
53 public DocstoreClientLocator getDocstoreClientLocator() {
54
55 if (docstoreClientLocator == null) {
56 docstoreClientLocator = (DocstoreClientLocator) SpringContext.getService("docstoreClientLocator");
57
58 }
59 return docstoreClientLocator;
60 }
61
62
63 public DocstoreUtil getDocstoreUtil() {
64 if (docstoreUtil == null) {
65 docstoreUtil = (DocstoreUtil)SpringContext.getService("docstoreUtil");
66 }
67 return docstoreUtil;
68 }
69 public ParameterValueResolver getParameterResolverInstance() {
70 if (null == parameterResolverInstance) {
71 parameterResolverInstance = ParameterValueResolver.getInstance();
72 }
73 return parameterResolverInstance;
74 }
75
76
77
78 public CircDeskLocationResolver getCircDeskLocationResolver() {
79 if (null == circDeskLocationResolver) {
80 circDeskLocationResolver = new CircDeskLocationResolver();
81 }
82 return circDeskLocationResolver;
83 }
84
85 public OleMailer getOleMailer() {
86 if (null == oleMailer) {
87 oleMailer = GlobalResourceLoader.getService("oleMailer");
88 }
89 return oleMailer;
90 }
91
92 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
93 this.businessObjectService = businessObjectService;
94 }
95
96 public BusinessObjectService getBusinessObjectService(){
97 return KRADServiceLocator.getBusinessObjectService();
98 }
99
100 public void setOleMailer(OleMailer oleMailer) {
101 this.oleMailer = oleMailer;
102 }
103
104 public NoticeUtil getNoticeUtil() {
105 if(noticeUtil == null){
106 noticeUtil = new NoticeUtil();
107 }
108 return noticeUtil;
109 }
110
111 public void setNoticeUtil(NoticeUtil noticeUtil) {
112 this.noticeUtil = noticeUtil;
113 }
114
115
116
117 @Override
118 public void run() {
119
120 }
121
122 public abstract void sendMail(String mailContent);
123
124 public void deleteNotices(List<OLEDeliverNotice> oleDeliverNotices) {
125 getBusinessObjectService().delete(oleDeliverNotices);
126 }
127
128 public List<OLEDeliverNoticeHistory> saveOLEDeliverNoticeHistory(List<OLEDeliverNotice> oleDeliverNotices, String mailContent) {
129 List<OLEDeliverNoticeHistory> oleDeliverNoticeHistoryList = new ArrayList<OLEDeliverNoticeHistory>();
130 for (OLEDeliverNotice oleDeliverNotice : oleDeliverNotices) {
131 OLEDeliverNoticeHistory oleDeliverNoticeHistory = new OLEDeliverNoticeHistory();
132 oleDeliverNoticeHistory.setLoanId(oleDeliverNotice.getLoanId());
133 oleDeliverNoticeHistory.setNoticeType(oleDeliverNotice.getNoticeType());
134 oleDeliverNoticeHistory.setNoticeSentDate(new Timestamp(new Date().getTime()));
135 oleDeliverNoticeHistory.setPatronId(oleDeliverNotice.getPatronId());
136 oleDeliverNoticeHistory.setNoticeSendType(oleDeliverNotice.getNoticeSendType());
137 oleDeliverNoticeHistory.setNoticeContent(mailContent.getBytes());
138 oleDeliverNoticeHistory.setRequestId(oleDeliverNotice.getRequestId());
139 oleDeliverNoticeHistoryList.add(oleDeliverNoticeHistory);
140 }
141 getBusinessObjectService().save(oleDeliverNoticeHistoryList);
142
143 return oleDeliverNoticeHistoryList;
144 }
145
146 public String getPatronHomeEmailId(EntityTypeContactInfoBo entityTypeContactInfoBo) throws Exception {
147 String emailId = "";
148 if (entityTypeContactInfoBo.getEmailAddresses() != null) {
149 for (int j = 0; j < entityTypeContactInfoBo.getEmailAddresses().size(); j++) {
150 if (entityTypeContactInfoBo.getEmailAddresses().get(j).getDefaultValue()) {
151 emailId = (entityTypeContactInfoBo.getEmailAddresses().get(j).getEmailAddress());
152 break;
153 }
154 }
155 }
156 return emailId;
157 }
158
159 public String sendMailsToPatron(String emailAddress, String noticeContent, String itemLocation) {
160 String fromAddress = getCircDeskLocationResolver().getReplyToEmail(itemLocation);
161
162 if (fromAddress == null) {
163 fromAddress = getParameterResolverInstance().getParameter(OLEConstants.APPL_ID, OLEConstants
164 .DLVR_NMSPC, OLEConstants.DLVR_CMPNT, OLEParameterConstants
165 .NOTICE_FROM_MAIL);
166 }
167 try {
168 if (fromAddress != null && (fromAddress.equals("") || fromAddress.trim().isEmpty())) {
169 fromAddress = OLEConstants.KUALI_MAIL;
170 }
171 if (emailAddress != null && !emailAddress.isEmpty()) {
172 noticeContent = noticeContent.replace('[', ' ');
173 noticeContent = noticeContent.replace(']', ' ');
174 if (!noticeContent.trim().equals("")) {
175 OleMailer oleMailer = getOleMailer();
176 oleMailer.sendEmail(new EmailFrom(fromAddress), new EmailTo(emailAddress), new EmailSubject(OLEConstants.NOTICE_MAIL), new EmailBody(noticeContent), true);
177 }
178 } else {
179 }
180 } catch (Exception e) {
181 }
182
183 return noticeContent;
184 }
185
186
187
188 public String getItemTypeCodeByName(String itemTypeName) {
189 String itemTypeCode = "";
190 List<OleInstanceItemType> instanceItemTypeList = null;
191 Map<String, String> instanceItemTypeMap = new HashMap<String, String>();
192 instanceItemTypeMap.put("instanceItemTypeName", itemTypeName);
193 instanceItemTypeList = (List<OleInstanceItemType>) getBusinessObjectService().findMatching(OleInstanceItemType.class, instanceItemTypeMap);
194 if (instanceItemTypeList != null && instanceItemTypeList.size() > 0) {
195 itemTypeCode = instanceItemTypeList.get(0).getInstanceItemTypeCode();
196 }
197 return itemTypeCode;
198 }
199
200 public Timestamp getSendToDate(String noticeToDate) {
201 String lostNoticeToDate;
202 lostNoticeToDate = getParameterResolverInstance().getParameter(OLEConstants
203 .APPL_ID_OLE, OLEConstants.DLVR_NMSPC, OLEConstants.DLVR_CMPNT, noticeToDate);
204 Timestamp lostNoticetoSendDate = new Timestamp(System.currentTimeMillis());
205 if (!StringUtils.isEmpty(lostNoticeToDate)) {
206 lostNoticetoSendDate = new Timestamp(new Date(lostNoticeToDate).getTime());
207 }
208 return lostNoticetoSendDate;
209 }
210
211
212 public boolean setItemInformations(OleDeliverRequestBo oleDeliverRequestBo) {
213 ASRHelperServiceImpl asrHelperService = new ASRHelperServiceImpl();
214 LOG.info("Inside isItemAvailableInDocStore");
215 boolean available = false;
216 Map<String, String> itemMap = new HashMap<String, String>();
217 LocationValuesBuilder locationValuesBuilder = new LocationValuesBuilder();
218 String holdingsId = "";
219 String bibTitle="";
220 String bibAuthor="";
221 try {
222 try {
223 org.kuali.ole.docstore.common.document.Item item = new ItemOleml();
224 org.kuali.ole.docstore.common.search.SearchParams search_Params = new org.kuali.ole.docstore.common.search.SearchParams();
225 SearchResponse searchResponse = null;
226 search_Params.getSearchConditions().add(search_Params.buildSearchCondition("phrase", search_Params.buildSearchField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), item.ITEM_BARCODE, oleDeliverRequestBo.getItemId()), ""));
227 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), "id"));
228 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), "holdingsIdentifier"));
229 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), "Title_display"));
230 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), "Author_display"));
231 searchResponse = getDocstoreClientLocator().getDocstoreClient().search(search_Params);
232 for (SearchResult searchResult : searchResponse.getSearchResults()) {
233 for (SearchResultField searchResultField : searchResult.getSearchResultFields()) {
234 String fieldName = searchResultField.getFieldName();
235 String fieldValue = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
236 if (fieldName.equalsIgnoreCase("holdingsIdentifier") && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode())) {
237 holdingsId = fieldValue;
238 } else if (searchResultField.getFieldName().equalsIgnoreCase("Title_display") &&!fieldValue.isEmpty()) {
239 bibTitle = searchResultField.getFieldValue();
240 } else if (searchResultField.getFieldName().equalsIgnoreCase("Author_display") &&!fieldValue.isEmpty()) {
241 bibAuthor = searchResultField.getFieldValue();
242 } else if (searchResultField.getFieldName().equalsIgnoreCase("id") &&!fieldValue.isEmpty()){
243 oleDeliverRequestBo.setItemUuid(fieldValue);
244 }
245 }
246 }
247 } catch (Exception ex) {
248 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, "Item Exists");
249 LOG.error(OLEConstants.ITEM_EXIST + ex);
250 }
251 OleItemSearch itemSearchList = getDocstoreUtil().getOleItemSearchList(oleDeliverRequestBo.getItemUuid());
252 if (asrHelperService.isAnASRItem(itemSearchList.getShelvingLocation())) {
253 oleDeliverRequestBo.setAsrFlag(true);
254 } else {
255 oleDeliverRequestBo.setAsrFlag(false);
256 }
257 if (itemSearchList != null) {
258 oleDeliverRequestBo.setTitle(itemSearchList.getTitle());
259 oleDeliverRequestBo.setAuthor(itemSearchList.getAuthor());
260 oleDeliverRequestBo.setCallNumber(itemSearchList.getCallNumber());
261 oleDeliverRequestBo.setItemType(itemSearchList.getItemType());
262 oleDeliverRequestBo.setItemLocation(itemSearchList.getShelvingLocation());
263 }
264 if(org.apache.commons.lang.StringUtils.isNotEmpty(bibTitle)){
265 oleDeliverRequestBo.setTitle(bibTitle);
266 }
267 if(org.apache.commons.lang.StringUtils.isNotEmpty(bibAuthor)){
268 oleDeliverRequestBo.setAuthor(bibAuthor);
269 }
270 LoanProcessor loanProcessor = new LoanProcessor();
271 String itemXml = loanProcessor.getItemXML(oleDeliverRequestBo.getItemUuid());
272 Item oleItem = loanProcessor.getItemPojo(itemXml);
273 oleDeliverRequestBo.setOleItem(oleItem);
274 oleDeliverRequestBo.setCopyNumber(oleItem.getCopyNumber());
275 oleDeliverRequestBo.setEnumeration(oleItem.getEnumeration());
276 oleDeliverRequestBo.setChronology(oleItem.getChronology());
277 oleDeliverRequestBo.setItemStatus(oleItem.getItemStatus().getCodeValue());
278 oleDeliverRequestBo.setClaimsReturnedFlag(oleItem.isClaimsReturnedFlag());
279 locationValuesBuilder.getLocation(oleItem, oleDeliverRequestBo, holdingsId);
280 available = true;
281 } catch (Exception e) {
282 LOG.error(ConfigContext.getCurrentContextConfig().getProperty(OLEConstants.INVAL_LOC) + e);
283 }
284 return available;
285 }
286
287
288 }