You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jd...@apache.org on 2011/07/08 23:02:23 UTC
svn commit: r1144511 - in /wicket/trunk/wicket-core/src:
main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java
test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java
Author: jdonnerstag
Date: Fri Jul 8 21:02:23 2011
New Revision: 1144511
URL: http://svn.apache.org/viewvc?rev=1144511&view=rev
Log:
fixed childFirst issue in "visitChildren and friends require inner classes. Replace with iterators"
Issue: WICKET-3789
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java?rev=1144511&r1=1144510&r2=1144511&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/iterator/AbstractHierarchyIterator.java Fri Jul 8 21:02:23 2011
@@ -80,6 +80,16 @@ public abstract class AbstractHierarchyI
/**
*
+ * @param childFirst
+ * If true, than children are visited before their parent is.
+ */
+ public final void setChildFirst(final boolean childFirst)
+ {
+ this.childFirst = childFirst;
+ }
+
+ /**
+ *
* @param node
* @return True, if node is a container and has at least one child.
*/
@@ -121,7 +131,7 @@ public abstract class AbstractHierarchyI
}
// Do we need to traverse into the next level?
- if (traverse)
+ if (!childFirst && traverse)
{
// Try to find the next element
if (moveDown(data.lastNode) == false)
@@ -209,9 +219,6 @@ public abstract class AbstractHierarchyI
// No more elements
return false;
}
-
- // We did traverse the children already
- traverse = false;
}
// The user interested in the node?
@@ -274,7 +281,7 @@ public abstract class AbstractHierarchyI
data = stack.pop();
// If we are on childFirst, than it's now time to handle the parent
- if (traverse)
+ if (childFirst)
{
hasNextWasLast = true;
if (onFilter(data.lastNode) == true)
Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java?rev=1144511&r1=1144510&r2=1144511&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/iterator/AbstractHierarchyIteratorTest.java Fri Jul 8 21:02:23 2011
@@ -294,6 +294,40 @@ public class AbstractHierarchyIteratorTe
}
/** */
+ @Test
+ public void childFirst()
+ {
+ Page page = new MyPage();
+ WebComponent a;
+ page.add(a = new WebComponent("a"));
+ WebMarkupContainer b;
+ page.add(b = new WebMarkupContainer("b"));
+ WebMarkupContainer b1;
+ b.add(b1 = new WebMarkupContainer("b1"));
+ WebMarkupContainer b2;
+ b.add(b2 = new WebMarkupContainer("b2"));
+ WebMarkupContainer b12;
+ b1.add(b12 = new WebMarkupContainer("b12"));
+ WebMarkupContainer b121;
+ b12.add(b121 = new WebMarkupContainer("b121"));
+
+ // Filter leaf components only
+ int count = 0;
+ String buf = "";
+ ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
+ iter.setChildFirst(true);
+ while (iter.hasNext())
+ {
+ Component component = iter.next();
+ count += 1;
+ buf += component.getId();
+ }
+
+ assertEquals(6, count);
+ assertEquals("ab121b12b1b2b", buf);
+ }
+
+ /** */
public static class MyPage extends WebPage
{
private static final long serialVersionUID = 1L;