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/25 08:03:20 UTC

svn commit: r927290 - in /wicket/trunk: wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/ wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/panel/ wicket-util/src/main/java/org/apache/wicket/util/visit...

Author: ivaynberg
Date: Thu Mar 25 07:03:19 2010
New Revision: 927290

URL: http://svn.apache.org/viewvc?rev=927290&view=rev
Log:
more visitor cleanup. externalized and simplified. still lots of stuff to do.

Added:
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java   (with props)
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java   (with props)
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java   (with props)
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java   (with props)
    wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java   (with props)
Modified:
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanelTester.java
    wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/panel/BreadCrumbParticipantDelegate.java
    wicket/trunk/wicket/src/main/disabled/org/apache/wicket/protocol/http/MockHttpServletRequest.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/ajax/AjaxRequestTarget.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/debug/PageView.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.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/html/tree/AbstractTree.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategy.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/DeepChildFirstVisitor.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ParentFirstHeaderRenderStrategy.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTesterHelper.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/upload/FileUploadFieldTest.java

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanelTester.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanelTester.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanelTester.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanelTester.java Thu Mar 25 07:03:19 2010
@@ -19,13 +19,13 @@ package org.apache.wicket.extensions.aja
 import java.util.List;
 
 import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.Component.IVisit;
-import org.apache.wicket.Component.IVisitor;
 import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
 import org.apache.wicket.behavior.AbstractAjaxBehavior;
 import org.apache.wicket.behavior.BehaviorsUtil;
 import org.apache.wicket.behavior.IBehavior;
 import org.apache.wicket.util.tester.WicketTester;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

Modified: wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/panel/BreadCrumbParticipantDelegate.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/panel/BreadCrumbParticipantDelegate.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/panel/BreadCrumbParticipantDelegate.java (original)
+++ wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/breadcrumb/panel/BreadCrumbParticipantDelegate.java Thu Mar 25 07:03:19 2010
@@ -21,10 +21,10 @@ package org.apache.wicket.extensions.bre
 
 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.extensions.breadcrumb.IBreadCrumbParticipant;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * Base implementation for {@link Panel}/ {@link Component} based {@link IBreadCrumbParticipant}
