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