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.