org.araneaframework.uilib.tree.TreeWidget allows representation of hierarchical data in a manner that has become
traditional in GUIs, as an expandable tree. TreeWidget represents trees' root node, which is special
in that it is not really rendered on-screen but serves as point where child nodes are attached. Child nodes of TreeWidget
are either attached by the programmer or acquired from associated TreeDataProvider.
The TreeWidget supports expanding and collapsing of all those nodes.
TreeDataProvider is a simple interface with ability to return the data under given tree node.
public interface TreeDataProvider extends Serializable {
/**
* Returns a list of child nodes for specified parent node.
*/
List<TreeNodeWidget> getChildren(TreeNodeContext parent);
/**
* Returns if the specified tree node has any children.
*/
boolean hasChildren(TreeNodeContext parent);
}
As is apparent from the definition of TreeDataProvider, descendants of the TreeWidget
that are to be presented in a tree, must be of type TreeNodeWidget. TreeNodeWidget
is the superclass of TreeWidget that also has child nodes and will be rendered too. Node rendering is done with
display widget that is passed to TreeNodeWidget in its constructor.
public TreeNodeWidget(Widget display);
public TreeNodeWidget(Widget display, List nodes);
public TreeNodeWidget(Widget display, List nodes, boolean collapsed);
Display widget can be any widget that can render itself, it is rendered in the place of tree node instead of
TreeNodeWidget, which is just a data holder. Very often, display widget is BaseUIWidget
which renders itself according to some JSP template.
TreeNodeWidget does not accept independent TreeDataProvider, its children are acquired
from TreeWidget's TreeDataProvider.
TreeWidget enriches the Environment with TreeContext.
TreeNodeWidget enriches the Environment of its display widget
with TreeNodeContext. Through these contexts display widgets have access to
owning tree node and root of the tree.