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");