teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5993: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5993: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.shared.model; sascha@278: sascha@278: import java.io.Serializable; teichmann@7465: import java.util.List; sascha@278: sascha@278: public class DataCageTree implements Serializable sascha@278: { teichmann@7465: teichmann@7465: public interface Visitor { teichmann@7465: boolean accept(DataCageNode node); teichmann@7465: } // interface teichmann@7465: sascha@278: protected DataCageNode root; sascha@278: sascha@278: public DataCageTree() { sascha@278: } sascha@278: sascha@278: public DataCageTree(DataCageNode root) { sascha@278: this.root = root; sascha@278: } sascha@278: sascha@278: public void setRoot(DataCageNode root) { sascha@278: this.root = root; sascha@278: } sascha@278: sascha@278: public DataCageNode getRoot() { sascha@278: return root; sascha@278: } teichmann@7465: teichmann@7465: teichmann@7465: protected boolean recursivePrune(DataCageNode node, Visitor visitor) { teichmann@7465: if (!node.hasChildren()) { teichmann@7465: return visitor.accept(node); teichmann@7465: } teichmann@7465: teichmann@7465: List children = node.getChildren(); teichmann@7465: teichmann@7465: for (int i = children.size()-1; i >= 0; --i) { teichmann@7465: if (!recursivePrune(children.get(i), visitor)) { teichmann@7465: children.remove(i); teichmann@7465: } teichmann@7465: } teichmann@7465: teichmann@7465: return !children.isEmpty(); teichmann@7465: } teichmann@7465: teichmann@7465: public boolean prune(Visitor visitor) { teichmann@7465: return root == null || !root.hasChildren() teichmann@7465: ? true teichmann@7465: : recursivePrune(root, visitor); teichmann@7465: } sascha@278: } sascha@278: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :