Author: ivaynberg
Date: Thu May  3 20:04:27 2007
New Revision: 535063

URL: http://svn.apache.org/viewvc?view=rev&rev=535063
Log:
WICKET-529 : Add ability to remove behaviors

Modified:
    
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
    
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/TestDetachPageExpectedResult.html
    
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
    
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
    
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
    
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java?view=diff&rev=535063&r1=535062&r2=535063
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
 Thu May  3 20:04:27 2007
@@ -315,6 +315,75 @@
        }
 
        /**
+        * Change object for undoing removal of behavior
+        * 
+        * @author Igor Vaynberg (ivaynberg)
+        */
+       private final class RemovedBehaviorChange extends Change
+       {
+
+               private static final long serialVersionUID = 1L;
+
+               private final IBehavior behavior;
+
+               /**
+                * Construct.
+                * 
+                * @param behavior
+                */
+               public RemovedBehaviorChange(IBehavior behavior)
+               {
+                       this.behavior = behavior;
+               }
+
+               public void undo()
+               {
+                       add(behavior);
+               }
+
+               public String toString()
+               {
+                       return "[" + getClass().getName() + " behavior=" + 
behavior.toString() + "]";
+               }
+
+       }
+
+       /**
+        * Change object for undoing addition of behavior
+        * 
+        * @author Igor Vaynberg (ivaynberg)
+        */
+       private final class AddedBehaviorChange extends Change
+       {
+
+               private static final long serialVersionUID = 1L;
+
+               private final IBehavior behavior;
+
+               /**
+                * Construct.
+                * 
+                * @param behavior
+                */
+               public AddedBehaviorChange(IBehavior behavior)
+               {
+                       this.behavior = behavior;
+               }
+
+               public void undo()
+               {
+                       remove(behavior);
+               }
+
+               public String toString()
+               {
+                       return "[" + getClass().getName() + " behavior=" + 
behavior.toString() + "]";
+               }
+
+       }
+
+
+       /**
         * A enabled change operation.
         */
        protected final static class EnabledChange extends Change
@@ -563,7 +632,7 @@
        private static final long serialVersionUID = 1L;
 
        /** List of behaviors to be applied for this Component */
-       private List behaviors = null;
+       private ArrayList behaviors = null;
 
        /** Component flags. See FLAG_* for possible non-exclusive flag values. 
*/
        private int flags = FLAG_VISIBLE | FLAG_ESCAPE_MODEL_STRINGS | 
FLAG_VERSIONED | FLAG_ENABLED
@@ -654,8 +723,44 @@
 
                behaviors.add(behavior);
 
+               if (!behavior.isTemporary())
+               {
+                       addStateChange(new AddedBehaviorChange(behavior));
+               }
+
                // Give handler the opportunity to bind this component
                behavior.bind(this);
+
+               return this;
+       }
+
+       /**
+        * Removes behavior from component
+        * 
+        * @param behavior
+        *            behavior to remove
+        * 
+        * @return this (to allow method call chaining)
+        */
+       public Component remove(final IBehavior behavior)
+       {
+               if (behavior == null)
+               {
+                       throw new IllegalArgumentException("Argument `behavior` 
cannot be null");
+               }
+               if (behaviors == null || !behaviors.contains(behavior) == false)
+               {
+                       throw new IllegalStateException(
+                                       "Tried to remove a behavior that was 
not added to the component. Behavior: "
+                                                       + behavior.toString());
+               }
+
+               if (!behavior.isTemporary())
+               {
+                       addStateChange(new RemovedBehaviorChange(behavior));
+               }
+               behaviors.remove(behavior);
+
                return this;
        }
 
@@ -2924,6 +3029,10 @@
         */
        protected void onDetach()
        {
+               if (behaviors != null)
+               {
+                       behaviors.trimToSize();
+               }
                setFlag(FLAG_DETACHING, false);
 
        }

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/TestDetachPageExpectedResult.html
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/TestDetachPageExpectedResult.html?view=diff&rev=535063&r1=535062&r2=535063
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/TestDetachPageExpectedResult.html
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/TestDetachPageExpectedResult.html
 Thu May  3 20:04:27 2007
@@ -7,6 +7,6 @@
 
 <script type="text/javascript" 
src="resources/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/wicket-ajax-debug.js"></script>
 </head><body>
-  <span wicket:id="comp" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:comp::IBehaviorListener:0', 
function() { }, function() { });" id="comp0">body</span>
+  <span id="comp0" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:comp::IBehaviorListener:0', 
function() { }.bind(this), function() { }.bind(this));" 
wicket:id="comp">body</span>
 </body>
 </html>

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html?view=diff&rev=535063&r1=535062&r2=535063
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkPageExpectedResult.html
 Thu May  3 20:04:27 2007
