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 :

http://dive4elements.wald.intevation.org