Author: hlship
Date: Fri Nov  7 14:35:49 2008
New Revision: 712294

URL: http://svn.apache.org/viewvc?rev=712294&view=rev
Log:
TAP5-339: Make FileItemFactory a service so it can be overridden

Modified:
    
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImpl.java
    
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/services/UploadModule.java
    
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/RunJettyUpload.java
    
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImplTest.java

Modified: 
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImpl.java?rev=712294&r1=712293&r2=712294&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImpl.java
 Fri Nov  7 14:35:49 2008
@@ -17,7 +17,6 @@
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileItemFactory;
 import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.tapestry5.SymbolConstants;
 import org.apache.tapestry5.ioc.annotations.Inject;
@@ -29,7 +28,6 @@
 import org.apache.tapestry5.upload.services.UploadedFile;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.File;
 import java.io.UnsupportedEncodingException;
 import java.util.Collections;
 import java.util.List;
@@ -42,9 +40,7 @@
 {
     private final Map<String, UploadedFileItem> uploads = 
CollectionFactory.newMap();
 
-    private final String repositoryLocation;
-
-    private final int repositoryThreshold;
+    private final FileItemFactory fileItemFactory;
 
     private final long maxRequestSize;
 
@@ -56,11 +52,7 @@
 
     public MultipartDecoderImpl(
 
-            @Inject @Symbol(UploadSymbols.REPOSITORY_LOCATION)
-            String repositoryLocation,
-
-            @Symbol(UploadSymbols.REPOSITORY_THRESHOLD)
-            int repositoryThreshold,
+            FileItemFactory fileItemFactory,
 
             @Symbol(UploadSymbols.REQUESTSIZE_MAX)
             long maxRequestSize,
@@ -71,8 +63,7 @@
             @Inject @Symbol(SymbolConstants.CHARSET)
             String requestEncoding)
     {
-        this.repositoryLocation = repositoryLocation;
-        this.repositoryThreshold = repositoryThreshold;
+        this.fileItemFactory = fileItemFactory;
         this.maxRequestSize = maxRequestSize;
         this.maxFileSize = maxFileSize;
         this.requestEncoding = requestEncoding;
@@ -124,9 +115,7 @@
 
     protected ServletFileUpload createFileUpload()
     {
-        FileItemFactory factory = new DiskFileItemFactory(repositoryThreshold, 
new File(repositoryLocation));
-
-        ServletFileUpload upload = new ServletFileUpload(factory);
+        ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
 
         // set maximum file upload size
         upload.setSizeMax(maxRequestSize);

Modified: 
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/services/UploadModule.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/services/UploadModule.java?rev=712294&r1=712293&r2=712294&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/services/UploadModule.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-upload/src/main/java/org/apache/tapestry5/upload/services/UploadModule.java
 Fri Nov  7 14:35:49 2008
@@ -14,10 +14,13 @@
 
 package org.apache.tapestry5.upload.services;
 
+import org.apache.commons.fileupload.FileItemFactory;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.io.FileCleaner;
 import org.apache.tapestry5.ioc.*;
+import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.annotations.Scope;
+import org.apache.tapestry5.ioc.annotations.Symbol;
 import org.apache.tapestry5.ioc.services.PerthreadManager;
 import org.apache.tapestry5.ioc.services.RegistryShutdownHub;
 import org.apache.tapestry5.ioc.services.RegistryShutdownListener;
@@ -28,10 +31,10 @@
 import 
org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter;
 import org.apache.tapestry5.upload.internal.services.UploadExceptionFilter;
 
+import java.io.File;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-public class
-        UploadModule
+public class UploadModule
 {
     private static final String NO_LIMIT = "-1";
 
@@ -93,6 +96,19 @@
                           "before:Ajax");
     }
 
+    /**
+     * The default FileItemFactory used by the MultipartDecoder is [EMAIL 
PROTECTED] org.apache.commons.fileupload.disk.DiskFileItemFactory}.
+     */
+    public static FileItemFactory buildDefaultFileItemFactory(
+            @Symbol(UploadSymbols.REPOSITORY_THRESHOLD)
+            int repositoryThreshold,
+
+            @Inject @Symbol(UploadSymbols.REPOSITORY_LOCATION)
+            String repositoryLocation)
+    {
+        return new DiskFileItemFactory(repositoryThreshold, new 
File(repositoryLocation));
+    }
+
     public static void contributeFactoryDefaults(MappedConfiguration<String, 
String> configuration)
     {
         configuration.add(UploadSymbols.REPOSITORY_THRESHOLD, Integer

Modified: 
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/RunJettyUpload.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/RunJettyUpload.java?rev=712294&r1=712293&r2=712294&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/RunJettyUpload.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/RunJettyUpload.java
 Fri Nov  7 14:35:49 2008
@@ -20,10 +20,12 @@
 
 public class RunJettyUpload
 {
-    public static void main(String[] args) throws InterruptedException
+    public static void main(String[] args) throws Exception
     {
         File workingDir = new File(System.getProperty("user.dir"));
 
+        new File(workingDir, "target/tmp").mkdirs();
+
         new JettyRunner(workingDir, "/", 8080, "src/test/webapp");
     }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImplTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImplTest.java?rev=712294&r1=712293&r2=712294&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImplTest.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-upload/src/test/java/org/apache/tapestry5/upload/internal/services/MultipartDecoderImplTest.java
 Fri Nov  7 14:35:49 2008
@@ -15,11 +15,14 @@
 package org.apache.tapestry5.upload.internal.services;
 
 import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileItemFactory;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.tapestry5.test.TapestryTestCase;
 import org.testng.annotations.Test;
 
 import javax.servlet.http.HttpServletRequest;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -27,13 +30,14 @@
 
 public class MultipartDecoderImplTest extends TapestryTestCase
 {
+    private final FileItemFactory fileItemFactory = new 
DiskFileItemFactory(888, new File("/tmp"));
 
     private static final String CHARSET = "UTF-8";
 
     @Test
     public void create_file_upload_gets_configuration_from_symbols() throws 
Exception
     {
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
7777, 6666, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, 7777, 6666, CHARSET);
 
         replay();
 
@@ -50,7 +54,7 @@
     public void process_file_items_does_nothing_when_null_file_items() throws 
Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
-1, -1, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, -1, -1, CHARSET);
         List<FileItem> items = Collections.emptyList();
 
         replay();
@@ -66,7 +70,7 @@
     public void process_file_items_does_nothing_when_empty_file_items() throws 
Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
-1, -1, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, -1, -1, CHARSET);
         List<FileItem> fileItems = Collections.emptyList();
 
         replay();
@@ -83,7 +87,7 @@
     {
         HttpServletRequest request = mockHttpServletRequest();
 
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
-1, -1, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, -1, -1, CHARSET);
         List<FileItem> fileItems = Arrays.asList(createValueItem("one", 
"first"), createValueItem("two", "second"));
 
         replay();
@@ -103,7 +107,7 @@
     {
         HttpServletRequest request = mockHttpServletRequest();
 
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
-1, -1, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, -1, -1, CHARSET);
 
         List<FileItem> fileItems = Arrays.asList(createValueItem("one", 
"first"), createValueItem("two", "second"));
 
@@ -123,7 +127,7 @@
     public void process_file_items_set_file_parameters_with_file_name() throws 
Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
-1, -1, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, -1, -1, CHARSET);
         List<FileItem> fileItems = Arrays.asList(createFileItem("one", 
"first.txt"),
                                                  createFileItem("two", 
"second.txt"));
 
@@ -143,7 +147,7 @@
     public void uploaded_file_stored() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
-1, -1, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, -1, -1, CHARSET);
         List<FileItem> fileItems = Arrays.asList(createFileItem("one", 
"first.txt"),
                                                  createFileItem("two", 
"second.txt"));
 
@@ -163,7 +167,7 @@
     public void file_items_cleaned_up() throws Exception
     {
         HttpServletRequest request = mockHttpServletRequest();
-        MultipartDecoderImpl decoder = new MultipartDecoderImpl("/tmp", 888, 
-1, -1, CHARSET);
+        MultipartDecoderImpl decoder = new 
MultipartDecoderImpl(fileItemFactory, -1, -1, CHARSET);
         StubFileItem firstItem = new StubFileItem("one");
         firstItem.setFormField(false);
         StubFileItem secondItem = new StubFileItem("two");


Reply via email to