Author: jkuhnert
Date: Sun Dec 17 11:24:32 2006
New Revision: 488030

URL: http://svn.apache.org/viewvc?view=rev&rev=488030
Log:
Resolves TAPESTRY-1197.

tapestry.widget.Widget recently had a new parameter added that specified 
whether or not to destroy the widget 
in question as part of the sync. The form based widget components weren't using 
this new logic and so 
were incorrectly destroying themselves when they really shouldn't be.

Modified:
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/AbstractFormWidget.java
 Sun Dec 17 11:24:32 2006
@@ -27,6 +27,17 @@
  */
 public abstract class AbstractFormWidget extends AbstractFormComponent 
implements IFormWidget
 {
+    
+    public abstract void setDestroy(boolean destroy);
+    
+    /**
+     * Determined dynamically at runtime during rendering, informs widget 
implementations
+     * if they should destroy their client side widget equivalents or leave 
them in tact.
+     * 
+     * @return True if the widget should be destroyed on this render, false 
otherwise.
+     */
+    public abstract boolean getDestroy();
+    
     /**
      * [EMAIL PROTECTED]
      */
@@ -40,6 +51,25 @@
      */
     protected void renderFormComponent(IMarkupWriter writer, IRequestCycle 
cycle)
     {
+        if(!cycle.isRewinding()) {
+            
+            if (!cycle.getResponseBuilder().isDynamic() 
+                    || cycle.getResponseBuilder().explicitlyContains(this)) {
+                
+                setDestroy(false);
+            } else
+                setDestroy(true);
+        }
+        
+        // don't render if not part of update response
+        
+        if (cycle.getResponseBuilder().isDynamic()
+                && (!cycle.getResponseBuilder().explicitlyContains(this) 
+                        && !cycle.getResponseBuilder().contains(this))) {
+            
+            return;
+        }
+        
         renderFormWidget(writer, cycle);
     }
     

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.java
 Sun Dec 17 11:24:32 2006
@@ -45,8 +45,7 @@
  * 
  * @author jkuhnert
  */
-public abstract class Autocompleter extends AbstractFormWidget 
-    implements ValidatableField, IJSONRender, IDirect
+public abstract class Autocompleter extends AbstractFormWidget implements 
ValidatableField, IJSONRender, IDirect
 {
     // mode, can be remote or local (local being from html rendered option 
elements)
     private static final String MODE_REMOTE = "remote";
@@ -109,6 +108,7 @@
         
         parms.put("props", json.toString());
         parms.put("form", getForm().getName());
+        parms.put("widget", this);
         
         PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, 
this);
         getScript().execute(this, cycle, prs, parms);

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/Autocompleter.script
 Sun Dec 17 11:24:32 2006
@@ -6,6 +6,7 @@
 <input-symbol key="id" required="yes" />
 <input-symbol key="props" required="yes" />
 <input-symbol key="form" required="yes" />
+<input-symbol key="widget" required="yes" />
     <body>
         <unique>
             dojo.require("dojo.widget.Manager");
@@ -16,11 +17,11 @@
     </body>
     <initialization>
         var ${id}prop=${props};
-        tapestry.widget.synchronizeWidgetState("${id}", "Select", ${id}prop);
+        tapestry.widget.synchronizeWidgetState("${id}", "Select", ${id}prop, 
${widget.destroy});
         if (${id}prop["label"] &amp;&amp; ${id}prop["value"]){
             var selw=dojo.widget.byId("${id}");
             selw.setValue(${id}prop["value"]);
             selw.setLabel(${id}prop["label"]);
         }
     </initialization>
-</script>
\ No newline at end of file
+</script>

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.java
 Sun Dec 17 11:24:32 2006
@@ -36,8 +36,7 @@
  * 
  * @author jkuhnert
  */
-public abstract class DropdownDatePicker extends AbstractFormWidget
-    implements TranslatedField
+public abstract class DropdownDatePicker extends AbstractFormWidget implements 
TranslatedField
 {
     
     private static final SimpleDateFormat RFC3339_FORMAT = new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
@@ -94,6 +93,7 @@
         Map parms = new HashMap();
         parms.put("clientId", getClientId());
         parms.put("props", json.toString());
+        parms.put("widget", this);
         
         getScript().execute(this, cycle, 
TapestryUtils.getPageRenderSupport(cycle, this), parms);
     }

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownDatePicker.script
 Sun Dec 17 11:24:32 2006
@@ -5,6 +5,7 @@
 <script>
 <input-symbol key="clientId" required="yes" />
 <input-symbol key="props" required="yes" />
