Author: mgrigorov
Date: Tue Jul 20 19:01:35 2010
New Revision: 965958

URL: http://svn.apache.org/viewvc?rev=965958&view=rev
Log:
WICKET-2953 Implement page versioning in Wicket 1.5

Add page versioning support.


Added:
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1-1.html
   (with props)
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
   (with props)
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
   (with props)
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-1.html
   (with props)
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-2.html
   (with props)
    wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/InMemoryPageStore.java
   (with props)
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/PageVersioningTest.java
   (with props)
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.html
   (with props)
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.java
   (with props)
Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockPageManager.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/feedback/FeedbackIndicatorFormPage_result2.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/testing3/TestPage_ExpectedResult-2.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-4.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-1.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-2.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/PagedTablePageExpectedResult.html

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java Tue Jul 20 
19:01:35 2010
@@ -38,6 +38,8 @@ import org.apache.wicket.markup.html.Web
 import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.page.IManageablePage;
+import org.apache.wicket.pageStore.IPageManager;
+import org.apache.wicket.pageStore.IPageStore;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.http.WebResponse;
@@ -177,25 +179,18 @@ public abstract class Page extends Marku
        }
 
        /**
-        * When passed to {...@link Page#getVersion(int)} the latest page 
version is returned.
-        */
-       public static final int LATEST_VERSION = -1;
-
-       /**
         * This is a thread local that is used for serializing page references 
in this page.It stores a
         * {...@link IPageSerializer} which can be set by the outside world to 
do the serialization of this
         * page.
         */
        public static final ThreadLocal<IPageSerializer> serializer = new 
ThreadLocal<IPageSerializer>();
 
-       /** True if a new version was created for this request. */
-       private static final short FLAG_NEW_VERSION = FLAG_RESERVED3;
+       /** True if the page hierarchy has been modified in the current 
request. */
+       private static final int FLAG_IS_DIRTY = FLAG_RESERVED3;
 
        /** True if the page should try to be stateless */
        private static final int FLAG_STATELESS_HINT = FLAG_RESERVED5;
 
-       /** True if component changes are being tracked. */
-       private static final short FLAG_TRACK_CHANGES = FLAG_RESERVED4;
 
        /** Log. */
        private static final Logger log = LoggerFactory.getLogger(Page.class);
@@ -225,7 +220,13 @@ public abstract class Page extends Marku
        /** Page parameters used to construct this page */
        private final PageParameters pageParameters;
 
-       /** page render count TODO WICKET-NG more javadoc */
+       /**
+        * The purpose of render count is to detect stale listener interface 
links. For example: there
+        * is a page A rendered in tab 1. Then page A is opened also in tab 2. 
During render page state
+        * changes (i.e. some repeater gets rebuilt). This makes all links on 
tab 2 stale - because they
+        * no longer match the actual page state. This is done by incrementing 
render count. When link
+        * is clicked Wicket checks if it's render count matches the render 
count value of page
+        */
        private int renderCount = 0;
 
        /** TODO WICKET-NG JAVADOC */
