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 11:03:17 UTC

svn commit: r885080 - in /wicket/trunk/wicket/src: main/java/org/apache/wicket/ main/java/org/apache/wicket/markup/html/ main/java/org/apache/wicket/markup/html/border/ main/java/org/apache/wicket/markup/html/internal/ main/java/org/apache/wicket/marku...

Author: jdonnerstag
Date: Sat Nov 28 10:03:15 2009
New Revision: 885080

URL: http://svn.apache.org/viewvc?rev=885080&view=rev
Log:
removed isTransparentResolver and changed IComponentResolver to return the Component resolved. It doesn't need to handle (render, autoAdd) it anymore.

Added:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/TransparentWebMarkupContainer.java
Removed:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ParentResolver.java
Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
    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/main/java/org/apache/wicket/markup/html/ContainerWithAssociatedMarkupHelper.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/HeaderPartContainer.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/internal/Enclosure.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/ListView.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoComponentResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ComponentResolvers.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/MarkupInheritanceResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ScopedComponentResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/ComponentResolvingPage.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java Sat Nov 28 10:03:15 2009
@@ -45,7 +45,6 @@
 import org.apache.wicket.markup.resolver.FragmentResolver;
 import org.apache.wicket.markup.resolver.HtmlHeaderResolver;
 import org.apache.wicket.markup.resolver.MarkupInheritanceResolver;
-import org.apache.wicket.markup.resolver.ParentResolver;
 import org.apache.wicket.markup.resolver.WicketContainerResolver;
 import org.apache.wicket.markup.resolver.WicketMessageResolver;
 import org.apache.wicket.ng.page.PageManager;
@@ -913,7 +912,6 @@
 		IPageSettings pageSettings = getPageSettings();
 
 		// Install default component resolvers
-		pageSettings.addComponentResolver(new ParentResolver());
 		pageSettings.addComponentResolver(new AutoComponentResolver());
 		pageSettings.addComponentResolver(new MarkupInheritanceResolver());
 		pageSettings.addComponentResolver(new HtmlHeaderResolver());

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=885080&r1=885079&r2=885080&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 10:03:15 2009
@@ -3885,7 +3885,7 @@
 	/**
 	 * @return True if this component or any of its parents is in auto-add mode
 	 */
-	final boolean isAuto()
+	public final boolean isAuto()
 	{
 		// Search up hierarchy for FLAG_AUTO
 		for (Component current = this; current != null; current = current.getParent())

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=885080&r1=885079&r2=885080&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 10:03:15 2009
@@ -164,28 +164,6 @@
 			return this;
 		}
 
-		MarkupContainer container = (MarkupContainer)visitChildren(MarkupContainer.class,
-			new IVisitor<MarkupContainer>()
-			{
-				public Object component(MarkupContainer container)
-				{
-					if (container.isTransparentResolver())
-					{
-						if (container.getId().equals(child.getId()))
-						{
-							return container;
-						}
-						return IVisitor.CONTINUE_TRAVERSAL;
-					}
-					return IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
-				}
-			});
-
-		if (container != null)
-		{
-			return container;
-		}
-
 		return null;
 	}
 
@@ -268,8 +246,6 @@
 		}
 		add(component);
 
-		// Render the child
-		component.render();
 		return true;
 	}
 
@@ -339,25 +315,16 @@
 		// Get child by id
 		Component child = children_get(id);
 
-		// If the container is transparent, than ask its parent.
-		// ParentResolver does something quite similar, but because of <head>,
-		// <body>, <wicket:panel> etc. it is quite common to have transparent
-		// components. Hence, this is little short cut for a tiny performance
-		// optimization.
-		if ((child == null) && isTransparentResolver() && (getParent() != null))
-		{
-			child = getParent().get(path);
-		}
-
 		// Found child?
 		if (child != null)
 		{
-			final String path2 = Strings.afterFirstPathComponent(path, Component.PATH_SEPARATOR);
+			String path2 = Strings.afterFirstPathComponent(path, Component.PATH_SEPARATOR);
+
 			// Recurse on latter part of path
 			return child.get(path2);
 		}
 
-		return child;
+		return null;
 	}
 
 	/**
@@ -545,20 +512,6 @@
 	}
 
 	/**
-	 * Some MarkupContainers (e.g. HtmlHeaderContainer) have to be transparent with respect to their
-	 * child components. A transparent container gets its children from its parent container.
-	 * <p>
-	 * 
-	 * @see org.apache.wicket.markup.resolver.ParentResolver
-	 * 
-	 * @return false. By default a MarkupContainer is not transparent.
-	 */
-	public boolean isTransparentResolver()
-	{
-		return false;
-	}
-
-	/**
 	 * @return Iterator that iterates through children in the order they were added
 	 */
 	public Iterator<? extends Component> iterator()
@@ -1494,7 +1447,11 @@
 			final String id = tag.getId();
 
 			// Get the component for the id from the given container