+<input-symbol key="widget" required="yes" />
     <body>
         <unique>
             dojo.require("dojo.widget.*");
@@ -12,6 +13,6 @@
         </unique>
     </body>
     <initialization>
-        tapestry.widget.synchronizeWidgetState("${clientId}", 
"DropdownDatePicker", ${props});
+        tapestry.widget.synchronizeWidgetState("${clientId}", 
"DropdownDatePicker", ${props}, ${widget.destroy});
     </initialization>
 </script>

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.java
 Sun Dec 17 11:24:32 2006
@@ -36,8 +36,7 @@
  * 
  * @author jkuhnert
  */
-public abstract class DropdownTimePicker extends AbstractFormWidget
-    implements TranslatedField
+public abstract class DropdownTimePicker extends AbstractFormWidget implements 
TranslatedField
 {
     private static final SimpleDateFormat RFC3339_FORMAT = new 
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
     
@@ -93,6 +92,7 @@
         Map parms = new HashMap();
         parms.put("clientId", getClientId());
         parms.put("props", json.toString());
+        parms.put("widget", this);
         
         getScript().execute(this, cycle, 
TapestryUtils.getPageRenderSupport(cycle, this), parms);
     }

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/form/DropdownTimePicker.script
 Sun Dec 17 11:24:32 2006
@@ -5,6 +5,7 @@
 <script>
 <input-symbol key="clientId" required="yes" />
 <input-symbol key="props" required="yes" />
+<input-symbol key="widget" required="yes" />
     <body>
         <unique>
             dojo.require("dojo.widget.Manager");
@@ -13,6 +14,6 @@
         </unique>
     </body>
     <initialization>
-        tapestry.widget.synchronizeWidgetState("${clientId}", 
"dropdowntimepicker", ${props});
+        tapestry.widget.synchronizeWidgetState("${clientId}", 
"dropdowntimepicker", ${props}, ${widget.destroy});
     </initialization>
-</script>
\ No newline at end of file
+</script>

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestAutocompleter.java
 Sun Dec 17 11:24:32 2006
@@ -37,6 +37,7 @@
 import org.apache.tapestry.json.IJSONWriter;
 import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.services.DataSqueezer;
+import org.apache.tapestry.services.ResponseBuilder;
 import org.apache.tapestry.valid.IValidationDelegate;
 import org.apache.tapestry.valid.ValidatorException;
 import org.testng.annotations.Test;
@@ -156,6 +157,7 @@
         IAutocompleteModel model = createModel();
         ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
         DataSqueezer ds = newMock(DataSqueezer.class);
+        ResponseBuilder resp = newMock(ResponseBuilder.class);
         
         IRequestCycle cycle = newMock(IRequestCycle.class);
         IForm form = newMock(IForm.class);
@@ -200,9 +202,12 @@
         
         trainGetElementId(form, component, "fred");
         trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
+        expect(cycle.isRewinding()).andReturn(false).anyTimes();
         
         delegate.setFormComponent(component);
+        
+        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
+        expect(resp.isDynamic()).andReturn(false).anyTimes();
         
         vfs.renderContributions(component, writer, cycle);
         

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java?view=diff&rev=488030&r1=488029&r2=488030
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/form/TestDropdownTimePicker.java
 Sun Dec 17 11:24:32 2006
@@ -32,6 +32,7 @@
 import org.apache.tapestry.form.ValidatableFieldSupport;
 import org.apache.tapestry.form.translator.DateTranslator;
 import org.apache.tapestry.json.JSONObject;
+import org.apache.tapestry.services.ResponseBuilder;
 import org.testng.annotations.Test;
 
 
@@ -49,6 +50,7 @@
         ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class);
         DateTranslator translator = new DateTranslator();
         translator.setPattern("hh:mm a");
+        ResponseBuilder resp = newMock(ResponseBuilder.class);
         
         IRequestCycle cycle = newMock(IRequestCycle.class);
         IForm form = newMock(IForm.class);
@@ -88,9 +90,12 @@
         
         trainGetElementId(form, component, "fred");
         trainIsRewinding(form, false);
-        trainIsRewinding(cycle, false);
+        expect(cycle.isRewinding()).andReturn(false).anyTimes();
         
         delegate.setFormComponent(component);
+        
+        expect(cycle.getResponseBuilder()).andReturn(resp).anyTimes();
+        expect(resp.isDynamic()).andReturn(false).anyTimes();
         
         vfs.renderContributions(component, writer, cycle);
         


Reply via email to