@@ -393,11 +394,20 @@ public abstract class Page extends Marku
 
 
        /**
-        * Mark this page as dirty in the session
+        * Mark this page as modified in the session. If versioning is 
supported then a new version of
+        * the page will be stored in {...@link IPageStore page store}
         */
        public final void dirty()
        {
-               // TODO: Increment page id here if manager supports versioning
+               checkHierarchyChange(this);
+
+               final IPageManager pageManager = getSession().getPageManager();
+               if (isVersioned() && pageManager.supportsVersioning() && 
!getFlag(FLAG_IS_DIRTY))
+               {
+                       setFlag(FLAG_IS_DIRTY, true);
+                       setNextAvailableId();
+                       pageManager.touchPage(this);
+               }
        }
 
        /**
@@ -701,8 +711,8 @@ public abstract class Page extends Marku
        @Override
        public String toString()
        {
-               return "[Page class = " + getClass().getName() + ", id = " + 
getId() + ", version = " + 0 +
-                       "]";
+               return "[Page class = " + getClass().getName() + ", id = " + 
getId() + ", render count = " +
+                       getRenderCount() + "]";
        }
 
        /**
@@ -828,30 +838,6 @@ public abstract class Page extends Marku
        }
 
        /**
-        * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL OR 
OVERRIDE.
-        * 
-        * TODO WICKET-NG review if we need this
-        */
-       private final void endVersion()
-       {
-               // Any changes to the page after this point will be tracked by 
the
-               // page's version manager. Since trackChanges is never set to 
false,
-               // this effectively means that change tracking begins after the
-               // first request to a page completes.
-               setFlag(FLAG_TRACK_CHANGES, true);
-
-               // If a new version was created
-               if (getFlag(FLAG_NEW_VERSION))
-               {
-                       // Reset boolean for next request
-                       setFlag(FLAG_NEW_VERSION, false);
-
-                       // Evict any page version(s) as need be
-                       // 
getApplication().getSessionSettings().getPageMapEvictionStrategy().evict(getPageMap());
-               }
-       }
-
-       /**
         * Initializes Page by adding it to the Session and initializing it.
         * 
         * @param pageMap
@@ -864,8 +850,6 @@ public abstract class Page extends Marku
                        setStatelessHint(true);
                }
 
-               setNextAvailableId();
-
                // Set versioning of page based on default
                
setVersioned(Application.get().getPageSettings().getVersionPagesByDefault());
 
@@ -894,6 +878,10 @@ public abstract class Page extends Marku
         */
        protected void componentChanged(Component component, MarkupContainer 
parent)
        {
+               if (!component.isAuto())
+               {
+                       dirty();
+               }
        }
 
        /**
@@ -1081,7 +1069,7 @@ public abstract class Page extends Marku
                        // trigger creation of the actual session in case it 
was deferred
                        
Session.get().getSessionStore().getSessionId(RequestCycle.get().getRequest(), 
true);
 
-                       // Add/touch the response page in the session (its 
pagemap).
+                       // Add/touch the response page in the session.
                        getSession().getPageManager().touchPage(this);
                }
 
@@ -1109,9 +1097,7 @@ public abstract class Page extends Marku
                        log.debug("ending request for page " + this + ", 
request " + getRequest());
                }
 
-               endVersion();
-
-               dirty();
+               setFlag(FLAG_IS_DIRTY, false);
 
                super.onDetach();
        }
@@ -1144,7 +1130,10 @@ public abstract class Page extends Marku
                        initialize();
                }
 
-               dirty();
+               if (!component.isAuto())
+               {
+                       dirty();
+               }
        }
 
        /**
@@ -1166,7 +1155,10 @@ public abstract class Page extends Marku
         */
        final void componentRemoved(final Component component)
        {
-               dirty();
+               if (!component.isAuto())
+               {
+                       dirty();
+               }
        }
 
        /**
@@ -1176,7 +1168,10 @@ public abstract class Page extends Marku
         */
        final void componentStateChanging(final Component component)
        {
-               dirty();
+               if (!component.isAuto())
+               {
+                       dirty();
+               }
        }
 
 

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockPageManager.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockPageManager.java?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockPageManager.java 
(original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockPageManager.java 
Tue Jul 20 19:01:35 2010
@@ -47,6 +47,7 @@ public class MockPageManager implements 
 
        public void destroy()
        {
+               pages.clear();
        }
 
        public IManageablePage getPage(int id)
@@ -70,7 +71,7 @@ public class MockPageManager implements 
 
        public boolean supportsVersioning()
        {
-               return false;
+               return true;
        }
 
        public void touchPage(IManageablePage page)

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 Tue Jul 20 19:01:35 2010
@@ -276,12 +276,17 @@ public class BaseWicketTester
                application.setRequestCycleProvider(new 
TestRequestCycleProvider(
                        application.getRequestCycleProvider()));
                application.setSessionStoreProvider(new 
TestSessionStoreProvider());
-               application.setPageManagerProvider(new 
TestPageManagerProvider());
+               
application.setPageManagerProvider(newTestPageManagerProvider());
 
                // prepare session
                setupNextRequestCycle();
        }
 
+       protected IPageManagerProvider newTestPageManagerProvider()
+       {
+               return new TestPageManagerProvider();
+       }
+
        /**
         * @return last rendered page
         */
