Author: lukaszlenart
Date: Thu Apr  8 17:01:16 2010
New Revision: 932009

URL: http://svn.apache.org/viewvc?rev=932009&view=rev
Log:
Huge parse method refactoring and generifying

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java?rev=932009&r1=932008&r2=932009&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
 Thu Apr  8 17:01:16 2010
@@ -21,9 +21,22 @@
 
 package org.apache.struts2.dispatcher.multipart;
 
+import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.RequestContext;
+import org.apache.commons.fileupload.disk.DiskFileItem;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.struts2.StrutsConstants;
+
+import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -31,20 +44,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.RequestContext;
-import org.apache.commons.fileupload.disk.DiskFileItem;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.struts2.StrutsConstants;
-
-import com.opensymphony.xwork2.inject.Inject;
-import com.opensymphony.xwork2.util.logging.Logger;
-import com.opensymphony.xwork2.util.logging.LoggerFactory;
-
 /**
  * Multipart form data request adapter for Jakarta Commons Fileupload package.
  */
@@ -62,7 +61,7 @@ public class JakartaMultiPartRequest imp
     protected List<String> errors = new ArrayList<String>();
     
     protected long maxSize;
-    
+
     @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE)
     public void setMaxSize(String maxSize) {
         this.maxSize = Long.parseLong(maxSize);
@@ -73,72 +72,87 @@ public class JakartaMultiPartRequest imp
      * multipart classes (see class description).
      *
      * @param saveDir        the directory to save off the file
-     * @param servletRequest the request containing the multipart
+     * @param request the request containing the multipart
      * @throws java.io.IOException  is thrown if encoding fails.
      */
-    public void parse(HttpServletRequest servletRequest, String saveDir)
-            throws IOException {
-        DiskFileItemFactory fac = new DiskFileItemFactory();
-        // Make sure that the data is written to file
-        fac.setSizeThreshold(0);
-        if (saveDir != null) {
-            fac.setRepository(new File(saveDir));
+    public void parse(HttpServletRequest request, String saveDir) throws 
IOException {
+        try {
+            processUpload(request, saveDir);
+        } catch (FileUploadException e) {
+            LOG.warn("Unable to parse request", e);
+            errors.add(e.getMessage());
         }
+    }
 
-        // Parse the request
-        try {
-            ServletFileUpload upload = new ServletFileUpload(fac);
-            upload.setSizeMax(maxSize);
+    private void processUpload(HttpServletRequest request, String saveDir) 
throws FileUploadException, UnsupportedEncodingException {
+        for (FileItem item : parseRequest(request, saveDir)) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Found item " + item.getFieldName());
+            }
+            if (item.isFormField()) {
+                processNormalFormField(item, request.getCharacterEncoding());
+            } else {
+                processFileField(item);
+            }
+        }
+    }
 
-            List items = 
upload.parseRequest(createRequestContext(servletRequest));
+    private void processFileField(FileItem item) {
+        LOG.debug("Item is a file upload");
 
-            for (Object item1 : items) {
-                FileItem item = (FileItem) item1;
-                if (LOG.isDebugEnabled()) LOG.debug("Found item " + 
item.getFieldName());
-                if (item.isFormField()) {
-                    LOG.debug("Item is a normal form field");
-                    List<String> values;
-                    if (params.get(item.getFieldName()) != null) {
-                        values = params.get(item.getFieldName());
-                    } else {
-                        values = new ArrayList<String>();
-                    }
-
-                    // note: see http://jira.opensymphony.com/browse/WW-633
-                    // basically, in some cases the charset may be null, so
-                    // we're just going to try to "other" method (no idea if 
this
-                    // will work)
-                    String charset = servletRequest.getCharacterEncoding();
-                    if (charset != null) {
-                        values.add(item.getString(charset));
-                    } else {
-                        values.add(item.getString());
-                    }
-                    params.put(item.getFieldName(), values);
-                } else {
-                    LOG.debug("Item is a file upload");
-
-                    // Skip file uploads that don't have a file name - meaning 
that no file was selected.
-                    if (item.getName() == null || 
item.getName().trim().length() < 1) {
-                        LOG.debug("No file has been uploaded for the field: " 
+ item.getFieldName());
-                        continue;
-                    }
-
-                    List<FileItem> values;
-                    if (files.get(item.getFieldName()) != null) {
-                        values = files.get(item.getFieldName());
-                    } else {
-                        values = new ArrayList<FileItem>();
-                    }
+        // Skip file uploads that don't have a file name - meaning that no 
file was selected.
+        if (item.getName() == null || item.getName().trim().length() < 1) {
+            LOG.debug("No file has been uploaded for the field: " + 
item.getFieldName());
+            return;
+        }
 
-                    values.add(item);
-                    files.put(item.getFieldName(), values);
-                }
-            }
-        } catch (FileUploadException e) {
-            LOG.warn("Unable to parse request", e);
-            errors.add(e.getMessage());
+        List<FileItem> values;
+        if (files.get(item.getFieldName()) != null) {
+            values = files.get(item.getFieldName());
+        } else {
+            values = new ArrayList<FileItem>();
+        }
+
+        values.add(item);
+        files.put(item.getFieldName(), values);
+    }
+
+    private void processNormalFormField(FileItem item, String charset) throws 
UnsupportedEncodingException {
+        LOG.debug("Item is a normal form field");
+        List<String> values;
+        if (params.get(item.getFieldName()) != null) {
+            values = params.get(item.getFieldName());
+        } else {
+            values = new ArrayList<String>();
+        }
+
+        // note: see http://jira.opensymphony.com/browse/WW-633
+        // basically, in some cases the charset may be null, so
+        // we're just going to try to "other" method (no idea if this
+        // will work)
+        if (charset != null) {
+            values.add(item.getString(charset));
+        } else {
+            values.add(item.getString());
+        }
+        params.put(item.getFieldName(), values);
+    }
+
+    private List<FileItem> parseRequest(HttpServletRequest servletRequest, 
String saveDir) throws FileUploadException {
+        DiskFileItemFactory fac = createDiskFileItemFactory(saveDir);
+        ServletFileUpload upload = new ServletFileUpload(fac);
+        upload.setSizeMax(maxSize);
+        return upload.parseRequest(createRequestContext(servletRequest));
+    }
+
+    private DiskFileItemFactory createDiskFileItemFactory(String saveDir) {
+        DiskFileItemFactory fac = new DiskFileItemFactory();
+        // Make sure that the data is written to file
+        fac.setSizeThreshold(0);
+        if (saveDir != null) {
+            fac.setRepository(new File(saveDir));
         }
+        return fac;
     }
 
     /* (non-Javadoc)

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java?rev=932009&r1=932008&r2=932009&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
 Thu Apr  8 17:01:16 2010
@@ -21,6 +21,19 @@
 
 package org.apache.struts2.interceptor;
 
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.ValidationAwareSupport;
+import com.opensymphony.xwork2.mock.MockActionInvocation;
+import com.opensymphony.xwork2.util.ClassLoaderUtil;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.StrutsTestCase;
+import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
+import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
+import org.springframework.mock.web.MockHttpServletRequest;
+
+import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
@@ -30,22 +43,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.StrutsTestCase;
-import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
-import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
-import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.springframework.mock.web.MockHttpServletRequest;
-
-import com.opensymphony.xwork2.util.ClassLoaderUtil;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-import com.opensymphony.xwork2.ValidationAwareSupport;
-import com.opensymphony.xwork2.mock.MockActionInvocation;
-
 
 /**
  * Test case for FileUploadInterceptor.
@@ -183,7 +180,7 @@ public class FileUploadInterceptorTest e
 
         Map param = new HashMap();
         ActionContext.getContext().setParameters(param);
-        ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, 
createMultipartRequest((HttpServletRequest) req, 2000));
+        ActionContext.getContext().put(ServletActionContext.HTTP_REQUEST, 
createMultipartRequest(req, 2000));
 
         interceptor.intercept(mai);
 


Reply via email to