You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/08/09 18:12:30 UTC

svn commit: r564255 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java

Author: jkuhnert
Date: Thu Aug  9 09:12:29 2007
New Revision: 564255

URL: http://svn.apache.org/viewvc?view=rev&rev=564255
Log:
Fixes a deferred form connection bug where the supposedly unique hash generated from EventListener wasn't actually unique because it wasn't using the component client id as well.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java?view=diff&rev=564255&r1=564254&r2=564255
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java Thu Aug  9 09:12:29 2007
@@ -83,7 +83,7 @@
         Boolean _async;
         Boolean _validate;
         String _uniqueHash;
-        
+
         public DeferredFormConnection(String formId, Map scriptParms, Boolean async,
                                       Boolean validate, String uniqueHash)
         {
@@ -411,7 +411,12 @@
                     deferFormConnection(formId, scriptParms,
                                         listener.isAsync(),
                                         listener.isValidateForm(),
-                                        ScriptUtils.functionHash(listener));
+                                        ScriptUtils.functionHash(listener.hashCode() + (String) scriptParms.get("clientId")));
+                    
+                    /*deferFormConnection(formId, scriptParms,
+                                        listener.isAsync(),
+                                        listener.isValidateForm(),
+                                        ScriptUtils.functionHash(listener.hashCode() + (String) scriptParms.get("clientId")));*/
 
                     // re-looping over the same property -> event listener list would
                     // result in duplicate bindings so break out 
@@ -459,10 +464,10 @@
             deferred = new ArrayList();
             _deferredFormConnections.put(formId, deferred);
         }
-        
+
         DeferredFormConnection connection = new DeferredFormConnection(formId, scriptParms, Boolean.valueOf(async),
                                                                        Boolean.valueOf(validate), uniqueHash);
-        
+
         if (!deferred.contains(connection))
             deferred.add(connection);
     }
@@ -475,7 +480,7 @@
 
     /**
      * Sets the invoker to use/manage event connections.
-     * @param invoker
+     * @param invoker Manages component event invocations.
      */
     public void setEventInvoker(IComponentEventInvoker invoker)
     {
@@ -486,7 +491,7 @@
      * Sets the engine service that will be used to construct callback
      * URL references to invoke the specified components event listener.
      *
-     * @param eventEngine
+     * @param eventEngine Engine used to create client side urls for updating things async.
      */
     public void setEventEngine(IEngineService eventEngine)
     {
@@ -496,7 +501,7 @@
     /**
      * The javascript that will be used to connect the component
      * to its configured events. (if any)
-     * @param script
+     * @param script The component script functions.
      */
     public void setComponentScript(String script)
     {
@@ -506,7 +511,7 @@
     /**
      * The javascript that will be used to connect the widget component
      * to its configured events. (if any)
-     * @param script
+     * @param script The dojo widget based script.
      */
     public void setWidgetScript(String script)
     {
@@ -516,7 +521,7 @@
     /**
      * The javascript that connects html elements to direct
      * listener methods.
-     * @param script
+     * @param script Event element target scripts.
      */
     public void setElementScript(String script)
     {
@@ -525,7 +530,7 @@
 
     /**
      * The service that parses script files.
-     * @param scriptSource
+     * @param scriptSource Service.
      */
     public void setScriptSource(IScriptSource scriptSource)
     {

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java?view=diff&rev=564255&r1=564254&r2=564255
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java Thu Aug  9 09:12:29 2007
@@ -105,7 +105,8 @@
         Map elmEvents = spec.getElementEvents();
         Iterator keyIt = elmEvents.keySet().iterator();
         
-        while (keyIt.hasNext()) {
+        while (keyIt.hasNext())
+        {
             String elem = (String)keyIt.next();
             assertEquals(elem, "elementId");
             
@@ -142,7 +143,6 @@
         trainGetURL(link, "/some/url");
         
         expect(scriptSource.getScript(elemScriptResource)).andReturn(script);
-        
         script.execute(eq(component), eq(cycle), eq(prs), isA(Map.class));
         
         replay();
@@ -163,7 +163,6 @@
         expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs).anyTimes();
         
         expect(widget.getSpecification()).andReturn(widgetSpec);
-        
         expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
         
         expect(widget.getExtendedId()).andReturn("wid1").anyTimes();
@@ -265,12 +264,24 @@
         expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
         expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
         
-        expect(comp2.getExtendedId()).andReturn("comp2").anyTimes();
-        expect(comp2.getClientId()).andReturn("comp2").anyTimes();
-        
+        expect(comp2.getExtendedId()).andReturn("comp2");
+        expect(comp2.getClientId()).andReturn("comp2");
+
         expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
         expect(comp2.getSpecification()).andReturn(comp2Spec);
-        
+
+        // second render of comp2
+
+        expect(cycle.isRewinding()).andReturn(false);
+        expect(cycle.getAttribute(TapestryUtils.PAGE_RENDER_SUPPORT_ATTRIBUTE)).andReturn(prs);
+        expect(cycle.getAttribute(TapestryUtils.FIELD_PRERENDER)).andReturn(null);
+
+        expect(comp2.getExtendedId()).andReturn("comp2");
+        expect(comp2.getClientId()).andReturn("comp2_0");
+
+        expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
+        expect(comp2.getSpecification()).andReturn(comp2Spec);
+
         // render of component
         
         expect(cycle.isRewinding()).andReturn(false);
@@ -284,6 +295,7 @@
         
         worker.renderComponent(cycle, comp1);
         worker.renderComponent(cycle, comp2);
+        worker.renderComponent(cycle, comp2); // to test unique client id connections
         worker.renderComponent(cycle, component);
         
         verify();
@@ -293,7 +305,7 @@
         List deferred = (List)worker.getDefferedFormConnections().get("form1");
         
         assert deferred != null;
-        assertEquals(deferred.size(), 2);
+        assertEquals(deferred.size(), 3);
 
         ComponentEventConnectionWorker.DeferredFormConnection fConn = (ComponentEventConnectionWorker.DeferredFormConnection)deferred.get(0);
         
@@ -315,7 +327,6 @@
         // test comp2 connections
 
         fConn = (ComponentEventConnectionWorker.DeferredFormConnection)deferred.get(1);
-        
         parm = fConn._scriptParms;
 
         assert fConn._async;
@@ -329,9 +340,24 @@
         
         assertEquals(parm.get("clientId"), "comp2");
         assertEquals(parm.get("component"), comp2);
-    }
 
-    
+        // test comp2 second render connections
+
+        fConn = (ComponentEventConnectionWorker.DeferredFormConnection)deferred.get(2);
+        parm = fConn._scriptParms;
+
+        assert fConn._async;
+        assert fConn._validate;
+
+        assert parm.get("clientId") != null;
+        assert parm.get("component") != null;
+        assert parm.get("url") == null;
+        assert parm.get("formEvents") == null;
+        assert parm.get("target") == null;
+
+        assertEquals(parm.get("clientId"), "comp2_0");
+        assertEquals(parm.get("component"), comp2);
+    }
     
     public void test_Form_Render_Deffered()
     {
@@ -394,7 +420,6 @@
         expect(comp1.getClientId()).andReturn("comp1").anyTimes();
         
         expect(cycle.getAttribute(ComponentEventConnectionWorker.FORM_NAME_LIST + "form1")).andReturn(null);
-        
         expect(comp1.getSpecification()).andReturn(comp1Spec).anyTimes();
         
         // comp2 render