@@ -1305,8 +1310,9 @@ public class BaseWicketTester
        public Result hasNoErrorMessage()
        {
                List<Serializable> messages = 
getMessages(FeedbackMessage.ERROR);
-               return isTrue("expect no error message, but contains\n" +
-                       WicketTesterHelper.asLined(messages), 
messages.isEmpty());
+               return isTrue(
+                       "expect no error message, but contains\n" + 
WicketTesterHelper.asLined(messages),
+                       messages.isEmpty());
        }
 
        /**
@@ -1317,8 +1323,9 @@ public class BaseWicketTester
        public Result hasNoInfoMessage()
        {
                List<Serializable> messages = getMessages(FeedbackMessage.INFO);
-               return isTrue("expect no info message, but contains\n" +
-                       WicketTesterHelper.asLined(messages), 
messages.isEmpty());
+               return isTrue(
+                       "expect no info message, but contains\n" + 
WicketTesterHelper.asLined(messages),
+                       messages.isEmpty());
        }
 
        /**

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/debug/WicketComponentTreeTestPage_ExpectedResult.html
 Tue Jul 20 19:01:35 2010
@@ -19,7 +19,7 @@
 <span wicket:id="componentList"><wicket:panel>
        <h2>Page</h2>
        <ul>
-    <p><span wicket:id="info">[Page class = 
org.apache.wicket.markup.html.debug.WicketComponentTreeTestPage, id = 0, 
version = 0]</span>:</p>
+    <p><span wicket:id="info">[Page class = 
org.apache.wicket.markup.html.debug.WicketComponentTreeTestPage, id = 0, render 
count = 0]</span>:</p>
     <table class="tablestyle">
       <thead>
         <tr>

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/feedback/FeedbackIndicatorFormPage_result2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/feedback/FeedbackIndicatorFormPage_result2.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/feedback/FeedbackIndicatorFormPage_result2.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/feedback/FeedbackIndicatorFormPage_result2.html
 Tue Jul 20 19:01:35 2010
@@ -1,6 +1,6 @@
 <html>
 <body>
-<form wicket:id="form" id="form1" method="post" 
action="../page?0-2.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+<form wicket:id="form" id="form1" method="post" 
action="../page?1-2.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
        <input type="text" wicket:id="input" value="" name="input">
 <span wicket:id="feedback"><wicket:panel><span 
style="color:red;">*</span></wicket:panel></span>
 </form>

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/testing3/TestPage_ExpectedResult-2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/testing3/TestPage_ExpectedResult-2.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/testing3/TestPage_ExpectedResult-2.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/header/testing3/TestPage_ExpectedResult-2.html
 Tue Jul 20 19:01:35 2010
@@ -7,6 +7,6 @@
   <span wicket:id="panel"><wicket:panel>
   Panel 2
 </wicket:panel></span>
-  <a wicket:id="link" href="../page?0-2.ILinkListener-link">Replace the 
panel</a>
+  <a wicket:id="link" href="../page?1-2.ILinkListener-link">Replace the 
panel</a>
 </body>
 </html>

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1-1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1-1.html?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1-1.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1-1.html
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,11 @@
+<html xmlns:wicket>
+<body>
+  <form wicket:id="form" id="form1" method="post" 
action="page?2-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+    <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
+    <wicket:enclosure child="label">
+      <input wicket:id="input" type="checkbox" name="input"/>
+      <span wicket:id="label"></span>
+    </wicket:enclosure>
+  </form>
+</body>
+</html>

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1-1.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,8 @@
+<html xmlns:wicket>
+<body>
+  <form wicket:id="form" id="form1" method="post" 
action="page?1-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+    <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
+    <wicket:enclosure child="label"></wicket:enclosure>
+  </form>
+</body>
+</html>

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,8 @@
+<html xmlns:wicket>
+<body>
+  <form wicket:id="form" id="form1" method="post" 
action="page?2-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+    <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
+    <wicket:enclosure child="label"></wicket:enclosure>
+  </form>
+</body>
+</html>

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
 Tue Jul 20 19:01:35 2010
@@ -1,6 +1,6 @@
 <html xmlns:wicket>
 <body>
-  <form wicket:id="form" id="form1" method="post" 
action="page?0-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+  <form wicket:id="form" id="form1" method="post" 
action="page?4-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
     <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
     <wicket:enclosure child="label"></wicket:enclosure>
   </form>

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-1.html?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-1.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-1.html
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,11 @@
+<html xmlns:wicket>
+<body>
+  <form wicket:id="form" id="form1" method="post" 
action="page?5-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+    <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
+    <wicket:enclosure child="label">
+      
+      <span wicket:id="label"></span>
+    </wicket:enclosure>
+  </form>
+</body>
+</html>

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-1.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-2.html?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-2.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-2.html
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,11 @@
+<html xmlns:wicket>
+<body>
+  <form wicket:id="form" id="form1" method="post" 
action="page?6-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+    <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
+    <wicket:enclosure child="label">
+      <input wicket:id="input" type="checkbox" name="input"/>
+      <span wicket:id="label"></span>
+    </wicket:enclosure>
+  </form>
+</body>
+</html>

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3-2.html
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-3.html
 Tue Jul 20 19:01:35 2010
@@ -1,6 +1,6 @@
 <html xmlns:wicket>
 <body>
-  <form wicket:id="form" id="form1" method="post" 
action="page?0-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+  <form wicket:id="form" id="form1" method="post" 
action="page?3-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
     <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
     <wicket:enclosure child="label">
       

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-4.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-4.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-4.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-4.html
 Tue Jul 20 19:01:35 2010
@@ -1,6 +1,6 @@
 <html xmlns:wicket>
 <body>
-  <form wicket:id="form" id="form1" method="post" 
action="page?0-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+  <form wicket:id="form" id="form1" method="post" 
action="page?1-1.IFormSubmitListener-form"><div style="display:none"><input 
type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
     <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
     <wicket:enclosure child="label">
       <input wicket:id="input" type="checkbox" checked="checked" name="input"/>

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
 Tue Jul 20 19:01:35 2010
@@ -171,7 +171,7 @@ public class EnclosureTest extends Wicke
 
                page.reset();
                page.get("form:label").setVisible(false);
-               executePage(page, "EnclosurePageExpectedResult_9-2.html");
+               executePage(page, "EnclosurePageExpectedResult_9-1.html");
                // It should be FALSE, but because of auto-component etc. it 
doesn't
                // assertFalse(page.inputOnBeforeRender);
                assertTrue(page.inputOnBeforeRender);
@@ -180,7 +180,7 @@ public class EnclosureTest extends Wicke
 
                page.reset();
                page.get("form:label").setVisible(true);
-               executePage(page, "EnclosurePageExpectedResult_9.html");
+               executePage(page, "EnclosurePageExpectedResult_9-1-1.html");
                assertTrue(page.inputOnBeforeRender);
                assertFalse(page.inputValidate);
                assertTrue(page.labelOnBeforeRender);
@@ -201,14 +201,14 @@ public class EnclosureTest extends Wicke
 
                page.reset();
                page.get("form:label").setVisible(true);
-               executePage(page, "EnclosurePageExpectedResult_9-3.html");
+               executePage(page, "EnclosurePageExpectedResult_9-3-1.html");
                assertFalse(page.inputOnBeforeRender);
                assertFalse(page.inputValidate);
                assertTrue(page.labelOnBeforeRender);
 
                page.reset();
                page.get("form:input").setVisible(true);
-               executePage(page, "EnclosurePageExpectedResult_9.html");
+               executePage(page, "EnclosurePageExpectedResult_9-3-2.html");
                assertTrue(page.inputOnBeforeRender);
                assertFalse(page.inputValidate);
                assertTrue(page.labelOnBeforeRender);
@@ -226,8 +226,9 @@ public class EnclosureTest extends Wicke
 
                page.reset();
                FormTester formTester = tester.newFormTester("form");
-               tester.getRequest().getPostParameters().setParameterValue(
-                       ((CheckBox)page.get("form:input")).getInputName(), 
"true");
+               tester.getRequest()
+                       .getPostParameters()
+                       
.setParameterValue(((CheckBox)page.get("form:input")).getInputName(), "true");
                page.get("form:label").setVisible(true);
                formTester.submit();
                tester.assertRenderedPage(clazz);
@@ -237,12 +238,13 @@ public class EnclosureTest extends Wicke
                assertTrue(page.labelOnBeforeRender);
 
                page.reset();
-               tester.getRequest().getPostParameters().setParameterValue(
-                       ((CheckBox)page.get("form:input")).getInputName(), 
"true");
+               tester.getRequest()
+                       .getPostParameters()
+                       
.setParameterValue(((CheckBox)page.get("form:input")).getInputName(), "true");
                page.get("form:label").setVisible(false);
                tester.submitForm("form");
                tester.assertRenderedPage(clazz);
-               assertResultPage("EnclosurePageExpectedResult_9-2.html");
+               assertResultPage("EnclosurePageExpectedResult_9-2-1.html");
                // It should be FALSE, but because of auto-component etc. it 
doesn't
                // assertFalse(page.inputOnBeforeRender);
                assertTrue(page.inputOnBeforeRender);

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-1.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-1.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-1.html
 Tue Jul 20 19:01:35 2010
@@ -3,6 +3,6 @@
 <title>Paged Table Page</title>
 </head>
 <body><ul><li wicket:id="table"><span wicket:id="txt">five</span></li><li 
wicket:id="table"><span wicket:id="txt">six</span></li></ul>
-<a wicket:id="prev" href="../page?0-2.ILinkListener-prev">Prev</a><a 
wicket:id="nextNext" href="../page?0-2.ILinkListener-nextNext">NextNext</a>
+<a wicket:id="prev" href="../page?1-2.ILinkListener-prev">Prev</a><a 
wicket:id="nextNext" href="../page?1-2.ILinkListener-nextNext">NextNext</a>
 </body>
 </html>

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-2.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-2.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/IncrementalTableNavigationPage_ExpectedResult_1-2.html
 Tue Jul 20 19:01:35 2010
@@ -3,6 +3,6 @@
 <title>Paged Table Page</title>
 </head>
 <body><ul><li wicket:id="table"><span wicket:id="txt">three</span></li><li 
wicket:id="table"><span wicket:id="txt">four</span></li></ul>
-<a wicket:id="prev" href="../page?0-3.ILinkListener-prev">Prev</a><a 
wicket:id="nextNext" href="../page?0-3.ILinkListener-nextNext">NextNext</a>
+<a wicket:id="prev" href="../page?2-3.ILinkListener-prev">Prev</a><a 
wicket:id="nextNext" href="../page?2-3.ILinkListener-nextNext">NextNext</a>
 </body>
 </html>

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/PagedTablePageExpectedResult.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/PagedTablePageExpectedResult.html?rev=965958&r1=965957&r2=965958&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/PagedTablePageExpectedResult.html
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/PagedTablePageExpectedResult.html
 Tue Jul 20 19:01:35 2010
@@ -17,6 +17,6 @@
 <title>Paged Table Page</title>
 </head>
 <body><ul><li wicket:id="table"><span wicket:id="txt">three</span></li></ul>
-<ul><li wicket:id="navigation"><a wicket:id="pageLink" 
href="../page?0-2.ILinkListener-navigation-0-pageLink" title="Go to page 
1"><span wicket:id="pageNumber">1</span></a></li><li 
wicket:id="navigation"><span wicket:id="pageLink" title="Go to page 
2"><em><span wicket:id="pageNumber">2</span></em></span></li></ul>
+<ul><li wicket:id="navigation"><a wicket:id="pageLink" 
href="../page?1-2.ILinkListener-navigation-0-pageLink" title="Go to page 
1"><span wicket:id="pageNumber">1</span></a></li><li 
wicket:id="navigation"><span wicket:id="pageLink" title="Go to page 
2"><em><span wicket:id="pageNumber">2</span></em></span></li></ul>
 </body>
 </html>

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/InMemoryPageStore.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/InMemoryPageStore.java?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/InMemoryPageStore.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/InMemoryPageStore.java
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,73 @@
+package org.apache.wicket.versioning;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.wicket.pageStore.IDataStore;
+
+/**
+ * An implementation of {...@link IDataStore} that stores the data in memory. 
Used only for testing
+ * purposes.
+ * 
+ * @author martin-g
+ */
+class InMemoryPageStore implements IDataStore
+{
+
+       private final Map<String, Map<Integer, byte[]>> store;
+
+       InMemoryPageStore()
+       {
+               store = new HashMap<String, Map<Integer, byte[]>>();
+       }
+
+       public void destroy()
+       {
+               store.clear();
+       }
+
+       public byte[] getData(String sessionId, int pageId)
+       {
+               byte[] pageAsBytes = null;
+
+               final Map<Integer, byte[]> sessionPages = store.get(sessionId);
+               if (sessionPages != null)
+               {
+                       pageAsBytes = sessionPages.get(Integer.valueOf(pageId));
+               }
+
+               return pageAsBytes;
+       }
+
+       public void removeData(String sessionId, int pageId)
+       {
+               final Map<Integer, byte[]> sessionPages = store.get(sessionId);
+               if (sessionPages != null)
+               {
+                       sessionPages.remove(Integer.valueOf(pageId));
+               }
+       }
+
+       public void removeData(String sessionId)
+       {
+               store.remove(sessionId);
+       }
+
+       public void storeData(String sessionId, int pageId, byte[] pageAsBytes)
+       {
+               Map<Integer, byte[]> sessionPages = store.get(sessionId);
+               if (sessionPages == null)
+               {
+                       sessionPages = new HashMap<Integer, byte[]>();
+                       store.put(sessionId, sessionPages);
+               }
+
+               sessionPages.put(Integer.valueOf(pageId), pageAsBytes);
+       }
+
+       public boolean isReplicated()
+       {
+               return false;
+       }
+
+}
\ No newline at end of file

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/InMemoryPageStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/PageVersioningTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/PageVersioningTest.java?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/PageVersioningTest.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/PageVersioningTest.java
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.versioning;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.wicket.IPageManagerProvider;
+import org.apache.wicket.Page;
+import org.apache.wicket.pageStore.AsynchronousDataStore;
+import org.apache.wicket.pageStore.DefaultPageStore;
+import org.apache.wicket.pageStore.IDataStore;
+import org.apache.wicket.pageStore.IPageManager;
+import org.apache.wicket.pageStore.IPageManagerContext;
+import org.apache.wicket.pageStore.PersistentPageManager;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * A test for page versioning
+ * 
+ * @author martin-g
+ */
+public class PageVersioningTest
+{
+       WicketTester wicketTester;
+
+       @Before
+       public void setup()
+       {
+               final WebApplication application = new WebApplication()
+               {
+
+                       @Override
+                       public Class<? extends Page> getHomePage()
+                       {
+                               return VersioningTestPage.class;
+                       }
+               };
+
+               wicketTester = new WicketTester(application)
+               {
+
+                       /**
+                        * @see 
org.apache.wicket.util.tester.BaseWicketTester#newTestPageManagerProvider()
+                        */
+                       @Override
+                       protected IPageManagerProvider 
newTestPageManagerProvider()
+                       {
+                               return new IPageManagerProvider()
+                               {
+
+                                       public IPageManager get(final 
IPageManagerContext context)
+                                       {
+
+                                               final IDataStore dataStore = 
new InMemoryPageStore();
+                                               final AsynchronousDataStore 
asyncDS = new AsynchronousDataStore(dataStore);
+                                               final DefaultPageStore 
pageStore = new DefaultPageStore(
+                                                       application.getName(), 
asyncDS, 40);
+                                               return new 
PersistentPageManager(application.getName(), pageStore, context);
+                                       }
+                               };
+                       }
+
+               };
+       }
+
+       @Test
+       public void versionPage()
+       {
+               Page versioningPage = 
wicketTester.startPage(VersioningTestPage.class);
+
+               assertEquals(0, versioningPage.getPageId());
+
+               wicketTester.clickLink("noopLink");
+               assertEquals(0, versioningPage.getPageId());
+
+               wicketTester.clickLink("ajaxUpdatingLink", true);
+               assertEquals(0, versioningPage.getPageId());
+
+               wicketTester.clickLink("ajaxUpdatingChangeModelLink", true);
+               assertEquals(1, versioningPage.getPageId());
+
+               wicketTester.clickLink("addTemporaryBehaviorLink");
+               assertEquals(1, versioningPage.getPageId());
+
+               wicketTester.clickLink("addBehaviorLink");
+               assertEquals(2, versioningPage.getPageId());
+
+               wicketTester.clickLink("changeEnabledStateLink");
+               assertEquals(3, versioningPage.getPageId());
+
+               wicketTester.clickLink("changeVisibilityStateLink");
+               assertEquals(4, versioningPage.getPageId());
+
+               try
+               {
+                       // disable page versioning and execute something that 
otherwise would create a new
+                       // version
+                       versioningPage.setVersioned(false);
+                       wicketTester.clickLink("changeVisibilityStateLink");
+                       assertEquals(4, versioningPage.getPageId());
+               }
+               finally
+               {
+                       versioningPage.setVersioned(true);
+               }
+
+               checkPageVersionsAreStored(versioningPage);
+       }
+
+       /**
+        * Asserts that there is a version of the page for each operation that 
modified the page
+        * 
+        * @param pageManager
+        * @param versioningPage
+        */
+       private void checkPageVersionsAreStored(Page versioningPage)
+       {
+               IPageManager pageManager = 
wicketTester.getApplication().getPageManager();
+
+               int lastPageId = versioningPage.getPageId();
+               while (lastPageId >= 0)
+               {
+                       assertNotNull(pageManager.getPage(lastPageId));
+                       lastPageId--;
+               }
+       }
+}

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/PageVersioningTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.html?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.html
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,28 @@
+<html>
+
+       <head>
+               <title>Versioning test page</title>
+       </head>
+       
+       <body>
+               
+               Non-Ajax link: <a wicket:id="noopLink">non ajax link</a><br/>
+               
+               <!-- a component for modifications -->
+               <div wicket:id="label"></div>
+               
+               Ajax Updating link: <a wicket:id="ajaxUpdatingLink">ajax 
updating link</a><br/>
+               
+               Ajax Updating + change model link: <a 
wicket:id="ajaxUpdatingChangeModelLink">ajax updating + change model 
link</a><br/>
+               
+               Non-Ajax add temporary behavior link: <a 
wicket:id="addTemporaryBehaviorLink">non ajax add temporary behavior 
link</a><br/>
+               
+               Non-Ajax add non-temporary behavior link: <a 
wicket:id="addBehaviorLink">non ajax add non-temporary behavior link</a><br/>
+               
+               Non-Ajax change component enabled state link: <a 
wicket:id="changeEnabledStateLink">non ajax change component enabled state 
link</a><br/>
+               
+               Non-Ajax change component visbility state link: <a 
wicket:id="changeVisibilityStateLink">non ajax change component visibility 
state link</a><br/>
+               
+       </body> 
+
+</html>
\ No newline at end of file

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.java?rev=965958&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.java
 Tue Jul 20 19:01:35 2010
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.versioning;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.behavior.AbstractBehavior;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * @author martin-g
+ */
+...@suppresswarnings("serial")
+public class VersioningTestPage extends WebPage
+{
+
+       private static final Logger logger = 
LoggerFactory.getLogger(VersioningTestPage.class);
+
+       /**
+        * 
+        * Construct.
+        * 
+        * @param pageParameters
+        */
+       public VersioningTestPage(PageParameters pageParameters)
+       {
+               super(pageParameters);
+
+               addNoopLink();
+
+               // a target component which will be manipulated
+               final Label label = new Label("label", "Label initial value");
+               label.setOutputMarkupId(true);
+               add(label);
+
+               ajaxReRenderComponent(label);
+
+               changeComponentModel(label);
+
+               addTemporaryBehavior(label);
+
+               addNonTemporaryBehavior(label);
+
+               changeComponentEnabledState(label);
+
+               changeComponentVisibilityState(label);
+       }
+
+       /**
+        * a link that does nothing in its onClick. should not make new version
+        */
+       private void addNoopLink()
+       {
+               final Link<Void> noopLink = new Link<Void>("noopLink")
+               {
+
+                       @Override
+                       public void onClick()
+                       {
+                               logger.debug("Current page version when 
clicking the non-ajax link: {}",
+                                       getPage().getPageId());
+                       }
+               };
+               add(noopLink);
+       }
+
+       /**
+        * ajax link that just re-renders no modified label. should not create 
new version
+        * 
+        * @param targetComponent
+        */
+       private void ajaxReRenderComponent(final Component targetComponent)
+       {
+               final AjaxLink<Void> ajaxUpdatingLink = new 
AjaxLink<Void>("ajaxUpdatingLink")
+               {
+                       @Override
+                       public void onClick(AjaxRequestTarget target)
+                       {
+                               target.addComponent(targetComponent);
+                       }
+               };
+               add(ajaxUpdatingLink);
+       }
+
+       /**
+        * ajax link that changes the model of a component. should create a new 
version
+        * 
+        * @param targetComponent
+        */
+       private void changeComponentModel(final Component targetComponent)
+       {
+               final AjaxLink<Void> ajaxUpdatingChangeModelLink = new 
AjaxLink<Void>(
+                       "ajaxUpdatingChangeModelLink")
+               {
+                       @Override
+                       public void onClick(AjaxRequestTarget target)
+                       {
+                               targetComponent.setDefaultModelObject("label 
new value");
+                               target.addComponent(targetComponent);
+                       }
+               };
+               add(ajaxUpdatingChangeModelLink);
+       }
+
+       /**
+        * a link that adds a temporary behavior to a component. should not 
create a new version
+        * 
+        * @param targetComponent
+        */
+       private void addTemporaryBehavior(final Component targetComponent)
+       {
+               final Link<Void> addTemporaryBehaviorLink = new 
Link<Void>("addTemporaryBehaviorLink")
+               {
+                       @Override
+                       public void onClick()
+                       {
+                               targetComponent.add(new AbstractBehavior()
+                               {
+
+                                       /**
+                                        * @see 
org.apache.wicket.behavior.AbstractBehavior#isTemporary()
+                                        */
+                                       @Override
+                                       public boolean isTemporary()
+                                       {
+                                               return true;
+                                       }
+
+                               });
+                       }
+               };
+               add(addTemporaryBehaviorLink);
+       }
+
+       /**
+        * adds a link that adds a non-temporary behavior to a component. 
should create a new version
+        * 
+        * @param targetComponent
+        */
+       private void addNonTemporaryBehavior(final Component targetComponent)
+       {
+               final Link<Void> addBehaviorLink = new 
Link<Void>("addBehaviorLink")
+               {
+                       @Override
+                       public void onClick()
+                       {
+                               targetComponent.add(new AbstractBehavior()
+                               {
+
+                                       /**
+                                        * @see 
org.apache.wicket.behavior.AbstractBehavior#isTemporary()
+                                        */
+                                       @Override
+                                       public boolean isTemporary()
+                                       {
+                                               return false;
+                                       }
+
+                               });
+                       }
+               };
+               add(addBehaviorLink);
+       }
+
+
+       /**
+        * adds a link that changes the 'enabled' state of a component. should 
create a new version
+        * 
+        * @param targetComponent
+        */
+       private void changeComponentVisibilityState(final Component 
targetComponent)
+       {
+               final Link<Void> link = new 
Link<Void>("changeVisibilityStateLink")
+               {
+                       @Override
+                       public void onClick()
+                       {
+                               
targetComponent.setVisible(!targetComponent.isVisible());
+                       }
+               };
+               add(link);
+       }
+
+       /**
+        * adds a link that changes the 'enabled' state of a component. should 
create a new version
+        * 
+        * @param targetComponent
+        */
+       private void changeComponentEnabledState(final Component 
targetComponent)
+       {
+               final Link<Void> link = new Link<Void>("changeEnabledStateLink")
+               {
+                       @Override
+                       public void onClick()
+                       {
+                               
targetComponent.setEnabled(!targetComponent.isEnabled());
+                       }
+               };
+               add(link);
+       }
+}

Propchange: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/versioning/VersioningTestPage.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to