-			final Component component = get(id);
+			Component component = get(id);
+			if (component == null)
+			{
+				component = ComponentResolvers.resolve(this, markupStream, tag);
+			}
 
 			// Failed to find it?
 			if (component != null)
@@ -1503,11 +1460,6 @@
 			}
 			else
 			{
-				if (ComponentResolvers.resolve(this, markupStream, tag))
-				{
-					return;
-				}
-
 				if (tag instanceof WicketTag)
 				{
 					if (((WicketTag)tag).isChildTag())

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=885080&r1=885079&r2=885080&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 Sat Nov 28 10:03:15 2009
@@ -324,8 +324,11 @@
 			}
 			if (renderedComponents.add(component) == false)
 			{
-				throw new MarkupException("The component " + component +
-					" has the same wicket:id as another component already added at the same level");
+				throw new MarkupException(
+					"The component " +
+						component +
+						" was rendered already. You can render it only once during a render phase. Class relative path: " +
+						component.getClassRelativePath());
 			}
 			if (log.isDebugEnabled())
 			{
@@ -471,7 +474,7 @@
 		{
 			try
 			{
-				if (getClass().getConstructor(new Class[] {}) != null)
+				if (getClass().getConstructor(new Class[] { }) != null)
 				{
 					bookmarkable = Boolean.TRUE;
 				}
@@ -734,16 +737,16 @@
 						Component sibling = iterator2.next();
 						if (!sibling.isVisible())
 						{
-							boolean isTransparentMarkupContainer = sibling instanceof MarkupContainer &&
-								((MarkupContainer)sibling).isTransparentResolver();
-							boolean isComponentResolver = sibling instanceof IComponentResolver;
-							if (isTransparentMarkupContainer || isComponentResolver)
+							if (sibling instanceof IComponentResolver)
 							{
 								// we found a transparent container that isn't visible
 								// then ignore this component and only do a debug statement here.
-								log.debug(
-									"Component {} wasn't rendered but most likely it has a transparent parent: {}",
-									component, sibling);
+								if (log.isDebugEnabled())
+								{
+									log.debug(
+										"Component {} wasn't rendered but most likely it has a transparent parent: {}",
+										component, sibling);
+								}
 								iterator.remove();
 								continue outerWhile;
 							}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/ContainerWithAssociatedMarkupHelper.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/ContainerWithAssociatedMarkupHelper.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/ContainerWithAssociatedMarkupHelper.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/ContainerWithAssociatedMarkupHelper.java Sat Nov 28 10:03:15 2009
@@ -70,8 +70,6 @@
 		// Gracefully getAssociateMarkupStream. Throws no exception in case
 		// markup is not found
 		final MarkupStream markupStream = container.getAssociatedMarkupStream(false);
-
-		// No associated markup => no header section
 		if (markupStream == null)
 		{
 			return;
@@ -97,11 +95,11 @@
 				if (htmlContainer.okToRenderComponent(headerPart.getScope(), headerPart.getId()))
 				{
 					htmlContainer.autoAdd(headerPart, null);
+					headerPart.render();
 				}
 				else
 				{
-					// TODO Performance: I haven't found a more efficient
-					// solution yet.
+					// TODO Performance: I haven't found a more efficient solution yet.
 					// Already added but all the components in this header part
 					// must be touched (that they are rendered)
 					Response response = container.getRequestCycle().getResponse();
@@ -109,6 +107,7 @@
 					{
 						container.getRequestCycle().setResponse(NullResponse.getInstance());
 						htmlContainer.autoAdd(headerPart, null);
+						headerPart.render();
 					}
 					finally
 					{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/HeaderPartContainer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/HeaderPartContainer.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/HeaderPartContainer.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/HeaderPartContainer.java Sat Nov 28 10:03:15 2009
@@ -67,18 +67,11 @@
 	/**
 	 * @see IComponentResolver#resolve(MarkupContainer, MarkupStream, ComponentTag)
 	 */
-	public final boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
-		final ComponentTag tag)
+	public final Component resolve(final MarkupContainer container,
+		final MarkupStream markupStream, final ComponentTag tag)
 	{
 		// The tag must be resolved against the panel and not against the page
-		Component component = this.container.get(tag.getId());
-		if (component != null)
-		{
-			component.render();
-			return true;
-		}
-
-		return false;
+		return this.container.get(tag.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=885080&r1=885079&r2=885080&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 10:03:15 2009
@@ -28,10 +28,10 @@
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.WicketTag;
 import org.apache.wicket.markup.html.WebComponent;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainerWithAssociatedMarkup;
 import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.markup.parser.XmlTag;
+import org.apache.wicket.markup.parser.filter.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
 import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.model.IModel;
@@ -163,9 +163,6 @@
 	/** */
 	private int beginOfBodyIndex;
 
-	/** true, if body is currently being rendered */
-	private transient boolean rendering;
-
 	/**
 	 * @see org.apache.wicket.Component#Component(String)
 	 */
@@ -302,11 +299,11 @@
 	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
 	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		// make sure nested borders are resolved properly
-		if (rendering == false)
+		if (body.rendering == false)
 		{
 			// We are only interested in border body tags. The tag ID actually is irrelevant since
 			// always preset with the same default
@@ -315,21 +312,12 @@
 				WicketTag wtag = (WicketTag)tag;
 				if (wtag.isBodyTag())
 				{
-					rendering = true;
-					try
-					{
-						body.render();
-					}
-					finally
-					{
-						rendering = false;
-					}
-					return true;
+					return body;
 				}
 			}
 		}
 
-		return false;
+		return null;
 	}
 
 	/**
@@ -440,15 +428,14 @@
 	/**
 	 * The container to be associated with the &lt;wicket:body&gt; tag
 	 */
-	public class BorderBodyContainer extends WebMarkupContainer
+	public class BorderBodyContainer extends TransparentWebMarkupContainer
 	{
 		private static final long serialVersionUID = 1L;
 
 		/** remember the original status of the wicket:body tag */
 		private transient boolean wasOpenCloseTag = false;
 
-		/** More easily create a transparent resolver */
-		private boolean transparentResolver;
+		protected boolean rendering;
 
 		/**
 		 * Constructor
@@ -461,25 +448,6 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
-		 */
-		@Override
-		public final boolean isTransparentResolver()
-		{
-			return transparentResolver;
-		}
-
-		/**
-		 * Make the border body transparent
-		 * 
-		 * @param value
-		 */
-		public final void setTransparentResolver(final boolean value)
-		{
-			transparentResolver = value;
-		}
-
-		/**
 		 * @see org.apache.wicket.Component#onComponentTag(org.apache.wicket.markup.ComponentTag)
 		 */
 		@Override
@@ -521,6 +489,24 @@
 		}
 
 		/**
+		 * @see org.apache.wicket.MarkupContainer#onRender()
+		 */
+		@Override
+		protected void onRender()
+		{
+			rendering = true;
+
+			try
+			{
+				super.onRender();
+			}
+			finally
+			{
+				rendering = false;
+			}
+		}
+
+		/**
 		 * @see org.apache.wicket.Component#getMarkup()
 		 */
 		@Override

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java Sat Nov 28 10:03:15 2009
@@ -25,12 +25,12 @@
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupStream;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.EnclosureContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
 import org.apache.wicket.markup.parser.filter.EnclosureHandler;
+import org.apache.wicket.markup.parser.filter.TransparentWebMarkupContainer;
 import org.apache.wicket.response.NullResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -82,7 +82,7 @@
  * @author Juergen Donnerstag
  * @since 1.3
  */
-public class Enclosure extends WebMarkupContainer
+public class Enclosure extends TransparentWebMarkupContainer
 {
 	private static final long serialVersionUID = 1L;
 
@@ -114,15 +114,6 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
-	 */
-	@Override
-	public boolean isTransparentResolver()
-	{
-		return true;
-	}
-
-	/**
 	 * Get the real parent container
 	 * 
 	 * @return enclosure's parent markup container
@@ -130,16 +121,9 @@
 	private MarkupContainer getEnclosureParent()
 	{
 		MarkupContainer parent = getParent();
-		while (parent != null)
+		while (parent.isAuto())
 		{
-			if (parent.isTransparentResolver())
-			{
-				parent = parent.getParent();
-			}
-			else
-			{
-				break;
-			}
+			parent = parent.getParent();
 		}
 
 		if (parent == null)

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/internal/HtmlHeaderContainer.java Sat Nov 28 10:03:15 2009
@@ -32,6 +32,8 @@
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.IHeaderResponse;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.parser.filter.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.ng.WicketRuntimeException;
 import org.apache.wicket.response.StringResponse;
 
@@ -67,7 +69,7 @@
  * 
  * @author Juergen Donnerstag
  */
-public class HtmlHeaderContainer extends WebMarkupContainer
+public class HtmlHeaderContainer extends TransparentWebMarkupContainer
 {
 	private static final long serialVersionUID = 1L;
 
@@ -241,15 +243,6 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
-	 */
-	@Override
-	public boolean isTransparentResolver()
-	{
-		return true;
-	}
-
-	/**
 	 * Check if the header component is ok to render within the scope given.
 	 * 
 	 * @param scope

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/ListView.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/ListView.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/ListView.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/ListView.java Sat Nov 28 10:03:15 2009
@@ -619,8 +619,7 @@
 			{
 				final String id = Integer.toString(firstIndex + index);
 				index++;
-				Component c = get(id);
-				return c;
+				return get(id);
 			}
 		};
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/EnclosureHandler.java Sat Nov 28 10:03:15 2009
@@ -19,6 +19,7 @@
 import java.text.ParseException;
 import java.util.Stack;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupElement;
@@ -153,7 +154,7 @@
 	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
 	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		if ((tag instanceof WicketTag) && ((WicketTag)tag).isEnclosureTag())
@@ -172,14 +173,11 @@
 				tag.setModified(true);
 			}
 
-			Enclosure enclosure = new Enclosure(id, tag.getString(EnclosureHandler.CHILD_ATTRIBUTE));
-			container.autoAdd(enclosure, markupStream);
-
 			// Yes, we handled the tag
-			return true;
+			return new Enclosure(id, tag.getString(EnclosureHandler.CHILD_ATTRIBUTE));
 		}
 
 		// We were not able to handle the tag
-		return false;
+		return null;
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/RelativePathPrefixHandler.java Sat Nov 28 10:03:15 2009
@@ -27,7 +27,6 @@
 import org.apache.wicket.markup.MarkupElement;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.WicketTag;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.request.IRequestCodingStrategy;
 import org.slf4j.Logger;
@@ -144,7 +143,7 @@
 	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
 	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		if ((tag != null) && (tag.getId().startsWith(WICKET_RELATIVE_PATH_PREFIX_CONTAINER_ID)))
@@ -155,20 +154,8 @@
 			// we do not want to mess with the hierarchy, so the container has to be
 			// transparent as it may have wicket components inside. for example a raw anchor tag
 			// that contains a label.
-			final Component wc = new WebMarkupContainer(id)
-			{
-				private static final long serialVersionUID = 1L;
-
-				@Override
-				public boolean isTransparentResolver()
-				{
-					return tag.isOpenClose() == false;
-				}
-			};
-
-			container.autoAdd(wc, markupStream);
-			return true;
+			return new TransparentWebMarkupContainer(id);
 		}
-		return false;
+		return null;
 	}
 }

Added: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/TransparentWebMarkupContainer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/TransparentWebMarkupContainer.java?rev=885080&view=auto
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/TransparentWebMarkupContainer.java (added)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/TransparentWebMarkupContainer.java Sat Nov 28 10:03:15 2009
@@ -0,0 +1,53 @@
+/*
+ * 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.markup.parser.filter;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.resolver.IComponentResolver;
+
+/**
+ * A simple "transparent" markup container.
+ * 
+ * @author Juergen Donnerstag
+ */
+public class TransparentWebMarkupContainer extends WebMarkupContainer implements IComponentResolver
+{
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Construct.
+	 * 
+	 * @param id
+	 */
+	public TransparentWebMarkupContainer(String id)
+	{
+		super(id);
+	}
+
+	/**
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
+	 */
+	public Component resolve(MarkupContainer container, MarkupStream markupStream, ComponentTag tag)
+	{
+		return getParent().get(tag.getId());
+	}
+}
\ No newline at end of file

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketLinkTagHandler.java Sat Nov 28 10:03:15 2009
@@ -26,7 +26,6 @@
 import org.apache.wicket.markup.MarkupElement;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.WicketTag;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.util.collections.ArrayListStack;
 import org.apache.wicket.util.string.StringValueConversionException;
@@ -202,7 +201,7 @@
 	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
 	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		if (tag instanceof WicketTag)
@@ -213,28 +212,11 @@
 				final String id = tag.getId() + container.getPage().getAutoIndex();
 				tag.setId(id);
 
-				final Component component = new WebMarkupContainer(id)
-				{
-					private static final long serialVersionUID = 1L;
-
-					/**
-					 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
-					 */
-					@Override
-					public boolean isTransparentResolver()
-					{
-						return true;
-					}
-				};
-
-				container.autoAdd(component, markupStream);
-
-				// Yes, we handled the tag
-				return true;
+				return new TransparentWebMarkupContainer(id);
 			}
 		}
 
 		// We were not able to handle the tag
-		return false;
+		return null;
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/parser/filter/WicketMessageTagHandler.java Sat Nov 28 10:03:15 2009
@@ -27,7 +27,6 @@
 import org.apache.wicket.markup.MarkupElement;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.WebComponent;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.resolver.IComponentResolver;
 import org.apache.wicket.util.string.Strings;
 
@@ -159,7 +158,7 @@
 	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
 	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(MarkupContainer container, MarkupStream markupStream, ComponentTag tag)
+	public Component resolve(MarkupContainer container, MarkupStream markupStream, ComponentTag tag)
 	{
 		// localize any raw markup that has wicket:message attrs
 		if ((tag != null) && (tag.getId().startsWith(WICKET_MESSAGE_CONTAINER_ID)))
@@ -174,28 +173,11 @@
 			}
 			else
 			{
-				wc = new TransparentContainer(id);
+				wc = new TransparentWebMarkupContainer(id);
 			}
 
-			container.autoAdd(wc, markupStream);
-			return true;
-		}
-		return false;
-	}
-
-	private static class TransparentContainer extends WebMarkupContainer
-	{
-		private static final long serialVersionUID = 1L;
-
-		public TransparentContainer(String id)
-		{
-			super(id);
-		}
-
-		@Override
-		public boolean isTransparentResolver()
-		{
-			return true;
+			return wc;
 		}
+		return null;
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractRepeater.java Sat Nov 28 10:03:15 2009
@@ -93,7 +93,9 @@
 				Component child = it.next();
 				if (child == null)
 				{
-					throw new IllegalStateException("the render iterator returned null for a child");
+					throw new IllegalStateException(
+						"The render iterator returned null for a child. Container: " +
+							this.toString() + "; Iterator=" + it.toString());
 				}
 				renderChild(child);
 			}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoComponentResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoComponentResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoComponentResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoComponentResolver.java Sat Nov 28 10:03:15 2009
@@ -68,18 +68,11 @@
 	private final Map<Component, MarkupContainer> nestedComponents = new HashMap<Component, MarkupContainer>();
 
 	/**
-	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(MarkupContainer,
-	 *      MarkupStream, ComponentTag)
-	 * @param container
-	 *            The container parsing its markup
-	 * @param markupStream
-	 *            The current markupStream
-	 * @param tag
-	 *            The current component tag while parsing the markup
-	 * @return true, if componentId was handle by the resolver. False, otherwise
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public final boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
-		final ComponentTag tag)
+	public final Component resolve(final MarkupContainer container,
+		final MarkupStream markupStream, final ComponentTag tag)
 	{
 		// It must be <wicket:...>
 		if (tag instanceof WicketTag)
@@ -102,18 +95,10 @@
 						nestedComponents.put(component, container);
 					}
 
-					try
-					{
-						// 2. Add it to the hierarchy and render it
-						container.autoAdd(component, markupStream);
-					}
-					finally
-					{
-						// 3. remove it from the stack
-						nestedComponents.remove(component);
-					}
+					// 3. remove it from the stack
+					nestedComponents.remove(component);
 
-					return true;
+					return component;
 				}
 			}
 		}
@@ -128,8 +113,7 @@
 				Component component = parent.get(tag.getId());
 				if (component != null)
 				{
-					component.render();
-					return true;
+					return component;
 				}
 
 				parent = parent.getParent();
@@ -141,7 +125,7 @@
 		}
 
 		// We were not able to handle the componentId
-		return false;
+		return null;
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/AutoLinkResolver.java Sat Nov 28 10:03:15 2009
@@ -133,6 +133,8 @@
 	 *            type of model object
 	 */
 	public final static class AutolinkBookmarkablePageLink<T> extends BookmarkablePageLink<T>
+		implements
+			IComponentResolver
 	{
 		private static final long serialVersionUID = 1L;
 
@@ -166,15 +168,6 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
-		 */
-		@Override
-		public boolean isTransparentResolver()
-		{
-			return true;
-		}
-
-		/**
 		 * 
 		 * @see org.apache.wicket.markup.html.link.BookmarkablePageLink#getURL()
 		 */
@@ -189,6 +182,16 @@
 
 			return url;
 		}
+
+		/**
+		 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+		 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
+		 */
+		public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
+			ComponentTag tag)
+		{
+			return getParent().get(tag.getId());
+		}
 	}
 
 	/**
@@ -486,6 +489,8 @@
 	 * @author Juergen Donnerstag
 	 */
 	private final static class AutolinkExternalLink extends ExternalLink
+		implements
+			IComponentResolver
 	{
 		private static final long serialVersionUID = 1L;
 
@@ -501,12 +506,13 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
+		 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+		 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 		 */
-		@Override
-		public boolean isTransparentResolver()
+		public Component resolve(MarkupContainer container, MarkupStream markupStream,
+			ComponentTag tag)
 		{
-			return true;
+			return getParent().get(tag.getId());
 		}
 	}
 
@@ -534,6 +540,8 @@
 	 * and users wouldn't know where to add the component to.
 	 */
 	private final static class ResourceReferenceAutolink extends WebMarkupContainer
+		implements
+			IComponentResolver
 	{
 		private static final long serialVersionUID = 1L;
 
@@ -570,15 +578,6 @@
 		}
 
 		/**
-		 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
-		 */
-		@Override
-		public boolean isTransparentResolver()
-		{
-			return true;
-		}
-
-		/**
 		 * Handles this link's tag.
 		 * 
 		 * @param tag
@@ -601,6 +600,16 @@
 				tag.put(attribute, Strings.replaceAll(url, "&", "&amp;"));
 			}
 		}
+
+		/**
+		 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+		 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
+		 */
+		public Component resolve(MarkupContainer container, MarkupStream markupStream,
+			ComponentTag tag)
+		{
+			return getParent().get(tag.getId());
+		}
 	}
 
 	/**
@@ -750,21 +759,11 @@
 	}
 
 	/**
-	 * Automatically creates a BookmarkablePageLink component.
-	 * 
-	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(MarkupContainer,
-	 *      MarkupStream, ComponentTag)
-	 * 
-	 * @param markupStream
-	 *            The current markupStream
-	 * @param tag
-	 *            The current component tag while parsing the markup
-	 * @param container
-	 *            The container parsing its markup
-	 * @return true, if componentId was handle by the resolver. False, otherwise
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public final boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
-		final ComponentTag tag)
+	public final Component resolve(final MarkupContainer container,
+		final MarkupStream markupStream, final ComponentTag tag)
 	{
 		// Must be marked as autolink tag
 		if (tag.isAutolinkEnabled())
@@ -772,22 +771,19 @@
 			// Try to find the Page matching the href
 			// Note: to not use tag.getId() because it will be modified while
 			// resolving the link and hence the 2nd render will fail.
-			final Component link = resolveAutomaticLink(container,
-				WicketLinkTagHandler.AUTOLINK_ID, tag);
+			Component link = resolveAutomaticLink(container, WicketLinkTagHandler.AUTOLINK_ID, tag);
 
-			// Add the link to the container
-			container.autoAdd(link, markupStream);
 			if (log.isDebugEnabled())
 			{
 				log.debug("Added autolink " + link);
 			}
 
 			// Tell the container, we resolved the id
-			return true;
+			return link;
 		}
 
 		// We were not able to resolve the id
-		return false;
+		return null;
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ComponentResolvers.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ComponentResolvers.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ComponentResolvers.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ComponentResolvers.java Sat Nov 28 10:03:15 2009
@@ -44,11 +44,10 @@
 	 * @param container
 	 * @param markupStream
 	 * @param tag
-	 * @return <code>true</code> if a component was resolved using one of tried resolvers,
-	 *         <code>false</code> otherwise.
+	 * @return <code>null</code> if a component was could not be found
 	 */
-	public static boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
-		final ComponentTag tag)
+	public static Component resolve(final MarkupContainer container,
+		final MarkupStream markupStream, final ComponentTag tag)
 	{
 		// try to resolve using component hierarchy
 
@@ -57,9 +56,15 @@
 		{
 			if (cursor instanceof IComponentResolver)
 			{
-				if (((IComponentResolver)cursor).resolve(container, markupStream, tag))
+				IComponentResolver resolver = (IComponentResolver)cursor;
+				Component component = resolver.resolve(container, markupStream, tag);
+				if (component != null)
 				{
-					return true;
+					if (component.getParent() == null)
+					{
+						container.autoAdd(component, markupStream);
+					}
+					return component;
 				}
 			}
 			cursor = cursor.getParent();
@@ -71,12 +76,14 @@
 			.getPageSettings()
 			.getComponentResolvers())
 		{
-			if (resolver.resolve(container, markupStream, tag))
+			Component component = resolver.resolve(container, markupStream, tag);
+			if (component != null)
 			{
-				return true;
+				container.autoAdd(component, markupStream);
+				return component;
 			}
 		}
 
-		return false;
+		return null;
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java Sat Nov 28 10:03:15 2009
@@ -16,10 +16,12 @@
  */
 package org.apache.wicket.markup.resolver;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.WicketTag;
+import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
 
 /**
@@ -45,18 +47,10 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(MarkupContainer,
-	 *      MarkupStream, ComponentTag)
-	 * 
-	 * @param container
-	 *            The container parsing its markup
-	 * @param markupStream
-	 *            The current markupStream
-	 * @param tag
-	 *            The current component tag while parsing the markup
-	 * @return true, if componentId was handle by the resolver. False, otherwise
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		// If <wicket:...>
@@ -67,11 +61,12 @@
 			// If <wicket:fragment ...>
 			if (wTag.isFragementTag())
 			{
-				return true;
+				String id = wTag.getId() + container.getPage().getAutoIndex();
+				return new WebComponent(id).setVisible(false);
 			}
 		}
 
 		// We were not able to handle the tag
-		return false;
+		return null;
 	}
 }
\ No newline at end of file

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/HtmlHeaderResolver.java Sat Nov 28 10:03:15 2009
@@ -16,9 +16,9 @@
  */
 package org.apache.wicket.markup.resolver;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
-import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupStream;
@@ -27,6 +27,7 @@
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
+import org.apache.wicket.markup.parser.filter.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
 import org.apache.wicket.util.resource.IResourceStream;
 
@@ -54,20 +55,10 @@
 	}
 
 	/**
-	 * Try to resolve the tag, then create a component, add it to the container and render it.
-	 * 
-	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(MarkupContainer,
-	 *      MarkupStream, ComponentTag)
-	 * 
-	 * @param container
-	 *            The container parsing its markup
-	 * @param markupStream
-	 *            The current markupStream
-	 * @param tag
-	 *            The current component tag while parsing the markup
-	 * @return true, if componentId was handle by the resolver. False, otherwise
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		// Only <head> component tags have the id == "_header"
@@ -75,12 +66,8 @@
 		{
 			// Create a special header component which will gather additional
 			// input the <head> from 'contributors'.
-			WebMarkupContainer header = newHtmlHeaderContainer(HtmlHeaderSectionHandler.HEADER_ID +
+			return newHtmlHeaderContainer(HtmlHeaderSectionHandler.HEADER_ID +
 				container.getPage().getAutoIndex());
-			container.autoAdd(header, markupStream);
-
-			// Yes, we handled the tag
-			return true;
 		}
 		else if ((tag instanceof WicketTag) && ((WicketTag)tag).isHeadTag())
 		{
@@ -98,22 +85,13 @@
 				// additional functionality they are merely a means of surrounding relevant
 				// markup. Thus we simply create a WebMarkupContainer to handle
 				// the tag.
-				final WebMarkupContainer header2 = new WebMarkupContainer(
-					HtmlHeaderSectionHandler.HEADER_ID)
-				{
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					public boolean isTransparentResolver()
-					{
-						return true;
-					}
-				};
+				WebMarkupContainer header2 = new TransparentWebMarkupContainer(
+					HtmlHeaderSectionHandler.HEADER_ID);
 
 				header2.setRenderBodyOnly(true);
 				header.add(header2);
 
-				container.autoAdd(header, markupStream);
+				return header;
 			}
 			else if (container instanceof HtmlHeaderContainer)
 			{
@@ -121,50 +99,24 @@
 				// additional functionality there are merely a means of surrounding
 				// relevant markup. Thus we simply create a WebMarkupContainer to handle
 				// the tag.
-				final WebMarkupContainer header = new WebMarkupContainer(
-					HtmlHeaderSectionHandler.HEADER_ID)
-				{
-					private static final long serialVersionUID = 1L;
-
-					@Override
-					public boolean isTransparentResolver()
-					{
-						return true;
-					}
-				};
-
+				WebMarkupContainer header = new TransparentWebMarkupContainer(
+					HtmlHeaderSectionHandler.HEADER_ID);
 				header.setRenderBodyOnly(true);
 
-				try
-				{
-					container.autoAdd(header, markupStream);
-				}
-				catch (IllegalArgumentException ex)
-				{
-					throw new WicketRuntimeException("If the root exception says something like "
-						+ "\"A child with id '_header' already exists\" "
-						+ "then you most likely forgot to override autoAdd() "
-						+ "in your bordered page component.", ex);
-				}
+				return header;
 			}
-			else
-			{
-				final Page page = container.getPage();
-				final String pageClassName = (page != null) ? page.getClass().getName() : "unknown";
-				final IResourceStream stream = markupStream.getResource();
-				final String streamName = (stream != null) ? stream.toString() : "unknown";
-
-				throw new MarkupException(
-					"Mis-placed <wicket:head>. <wicket:head> must be outside of <wicket:panel>, <wicket:border>, and <wicket:extend>. Error occured while rendering page: " +
-						pageClassName + " using markup stream: " + streamName);
-			}
-
-			// Yes, we handled the tag
-			return true;
+			final Page page = container.getPage();
+			final String pageClassName = (page != null) ? page.getClass().getName() : "unknown";
+			final IResourceStream stream = markupStream.getResource();
+			final String streamName = (stream != null) ? stream.toString() : "unknown";
+
+			throw new MarkupException(
+				"Mis-placed <wicket:head>. <wicket:head> must be outside of <wicket:panel>, <wicket:border>, and <wicket:extend>. Error occured while rendering page: " +
+					pageClassName + " using markup stream: " + streamName);
 		}
 
 		// We were not able to handle the tag
-		return false;
+		return null;
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/IComponentResolver.java Sat Nov 28 10:03:15 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.resolver;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.IClusterable;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
@@ -38,8 +39,8 @@
 	 *            The current markupStream
 	 * @param tag
 	 *            The current component tag while parsing the markup
-	 * @return True if component-id was handled by the resolver, false otherwise.
+	 * @return null, if not found
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag);
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/MarkupInheritanceResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/MarkupInheritanceResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/MarkupInheritanceResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/MarkupInheritanceResolver.java Sat Nov 28 10:03:15 2009
@@ -16,11 +16,12 @@
  */
 package org.apache.wicket.markup.resolver;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.WicketTag;
-import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.parser.filter.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
 
 /**
@@ -41,17 +42,10 @@
 	}
 
 	/**
-	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(MarkupContainer,
-	 *      MarkupStream, ComponentTag)
-	 * @param container
-	 *            The container parsing its markup
-	 * @param markupStream
-	 *            The current markupStream
-	 * @param tag
-	 *            The current component tag while parsing the markup
-	 * @return true, if componentId was handle by the resolver. False, otherwise
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		// It must be <wicket:...>
@@ -63,36 +57,11 @@
 			if (wicketTag.isExtendTag() || wicketTag.isChildTag())
 			{
 				String id = wicketTag.getId() + container.getPage().getAutoIndex();
-				container.autoAdd(new MarkupInheritanceContainer(id), markupStream);
-				return true;
+				return new TransparentWebMarkupContainer(id);
 			}
 		}
-		// We were not able to handle the componentId
-		return false;
-	}
-
-	/**
-	 * This is a WebMarkupContainer, except that it is transparent for it child components.
-	 */
-	private static class MarkupInheritanceContainer extends WebMarkupContainer
-	{
-		private static final long serialVersionUID = 1L;
 
-		/**
-		 * @param id
-		 */
-		public MarkupInheritanceContainer(final String id)
-		{
-			super(id);
-		}
-
-		/**
-		 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
-		 */
-		@Override
-		public boolean isTransparentResolver()
-		{
-			return true;
-		}
+		// We were not able to handle the componentId
+		return null;
 	}
 }
