You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Martin Grigorov <mg...@apache.org> on 2011/05/16 08:29:18 UTC
Re: svn commit: r1103594 - in /wicket/branches/wicket-1.4.x/wicket/src:
main/java/org/apache/wicket/markup/html/form/upload/ test/java/org/apache/wicket/markup/html/form/upload/
Hi Pedro,
On Mon, May 16, 2011 at 4:11 AM, <pe...@apache.org> wrote:
> Author: pedro
> Date: Mon May 16 02:11:31 2011
> New Revision: 1103594
>
> URL: http://svn.apache.org/viewvc?rev=1103594&view=rev
> Log:
> Improving the FileUpload#writeToFile method to not rely on HTTP session
> existence
> Issue: WICKET-3715
>
> Modified:
>
> wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
>
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
>
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadTest.java
>
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/MockPageWithFormAndUploadField.java
>
> Modified:
> wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
> URL:
> http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java?rev=1103594&r1=1103593&r2=1103594&view=diff
>
> ==============================================================================
> ---
> wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
> (original)
> +++
> wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
> Mon May 16 02:11:31 2011
> @@ -26,6 +26,7 @@ import java.util.Iterator;
> import java.util.List;
>
> import org.apache.wicket.IClusterable;
> +import org.apache.wicket.RequestCycle;
> import org.apache.wicket.Session;
> import org.apache.wicket.WicketRuntimeException;
> import org.apache.wicket.util.file.Files;
> @@ -268,8 +269,10 @@ public class FileUpload implements IClus
> */
> public final File writeToTempFile() throws IOException
> {
> - File temp = File.createTempFile(Session.get().getId(),
> - Files.cleanupFilename(item.getFieldName()));
> + Session.get();
>
This call seems useless.
> + String sessionId = Session.exists() ? Session.get().getId()
> : "";
> + String tempFileName = sessionId + "_" +
> RequestCycle.get().getStartTime();
> + File temp = File.createTempFile(tempFileName,
> Files.cleanupFilename(item.getFieldName()));
> writeTo(temp);
> return temp;
> }
>
> Modified:
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
> URL:
> http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java?rev=1103594&r1=1103593&r2=1103594&view=diff
>
> ==============================================================================
> ---
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
> (original)
> +++
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
> Mon May 16 02:11:31 2011
> @@ -22,17 +22,13 @@ import java.io.FileOutputStream;
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.OutputStream;
> -import java.util.HashSet;
> -import java.util.Set;
>
> -import org.apache.wicket.Page;
> import org.apache.wicket.WicketTestCase;
> -import org.apache.wicket.Component.IVisitor;
> import org.apache.wicket.util.file.File;
> import org.apache.wicket.util.tester.FormTester;
> -import org.apache.wicket.util.tester.ITestPageSource;
> import org.apache.wicket.validation.IValidatable;
> import org.apache.wicket.validation.IValidator;
> +import org.apache.wicket.validation.ValidationError;
>
>
> /**
> @@ -42,6 +38,7 @@ import org.apache.wicket.validation.IVal
> */
> public class FileUploadFieldTest extends WicketTestCase
> {
> + private static final String TEST_FILE_NAME =
> FileUploadFieldTest.class.getName();
>
> /**
> * Construct.
> @@ -53,20 +50,13 @@ public class FileUploadFieldTest extends
>
> /**
> * Test that detach closes the streams
> + *
> + * @throws IOException
> + * '
> */
> - public void testInternalDetach() throws Exception
> + public void testInternalDetach() throws IOException
> {
> - final MockPageWithFormAndUploadField page = new
> MockPageWithFormAndUploadField();
> -
> - tester.startPage(new ITestPageSource()
> - {
> - private static final long serialVersionUID = 1L;
> -
> - public Page getTestPage()
> - {
> - return page;
> - }
> - });
> + tester.startPage(MockPageWithFormAndUploadField.class);
>
> File tmp = null;
> try
> @@ -87,6 +77,7 @@ public class FileUploadFieldTest extends
> formtester.submit();
>
> // Get the file upload
> + MockPageWithFormAndUploadField page =
> (MockPageWithFormAndUploadField)tester.getLastRenderedPage();
> FileUpload fileUpload = page.getFileUpload();
>
> assertNotNull(fileUpload);
> @@ -123,55 +114,78 @@ public class FileUploadFieldTest extends
> }
> }
>
> + /**
> + * @throws IOException
> + */
> public void testFileUploadCanBeValidated() throws IOException
> {
> - final Set<IValidatable> validatedComponents = new
> HashSet<IValidatable>();
> -
> - final File tmpFile = writeTestFile(1);
> + tester.startPage(TestValidationPage.class);
> + // creating the file expected by form validators
> + File tmpFile = writeTestFile(1);
> tmpFile.deleteOnExit();
> + FormTester formtester = tester.newFormTester("form");
> + formtester.setFile("upload", tmpFile, "text/plain");
> + formtester.submit();
> + TestValidationPage page =
> (TestValidationPage)tester.getLastRenderedPage();
> + assertFalse(page.getForm().hasError());
> + }
>
> - final IValidator testValidator = new IValidator()
> + /** */
> + public static class TestValidationPage extends
> MockPageWithFormAndUploadField
> + {
> + /** */
> + public TestValidationPage()
> {
> - private static final long serialVersionUID = 1L;
> + fileUploadField.add(new TestValidator());
> + }
> + }
> + private static class TestValidator implements
> IValidator<FileUpload>
> + {
> + /** */
> + private static final long serialVersionUID = 1L;
>
> - public void validate(IValidatable validatable)
> + public void validate(IValidatable<FileUpload> validatable)
> + {
> + if
> (!FileUpload.class.equals(validatable.getValue().getClass()))
> {
> - validatedComponents.add(validatable);
> - assertEquals(FileUpload.class,
> validatable.getValue().getClass());
> - FileUpload upload =
> (FileUpload)validatable.getValue();
> - assertEquals(tmpFile.getName(),
> upload.getClientFileName());
> - assertEquals(new String(read(tmpFile)), new
> String(upload.getBytes()));
> + validatable.error(new
> ValidationError().addMessageKey("validatable value type not expected"));
> }
> - };
> - final MockPageWithFormAndUploadField page = new
> MockPageWithFormAndUploadField();
> - page.getForm().visitChildren(FileUploadField.class, new
> IVisitor<FileUploadField>()
> - {
> - public Object component(FileUploadField
> uploadField)
> + FileUpload upload = validatable.getValue();
> + if
> (!upload.getClientFileName().contains(TEST_FILE_NAME))
> {
> - uploadField.add(testValidator);
> - return STOP_TRAVERSAL;
> + validatable.error(new
> ValidationError().addMessageKey("uploaded file name not expected"));
> }
> - });
> -
> - tester.startPage(new ITestPageSource()
> - {
> - private static final long serialVersionUID = 1L;
> -
> - public Page getTestPage()
> + File tmpFile = null;
> + try
> {
> - return page;
> + tmpFile = writeTestFile(1);
> + if (!new String(read(tmpFile)).equals(new
> String(upload.getBytes())))
> + {
> + validatable.error(new
> ValidationError().addMessageKey("uploaded content not expected"));
> + }
> }
> - });
> -
> - FormTester formtester = tester.newFormTester("form");
> - formtester.setFile("upload", tmpFile, "text/plain");
> - formtester.submit();
> - assertEquals(validatedComponents.size(), 1);
> + catch (IOException e)
> + {
> + throw new RuntimeException(e);
> + }
> + finally
> + {
> + if (tmpFile != null && tmpFile.exists())
> + {
> + tmpFile.delete();
> + }
> + }
> + }
> }
>
> - private File writeTestFile(int numberOfowsToCreate) throws
> IOException
> + /**
> + * @param numberOfowsToCreate
> + * @return test file
> + * @throws IOException
> + */
> + public static File writeTestFile(int numberOfowsToCreate) throws
> IOException
> {
> - File tmp = new
> File(java.io.File.createTempFile(getClass().getName(), ".txt"));
> + File tmp = new
> File(java.io.File.createTempFile(TEST_FILE_NAME, ".txt"));
> OutputStream os = new BufferedOutputStream(new
> FileOutputStream(tmp));
> for (int i = 0; i < numberOfowsToCreate; i++)
> {
> @@ -181,7 +195,7 @@ public class FileUploadFieldTest extends
> return tmp;
> }
>
> - private byte[] read(File file)
> + private static byte[] read(File file)
> {
> try
> {
> @@ -193,7 +207,7 @@ public class FileUploadFieldTest extends
> }
> }
>
> - private byte[] readFile(File file) throws IOException
> + private static byte[] readFile(File file) throws IOException
> {
> InputStream stream = null;
> byte[] bytes = new byte[0];
>
> Modified:
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadTest.java
> URL:
> http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadTest.java?rev=1103594&r1=1103593&r2=1103594&view=diff
>
> ==============================================================================
> ---
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadTest.java
> (original)
> +++
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadTest.java
> Mon May 16 02:11:31 2011
> @@ -16,11 +16,16 @@
> */
> package org.apache.wicket.markup.html.form.upload;
>
> +import java.io.IOException;
> import java.io.InputStream;
> import java.lang.reflect.Field;
> import java.util.List;
>
> import org.apache.wicket.WicketTestCase;
> +import org.apache.wicket.util.file.File;
> +import org.apache.wicket.util.tester.FormTester;
> +import org.apache.wicket.util.tester.WicketTester;
> +import org.apache.wicket.util.tester.WicketTester.DummyWebApplication;
> import org.apache.wicket.util.upload.DiskFileItemFactory;
> import org.apache.wicket.util.upload.FileItem;
>
> @@ -41,6 +46,19 @@ public class FileUploadTest extends Wick
> super("Test of FileUpload");
> }
>
> + @Override
> + protected void setUp() throws Exception
> + {
> + tester = new WicketTester(new DummyWebApplication())
> + {
> + @Override
> + public boolean initializeHttpSessionAsTemporary()
> + {
> + return true;
> + }
> + };
> + }
> +
> /**
> * Test that when getting an input stream a new input stream is
> returned every time.
> *
> @@ -92,4 +110,44 @@ public class FileUploadTest extends Wick
> assertNull(inputStreams);
> }
>
> + /**
> + * @see <a href="https://issues.apache.org/jira/browse/WICKET-3715
> ">WICKET-3715</a>
> + * @throws IOException
> + */
> + public void testWriteToTempFile() throws IOException
> + {
> + tester.startPage(TestPage.class);
> +
> + File tmp = null;
> + try
> + {
> + tmp = FileUploadFieldTest.writeTestFile(1);
> + FormTester formtester =
> tester.newFormTester("form");
> + formtester.setFile("upload", tmp, "text/plain");
> + formtester.submit();
> +
> + TestPage page =
> (TestPage)tester.getLastRenderedPage();
> + assertNotNull(page.testFile);
> + }
> + finally
> + {
> + if (tmp != null && tmp.exists())
> + {
> + tmp.delete();
> + }
> + }
> + }
> +
> + /** */
> + public static class TestPage extends MockPageWithFormAndUploadField
> + {
> + java.io.File testFile;
> +
> + @Override
> + protected void handleFormSubmit() throws Exception
> + {
> + super.handleFormSubmit();
> + testFile = getFileUpload().writeToTempFile();
> + }
> + }
> }
>
> Modified:
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/MockPageWithFormAndUploadField.java
> URL:
> http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/MockPageWithFormAndUploadField.java?rev=1103594&r1=1103593&r2=1103594&view=diff
>
> ==============================================================================
> ---
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/MockPageWithFormAndUploadField.java
> (original)
> +++
> wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/MockPageWithFormAndUploadField.java
> Mon May 16 02:11:31 2011
> @@ -18,6 +18,7 @@ package org.apache.wicket.markup.html.fo
>
> import org.apache.wicket.markup.html.WebPage;
> import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.StatelessForm;
> import org.apache.wicket.model.Model;
>
> /**
> @@ -30,7 +31,7 @@ public class MockPageWithFormAndUploadFi
> private static final long serialVersionUID = 1L;
>
> private final Form<?> form;
> - private final FileUploadField fileUploadField;
> + protected final FileUploadField fileUploadField;
> private FileUpload fileUpload;
>
> /**
> @@ -38,7 +39,7 @@ public class MockPageWithFormAndUploadFi
> */
> public MockPageWithFormAndUploadField()
> {
> - form = new Form("form")
> + form = new StatelessForm<Void>("form")
> {
> /**
> *
> @@ -48,7 +49,14 @@ public class MockPageWithFormAndUploadFi
> @Override
> protected void onSubmit()
> {
> - fileUpload =
> fileUploadField.getFileUpload();
> + try
> + {
> + handleFormSubmit();
> + }
> + catch (Exception e)
> + {
> + throw new RuntimeException(e);
> + }
> }
> };
> fileUploadField = new FileUploadField("upload", new
> Model<FileUpload>());
> @@ -56,6 +64,11 @@ public class MockPageWithFormAndUploadFi
> add(form);
> }
>
> + protected void handleFormSubmit() throws Exception
> + {
> + fileUpload = fileUploadField.getFileUpload();
> + }
> +
> /**
> * @return The form to attach the FileUploadField to.
> */
>
>
>
--
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>
Unsubscribe request
Posted by Shubin Fedor <vd...@mail.ru>.
Hi, please unsubscribe me.
Thanks.