View Javadoc
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   * Created by pvsubrah on 4/8/15.
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 }