You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by so...@apache.org on 2019/04/04 15:26:54 UTC

[wicket] 01/01: [WICKET-6648] initiate and onBeforeDownload signatures are changed

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch WICKET-6648-ajax-download
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit aceed58bb3caead60c1b4a02f6cb197e23838483
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu Apr 4 22:26:31 2019 +0700

    [WICKET-6648] initiate and onBeforeDownload signatures are changed
---
 .../examples/ajax/builtin/AjaxDownloadPage.java    | 122 +++++++++++++--------
 .../extensions/ajax/AjaxDownloadBehavior.java      |  63 +++++++----
 2 files changed, 117 insertions(+), 68 deletions(-)

diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
index 70a682d..fdd43fb 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AjaxDownloadPage.java
@@ -20,6 +20,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.ajax.AjaxDownloadBehavior;
 import org.apache.wicket.extensions.ajax.AjaxDownloadBehavior.Location;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -34,11 +35,12 @@ import org.apache.wicket.util.time.Duration;
 
 /**
  * Ajax download.
- * 
+ *
  * @author svenmeier
  */
 public class AjaxDownloadPage extends BasePage
 {
+	private static final long serialVersionUID = 1L;
 	private WebMarkupContainer downloadingContainer;
 
 	/**
@@ -50,9 +52,9 @@ public class AjaxDownloadPage extends BasePage
 		downloadingContainer.setOutputMarkupPlaceholderTag(true);
 		downloadingContainer.setVisible(false);
 		add(downloadingContainer);
-		
+
 		initDownload();
-		
+
 		initDownloadInIframe();
 
 		initDownloadInNewWindow();
@@ -75,14 +77,15 @@ public class AjaxDownloadPage extends BasePage
 	{
 		IResource resource = new ExampleResource("downloaded via ajax")
 			.setContentDisposition(ContentDisposition.ATTACHMENT);
-		
+
 		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(resource) {
-			
+			private static final long serialVersionUID = 1L;
+
 			@Override
-			protected void onBeforeDownload(AjaxRequestTarget target)
+			protected void onBeforeDownload(IPartialPageRequestHandler handler)
 			{
 				downloadingContainer.setVisible(true);
-				target.add(downloadingContainer);
+				handler.add(downloadingContainer);
 			}
 
 			@Override
@@ -91,20 +94,22 @@ public class AjaxDownloadPage extends BasePage
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
 			}
-			
+
 			@Override
 			protected void onDownloadFailed(AjaxRequestTarget target)
 			{
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
-				
+
 				target.appendJavaScript("alert('Download failed');");
 			}
 		};
 		add(download);
-		
+
 		add(new AjaxLink<Void>("download")
 		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public void onClick(AjaxRequestTarget target)
 			{
@@ -117,14 +122,16 @@ public class AjaxDownloadPage extends BasePage
 	{
 		IResource resource = new ExampleResource("downloaded via ajax in iframe")
 			.setContentDisposition(ContentDisposition.ATTACHMENT);
-		
-		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(resource) {
-			
+
+		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(resource)
+		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
-			protected void onBeforeDownload(AjaxRequestTarget target)
+			protected void onBeforeDownload(IPartialPageRequestHandler handler)
 			{
 				downloadingContainer.setVisible(true);
-				target.add(downloadingContainer);
+				handler.add(downloadingContainer);
 			}
 
 			@Override
@@ -133,21 +140,23 @@ public class AjaxDownloadPage extends BasePage
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
 			}
-			
+
 			@Override
 			protected void onDownloadFailed(AjaxRequestTarget target)
 			{
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
-				
+
 				target.appendJavaScript("alert('Download failed');");
 			}
 		};
 		download.setLocation(Location.IFrame);
 		add(download);
-		
+
 		add(new AjaxLink<Void>("downloadIframe")
 		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public void onClick(AjaxRequestTarget target)
 			{
@@ -155,24 +164,29 @@ public class AjaxDownloadPage extends BasePage
 			}
 		});
 	}
-	
+
 	private void initDownloadReference()
 	{
-		ResourceReference reference = new ResourceReference("referenceToResource") {
+		ResourceReference reference = new ResourceReference("referenceToResource")
+		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public IResource getResource()
 			{
 				return new StaticResource();
 			}
 		};
-		
-		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(reference) {
-			
+
+		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(reference)
+		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
-			protected void onBeforeDownload(AjaxRequestTarget target)
+			protected void onBeforeDownload(IPartialPageRequestHandler handler)
 			{
 				downloadingContainer.setVisible(true);
-				target.add(downloadingContainer);
+				handler.add(downloadingContainer);
 			}
 
 			@Override
@@ -181,20 +195,22 @@ public class AjaxDownloadPage extends BasePage
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
 			}
-			
+
 			@Override
 			protected void onDownloadFailed(AjaxRequestTarget target)
 			{
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
-				
+
 				target.appendJavaScript("alert('Download failed');");
 			}
 		};
 		add(download);
-		
+
 		add(new AjaxLink<Void>("downloadReference")
 		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public void onClick(AjaxRequestTarget target)
 			{
@@ -208,13 +224,15 @@ public class AjaxDownloadPage extends BasePage
 		IResource resource = new ExampleResource("downloaded via ajax in a new browser window")
 			.setContentDisposition(ContentDisposition.INLINE);
 
-		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(resource) {
+		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(resource)
+		{
+			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onBeforeDownload(AjaxRequestTarget target)
+			protected void onBeforeDownload(IPartialPageRequestHandler handler)
 			{
 				downloadingContainer.setVisible(true);
-				target.add(downloadingContainer);
+				handler.add(downloadingContainer);
 			}
 
 			@Override
@@ -229,7 +247,7 @@ public class AjaxDownloadPage extends BasePage
 			{
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
-				
+
 				target.appendJavaScript("alert('Download failed');");
 			}
 
@@ -245,6 +263,8 @@ public class AjaxDownloadPage extends BasePage
 
 		add(new AjaxLink<Void>("downloadInNewWindow")
 		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public void onClick(AjaxRequestTarget target)
 			{
@@ -258,13 +278,15 @@ public class AjaxDownloadPage extends BasePage
 		IResource resource = new ExampleResource("downloaded via ajax in same browser window")
 			.setContentDisposition(ContentDisposition.ATTACHMENT);
 
-		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(resource) {
+		final AjaxDownloadBehavior download = new AjaxDownloadBehavior(resource)
+		{
+			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onBeforeDownload(AjaxRequestTarget target)
+			protected void onBeforeDownload(IPartialPageRequestHandler handler)
 			{
 				downloadingContainer.setVisible(true);
-				target.add(downloadingContainer);
+				handler.add(downloadingContainer);
 			}
 
 			@Override
@@ -279,7 +301,7 @@ public class AjaxDownloadPage extends BasePage
 			{
 				downloadingContainer.setVisible(false);
 				target.add(downloadingContainer);
-				
+
 				target.appendJavaScript("alert('Download failed');");
 			}
 
@@ -295,6 +317,8 @@ public class AjaxDownloadPage extends BasePage
 
 		add(new AjaxLink<Void>("downloadInSameWindow")
 		{
+			private static final long serialVersionUID = 1L;
+
 			@Override
 			public void onClick(AjaxRequestTarget target)
 			{
@@ -303,22 +327,24 @@ public class AjaxDownloadPage extends BasePage
 		});
 	}
 
-	public static class StaticResource extends ResourceStreamResource {
+	public static class StaticResource extends ResourceStreamResource
+	{
+		private static final long serialVersionUID = 1L;
 
 		StaticResource() {
 			setFileName("File-from-ResourceReference");
 			setContentDisposition(ContentDisposition.ATTACHMENT);
 			setCacheDuration(Duration.NONE);
 		}
-		
+
 		@Override
 		public void respond(Attributes attributes)
 		{
 			AjaxDownloadBehavior.markCompleted(attributes);
-			
+
 			super.respond(attributes);
 		}
-		
+
 		@Override
 		protected IResourceStream getResourceStream(Attributes attributes)
 		{
@@ -330,15 +356,17 @@ public class AjaxDownloadPage extends BasePage
 			catch (InterruptedException e)
 			{
 			}
-			
+
 			return new StringResourceStream("downloaded via ajax with resource reference");
 		}
 	}
-	
-	private class ExampleResource extends ResourceStreamResource {
-		
+
+	private class ExampleResource extends ResourceStreamResource
+	{
+		private static final long serialVersionUID = 1L;
+
 		private String content;
-		
+
 		private int count = 0;
 
 		public ExampleResource(String content)
@@ -348,7 +376,7 @@ public class AjaxDownloadPage extends BasePage
 			setFileName("File-from-IResource.txt");
 			setCacheDuration(Duration.NONE);
 		}
-		
+
 		@Override
 		protected IResourceStream getResourceStream(Attributes attributes) {
 			// simulate delay
@@ -359,7 +387,7 @@ public class AjaxDownloadPage extends BasePage
 			catch (InterruptedException e)
 			{
 			}
-			
+
 			count++;
 			if (count == 3) {
 				count = 0;
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java
index 4b2a217..7a7bf1a 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/AjaxDownloadBehavior.java
@@ -25,6 +25,7 @@ import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.json.JSONFunction;
 import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.request.Response;
@@ -45,17 +46,17 @@ import com.github.openjson.JSONObject;
  * Download resources via Ajax.
  * <p>
  * Usage:
- * 
+ *
  * <pre>
  * final AjaxDownload download = new AjaxDownload(resource);
  * add(download);
- * 
+ *
  * add(new AjaxButton("download")
  * {
  * 	&#64;Override
- * 	protected void onSubmit(AjaxRequestTarget target, Form&lt;?> form)
+ * 	protected void onSubmit(IPartialPageRequestHandler handler, Form&lt;?> form)
  * 	{
- * 		download.initiate(target);
+ * 		download.initiate(handler);
  * 	}
  * });
  * </pre>
@@ -63,7 +64,7 @@ import com.github.openjson.JSONObject;
  * <p>To set the name of the downloaded resource make use of
  * {@link org.apache.wicket.request.resource.ResourceStreamResource#setFileName(String)} or
  * {@link org.apache.wicket.request.resource.AbstractResource.ResourceResponse#setFileName(String)}</p>
- * 
+ *
  * @author svenmeier
  * @author Martin Grigorov
  * @author Maxim Solodovnik
@@ -95,7 +96,7 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 		 * the resource has to be a {@link ContentDisposition#ATTACHMENT}.
 		 * <p>
 		 * Note: This will trigger JavaScript <em>unload</em> event on the page!
-		 * Does not support {@link AjaxDownloadBehavior#onDownloadFailed(AjaxRequestTarget)} callback,
+		 * Does not support {@link AjaxDownloadBehavior#onDownloadFailed(IPartialPageRequestHandler)} callback,
 		 * i.e. it is not possible to detect when the download has failed!
 		 */
 		SameWindow,
@@ -127,7 +128,7 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 
 	/**
 	 * Download of a {@link IResource}.
-	 * 
+	 *
 	 * @param resource
 	 *            resource to download
 	 */
@@ -143,8 +144,8 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 	 * <p>
 	 * The {@link IResource} returned by {@link ResourceReference#getResource()} must call
 	 * {@link #markCompleted(Attributes)} when responding, otherwise the callback
-	 * {@link #onDownloadSuccess(AjaxRequestTarget)} will not work.
-	 * 
+	 * {@link #onDownloadSuccess(IPartialPageRequestHandler)} will not work.
+	 *
 	 * @param reference
 	 *            reference to resource to download
 	 */
@@ -158,8 +159,8 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 	 * <p>
 	 * The {@link IResource} returned by {@link ResourceReference#getResource()} must call
 	 * {@link #markCompleted(Attributes)} when responding, otherwise the callback
-	 * {@link #onDownloadSuccess(AjaxRequestTarget)} will not work.
-	 * 
+	 * {@link #onDownloadSuccess(IPartialPageRequestHandler)} will not work.
+	 *
 	 * @param reference
 	 *            reference to resource to download
 	 * @param resourceParameters
@@ -195,13 +196,19 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 		}
 	}
 
+	@Deprecated
+	public void initiate(AjaxRequestTarget target)
+	{
+		initiate((IPartialPageRequestHandler)target);
+	}
+
 	/**
 	 * Call this method to initiate the download.
-	 * 
-	 * @param target
-	 *            the initiating Ajax target
+	 *
+	 * @param handler
+	 *            the initiating RequestHandler
 	 */
-	public void initiate(AjaxRequestTarget target)
+	public void initiate(IPartialPageRequestHandler handler)
 	{
 		if (getComponent() == null)
 		{
@@ -240,15 +247,28 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 		settings.put("downloadUrl", url);
 		settings.put("method", getLocation().name().toLowerCase(Locale.ROOT));
 
-		target.appendJavaScript(String.format("Wicket.AjaxDownload.initiate(%s);", settings));
+		handler.appendJavaScript(String.format("Wicket.AjaxDownload.initiate(%s);", settings));
 
-		onBeforeDownload(target);
+		if (handler instanceof AjaxRequestTarget) {
+			onBeforeDownload((AjaxRequestTarget)handler);
+		}
+		onBeforeDownload(handler);
 	}
 
+	/**
+	 * Please use {@link #onBeforeDownload(IPartialPageRequestHandler)} instead
+	 *
+	 * @param target
+	 */
+	@Deprecated
 	protected void onBeforeDownload(AjaxRequestTarget target)
 	{
 	}
 
+	protected void onBeforeDownload(IPartialPageRequestHandler handler)
+	{
+	}
+
 	/**
 	 * A callback executed when the download of the resource finished successfully.
 	 *
@@ -324,6 +344,7 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 	 */
 	private class ResourceBehavior extends Behavior implements IRequestListener
 	{
+		private static final long serialVersionUID = 1L;
 		private final IResource resource;
 
 		private ResourceBehavior(IResource resource)
@@ -336,7 +357,7 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 		{
 			return false;
 		}
-		
+
 		@Override
 		public void onRequest()
 		{
@@ -360,7 +381,7 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 	 * <p>
 	 * Has to be called from {@link IResource#respond(Attributes)} when downloaded via
 	 * {@link #AjaxDownloadBehavior(IResource)}.
-	 * 
+	 *
 	 * @param attributes
 	 *            resource attributes
 	 */
@@ -374,12 +395,12 @@ public class AjaxDownloadBehavior extends AbstractDefaultAjaxBehavior
 	private static Cookie cookie(String name)
 	{
 		Cookie cookie = new Cookie(name, "complete");
-		
+
 		// has to be on root, otherwise JavaScript will not be able to access the
 		// cookie when it is set from a different path - which is the case when a
 		// ResourceReference is used
 		cookie.setPath("/");
-		
+
 		return cookie;
 	}
 }