@@ -84,8 +84,7 @@ public abstract class BreadCrumbParticip
 					// NOTE unfortunately, we can't rely on the path pre 2.0
 					Component c = parent.visitChildren(new IVisitor<Component, Component>()
 					{
-						public void component(Component component,
-							final IVisit<Component> visit)
+						public void component(Component component, final IVisit<Component> visit)
 						{
 							if (component.getId().equals(thisId))
 							{

Added: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java?rev=927290&view=auto
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java (added)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java Thu Mar 25 07:03:19 2010
@@ -0,0 +1,10 @@
+package org.apache.wicket.util.visit;
+
+public interface IVisit<R>
+{
+	void stop();
+
+	void stop(R result);
+
+	void dontGoDeeper();
+}

Propchange: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisit.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java?rev=927290&view=auto
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java (added)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java Thu Mar 25 07:03:19 2010
@@ -0,0 +1,21 @@
+package org.apache.wicket.util.visit;
+
+public interface IVisitFilter
+{
+	boolean visitObject(Object object);
+
+	boolean visitChildren(Object object);
+
+	public static IVisitFilter ANY = new IVisitFilter()
+	{
+		public boolean visitObject(Object object)
+		{
+			return true;
+		}
+
+		public boolean visitChildren(Object object)
+		{
+			return true;
+		}
+	};
+}

Propchange: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitFilter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java?rev=927290&view=auto
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java (added)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java Thu Mar 25 07:03:19 2010
@@ -0,0 +1,25 @@
+package org.apache.wicket.util.visit;
+
+
+/**
+ * Generic component visitor interface for component traversals.
+ * 
+ * @param <T>
+ *            The component
+ */
+public interface IVisitor<T, R>
+{
+	/**
+	 * Called at each component in a visit.
+	 * 
+	 * @param component
+	 *            The component
+	 * @param traversal
+	 *            An {@link IVisit} which state will be modified depending on
+	 *            the visitation. CONTINUE_TRAVERSAL (null) if the traversal
+	 *            should continue, or a non-null return value for the traversal
+	 *            method if it should stop. If no return value is useful, the
+	 *            generic non-null value STOP_TRAVERSAL can be used.
+	 */
+	public void component(T component, IVisit<R> visit);
+}
\ No newline at end of file

Propchange: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/IVisitor.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java?rev=927290&view=auto
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java (added)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java Thu Mar 25 07:03:19 2010
@@ -0,0 +1,50 @@
+package org.apache.wicket.util.visit;
+public  class Visit<R> implements IVisit<R>
+	{
+		private static enum Action {
+			CONTINUE, CONTINUE_BUT_DONT_GO_DEEPER, STOP;
+		}
+
+		private R result;
+		private Action action = Action.CONTINUE;
+
+		public void stop()
+		{
+			stop(null);
+		}
+
+		public void stop(R result)
+		{
+			action = Action.STOP;
+			this.result = result;
+		}
+
+		public void dontGoDeeper()
+		{
+			action = Action.CONTINUE_BUT_DONT_GO_DEEPER;
+		}
+
+		public boolean isStopped()
+		{
+			return action == Action.STOP;
+		}
+
+		public boolean isContinue()
+		{
+			return action == Action.CONTINUE;
+		}
+
+		public boolean isDontGoDeeper()
+		{
+			return action == Action.CONTINUE_BUT_DONT_GO_DEEPER;
+		}
+
+		public R getResult()
+		{
+			return result;
+		}
+
+
+	}
+
+	
\ No newline at end of file

Propchange: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visit.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java?rev=927290&view=auto
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java (added)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java Thu Mar 25 07:03:19 2010
@@ -0,0 +1,161 @@
+package org.apache.wicket.util.visit;
+
+import java.util.Iterator;
+
+
+public class Visits
+{
+	// TODO replace class argument with IVisitFilter
+	public static final <S, R> R visitChildren(Iterable<?> container, final Class<?> clazz,
+			final IVisitor<S, R> visitor)
+	{
+		Visit<R> visit = new Visit<R>();
+		visitChildren(container, clazz, visitor, visit);
+		return visit.getResult();
+	}
+
+
+	private static final <S, R> void visitChildren(Iterable<?> container, final Class<?> clazz,
+			final IVisitor<S, R> visitor, Visit<R> visit)
+	{
+		if (visitor == null)
+		{
+			throw new IllegalArgumentException("argument visitor may not be null");
+		}
+
+		// Iterate through children of this container
+		for (final Iterator<?> children = container.iterator(); children.hasNext();)
+		{
+			// Get next child component
+			final Object child = children.next();
+
+			// Is the child of the correct class (or was no class specified)?
+			if (clazz == null || clazz.isInstance(child))
+			{
+				Visit<R> childTraversal = new Visit<R>();
+
+				// Call visitor
+				@SuppressWarnings("unchecked")
+				S s = (S)child;
+				visitor.component(s, childTraversal);
+
+				if (childTraversal.isStopped())
+				{
+					visit.stop(childTraversal.getResult());
+					return;
+				}
+				else if (childTraversal.isDontGoDeeper())
+				{
+					continue;
+				}
+			}
+
+			// If child is a container
+			if (!visit.isDontGoDeeper() && (child instanceof Iterable<?>))
+			{
+				// visit the children in the container
+				visitChildren((Iterable<?>)child, clazz, visitor, visit);
+
+				if (visit.isStopped())
+				{
+					return;
+				}
+			}
+		}
+
+		return;
+	}
+
+	/**
+	 * Traverses all child components in this container, calling the visitor's
+	 * visit method at each one.
+	 * 
+	 * @param visitor
+	 *            The visitor to call back to
+	 * @return The return value from a visitor which halted the traversal, or
+	 *         null if the entire traversal occurred
+	 */
+	public static final <S, R> R visitChildren(Iterable<?> visitable, final IVisitor<S, R> visitor)
+	{
+		return visitChildren(visitable, null, visitor);
+	}
+
+	/**
+	 * Visits any form components inside component if it is a container, or
+	 * component itself if it is itself a form component
+	 * 
+	 * @param component
+	 *            starting point of the traversal
+	 * 
+	 * @param visitor
+	 *            The visitor to call
+	 */
+	public static final <S, R> R visitComponentsPostOrder(Iterable<?> component,
+			final org.apache.wicket.util.visit.IVisitor<S, R> visitor)
+	{
+		return visitComponentsPostOrder(component, visitor, IVisitFilter.ANY);
+	}
+
+	/**
+	 * Visits any form components inside component if it is a container, or
+	 * component itself if it is itself a form component
+	 * 
+	 * @param component
+	 *            starting point of the traversal
+	 * 
+	 * @param visitor
+	 *            The visitor to call
+	 */
+	public static final <S, R> R visitComponentsPostOrder(Object component,
+			final org.apache.wicket.util.visit.IVisitor<S, R> visitor, IVisitFilter filter)
+	{
+		if (visitor == null)
+		{
+			throw new IllegalArgumentException("Argument `visitor` cannot be null");
+		}
+
+		Visit<R> visit = new Visit<R>();
+		visitComponentsPostOrderHelper(component, visitor, filter, visit);
+		return visit.getResult();
+	}
+
+	/**
+	 * 
+	 * @param component
+	 * @param visitor
+	 * @return Object
+	 */
+	private static final <S, R> void visitComponentsPostOrderHelper(Object component,
+			final org.apache.wicket.util.visit.IVisitor<S, R> visitor, IVisitFilter filter,
+			Visit<R> visit)
+	{
+
+		if (component instanceof Iterable<?>)
+		{
+			final Iterable<?> container = (Iterable<?>)component;
+			if (filter.visitChildren(container))
+			{
+				Visit<R> childTraversal = new Visit<R>();
+				for (final Iterator<?> iterator = ((Iterable<?>)component).iterator(); iterator
+						.hasNext();)
+				{
+					final Object child = iterator.next();
+					if (child instanceof Iterable<?>)
+					{
+						visitComponentsPostOrderHelper((Iterable<?>)child, visitor, filter,
+								childTraversal);
+						if (childTraversal.isStopped())
+						{
+							visit.stop(childTraversal.getResult());
+							return;
+						}
+					}
+				}
+			}
+			if (filter.visitObject(component))
+			{
+				visitor.component((S)component, visit);
+			}
+		}
+	}
+}

Propchange: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/visit/Visits.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: wicket/trunk/wicket/src/main/disabled/org/apache/wicket/protocol/http/MockHttpServletRequest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/disabled/org/apache/wicket/protocol/http/MockHttpServletRequest.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/disabled/org/apache/wicket/protocol/http/MockHttpServletRequest.java (original)
+++ wicket/trunk/wicket/src/main/disabled/org/apache/wicket/protocol/http/MockHttpServletRequest.java Thu Mar 25 07:03:19 2010
@@ -1323,7 +1323,7 @@ public class MockHttpServletRequest impl
 		setRequestToComponent(form);
 
 		final Map<String, Object> valuesApplied = new HashMap<String, Object>();
-		form.visitChildren(FormComponent.class, new Component.IVisitor<FormComponent<?>>()
+		form.visitChildren(FormComponent.class, new IVisitor<FormComponent<?>>()
 		{
 			public Object component(final FormComponent<?> component)
 			{

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -69,6 +69,9 @@ import org.apache.wicket.util.string.Com
 import org.apache.wicket.util.string.PrependingStringBuffer;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.value.ValueMap;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
+import org.apache.wicket.util.visit.Visit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -216,83 +219,6 @@ import org.slf4j.LoggerFactory;
 public abstract class Component implements IClusterable, IConverterLocator, IRequestableComponent
 {
 
-	public static interface IVisit<R>
-	{
-		void stop();
-
-		void stop(R result);
-
-		void dontGoDeeper();
-	}
-	public static class Visit<R> implements IVisit<R>
-	{
-		private static enum Action {
-			CONTINUE, CONTINUE_BUT_DONT_GO_DEEPER, STOP;
-		}
-
-		private R result;
-		private Action action = Action.CONTINUE;
-
-		public void stop()
-		{
-			stop(null);
-		}
-
-		public void stop(R result)
-		{
-			action = Action.STOP;
-			this.result = result;
-		}
-
-		public void dontGoDeeper()
-		{
-			action = Action.CONTINUE_BUT_DONT_GO_DEEPER;
-		}
-
-		public boolean isStopped()
-		{
-			return action == Action.STOP;
-		}
-
-		public boolean isContinue()
-		{
-			return action == Action.CONTINUE;
-		}
-
-		public boolean isDontGoDeeper()
-		{
-			return action == Action.CONTINUE_BUT_DONT_GO_DEEPER;
-		}
-
-		public R getResult()
-		{
-			return result;
-		}
-
-
-	}
-
-	/**
-	 * Generic component visitor interface for component traversals.
-	 * 
-	 * @param <T>
-	 *            The component
-	 */
-	public static interface IVisitor<T extends Component, R>
-	{
-		/**
-		 * Called at each component in a visit.
-		 * 
-		 * @param component
-		 *            The component
-		 * @param traversal
-		 *            An {@link IVisit} which state will be modified depending on the visitation.
-		 *            CONTINUE_TRAVERSAL (null) if the traversal should continue, or a non-null
-		 *            return value for the traversal method if it should stop. If no return value is
-		 *            useful, the generic non-null value STOP_TRAVERSAL can be used.
-		 */
-		public void component(T component, IVisit<R> visit);
-	}
 
 	/** Log. */
 	private static final Logger log = LoggerFactory.getLogger(Component.class);
@@ -3365,9 +3291,9 @@ public abstract class Component implemen
 			if (c.isInstance(current))
 			{
 				visitor.component(current, visit);
-				if (visit.action == Visit.Action.STOP)
+				if (visit.isStopped())
 				{
-					return visit.result;
+					return visit.getResult();
 				}
 			}
 

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -41,6 +41,9 @@ import org.apache.wicket.model.IWrapMode
 import org.apache.wicket.settings.IDebugSettings;
 import org.apache.wicket.util.string.ComponentStrings;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
+import org.apache.wicket.util.visit.Visits;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -52,7 +55,7 @@ import org.slf4j.LoggerFactory;
  * held a nested component "c", then a.get("b:c") would return the Component with id "c". The number
  * of children in a MarkupContainer can be determined by calling size(), and the whole hierarchy of
  * children held by a MarkupContainer can be traversed by calling visitChildren(), passing in an
- * implementation of Component.IVisitor.
+ * implementation of IVisitor.
  * 
  * <li><b>Markup Rendering </b>- A MarkupContainer also holds/references associated markup which is
  * used to render the container. As the markup stream for a container is rendered, component
@@ -84,7 +87,7 @@ import org.slf4j.LoggerFactory;
  * @author Jonathan Locke
  * 
  */
-public abstract class MarkupContainer extends Component
+public abstract class MarkupContainer extends Component implements Iterable<Component>
 {
 	private static final long serialVersionUID = 1L;
 
@@ -533,7 +536,7 @@ public abstract class MarkupContainer ex
 	/**
 	 * @return Iterator that iterates through children in the order they were added
 	 */
-	public Iterator<? extends Component> iterator()
+	public Iterator<Component> iterator()
 	{
 		return new Iterator<Component>()
 		{
@@ -901,63 +904,7 @@ public abstract class MarkupContainer ex
 	public final <S extends Component, R> R visitChildren(final Class<?> clazz,
 		final IVisitor<S, R> visitor)
 	{
-		Visit<R> visit = new Visit<R>();
-		visitChildren(clazz, visitor, visit);
-		return visit.getResult();
-	}
-
-
-	private final <S extends Component, R> void visitChildren(final Class<?> clazz,
-		final IVisitor<S, R> visitor, Visit<R> visit)
-	{
-		if (visitor == null)
-		{
-			throw new IllegalArgumentException("argument visitor may not be null");
-		}
-
-		// Iterate through children of this container
-		for (int i = 0; i < children_size(); i++)
-		{
-			// Get next child component
-			final Component child = children_get(i);
-
-			// Is the child of the correct class (or was no class specified)?
-			if (clazz == null || clazz.isInstance(child))
-			{
-				Visit<R> childTraversal = new Visit<R>();
-
-				// Call visitor
-				@SuppressWarnings("unchecked")
-				S s = (S)child;
-				visitor.component(s, childTraversal);
-
-				if (childTraversal.isStopped())
-				{
-					visit.stop(childTraversal.getResult());
-					return;
-				}
-				else if (childTraversal.isDontGoDeeper())
-				{
-					continue;
-				}
-			}
-
-			// If child is a container
-			if ((child instanceof MarkupContainer) && !visit.isDontGoDeeper())
-			{
-				Visit<R> childTraversal = new Visit<R>();
-
-				// visit the children in the container
-				((MarkupContainer)child).visitChildren(clazz, visitor, visit);
-
-				if (visit.isStopped())
-				{
-					return;
-				}
-			}
-		}
-
-		return;
+		return Visits.visitChildren(this, clazz, visitor);
 	}
 
 	/**
@@ -971,7 +918,7 @@ public abstract class MarkupContainer ex
 	 */
 	public final <R> R visitChildren(final IVisitor<Component, R> visitor)
 	{
-		return visitChildren(null, visitor);
+		return Visits.visitChildren(this, visitor);
 	}
 
 	/**

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -47,6 +47,8 @@ import org.apache.wicket.settings.IDebug
 import org.apache.wicket.util.lang.Classes;
 import org.apache.wicket.util.lang.WicketObjects;
 import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -988,7 +990,7 @@ public abstract class Page extends Marku
 	@Override
 	protected final void internalOnModelChanged()
 	{
-		visitChildren(new Component.IVisitor<Component, Void>()
+		visitChildren(new IVisitor<Component, Void>()
 		{
 			public void component(final Component component, final IVisit<Void> visit)
 			{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java Thu Mar 25 07:03:19 2010
@@ -33,7 +33,6 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.Component.IVisit;
 import org.apache.wicket.markup.html.IHeaderResponse;
 import org.apache.wicket.markup.html.internal.HeaderResponse;
 import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
@@ -54,6 +53,8 @@ import org.apache.wicket.request.mapper.
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -321,7 +322,7 @@ public class AjaxRequestTarget implement
 					Component.class.getName() + ".class` as the value for this argument");
 		}
 
-		parent.visitChildren(childCriteria, new Component.IVisitor<Component, Void>()
+		parent.visitChildren(childCriteria, new IVisitor<Component, Void>()
 		{
 
 			public void component(final Component component, final IVisit<Void> visit)
@@ -1079,7 +1080,7 @@ public class AjaxRequestTarget implement
 
 		if (component instanceof MarkupContainer)
 		{
-			((MarkupContainer)component).visitChildren(new Component.IVisitor<Component, Void>()
+			((MarkupContainer)component).visitChildren(new IVisitor<Component, Void>()
 			{
 				public void component(final Component component, final IVisit<Void> visit)
 				{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/form/AjaxFormValidatingBehavior.java Thu Mar 25 07:03:19 2010
@@ -17,13 +17,13 @@
 package org.apache.wicket.ajax.form;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.Component.IVisit;
-import org.apache.wicket.Component.IVisitor;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.feedback.IFeedback;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.util.time.Duration;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * Ajax event behavior that submits the form and updates all form feedback panels on the page.

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/WebPage.java Thu Mar 25 07:03:19 2010
@@ -33,6 +33,8 @@ import org.apache.wicket.request.mapper.
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.response.StringResponse;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -244,8 +246,7 @@ public class WebPage extends Page implem
 	{
 		HtmlHeaderContainer header = visitChildren(new IVisitor<Component, HtmlHeaderContainer>()
 		{
-			public void component(final Component component,
-				final IVisit<HtmlHeaderContainer> visit)
+			public void component(final Component component, final IVisit<HtmlHeaderContainer> visit)
 			{
 				if (component instanceof HtmlHeaderContainer)
 				{
@@ -282,10 +283,9 @@ public class WebPage extends Page implem
 				visitChildren(new IVisitor<Component, Void>()
 				{
 					/**
-					 * @see org.apache.wicket.Component.IVisitor#component(org.apache.wicket.Component)
+					 * @see org.apache.wicket.IVisitor#component(org.apache.wicket.Component)
 					 */
-					public void component(final Component component,
-						final IVisit<Void> visit)
+					public void component(final Component component, final IVisit<Void> visit)
 					{
 						component.renderHead(finalHeader);
 					}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/debug/PageView.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/debug/PageView.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/debug/PageView.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/debug/PageView.java Thu Mar 25 07:03:19 2010
@@ -30,6 +30,8 @@ import org.apache.wicket.markup.html.lis
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.util.lang.Bytes;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 
 /**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java Thu Mar 25 07:03:19 2010
@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -28,6 +27,7 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.util.CollectionModel;
 import org.apache.wicket.util.convert.ConversionException;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.visit.IVisit;
 
 
 /**
@@ -119,10 +119,9 @@ public class CheckGroup<T> extends FormC
 				if (value != null)
 				{
 					Check<T> checkbox = visitChildren(Check.class,
-						new Component.IVisitor<Check<T>, Check<T>>()
+						new org.apache.wicket.util.visit.IVisitor<Check<T>, Check<T>>()
 						{
-							public void component(final Check<T> check,
-								final IVisit<Check<T>> visit)
+							public void component(final Check<T> check, final IVisit<Check<T>> visit)
 							{
 								if (String.valueOf(check.getValue()).equals(value))
 								{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java Thu Mar 25 07:03:19 2010
@@ -50,6 +50,8 @@ import org.apache.wicket.util.string.Str
 import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
 import org.apache.wicket.util.upload.FileUploadException;
 import org.apache.wicket.util.upload.FileUploadBase.SizeLimitExceededException;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.apache.wicket.validation.IValidatorAddListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -136,29 +138,25 @@ public class Form<T> extends WebMarkupCo
 	 * 
 	 * @author Igor Vaynberg (ivaynberg)
 	 */
-	public static abstract class ValidationVisitor implements FormComponent.IVisitor<Void>
+	public static abstract class ValidationVisitor implements IVisitor<FormComponent<?>, Void>
 	{
-		public void formComponent(final IFormVisitorParticipant component, final IVisit<Void> visit)
+		public void component(final FormComponent<?> formComponent, final IVisit<Void> visit)
 		{
-			if (component instanceof FormComponent<?>)
-			{
-				FormComponent<?> formComponent = (FormComponent<?>)component;
 
-				Form<?> form = formComponent.getForm();
-				if (!form.isVisibleInHierarchy() || !form.isEnabledInHierarchy())
-				{
-					// do not validate formComponent or any of formComponent's children
-					visit.dontGoDeeper();
-					return;
-				}
+			Form<?> form = formComponent.getForm();
+			if (!form.isVisibleInHierarchy() || !form.isEnabledInHierarchy())
+			{
+				// do not validate formComponent or any of formComponent's children
+				visit.dontGoDeeper();
+				return;
+			}
 
-				if (formComponent.isVisibleInHierarchy() && formComponent.isValid() &&
-					formComponent.isEnabledInHierarchy())
-				{
-					validate(formComponent);
-				}
+			if (formComponent.isVisibleInHierarchy() && formComponent.isValid() &&
+				formComponent.isEnabledInHierarchy())
+			{
+				validate(formComponent);
 			}
-			if (component.processChildren())
+			if (formComponent.processChildren())
 			{
 				return;
 			}
@@ -183,7 +181,7 @@ public class Form<T> extends WebMarkupCo
 	 * 
 	 * @author Igor Vaynberg (ivaynberg)
 	 */
-	private static class FormModelUpdateVisitor implements Component.IVisitor<Component, Void>
+	private static class FormModelUpdateVisitor implements IVisitor<Component, Void>
 	{
 		private final Form<?> formFilter;
 
@@ -795,15 +793,11 @@ public class Form<T> extends WebMarkupCo
 		final PageParameters parameters = page.getPageParameters();
 		if (parameters != null)
 		{
-			visitFormComponents(new FormComponent.IVisitor<Void>()
+			visitFormComponents(new IVisitor<FormComponent<?>, Void>()
 			{
-				public void formComponent(final IFormVisitorParticipant formComponent,
-					final IVisit<Void> visit)
+				public void component(final FormComponent<?> formComponent, final IVisit<Void> visit)
 				{
-					if (formComponent instanceof FormComponent<?>)
-					{
-						parameters.removeNamedParameter(((FormComponent<?>)formComponent).getInputName());
-					}
+					parameters.removeNamedParameter(formComponent.getInputName());
 				}
 			});
 			parameters.removeNamedParameter(getHiddenFieldId());
@@ -993,15 +987,9 @@ public class Form<T> extends WebMarkupCo
 	 * @param visitor
 	 *            The visitor interface to call
 	 */
-	public final <R> R visitFormComponents(final FormComponent.IVisitor<R> visitor)
+	public final <R> R visitFormComponents(final IVisitor<? extends FormComponent<?>, R> visitor)
 	{
-		return visitChildren(FormComponent.class, new IVisitor<Component, R>()
-		{
-			public void component(final Component component, final IVisit<R> visit)
-			{
-				visitor.formComponent((FormComponent<?>)component, visit);
-			}
-		});
+		return visitChildren(FormComponent.class, visitor);
 	}
 
 	/**
@@ -1011,7 +999,8 @@ public class Form<T> extends WebMarkupCo
 	 * @param visitor
 	 *            The visitor interface to call
 	 */
-	public final <R> R visitFormComponentsPostOrder(final FormComponent.IVisitor<R> visitor)
+	public final <R> R visitFormComponentsPostOrder(
+		final IVisitor<? extends FormComponent<?>, R> visitor)
 	{
 		return FormComponent.visitFormComponentsPostOrder(this, visitor);
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java Thu Mar 25 07:03:19 2010
@@ -32,7 +32,6 @@ import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.IConverterLocator;
 import org.apache.wicket.Localizer;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
@@ -47,6 +46,10 @@ import org.apache.wicket.util.string.Str
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitFilter;
+import org.apache.wicket.util.visit.IVisitor;
+import org.apache.wicket.util.visit.Visits;
 import org.apache.wicket.validation.IErrorMessageSource;
 import org.apache.wicket.validation.INullAcceptingValidator;
 import org.apache.wicket.validation.IValidatable;
@@ -100,37 +103,21 @@ public abstract class FormComponent<T> e
 
 	/**
 	 * Visitor for traversing form components
+	 * 
+	 * @deprecated no longer a need for this base class
 	 */
-	public static abstract class AbstractVisitor<R> implements IVisitor<R>
+	@Deprecated
+	public static abstract class AbstractVisitor<R> implements IVisitor<FormComponent<?>, R>
 	{
-		public void formComponent(final IFormVisitorParticipant component, final IVisit<R> visit)
+		public void component(final FormComponent<?> component, final IVisit<R> visit)
 		{
-			if (component instanceof FormComponent<?>)
-			{
-				onFormComponent((FormComponent<?>)component, visit);
-			}
+			onFormComponent(component, visit);
 		}
 
 		protected abstract void onFormComponent(FormComponent<?> formComponent, IVisit<R> visit);
 	}
 
 	/**
-	 * Typesafe interface to code that is called when visiting a form component.
-	 */
-	public static interface IVisitor<R>
-	{
-		/**
-		 * Called when visiting a form component
-		 * 
-		 * @param formComponent
-		 *            The form component
-		 * @param traversal
-		 *            The {@link IVisit} that will keep the result and traversing state
-		 */
-		public void formComponent(IFormVisitorParticipant formComponent, IVisit<R> visit);
-	}
-
-	/**
 	 * {@link IErrorMessageSource} used for error messages against this form components.
 	 * 
 	 * @author ivaynberg
@@ -362,61 +349,27 @@ public abstract class FormComponent<T> e
 	 *            The visitor to call
 	 */
 	public static final <R> R visitFormComponentsPostOrder(Component component,
-		final FormComponent.IVisitor<R> visitor)
+		final IVisitor<? extends FormComponent, R> visitor)
 	{
-		if (visitor == null)
+		return Visits.visitComponentsPostOrder(component, visitor, new IVisitFilter()
 		{
-			throw new IllegalArgumentException("Argument `visitor` cannot be null");
-		}
 
-		Visit<R> visit = new Visit<R>();
-		visitFormComponentsPostOrderHelper(component, visitor, visit);
-		return visit.getResult();
-
-	}
-
-	/**
-	 * 
-	 * @param component
-	 * @param visitor
-	 * @return Object
-	 */
-	private static final <R> void visitFormComponentsPostOrderHelper(Component component,
-		final FormComponent.IVisitor<R> visitor, Visit<R> visit)
-	{
-		if (component instanceof MarkupContainer)
-		{
-			final MarkupContainer container = (MarkupContainer)component;
-			if (container.size() > 0)
+			public boolean visitChildren(Object object)
 			{
-				boolean visitChildren = true;
-				if (container instanceof IFormVisitorParticipant)
+				if (object instanceof IFormVisitorParticipant)
 				{
-					visitChildren = ((IFormVisitorParticipant)container).processChildren();
-				}
-				if (visitChildren)
-				{
-					Visit<R> childTraversal = new Visit<R>();
-					final Iterator<? extends Component> children = container.iterator();
-					while (children.hasNext())
-					{
-						final Component child = children.next();
-						visitFormComponentsPostOrderHelper(child, visitor, childTraversal);
-						if (childTraversal.isStopped())
-						{
-							visit.stop(childTraversal.getResult());
-							return;
-						}
-					}
+					return ((IFormVisitorParticipant)object).processChildren();
 				}
+				return true;
 			}
-		}
 
-		if (component instanceof FormComponent<?>)
-		{
-			final FormComponent<?> fc = (FormComponent<?>)component;
-			visitor.formComponent(fc, visit);
-		}
+			public boolean visitObject(Object object)
+			{
+				return (object instanceof FormComponent<?>);
+			}
+
+		});
+
 	}
 
 	/**
@@ -430,57 +383,32 @@ public abstract class FormComponent<T> e
 	 *            The visitor to call
 	 */
 	public static final <R> R visitComponentsPostOrder(Component component,
-		final Component.IVisitor<Component, R> visitor)
+		final org.apache.wicket.util.visit.IVisitor<Component, R> visitor)
 	{
 		if (visitor == null)
 		{
 			throw new IllegalArgumentException("Argument `visitor` cannot be null");
 		}
 
-		Visit<R> visit = new Visit<R>();
-		visitComponentsPostOrderHelper(component, visitor, visit);
-		return visit.getResult();
-	}
-
-	/**
-	 * 
-	 * @param component
-	 * @param visitor
-	 * @return Object
-	 */
-	private static final <R> void visitComponentsPostOrderHelper(Component component,
-		final Component.IVisitor<Component, R> visitor, Visit<R> visit)
-	{
-		if (component instanceof MarkupContainer)
+		return Visits.visitComponentsPostOrder(component, visitor, new IVisitFilter()
 		{
-			final MarkupContainer container = (MarkupContainer)component;
-			if (container.size() > 0)
+
+			public boolean visitObject(Object object)
 			{
-				boolean visitChildren = true;
-				if (container instanceof IFormVisitorParticipant)
-				{
-					visitChildren = ((IFormVisitorParticipant)container).processChildren();
-				}
-				if (visitChildren)
+				return true;
+			}
+
+			public boolean visitChildren(Object object)
+			{
+				if (object instanceof IFormVisitorParticipant)
 				{
-					Visit<R> childTraversal = new Visit<R>();
-					final Iterator<? extends Component> children = container.iterator();
-					while (children.hasNext())
-					{
-						final Component child = children.next();
-						visitComponentsPostOrderHelper(child, visitor, childTraversal);
-						if (childTraversal.isStopped())
-						{
-							visit.stop(childTraversal.getResult());
-							return;
-						}
-					}
+					return ((IFormVisitorParticipant)object).processChildren();
 				}
+				return true;
 			}
-		}
-		visitor.component(component, visit);
-	}
 
+		});
+	}
 
 	private transient T convertedInput;
 
@@ -970,13 +898,11 @@ public abstract class FormComponent<T> e
 	 */
 	public final boolean isValid()
 	{
-		class IsValidVisitor implements IVisitor<Boolean>
+		class IsValidVisitor implements IVisitor<FormComponent<?>, Boolean>
 		{
-			public void formComponent(final IFormVisitorParticipant formComponent,
-				final IVisit<Boolean> visit)
+			public void component(final FormComponent<?> formComponent, final IVisit<Boolean> visit)
 			{
-				final FormComponent<?> fc = (FormComponent<?>)formComponent;
-				if (fc.hasErrorMessage())
+				if (formComponent.hasErrorMessage())
 				{
 					visit.stop(Boolean.FALSE);
 				}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java Thu Mar 25 07:03:19 2010
@@ -16,12 +16,12 @@
  */
 package org.apache.wicket.markup.html.form;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.convert.ConversionException;
+import org.apache.wicket.util.visit.IVisit;
 
 /**
  * Component used to connect instances of Radio components into a group. Instances of Radio have to
@@ -102,7 +102,7 @@ public class RadioGroup<T> extends FormC
 
 			// retrieve the selected single radio choice component
 			Radio<T> choice = visitChildren(Radio.class,
-				new Component.IVisitor<Radio<T>, Radio<T>>()
+				new org.apache.wicket.util.visit.IVisitor<Radio<T>, Radio<T>>()
 				{
 
 					public void component(final Radio<T> radio, final IVisit<Radio<T>> visit)

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -491,10 +491,10 @@ public abstract class ListView<T> extend
 			{
 				// Remove all ListItems no longer required
 				final int maxIndex = firstIndex + size;
-				for (final Iterator<? extends ListItem<T>> iterator = iterator(); iterator.hasNext();)
+				for (final Iterator<Component> iterator = iterator(); iterator.hasNext();)
 				{
 					// Get next child component
-					final ListItem<?> child = iterator.next();
+					final ListItem<?> child = (ListItem<?>)iterator.next();
 					if (child != null)
 					{
 						final int index = child.getIndex();
@@ -628,11 +628,10 @@ public abstract class ListView<T> extend
 	 * 
 	 * @see org.apache.wicket.MarkupContainer#iterator()
 	 */
-	@SuppressWarnings( { "unchecked" })
 	@Override
-	public Iterator<? extends ListItem<T>> iterator()
+	public Iterator<Component> iterator()
 	{
-		return (Iterator<? extends ListItem<T>>)super.iterator();
+		return super.iterator();
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java Thu Mar 25 07:03:19 2010
@@ -44,6 +44,8 @@ import org.apache.wicket.request.IReques
 import org.apache.wicket.request.resource.JavascriptResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.string.AppendingStringBuffer;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 
 /**
@@ -253,7 +255,7 @@ public abstract class AbstractTree exten
 					public void visitItem(TreeItem item)
 					{
 						// write header contributions from the children of item
-						item.visitChildren(new Component.IVisitor<Component, Void>()
+						item.visitChildren(new IVisitor<Component, Void>()
 						{
 							public void component(final Component component,
 								final IVisit<Void> visit)

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategy.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategy.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategy.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/renderStrategy/ChildFirstHeaderRenderStrategy.java Thu Mar 25 07:03:19 2010
@@ -18,9 +18,9 @@ package org.apache.wicket.markup.renderS
 
 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;
+import org.apache.wicket.util.visit.IVisit;
 
 /**
  * THIS IS EXPERIMENTAL ONLY. YOU MUST NOT USE IT IN YOUR APPLICATION. SOME WICKET CORE COMPONENT
@@ -84,8 +84,7 @@ public class ChildFirstHeaderRenderStrat
 			new DeepChildFirstVisitor()
 			{
 				@Override
-				public void component(final Component component,
-					final IVisit<Component> visit)
+				public void component(final Component component, final IVisit<Component> visit)
 				{
 					component.renderHead(headerContainer);
 				}

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -18,10 +18,10 @@ package org.apache.wicket.markup.renderS
 
 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;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
+import org.apache.wicket.util.visit.Visit;
 
 /**
  * 
@@ -50,7 +50,7 @@ public abstract class DeepChildFirstVisi
 		{
 			final Visit<Component> visit = new Visit<Component>();
 			final Component[] lastComponent = new Component[1];
-			Object rtn = ((MarkupContainer)rootComponent).visitChildren(new Component.IVisitor<Component, Component>()
+			Object rtn = ((MarkupContainer)rootComponent).visitChildren(new IVisitor<Component, Component>()
 			{
 				public void component(final Component component, final IVisit<Component> visit)
 				{
@@ -167,7 +167,7 @@ public abstract class DeepChildFirstVisi
 	}
 
 	/**
-	 * @see org.apache.wicket.Component.IVisitor#component(org.apache.wicket.Component)
+	 * @see org.apache.wicket.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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -18,14 +18,15 @@ package org.apache.wicket.markup.renderS
 
 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;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * 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.
+ * {@link MarkupContainer#visitChildren(org.apache.wicket.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.
@@ -60,7 +61,7 @@ public class ParentFirstHeaderRenderStra
 
 		if (rootComponent instanceof MarkupContainer)
 		{
-			((MarkupContainer)rootComponent).visitChildren(new Component.IVisitor<Component, Void>()
+			((MarkupContainer)rootComponent).visitChildren(new IVisitor<Component, Void>()
 			{
 				public void component(final Component component, final IVisit<Void> visit)
 				{

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java?rev=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java Thu Mar 25 07:03:19 2010
@@ -1382,7 +1382,7 @@ public class MockHttpServletRequest impl
 // setRequestToComponent(form);
 //
 // final Map<String, Object> valuesApplied = new HashMap<String, Object>();
-// form.visitChildren(FormComponent.class, new Component.IVisitor<FormComponent<?>>()
+// form.visitChildren(FormComponent.class, new IVisitor<FormComponent<?>>()
 // {
 // public Object component(final FormComponent<?> component)
 // {

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -45,8 +45,6 @@ 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;
 import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
@@ -102,6 +100,8 @@ import org.apache.wicket.settings.IReque
 import org.apache.wicket.util.IProvider;
 import org.apache.wicket.util.lang.Classes;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -27,8 +27,6 @@ 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;
 import org.apache.wicket.markup.html.form.CheckBox;
@@ -47,6 +45,8 @@ import org.apache.wicket.protocol.http.m
 import org.apache.wicket.util.file.File;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * A helper class for testing validation and submission of <code>FormComponent</code>s.
@@ -80,7 +80,7 @@ public class FormTester
 			}
 
 			/**
-			 * @see org.apache.wicket.Component.IVisitor#component(org.apache.wicket.Component)
+			 * @see org.apache.wicket.IVisitor#component(org.apache.wicket.Component)
 			 */
 			public void component(final Component component, final IVisit<Component> visit)
 			{
@@ -377,8 +377,7 @@ public class FormTester
 		{
 			@SuppressWarnings("unchecked")
 			@Override
-			public void onFormComponent(final FormComponent<?> formComponent,
-				IVisit<Void> visit)
+			public void onFormComponent(final FormComponent<?> formComponent, IVisit<Void> visit)
 			{
 				// do nothing for invisible component
 				if (!formComponent.isVisibleInHierarchy())
@@ -421,8 +420,7 @@ public class FormTester
 					final Collection<?> checkGroupValues = (Collection<?>)formComponent.getDefaultModelObject();
 					formComponent.visitChildren(Check.class, new IVisitor<Component, Void>()
 					{
-						public void component(final Component component,
-							final IVisit<Void> visit)
+						public void component(final Component component, final IVisit<Void> visit)
 						{
 							if (checkGroupValues.contains(component.getDefaultModelObject()))
 							{

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -26,11 +26,11 @@ 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;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * A <code>WicketTester</code>-specific helper class.

Modified: 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=927290&r1=927289&r2=927290&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/VisitorTest.java Thu Mar 25 07:03:19 2010
@@ -18,10 +18,10 @@ 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;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * <code>
@@ -45,6 +45,7 @@ public class VisitorTest extends WicketT
 		final StringBuilder path = new StringBuilder();
 
 		TestContainer container = new TestContainer();
+
 		container.visitChildren(new IVisitor<Component, Void>()
 		{
 			public void component(Component component, IVisit<Void> visit)

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -17,6 +17,7 @@
 package org.apache.wicket.markup.html.form;
 
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.util.visit.IVisitor;
 
 
 /**
@@ -25,7 +26,7 @@ import org.apache.wicket.WicketTestCase;
  */
 public class FormTest extends WicketTestCase
 {
-	private FormComponent.IVisitor visitor;
+	private IVisitor visitor;
 
 	/**
 	 * Construct.

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=927290&r1=927289&r2=927290&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 Thu Mar 25 07:03:19 2010
@@ -27,11 +27,11 @@ 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;
 import org.apache.wicket.util.tester.ITestPageSource;
+import org.apache.wicket.util.visit.IVisit;
+import org.apache.wicket.util.visit.IVisitor;
 import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;