Author: ivaynberg
Date: Tue Jul 13 01:47:58 2010
New Revision: 963557

URL: http://svn.apache.org/viewvc?rev=963557&view=rev
Log:
make page#oninitialize() work

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Page.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=963557&r1=963556&r2=963557&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Tue Jul 
13 01:47:58 2010
@@ -356,7 +356,7 @@ public abstract class Component implemen
        /** Reserved subclass-definable flag bit */
        protected static final int FLAG_RESERVED5 = 0x10000;
        /** Reserved subclass-definable flag bit */
-       private static final int FLAG_INITIALIZED = 0x20000;
+       protected static final int FLAG_INITIALIZED = 0x20000;
        /** Reserved subclass-definable flag bit */
        private static final int FLAG_NOTUSED7 = 0x40000;
        /** Reserved subclass-definable flag bit */
@@ -665,8 +665,8 @@ public abstract class Component implemen
                final IDebugSettings debugSettings = 
Application.get().getDebugSettings();
                if (debugSettings.isLinePreciseReportingOnNewComponentEnabled())
                {
-                       setMetaData(CONSTRUCTED_AT_KEY, 
ComponentStrings.toString(this, new MarkupException(
-                               "constructed")));
+                       setMetaData(CONSTRUCTED_AT_KEY,
+                               ComponentStrings.toString(this, new 
MarkupException("constructed")));
                }
 
                if (model != null)
@@ -2156,13 +2156,17 @@ public abstract class Component implemen
         * be called on the page. On AJAX request, this method must be called 
on updated component.
         * </p>
         * 
+        * TODO this method is not part of public api, so rename to 
internalPrepareForRender
+        * 
         * @param setRenderingFlag
         *            Whether to set the rendering flag. This must be true if 
the page is about to be
         *            rendered. However, there are usecases to call this method 
without an immediate
         *            render (e.g. on stateless listner request target to build 
the component
         *            hierarchy), in that case setRenderingFlag should be false
+        * 
+        * 
         */
-       public final void prepareForRender(boolean setRenderingFlag)
+       public void prepareForRender(boolean setRenderingFlag)
        {
                beforeRender();
 
@@ -3165,9 +3169,13 @@ public abstract class Component implemen
                        final Page page = findPage();
                        if (page == null)
                        {
-                               return new StringBuffer("[Component id = 
").append(getId()).append(
-                                       ", page = <No Page>, path = 
").append(getPath()).append(".").append(
-                                       
Classes.simpleName(getClass())).append("]").toString();
+                               return new StringBuffer("[Component id = 
").append(getId())
+                                       .append(", page = <No Page>, path = ")
+                                       .append(getPath())
+                                       .append(".")
+                                       .append(Classes.simpleName(getClass()))
+                                       .append("]")
+                                       .toString();
                        }
                        else
                        {

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=963557&r1=963556&r2=963557&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/MarkupContainer.java 
Tue Jul 13 01:47:58 2010
@@ -1978,6 +1978,7 @@ public abstract class MarkupContainer ex
                // createAndAddComponentsForWicketTags();
        }
 
+
        /**
         * Automatically create components for <wicket:xxx> tag.
         */

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=963557&r1=963556&r2=963557&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 13 
01:47:58 2010
@@ -380,6 +380,17 @@ public abstract class Page extends Marku
                super.detachModels();
        }
 
+       @Override
+       public void prepareForRender(boolean setRenderingFlag)
+       {
+               if (!getFlag(FLAG_INITIALIZED))
+               {
+                       // initialize the page if not yet initialized
+                       initialize();
+               }
+               super.prepareForRender(setRenderingFlag);
+       }
+
 
        /**
         * Mark this page as dirty in the session
@@ -393,8 +404,7 @@ public abstract class Page extends Marku
         * THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT CALL.
         * 
         * This method is called when a component was rendered standalone. If 
it is a <code>
-        * MarkupContainer</code>
-        * then the rendering for that container is checked.
+        * MarkupContainer</code> then the rendering for that container is 
checked.
         * 
         * @param component
         * 
@@ -963,8 +973,9 @@ public abstract class Page extends Marku
                        // Gwyn - Wed, 21 May 2008 12:23:41
                        // If the xml declaration in the markup used 
double-quotes, use them in the output too
                        // Whether it should be or not, sometimes it's 
significant...
-                       final String quoteChar = 
(markup.getMarkupResourceStream().getXmlDeclaration().indexOf(
-                               '\"') == -1) ? "'" : "\"";
+                       final String quoteChar = 
(markup.getMarkupResourceStream()
+                               .getXmlDeclaration()
+                               .indexOf('\"') == -1) ? "'" : "\"";
 
                        response.write("<?xml version=");
                        response.write(quoteChar);
@@ -1127,6 +1138,12 @@ public abstract class Page extends Marku
         */
        final void componentAdded(final Component component)
        {
+               if (!getFlag(FLAG_INITIALIZED))
+               {
+                       // initialize the page if not yet initialized
+                       initialize();
+               }
+
                dirty();
        }
 
@@ -1259,15 +1276,4 @@ public abstract class Page extends Marku
                return (Page)session.getPageManager().getPage(id);
        }
 
-       /**
-        * This method does nothing, it is here to prevent subclasses from 
overriding it since this
-        * callback is never called on the {...@link Page}
-        * 
-        * @see org.apache.wicket.Component#onInitialize()
-        */
-       @Override
-       protected final void onInitialize()
-       {
-       }
-
 }

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java?rev=963557&r1=963556&r2=963557&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ComponentInitializationTest.java
 Tue Jul 13 01:47:58 2010
@@ -16,14 +16,23 @@
  */
 package org.apache.wicket;
 
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
-
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTester;
+
+/**
+ * Tests {...@link Component#onInitialize()} contract
+ * 
+ * @author igor
+ */
 public class ComponentInitializationTest extends WicketTestCase
 {
        public void testPropagation()
        {
-               Page page = new TestPage();
+               TestPage page = new TestPage();
 
                TestComponent t1 = new TestComponent("t1");
                TestComponent t2 = new TestComponent("t2");
@@ -54,13 +63,14 @@ public class ComponentInitializationTest
                page.add(t1);
                assertEquals(1, t4.getCount());
 
+               // test page was initialized
+               assertEquals(1, page.getCount());
 
        }
 
-
        public void testAtomicity()
        {
-               Page page = new TestPage();
+               TestPage page = new TestPage();
 
                TestComponent t1 = new TestComponent("t1");
                TestComponent t2 = new TestComponent("t2");
@@ -85,12 +95,44 @@ public class ComponentInitializationTest
                page.add(t1);
                assertEquals(1, t1.getCount());
                assertEquals(1, t2.getCount());
+
+               // test page was only initialized once
+               assertEquals(1, page.getCount());
        }
 
+       public void testPageInitialization()
+       {
+               WicketTester tester = new WicketTester();
+               tester.startPage(TestPage.class);
+               TestPage page = (TestPage)tester.getLastRenderedPage();
+
+               assertEquals(1, page.getCount());
+       }
 
-       private static class TestPage extends WebPage
+       public static class TestPage extends WebPage implements 
IMarkupResourceStreamProvider
        {
+               private int count = 0;
+
+               public TestPage()
+               {
+               }
+
+               @Override
+               protected void onInitialize()
+               {
+                       count++;
+               }
+
+               public int getCount()
+               {
+                       return count;
+               }
 
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
+                       Class<?> containerClass)
+               {
+                       return new StringResourceStream("<html></html>");
+               }
        }
 
        private static class TestComponent extends WebMarkupContainer


Reply via email to