You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2009/11/28 15:30:23 UTC

svn commit: r885097 - in /wicket/trunk/wicket/src: main/java/org/apache/wicket/ main/java/org/apache/wicket/markup/ main/java/org/apache/wicket/markup/html/ main/java/org/apache/wicket/markup/html/border/ main/java/org/apache/wicket/markup/html/form/ m...

Author: jdonnerstag
Date: Sat Nov 28 14:30:22 2009
New Revision: 885097

URL: http://svn.apache.org/viewvc?rev=885097&view=rev
Log:
cleanup IMarkupFragment API

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/markup/IMarkupFragment.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/Markup.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupFragment.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupStream.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/border/Border.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPage_5.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=885097&r1=885096&r2=885097&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 Sat Nov 28 14:30:22 2009
@@ -394,10 +394,12 @@
 	 * Flag that makes we are in before-render callback phase Set after component.onBeforeRender is
 	 * invoked (right before invoking beforeRender on children)
 	 */
-	private static final int FLAG_PREPARED_FOR_RENDER = 0x4000000;
 	private static final int FLAG_RENDERING = 0x2000000;
+	private static final int FLAG_PREPARED_FOR_RENDER = 0x4000000;
 	private static final int FLAG_AFTER_RENDERING = 0x8000000;
 
+	private static final int FLAG_MARKUP_ATTACHED = 0x10000000;
+
 	/**
 	 * Flag that restricts visibility of a component when set to true. This is usually used when a
 	 * component wants to restrict visibility of another component. Calling
@@ -718,6 +720,34 @@
 	}
 
 	/**
+	 * Called when the component gets added to a parent
+	 * 
+	 * @return false, if it was called the first time
+	 */
+	final boolean internalOnMarkupAttached()
+	{
+		boolean rtn = getFlag(FLAG_MARKUP_ATTACHED);
+		if (rtn == false)
+		{
+			onMarkupAttached();
+		}
+		setFlag(FLAG_MARKUP_ATTACHED, true);
+		return rtn;
+	}
+
+	/**
+	 * Can be subclassed by any user to implement init-like logic which requires the markup to be
+	 * available
+	 */
+	protected void onMarkupAttached()
+	{
+		if (log.isDebugEnabled())
+		{
+			log.debug("Markup available " + toString());
+		}
+	}
+
+	/**
 	 * Set the markup for the component. Note that the component's markup variable is transient and
 	 * thus must only be used for one render cycle. E.g. auto-component are using it.
 	 * 

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=885097&r1=885096&r2=885097&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 Sat Nov 28 14:30:22 2009
@@ -146,6 +146,33 @@
 				throw new IllegalArgumentException(exceptionMessage("A child with id '" +
 					child.getId() + "' already exists"));
 			}
+
+			// Check if the markup is available after the child has been added to the parent
+			try
+			{
+				if ((getParent() != null) && (child.getMarkup() != null))
+				{
+					child.internalOnMarkupAttached();
+
+					// Tell all children of "component" as well
+					if (child instanceof MarkupContainer)
+					{
+						MarkupContainer container = (MarkupContainer)child;
+						container.visitChildren(new IVisitor<Component>()
+						{
+							public Object component(final Component component)
+							{
+								return component.internalOnMarkupAttached()
+									? CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER : CONTINUE_TRAVERSAL;
+							}
+						});
+					}
+				}
+			}
+			catch (WicketRuntimeException exception)
+			{
+				// ignore
+			}
 		}
 		return this;
 	}
@@ -439,7 +466,7 @@
 		}
 
 		// Find the child's markup
-		markup = markup.find(child.getId(), 0);
+		markup = markup.find(child.getId());
 		if (markup != null)
 		{
 			return markup;

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/IMarkupFragment.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/IMarkupFragment.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/IMarkupFragment.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/IMarkupFragment.java Sat Nov 28 14:30:22 2009
@@ -61,24 +61,9 @@
 	 *            The component path expression
 	 * @param id
 	 *            The component's id to search for
-	 * @param startIndex
-	 *            Index to start searching
 	 * @return -1, if not found
 	 */
-	int findComponentIndex(final String id, final int startIndex);
-
-	/**
-	 * Find the markup element index of the component with 'path'
-	 * 
-	 * @param path
-	 *            The component path expression
-	 * @param id
-	 *            The component's id to search for
-	 * @param startIndex
-	 *            Index to start searching
-	 * @return -1, if not found
-	 */
-	IMarkupFragment find(final String id, final int startIndex);
+	IMarkupFragment find(final String id);
 
 	/**
 	 * 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/Markup.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/Markup.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/Markup.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/Markup.java Sat Nov 28 14:30:22 2009
@@ -151,10 +151,9 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.markup.IMarkupFragment#findComponentIndex(java.lang.String,
-	 *      java.lang.String, int)
+	 * @see org.apache.wicket.markup.IMarkupFragment#find(java.lang.String)
 	 */
