You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/01/08 18:24:26 UTC

svn commit: r897270 - /wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java

Author: ivaynberg
Date: Fri Jan  8 17:23:45 2010
New Revision: 897270

URL: http://svn.apache.org/viewvc?rev=897270&view=rev
Log:
WICKET-2668
Issue: WICKET-2668

Modified:
    wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java

Modified: wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java?rev=897270&r1=897269&r2=897270&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java (original)
+++ wicket/branches/wicket-1.4.x/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java Fri Jan  8 17:23:45 2010
@@ -17,16 +17,18 @@
 package org.apache.wicket.extensions.ajax.markup.html.form.upload;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
 import org.apache.wicket.IInitializer;
 import org.apache.wicket.RequestCycle;
 import org.apache.wicket.ResourceReference;
+import org.apache.wicket.behavior.AbstractBehavior;
 import org.apache.wicket.behavior.HeaderContributor;
+import org.apache.wicket.behavior.IBehavior;
+import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.upload.FileUploadField;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.Model;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -76,6 +78,8 @@
 
 	private static final long serialVersionUID = 1L;
 
+	private final Form<?> form;
+
 	/**
 	 * Constructor that will display the upload progress bar for every submit of the given form.
 	 * 
@@ -105,6 +109,7 @@
 	public UploadProgressBar(String id, final Form<?> form, FileUploadField fileUploadField)
 	{
 		super(id);
+		this.form = form;
 		setOutputMarkupId(true);
 		form.setOutputMarkupId(true);
 		setRenderBodyOnly(true);
@@ -130,26 +135,7 @@
 			log.warn("UploadProgressBar will not work without an UploadWebRequest. See the javadoc for details.");
 		}
 
-		final String fileUploadFieldMarkupId = fileUploadField == null ? ""
-			: fileUploadField.getMarkupId();
-
-		form.add(new AttributeModifier("onsubmit", true, new Model<String>()
-		{
-
-			private static final long serialVersionUID = 1L;
-
-
-			@Override
-			public String getObject()
-			{
-				ResourceReference ref = new ResourceReference(RESOURCE_NAME);
-
-				return "var def=new Wicket.WUPB.Def('" + form.getMarkupId() + "', '" +
-					statusDiv.getMarkupId() + "', '" + barDiv.getMarkupId() + "', '" +
-					getPage().urlFor(ref) + "','" + fileUploadFieldMarkupId +
-					"'); Wicket.WUPB.start(def);";
-			}
-		}));
+		form.add(new FormEnabler(this, statusDiv, barDiv, fileUploadField));
 	}
 
 	/**
@@ -162,4 +148,62 @@
 		return CSS;
 	}
 
+	/** {@inheritDoc} */
+	@Override
+	protected void onRemove()
+	{
+		// remove formenabler we added to the form
+		for (IBehavior behavior : form.getBehaviors())
+		{
+			if (behavior instanceof FormEnabler)
+			{
+				if (((FormEnabler)behavior).getUploadProgressBar() == this)
+				{
+					form.remove(behavior);
+					break;
+				}
+			}
+		}
+		super.onRemove();
+	}
+
+	/**
+	 * Hooks into form onsubmit and triggers the progress bar updates
+	 * 
+	 * @author igor.vaynberg
+	 */
+	private static class FormEnabler extends AbstractBehavior
+	{
+		private static final long serialVersionUID = 1L;
+
+		private final Component status, bar, uploadField;
+		private final UploadProgressBar pbar;
+
+		public FormEnabler(UploadProgressBar pbar, Component status, Component bar,
+			Component uploadField)
+		{
+			this.pbar = pbar;
+			this.bar = bar;
+			this.status = status;
+			this.uploadField = uploadField;
+		}
+
+		@Override
+		public void onComponentTag(Component component, ComponentTag tag)
+		{
+			ResourceReference ref = new ResourceReference(RESOURCE_NAME);
+			final String uploadFieldId = (uploadField == null) ? "" : uploadField.getMarkupId();
+			tag.put("onsubmit", "var def=new Wicket.WUPB.Def('" + component.getMarkupId() + "', '" +
+				status.getMarkupId() + "', '" + bar.getMarkupId() + "', '" +
+				component.getPage().urlFor(ref) + "','" + uploadFieldId +
+				"'); Wicket.WUPB.start(def);");
+		}
+
+		public UploadProgressBar getUploadProgressBar()
+		{
+			return pbar;
+		}
+
+
+	}
 }