com.tonbeller.wcf.tree
Class OptimizingTreeModelDecorator

java.lang.Object
  extended bycom.tonbeller.wcf.tree.TreeModelDecorator
      extended bycom.tonbeller.wcf.tree.OptimizingTreeModelDecorator
All Implemented Interfaces:
DecoratedTreeModel, TreeModel

public class OptimizingTreeModelDecorator
extends TreeModelDecorator

Hides branches that do not contain significant nodes.

Significance is defined by a node filter. If the filter accepts a node, its significant, else its not.

Significance is transitive. A node, that is not accepted by the filter itself, is considered significant if it has at least one descendant that is accepted by the filter.

Example usecase: hide empty directories.

Warning: This class reads the whole tree model to find "significant" nodes.

Author:
av

Field Summary
 
Fields inherited from interface com.tonbeller.wcf.tree.TreeModel
EMPTY_MODEL
 
Constructor Summary
OptimizingTreeModelDecorator(NodeFilter filter, TreeModel decoree)
          creates a reduced view on a tree model that uses a HashMap for implementation
OptimizingTreeModelDecorator(NodeFilter filter, TreeModel decoree, java.util.Comparator nodeComparator)
          creates a new optimizing tree model that uses a TreeMap for implementation
 
Method Summary
 java.lang.Object[] getChildren(java.lang.Object node)
           
 java.lang.Object getParent(java.lang.Object node)
           
 java.lang.Object[] getRoots()
          returns the root members of the tree.
 boolean hasChildren(java.lang.Object node)
           
 boolean isOptimizeLeafs()
           
 boolean isOptimizeRoot()
           
 void setOptimizeLeafs(boolean b)
          if true, only significant leafs will be visible.
 void setOptimizeRoot(boolean b)
          if true, insignificant parents are not shown.
 
Methods inherited from class com.tonbeller.wcf.tree.TreeModelDecorator
addTreeModelChangeListener, fireModelChanged, getDecoree, removeTreeModelChangeListener, setDecoree
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OptimizingTreeModelDecorator

public OptimizingTreeModelDecorator(NodeFilter filter,
                                    TreeModel decoree)
creates a reduced view on a tree model that uses a HashMap for implementation

Parameters:
filter - accepted nodes are considered "significant"

OptimizingTreeModelDecorator

public OptimizingTreeModelDecorator(NodeFilter filter,
                                    TreeModel decoree,
                                    java.util.Comparator nodeComparator)
creates a new optimizing tree model that uses a TreeMap for implementation

Parameters:
filter - accepted nodes are considered "significant"
Method Detail

getRoots

public java.lang.Object[] getRoots()
Description copied from interface: TreeModel
returns the root members of the tree.

Specified by:
getRoots in interface TreeModel
Overrides:
getRoots in class TreeModelDecorator

hasChildren

public boolean hasChildren(java.lang.Object node)
Specified by:
hasChildren in interface TreeModel
Overrides:
hasChildren in class TreeModelDecorator

getChildren

public java.lang.Object[] getChildren(java.lang.Object node)
Specified by:
getChildren in interface TreeModel
Overrides:
getChildren in class TreeModelDecorator

getParent

public java.lang.Object getParent(java.lang.Object node)
Specified by:
getParent in interface TreeModel
Overrides:
getParent in class TreeModelDecorator

setOptimizeLeafs

public void setOptimizeLeafs(boolean b)
if true, only significant leafs will be visible.


isOptimizeLeafs

public boolean isOptimizeLeafs()

setOptimizeRoot

public void setOptimizeRoot(boolean b)
if true, insignificant parents are not shown.


isOptimizeRoot

public boolean isOptimizeRoot()