/** * Recursively invoked traversal method. This method visits the element * first, then its children. * @param visitor visitor to invoke * @param includeEmpty if <code>true</code> invoke call back on every * element regardless, whether the associated object is empty * or not; otherwise call back on non-empty children only */ public void traverse(ElementVisitor visitor, boolean includeEmpty) { if (includeEmpty || obj != null) { visitor.elementVisited(this); } if (children != null) { Iterator iter = children.values().iterator(); while (iter.hasNext()) { ArrayList list = (ArrayList) iter.next(); for (int i = 0; i < list.size(); i++) { Element element = (Element) list.get(i); if (element != null) { element.traverse(visitor, includeEmpty); } } } } }