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.Hashtable;
7    import java.util.StringTokenizer;
8    
9    import javax.servlet.http.HttpServletRequest;
10   import javax.servlet.http.HttpSession;
11   import javax.servlet.ServletContext;
12   
13   import com.instantbank.lettertemplate.control.event.SetLetterJobEvent;
14   import com.instantbank.lettertemplate.control.util.JSPUtil;
15   import com.instantbank.lettertemplate.control.util.WebKeys;
16   import com.instantbank.common.utilcomponents.Debug;
17   import com.instantbank.common.utilcomponents.CommonUtil;
18   import com.instantbank.common.utilcomponents.LetterTemplateGlobals;
19   import com.instantbank.lettertemplate.control.LetterTemplateEventException;
20   import com.instantbank.component.lettertemplate.util.Template;
21   import com.instantbank.lettertemplate.editor.web.TemplateTransformer;
22   
23   
24   /**
25    *  Set Letter Job usecase: flow handler for deciding output screen after
26    *  processing an action
27    *
28    * @author Instant-bank (Consuelo Franky)
29    * @created November 2002
30    */
31   public class SetLetterJobFlowHandler
32       implements FlowHandler {
33     private Debug debug = null;
34   
35   
36     /**
37      *  optional execution before processFlow method
38      *
39      * @param request HTTP request
40      */
41     public void doStart(HttpServletRequest request) { }
42   
43   
44     /**
45      *  principal method for deciding output screen after processing an action
46      *
47      * @param request of MainServlet
48      * @param answer of the action
49      * @param context web context
50      * @return String with the number of the  output screen
51      * @exception LetterTemplateEventException
52      */
53     public String processFlow(HttpServletRequest request, Object answer,
54                               ServletContext context)
55        throws LetterTemplateEventException {
56       debug = new Debug();
57       debug.setDebugginOn(true);
58       debug.setPreMessage("** SetLetterJobFlowHandler: ");
59       debug.println("processFlow");
60   
61       String nextScreen = null;
62       SetLetterJobEvent ce = null;
63       HttpSession session = request.getSession();
64   
65       String companyId
66          = (String)request.getSession().getAttribute(WebKeys.CompanyId);
67   
68       if(request.getAttribute(WebKeys.SetLetterJobEvent) != null) {
69         ce = (SetLetterJobEvent)request.getAttribute(WebKeys.SetLetterJobEvent);
70       }
71   
72       if(request.getAttribute(WebKeys.ExceptionOcurred) != null) {
73         nextScreen = "1";  // SETLETTERJOB_PROBLEM
74   
75       }
76   
77       else if(ce.getActionType() == SetLetterJobEvent.LIST_JOBS) {
78         // answer is an ArrayList with 5 elements:
79         // 0: company Letter Jobs List (CodeDescription[])
80         // 1: company ftp Locations List (CodeDescription[])
81         // 2: company fields (ArrayList)
82         // 3: system field menus with values (ArrayList)
83         // 4: letter templates descriptors (ArrayList)
84   
85         // puts variables in the web session :
86         session.setAttribute(WebKeys.LetterJobsList,
87           ((ArrayList)answer).get(0));
88         session.setAttribute(WebKeys.LocationsList,
89           ((ArrayList)answer).get(1));
90         session.setAttribute(WebKeys.CompanyFields,
91           ((ArrayList)answer).get(2));
92         session.setAttribute(WebKeys.FieldMenus,
93           ((ArrayList)answer).get(3));
94         session.setAttribute(WebKeys.TemplatesDescriptors,
95           ((ArrayList)answer).get(4));
96   
97         // clean attributes of jobView: javabean that is model view of Job EJB.
98         JobWebImpl jobView
99            = (JobWebImpl)session.getAttribute(WebKeys.JobModelKey);
100        jobView.clean();
101        nextScreen = "2";  // SETLETTERJOB_MAIN
102      }
103  
104      else if(ce.getActionType() == SetLetterJobEvent.GET_TEMPLATE_FIELDS
105        || ce.getActionType() == SetLetterJobEvent.GET_JOB
106        || ce.getActionType() == SetLetterJobEvent.SAVE_JOB) {
107        // answer is an ArrayList with 5 elements:
108        // 0: possible problem: String
109        // 1: selected letter template: Template
110        // 2: company Letter Jobs List (CodeDescription[])
111        // 3: company ftp Locations List (CodeDescription[])
112        // 4: letter templates descriptors (ArrayList)
113  
114        // refresh variables in the web session :
115        session.setAttribute(WebKeys.LetterJobsList,
116          ((ArrayList)answer).get(2));
117        session.setAttribute(WebKeys.LocationsList,
118          ((ArrayList)answer).get(3));
119        session.setAttribute(WebKeys.TemplatesDescriptors,
120          ((ArrayList)answer).get(4));
121        debug.println("WebKeys.TemplatesDescriptors refreshed in web session");
122  
123        // possible problem:
124        String problem = (String)(((ArrayList)answer).get(0));
125        if(problem.equals(LetterTemplateGlobals.STR_UNDEF)) {
126          Template templ = (Template)(((ArrayList)answer).get(1));
127          ArrayList[] setOfVars = templ.setOfVariables();
128          Long[] templateVarsCodes
129             = TemplateTransformer.varCodesFromSet(setOfVars);
130          // put letter template fields in the web request :
131          request.setAttribute(WebKeys.TemplateFields, templateVarsCodes);
132          debug.println("WebKeys.TemplateFields put in web request");
133          if(ce.getActionType() == SetLetterJobEvent.GET_TEMPLATE_FIELDS) {
134            request.setAttribute(WebKeys.NewJobTemplate, "true");
135          }
136  
137          nextScreen = "2";  // SETLETTERJOB_MAIN
138        }
139        else {
140          JSPUtil.putProblemInRequest(request, problem);
141          debug.println("JSPUtil.putProblemInRequest");
142          if(ce.getActionType() == SetLetterJobEvent.GET_TEMPLATE_FIELDS) {
143            // clean attributes of jobView: javabean that is model view of Job EJB.
144            JobWebImpl jobView
145               = (JobWebImpl)session.getAttribute(WebKeys.JobModelKey);
146            jobView.clean();
147          }
148          nextScreen = "1";  // SETLETTERJOB_PROBLEM
149        }
150      }
151  
152      else if(ce.getActionType() == SetLetterJobEvent.REMOVE_JOB) {
153        // answer is an ArrayList with 4 elements:
154        // 0: possible problem: String
155        // 1: company Letter Jobs List (CodeDescription[])
156        // 2: company ftp Locations List (CodeDescription[])
157        // 3: letter templates descriptors (ArrayList)
158  
159        // refresh variables in the web session :
160        session.setAttribute(WebKeys.LetterJobsList,
161          ((ArrayList)answer).get(1));
162        session.setAttribute(WebKeys.LocationsList,
163          ((ArrayList)answer).get(2));
164        session.setAttribute(WebKeys.TemplatesDescriptors,
165          ((ArrayList)answer).get(3));
166  
167        // possible problem:
168        String problem = (String)(((ArrayList)answer).get(0));
169        if(problem.equals(LetterTemplateGlobals.STR_UNDEF)) {  //success
170          // clean jobView :
171          JobWebImpl jobView
172             = (JobWebImpl)session.getAttribute(WebKeys.JobModelKey);
173          jobView.clean();
174          nextScreen = "2";  // SETLETTERJOB_MAIN
175        }
176        else {
177          JSPUtil.putProblemInRequest(request, problem);
178          nextScreen = "1";  // SETLETTERJOB_PROBLEM
179        }
180      }
181  
182      return nextScreen;
183    }
184  
185  
186    /**
187     *  optional execution after processFlow method
188     *
189     * @param request HTTP request
190     */
191    public void doEnd(HttpServletRequest request) { }
192  }
193  
194