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 javax.servlet.http.HttpServletRequest;
9    import javax.servlet.ServletContext;
10   import javax.servlet.http.HttpSession;
11   import java.io.*;
12   import java.util.*;
13   
14   import oracle.xml.parser.v2.*;
15   import org.w3c.dom.*;
16   import org.xml.sax.*;
17   
18   import com.instantbank.lettertemplate.control.event.ImagesRepositoryEvent;
19   import com.instantbank.lettertemplate.control.util.WebKeys;
20   import com.instantbank.common.uiutils.ByteArrayFromFile;
21   import com.instantbank.common.utilcomponents.Debug;
22   import com.instantbank.common.utilcomponents.LetterTemplateExceptionMessage;
23   import com.instantbank.lettertemplate.control.LetterTemplateEventException;
24   import com.instantbank.lettertemplate.control.event.LetterTemplateEvent;
25   
26   /**
27    *  Letter Images usecase: handler of user requests in the Application layer for
28    *  the action "Upload image"
29    *
30    * @author Instant-bank (Consuelo Franky - Jorge Cardenas)
31    * @created August 2002
32    */
33   public class ImageUploadHandler extends RequestHandlerSupport {
34     private Debug debug = null;
35     private MultipartRequest multi = null;
36     private String imagesTemporalPath = null;
37     ServletContext context;
38   
39   
40     /**
41      *  principal method that process a user request (corresponding to upload
42      *  image) instantiating a ImagesRepositoryEvent with the user request data
43      *
44      * @param request of MainServlet
45      * @param context of MainServlet
46      * @return ImagesRepositoryEvent with the user request data
47      * @exception LetterTemplateEventException
48      */
49     public LetterTemplateEvent processRequest(HttpServletRequest request,
50                                               ServletContext context)
51        throws LetterTemplateEventException {
52   
53       debug = new Debug();
54       debug.setDebugginOn(true);
55       debug.setPreMessage("** ImagesUploadHandler-application tier: ");
56   
57       try {
58         // This is the decoder class that extracts the parameters and transfers files
59         // imagesTemporalPath = temporal directory to save files in server side
60         // 15*1024*1024 = 15 mb max size file
61         HttpSession session = request.getSession();
62         imagesTemporalPath
63           = (String)session.getAttribute(WebKeys.ImagesTemporalPath);
64         debug.println("imagesTemporalPath=" + imagesTemporalPath);
65         multi = new MultipartRequest(request, imagesTemporalPath, 15 * 1024 * 1024);
66   
67         // Debugging: lists form parameters
68         debug.println("Params:");
69         Enumeration params = multi.getParameterNames();
70         while(params.hasMoreElements()) {
71           String name = (String)params.nextElement();
72           String value = multi.getParameter(name);
73           debug.println(name + " = " + value);
74         }
75   
76         String action = multi.getParameter("action");
77         debug.println("Creation of an ImagesRepository Event; "
78           + "ImagesUploadHandler (web): action=" + action);
79   
80         debug.println("ACTION====>" + action);
81   
82         if(action == null) {
83           throw new LetterTemplateEventException
84             (LetterTemplateExceptionMessage.SERVICE_NOT_SELECTED);
85         }
86         else if(action.equals("upload")) {
87           return createNewImagesRepositoryEvent(request);
88         }
89       }
90       catch(Exception e) {
91         throw new LetterTemplateEventException
92           (LetterTemplateExceptionMessage.PROBLEM_PARSING + e.getMessage()
93           + LetterTemplateExceptionMessage.RETRY);
94       }
95       return null;
96     }
97   
98   
99     /**
100     *  method for instantiating a ImagesRepositoryEvent demanding a service of new
101     *  image storage
102     *
103     * @param request of MainServlet
104     * @return ImagesRepositoryEvent with the user request data
105     * @exception LetterTemplateEventException
106     */
107    private LetterTemplateEvent createNewImagesRepositoryEvent
108      (HttpServletRequest request)
109       throws LetterTemplateEventException {
110      ArrayList missingFields = null;
111  
112      try {
113        // getting HTML parameters :
114        String imageName = multi.getParameter("txtName");
115        imageName = imageName.trim();
116        imageName = imageName.toLowerCase();
117        // Show details of uploaded file
118        debug.println("Files:");
119        String imageFile = null;
120        File f = null;
121        Enumeration files = multi.getFileNames();
122        if(files.hasMoreElements()) {
123          // only a file is expected
124          String name = (String)files.nextElement();
125          imageFile = multi.getFilesystemName(name);
126          String type = multi.getContentType(name);
127          debug.println("name: " + name);
128          debug.println("filename: " + imageFile);
129          debug.println("type: " + type);
130          f = multi.getFile(name);
131          if(f != null && (f.length() != 0)) {
132            debug.println("f.toString(): " + f.toString());
133            debug.println("f.getName(): " + f.getName());
134            debug.println("f.exists(): " + f.exists());
135            debug.println("f.length(): " + f.length());
136          }
137        }
138  
139        // get the image:
140        //debug.println("file with image=" + imagesTemporalPath + "/" + imageFile);
141        ByteArrayFromFile b
142           = new ByteArrayFromFile(new File(imagesTemporalPath, imageFile));
143        byte[] image = b.getBytes();
144  
145        // delete file from imagesTemporalPath:
146        f.delete();
147  
148        if(image.length == 0) {
149          throw new LetterTemplateEventException
150            (LetterTemplateExceptionMessage.PROBLEM_NO_SELECT_IMAGE);
151        }
152  
153        // instantiating ImagesRepositoryEvent:
154        ImagesRepositoryEvent event
155           = new ImagesRepositoryEvent
156          (ImagesRepositoryEvent.STORE_IMAGE,
157          (String)request.getSession().getAttribute(WebKeys.CompanyId),
158          (Long)request.getSession().getAttribute(WebKeys.UserId),
159          imageName,
160          image,
161          null);
162        request.setAttribute(WebKeys.ImagesRepositoryEvent, event);
163        return event;
164      }
165      catch(Exception e) {
166        throw new LetterTemplateEventException
167          (LetterTemplateExceptionMessage.PROBLEM_PARSING + e.getMessage()
168          + LetterTemplateExceptionMessage.RETRY);
169      }
170    }
171  }
172  
173