You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/03/23 07:56:29 UTC

svn commit: r926476 [2/2] - in /wicket/trunk: wicket-examples/.settings/ wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/ wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/panel/ wicket-extensions/src...

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/DeepChildFirstVisitor.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/DeepChildFirstVisitor.java?rev=926476&r1=926475&r2=926476&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/DeepChildFirstVisitor.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/DeepChildFirstVisitor.java Tue Mar 23 06:56:28 2010
@@ -1,174 +1,173 @@
-/*
- * 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.renderStrategy;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.Component.IVisitor;
-import org.apache.wicket.util.lang.Checks;
-
-/**
- * 
- * @author Juergen Donnerstag
- */
-public abstract class DeepChildFirstVisitor implements IVisitor<Component>
-{
-	/**
-	 * Construct.
-	 */
-	public DeepChildFirstVisitor()
-	{
-	}
-
-	/**
-	 * Render the child hierarchy headers.
-	 * 
-	 * @param rootComponent
-	 * @return The object return by component()
-	 */
-	public final Object visit(final Component rootComponent)
-	{
-		Checks.argumentNotNull(rootComponent, "rootComponent");
-
-		if (rootComponent instanceof MarkupContainer)
-		{
-			final Component[] lastComponent = new Component[1];
-			Object rtn = ((MarkupContainer)rootComponent).visitChildren(new Component.IVisitor<Component>()
-			{
-				public Object component(Component component)
-				{
-					// skip invisible components
-					if (component.isVisibleInHierarchy())
-					{
-						// In case it is a 'leaf' component, than ...
-						if (!(component instanceof MarkupContainer) ||
-							((MarkupContainer)component).size() == 0)
-						{
-							// Lets assume we rendered the 1st leaf already and we now reached
-							// the 2nd leaf. If the 2nd leave has the very same parent, than we
-							// don't do anything. If not, than we need to render the 1st component's
-							// parents until such a parent is equal to the 2nd component parent.
-							if (lastComponent[0] != null)
-							{
-								MarkupContainer parent = lastComponent[0].getParent();
-								while ((parent != null) && (parent != rootComponent) &&
-									isCommonParent(parent, lastComponent[0], component) == false)
-								{
-									// Render the container since all its children have been
-									// rendered by now
-									Object rtn = component(parent);
-
-									// If visitor returns a non-null value, it halts the traversal
-									if ((rtn != IVisitor.CONTINUE_TRAVERSAL) &&
-										(rtn != IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER))
-									{
-										return rtn;
-									}
-
-									parent = parent.getParent();
-								}
-							}
-
-							// The 'leafs' header
-							Object rtn = component(component);
-
-							// If visitor returns a non-null value, it halts the traversal
-							if ((rtn != IVisitor.CONTINUE_TRAVERSAL) &&
-								(rtn != IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER))
-							{
-								return rtn;
-							}
-
-							// Remember the current leaf, we need it for comparison later on
-							lastComponent[0] = component;
-						}
-						return CONTINUE_TRAVERSAL;
-					}
-					else
-					{
-						// Remember the current leaf, we need it for comparison later on
-						lastComponent[0] = component;
-						return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
-					}
-				}
-
-				/**
-				 * 
-				 * @param parent
-				 * @param lastComponent
-				 * @param currentComponent
-				 * @return true, if parent is a common parent of both components
-				 */
-				private boolean isCommonParent(final MarkupContainer parent,
-					final Component lastComponent, final Component currentComponent)
-				{
-					MarkupContainer p = lastComponent.getParent();
-					while ((p != null) && (p != rootComponent) && (p != parent))
-					{
-						p = p.getParent();
-					}
-
-					if (p == parent)
-					{
-						p = currentComponent.getParent();
-						while ((p != null) && (p != rootComponent) && (p != parent))
-						{
-							p = p.getParent();
-						}
-
-						if (p == parent)
-						{
-							return true;
-						}
-					}
-
-					return false;
-				}
-			});
-
-			// We still need to render the remaining containers
-			if (lastComponent[0] != null)
-			{
-				MarkupContainer parent = lastComponent[0].getParent();
-				while ((parent != null) && (parent != rootComponent))
-				{
-					// Render the container since all its children have been
-					// rendered by now
-					rtn = component(parent);
-
-					// If visitor returns a non-null value, it halts the traversal
-					if ((rtn != IVisitor.CONTINUE_TRAVERSAL) &&
-						(rtn != IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER))
-					{
-						return rtn;
-					}
-
-					parent = parent.getParent();
-				}
-			}
-
-			return rtn;
-		}
-
-		return null;
-	}
-
-	/**
-	 * @see org.apache.wicket.Component.IVisitor#component(org.apache.wicket.Component)
-	 */
-	public abstract Object component(Component component);
-}
+/*
+ * 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.renderStrategy;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Component.IVisit;
+import org.apache.wicket.Component.IVisitor;
+import org.apache.wicket.Component.Visit;
+import org.apache.wicket.util.lang.Checks;
+
+/**
+ * 
+ * @author Juergen Donnerstag
+ */
+public abstract class DeepChildFirstVisitor implements IVisitor<Component, Component>
+{
+	/**
+	 * Construct.
+	 */
+	public DeepChildFirstVisitor()
+	{
+	}
+
+	/**
+	 * Render the child hierarchy headers.
+	 * 
+	 * @param rootComponent
+	 * @return The object return by component()
+	 */
+	public final Object visit(final Component rootComponent)
+	{
+		Checks.argumentNotNull(rootComponent, "rootComponent");
+
+		if (rootComponent instanceof MarkupContainer)
+		{
+			final Visit<Component> visit = new Visit<Component>();
+			final Component[] lastComponent = new Component[1];
+			Object rtn = ((MarkupContainer)rootComponent).visitChildren(new Component.IVisitor<Component, Component>()
+			{
+				public void component(final Component component, final IVisit<Component> visit)
+				{
+					// skip invisible components
+					if (component.isVisibleInHierarchy())
+					{
+						// In case it is a 'leaf' component, than ...
+						if (!(component instanceof MarkupContainer) ||
+							((MarkupContainer)component).size() == 0)
+						{
+							// Lets assume we rendered the 1st leaf already and we now reached
+							// the 2nd leaf. If the 2nd leave has the very same parent, than we
+							// don't do anything. If not, than we need to render the 1st component's
+							// parents until such a parent is equal to the 2nd component parent.
+							if (lastComponent[0] != null)
+							{
+								MarkupContainer parent = lastComponent[0].getParent();
+								while ((parent != null) && (parent != rootComponent) &&
+									isCommonParent(parent, lastComponent[0], component) == false)
+								{
+									// Render the container since all its children have been
+									// rendered by now
+									component(parent, visit);
+
+									// If visitor returns a non-null value, it halts the traversal
+									if (((Visit)visit).isStopped())
+									{
+										return;
+									}
+
+									parent = parent.getParent();
+								}
+							}
+
+							// The 'leafs' header
+							component(component, visit);
+
+							// If visitor returns a non-null value, it halts the traversal
+							if (((Visit)visit).isStopped())
+							{
+								return;
+							}
+
+							// Remember the current leaf, we need it for comparison later on
+							visit.stop(component);
+						}
+					}
+					else
+					{
+						// Remember the current leaf, we need it for comparison later on
+						lastComponent[0] = component;
+						visit.dontGoDeeper();
+					}
+				}
+
+				/**
+				 * 
+				 * @param parent
+				 * @param lastComponent
+				 * @param currentComponent
+				 * @return true, if parent is a common parent of both components
+				 */
+				private boolean isCommonParent(final MarkupContainer parent,
+					final Component lastComponent, final Component currentComponent)
+				{
+					MarkupContainer p = lastComponent.getParent();
+					while ((p != null) && (p != rootComponent) && (p != parent))
+					{
+						p = p.getParent();
+					}
+
+					if (p == parent)
+					{
+						p = currentComponent.getParent();
+						while ((p != null) && (p != rootComponent) && (p != parent))
+						{
+							p = p.getParent();
+						}
+
+						if (p == parent)
+						{
+							return true;
+						}
+					}
+
+					return false;
+				}
+			});
+
+			// We still need to render the remaining containers
+			if (lastComponent[0] != null)
+			{
+				MarkupContainer parent = lastComponent[0].getParent();
+				while ((parent != null) && (parent != rootComponent))
+				{
+					// Render the container since all its children have been
+					// rendered by now
+					component(parent, visit);
+
+					// If visitor returns a non-null value, it halts the traversal
+					if (visit.isStopped())
+					{
+						return rtn;
+					}
+
+					parent = parent.getParent();
+				}
+			}
+
+			return rtn;
+		}
+
+		return null;
+	}
+
+	/**
+	 * @see org.apache.wicket.Component.IVisitor#component(org.apache.wicket.Component)
+	 */
+	public abstract void component(Component component, IVisit<Component> visit);
+}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ParentFirstHeaderRenderStrategy.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ParentFirstHeaderRenderStrategy.java?rev=926476&r1=926475&r2=926476&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ParentFirstHeaderRenderStrategy.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ParentFirstHeaderRenderStrategy.java Tue Mar 23 06:56:28 2010
@@ -1,79 +1,79 @@
-/*
- * 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.renderStrategy;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
-import org.apache.wicket.util.lang.Checks;
-
-/**
- * This is Wicket's default header render strategy which uses
- * {@link MarkupContainer#visitChildren(org.apache.wicket.Component.IVisitor)} to traverse the
- * hierarchy to render the children headers.
- * 
- * Since child contributions are added to the markup after the parent contributions, children may
- * replace / modify existing settings.
- * 
- * Note that in order to mix different render strategies, a "stop traversal" mechanism has been
- * implemented. It allows you to use strategy A for Wicket core components and strategy B for your
- * own.
- * 
- * @author Juergen Donnerstag
- */
-public class ParentFirstHeaderRenderStrategy extends AbstractHeaderRenderStrategy
-{
-	/**
-	 * Construct.
-	 */
-	public ParentFirstHeaderRenderStrategy()
-	{
-	}
-
-	/**
-	 * Render the child hierarchy headers.
-	 * 
-	 * @param headerContainer
-	 * @param rootComponent
-	 */
-	@Override
-	protected void renderChildHeaders(final HtmlHeaderContainer headerContainer,
-		final Component rootComponent)
-	{
-		Checks.argumentNotNull(headerContainer, "headerContainer");
-		Checks.argumentNotNull(rootComponent, "rootComponent");
-
-		if (rootComponent instanceof MarkupContainer)
-		{
-			((MarkupContainer)rootComponent).visitChildren(new Component.IVisitor<Component>()
-			{
-				public Object component(Component component)
-				{
-					if (component.isVisibleInHierarchy())
-					{
-						component.renderHead(headerContainer);
-						return CONTINUE_TRAVERSAL;
-					}
-					else
-					{
-						return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
-					}
-				}
-			});
-		}
-	}
-}
+/*
+ * 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.renderStrategy;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Component.IVisit;
+import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
+import org.apache.wicket.util.lang.Checks;
+
+/**
+ * This is Wicket's default header render strategy which uses
+ * {@link MarkupContainer#visitChildren(org.apache.wicket.Component.IVisitor)} to traverse the
+ * hierarchy to render the children headers.
+ * 
+ * Since child contributions are added to the markup after the parent contributions, children may
+ * replace / modify existing settings.
+ * 
+ * Note that in order to mix different render strategies, a "stop traversal" mechanism has been
+ * implemented. It allows you to use strategy A for Wicket core components and strategy B for your
+ * own.
+ * 
+ * @author Juergen Donnerstag
+ */
+public class ParentFirstHeaderRenderStrategy extends AbstractHeaderRenderStrategy
+{
+	/**
+	 * Construct.
+	 */
+	public ParentFirstHeaderRenderStrategy()
+	{
+	}
+
+	/**
+	 * Render the child hierarchy headers.
+	 * 
+	 * @param headerContainer
+	 * @param rootComponent
+	 */
+	@Override
+	protected void renderChildHeaders(final HtmlHeaderContainer headerContainer,
+		final Component rootComponent)
+	{
+		Checks.argumentNotNull(headerContainer, "headerContainer");
+		Checks.argumentNotNull(rootComponent, "rootComponent");
+
+		if (rootComponent instanceof MarkupContainer)
+		{
+			((MarkupContainer)rootComponent).visitChildren(new Component.IVisitor<Component, Void>()
+			{
+				public void component(final Component component, final IVisit<Void> visit)
+				{
+					if (component.isVisibleInHierarchy())
+					{
+						component.renderHead(headerContainer);
+					}
+					else
+					{
+						visit.dontGoDeeper();
+					}
+				}
+			});
+		}
+	}
+}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=926476&r1=926475&r2=926476&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Tue Mar 23 06:56:28 2010
@@ -45,6 +45,7 @@ import org.apache.wicket.RequestListener
 import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.Component.IVisit;
 import org.apache.wicket.Component.IVisitor;
 import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -1462,9 +1463,9 @@ public class BaseWicketTester
 	 */
 	public void executeAllTimerBehaviors(MarkupContainer container)
 	{
-		container.visitChildren(MarkupContainer.class, new IVisitor<MarkupContainer>()
+		container.visitChildren(MarkupContainer.class, new IVisitor<MarkupContainer, Void>()
 		{
-			public Object component(MarkupContainer component)
+			public void component(final MarkupContainer component, final IVisit<Void> visit)
 			{
 				// get the AbstractAjaxBehaviour which is responsible for
 				// getting the contents of the lazy panel
@@ -1483,7 +1484,6 @@ public class BaseWicketTester
 						}
 					}
 				}
-				return CONTINUE_TRAVERSAL;
 			}
 		});
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java?rev=926476&r1=926475&r2=926476&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java Tue Mar 23 06:56:28 2010
@@ -27,6 +27,7 @@ import java.util.List;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.Component.IVisit;
 import org.apache.wicket.Component.IVisitor;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.Check;