\ No newline at end of file

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ScopedComponentResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ScopedComponentResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ScopedComponentResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/ScopedComponentResolver.java Sat Nov 28 10:03:15 2009
@@ -97,7 +97,7 @@
 	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
 	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		// Try to find the component with the parent component.
@@ -109,7 +109,7 @@
 			parent = parent.getParent();
 			if (parent == null)
 			{
-				return false;
+				return null;
 			}
 
 			final Component component = parent.get(id);
@@ -118,12 +118,11 @@
 				IScopedComponent sc = (IScopedComponent)component;
 				if (sc.isRenderableInSubContainers())
 				{
-					component.render();
-					return true;
+					return component;
 				}
 			}
 		}
 
-		return false;
+		return null;
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java Sat Nov 28 10:03:15 2009
@@ -16,9 +16,12 @@
  */
 package org.apache.wicket.markup.resolver;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.WicketTag;
+import org.apache.wicket.markup.parser.filter.TransparentWebMarkupContainer;
 import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -70,25 +73,21 @@
 	}
 
 	/**
-	 * Try to resolve the tag, then create a component, add it to the container and render it.
-	 * 
-	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(MarkupContainer,
-	 *      MarkupStream, ComponentTag)
-	 * 
-	 * @param container
-	 *            The container parsing its markup
-	 * @param markupStream
-	 *            The current markupStream
-	 * @param tag
-	 *            The current component tag while parsing the markup
-	 * @return true, if componentId was handle by the resolver. False, otherwise
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
-		// this is only here so we register wicket:container tag, this resolver
-		// does not actually do anything special to the tag
-		return false;
+		if (tag instanceof WicketTag)
+		{
+			final WicketTag wTag = (WicketTag)tag;
+
+			// this is only here so we register wicket:container tag, this resolver
+			// does not actually do anything special to the tag
+			String id = wTag.getId() + container.getPage().getAutoIndex();
+			return new TransparentWebMarkupContainer(id);
+		}
+		return null;
 	}
-
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/resolver/WicketMessageResolver.java Sat Nov 28 10:03:15 2009
@@ -110,20 +110,10 @@
 	private static final String DEFAULT_VALUE = "DEFAULT_WICKET_MESSAGE_RESOLVER_VALUE";
 
 	/**
-	 * Try to resolve the tag, then create a component, add it to the container and render it.
-	 * 
-	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(MarkupContainer,
-	 *      MarkupStream, ComponentTag)
-	 * 
-	 * @param container
-	 *            The container parsing its markup
-	 * @param markupStream
-	 *            The current markupStream
-	 * @param tag
-	 *            The current component tag while parsing the markup
-	 * @return true, if componentId was handle by the resolver. False, otherwise
+	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		if (tag instanceof WicketTag)
@@ -144,15 +134,12 @@
 					.getMarkupSettings()
 					.getStripWicketTags());
 
-				container.autoAdd(label, markupStream);
-
-				// Yes, we handled the tag
-				return true;
+				return label;
 			}
 		}
 
 		// We were not able to handle the tag
-		return false;
+		return null;
 	}
 
 	/**
@@ -172,7 +159,7 @@
 	 * tags.
 	 * 
 	 */
