Author: ivaynberg Date: Sat Mar 26 05:49:20 2011 New Revision: 1085649 URL: http://svn.apache.org/viewvc?rev=1085649&view=rev Log: delay first onInitialize cascade just before render so pages can use onInitialize() as well Issue: WICKET-3218
Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationIntegrationTest.java (with props) Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationTest.java Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java?rev=1085649&r1=1085648&r2=1085649&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java Sat Mar 26 05:49:20 2011 @@ -924,7 +924,10 @@ public abstract class MarkupContainer ex page.componentAdded(child); // initialie the component - child.internalInitialize(); + if (page.getFlag(FLAG_INITIALIZED)) + { + child.internalInitialize(); + } } // if the PREPARED_FOR_RENDER flag is set, we have already called Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java?rev=1085649&r1=1085648&r2=1085649&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java Sat Mar 26 05:49:20 2011 @@ -572,17 +572,6 @@ public abstract class Page extends Marku return stateless; } - @Override - protected final void onInitialize() - { - /* - * final in the page because: *** doesnt make sense for pages *** can be called from page's - * constructor - which is bad *** if delayed can lead to page not being initialized after - * its constructor call - which is bad - */ - super.onInitialize(); - } - /** * Redirect to this page. * @@ -1017,12 +1006,6 @@ public abstract class Page extends Marku */ final void componentAdded(final Component component) { - if (!getFlag(FLAG_INITIALIZED)) - { - // initialize the page if not yet initialized - internalInitialize(); - } - if (!component.isAuto()) { dirty(); Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationIntegrationTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationIntegrationTest.java?rev=1085649&view=auto ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationIntegrationTest.java (added) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationIntegrationTest.java Sat Mar 26 05:49:20 2011 @@ -0,0 +1,113 @@ +/* + * 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; + +import static org.junit.Assert.assertEquals; + +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; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class ComponentInitializationIntegrationTest +{ + WicketTester tester; + + + @Before + public void setup() + { + tester = new WicketTester(); + } + + @After + public void destroy() + { + tester.destroy(); + } + + @Test + public void initialization() + { + TestPage page = new TestPage(); + TestComponent t1 = new TestComponent("t1"); + page.add(t1); + + assertEquals(0, page.getCount()); + assertEquals(0, t1.getCount()); + tester.startPage(page); + assertEquals(1, page.getCount()); + assertEquals(1, t1.getCount()); + } + + + public static class TestPage extends WebPage implements IMarkupResourceStreamProvider + { + private int count; + + public IResourceStream getMarkupResourceStream(MarkupContainer container, + Class<?> containerClass) + { + return new StringResourceStream("<html><body><div wicket:id='t1'></div></body></html>"); + } + + @Override + protected void onInitialize() + { + super.onInitialize(); + count++; + } + + public int getCount() + { + return count; + } + + } + + private static class TestComponent extends WebMarkupContainer + { + private static final long serialVersionUID = 1L; + + private int count = 0; + + public TestComponent(String id) + { + super(id); + } + + @Override + protected void onInitialize() + { + super.onInitialize(); + count++; + } + + public int getCount() + { + return count; + } + + + } + +} Propchange: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationIntegrationTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationTest.java?rev=1085649&r1=1085648&r2=1085649&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationTest.java (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ComponentInitializationTest.java Sat Mar 26 05:49:20 2011 @@ -43,8 +43,15 @@ public class ComponentInitializationTest TestComponent t3 = new TestComponent("t3"); TestComponent t4 = new TestComponent("t4"); - // as soon as we add to page child should be initialized + // component is not initialized until the page has been page.add(t1); + assertEquals(0, page.getCount()); + assertEquals(0, t1.getCount()); + + // initialize the page which will initialize t1 and make subsequent component + // initializations immediate on add + page.internalInitialize(); + assertEquals(1, page.getCount()); assertEquals(1, t1.getCount()); // unless the page is available no initialization takes place @@ -79,6 +86,7 @@ public class ComponentInitializationTest t1.add(t2); t2.add(t3); + page.internalInitialize(); page.add(t1); assertEquals(1, t1.getCount()); @@ -100,6 +108,8 @@ public class ComponentInitializationTest public void testOnInitializeSuperVerified() { TestPage page = new TestPage(); + page.internalInitialize(); + boolean illegalState = false; try { @@ -122,6 +132,8 @@ public class ComponentInitializationTest WebPage page = new WebPage() { }; + page.internalInitialize(); + TestComponent t1 = new TestComponent("t1"); TestComponent t2 = new TestComponent("t2"); @@ -144,6 +156,9 @@ public class ComponentInitializationTest WebPage page = new WebPage() { }; + + page.internalInitialize(); + TestComponent t1 = new TestComponent("t1"); TestComponent t2 = new TestComponent("t2"); TestComponent t3 = new TestComponent("t3"); @@ -164,15 +179,25 @@ public class ComponentInitializationTest public static class TestPage extends WebPage implements IMarkupResourceStreamProvider { - public TestPage() - { - } + private int count; public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass) { return new StringResourceStream("<html><body></body></html>"); } + + @Override + protected void onInitialize() + { + super.onInitialize(); + count++; + } + + public int getCount() + { + return count; + } } private static class TestComponent extends WebMarkupContainer