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]);
+       }
+}


Reply via email to