Author: wesw
Date: Wed Jun  3 21:24:43 2009
New Revision: 781566

URL: http://svn.apache.org/viewvc?rev=781566&view=rev
Log:
first import, still need to create a struts-plugin.xml file that maps the 
beans. 

Added:
    
struts/sandbox/trunk/src/main/java/org/apache/struts2/fileupload/EnhancedJakartaMultiPartRequest.java

Added: 
struts/sandbox/trunk/src/main/java/org/apache/struts2/fileupload/EnhancedJakartaMultiPartRequest.java
URL: 
http://svn.apache.org/viewvc/struts/sandbox/trunk/src/main/java/org/apache/struts2/fileupload/EnhancedJakartaMultiPartRequest.java?rev=781566&view=auto
==============================================================================
--- 
struts/sandbox/trunk/src/main/java/org/apache/struts2/fileupload/EnhancedJakartaMultiPartRequest.java
 (added)
+++ 
struts/sandbox/trunk/src/main/java/org/apache/struts2/fileupload/EnhancedJakartaMultiPartRequest.java
 Wed Jun  3 21:24:43 2009
@@ -0,0 +1,189 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.fileupload;
+
+import org.apache.struts2.dispatcher.multipart.MultiPartRequest;
+import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
+import org.apache.commons.fileupload.ProgressListener;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.FileUpload;
+import org.apache.commons.fileupload.RequestContext;
+import org.apache.commons.fileupload.portlet.PortletFileUpload;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.ArrayList;
+
+import com.opensymphony.xwork2.util.logging.Logger;
+import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import com.opensymphony.xwork2.inject.Inject;
+
+/**
+ * Using Jakarta Commons File Upload, handle multipart requests. This class
+ * acts mostly the same as the original JakartaMultiPartRequest.
+ *
+ * @author WesW
+ */
+public class EnhancedJakartaMultiPartRequest
+        extends JakartaMultiPartRequest
+        implements MultiPartRequest {
+
+    static final Logger LOG = LoggerFactory.getLogger(MultiPartRequest.class);
+
+    protected ProgressListener progressListener;
+    protected FileItemFactory fileItemFactory;
+    protected boolean portletUpload;
+
+    /**
+     *
+     * @param progressListener
+     */
+    @Inject(FileUploadConstants.PROGRESS_LISTENER)
+    public void setProgressListener(ProgressListener progressListener) {
+        this.progressListener = progressListener;
+    }
+
+    /**
+     *
+     * @param fileItemFactory
+     */
+    @Inject(FileUploadConstants.FILE_ITEM_FACTORY)
+    public void setFileItemFactory(FileItemFactory fileItemFactory) {
+        this.fileItemFactory = fileItemFactory;
+    }
+
+    /**
+     *
+     * @param portletUpload
+     */
+    @Inject(FileUploadConstants.IS_PORTLET)
+    public void setPortletUpload(String portletUpload) {
+        this.portletUpload = "true".equalsIgnoreCase(portletUpload);
+    }
+
+    /**
+     *
+     * @param request
+     * @param saveDir
+     * @throws IOException
+     */
+    public void parse(HttpServletRequest request, String saveDir) throws 
IOException {
+        // Parse the request mostly copy/paste from JakartaMuliPartRequest
+        try {
+
+            FileUpload upload ;
+            if (portletUpload) {
+                upload = new PortletFileUpload(fileItemFactory);
+            }
+            else {
+                upload = new ServletFileUpload(fileItemFactory);
+            }
+
+            upload.setSizeMax(maxSize);
+            upload.setProgressListener(progressListener);
+
+            List items = upload.parseRequest(createRequestContext(request));
+
+            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 = request.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>();
+                    }
+
+                    values.add(item);
+                    files.put(item.getFieldName(), values);
+                }
+            }
+        } catch (FileUploadException e) {
+            LOG.warn("Unable to parse request", e);
+            errors.add(e.getMessage());
+        }
+    }
+
+    /**
+     * Creates a RequestContext needed by Jakarta Commons Upload.
+     * (copy/pasta from JakartaMultiPartRequest)
+     *
+     * @param req  the request.
+     * @return a new request context.
+     */
+    private RequestContext createRequestContext(final HttpServletRequest req) {
+        return new RequestContext() {
+            public String getCharacterEncoding() {
+                return req.getCharacterEncoding();
+            }
+
+            public String getContentType() {
+                return req.getContentType();
+            }
+
+            public int getContentLength() {
+                return req.getContentLength();
+            }
+
+            public InputStream getInputStream() throws IOException {
+                InputStream in = req.getInputStream();
+                if (in == null) {
+                    throw new IOException("Missing content in the request");
+                }
+                return req.getInputStream();
+            }
+        };
+    }
+}


Reply via email to