@@ -66,7 +67,7 @@ public class FormTester
 		/**
 		 * TODO need Javadoc from author.
 		 */
-		private final class SearchOptionByIndexVisitor implements IVisitor<Component>
+		private final class SearchOptionByIndexVisitor implements IVisitor<Component, Component>
 		{
 			int count = 0;
 
@@ -81,16 +82,15 @@ public class FormTester
 			/**
 			 * @see org.apache.wicket.Component.IVisitor#component(org.apache.wicket.Component)
 			 */
-			public Object component(Component component)
+			public void component(final Component component, final IVisit<Component> visit)
 			{
 				if (count == index)
 				{
-					return component;
+					visit.stop(component);
 				}
 				else
 				{
 					count++;
-					return CONTINUE_TRAVERSAL;
 				}
 			}
 		}
@@ -373,11 +373,12 @@ public class FormTester
 		tester = wicketTester;
 
 		// fill blank String for Text Component.
-		workingForm.visitFormComponents(new FormComponent.AbstractVisitor()
+		workingForm.visitFormComponents(new FormComponent.AbstractVisitor<Void>()
 		{
 			@SuppressWarnings("unchecked")
 			@Override
-			public void onFormComponent(final FormComponent<?> formComponent)
+			public void onFormComponent(final FormComponent<?> formComponent,
+				IVisit<Void> visit)
 			{
 				// do nothing for invisible component
 				if (!formComponent.isVisibleInHierarchy())
@@ -418,16 +419,16 @@ public class FormTester
 				else if (formComponent instanceof CheckGroup)
 				{
 					final Collection<?> checkGroupValues = (Collection<?>)formComponent.getDefaultModelObject();
-					formComponent.visitChildren(Check.class, new IVisitor<Component>()
+					formComponent.visitChildren(Check.class, new IVisitor<Component, Void>()
 					{
-						public Object component(Component component)
+						public void component(final Component component,
+							final IVisit<Void> visit)
 						{
 							if (checkGroupValues.contains(component.getDefaultModelObject()))
 							{
 								addFormComponentValue(formComponent,
 									((Check<?>)component).getValue());
 							}
-							return CONTINUE_TRAVERSAL;
 						}
 					});
 				}
@@ -439,17 +440,21 @@ public class FormTester
 					final Object value = formComponent.getDefaultModelObject();
 					if (value != null)
 					{
-						formComponent.visitChildren(Radio.class, new IVisitor<Component>()
+						formComponent.visitChildren(Radio.class, new IVisitor<Component, Void>()
 						{
-							public Object component(Component component)
+							public void component(final Component component,
+								final IVisit<Void> visit)
 							{
 								if (value.equals(component.getDefaultModelObject()))
 								{
 									addFormComponentValue(formComponent,
 										((Radio<?>)component).getValue());
-									return STOP_TRAVERSAL;
+									visit.stop();
+								}
+								else
+								{
+									visit.dontGoDeeper();
 								}
-								return CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER;
 							}
 						});
 					}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java?rev=926476&r1=926475&r2=926476&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java Tue Mar 23 06:56:28 2010
@@ -26,6 +26,7 @@ import junit.framework.Assert;
 import org.apache.wicket.Component;
 import org.apache.wicket.IClusterable;
 import org.apache.wicket.Page;
+import org.apache.wicket.Component.IVisit;
 import org.apache.wicket.Component.IVisitor;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.behavior.IBehavior;
@@ -73,9 +74,9 @@ public class WicketTesterHelper
 
 		if (page != null)
 		{
-			page.visitChildren(new IVisitor<Component>()
+			page.visitChildren(new IVisitor<Component, Void>()
 			{
-				public Object component(final Component component)
+				public void component(final Component component, final IVisit<Void> visit)
 				{
 					final ComponentData object = new ComponentData();
 
@@ -101,7 +102,6 @@ public class WicketTesterHelper
 					}
 
 					data.add(object);
-					return IVisitor.CONTINUE_TRAVERSAL;
 				}
 			});
 		}

Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java?rev=926476&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java Tue Mar 23 06:56:28 2010
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket;
+
+import junit.framework.Assert;
+
+import org.apache.wicket.Component.IVisit;
+import org.apache.wicket.Component.IVisitor;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.FormComponent;
+
+/**
+ * <code>
+ * A
+ * +-B
+ * +-C
+ * | +-D
+ * | +-E
+ * |   +-F
+ * +-G
+ *   +-H
+ * </code>
+ * 
+ * @author igor.vaynberg
+ */
+public class VisitorTest extends WicketTestCase
+{
+
+	public void testContinueTraversal()
+	{
+		final StringBuilder path = new StringBuilder();
+
+		TestContainer container = new TestContainer();
+		container.visitChildren(new IVisitor<Component, Void>()
+		{
+			public void component(Component component, IVisit<Void> visit)
+			{
+				path.append(component.getId());
+			}
+		});
+
+		Assert.assertEquals("BCDEFGH", path.toString());
+	}
+
+	public void testContinuePostOrder()
+	{
+		final StringBuilder path = new StringBuilder();
+
+		TestContainer container = new TestContainer();
+		FormComponent.visitComponentsPostOrder(container, new IVisitor<Component, Void>()
+		{
+			public void component(Component component, IVisit<Void> visit)
+			{
+				path.append(component.getId());
+			}
+		});
+
+		Assert.assertEquals("BDFECHGA", path.toString());
+	}
+
+	public void testStop()
+	{
+		final StringBuilder path = new StringBuilder();
+
+		TestContainer container = new TestContainer();
+		Object result = container.visitChildren(new IVisitor<Component, String>()
+		{
+			public void component(Component component, IVisit<String> visit)
+			{
+				path.append(component.getId());
+				if ("D".equals(component.getId()))
+				{
+					visit.stop("RESULT");
+				}
+			}
+		});
+		Assert.assertEquals("BCD", path.toString());
+		Assert.assertEquals("RESULT", result);
+	}
+
+	public void testDoNotGoDeeper1()
+	{
+		final StringBuilder path = new StringBuilder();
+
+		TestContainer container = new TestContainer();
+		container.visitChildren(new IVisitor<Component, Void>()
+		{
+			public void component(Component component, IVisit<Void> visit)
+			{
+				path.append(component.getId());
+				if ("C".equals(component.getId()))
+				{
+					visit.dontGoDeeper();
+				}
+			}
+		});
+		Assert.assertEquals("BCGH", path.toString());
+	}
+
+	public void testDoNotGoDeeper2()
+	{
+		final StringBuilder path = new StringBuilder();
+
+		TestContainer container = new TestContainer();
+		container.visitChildren(new IVisitor<Component, Void>()
+		{
+			public void component(Component component, IVisit<Void> visit)
+			{
+				path.append(component.getId());
+				if ("E".equals(component.getId()))
+				{
+					visit.dontGoDeeper();
+				}
+			}
+		});
+		Assert.assertEquals("BCDEGH", path.toString());
+	}
+
+
+	private static class TestContainer extends WebMarkupContainer
+	{
+		public TestContainer()
+		{
+			super("A");
+			WebMarkupContainer b = new WebMarkupContainer("B");
+			WebMarkupContainer c = new WebMarkupContainer("C");
+			WebMarkupContainer d = new WebMarkupContainer("D");
+			WebMarkupContainer e = new WebMarkupContainer("E");
+			WebMarkupContainer f = new WebMarkupContainer("F");
+			WebMarkupContainer g = new WebMarkupContainer("G");
+			WebMarkupContainer h = new WebMarkupContainer("H");
+			add(b);
+			add(c);
+			c.add(d);
+			c.add(e);
+			e.add(f);
+			add(g);
+			g.add(h);
+		}
+
+	}
+}

Propchange: wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java?rev=926476&r1=926475&r2=926476&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java Tue Mar 23 06:56:28 2010
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.markup.html.form;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.WicketTestCase;
 
 
@@ -51,32 +50,6 @@ public class FormTest extends WicketTest
 		};
 	}
 
-	/**
-	 * 
-	 */
-	public void testShouldContinueTraversalIfListenerAllowsChildProcessing()
-	{
-		assertTraversalStatus(Component.IVisitor.CONTINUE_TRAVERSAL, true);
-	}
-
-	/**
-	 * 
-	 */
-	public void testShouldContinueTraversalButDontGoDeeperIfListenerDisallowsChildProcessing()
-	{
-		assertTraversalStatus(Component.IVisitor.CONTINUE_TRAVERSAL_BUT_DONT_GO_DEEPER, false);
-	}
-
-	private void assertTraversalStatus(Object expected, final boolean processChildren)
-	{
-		assertEquals(expected, visitor.formComponent(new IFormVisitorParticipant()
-		{
-			public boolean processChildren()
-			{
-				return processChildren;
-			}
-		}));
-	}
 
 	/**
 	 * @throws Exception

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java?rev=926476&r1=926475&r2=926476&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java Tue Mar 23 06:56:28 2010
@@ -27,6 +27,7 @@ import java.util.Set;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.Component.IVisit;
 import org.apache.wicket.Component.IVisitor;
 import org.apache.wicket.util.file.File;
 import org.apache.wicket.util.tester.FormTester;
@@ -136,12 +137,12 @@ public class FileUploadFieldTest extends
 			}
 		};
 		final MockPageWithFormAndUploadField page = new MockPageWithFormAndUploadField();
-		page.getForm().visitChildren(FileUploadField.class, new IVisitor<FileUploadField>()
+		page.getForm().visitChildren(FileUploadField.class, new IVisitor<FileUploadField, Void>()
 		{
-			public Object component(FileUploadField uploadField)
+			public void component(FileUploadField uploadField, IVisit<Void> visit)
 			{
 				uploadField.add(testValidator);
-				return STOP_TRAVERSAL;
+				visit.stop();
 			}
 		});