-	public final int findComponentIndex(final String id, final int startIndex)
+	public final IMarkupFragment find(final String id)
 	{
 		if (Strings.isEmpty(id))
 		{
@@ -162,7 +161,7 @@
 		}
 
 		MarkupStream stream = new MarkupStream(this);
-		stream.setCurrentIndex(Math.max(0, startIndex));
+		stream.setCurrentIndex(0);
 		while (stream.hasMore())
 		{
 			MarkupElement elem = stream.get();
@@ -173,7 +172,7 @@
 				{
 					if (tag.getId().equals(id))
 					{
-						return stream.getCurrentIndex();
+						return stream.getMarkupFragment();
 					}
 					if (tag.isOpen() && !tag.hasNoCloseTag() && !(tag instanceof WicketTag) &&
 						!"head".equals(tag.getName()) && !tag.isAutoComponentTag())
@@ -186,21 +185,6 @@
 			stream.next();
 		}
 
-		return -1;
-	}
-
-	/**
-	 * 
-	 * @param that
-	 * @return true, if equal
-	 */
-	public final IMarkupFragment find(final String id, final int startIndex)
-	{
-		int index = findComponentIndex(id, startIndex);
-		if (index >= 0)
-		{
-			return new MarkupFragment(this, index);
-		}
 		return null;
 	}
 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupFragment.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupFragment.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupFragment.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupFragment.java Sat Nov 28 14:30:22 2009
@@ -143,10 +143,9 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.markup.IMarkupFragment#findComponentIndex(java.lang.String,
-	 *      java.lang.String)
+	 * @see org.apache.wicket.markup.IMarkupFragment#find(java.lang.String)
 	 */
-	public final int findComponentIndex(final String id, final int startIndex)
+	public final IMarkupFragment find(final String id)
 	{
 		if (Strings.isEmpty(id))
 		{
@@ -154,7 +153,7 @@
 		}
 
 		MarkupStream stream = new MarkupStream(this);
-		stream.setCurrentIndex(Math.max(1, startIndex));
+		stream.setCurrentIndex(1);
 		while (stream.hasMore())
 		{
 			MarkupElement elem = stream.get();
@@ -165,7 +164,7 @@
 				{
 					if (tag.getId().equals(id))
 					{
-						return stream.getCurrentIndex();
+						return stream.getMarkupFragment();
 					}
 					if (tag.isOpen() && !tag.hasNoCloseTag() && !(tag instanceof WicketTag))
 					{
@@ -177,19 +176,6 @@
 			stream.next();
 		}
 
-		return -1;
-	}
-
-	/**
-	 * @see org.apache.wicket.markup.IMarkupFragment#find(java.lang.String, java.lang.String, int)
-	 */
-	public final IMarkupFragment find(final String id, final int startIndex)
-	{
-		int index = findComponentIndex(id, startIndex);
-		if (index >= 0)
-		{
-			return new MarkupFragment(this, index);
-		}
 		return null;
 	}
 

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupStream.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupStream.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupStream.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/MarkupStream.java Sat Nov 28 14:30:22 2009
@@ -188,20 +188,6 @@
 	}
 
 	/**
-	 * Find the markup element index of the component with 'path'
-	 * 
-	 * @param path
-	 *            The component path expression
-	 * @param id
-	 *            The component's id to search for
-	 * @return -1, if not found
-	 */
-	public final int findComponentIndex(final String id)
-	{
-		return markup.findComponentIndex(id, 0);
-	}
-
-	/**
 	 * @return The current markup element
 	 */
 	public MarkupElement get()

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebMarkupContainerWithAssociatedMarkup.java Sat Nov 28 14:30:22 2009
@@ -101,13 +101,13 @@
 			ComponentTag tag = iter.next();
 			if ((child != null) && "_header_".equals(tag.getId()))
 			{
-				childMarkup = iter.getMarkupFragment().find(child.getId(), 0);
+				childMarkup = iter.getMarkupFragment().find(child.getId());
 			}
 			else if ((child != null) && "_head".equals(tag.getId()))
 			{
 				if (tag.getMarkupClass() == null)
 				{
-					childMarkup = iter.getMarkupFragment().find(child.getId(), 0);
+					childMarkup = iter.getMarkupFragment().find(child.getId());
 				}
 			}
 		}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/border/Border.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/border/Border.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/border/Border.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/border/Border.java Sat Nov 28 14:30:22 2009
