WICKET-6517 pass ajax target to onError

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3f5c2932
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3f5c2932
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3f5c2932

Branch: refs/heads/WICKET-6498_deferred_javascript_2
Commit: 3f5c2932c47a6798b3dd361c98bb5756b623eaaf
Parents: 237147f
Author: Sven Meier <[email protected]>
Authored: Thu Jan 18 07:46:51 2018 +0100
Committer: Sven Meier <[email protected]>
Committed: Fri Jan 26 23:09:37 2018 +0100

----------------------------------------------------------------------
 .../examples/ajax/builtin/FileUploadPage.java   |  9 +++
 .../ajax/markup/html/AjaxFileDropBehavior.java  | 82 +++++++++++++++-----
 2 files changed, 70 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/3f5c2932/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
index 7399301..f7a473c 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/FileUploadPage.java
@@ -18,6 +18,7 @@ package org.apache.wicket.examples.ajax.builtin;
 
 import java.util.List;
 
+import org.apache.commons.fileupload.FileUploadException;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -134,6 +135,14 @@ public class FileUploadPage extends BasePage
                                
                                target.add(feedback);
                        }
+                       
+                       @Override
+                       protected void onError(AjaxRequestTarget target, 
FileUploadException fux)
+                       {
+                               info(fux.getMessage());
+                               
+                               target.add(feedback);                           
+                       }
                });
                add(drop);
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/3f5c2932/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java
index 9073cd3..b8806d9 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxFileDropBehavior.java
@@ -22,6 +22,7 @@ import java.util.List;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.wicket.Component;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
@@ -46,34 +47,38 @@ import org.apache.wicket.util.lang.Bytes;
 public class AjaxFileDropBehavior extends AjaxEventBehavior
 {
 
-       private static final ResourceReference JS = new 
PackageResourceReference(AjaxFileDropBehavior.class, "datatransfer.js");
+       private static final ResourceReference JS = new 
PackageResourceReference(
+               AjaxFileDropBehavior.class, "datatransfer.js");
 
        /**
-        *  Maximum size of all uploaded files in bytes in a request.
+        * Maximum size of all uploaded files in bytes in a request.
         */
        private Bytes maxSize;
 
        /**
-        *  Maximum size of file of upload in bytes (if there are more than 
one) in a request.
+        * Maximum size of file of upload in bytes (if there are more than one) 
in a request.
         */
        private Bytes fileMaxSize;
 
        private String parameterName = "f";
-       
+
        public AjaxFileDropBehavior()
        {
                super("drop");
        }
-       
+
        @Override
        public void renderHead(Component component, IHeaderResponse response)
        {
                super.renderHead(component, response);
-               
+
                response.render(JavaScriptHeaderItem.forReference(JS));
-               
-               // default must be prevented for dragover event, otherwise 
browser will consume the dataTransfer
-               
response.render(OnDomReadyHeaderItem.forScript(String.format("jQuery('#%s').on('dragover',
 function(e) { e.preventDefault(); });", component.getMarkupId())));
+
+               // default must be prevented for dragover event, otherwise 
browser will consume the
+               // dataTransfer
+               response.render(OnDomReadyHeaderItem.forScript(
+                       String.format("jQuery('#%s').on('dragover', function(e) 
{ e.preventDefault(); });",
+                               component.getMarkupId())));
        }
 
        @Override
@@ -86,9 +91,10 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior
                // default must be prevented, otherwise browser will consume 
the dataTransfer
                attributes.setPreventDefault(true);
 
-               attributes.getDynamicExtraParameters().add(
-                       String.format("return 
Wicket.DataTransfer.getFilesAsParamArray(attrs.event.originalEvent, '%s');", 
parameterName)
-               );
+               attributes.getDynamicExtraParameters()
+                       .add(String.format(
+                               "return 
Wicket.DataTransfer.getFilesAsParamArray(attrs.event.originalEvent, '%s');",
+                               parameterName));
        }
 
        @Override
@@ -97,14 +103,14 @@ public class AjaxFileDropBehavior extends AjaxEventBehavior
                try
                {
                        ServletWebRequest request = 
(ServletWebRequest)getComponent().getRequest();
-                       final MultipartServletWebRequest multipartWebRequest = 
request.newMultipartWebRequest(
-                               getMaxSize(), getComponent().getPage().getId());
+                       final MultipartServletWebRequest multipartWebRequest = 
request
+                               .newMultipartWebRequest(getMaxSize(), 
getComponent().getPage().getId());
                        multipartWebRequest.setFileMaxSize(getFileMaxSize());
                        multipartWebRequest.parseFileParts();
 
                        // TODO: Can't this be detected from header?
                        
getComponent().getRequestCycle().setRequest(multipartWebRequest);
-                       
+
                        ArrayList<FileUpload> fileUploads = new ArrayList<>();
 
                        // Get the item for the path
@@ -117,23 +123,30 @@ public class AjaxFileDropBehavior extends 
AjaxEventBehavior
                                        fileUploads.add(new FileUpload(item));
                                }
                        }
-                       
+
                        onFileUpload(target, fileUploads);
                }
                catch (final FileUploadException fux)
                {
-                       onError(fux);
+                       onError(target, fux);
                }
        }
 
        public Bytes getMaxSize()
        {
-               if (maxSize == null) {
-                       maxSize = 
getComponent().getApplication().getApplicationSettings().getDefaultMaximumUploadSize();
+               if (maxSize == null)
+               {
+                       maxSize = 
getComponent().getApplication().getApplicationSettings()
+                               .getDefaultMaximumUploadSize();
                }
                return maxSize;
        }
 
+       /**
+        * Set the maximum upload size.
+        * 
+        * @param maxSize maximum size, must not be null
+        */
        public void setMaxSize(Bytes maxSize)
        {
                Args.notNull(maxSize, "maxSize");
@@ -145,16 +158,43 @@ public class AjaxFileDropBehavior extends 
AjaxEventBehavior
                return fileMaxSize;
        }
 
+       /**
+        * Set an optional maximum size per file.
+        * 
+        * @param fileMaxSize maximum size for each uploaded file
+        */
        public void setFileMaxSize(Bytes fileMaxSize)
        {
                this.fileMaxSize = fileMaxSize;
        }
-       
+
+       /**
+        * Hook method called after a file was uploaded.
+        * <p>
+        * Note: {@link #onError(AjaxRequestTarget, FileUploadException)} is 
called instead when
+        * uploading failed
+        * 
+        * @param target
+        *            the current request handler
+        * @param files
+        *            uploaded files
+        */
        protected void onFileUpload(AjaxRequestTarget target, List<FileUpload> 
files)
        {
        }
 
-       protected void onError(FileUploadException fux)
+       /**
+        * Hook method called to handle any error during uploading of the file.
+        * <p>
+        * Default implementation re-throws the exception. 
+        *
+        * @param target
+        *            the current request handler
+        * @param e
+        *            the error that occurred
+        */
+       protected void onError(AjaxRequestTarget target, FileUploadException 
fux)
        {
+               throw new WicketRuntimeException(fux);
        }
 }
\ No newline at end of file

Reply via email to