@@ -8,6 +8,6 @@
 <script type="text/javascript" 
src="resources/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/wicket-ajax-debug.js"></script>
 </head><body>
   <span wicket:id="ajaxLabel" id="ajaxLabel0">UpdateMe</span>
-  <a href="#" wicket:id="ajaxLink" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:ajaxLink::IBehaviorListener:0', 
function() { }, function() { });return !wcall;" id="ajaxLink1">Update</a>
+  <a href="#" wicket:id="ajaxLink" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:ajaxLink::IBehaviorListener:0', 
function() { }.bind(this), function() { }.bind(this));return !wcall;" 
id="ajaxLink1">Update</a>
 </body>
 </html>

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html?view=diff&rev=535063&r1=535062&r2=535063
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxLinkWithBorderPageExpectedResult.html
 Thu May  3 20:04:27 2007
@@ -11,7 +11,7 @@
     Border
     <wicket:body>
     <span wicket:id="ajaxLabel" id="ajaxLabel0">UpdateMe</span>
-    <a href="#" wicket:id="ajaxLink" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:ajaxLink::IBehaviorListener:0', 
function() { }, function() { });return !wcall;" id="ajaxLink1">Update</a>
+    <a href="#" wicket:id="ajaxLink" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:ajaxLink::IBehaviorListener:0', 
function() { }.bind(this), function() { }.bind(this));return !wcall;" 
id="ajaxLink1">Update</a>
   </wicket:body>
     Border
   </wicket:border></span>

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html?view=diff&rev=535063&r1=535062&r2=535063
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/ajax/markup/html/ajaxLink/AjaxPage2_ExpectedResult.html
 Thu May  3 20:04:27 2007
@@ -16,7 +16,7 @@
                             <td width = "100%">
                                 <wicket:body>
          <span wicket:id="ajaxLabel" id="ajaxLabel0">AAAAAAA</span>
-         <a href="#" wicket:id="ajaxLink" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:ajaxLink::IBehaviorListener:0', 
function() { }, function() { });return !wcall;" id="ajaxLink1">Update</a>
+         <a href="#" wicket:id="ajaxLink" onclick="var 
wcall=wicketAjaxGet('?wicket:interface=:0:ajaxLink::IBehaviorListener:0', 
function() { }.bind(this), function() { }.bind(this));return !wcall;" 
id="ajaxLink1">Update</a>
   </wicket:body>
                             </td>
                         </tr>

Modified: 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
URL: 
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html?view=diff&rev=535063&r1=535062&r2=535063
==============================================================================
--- 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
 (original)
+++ 
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
 Thu May  3 20:04:27 2007
@@ -34,13 +34,13 @@
                <tr wicket:id="components">
                  <td valign="top" align="left"><span 
wicket:id="row">1</span>&nbsp;&nbsp;&nbsp;</td>
                  <td valign="top" align="left"><span 
wicket:id="path">label1</span>&nbsp;&nbsp;&nbsp;</td>
-                 <td valign="top" align="left" nowrap><span 
wicket:id="size">486 bytes</span>&nbsp;&nbsp;&nbsp;</td>
+                 <td valign="top" align="left" nowrap><span 
wicket:id="size">491 bytes</span>&nbsp;&nbsp;&nbsp;</td>
                  <td valign="top" align="left"><span 
wicket:id="type">org.apache.wicket.markup.html.basic.Label</span>&nbsp;&nbsp;&nbsp;</td>
                  <td valign="top" align="left"><span 
wicket:id="model">test1</span>&nbsp;&nbsp;&nbsp;</td>
                </tr><tr wicket:id="components">
                  <td valign="top" align="left"><span 
wicket:id="row">2</span>&nbsp;&nbsp;&nbsp;</td>
                  <td valign="top" align="left"><span 
wicket:id="path">label2</span>&nbsp;&nbsp;&nbsp;</td>
-                 <td valign="top" align="left" nowrap><span 
wicket:id="size">487 bytes</span>&nbsp;&nbsp;&nbsp;</td>
+                 <td valign="top" align="left" nowrap><span 
wicket:id="size">492 bytes</span>&nbsp;&nbsp;&nbsp;</td>
                  <td valign="top" align="left"><span 
wicket:id="type">org.apache.wicket.markup.html.basic.Label</span>&nbsp;&nbsp;&nbsp;</td>
                  <td valign="top" align="left"><span 
wicket:id="model">test22</span>&nbsp;&nbsp;&nbsp;</td>
                </tr>


Reply via email to