View Javadoc
1   package org.kuali.ole.deliver.batch;
2   
3   
4   import com.itextpdf.text.*;
5   import com.itextpdf.text.pdf.BaseFont;
6   import com.itextpdf.text.pdf.PdfPCell;
7   import com.itextpdf.text.pdf.PdfPTable;
8   import com.itextpdf.text.pdf.PdfWriter;
9   import org.apache.commons.lang3.StringUtils;
10  import org.apache.log4j.Logger;
11  import org.kuali.ole.OLEConstants;
12  import org.kuali.ole.OLEParameterConstants;
13  import org.kuali.ole.deliver.bo.*;
14  import org.kuali.ole.deliver.processor.LoanProcessor;
15  import org.kuali.ole.deliver.service.OleDeliverRequestDocumentHelperServiceImpl;
16  import org.kuali.ole.describe.bo.OleLocation;
17  import org.kuali.ole.docstore.common.client.DocstoreClientLocator;
18  import org.kuali.ole.sys.context.SpringContext;
19  import org.kuali.rice.core.api.config.property.ConfigContext;
20  import org.kuali.rice.core.api.util.RiceConstants;
21  import org.kuali.rice.core.web.format.CurrencyFormatter;
22  import org.kuali.rice.kim.impl.identity.type.EntityTypeContactInfoBo;
23  import org.kuali.rice.krad.service.BusinessObjectService;
24  import org.kuali.rice.krad.service.KRADServiceLocator;
25  import org.springframework.core.io.ClassPathResource;
26  import org.springframework.core.io.Resource;
27  
28  import javax.servlet.http.HttpServletResponse;
29  import java.io.File;
30  import java.io.FileOutputStream;
31  import java.io.OutputStream;
32  import java.text.SimpleDateFormat;
33  import java.util.*;
34  import java.util.List;
35  
36  /**
37   * Created with IntelliJ IDEA.
38   * User: ?
39   * Date: 12/31/12
40   * Time: 5:30 PM
41   * To change this template use File | Settings | File Templates.
42   */
43  public class OleDeliverBatchServiceImpl {
44  
45      private LoanProcessor loanProcessor;
46      private DocstoreClientLocator docstoreClientLocator;
47      private OutputStream overdueOutPutStream=null;
48      private Document overdueDocument=null;
49  
50      public DocstoreClientLocator getDocstoreClientLocator() {
51  
52          if (docstoreClientLocator == null) {
53              docstoreClientLocator = SpringContext.getBean(DocstoreClientLocator.class);
54  
55          }
56          return docstoreClientLocator;
57      }
58  
59  
60      public void setDocstoreClientLocator(DocstoreClientLocator docstoreClientLocator) {
61          this.docstoreClientLocator = docstoreClientLocator;
62      }
63  
64      public void setLoanProcessor(LoanProcessor loanProcessor) {
65          this.loanProcessor = loanProcessor;
66      }
67  
68      private static final Logger LOG = Logger.getLogger(OleDeliverBatchServiceImpl.class);
69  
70      /**
71       * This method initiate LoanProcessor.
72       *
73       * @return LoanProcessor
74       */
75      private LoanProcessor getLoanProcessor() {
76          if (loanProcessor == null) {
77              loanProcessor = SpringContext.getBean(LoanProcessor.class);
78          }
79          return loanProcessor;
80      }
81  
82      public OutputStream getOverdueOutPutStream() {
83          return overdueOutPutStream;
84      }
85  
86      public void setOverdueOutPutStream(OutputStream overdueOutPutStream) {
87          this.overdueOutPutStream = overdueOutPutStream;
88      }
89  
90      public Document getOverdueDocument() {
91          if(this.overdueDocument==null){
92              this.overdueDocument=new Document(PageSize.A4);
93          }
94          return overdueDocument;
95      }
96  
97      public void setOverdueDocument(Document overdueDocument) {
98          this.overdueDocument = overdueDocument;
99      }
100 
101     private void getHTMLHeader(StringBuffer stringBuffer, String title) throws Exception {
102         stringBuffer.append("<HTML>");
103         stringBuffer.append("<TITLE>" + title + "</TITLE>");
104         stringBuffer.append("<HEAD></HEAD>");
105         stringBuffer.append("<BODY>");
106     }
107 
108     private void getTemplateHeader(OleNoticeBo noticeBo, StringBuffer stringBuffer) throws Exception {
109 
110         stringBuffer.append("<TABLE></BR></BR>");
111         stringBuffer.append("<TR><TD>Patron Name :</TD><TD>" + noticeBo.getPatronName() + "</TD></TR>");
112         stringBuffer.append("<TR><TD>Address :</TD><TD>" + noticeBo.getPatronAddress() + "</TD></TR>");
113         stringBuffer.append("<TR><TD>EMAIL :</TD><TD>" + noticeBo.getPatronEmailAddress() + "</TD></TR>");
114         stringBuffer.append("<TR><TD>Phone Number :</TD><TD>" + ( noticeBo.getPatronPhoneNumber()!=null ? noticeBo.getPatronPhoneNumber() : "") + "</TD></TR>");
115         stringBuffer.append("</TABLE>");
116     }
117 
118     private void getTemplateBody(StringBuffer stringBuffer, String title, String body) throws Exception {
119         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
120         stringBuffer.append("<TABLE width=\"100%\">");
121         stringBuffer.append("<TR><TD><CENTER>" + title + "</CENTER></TD></TR>");
122         stringBuffer.append("<TR><TD><p>" + body + "</p></TD></TR>");
123         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR></TABLE>");
124     }
125 
126     public BusinessObjectService getBusinessObjectService() {
127         BusinessObjectService businessObjectService = KRADServiceLocator.getBusinessObjectService();
128         return businessObjectService;
129     }
130 
131     private String itemShelvingLocationName(String code) {
132         Map<String, String> criteria = new HashMap<String, String>();
133         criteria.put("locationCode", code);
134         List<OleLocation> oleLocation = (List<OleLocation>) getBusinessObjectService().findMatching(OleLocation.class, criteria);
135 
136         return oleLocation.size() == 1 ? oleLocation.get(0).getLocationName() : "";
137     }
138 
139     private void getTemplateFooter(OleNoticeBo noticeBo, StringBuffer stringBuffer) throws Exception {
140         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
141         stringBuffer.append("<table>");
142         if (!(noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_RECALL) || noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.CANCELLATION_NOTICE))) {
143             stringBuffer.append("<TR><TD>Circulation Location/Library Name :</TD><TD>" + (noticeBo.getCirculationDeskName() != null ? noticeBo.getCirculationDeskName() : "") + "</TD></TR>");
144         }
145         stringBuffer.append("<TR><TD>Title :</TD><TD>" + (noticeBo.getTitle()!=null ? noticeBo.getTitle() : "") + "</TD></TR>");
146         stringBuffer.append("<TR><TD>Author :</TD><TD>" + (noticeBo.getAuthor()!=null ? noticeBo.getAuthor() : "") + "</TD></TR>");
147         if (!noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.CANCELLATION_NOTICE)){
148             stringBuffer.append("<TR><TD>Volume/Issue/Copy Number :</TD><TD>" + (noticeBo.getVolumeIssueCopyNumber()!=null ? noticeBo.getVolumeIssueCopyNumber() : "") + "</TD></TR>");
149         }
150         stringBuffer.append("<TR><TD>Library shelving location :</TD><TD>" + (itemShelvingLocationName(noticeBo.getItemShelvingLocation())!=null ? itemShelvingLocationName(noticeBo.getItemShelvingLocation()) : "" )+ "</TD></TR>");
151 
152         stringBuffer.append("<TR><TD>Call Number :</TD><TD>" +(noticeBo.getItemCallNumber()!=null ? noticeBo.getItemCallNumber() : "") + "</TD></TR>");
153         stringBuffer.append("<TR><TD>Item Barcode :</TD><TD>" +(noticeBo.getItemId()!=null ? noticeBo.getItemId() : "") + "</TD></TR>");
154         if (noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)) {
155             stringBuffer.append("<TR><TD>Item was due :</TD><TD>" +( noticeBo.getDueDate()!=null ? sdf.format(noticeBo.getDueDate()).toString() : "" )+ "</TD></TR>");
156         }
157         if (noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_RECALL)) {
158             stringBuffer.append("<TR><TD>Original due date:</TD><TD>" + (noticeBo.getOriginalDueDate()!=null ? sdf.format(noticeBo.getOriginalDueDate()) : "") + "</TD></TR>");
159             stringBuffer.append("<TR><TD>New due date:</TD><TD>" + (noticeBo.getNewDueDate()!=null ? sdf.format(noticeBo.getNewDueDate()) : "") + "</TD></TR>");
160         }
161         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
162         stringBuffer.append("</table>");
163     }
164 
165     private void getTemplateFooterList(List<OleNoticeBo> noticeBoList, StringBuffer stringBuffer) throws Exception {
166         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
167         for (int courtesy = 0; courtesy < noticeBoList.size(); courtesy++) {
168             stringBuffer.append("<table>");
169             if (courtesy == 0) {
170                 stringBuffer.append("<TR><TD>Title/item information</TD></TR>");
171                 stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
172             }
173             stringBuffer.append("<TR><TD>Title :</TD><TD>" + (noticeBoList.get(courtesy).getTitle() != null ? noticeBoList.get(courtesy).getTitle() : "") + "</TD></TR>");
174             stringBuffer.append("<TR><TD>Author :</TD><TD>" + (noticeBoList.get(courtesy).getAuthor() != null ? noticeBoList.get(courtesy).getAuthor() : "") + "</TD></TR>");
175             if (!noticeBoList.get(courtesy).getNoticeName().equalsIgnoreCase(OLEConstants.CANCELLATION_NOTICE)) {
176                 stringBuffer.append("<TR><TD>Volume/Issue/Copy Number :</TD><TD>" + (noticeBoList.get(courtesy).getVolumeIssueCopyNumber() != null ? noticeBoList.get(courtesy).getVolumeIssueCopyNumber() : "") + "</TD></TR>");
177             }
178             if (noticeBoList.get(courtesy).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)) {
179                 stringBuffer.append("<TR><TD>Item was due :</TD><TD>" + (noticeBoList.get(courtesy).getDueDate() != null ? sdf.format(noticeBoList.get(courtesy).getDueDate()).toString() : "") + "</TD></TR>");
180             }
181             stringBuffer.append("<TR><TD>Library shelving location :</TD><TD>" + (itemShelvingLocationName(noticeBoList.get(courtesy).getItemShelvingLocation()) != null ? itemShelvingLocationName(noticeBoList.get(courtesy).getItemShelvingLocation()) : "") + "</TD></TR>");
182             stringBuffer.append("<TR><TD>Call Number :</TD><TD>" + (noticeBoList.get(courtesy).getItemCallNumber() != null ? noticeBoList.get(courtesy).getItemCallNumber() : "") + "</TD></TR>");
183             stringBuffer.append("<TR><TD>Item Barcode :</TD><TD>" + (noticeBoList.get(courtesy).getItemId() != null ? noticeBoList.get(courtesy).getItemId() : "") + "</TD></TR>");
184             stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
185             stringBuffer.append("</table>");
186         }
187     }
188 
189 
190     private void getPickUpLocationTemplate(OleNoticeBo noticeBo, StringBuffer stringBuffer) throws Exception {
191         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
192         stringBuffer.append("<table>");
193         stringBuffer.append("<TR><TD>Pick up location :</TD><TD></TD></TR>");
194         if (!noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_RECALL)) {
195             stringBuffer.append("<TR><TD>Circulation Location/Library Name :</TD><TD>" + (noticeBo.getCirculationDeskName() != null ? noticeBo.getCirculationDeskName() : "") + "</TD></TR>");
196         }
197         stringBuffer.append("<TR><TD>Address :</TD><TD>" + (noticeBo.getCirculationDeskAddress()!=null ? noticeBo.getCirculationDeskAddress() : "" )+ "</TD></TR>");
198         stringBuffer.append("<TR><TD>Email :</TD><TD>" + (noticeBo.getCirculationDeskEmailAddress()!=null ? noticeBo.getCirculationDeskEmailAddress() : "" )+ "</TD></TR>");
199         stringBuffer.append("<TR><TD>Phone Number :</TD><TD>" +( noticeBo.getCirculationDeskPhoneNumber()!=null ? noticeBo.getCirculationDeskPhoneNumber() : "") + "</TD></TR>");
200         if (noticeBo.getNoticeName() != null && noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_ONHOLD)) {
201             SimpleDateFormat dateFormat = new SimpleDateFormat(OLEConstants.DATEFORMAT);
202             if(noticeBo.getExpiredOnHoldDate() != null){
203                 String dateAfterFormat=dateFormat.format(noticeBo.getExpiredOnHoldDate());
204                 stringBuffer.append("<TR><TD>Item will be held until</TD><TD>" + dateAfterFormat + "</TD></TR>");
205             }
206 
207         } else {
208             stringBuffer.append("<TR><TD>Item will be held until</TD><TD>" +( noticeBo.getDueDate()!=null ?sdf.format( noticeBo.getDueDate()).toString() : "") + "</TD></TR>");
209         }
210         stringBuffer.append("</table>");
211     }
212 
213     private void getHTMLFooter(StringBuffer stringBuffer) throws Exception {
214         String url = ConfigContext.getCurrentContextConfig().getProperty("ole.fs.url.base");
215        String myAccountURL = loanProcessor.getParameter(OLEConstants.MY_ACCOUNT_URL);
216         if(myAccountURL!=null && !myAccountURL.trim().isEmpty()){
217         stringBuffer.append("<TABLE width=\"100%\"><TR><TD><CENTER><a href = "+myAccountURL+">"+"My Account"+"</a></CENTER></TD></TR></TABLE>");
218         }
219         stringBuffer.append("</TABLE></BODY></HTML>");
220         if (LOG.isDebugEnabled()){
221             LOG.debug("MAIL HTML CONTENT : "+stringBuffer.toString());
222         }
223     }
224 
225     private Map getSMSTemplate(List<OleNoticeBo> noticeBo) throws Exception {
226         List<OleNoticeBo> overDueNoticeList = new ArrayList<OleNoticeBo>();
227         List<OleNoticeBo> onHoldNoticeList = new ArrayList<OleNoticeBo>();
228         List<OleNoticeBo> recallNoticeList = new ArrayList<OleNoticeBo>();
229         List<OleNoticeBo> expiredNoticeList = new ArrayList<OleNoticeBo>();
230         List<OleNoticeBo> expiredRequiredNoticeList = new ArrayList<OleNoticeBo>();
231         Map smsMap = new HashMap();
232         for (int temp = 0; temp < noticeBo.size(); temp++) {
233             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)) {
234                 overDueNoticeList.add(noticeBo.get(temp));
235             }
236             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_ONHOLD)) {
237                 onHoldNoticeList.add(noticeBo.get(temp));
238             }
239             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.OleDeliverRequest.RECALL)) {
240                 recallNoticeList.add(noticeBo.get(temp));
241             }
242             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_HOLD_COURTESY)) {
243                 expiredNoticeList.add(noticeBo.get(temp));
244             }
245             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.OleDeliverRequest.EXPIRED_REQUEST)) {
246                 expiredRequiredNoticeList.add(noticeBo.get(temp));
247             }
248         }
249         Map overdue = new HashMap();
250         if (overDueNoticeList != null && overDueNoticeList.size() > 0) {
251             overdue = getOverDueList(overdue, overDueNoticeList);
252         }
253         Map hod = new HashMap();
254         if (onHoldNoticeList != null && onHoldNoticeList.size() > 0) {
255             hod = getHoldList(hod, onHoldNoticeList);
256         }
257         Map recl = new HashMap();
258         if (recallNoticeList != null && recallNoticeList.size() > 0) {
259             recl = getRecallList(recl, recallNoticeList);
260         }
261         Map exp = new HashMap();
262         if (expiredNoticeList != null && expiredNoticeList.size() > 0) {
263             exp = getExpiredList(exp, expiredNoticeList);
264         }
265         Map expReq = new HashMap();
266         if (expiredRequiredNoticeList != null && expiredRequiredNoticeList.size() > 0) {
267             expReq = getExpiredRequiredList(expReq, expiredRequiredNoticeList);
268         }
269 
270         smsMap.put("OVERDUE", overdue);
271         smsMap.put("HOLD", hod);
272         smsMap.put("RECALL", recl);
273         smsMap.put("EXPIRED", exp);
274         smsMap.put("EXPIREDREQ", expReq);
275         return smsMap;
276     }
277 
278     private Map getExpiredRequiredList(Map expReq, List expiredRequiredNoticeList) throws Exception {
279         String smsExpiredReq = "";
280         LoanProcessor loanProcessor = getLoanProcessor();
281         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
282         for (int exReq = 0; exReq < expiredRequiredNoticeList.size(); exReq++) {
283             OleNoticeBo oleNoticeBo = (OleNoticeBo) expiredRequiredNoticeList.get(exReq);
284             smsExpiredReq = loanProcessor.getParameter("EXP_REQ_TITLE") + "    " + "Circulation Location/Library Name :" + oleNoticeBo.getCirculationDeskName() + ",Address :" + oleNoticeBo.getCirculationDeskAddress() + ",Title :" + oleNoticeBo.getTitle() + ",Call Number :" + oleNoticeBo.getItemCallNumber() + ",Item was due :" + sdf.format(oleNoticeBo.getDueDate()).toString();
285             expReq.put(exReq, smsExpiredReq);
286         }
287         return expReq;
288     }
289 
290     private Map getExpiredList(Map expire, List expiredNoticeList) throws Exception {
291         String smsExpire = "";
292         LoanProcessor loanProcessor = getLoanProcessor();
293         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
294         for (int exp = 0; exp < expiredNoticeList.size(); exp++) {
295             OleNoticeBo oleNoticeBo = (OleNoticeBo) expiredNoticeList.get(exp);
296             smsExpire = loanProcessor.getParameter(OLEParameterConstants.EXPIRED_TITLE) + "    " + "Circulation Location/Library Name :" + oleNoticeBo.getCirculationDeskName() + ",Address :" + oleNoticeBo.getCirculationDeskAddress() + ",Title :" + oleNoticeBo.getTitle() + ",Call Number :" + oleNoticeBo.getItemCallNumber() + ",Item was due :" + sdf.format(oleNoticeBo.getDueDate()).toString();
297             expire.put(exp, smsExpire);
298         }
299         return expire;
300     }
301 
302     private Map getRecallList(Map rcall, List recallNoticeList) throws Exception {
303         String smsRecall = "";
304         LoanProcessor loanProcessor = getLoanProcessor();
305         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
306         for (int recall = 0; recall < recallNoticeList.size(); recall++) {
307             OleNoticeBo oleNoticeBo = (OleNoticeBo) recallNoticeList.get(recall);
308             smsRecall = loanProcessor.getParameter(OLEParameterConstants.RECALL_TITLE) + "    " + "Circulation Location/Library Name :" + oleNoticeBo.getCirculationDeskName() + ",Address :" + oleNoticeBo.getCirculationDeskAddress() + ",Title :" + oleNoticeBo.getTitle() + ",Call Number :" + oleNoticeBo.getItemCallNumber() + ",Original due date :" + sdf.format(oleNoticeBo.getDueDate()).toString() + ",New due date: " + sdf.format(oleNoticeBo.getNewDueDate());
309             rcall.put(recall, smsRecall);
310         }
311         return rcall;
312     }
313 
314     private Map getHoldList(Map hod, List onHoldNoticeList) throws Exception {
315         String smsHod = "";
316         LoanProcessor loanProcessor = getLoanProcessor();
317         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
318         for (int hold = 0; hold < onHoldNoticeList.size(); hold++) {
319             OleNoticeBo oleNoticeBo = (OleNoticeBo) onHoldNoticeList.get(hold);
320             smsHod = loanProcessor.getParameter(OLEParameterConstants.ONHOLD_TITLE) + "    " + "Circulation Location/Library Name :" + oleNoticeBo.getCirculationDeskName() + ",Address :" + oleNoticeBo.getCirculationDeskAddress() + ",Title :" + oleNoticeBo.getTitle() + ",Call Number :" + oleNoticeBo.getItemCallNumber() + ",Item will be held until :" + sdf.format(oleNoticeBo.getDueDate()).toString() + ",Pick up location:" + oleNoticeBo.getCirculationDeskName() + ",Pick up location Address :" + oleNoticeBo.getCirculationDeskAddress();
321             hod.put(hold, smsHod);
322         }
323         return hod;
324     }
325 
326 
327     private Map getOverDueList(Map overdue, List overDueNoticeList) throws Exception {
328         String smsDue = "";
329         LoanProcessor loanProcessor = getLoanProcessor();
330         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
331         for (int due = 0; due < overDueNoticeList.size(); due++) {
332             OleNoticeBo oleNoticeBo = (OleNoticeBo) overDueNoticeList.get(due);
333             smsDue = loanProcessor.getParameter(OLEParameterConstants.OVERDUE_TITLE) + "    " + "Circulation Location/Library Name :" + oleNoticeBo.getCirculationDeskName() + ",Address :" + oleNoticeBo.getCirculationDeskAddress() + ",Title :" + oleNoticeBo.getTitle() + ",Call Number :" + oleNoticeBo.getItemCallNumber() + ",Item was due :" + sdf.format(oleNoticeBo.getDueDate()).toString();
334             overdue.put(due, smsDue);
335         }
336 
337         return overdue;
338     }
339 
340     private List getTemplate(List<OleNoticeBo> noticeBo) throws Exception {
341         StringBuffer stringBuffer = new StringBuffer();
342 
343         List templateForNoticeList = new ArrayList();
344         List<OleNoticeBo> overDueNoticeList = new ArrayList<OleNoticeBo>();
345         List<OleNoticeBo> onHoldNoticeList = new ArrayList<OleNoticeBo>();
346         List<OleNoticeBo> recallNoticeList = new ArrayList<OleNoticeBo>();
347         List<OleNoticeBo> expiredNoticeList = new ArrayList<OleNoticeBo>();
348         List<OleNoticeBo> expiredRequiredNoticeList = new ArrayList<OleNoticeBo>();
349         List<OleNoticeBo> courtesyNoticeList = new ArrayList<OleNoticeBo>();
350         List<OleNoticeBo> cancellationNoticeList = new ArrayList<OleNoticeBo>();
351 
352         for (int temp = 0; temp < noticeBo.size(); temp++) {
353             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)) {
354                 overDueNoticeList.add(noticeBo.get(temp));
355             }
356             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_ONHOLD)) {
357                 onHoldNoticeList.add(noticeBo.get(temp));
358             }
359             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase("RecallNotice")) {
360                 recallNoticeList.add(noticeBo.get(temp));
361             }
362             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_HOLD_COURTESY)) {
363                 expiredNoticeList.add(noticeBo.get(temp));
364             }
365             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.OleDeliverRequest.EXPIRED_REQUEST)) {
366                 expiredRequiredNoticeList.add(noticeBo.get(temp));
367             }
368             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_COURTESY)) {
369                 courtesyNoticeList.add(noticeBo.get(temp));
370             }
371             if (noticeBo.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.CANCELLATION_NOTICE)) {
372                 cancellationNoticeList.add(noticeBo.get(temp));
373             }
374         }
375 
376         LoanProcessor loanProcessor = getLoanProcessor();
377 
378         if (overDueNoticeList != null && overDueNoticeList.size() > 0) {
379             getHTMLHeader(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.OVERDUE_TITLE));
380             getTemplateHeader(overDueNoticeList.get(0), stringBuffer);
381             getTemplateBody(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.OVERDUE_TITLE), loanProcessor.getParameter(OLEConstants.OleDeliverRequest.OVERDUE_NOTICE_CONTENT));
382             getTemplateFooterList(overDueNoticeList, stringBuffer);
383             getHTMLFooter(stringBuffer);
384         }
385 
386         if (onHoldNoticeList != null && onHoldNoticeList.size() > 0) {
387             getHTMLHeader(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.ONHOLD_TITLE));
388             getTemplateHeader(onHoldNoticeList.get(0), stringBuffer);
389             getTemplateBody(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.ONHOLD_TITLE), loanProcessor.getParameter(OLEParameterConstants.ONHOLD_BODY));
390             for (int onHold = 0; onHold < onHoldNoticeList.size(); onHold++) {
391                 getTemplateFooter(noticeBo.get(onHold), stringBuffer);
392                 getPickUpLocationTemplate(noticeBo.get(onHold), stringBuffer);
393             }
394             getHTMLFooter(stringBuffer);
395         }
396 
397         if (recallNoticeList != null && recallNoticeList.size() > 0) {
398             getHTMLHeader(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.RECALL_TITLE));
399             getTemplateHeader(recallNoticeList.get(0), stringBuffer);
400             getTemplateBody(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.RECALL_TITLE), loanProcessor.getParameter(OLEParameterConstants.RECALL_BODY));
401             for (int recall = 0; recall < recallNoticeList.size(); recall++) {
402                 getTemplateFooter(noticeBo.get(recall), stringBuffer);
403             }
404             getHTMLFooter(stringBuffer);
405         }
406 
407         if (expiredNoticeList != null && expiredNoticeList.size() > 0) {
408             getHTMLHeader(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.EXPIRED_TITLE));
409             getTemplateHeader(expiredNoticeList.get(0), stringBuffer);
410             getTemplateBody(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.EXPIRED_TITLE), loanProcessor.getParameter(OLEConstants.OleDeliverRequest.EXP_HOLD_NOTICE_CONTENT));
411 
412             for (int exp = 0; exp < expiredNoticeList.size(); exp++) {
413                 getTemplateFooter(noticeBo.get(exp), stringBuffer);
414             }
415             getHTMLFooter(stringBuffer);
416         }
417 
418         if (expiredRequiredNoticeList != null && expiredRequiredNoticeList.size() > 0) {
419             getHTMLHeader(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.EXP_REQ_TITLE));
420             getTemplateHeader(expiredRequiredNoticeList.get(0), stringBuffer);
421             getTemplateBody(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.EXP_REQ_TITLE), loanProcessor.getParameter(OLEParameterConstants.EXP_REQ_BODY));
422             for (int exReq = 0; exReq < expiredRequiredNoticeList.size(); exReq++) {
423                 getTemplateFooter(noticeBo.get(exReq), stringBuffer);
424             }
425             getHTMLFooter(stringBuffer);
426         }
427         if (courtesyNoticeList != null && courtesyNoticeList.size() > 0) {
428             getHTMLHeader(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.COURTESY_TITLE));
429             getTemplateHeader(courtesyNoticeList.get(0), stringBuffer);
430             getTemplateBody(stringBuffer, loanProcessor.getParameter(OLEParameterConstants.COURTESY_TITLE), loanProcessor.getParameter(OLEConstants.OleDeliverRequest.COURTESY_NOTICE_CONTENT));
431             getTemplateFooterList(courtesyNoticeList, stringBuffer);
432             getHTMLFooter(stringBuffer);
433         }
434         if (cancellationNoticeList != null && cancellationNoticeList.size() > 0) {
435             getHTMLHeader(stringBuffer, loanProcessor.getParameter("CANCELLATION_NOTICE"));
436             getTemplateHeader(cancellationNoticeList.get(0), stringBuffer);
437             getTemplateBody(stringBuffer, loanProcessor.getParameter("CANCELLATION_NOTICE"), loanProcessor.getParameter(OLEParameterConstants.CANCELLATION_BODY));
438             for (int exReq = 0; exReq < cancellationNoticeList.size(); exReq++) {
439                 getTemplateFooter(noticeBo.get(exReq), stringBuffer);
440             }
441             getHTMLFooter(stringBuffer);
442         }
443         templateForNoticeList.add(stringBuffer);
444 
445         return templateForNoticeList;
446     }
447 
448 
449     public List getPdfNoticeForPatron(List<OleNoticeBo> noticeBoList) throws Exception {
450         return getPdfTemplate(noticeBoList);
451     }
452 
453     private List getPdfTemplate(List<OleNoticeBo> noticeBoList) throws Exception {
454         List templateForNoticeList = new ArrayList();
455         LOG.debug("In getPdfTemplate()");
456         try {
457             Document document = getOverdueDocument();
458             OutputStream outputStream = null;
459 
460             List<OleNoticeBo> overDueNoticeList = new ArrayList<OleNoticeBo>();
461             List<OleNoticeBo> onHoldNoticeList = new ArrayList<OleNoticeBo>();
462             List<OleNoticeBo> recallNoticeList = new ArrayList<OleNoticeBo>();
463             List<OleNoticeBo> expiredNoticeList = new ArrayList<OleNoticeBo>();
464             List<OleNoticeBo> expiredRequiredNoticeList = new ArrayList<OleNoticeBo>();
465             List<OleNoticeBo> courtesyNoticeList = new ArrayList<OleNoticeBo>();
466 
467             for (int temp = 0; temp < noticeBoList.size(); temp++) {
468                 if (noticeBoList.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_OVERDUE)) {
469                     overDueNoticeList.add(noticeBoList.get(temp));
470                 }
471                 if (noticeBoList.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_ONHOLD)) {
472                     onHoldNoticeList.add(noticeBoList.get(temp));
473                 }
474                 if (noticeBoList.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_RECALL)) {
475                     recallNoticeList.add(noticeBoList.get(temp));
476                 }
477                 if (noticeBoList.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_HOLD_COURTESY)) {
478                     expiredNoticeList.add(noticeBoList.get(temp));
479                 }
480                 if (noticeBoList.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.OleDeliverRequest.EXPIRED_REQUEST)) {
481                     expiredRequiredNoticeList.add(noticeBoList.get(temp));
482                 }
483                 if (noticeBoList.get(temp).getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_COURTESY)) {
484                     courtesyNoticeList.add(noticeBoList.get(temp));
485                 }
486             }
487             LoanProcessor loanProcessor = getLoanProcessor();
488 
489             if (overDueNoticeList != null && overDueNoticeList.size() > 0) {
490                 outputStream = getPdfHeader(document, outputStream, loanProcessor.getParameter(OLEParameterConstants.OVERDUE_TITLE), overDueNoticeList.get(0).getItemId());
491                 getPdfTemplateHeader(overDueNoticeList.get(0), document);
492                 getPdfTemplateBody(document, loanProcessor.getParameter(OLEParameterConstants.OVERDUE_TITLE), loanProcessor.getParameter(OLEConstants.OleDeliverRequest.OVERDUE_NOTICE_CONTENT));
493                 getPdfTemplateFooterList(overDueNoticeList, document);
494                 getPdfFooter(document, outputStream);
495             }
496 
497             if (onHoldNoticeList != null && onHoldNoticeList.size() > 0) {
498                 outputStream = getPdfHeader(document, outputStream, loanProcessor.getParameter(OLEParameterConstants.ONHOLD_TITLE), onHoldNoticeList.get(0).getItemId());
499                 getPdfTemplateHeader(onHoldNoticeList.get(0), document);
500                 getPdfTemplateBody(document, loanProcessor.getParameter(OLEParameterConstants.ONHOLD_TITLE), loanProcessor.getParameter(OLEParameterConstants.ONHOLD_BODY));
501                 for (int onHold = 0; onHold < onHoldNoticeList.size(); onHold++) {
502                     getPdfTemplateFooter(noticeBoList.get(onHold), document);
503                     //getPickUpLocationTemplate(noticeBoList.get(onHold),stringBuffer);
504                 }
505                 getPdfFooter(document, outputStream);
506             }
507 
508             if (recallNoticeList != null && recallNoticeList.size() > 0) {
509                 outputStream = getPdfHeader(document, outputStream, loanProcessor.getParameter(OLEParameterConstants.RECALL_TITLE), recallNoticeList.get(0).getItemId());
510                 getPdfTemplateHeader(recallNoticeList.get(0), document);
511                 getPdfTemplateBody(document, loanProcessor.getParameter(OLEParameterConstants.RECALL_TITLE), loanProcessor.getParameter(OLEParameterConstants.RECALL_BODY));
512                 for (int recall = 0; recall < recallNoticeList.size(); recall++) {
513                     getPdfTemplateFooter(noticeBoList.get(recall), document);
514                 }
515                 getPdfFooter(document, outputStream);
516             }
517 
518             if (expiredNoticeList != null && expiredNoticeList.size() > 0) {
519                 outputStream = getPdfHeader(document, outputStream, loanProcessor.getParameter(OLEParameterConstants.EXPIRED_TITLE), expiredNoticeList.get(0).getItemId());
520                 getPdfTemplateHeader(expiredNoticeList.get(0), document);
521                 getPdfTemplateBody(document, loanProcessor.getParameter(OLEConstants.OleDeliverRequest.EXP_HOLD_NOTICE_CONTENT), loanProcessor.getParameter(OLEConstants.OleDeliverRequest.EXP_HOLD_NOTICE_CONTENT));
522                 for (int exp = 0; exp < expiredNoticeList.size(); exp++) {
523                     getPdfTemplateFooter(noticeBoList.get(exp), document);
524                 }
525                 getPdfFooter(document, outputStream);
526             }
527 
528             if (expiredRequiredNoticeList != null && expiredRequiredNoticeList.size() > 0) {
529                 outputStream = getPdfHeader(document, outputStream, loanProcessor.getParameter(OLEParameterConstants.EXP_REQ_TITLE), expiredRequiredNoticeList.get(0).getItemId());
530                 getPdfTemplateHeader(expiredRequiredNoticeList.get(0), document);
531                 getPdfTemplateBody(document, loanProcessor.getParameter(OLEParameterConstants.EXP_REQ_TITLE), loanProcessor.getParameter(OLEParameterConstants.EXP_REQ_BODY));
532                 for (int exReq = 0; exReq < expiredRequiredNoticeList.size(); exReq++) {
533                     getPdfTemplateFooter(noticeBoList.get(exReq), document);
534                 }
535                 getPdfFooter(document, outputStream);
536             }
537             if (courtesyNoticeList != null && courtesyNoticeList.size() > 0) {
538                 outputStream = getPdfHeader(document, outputStream, loanProcessor.getParameter(OLEParameterConstants.COURTESY_TITLE), courtesyNoticeList.get(0).getItemId());
539                 getPdfTemplateHeader(courtesyNoticeList.get(0), document);
540                 getPdfTemplateBody(document, loanProcessor.getParameter(OLEParameterConstants.COURTESY_TITLE), loanProcessor.getParameter(OLEConstants.OleDeliverRequest.COURTESY_NOTICE_CONTENT));
541                 getPdfTemplateFooterList(courtesyNoticeList, document);
542                 getPdfFooter(document, outputStream);
543             }
544 
545         } catch (Exception e) {
546             LOG.error("Exception in getPdfTemplate", e);
547         }
548         //     templateForNoticeList.add(stringBuffer);
549 
550         return templateForNoticeList;
551     }
552 
553 
554     public List getNoticeForPatron(List<OleNoticeBo> noticeBo) throws Exception {
555         return getTemplate(noticeBo);
556 
557     }
558 
559     public Map getSMSForPatron(List<OleNoticeBo> noticeBo) throws Exception {
560         return getSMSTemplate(noticeBo);
561     }
562 
563 
564     public String sendMissingNotice(OleNoticeBo oleNoticeBo) {
565 
566         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
567 
568         StringBuffer stringBuffer = new StringBuffer();
569         stringBuffer.append("<HTML>");
570         stringBuffer.append("<TITLE>" + oleNoticeBo.getNoticeName() + "</TITLE>");
571         stringBuffer.append("<HEAD><TR><TD><CENTER>" + oleNoticeBo.getNoticeName() + "</CENTER></TD></TR></HEAD>");
572         stringBuffer.append("<BODY>");
573         stringBuffer.append("<TABLE></BR></BR>");
574         stringBuffer.append("<TR><TD>Circulation Location / Library Name :</TD><TD>" + oleNoticeBo.getCirculationDeskName() + "</TD></TR>");
575         stringBuffer.append("<TR><TD>PatronName :</TD><TD>" + oleNoticeBo.getPatronName() + "</TD></TR>");
576         stringBuffer.append("<TR><TD>Address :</TD><TD>" + oleNoticeBo.getPatronAddress() + "</TD></TR>");
577         stringBuffer.append("<TR><TD>EMAIL :</TD><TD>" + oleNoticeBo.getPatronEmailAddress() + "</TD></TR>");
578         stringBuffer.append("<TR><TD>PhoneNumber :</TD><TD>" + oleNoticeBo.getPatronPhoneNumber() + "</TD></TR>");
579         stringBuffer.append("</TABLE>");
580         stringBuffer.append("<TABLE></BR></BR>");
581         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
582         stringBuffer.append("<TABLE width=\"100%\">");
583         stringBuffer.append("<TR><TD><CENTER>" + oleNoticeBo.getNoticeName() + "</CENTER></TD></TR>");
584         stringBuffer.append("<TR><TD><p>" + oleNoticeBo.getNoticeSpecificContent() + "</p></TD></TR>");
585         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR></TABLE>");
586         stringBuffer.append("<TABLE></BR></BR>");
587         stringBuffer.append("<TR><TD>Title :</TD><TD>" + oleNoticeBo.getTitle() + "</TD></TR>");
588         stringBuffer.append("<TR><TD>Author :</TD><TD>" + oleNoticeBo.getAuthor() + "</TD></TR>");
589         stringBuffer.append("<TR><TD>Volume/Issue/Copy # :</TD><TD>" + oleNoticeBo.getVolumeNumber() + "</TD></TR>");
590         stringBuffer.append("<TR><TD>Library shelvinglocation  :</TD><TD>" + oleNoticeBo.getItemShelvingLocation() + "</TD></TR>");
591         stringBuffer.append("<TR><TD>Call #:</TD><TD>" + oleNoticeBo.getItemCallNumber() + "</TD></TR>");
592         stringBuffer.append("<TR><TD>Item barcode  :</TD><TD>" + oleNoticeBo.getItemId() + "</TD></TR>");
593         stringBuffer.append("<TR><TD>Check In Date  :</TD><TD>" + (oleNoticeBo.getCheckInDate()!=null ? oleNoticeBo.getCheckInDate() : "") + "</TD></TR>");
594         String missingPieceNote="";
595         if(oleNoticeBo.getOleItem()!=null&& oleNoticeBo.getOleItem().getMissingPieceFlagNote()!=null){
596             missingPieceNote=oleNoticeBo.getOleItem().getMissingPieceFlagNote();
597         }
598         stringBuffer.append("<TR><TD>Missing Piece Note  :</TD><TD>" + missingPieceNote + "</TD></TR>");
599         stringBuffer.append("</TABLE>");
600         stringBuffer.append("</BODY>");
601         stringBuffer.append("</HTML>");
602         return stringBuffer.toString();
603     }
604 
605     public String getEmailPickUpNotice(OleNoticeBo noticeBo) throws Exception {
606         StringBuffer stringBuffer=new StringBuffer();
607         stringBuffer.append("<TABLE>");
608         stringBuffer.append("<TR><TD>");
609         stringBuffer.append("<TABLE>");
610         stringBuffer.append("<TR><TD COLSPAN='3'>" + ((noticeBo.getPatronName() != null) ? noticeBo.getPatronName().toString() : "") + " </TD></TR>");
611         stringBuffer.append("<TR><TD COLSPAN='3'>" + ((noticeBo.getPatronAddress() != null) ? noticeBo.getPatronAddress().toString() : "") + " </TD></TR>");
612         stringBuffer.append("<TR><TD COLSPAN='3'>" + ((noticeBo.getPatronEmailAddress() != null) ? noticeBo.getPatronEmailAddress().toString() : "") + " </TD></TR>");
613         stringBuffer.append("<TR><TD COLSPAN='3'>" + ((noticeBo.getPatronPhoneNumber() != null) ? noticeBo.getPatronPhoneNumber().toString() : "") + " </TD></TR>");
614         stringBuffer.append("</TABLE>");
615         stringBuffer.append("</TD></TR>");
616 
617         stringBuffer.append("<TR><TD align='center'>");
618         stringBuffer.append("<B>"+noticeBo.getNoticeName()+"</B>");
619         stringBuffer.append("</TD></TR>");
620 
621         stringBuffer.append("<TR><TD align='left'>");
622         stringBuffer.append("<P>"+noticeBo.getNoticeSpecificContent()+"</P>");
623         stringBuffer.append("</TD></TR>");
624 
625         stringBuffer.append("<TR><TD align='left'>");
626         stringBuffer.append("<P>Thank you .</P>");
627         stringBuffer.append("</TD></TR>");
628 
629         stringBuffer.append("<TR><TD>");
630         String author = ((noticeBo.getAuthor() != null) ? noticeBo.getAuthor().toString() : "");
631         String title = ((noticeBo.getTitle() != null) ? noticeBo.getTitle().toString() : "");
632         String callNumber = ((noticeBo.getItemCallNumber() != null) ? noticeBo.getItemCallNumber().toString() : "");
633         stringBuffer.append("<TR><TD>");
634         stringBuffer.append("<TABLE>");
635         stringBuffer.append("<TR><TD COLSPAN='3'> Title : " + title + " </TD></TR>");
636         stringBuffer.append("<TR><TD COLSPAN='3'> Author : " + author + " </TD></TR>");
637         stringBuffer.append("<TR><TD COLSPAN='3'> Call Number :" + callNumber + " </TD></TR>");
638         stringBuffer.append("</TABLE>");
639         stringBuffer.append("</TD></TR>");
640         stringBuffer.append("</TABLE>");
641         return stringBuffer.toString();
642     }
643 
644     public String generateMailContentFromPatronBill(OleLoanDocument oleLoanDocument,OlePatronDocument olePatronDocument,String feeTypeName,String fineAmount,PatronBillPayment patronBillPayment ){
645         StringBuffer contentForSendMail=new StringBuffer();
646         OleDeliverRequestDocumentHelperServiceImpl oleDeliverRequestDocumentHelperService=new OleDeliverRequestDocumentHelperServiceImpl();
647         String patronMail="";
648         String patronAddress="";
649         String patronPhoneNumber="";
650         try{
651             patronMail=oleDeliverRequestDocumentHelperService.getPatronHomeEmailId(olePatronDocument.getEntity().getEntityTypeContactInfos().get(0));
652             patronAddress=oleDeliverRequestDocumentHelperService.getPatronPreferredAddress(olePatronDocument.getEntity().getEntityTypeContactInfos().get(0));
653             patronPhoneNumber=oleDeliverRequestDocumentHelperService.getPatronHomePhoneNumber(olePatronDocument.getEntity().getEntityTypeContactInfos().get(0));
654         }catch(Exception e){
655             LOG.error("Exception while generating mail content from patron bill",e);
656         }
657         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
658         contentForSendMail.append("<HTML>");
659         contentForSendMail.append("<TITLE><CENTER><h2>"+ feeTypeName + " Bill </h2></CENTER></TITLE>");
660         contentForSendMail.append("<HEAD><TR><TD><CENTER><h2>" + feeTypeName + "<h2></CENTER></TD></TR></HEAD>");
661         contentForSendMail.append("<BODY>");
662         contentForSendMail.append("<TABLE width=\"100%\">");
663         contentForSendMail.append("<TR><TD><h3>Patron Details</h3></TD></TR>");
664         contentForSendMail.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR></TABLE>");;
665         contentForSendMail.append("<TABLE></BR></BR>");
666         contentForSendMail.append("<TR><TD>PatronName</TD><TD>:</TD><TD>" + olePatronDocument.getEntity().getNames().get(0).getFirstName() + " " + olePatronDocument.getEntity().getNames().get(0).getLastName() + "</TD></TR>");
667         contentForSendMail.append("<TR><TD>Address</TD><TD>:</TD><TD>" + patronAddress + "</TD></TR>");
668         contentForSendMail.append("<TR><TD>EMAIL</TD><TD>:</TD><TD>" + patronMail + "</TD></TR>");
669         contentForSendMail.append("<TR><TD>PhoneNumber</TD><TD>:</TD><TD>" + ( patronPhoneNumber!=null ? patronPhoneNumber : "") + "</TD></TR>");
670         contentForSendMail.append("</TABLE>");
671         contentForSendMail.append("<TABLE></BR></BR>");
672         contentForSendMail.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
673         contentForSendMail.append("<TABLE width=\"100%\">");
674         contentForSendMail.append("<TR><TD><h3>Fine Details</h3></TD></TR>");
675         contentForSendMail.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR></TABLE>");
676         contentForSendMail.append("<TABLE></BR></BR>");
677         contentForSendMail.append("<TR><TD>Bill Number</TD><TD>:</TD><TD>" + patronBillPayment.getBillNumber() + "</TD></TR>");
678         contentForSendMail.append("<TR><TD>Fee Type</TD><TD>:</TD><TD>" + feeTypeName + "</TD></TR>");
679         contentForSendMail.append("<TR><TD>Fee Amount</TD><TD>:</TD><TD>" + CurrencyFormatter.getSymbolForCurrencyPattern() + fineAmount + "</TD></TR>");
680         contentForSendMail.append("<TR><TD>Item Barcode</TD><TD>:</TD><TD>" + oleLoanDocument.getItemId() + "</TD></TR>");
681     /*    try {
682             org.kuali.ole.docstore.common.document.Item item = new ItemOleml();
683             if (oleLoanDocument.getItemId() != null) {
684 
685                 org.kuali.ole.docstore.common.search.SearchParams search_Params = new org.kuali.ole.docstore.common.search.SearchParams();
686                 SearchResponse searchResponse = null;
687                 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, oleLoanDocument.getItemId()), ""));
688                 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), Item.CALL_NUMBER));
689                 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), Item.COPY_NUMBER));
690                 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.ITEM.getCode(), Item.ENUMERATION));
691                 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.BIB.getCode(), Bib.TITLE));
692                 search_Params.getSearchResultFields().add(search_Params.buildSearchResultField(org.kuali.ole.docstore.common.document.content.enums.DocType.BIB.getCode(), Bib.AUTHOR));
693                 searchResponse = getDocstoreClientLocator().getDocstoreClient().search(search_Params);
694 
695 
696                 for (SearchResult searchResult : searchResponse.getSearchResults()) {
697                     for (SearchResultField searchResultField : searchResult.getSearchResultFields()) {
698                         String fieldName = searchResultField.getFieldName();
699                         String fieldValue = searchResultField.getFieldValue() != null ? searchResultField.getFieldValue() : "";
700 
701                         if (fieldName.equalsIgnoreCase(Bib.TITLE) && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase("bibliographic")) {
702 
703 
704                             oleLoanDocument.setTitle(fieldValue);
705                         } else if (fieldName.equalsIgnoreCase(Bib.AUTHOR) && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase("bibliographic")) {
706 
707 
708                             oleLoanDocument.setAuthor(fieldValue);
709 
710                         } else if (fieldName.equalsIgnoreCase(Item.CALL_NUMBER) && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase("item")) {
711 
712 
713                             oleLoanDocument.setItemCallNumber(fieldValue);
714 
715                         } else if (fieldName.equalsIgnoreCase(Item.COPY_NUMBER) && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase("item")) {
716 
717 
718                             oleLoanDocument.setItemCopyNumber(fieldValue);
719 
720                         }  else if (fieldName.equalsIgnoreCase(Item.ENUMERATION) && !fieldValue.isEmpty() && searchResultField.getDocType().equalsIgnoreCase("item")) {
721 
722 
723                             oleLoanDocument.setItemVolumeNumber(fieldValue);
724 
725                         }
726 
727                     }
728                 }
729             } else {
730                 item = getDocstoreClientLocator().getDocstoreClient().retrieveItem(oleLoanDocument.getItemUuid());
731                 ItemOlemlRecordProcessor itemOlemlRecordProcessor=new ItemOlemlRecordProcessor();
732                 org.kuali.ole.docstore.common.document.content.instance.Item itemXML=itemOlemlRecordProcessor.fromXML(item.getContent());
733 
734                 oleLoanDocument.setItemCallNumber(itemXML.getCallNumber().getNumber());
735                 oleLoanDocument.setAuthor(item.getHolding().getBib().getAuthor());
736                 oleLoanDocument.setItemVolumeNumber(itemXML.getVolumeNumber());
737                 oleLoanDocument.setItemCopyNumber(itemXML.getCopyNumber());
738                 oleLoanDocument.setTitle(item.getHolding().getBib().getTitle());
739 
740 
741             }
742 
743 
744         } catch (Exception e) {
745            LOG.error("Exception while generating mail content from patron bill",e);
746         }*/
747         String issue = new String(" ");
748         contentForSendMail.append("<TR><TD>Title</TD><TD>:</TD><TD>" + (oleLoanDocument.getTitle()!=null ? oleLoanDocument.getTitle() : "") + "</TD></TR>");
749         contentForSendMail.append("<TR><TD>Author</TD><TD>:</TD><TD>" + (oleLoanDocument.getAuthor()!=null ? oleLoanDocument.getAuthor() : "") + "</TD></TR>");
750         contentForSendMail.append("<TR><TD>Volume/Issue/Copy # </TD><TD>:</TD><TD>" + (oleLoanDocument.getItemVolumeNumber()!=null? oleLoanDocument.getItemVolumeNumber():"") + "/" + issue + "/" +  (oleLoanDocument.getItemCopyNumber()!=null? oleLoanDocument.getItemCopyNumber():"")+ "</TD></TR>");
751         contentForSendMail.append("<TR><TD>Library Shelving Location</TD><TD>:</TD><TD>" + oleLoanDocument.getLocation() + "</TD></TR>");
752         contentForSendMail.append("<TR><TD>Call Number</TD><TD>:</TD><TD>" + (oleLoanDocument.getItemCallNumber()!=null? oleLoanDocument.getItemCallNumber():"") + "</TD></TR>");
753         contentForSendMail.append("<TR><TD>Item was Due</TD><TD>:</TD><TD>" + (oleLoanDocument.getLoanDueDate()!=null ? sdf.format(oleLoanDocument.getLoanDueDate()) : "") + "</TD></TR>");
754         contentForSendMail.append("</TABLE>");
755         contentForSendMail.append("</BODY>");
756         contentForSendMail.append("</HTML>");
757         return contentForSendMail.toString();
758     }
759 
760 
761 
762     public  String getOverdueNoticeHTMLContent(OleLoanDocument  oleLoanDocument){
763         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
764         StringBuffer stringBuffer = new StringBuffer();
765         try {
766         stringBuffer.append("<table>");
767         stringBuffer.append("<TR><TD>Title :</TD><TD>" + (oleLoanDocument.getTitle() != null ? oleLoanDocument.getTitle() : "") + "</TD></TR>");
768         stringBuffer.append("<TR><TD>Author :</TD><TD>" + (oleLoanDocument.getAuthor() != null ? oleLoanDocument.getAuthor() : "") + "</TD></TR>");
769         String volume = (String) oleLoanDocument.getEnumeration()!= null && !oleLoanDocument.getEnumeration().equals("") ? oleLoanDocument.getEnumeration() : "";
770         String issue = new String(" ");
771         String copyNumber = (String) oleLoanDocument.getItemCopyNumber() != null && !oleLoanDocument.getItemCopyNumber().equals("") ? oleLoanDocument.getItemCopyNumber() : "";
772         String volumeNumber=volume + "/" + issue + "/" + copyNumber;
773         stringBuffer.append("<TR><TD>Volume/Issue/Copy Number :</TD><TD>" + (volumeNumber != null ? volumeNumber : "") + "</TD></TR>");
774         stringBuffer.append("<TR><TD>Item was due :</TD><TD>" + (oleLoanDocument.getLoanDueDate() != null ? sdf.format(oleLoanDocument.getLoanDueDate()).toString() : "") + "</TD></TR>");
775         stringBuffer.append("<TR><TD>Library shelving location :</TD><TD>" + (itemShelvingLocationName(oleLoanDocument.getItemLocation()) != null ? itemShelvingLocationName(oleLoanDocument.getItemLocation()) : "") + "</TD></TR>");
776         try {
777             String callNumber = "";
778             if (oleLoanDocument.getItemCallNumber() != null && !oleLoanDocument.getItemCallNumber().equals("")) {
779                 callNumber = oleLoanDocument.getItemCallNumber();
780             }
781             stringBuffer.append("<TR><TD>Call Number :</TD><TD>" + (callNumber != null ? callNumber : "") + "</TD></TR>");
782         } catch (Exception e) {
783             e.printStackTrace();
784         }
785         stringBuffer.append("<TR><TD>Item Barcode :</TD><TD>" + (oleLoanDocument.getItemId() != null ? oleLoanDocument.getItemId() : "") + "</TD></TR>");
786         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
787         stringBuffer.append("</table>");
788         }catch (Exception e){
789             LOG.error("Error---->While generating verdue content for email pdf  ");
790             if(oleLoanDocument!=null){
791                 LOG.error("Error---->Item Barcode "+oleLoanDocument.getItemId());
792             }
793             LOG.error(e.getMessage()+e);
794         }
795         return stringBuffer.toString();
796     }
797     public String getHeaderAndPatronContent(OlePatronDocument olePatronDocument,boolean isOverdue){
798 
799         StringBuffer stringBuffer = new StringBuffer();
800         try{
801         String title = getLoanProcessor().getParameter(OLEParameterConstants.OVERDUE_TITLE);
802         String body = getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.OVERDUE_NOTICE_CONTENT);
803         if(!isOverdue){
804             title=loanProcessor.getParameter(OLEParameterConstants.COURTESY_TITLE);
805             body=loanProcessor.getParameter(OLEConstants.OleDeliverRequest.COURTESY_NOTICE_CONTENT);
806         }
807         OleDeliverRequestDocumentHelperServiceImpl deliverService = new OleDeliverRequestDocumentHelperServiceImpl();
808         EntityTypeContactInfoBo entityTypeContactInfoBo = olePatronDocument.getEntity().getEntityTypeContactInfos().get(0);
809 
810         stringBuffer.append("<HTML>");
811         stringBuffer.append("<TITLE>" + title + "</TITLE>");
812         stringBuffer.append("<HEAD></HEAD>");
813         stringBuffer.append("<BODY>");
814 
815         try{
816         stringBuffer.append("<TABLE></BR></BR>");
817         stringBuffer.append("<TR><TD>Patron Name :</TD><TD>" + olePatronDocument.getEntity().getNames().get(0).getFirstName() + " " + olePatronDocument.getEntity().getNames().get(0).getLastName() + "</TD></TR>");
818         stringBuffer.append("<TR><TD>Address :</TD><TD>" + (deliverService.getPatronPreferredAddress(entityTypeContactInfoBo) != null ? deliverService.getPatronPreferredAddress(entityTypeContactInfoBo) : "") + "</TD></TR>");
819         stringBuffer.append("<TR><TD>EMAIL :</TD><TD>" + (deliverService.getPatronHomeEmailId(entityTypeContactInfoBo) != null ? deliverService.getPatronHomeEmailId(entityTypeContactInfoBo) : "") + "</TD></TR>");
820 
821         stringBuffer.append("<TR><TD>Phone Number :</TD><TD>" +(deliverService.getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? deliverService.getPatronHomePhoneNumber(entityTypeContactInfoBo) : "") + "</TD></TR>");
822         } catch (Exception e){
823             e.printStackTrace();
824         }
825         stringBuffer.append("</TABLE>");
826 
827         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR>");
828         stringBuffer.append("<TABLE width=\"100%\">");
829         stringBuffer.append("<TR><TD><CENTER>" + title + "</CENTER></TD></TR>");
830         stringBuffer.append("<TR><TD><p>" + body + "</p></TD></TR>");
831         stringBuffer.append("<TR><TD>&nbsp;</TD><TD>&nbsp;</TD></TR></TABLE>");
832         }catch (Exception e){
833             LOG.error("Error---->While generating overdue content for email(Patron Information) ");
834         }
835         return stringBuffer.toString();
836     }
837 
838 
839     /* This section is related  to generation of pdf notices */
840 
841     public Font getDefaultFont(){
842         com.itextpdf.text.Font font = FontFactory.getFont(getFontFilePath("org/kuali/ole/deliver/batch/fonts/ARIALUNI.TTF"), BaseFont.IDENTITY_H,10);
843         return font;
844     }
845 
846     public Font getFont(String data) {
847         String myData = new String(data);
848         List<Character.UnicodeBlock> unicodeBlocks = new ArrayList<>();
849         if (StringUtils.isNotBlank(myData)) {
850             unicodeBlocks = getListOfLanguage(myData);
851         }
852         if (unicodeBlocks.contains(Character.UnicodeBlock.ARABIC)) {
853             com.itextpdf.text.Font font = FontFactory.getFont(getFontFilePath("org/kuali/ole/deliver/batch/fonts/arial.ttf"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
854             return font;
855         } else {
856             return getDefaultFont();
857         }
858     }
859 
860     public Font getBoldFont(){
861         return FontFactory.getFont(FontFactory.TIMES_ROMAN, 15, Font.BOLD);
862     }
863 
864     private PdfPCell getPdfPCellInJustified(String chunk) {
865         PdfPCell pdfPCell = new PdfPCell(new Paragraph(new Chunk(chunk, getFont(chunk))));
866         pdfPCell.setBorder(pdfPCell.NO_BORDER);
867         pdfPCell.setHorizontalAlignment(pdfPCell.ALIGN_JUSTIFIED);
868         return pdfPCell;
869     }
870 
871     private List<Character.UnicodeBlock> getListOfLanguage(String data){
872         Set<Character.UnicodeBlock> languageSet=new HashSet<Character.UnicodeBlock>();
873         char[] valueArray = data.toCharArray();
874         for(int counter=0;counter<valueArray.length;counter++){
875             languageSet.add(Character.UnicodeBlock.of(valueArray[counter]));
876         }
877         return (new ArrayList<Character.UnicodeBlock>(languageSet));
878     }
879 
880     private PdfPCell getPdfPCellInLeft(String chunk) {
881         PdfPCell pdfPCell = new PdfPCell(new Paragraph(new Chunk(chunk, getDefaultFont())));
882         pdfPCell.setBorder(pdfPCell.NO_BORDER);
883         pdfPCell.setHorizontalAlignment(pdfPCell.ALIGN_LEFT);
884         return pdfPCell;
885     }
886 
887     private PdfPCell getPdfPCellInCenter(String chunk) {
888         PdfPCell pdfPCell = new PdfPCell(new Paragraph(new Chunk(chunk, getDefaultFont())));
889         pdfPCell.setBorder(pdfPCell.NO_BORDER);
890         pdfPCell.setHorizontalAlignment(pdfPCell.ALIGN_LEFT);
891         return pdfPCell;
892     }
893 
894     private PdfPCell getPdfPCellInCenter(String chunk,Font font) {
895         PdfPCell pdfPCell = new PdfPCell(new Paragraph(new Chunk(chunk,font)));
896         pdfPCell.setBorder(pdfPCell.NO_BORDER);
897         pdfPCell.setHorizontalAlignment(pdfPCell.ALIGN_LEFT);
898         return pdfPCell;
899     }
900 
901     private PdfPCell getPdfPCellNewLine() {
902         PdfPCell pdfPCell = new PdfPCell(new Paragraph(Chunk.NEWLINE));
903         pdfPCell.setBorder(pdfPCell.NO_BORDER);
904         return pdfPCell;
905     }
906 
907     private Paragraph getPdfParagraphNewLine() {
908         Paragraph paragraph = new Paragraph(new Paragraph(Chunk.NEWLINE));
909         return paragraph;
910     }
911 
912     public String getFontFilePath(String classpathRelativePath)  {
913         try {
914             Resource rsrc = new ClassPathResource(classpathRelativePath);
915             return rsrc.getFile().getAbsolutePath();
916         } catch(Exception e){
917             LOG.error("Error : while accessing font file "+e);
918         }
919         return null;
920     }
921 
922     private OutputStream getPdfHeader(Document document, OutputStream outputStream, String title, String itemId) throws Exception {
923         StringBuffer stringBuffer = new StringBuffer();
924         String pdfLocationSystemParam = getLoanProcessor().getParameter(OLEParameterConstants.PDF_LOCATION);
925         if (LOG.isDebugEnabled()) {
926             LOG.debug("System Parameter for PDF_Location --> " + pdfLocationSystemParam);
927         }
928         if (pdfLocationSystemParam == null || pdfLocationSystemParam.trim().isEmpty()) {
929             pdfLocationSystemParam = ConfigContext.getCurrentContextConfig().getProperty("staging.directory") + "/";
930             if (LOG.isDebugEnabled()) {
931                 LOG.debug("System Parameter for PDF_Location staging dir--> " + pdfLocationSystemParam);
932             }
933         } else {
934             pdfLocationSystemParam = ConfigContext.getCurrentContextConfig().getProperty("homeDirectory") + "/" + pdfLocationSystemParam + "/";
935         }
936         boolean locationExist = new File(pdfLocationSystemParam).exists();
937         boolean fileCreated = false;
938         if (LOG.isDebugEnabled()) {
939             LOG.debug("Is directory Exist ::" + locationExist);
940         }
941         try {
942             if (!locationExist) {
943                 fileCreated = new File(pdfLocationSystemParam).mkdirs();
944                 if (!fileCreated) {
945                     throw new RuntimeException("Not Able to create directory :" + pdfLocationSystemParam);
946                 }
947             }
948         } catch (Exception e) {
949             LOG.error("Exception occured while creating the directory : " + e.getMessage(), e);
950             throw e;
951         }
952 
953         if (title == null || title.trim().isEmpty()) {
954             title = OLEConstants.ITEM_TITLE;
955         }
956         title = title.replaceAll(" ", "_");
957 
958         if (itemId == null || itemId.trim().isEmpty()) {
959             itemId = OLEConstants.ITEM_ID;
960         }
961         String fileName = pdfLocationSystemParam + title + "_" + itemId + "_" + (new Date(System.currentTimeMillis())).toString().replaceAll(":","_") + ".pdf";
962         fileName = fileName.replace(" ","_");
963         if (LOG.isDebugEnabled()) {
964             LOG.debug("File Created :" + title + "file name ::" + fileName + "::");
965         }
966         outputStream = new FileOutputStream(fileName);
967         PdfWriter writer = PdfWriter.getInstance(document, outputStream);
968         document.open();
969         document.newPage();
970         Paragraph paraGraph = new Paragraph();
971         paraGraph.setAlignment(Element.ALIGN_CENTER);
972         paraGraph.add(new Chunk(title, getBoldFont()));
973         paraGraph.add(Chunk.NEWLINE);
974         document.add(paraGraph);
975         return outputStream;
976     }
977 
978     public void createPdfForIntransitRequest(OleDeliverRequestBo oleDeliverRequestBo, HttpServletResponse response) {
979         LOG.debug("Creating pdf for intransit request");
980         String title = "InTransit Request";
981         OutputStream outputStream = null;
982         String fileName = "IntransitRequestSlip" + "_" + oleDeliverRequestBo.getItemId() + "_" + new Date(System.currentTimeMillis()) + ".pdf";
983         if (LOG.isDebugEnabled()) {
984             LOG.debug("File Created :" + title + "file name ::" + fileName + "::");
985         }
986         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
987         try {
988             String itemTitle = oleDeliverRequestBo.getTitle() != null ? oleDeliverRequestBo.getTitle() : "";
989             Date dateOfReq = oleDeliverRequestBo.getCreateDate()!=null?oleDeliverRequestBo.getCreateDate():null;
990             //String dateOfRequest = dateOfReq != null ? dateOfReq.toString() : "";
991             String circulationLocation = oleDeliverRequestBo.getCirculationLocationCode() != null ? oleDeliverRequestBo.getCirculationLocationCode() : "";
992             String itemBarcode = oleDeliverRequestBo.getItemId() != null ? oleDeliverRequestBo.getItemId() : "";
993             String patronBarcode = oleDeliverRequestBo.getBorrowerBarcode() != null ? oleDeliverRequestBo.getBorrowerBarcode() : "";
994             String requestType = oleDeliverRequestBo.getRequestTypeId() != null ? oleDeliverRequestBo.getRequestTypeId() : "";
995             boolean inTransitSlip = requestType.equalsIgnoreCase("8");
996             // Document document = this.getDocument(0, 0, 5, 5);
997             Document document = getOverdueDocument();
998             //outputStream = new FileOutputStream(fileName);
999 
1000             response.setContentType("application/pdf");
1001             response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
1002             outputStream = response.getOutputStream();
1003             PdfWriter.getInstance(document, outputStream);
1004             document.open();
1005             document.newPage();
1006             PdfPTable pdfTable = new PdfPTable(3);
1007             pdfTable.setWidths(new int[]{20,2,30});
1008             Paragraph paraGraph = new Paragraph();
1009             if (inTransitSlip) {
1010                 paraGraph.setAlignment(Element.ALIGN_CENTER);
1011                 paraGraph.add(new Chunk("InTransit Request Slip", getBoldFont()));
1012             }
1013             paraGraph.add(Chunk.NEWLINE);
1014             paraGraph.add(Chunk.NEWLINE);
1015             paraGraph.add(Chunk.NEWLINE);
1016             document.add(paraGraph);
1017             if (inTransitSlip) {
1018                 pdfTable.addCell(getPdfPCellInJustified("Date/Time "));
1019                 pdfTable.addCell(getPdfPCellInLeft(":"));
1020                 pdfTable.addCell(getPdfPCellInJustified(sdf.format(dateOfReq)));
1021 
1022                 pdfTable.addCell(getPdfPCellInJustified("Circulation Location"));
1023                 pdfTable.addCell(getPdfPCellInLeft(":"));
1024                 pdfTable.addCell(getPdfPCellInJustified(circulationLocation));
1025 
1026                 pdfTable.addCell(getPdfPCellInJustified("Item Barcode"));
1027                 pdfTable.addCell(getPdfPCellInLeft(":"));
1028                 pdfTable.addCell(getPdfPCellInJustified(itemBarcode));
1029 
1030                 pdfTable.addCell(getPdfPCellInJustified("Title"));
1031                 pdfTable.addCell(getPdfPCellInLeft(":"));
1032                 pdfTable.addCell(getPdfPCellInJustified(itemTitle));
1033 
1034                 pdfTable.addCell(getPdfPCellInJustified("Patron Barcode"));
1035                 pdfTable.addCell(getPdfPCellInLeft(":"));
1036                 pdfTable.addCell(getPdfPCellInJustified(patronBarcode));
1037                 document.add(pdfTable);
1038             }
1039             document.close();
1040             outputStream.flush();
1041             outputStream.close();
1042         } catch (Exception e) {
1043             LOG.error("Exception while creating Pdf For IntransitRequest", e);
1044         }
1045     }
1046 
1047 
1048 
1049     private void getPdfTemplateHeader(OleNoticeBo noticeBo, Document document) throws Exception {
1050         if (LOG.isDebugEnabled()){
1051             LOG.debug("Header for the notice" + noticeBo.getNoticeName() + noticeBo.getItemId());
1052         }
1053         Paragraph paraGraph = new Paragraph();
1054         paraGraph.add(Chunk.NEWLINE);
1055         document.add(paraGraph);
1056         paraGraph = new Paragraph();
1057         paraGraph.add(new Chunk("Patron information", getBoldFont()));
1058         paraGraph.add(Chunk.NEWLINE);
1059         paraGraph.add(Chunk.NEWLINE);
1060         document.add(paraGraph);
1061 
1062         PdfPTable pdfTable = new PdfPTable(3);
1063         pdfTable.setWidths(new int[]{20,2,30});
1064 
1065 
1066         pdfTable.addCell(getPdfPCellInJustified("Patron Name"));
1067         pdfTable.addCell(getPdfPCellInLeft(":"));
1068         pdfTable.addCell(getPdfPCellInJustified(noticeBo.getPatronName() != null ? noticeBo.getPatronName() : ""));
1069 
1070         pdfTable.addCell(getPdfPCellInJustified("Address"));
1071         pdfTable.addCell(getPdfPCellInLeft(":"));
1072         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getPatronAddress() != null ? noticeBo.getPatronAddress() : "")));
1073 
1074         pdfTable.addCell(getPdfPCellInJustified("Email"));
1075         pdfTable.addCell(getPdfPCellInLeft(":"));
1076         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getPatronEmailAddress() != null ? noticeBo.getPatronEmailAddress() : "")));
1077 
1078         pdfTable.addCell(getPdfPCellInJustified("Phone #"));
1079         pdfTable.addCell(getPdfPCellInLeft(":"));
1080         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getPatronPhoneNumber() != null ? noticeBo.getPatronPhoneNumber() : "")));
1081 
1082         document.add(pdfTable);
1083         paraGraph = new Paragraph();
1084         paraGraph.add(Chunk.NEWLINE);
1085         document.add(paraGraph);
1086     }
1087 
1088     private void getPdfTemplateBody(Document document, String title, String body) throws Exception {
1089         //Notice Type
1090         if (LOG.isDebugEnabled()){
1091             LOG.debug("Body Content of the notice :" + title);
1092         }
1093         Paragraph paraGraph = new Paragraph();
1094         paraGraph.add(new Chunk(title, getBoldFont()));
1095         paraGraph.setAlignment(Element.ALIGN_CENTER);
1096         paraGraph.add(Chunk.NEWLINE);
1097         paraGraph.add(Chunk.NEWLINE);
1098         document.add(paraGraph);
1099 
1100 
1101         //Notice-specific text
1102         paraGraph = new Paragraph();
1103         paraGraph.add(new Chunk(body, getBoldFont()));
1104         paraGraph.setAlignment(Element.ALIGN_CENTER);
1105         paraGraph.add(Chunk.NEWLINE);
1106         paraGraph.add(Chunk.NEWLINE);
1107         document.add(paraGraph);
1108     }
1109 
1110     private void getPdfTemplateFooter(OleNoticeBo noticeBo, Document document) throws Exception {
1111         if (LOG.isDebugEnabled()){
1112             LOG.debug("Footer for the notice : " + noticeBo.getNoticeName() + noticeBo.getItemId());
1113         }
1114         SimpleDateFormat dateFormat = new SimpleDateFormat(OLEConstants.DATEFORMAT);
1115         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
1116         Paragraph paraGraph = new Paragraph();
1117         paraGraph.add(new Chunk("Title/item information", getBoldFont()));
1118         paraGraph.add(Chunk.NEWLINE);
1119         paraGraph.add(Chunk.NEWLINE);
1120         document.add(paraGraph);
1121         PdfPTable pdfTable = new PdfPTable(3);
1122         pdfTable.setWidths(new int[]{20,2,30});
1123         if (noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_RECALL) || noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.OleDeliverRequest.EXPIRED_REQUEST)) {
1124             String circulationLocation = null;
1125             String circulationReplyToEmail = null;
1126             OleCirculationDesk oleCirculationDesk = getLoanProcessor().getCirculationDesk(noticeBo.getItemShelvingLocation());
1127             if (oleCirculationDesk != null) {
1128                 circulationLocation = oleCirculationDesk.getCirculationDeskPublicName();
1129                 if (StringUtils.isNotBlank(oleCirculationDesk.getReplyToEmail())) {
1130                     circulationReplyToEmail = oleCirculationDesk.getReplyToEmail();
1131                 } else {
1132                     circulationReplyToEmail = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1133                 }
1134             } else {
1135                 circulationLocation = getLoanProcessor().getParameter(OLEParameterConstants.DEFAULT_CIRCULATION_DESK);
1136                 circulationReplyToEmail = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1137             }
1138             pdfTable.addCell(getPdfPCellInJustified("Circulation Location / Library Name"));
1139             pdfTable.addCell(getPdfPCellInLeft(":"));
1140             pdfTable.addCell(getPdfPCellInJustified(circulationLocation));
1141 
1142             pdfTable.addCell(getPdfPCellInJustified("Circulation Reply-To Email"));
1143             pdfTable.addCell(getPdfPCellInLeft(":"));
1144             pdfTable.addCell(getPdfPCellInJustified(circulationReplyToEmail));
1145 
1146         } else if (noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_ONHOLD) || noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_HOLD_COURTESY)) {
1147             pdfTable.addCell(getPdfPCellInJustified("Circulation Location / Library Name"));
1148             pdfTable.addCell(getPdfPCellInLeft(":"));
1149             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getCirculationDeskName() != null ? noticeBo.getCirculationDeskName() : "")));
1150 
1151             pdfTable.addCell(getPdfPCellInJustified("Circulation Reply-To Email"));
1152             pdfTable.addCell(getPdfPCellInLeft(":"));
1153             pdfTable.addCell(getPdfPCellInJustified((StringUtils.isNotBlank(noticeBo.getCirculationDeskReplyToEmail()) ? noticeBo.getCirculationDeskReplyToEmail() : getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL))));
1154         }
1155         pdfTable.addCell(getPdfPCellInJustified("Title"));
1156         pdfTable.addCell(getPdfPCellInLeft(":"));
1157         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getTitle() == null ? "" : noticeBo.getTitle())));
1158 
1159         pdfTable.addCell(getPdfPCellInJustified("Author"));
1160         pdfTable.addCell(getPdfPCellInLeft(":"));
1161         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getAuthor() == null ? "" : noticeBo.getAuthor())));
1162 
1163 
1164         pdfTable.addCell(getPdfPCellInJustified("Volume/Issue/Copy # "));
1165         pdfTable.addCell(getPdfPCellInLeft(":"));
1166         if(!noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_RECALL)){
1167             pdfTable.addCell(getPdfPCellInJustified(noticeBo.getVolumeNumber() == null ? "" : noticeBo.getVolumeNumber()));
1168         }else{
1169             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getVolumeIssueCopyNumber() == null ? "" : noticeBo.getVolumeIssueCopyNumber())));
1170         }
1171 
1172 
1173         pdfTable.addCell(getPdfPCellInJustified("Library shelving location "));
1174         pdfTable.addCell(getPdfPCellInLeft(":"));
1175         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getItemShelvingLocation() == null ? "" : noticeBo.getItemShelvingLocation())));
1176 
1177 
1178         pdfTable.addCell(getPdfPCellInJustified("Call #"));
1179         pdfTable.addCell(getPdfPCellInLeft(":"));
1180         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getItemCallNumber() == null ? "" : noticeBo.getItemCallNumber())));
1181 
1182 
1183         pdfTable.addCell(getPdfPCellInJustified("Item barcode"));
1184         pdfTable.addCell(getPdfPCellInLeft(":"));
1185         pdfTable.addCell(getPdfPCellInJustified((noticeBo.getItemId() == null ? "" : noticeBo.getItemId())));
1186 
1187         if (noticeBo.getExpiredOnHoldDate() != null) {
1188             pdfTable.addCell(getPdfPCellInJustified("Hold Expiration Date"));
1189             pdfTable.addCell(getPdfPCellInLeft(":"));
1190             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getExpiredOnHoldDate() == null ? "" : dateFormat.format(noticeBo.getExpiredOnHoldDate()))));
1191 
1192         }
1193         document.add(pdfTable);
1194         paraGraph = new Paragraph();
1195         paraGraph.add(Chunk.NEWLINE);
1196         document.add(paraGraph);
1197 
1198         if (noticeBo.getNoticeName().equals(OLEConstants.NOTICE_RECALL)) {
1199             if (LOG.isDebugEnabled()){
1200                 LOG.debug("Recall Notice Footer Content : " + noticeBo.getNoticeName() + noticeBo.getItemId());
1201             }
1202             pdfTable = new PdfPTable(3);
1203             pdfTable.setWidths(new int[]{20,2,30});
1204 
1205             pdfTable.addCell(getPdfPCellInJustified("Original Due Date"));
1206             pdfTable.addCell(getPdfPCellInLeft(":"));
1207             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getOriginalDueDate() == null ? "" : sdf.format(noticeBo.getOriginalDueDate()))));
1208 
1209 
1210             pdfTable.addCell(getPdfPCellInJustified("New Due Date"));
1211             pdfTable.addCell(getPdfPCellInLeft(":"));
1212             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getNewDueDate() == null ? "" : sdf.format(noticeBo.getNewDueDate()))));
1213 
1214             document.add(pdfTable);
1215             paraGraph = new Paragraph();
1216             paraGraph.add(Chunk.NEWLINE);
1217             document.add(paraGraph);
1218         } else if (noticeBo.getNoticeName().equals("OnHold")) {
1219             if (LOG.isDebugEnabled()){
1220                 LOG.debug("OnHold Notice Footer Content : " + noticeBo.getNoticeName() + noticeBo.getItemId());
1221             }
1222             pdfTable = new PdfPTable(3);
1223             pdfTable.setWidths(new int[]{20,2,30});
1224 
1225             pdfTable.addCell(getPdfPCellInJustified("Pick Up Location"));
1226             pdfTable.addCell(getPdfPCellInLeft(":"));
1227             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getPickUpLocation() != null ? noticeBo.getPickUpLocation() : "")));
1228 
1229             pdfTable.addCell(getPdfPCellInJustified("Circulation Location / Library Name"));
1230             pdfTable.addCell(getPdfPCellInLeft(":"));
1231             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getCirculationDeskName() != null ? noticeBo.getCirculationDeskName() : "")));
1232 
1233 
1234             pdfTable.addCell(getPdfPCellInJustified("Address"));
1235             pdfTable.addCell(getPdfPCellInLeft(":"));
1236             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getPatronAddress() != null ? noticeBo.getPatronAddress() : "")));
1237 
1238 
1239             pdfTable.addCell(getPdfPCellInJustified("Email"));
1240             pdfTable.addCell(getPdfPCellInLeft(":"));
1241             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getPatronEmailAddress() != null ? noticeBo.getPatronEmailAddress() : "")));
1242 
1243 
1244             pdfTable.addCell(getPdfPCellInJustified("Phone #"));
1245             pdfTable.addCell(getPdfPCellInLeft(":"));
1246             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getPatronPhoneNumber() != null ? noticeBo.getPatronPhoneNumber() : "")));
1247 
1248             document.add(pdfTable);
1249             paraGraph = new Paragraph();
1250             paraGraph.add(Chunk.NEWLINE);
1251             document.add(paraGraph);
1252             pdfTable = new PdfPTable(3);
1253             pdfTable.setWidths(new int[]{20,2,30});
1254 
1255             pdfTable.addCell(getPdfPCellInJustified("Item Will Be Held until"));
1256             pdfTable.addCell(getPdfPCellInLeft(":"));
1257             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getExpiredOnHoldDate() != null ? dateFormat.format(noticeBo.getExpiredOnHoldDate().toString()) : "")));
1258 
1259             document.add(pdfTable);
1260             paraGraph = new Paragraph();
1261             paraGraph.add(Chunk.NEWLINE);
1262             document.add(paraGraph);
1263         } else if (noticeBo.getNoticeName().equals("OverdueNotice")) {
1264             if (LOG.isDebugEnabled()){
1265                 LOG.debug("OverdueNotice Footer Content : " + noticeBo.getNoticeName() + noticeBo.getItemId());
1266             }
1267             pdfTable = new PdfPTable(3);
1268             pdfTable.setWidths(new int[]{20,2,30});
1269 
1270             pdfTable.addCell(getPdfPCellInJustified("Item was due"));
1271             pdfTable.addCell(getPdfPCellInLeft(":"));
1272             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getDueDate() == null ? "" : (sdf.format(noticeBo.getDueDate())))));
1273 
1274             document.add(pdfTable);
1275             paraGraph = new Paragraph();
1276             paraGraph.add(Chunk.NEWLINE);
1277             document.add(paraGraph);
1278         }
1279 
1280     }
1281 
1282     public void getPdfFooter(Document document, OutputStream outputStream) throws Exception {
1283         String url = ConfigContext.getCurrentContextConfig().getProperty("ole.fs.url.base");
1284        // String myAccountURL = loanProcessor.getParameter(OLEConstants.MY_ACCOUNT_URL);
1285         String myAccountURL = url+OLEConstants.OLE_MY_ACCOUNT_URL_CHANNEL+url+OLEConstants.OLE_MY_ACCOUNT_URL;
1286         if(myAccountURL!=null && !myAccountURL.trim().isEmpty()){
1287             Font ver_15_normal = FontFactory.getFont("Times-Roman", 15, Font.BOLD,BaseColor.BLUE);
1288             ver_15_normal.setColor(BaseColor.BLUE);
1289             ver_15_normal.setStyle(Font.UNDERLINE);
1290             Anchor anchor = new Anchor("MyAccount", ver_15_normal);
1291             anchor.setReference(myAccountURL);
1292             Paragraph paraGraph = new Paragraph();
1293             paraGraph.add(anchor);
1294             paraGraph.setFont(ver_15_normal);
1295             paraGraph.setAlignment(Element.ALIGN_CENTER);
1296             document.add(paraGraph);
1297         }
1298         outputStream.flush();
1299         document.close();
1300         outputStream.close();
1301     }
1302 
1303     public void getPdfPickUpNotice(OleNoticeBo noticeBo) throws Exception{
1304         if (LOG.isDebugEnabled()){
1305             LOG.debug("PickUp notice : " + noticeBo.getNoticeName() + noticeBo.getItemId());
1306         }
1307         Document document = new Document(PageSize.A4);
1308         OutputStream outputStream = null;
1309         outputStream = getPdfHeader(document, outputStream,getLoanProcessor().getParameter(OLEParameterConstants.PICKUP_TITLE), noticeBo.getItemId());
1310         document.setPageCount(3);
1311         PdfPTable pdfTable = new PdfPTable(1);
1312 
1313         pdfTable.addCell(getPdfPCellNewLine());
1314         pdfTable.addCell(getPdfPCellInLeft((noticeBo.getPatronName() != null) ? noticeBo.getPatronName().toString() : ""));
1315         pdfTable.addCell(getPdfPCellInLeft((noticeBo.getPatronAddress() != null) ? noticeBo.getPatronAddress().toString() : ""));
1316         pdfTable.addCell(getPdfPCellInLeft((noticeBo.getPatronEmailAddress() != null) ? noticeBo.getPatronEmailAddress().toString() : ""));
1317         pdfTable.addCell(getPdfPCellInLeft((noticeBo.getPatronPhoneNumber() != null) ? noticeBo.getPatronPhoneNumber().toString() : ""));
1318 
1319         document.add(pdfTable);
1320 
1321         pdfTable = new PdfPTable(1);
1322         pdfTable.setWidths(new int[]{10});
1323 
1324         pdfTable.addCell(getPdfPCellInCenter(noticeBo.getNoticeName(),getBoldFont()));
1325         pdfTable.addCell(getPdfPCellNewLine());
1326         pdfTable.addCell(getPdfPCellInLeft(noticeBo.getNoticeSpecificContent()));
1327         pdfTable.addCell(getPdfPCellNewLine());
1328         pdfTable.addCell(getPdfPCellInLeft("Thank you."));
1329 
1330         document.add(pdfTable);
1331 
1332 
1333         document.add(getPdfParagraphNewLine());
1334 
1335         PdfPTable pdfItemTable = new PdfPTable(3);
1336         pdfItemTable.setWidths(new int[]{10,2,30});
1337 
1338         String author=((noticeBo.getAuthor() != null) ? noticeBo.getAuthor().toString() : "");
1339         String title=((noticeBo.getTitle() != null) ? noticeBo.getTitle().toString() : "");
1340         String callNumber=((noticeBo.getItemCallNumber()!=null)?noticeBo.getItemCallNumber().toString():"");
1341 
1342         pdfItemTable.addCell(getPdfPCellInJustified("Circulation Location / Library Name"));
1343         pdfItemTable.addCell(getPdfPCellInLeft(":"));
1344         pdfItemTable.addCell(getPdfPCellInJustified((noticeBo.getCirculationDeskName() != null ? noticeBo.getCirculationDeskName() : "")));
1345 
1346         pdfItemTable.addCell(getPdfPCellInJustified("Circulation Reply-To Email"));
1347         pdfItemTable.addCell(getPdfPCellInLeft(":"));
1348         pdfItemTable.addCell(getPdfPCellInJustified((StringUtils.isNotBlank(noticeBo.getCirculationDeskReplyToEmail()) ? noticeBo.getCirculationDeskReplyToEmail() : getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL))));
1349 
1350         pdfItemTable.addCell(getPdfPCellInLeft("Title"));
1351         pdfItemTable.addCell(getPdfPCellInLeft(":"));
1352         pdfItemTable.addCell(getPdfPCellInJustified(title));
1353 
1354         pdfItemTable.addCell(getPdfPCellInLeft("Author"));
1355         pdfItemTable.addCell(getPdfPCellInLeft(":"));
1356         pdfItemTable.addCell(getPdfPCellInJustified(author));
1357 
1358         pdfItemTable.addCell(getPdfPCellInLeft("Call Number"));
1359         pdfItemTable.addCell(getPdfPCellInLeft(":"));
1360         pdfItemTable.addCell(getPdfPCellInJustified(callNumber));
1361 
1362         document.add(pdfItemTable);
1363 
1364         document.close();
1365         outputStream.close();
1366 
1367     }
1368 
1369     public void getPdfTemplateFooterList(java.util.List<OleNoticeBo> oleNoticeBoList, Document document) throws Exception {
1370 
1371         SimpleDateFormat dateFormat = new SimpleDateFormat(OLEConstants.DATEFORMAT);
1372         SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
1373         int count = 0;
1374         for (OleNoticeBo noticeBo : oleNoticeBoList) {
1375             if (LOG.isDebugEnabled()){
1376                 LOG.debug("Footer for the notice : " + noticeBo.getNoticeName() + noticeBo.getItemId());
1377             }
1378             Paragraph paraGraph = new Paragraph();
1379             if (count == 0) {
1380                 paraGraph.add(new Chunk("Title/item information", getBoldFont()));
1381             }
1382             paraGraph.add(Chunk.NEWLINE);
1383             paraGraph.add(Chunk.NEWLINE);
1384             document.add(paraGraph);
1385             PdfPTable pdfTable = new PdfPTable(3);
1386             pdfTable.setWidths(new int[]{20, 2, 30});
1387             PdfPCell pdfPCell;
1388             if (!noticeBo.getNoticeName().equalsIgnoreCase(OLEConstants.NOTICE_RECALL)) {
1389 
1390                 pdfTable.addCell(getPdfPCellInJustified("Circulation Location / Library Name"));
1391                 pdfTable.addCell(getPdfPCellInLeft(":"));
1392                 pdfTable.addCell(getPdfPCellInJustified((noticeBo.getCirculationDeskName() != null ? noticeBo.getCirculationDeskName() : "")));
1393 
1394             }
1395 
1396             pdfTable.addCell(getPdfPCellInJustified("Title"));
1397             pdfTable.addCell(getPdfPCellInLeft(":"));
1398             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getTitle() == null ? "" : noticeBo.getTitle())));
1399 
1400 
1401             pdfTable.addCell(getPdfPCellInJustified("Author"));
1402             pdfTable.addCell(getPdfPCellInLeft(":"));
1403             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getAuthor() == null ? "" : noticeBo.getAuthor())));
1404 
1405 
1406             pdfTable.addCell(getPdfPCellInJustified("Volume/Issue/Copy # "));
1407             pdfTable.addCell(getPdfPCellInLeft(":"));
1408             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getVolumeNumber() == null ? "" : noticeBo.getVolumeNumber())));
1409 
1410 
1411             pdfTable.addCell(getPdfPCellInJustified("Library shelving location"));
1412             pdfTable.addCell(getPdfPCellInLeft(":"));
1413             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getItemShelvingLocation() == null ? "" : noticeBo.getItemShelvingLocation())));
1414 
1415 
1416 
1417             pdfTable.addCell(getPdfPCellInJustified("Call # "));
1418             pdfTable.addCell(getPdfPCellInLeft(":"));
1419             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getItemCallNumber() == null ? "" : noticeBo.getItemCallNumber())));
1420 
1421 
1422 
1423             pdfTable.addCell(getPdfPCellInJustified("Item barcode"));
1424             pdfTable.addCell(getPdfPCellInLeft(":"));
1425             pdfTable.addCell(getPdfPCellInJustified((noticeBo.getItemId() == null ? "" : noticeBo.getItemId())));
1426 
1427             if (noticeBo.getExpiredOnHoldDate() != null) {
1428 
1429                 pdfTable.addCell(getPdfPCellInJustified("Expiration onHoldDate"));
1430                 pdfTable.addCell(getPdfPCellInLeft(":"));
1431                 pdfTable.addCell(getPdfPCellInJustified((noticeBo.getExpiredOnHoldDate() == null ? "" : dateFormat.format(noticeBo.getExpiredOnHoldDate()))));
1432 
1433             }
1434             document.add(pdfTable);
1435             paraGraph = new Paragraph();
1436             paraGraph.add(Chunk.NEWLINE);
1437             document.add(paraGraph);
1438             if (noticeBo.getNoticeName().equals("OverdueNotice")) {
1439                 if (LOG.isDebugEnabled()){
1440                     LOG.debug("OverdueNotice Footer Content : " + noticeBo.getNoticeName() + noticeBo.getItemId());
1441                 }
1442                 pdfTable = new PdfPTable(3);
1443                 pdfTable.setWidths(new int[]{20, 2, 30});
1444 
1445                 pdfTable.addCell(getPdfPCellInJustified("Item was due"));
1446                 pdfTable.addCell(getPdfPCellInLeft(":"));
1447                 pdfTable.addCell(getPdfPCellInJustified((noticeBo.getDueDate() == null ? "" : (sdf.format(noticeBo.getDueDate()).toString()))));
1448 
1449                 document.add(pdfTable);
1450                 paraGraph = new Paragraph();
1451                 paraGraph.add(Chunk.NEWLINE);
1452                 document.add(paraGraph);
1453             }
1454             count++;
1455         }
1456     }
1457 
1458     public void getHeaderAndPatronPDFContent(OlePatronDocument olePatronDocument,boolean isOverdue){
1459         Document document = new Document(PageSize.A4);
1460         OutputStream outputStream=null;
1461         try {
1462             String title = getLoanProcessor().getParameter(OLEParameterConstants.OVERDUE_TITLE);
1463             String body = getLoanProcessor().getParameter(OLEConstants.OleDeliverRequest.OVERDUE_NOTICE_CONTENT);
1464             if(!isOverdue){
1465                 title=loanProcessor.getParameter(OLEParameterConstants.COURTESY_TITLE);
1466                 body=loanProcessor.getParameter(OLEConstants.OleDeliverRequest.COURTESY_NOTICE_CONTENT);
1467             }
1468             outputStream = getPdfHeader(document, outputStream, title, olePatronDocument.getOlePatronId());
1469             OleDeliverRequestDocumentHelperServiceImpl deliverService = new OleDeliverRequestDocumentHelperServiceImpl();
1470             EntityTypeContactInfoBo entityTypeContactInfoBo = olePatronDocument.getEntity().getEntityTypeContactInfos().get(0);
1471             Paragraph paraGraph = new Paragraph();
1472             paraGraph.add(Chunk.NEWLINE);
1473             document.add(paraGraph);
1474             paraGraph = new Paragraph();
1475             paraGraph.add(new Chunk("Patron information", getBoldFont()));
1476             paraGraph.add(Chunk.NEWLINE);
1477             paraGraph.add(Chunk.NEWLINE);
1478             document.add(paraGraph);
1479 
1480             PdfPTable pdfTable = new PdfPTable(3);
1481             pdfTable.setWidths(new int[]{20, 2, 30});
1482 
1483             pdfTable.addCell(getPdfPCellInJustified("Patron Name"));
1484             pdfTable.addCell(getPdfPCellInLeft(":"));
1485             pdfTable.addCell(getPdfPCellInJustified((olePatronDocument.getEntity().getNames().get(0).getFirstName() + " " + olePatronDocument.getEntity().getNames().get(0).getLastName())));
1486 
1487 
1488             pdfTable.addCell(getPdfPCellInJustified("Address"));
1489             pdfTable.addCell(getPdfPCellInLeft(":"));
1490             pdfTable.addCell(getPdfPCellInJustified((deliverService.getPatronPreferredAddress(entityTypeContactInfoBo) != null ? deliverService.getPatronPreferredAddress(entityTypeContactInfoBo) : "")));
1491 
1492 
1493 
1494             pdfTable.addCell(getPdfPCellInJustified("Email"));
1495             pdfTable.addCell(getPdfPCellInLeft(":"));
1496             pdfTable.addCell(getPdfPCellInJustified((deliverService.getPatronHomeEmailId(entityTypeContactInfoBo) != null ? deliverService.getPatronHomeEmailId(entityTypeContactInfoBo) : "")));
1497 
1498             pdfTable.addCell(getPdfPCellInJustified("Phone #"));
1499             pdfTable.addCell(getPdfPCellInLeft(":"));
1500             pdfTable.addCell(getPdfPCellInJustified((deliverService.getPatronHomePhoneNumber(entityTypeContactInfoBo) != null ? deliverService.getPatronHomePhoneNumber(entityTypeContactInfoBo) : "")));
1501 
1502             document.add(pdfTable);
1503             paraGraph = new Paragraph();
1504             paraGraph.add(Chunk.NEWLINE);
1505             document.add(paraGraph);
1506 
1507 
1508             getPdfTemplateBody(document, title, body);
1509             paraGraph = new Paragraph();
1510             paraGraph.add(new Chunk("Title/item information", getBoldFont()));
1511             paraGraph.add(Chunk.NEWLINE);
1512             paraGraph.add(Chunk.NEWLINE);
1513             document.add(paraGraph);
1514             this.setOverdueDocument(document);
1515             this.setOverdueOutPutStream(outputStream);
1516         } catch (Exception e) {
1517             LOG.error("Error---->While generating overdue notice pdf (Patron Information) "+e.getMessage()+e);
1518         }
1519 
1520     }
1521 
1522     public Document getOverdueNoticePDFContent(OleLoanDocument oleLoanDocument, boolean isOverdue, Document document) {
1523         try {
1524             Paragraph paraGraph = new Paragraph();
1525             OleDeliverRequestDocumentHelperServiceImpl deliverService = new OleDeliverRequestDocumentHelperServiceImpl();
1526             SimpleDateFormat sdf = new SimpleDateFormat(RiceConstants.SIMPLE_DATE_FORMAT_FOR_DATE+" "+RiceConstants.SIMPLE_DATE_FORMAT_FOR_TIME);
1527             PdfPTable pdfTable = new PdfPTable(3);
1528             pdfTable.setWidths(new int[]{20, 2, 30});
1529 
1530             String circulationLocation = null;
1531             String circulationReplyToEmail = null;
1532             OleCirculationDesk oleCirculationDesk = getLoanProcessor().getCirculationDesk(oleLoanDocument.getItemLocation());
1533             if (oleCirculationDesk != null) {
1534                 circulationLocation = oleCirculationDesk.getCirculationDeskPublicName();
1535                 if (StringUtils.isNotBlank(oleCirculationDesk.getReplyToEmail())) {
1536                     circulationReplyToEmail = oleCirculationDesk.getReplyToEmail();
1537                 } else {
1538                     circulationReplyToEmail = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1539                 }
1540             } else {
1541                 circulationLocation = getLoanProcessor().getParameter(OLEParameterConstants.DEFAULT_CIRCULATION_DESK);
1542                 circulationReplyToEmail = getLoanProcessor().getParameter(OLEParameterConstants.NOTICE_FROM_MAIL);
1543             }
1544 
1545             pdfTable.addCell(getPdfPCellInJustified("Circulation Location / Library Name"));
1546             pdfTable.addCell(getPdfPCellInLeft(":"));
1547             pdfTable.addCell(getPdfPCellInJustified(circulationLocation));
1548 
1549             pdfTable.addCell(getPdfPCellInJustified("Circulation Reply-To Email"));
1550             pdfTable.addCell(getPdfPCellInLeft(":"));
1551             pdfTable.addCell(getPdfPCellInJustified(circulationReplyToEmail));
1552 
1553             pdfTable.addCell(getPdfPCellInJustified("Title"));
1554             pdfTable.addCell(getPdfPCellInLeft(":"));
1555             pdfTable.addCell(getPdfPCellInJustified((oleLoanDocument.getTitle() == null ? "" : oleLoanDocument.getTitle())));
1556 
1557             pdfTable.addCell(getPdfPCellInJustified("Author"));
1558             pdfTable.addCell(getPdfPCellInLeft(":"));
1559             pdfTable.addCell(getPdfPCellInJustified((oleLoanDocument.getAuthor() == null ? "" : oleLoanDocument.getAuthor())));
1560 
1561             String volume = (String) oleLoanDocument.getEnumeration() != null && !oleLoanDocument.getEnumeration().equals("") ? oleLoanDocument.getEnumeration() : "";
1562             String issue = new String(" ");
1563             String copyNumber = (String) oleLoanDocument.getItemCopyNumber() != null && !oleLoanDocument.getItemCopyNumber().equals("") ? oleLoanDocument.getItemCopyNumber(): "";
1564             String volumeNumber = volume + "/" + issue + "/" + copyNumber;
1565 
1566             pdfTable.addCell(getPdfPCellInJustified("Volume/Issue/Copy #"));
1567             pdfTable.addCell(getPdfPCellInLeft(":"));
1568             pdfTable.addCell(getPdfPCellInJustified((volumeNumber == null ? "" : volumeNumber)));
1569 
1570             pdfTable.addCell(getPdfPCellInJustified("Library shelving location "));
1571             pdfTable.addCell(getPdfPCellInLeft(":"));
1572             pdfTable.addCell(getPdfPCellInJustified((oleLoanDocument.getItemLocation() == null ? "" : oleLoanDocument.getItemLocation())));
1573 
1574             String callNumber = "";
1575             if (oleLoanDocument.getItemCallNumber() != null && !oleLoanDocument.getItemCallNumber().equals("")) {
1576                 callNumber = (String) (oleLoanDocument.getItemCallNumber() != null && !oleLoanDocument.getItemCallNumber().equals("") ? oleLoanDocument.getItemCallNumber() : "");
1577             }
1578             pdfTable.addCell(getPdfPCellInJustified("Call # "));
1579             pdfTable.addCell(getPdfPCellInLeft(":"));
1580             pdfTable.addCell(getPdfPCellInJustified((callNumber == null ? "" : callNumber)));
1581 
1582             pdfTable.addCell(getPdfPCellInJustified("Item barcode"));
1583             pdfTable.addCell(getPdfPCellInLeft(":"));
1584             pdfTable.addCell(getPdfPCellInJustified((oleLoanDocument.getItemId() == null ? "" : oleLoanDocument.getItemId())));
1585 
1586             document.add(pdfTable);
1587             paraGraph = new Paragraph();
1588             paraGraph.add(Chunk.NEWLINE);
1589             document.add(paraGraph);
1590 
1591             pdfTable = new PdfPTable(3);
1592             pdfTable.setWidths(new int[]{20, 2, 30});
1593 
1594             pdfTable.addCell(getPdfPCellInJustified("Item was due"));
1595             pdfTable.addCell(getPdfPCellInLeft(":"));
1596             pdfTable.addCell(getPdfPCellInJustified((oleLoanDocument.getLoanDueDate() == null ? "" : (sdf.format(oleLoanDocument.getLoanDueDate()).toString()))));
1597 
1598             document.add(pdfTable);
1599             paraGraph = new Paragraph();
1600             paraGraph.add(Chunk.NEWLINE);
1601             document.add(paraGraph);
1602 
1603         } catch (Exception e) {
1604             LOG.error("Error---->While generating overdue notice pdf  ");
1605             if(oleLoanDocument!=null){
1606                 LOG.error("Error---->Item Barcode "+oleLoanDocument.getItemId());
1607             }
1608             LOG.error(e.getMessage()+e);
1609         }
1610         return document;
1611     }
1612 
1613     public boolean cleanZeroByteFiles() {
1614         boolean isFileDeleted=false;
1615         String pdfLocationSystemParam = getLoanProcessor().getParameter(OLEParameterConstants.PDF_LOCATION);
1616         if (LOG.isDebugEnabled()) {
1617             LOG.debug("System Parameter for PDF_Location --> " + pdfLocationSystemParam);
1618         }
1619         if (pdfLocationSystemParam == null || pdfLocationSystemParam.trim().isEmpty()) {
1620             pdfLocationSystemParam = ConfigContext.getCurrentContextConfig().getProperty("staging.directory") + "/";
1621             if (LOG.isDebugEnabled()) {
1622                 LOG.debug("System Parameter for PDF_Location staging dir--> " + pdfLocationSystemParam);
1623             }
1624         } else {
1625             pdfLocationSystemParam = ConfigContext.getCurrentContextConfig().getProperty("homeDirectory") + "/" + pdfLocationSystemParam + "/";
1626         }
1627         File file=new File(pdfLocationSystemParam);
1628         boolean locationExist = file.exists();
1629         if(locationExist){
1630             try {
1631                 File folder = new File(pdfLocationSystemParam);
1632                 File[] listOfFiles = folder.listFiles();
1633                 for (File file1 : listOfFiles) {
1634                     if (file1.isFile() && file1.length()==0) {
1635                         file1.delete();
1636                     }
1637                 }
1638             }  catch (Exception e) {
1639 
1640                LOG.error("Error in deleting the file"+e.getMessage());
1641             }
1642         }
1643        return isFileDeleted;
1644     }
1645 
1646 }