-	private static class MessageContainer extends MarkupContainer
+	private static class MessageContainer extends MarkupContainer implements IComponentResolver
 	{
 		private static final long serialVersionUID = 1L;
 
@@ -192,13 +179,13 @@
 		}
 
 		/**
-		 * 
-		 * @see org.apache.wicket.MarkupContainer#isTransparentResolver()
+		 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
+		 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 		 */
-		@Override
-		public boolean isTransparentResolver()
+		public Component resolve(MarkupContainer container, MarkupStream markupStream,
+			ComponentTag tag)
 		{
-			return true;
+			return getParent().get(tag.getId());
 		}
 
 		/**

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/ComponentResolvingPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/ComponentResolvingPage.java?rev=885080&r1=885079&r2=885080&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/ComponentResolvingPage.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/internal/ComponentResolvingPage.java Sat Nov 28 10:03:15 2009
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.html.internal;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
@@ -45,7 +46,7 @@
 	 * @see org.apache.wicket.markup.resolver.IComponentResolver#resolve(org.apache.wicket.MarkupContainer,
 	 *      org.apache.wicket.markup.MarkupStream, org.apache.wicket.markup.ComponentTag)
 	 */
-	public boolean resolve(final MarkupContainer container, final MarkupStream markupStream,
+	public Component resolve(final MarkupContainer container, final MarkupStream markupStream,
 		final ComponentTag tag)
 	{
 		if ("test".equals(tag.getId()))
@@ -62,9 +63,8 @@
 				}
 			};
 
-			autoAdd(label, markupStream);
-			return true;
+			return label;
 		}
-		return false;
+		return null;
 	}
 }
\ No newline at end of file