@@ -382,8 +382,8 @@
 		}
 
 		// Find <wicket:border>
-		int i;
-		for (i = 0; i < markup.size(); i++)
+		IMarkupFragment childMarkup = null;
+		for (int i = 0; i < markup.size(); i++)
 		{
 			MarkupElement elem = markup.get(i);
 			if (elem instanceof WicketTag)
@@ -391,6 +391,7 @@
 				WicketTag tag = (WicketTag)elem;
 				if (tag.isBorderTag())
 				{
+					childMarkup = new MarkupFragment(markup, i);
 					break;
 				}
 			}
@@ -399,16 +400,14 @@
 		// If child == null, return the markup fragment starting with the <wicket:border> tag
 		if (child == null)
 		{
-			return new MarkupFragment(markup, i);
+			return childMarkup;
 		}
 
-		IMarkupFragment childMarkup = null;
-
 		// Since we created the body component instance, identifying that we found it is easy.
 		if (child == body)
 		{
 			// Find the markup for the child component. Make sure you use the preset default value.
-			childMarkup = markup.find(BODY_ID, i);
+			childMarkup = childMarkup.find(BODY_ID);
 			if (childMarkup != null)
 			{
 				return childMarkup;
@@ -416,7 +415,7 @@
 		}
 
 		// Find the markup for the child component
-		childMarkup = markup.find(child.getId(), i);
+		childMarkup = childMarkup.find(child.getId());
 		if (childMarkup != null)
 		{
 			return childMarkup;
@@ -532,7 +531,7 @@
 				return markup;
 			}
 
-			return markup.find(child.getId(), 0);
+			return markup.find(child.getId());
 		}
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java Sat Nov 28 14:30:22 2009
@@ -20,7 +20,6 @@
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.MarkupException;
-import org.apache.wicket.markup.MarkupFragment;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.ContainerWithAssociatedMarkupHelper;
 import org.apache.wicket.markup.html.HeaderPartContainer;
@@ -247,8 +246,8 @@
 		}
 
 		// Find <wicket:panel>
-		int index = markup.findComponentIndex("_panel", 0);
-		if (index == -1)
+		IMarkupFragment panelMarkup = markup.find("_panel");
+		if (panelMarkup == null)
 		{
 			throw new MarkupException(
 				"Expected to find <wicket:panel> in associated markup file. Markup: " +
@@ -258,10 +257,10 @@
 		// If child == null, return the markup starting with <wicket:panel>
 		if (child == null)
 		{
-			return new MarkupFragment(markup, index);
+			return panelMarkup;
 		}
 
 		// else, find the markup fragment for the child component
-		return markup.find(child.getId(), index);
+		return panelMarkup.find(child.getId());
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Fragment.java Sat Nov 28 14:30:22 2009
@@ -358,13 +358,13 @@
 			return null;
 		}
 
-		markup = markup.find(markupId, 0);
+		markup = markup.find(markupId);
 
 		if (child == null)
 		{
 			return markup;
 		}
 
-		return markup.find(child.getId(), 0);
+		return markup.find(child.getId());
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Panel.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Panel.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Panel.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/panel/Panel.java Sat Nov 28 14:30:22 2009
@@ -20,7 +20,6 @@
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.IMarkupFragment;
 import org.apache.wicket.markup.MarkupException;
-import org.apache.wicket.markup.MarkupFragment;
 import org.apache.wicket.markup.MarkupNotFoundException;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.WebMarkupContainerWithAssociatedMarkup;
@@ -156,8 +155,8 @@
 		}
 
 		// Find <wicket:panel>
-		int index = markup.findComponentIndex("_panel", 0);
-		if (index == -1)
+		IMarkupFragment panelMarkup = markup.find("_panel");
+		if (panelMarkup == null)
 		{
 			throw new MarkupNotFoundException(
 				"Expected to find <wicket:panel> in associated markup file. Markup: " +
@@ -167,11 +166,11 @@
 		// If child == null, than return the markup fragment starting with <wicket:panel>
 		if (child == null)
 		{
-			return new MarkupFragment(markup, index);
+			return panelMarkup;
 		}
 
 		// Find the markup for the child component
-		IMarkupFragment childMarkup = markup.find(child.getId(), index);
+		IMarkupFragment childMarkup = panelMarkup.find(child.getId());
 		if (childMarkup != null)
 		{
 			return childMarkup;

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPage_5.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPage_5.java?rev=885097&r1=885096&r2=885097&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPage_5.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/panel/InlinePanelPage_5.java Sat Nov 28 14:30:22 2009
@@ -80,7 +80,7 @@
 				return markup;
 			}
 
-			return markup.find(child.getId(), 0);
+			return markup.find(child.getId());
 		}
 	}
 }