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