Details

Type: Improvement

Status:Resolved

Priority: Major

Resolution:
Won't Fix

Affects Version/s:
None

Fix Version/s:
None

Component/s:
None

Labels:

None

Description

I never really liked that we need inner classes (implementations of IVisitor) for traversing the component hierarchy. When needed, it comes easily to me that I need MarkupContainer.visitChildren(), but I always need to look up how to use it and friends. Debugging is also more complicated than it has to (breakpoint inside the visit function: either another breakpoint behind visitChildren or "press the continue-until-end-of-method" key several times until you are back). For these reasons I gave Iterators another try. I've attached a patch for others to review and provide feedback. I've also added test cases (ComponentIteratorTest) and I changed quite some visitChildren occassions in core. Maven compiles and successfully executes all tests.

I put the new classes in org.apache.wicket.util.iterator
ComponentIterator - An enhanced iterator with filters. Also supports chaining iterators. Builder API for class filters, isvisible filters, isenabled filters etc. Supports Java for each.
ComponentHierarchyIterator - enhances ComponentIterator to provide hierarchy traversal. Adds traversal filters to separate traversal control from what next() returns. Same Builder API. Supports Java for each.
IteratorFilter - Simple abstract class to implement the filter conditions. The Builder API makes use of it to add filters to the iterator.

Some examples:
ComponentHierarchyIterator iter = new ComponentHierarchyIterator(page);
while (iter.hasNext())