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();
}
});