1    package com.instantbank.lettertemplate.control.web.handlers;
2    
3    import java.util.HashMap;
4    import java.util.ArrayList;
5    import java.util.Enumeration;
6    import java.util.Locale;
7    import java.util.Hashtable;
8    import java.io.IOException;
9    
10   import javax.servlet.http.HttpServletRequest;
11   import javax.servlet.ServletContext;
12   import javax.servlet.ServletException;
13   import javax.servlet.ServletOutputStream;
14   import javax.servlet.http.HttpSession;
15   
16   import oracle.xml.parser.v2.*;
17   import org.w3c.dom.*;
18   import org.xml.sax.*;
19   
20   // for working with JMS:
21   import javax.jms.Message;
22   import javax.jms.JMSException;
23   
24   import com.instantbank.lettertemplate.control.event.BatchStartEvent;
25   import com.instantbank.lettertemplate.control.util.JSPUtil;
26   import com.instantbank.lettertemplate.control.util.WebKeys;
27   import com.instantbank.common.utilcomponents.Debug;
28   import com.instantbank.common.utilcomponents.CommonUtil;
29   import com.instantbank.common.utilcomponents.JNDINames;
30   import com.instantbank.common.utilcomponents.LetterTemplateExceptionMessage;
31   import com.instantbank.lettertemplate.control.LetterTemplateEventException;
32   import com.instantbank.lettertemplate.control.event.LetterTemplateEvent;
33   import com.instantbank.component.lettertemplate.util.*;
34   import com.instantbank.common.utilcomponents.LetterTemplateGlobals;
35   import com.instantbank.component.lettersjobmdb.util.MessageSender;
36   
37   /**
38    *  Letter Batch Start usecase: handler of user requests in the Application
39    *  layer
40    *
41    * @author Instant-bank (Jorge Cardenas)
42    * @created November 2002
43    */
44   public class BatchStartHandler extends RequestHandlerSupport {
45   
46     private Debug debug = null;
47     ServletContext context;
48     private boolean gotoDB;
49   
50   
51     /**
52      *  principal method that process a user request instantiating a
53      *  BatchStartEvent with the user request data
54      *
55      * @param request of MainServlet
56      * @param context of MainServlet
57      * @return BatchStartEvent with the user request data
58      * @exception LetterTemplateEventException
59      */
60     public LetterTemplateEvent processRequest(HttpServletRequest request,
61                                               ServletContext context)
62        throws LetterTemplateEventException {
63       debug = new Debug();
64       debug.setDebugginOn(true);
65       debug.setPreMessage("** BatchStartHandler-application tier: ");
66   
67       this.context = context;
68       HttpSession session = request.getSession();
69       String action = request.getParameter("action");
70       debug.println("Creation of an BatchStartEvent; "
71         + "BatchStartHandler (web): action=" + action);
72   
73       if(action == null) {
74         throw new LetterTemplateEventException
75           (LetterTemplateExceptionMessage.SERVICE_NOT_SELECTED);
76       }
77       else if(action.equals("listBatchStart")) {
78         return createListBatchStartEvent(request);
79       }
80       else if(action.equals("updateBatchStart")) {
81         createUpdateBatchStartEvent(request);
82       }
83       return null;
84     }
85   
86   
87     /**
88      * method for instantiating a BatchStartEvent demanding a service of
89      * getting the letter batch start
90      *
91      * @param request of MainServlet
92      * @return BatchStartEvent with the user request data
93      * @throws LetterTemplateEventException Description of the Exception
94      */
95     private LetterTemplateEvent createListBatchStartEvent
96       (HttpServletRequest request)
97        throws LetterTemplateEventException {
98   
99       HttpSession session = request.getSession();
100      session.setAttribute(WebKeys.BatchRun, "false");
101      session.setAttribute(WebKeys.NumberOfJobs, "0");
102  
103      try {
104  
105        // instantiating BatchStartEvent:
106        BatchStartEvent event
107           = new BatchStartEvent
108          (BatchStartEvent.LIST_BATCH_START,
109          (String)request.getSession()
110          .getAttribute(WebKeys.CompanyId),
111          (Long)request.getSession().
112          getAttribute(WebKeys.UserId),
113          null);
114  
115        request.setAttribute(WebKeys.BatchStartEvent, event);
116        return event;
117      }
118      catch(Exception e) {
119        throw new LetterTemplateEventException
120          (LetterTemplateExceptionMessage.PROBLEM_PARSING + e.getMessage()
121          + LetterTemplateExceptionMessage.RETRY);
122      }
123    }
124  
125  
126    /**
127     * method for instantiating a BatchStartEvent demanding a service of
128     * updating letter batch
129     *
130     * @param request of MainServlet
131     */
132    private void createUpdateBatchStartEvent
133      (HttpServletRequest request) {
134  
135      LetterBatchStartModel items = null;
136      HttpSession session = request.getSession();
137      String server = request.getServerName();
138      int port = request.getServerPort();
139      int found = 0;
140  
141      MessageSender mSender = null;
142  
143      try {
144  
145        Enumeration parameters = request.getParameterNames();
146  
147        while((parameters != null) && parameters.hasMoreElements()) {
148          String parameterName = new String(((String)parameters.nextElement()).trim());
149          String parameterValue = request.getParameter(parameterName);
150  
151          if(!parameterName.equals("action")) {
152  
153            //long id = Long.parseLong(parameterValue);
154            mSender =
155              new MessageSender(server, port, LetterTemplateGlobals.LETTERS_JOB_JMS_QUEUE);
156            String ctxProvider = mSender.getContextProviderUrl();
157            String initCtxFact = mSender.getInitContextFactory();
158  
159            String temporalPath = (String)request.getSession()
160              .getAttribute(WebKeys.ImagesTemporalPath);
161            /*String rtf2foConfDir = (String) request.getSession()
162                                  .getAttribute(WebKeys.RtfToFoConfigPath);*/
163            String companyId = (String)request.getSession()
164              .getAttribute(WebKeys.CompanyId);
165            Long userId = (Long)request.getSession()
166              .getAttribute(WebKeys.UserId);
167  
168            String maxZipSize =
169              CommonUtil.getApplicationProperty(JNDINames.ZipLettersFileMaxSize);
170            debug.println("maxZip = " + maxZipSize);
171  
172            Long jobId = new Long(parameterValue);
173  
174            Message jobMsg =
175              mSender.buildLetterJobMessage(
176              companyId, temporalPath,  /*rtf2foConfDir,*/userId, jobId,
177              ctxProvider, initCtxFact, maxZipSize);
178  
179            mSender.send(jobMsg);
180            found = found + 1;
181          }
182        }
183  
184        session.setAttribute(WebKeys.BatchRun, "true");
185        String value = Integer.toString(found);
186  
187        session.setAttribute(WebKeys.NumberOfJobs, value);
188  
189      }
190      catch(JMSException jex) {
191  
192        // Release JMS resources in reverse order of their creation.
193        try {
194          mSender.release();
195        }
196        catch(Exception ex) {
197          debug.println(CommonUtil.stackTraceToString(ex));
198        }
199      }
200    }
201  }
202  
203