Mercurial > dive4elements > river
diff gwt-client/src/main/java/org/dive4elements/river/client/shared/model/DataCageTree.java @ 7465:4b29bb2c785f
Datacage: Remove tree branches vom datacage tree on client side which do not contain loadable data.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Wed, 30 Oct 2013 11:58:57 +0100 |
parents | ea9eef426962 |
children | b188255f08b3 |
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/shared/model/DataCageTree.java Wed Oct 30 11:57:04 2013 +0100 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/shared/model/DataCageTree.java Wed Oct 30 11:58:57 2013 +0100 @@ -9,9 +9,15 @@ package org.dive4elements.river.client.shared.model; import java.io.Serializable; +import java.util.List; public class DataCageTree implements Serializable { + + public interface Visitor { + boolean accept(DataCageNode node); + } // interface + protected DataCageNode root; public DataCageTree() { @@ -28,5 +34,28 @@ public DataCageNode getRoot() { return root; } + + + protected boolean recursivePrune(DataCageNode node, Visitor visitor) { + if (!node.hasChildren()) { + return visitor.accept(node); + } + + List<DataCageNode> children = node.getChildren(); + + for (int i = children.size()-1; i >= 0; --i) { + if (!recursivePrune(children.get(i), visitor)) { + children.remove(i); + } + } + + return !children.isEmpty(); + } + + public boolean prune(Visitor visitor) { + return root == null || !root.hasChildren() + ? true + : recursivePrune(root, visitor); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :