Author: bdotte
Date: Mon Jan 21 16:05:31 2008
New Revision: 614064
URL: http://svn.apache.org/viewvc?rev=614064&view=rev
Log:
Fixes TAPESTRY-2039. Make DirectLink and AbstractSubmit handle Collection,
Object array, and individual Object parameters the same way.
Added:
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/link/DirectLinkTest.java
Modified:
tapestry/tapestry4/trunk/src/site/xdoc/components/form/submit.xml
tapestry/tapestry4/trunk/src/site/xdoc/components/link/directlink.xml
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java
Modified: tapestry/tapestry4/trunk/src/site/xdoc/components/form/submit.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/src/site/xdoc/components/form/submit.xml?rev=614064&r1=614063&r2=614064&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/src/site/xdoc/components/form/submit.xml (original)
+++ tapestry/tapestry4/trunk/src/site/xdoc/components/form/submit.xml Mon Jan
21 16:05:31 2008
@@ -183,7 +183,8 @@
<p>
If the parameter is a Collection, it will be
converted to an Object
array (to match the IRequestCycle
getListenerParameters()
- signature).
+ signature). If the parameter is an Object
array, it will be used
+ as-is for the listener parameters.
</p>
<p>
Allows listeners provided by the 'action'
parameter to access any
Modified: tapestry/tapestry4/trunk/src/site/xdoc/components/link/directlink.xml
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/src/site/xdoc/components/link/directlink.xml?rev=614064&r1=614063&r2=614064&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/src/site/xdoc/components/link/directlink.xml
(original)
+++ tapestry/tapestry4/trunk/src/site/xdoc/components/link/directlink.xml Mon
Jan 21 16:05:31 2008
@@ -83,7 +83,7 @@
Object[] or
<br />
- List
+ Collection
</td>
<td>no</td>
<td> </td>
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java?rev=614064&r1=614063&r2=614064&view=diff
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/AbstractSubmit.java
Mon Jan 21 16:05:31 2008
@@ -14,19 +14,26 @@
package org.apache.tapestry.form;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.*;
+import org.apache.tapestry.IActionListener;
+import org.apache.tapestry.IDynamicInvoker;
+import org.apache.tapestry.IForm;
+import org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.IScript;
+import org.apache.tapestry.PageRenderSupport;
+import org.apache.tapestry.TapestryUtils;
import org.apache.tapestry.engine.DirectServiceParameter;
import org.apache.tapestry.engine.IEngineService;
import org.apache.tapestry.json.JSONObject;
import org.apache.tapestry.listener.ListenerInvoker;
import org.apache.tapestry.util.ScriptUtils;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
/**
* Superclass for components submitting their form.
*
@@ -72,7 +79,11 @@
Object parameters = getParameters();
if (parameters != null)
{
- if (parameters instanceof Collection)
+ if (parameters instanceof Object[])
+ {
+ cycle.setListenerParameters((Object[]) parameters);
+ }
+ else if (parameters instanceof Collection)
{
cycle.setListenerParameters(((Collection)
parameters).toArray());
}
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java?rev=614064&r1=614063&r2=614064&view=diff
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/link/DirectLink.java
Mon Jan 21 16:05:31 2008
@@ -14,7 +14,7 @@
package org.apache.tapestry.link;
-import java.util.List;
+import java.util.Collection;
import org.apache.tapestry.IActionListener;
import org.apache.tapestry.IDirect;
@@ -61,7 +61,7 @@
* <ul>
* <li>null (returns null)
* <li>An array of Object (returns the array)
- * <li>A [EMAIL PROTECTED] List}(returns an array of the
values in the List})
+ * <li>A [EMAIL PROTECTED] Collection}(returns an array of
the values in the Collection})
* <li>A single object (returns the object as a
single-element array)
* </ul>
* @return An array representation of the input object.
@@ -76,12 +76,8 @@
if (parameterValue instanceof Object[])
return (Object[]) parameterValue;
- if (parameterValue instanceof List)
- {
- List list = (List) parameterValue;
-
- return list.toArray();
- }
+ if (parameterValue instanceof Collection)
+ return ((Collection) parameterValue).toArray();
return new Object[] { parameterValue };
}
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java?rev=614064&r1=614063&r2=614064&view=diff
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java
(original)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/TestSubmit.java
Mon Jan 21 16:05:31 2008
@@ -14,8 +14,20 @@
package org.apache.tapestry.form;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
import org.apache.hivemind.util.PropertyUtils;
-import org.apache.tapestry.*;
+import org.apache.tapestry.IActionListener;
+import org.apache.tapestry.IBinding;
+import org.apache.tapestry.IForm;
+import org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.IScript;
+import org.apache.tapestry.PageRenderSupport;
import org.apache.tapestry.engine.DirectServiceParameter;
import org.apache.tapestry.engine.IEngineService;
import org.apache.tapestry.engine.ILink;
@@ -27,8 +39,6 @@
import static org.easymock.EasyMock.*;
import org.testng.annotations.Test;
-import java.util.*;
-
/**
* Tests for [EMAIL PROTECTED] org.apache.tapestry.form.Submit}.
*
@@ -591,7 +601,36 @@
verify();
}
- public void test_Trigger_With_Action_And_Multiple_Parameters()
+ public void test_Trigger_With_Action_And_Object_Array_Parameter()
+ {
+ IActionListener action = newListener();
+ MockForm form = new MockForm();
+ IRequestCycle cycle = newCycle();
+
+ Object parameter = new Object[] {"p1", "p2"};
+ Creator creator = new Creator();
+ Submit submit = (Submit) creator.newInstance(Submit.class, new Object[]
+ { "action", action, "parameters", parameter, "listenerInvoker",
+ new ListenerInvokerTerminator() });
+
+ cycle.setListenerParameters(aryEq(new Object[] { "p1", "p2" }));
+
+ replay();
+
+ submit.handleClick(cycle, form);
+
+ verify();
+
+ action.actionTriggered(submit, cycle);
+
+ replay();
+
+ form.runDeferred();
+
+ verify();
+ }
+
+ public void test_Trigger_With_Action_And_Collection_Parameter()
{
IActionListener action = newListener();
MockForm form = new MockForm();
Added:
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/link/DirectLinkTest.java
URL:
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/link/DirectLinkTest.java?rev=614064&view=auto
==============================================================================
---
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/link/DirectLinkTest.java
(added)
+++
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/link/DirectLinkTest.java
Mon Jan 21 16:05:31 2008
@@ -0,0 +1,34 @@
+package org.apache.tapestry.link;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.tapestry.BaseComponentTestCase;
+import org.testng.annotations.Test;
+
[EMAIL PROTECTED]
+public class DirectLinkTest extends BaseComponentTestCase
+{
+ public void testConstructServiceParameters()
+ {
+ assertNull(DirectLink.constructServiceParameters(null));
+
+ String plainObject = "plainObject";
+ Object[] plainObjectResult =
DirectLink.constructServiceParameters(plainObject);
+ assertEquals(1, plainObjectResult.length);
+ assertTrue(plainObject.equals(plainObjectResult[0]));
+
+ Object[] objectArray = new Object[] {1, 2, 3};
+ Object[] objectArrayResult =
DirectLink.constructServiceParameters(objectArray);
+ assertEquals(3, objectArrayResult.length);
+ assertEquals(3, objectArrayResult[2]);
+
+ Set set = new HashSet();
+ set.add(1);
+ set.add(2);
+ set.add(3);
+ Object[] setResult = DirectLink.constructServiceParameters(set);
+ assertEquals(3, setResult.length);
+ assertEquals(2, setResult[1]);
+ }
+}