org.apache.click.extras.tree
Class CheckboxTree

java.lang.Object
  extended by org.apache.click.control.AbstractControl
      extended by org.apache.click.extras.tree.Tree
          extended by org.apache.click.extras.tree.CheckboxTree
All Implemented Interfaces:
Serializable, Control

public class CheckboxTree
extends Tree

Implementation of a tree control that provides checkboxes to enable selection of nodes. This implementation assumes the tree is wrapped inside a html form. Each time the form is submitted, all checkbox values are processed by this control.

Below is screenshot of how the tree will render in a browser.

Tree Example

An example tree usage is provided below (this code was used to produce the screenshot):
 public class PlainTreePage extends BorderPage {

     protected Submit submit;
     protected Submit cancel;
     protected Form form;

     public PlainTreePage() {
         form = new Form("form");
         addControl(form);

         Tree tree = createTree();
         form.add(tree);

         submit = new Submit("save", this, "onSubmitClick");
         cancel = new Submit("cancel", this, "onCancelClick");

         form.add(submit);
         form.add(cancel);
     }

     public Tree createTree() {
         Tree tree = new CheckboxTree("tree");

         // Build the tree model, by default the root node is not rendered.
         // This can be changed by calling setRootNodeDisplayed(true);
         TreeNode root = new TreeNode("c:");
         TreeNode dev = new TreeNode("dev", "1", root);
         new TreeNode("java.pdf", "2", dev);
         new TreeNode("ruby.pdf", "3", dev);

         TreeNode programFiles = new TreeNode("program files", "4", root);
         TreeNode adobe = new TreeNode("Adobe", "5", programFiles);
         // This node is a directory not a file, so setChildrenSupported to true.
         adobe.setChildrenSupported(true);

         TreeNode download = new TreeNode("downloads", "6", root);
         TreeNode web = new TreeNode("web", "7", download);
         new TreeNode("html.pdf", "8", web);
         new TreeNode("css.html", "9", web);

         TreeNode databases = new TreeNode("databases", "10", download);
         new TreeNode("mysql.html", "11", databases);
         new TreeNode("oracle.pdf", "12", databases);
         new TreeNode("postgres", "13", databases);

         tree.setRootNode(root);
         return tree;
     }
 } 

CSS and JavaScript resources

In addition to Tree's resources, the CheckboxTree control makes use of the following resources (which Click automatically deploys to the application directory, /click/tree): To import these Tree files simply reference the variables $headElements and $jsElements in the page template.

See Also:
Tree, Serialized Form

Nested Class Summary
protected  class CheckboxTree.BaseCheckboxJavascriptRenderer
          Please note this class is only meant for developers of this control, not users.
protected  class CheckboxTree.CheckboxCookieHandler
          Please note this class is only meant for developers of this control, not users.
protected  class CheckboxTree.CheckboxCookieJavascriptRenderer
          Please note this class is only meant for developers of this control, not users.
protected static interface CheckboxTree.CheckboxJavascriptRenderer
          Please note this interface is only meant for developers of this control, not users.
protected  class CheckboxTree.CheckboxSessionHandler
          Please note this class is only meant for developers of this control, not users.
protected  class CheckboxTree.CheckboxSessionJavascriptRenderer
          Please note this class is only meant for developers of this control, not users.
 
Nested classes/interfaces inherited from class org.apache.click.extras.tree.Tree
Tree.AbstractJavascriptRenderer, Tree.Callback, Tree.CookieHandler, Tree.CookieRenderer, Tree.JavascriptHandler, Tree.JavascriptRenderer, Tree.SessionHandler, Tree.SessionRenderer
 
Field Summary
 
Fields inherited from class org.apache.click.extras.tree.Tree
COLLAPSE_ICON, EXPAND_ICON, EXPAND_TREE_NODE_PARAM, expandLink, expandOrCollapseNodeIds, JAVASCRIPT_COOKIE_POLICY, JAVASCRIPT_SESSION_POLICY, javascriptHandler, LEAF_ICON, rootNode, SELECT_TREE_NODE_PARAM, selectLink, selectOrDeselectNodeIds
 
Fields inherited from class org.apache.click.control.AbstractControl
actionListener, attributes, behaviors, headElements, listener, listenerMethod, messages, name, parent, styles
 
Fields inherited from interface org.apache.click.Control
CONTROL_MESSAGES
 
Constructor Summary
CheckboxTree()
          Create a Tree with no name defined.
CheckboxTree(String name)
          Create an Tree control for the given name.
 
Method Summary
 void bindRequestValue()
          This method binds any expand/collapse changes from the request parameters.
 void bindSelectOrDeselectValues()
          Binds the users request of selected nodes to the tree's nodes.
protected  Decorator createDecorator()
          Creates and returns a custom Decorator that will render a Checkbox for each tree node.
protected  Tree.JavascriptHandler createJavascriptHandler(int javascriptPolicy)
          Creates and return a new JavascriptHandler for the specified tree node.
 List<Element> getHeadElements()
          Return the CheckboxTree HTML HEAD elements for the following resource: click/tree/checkbox-tree.js Additionally all the Tree import statements are also returned.
protected  String getInputType()
          Return the input type of the CheckboxTree, default value is "checkbox".
 boolean isSelectChildNodes()
          Returns true if child nodes will also be selected/deselected.
protected  void onFormSubmission()
          This method is invoked when the CheckboxTree parent Form is submitted.
 void onInit()
          Create and set the Tree's decorator that will render a Checkbox for each tree node.
protected  void renderCheckbox(HtmlStringBuffer buffer, TreeNode treeNode)
          Renders a Checkbox for the specified treeNode to the buffer.
 void setSelectChildNodes(boolean selectChildNodes)
          Sets whether child nodes will also be selected/deselected.
 
Methods inherited from class org.apache.click.extras.tree.Tree
addListener, bindExpandOrCollapseValues, cleanupSession, collapse, collapse, collapseAll, deselect, deselect, deselectAll, expand, expand, expandAll, expandOrCollapse, find, find, fireNodeCollapsed, fireNodeDeselected, fireNodeExpanded, fireNodeSelected, getControlSizeEst, getDecorator, getExpandClass, getExpandedNodes, getExpandLink, getHeight, getHref, getIconClass, getRequestValue, getRequestValues, getRootNode, getSelectedNodes, getSelectLink, getWidth, hasRootNode, isExpandedParent, isJavascriptEnabled, isNotifyListeners, isRootNodeDisplayed, iterator, iterator, onDestroy, onProcess, processNodes, processNodes, removeListener, render, renderExpandAndCollapseAction, renderIcon, renderTree, renderTreeNode, renderTreeNodeEnd, renderTreeNodeStart, renderValue, select, select, selectAll, selectOrDeselect, setActionListener, setDecorator, setExpandState, setExpandState, setExpandState, setHeight, setJavascriptEnabled, setJavascriptEnabled, setListener, setName, setNotifyListeners, setRootNode, setRootNodeDisplayed, setSelectState, setSelectState, setSelectState, setWidth, shouldRenderChildren, toString
 
Methods inherited from class org.apache.click.control.AbstractControl
addBehavior, addStyleClass, appendAttributes, dispatchActionEvent, getActionListener, getAttribute, getAttributes, getBehaviors, getContext, getHtmlImports, getId, getMessage, getMessage, getMessages, getName, getPage, getParent, getStyle, getStyles, getTag, hasAttribute, hasAttributes, hasBehaviors, hasStyles, isAjaxTarget, onDeploy, onRender, removeBehavior, removeStyleClass, renderTagBegin, renderTagEnd, setAttribute, setId, setParent, setStyle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CheckboxTree

public CheckboxTree(String name)
Create an Tree control for the given name.

Parameters:
name - the tree name
Throws:
IllegalArgumentException - if the name is null

CheckboxTree

public CheckboxTree()
Create a Tree with no name defined.

Please note the control's name must be defined before it is valid.

Method Detail

onInit

public void onInit()
Create and set the Tree's decorator that will render a Checkbox for each tree node.

Specified by:
onInit in interface Control
Overrides:
onInit in class AbstractControl
See Also:
createDecorator(), Control.onInit()

isSelectChildNodes

public boolean isSelectChildNodes()
Returns true if child nodes will also be selected/deselected.

Returns:
true if child nodes will be selected, false otherwise

setSelectChildNodes

public void setSelectChildNodes(boolean selectChildNodes)
Sets whether child nodes will also be selected/deselected.

Please note: this feature only works if JavaScript support is enabled.

Parameters:
selectChildNodes - determines if child nodes will be selected/deselected

getHeadElements

public List<Element> getHeadElements()
Return the CheckboxTree HTML HEAD elements for the following resource: Additionally all the Tree import statements are also returned.

Specified by:
getHeadElements in interface Control
Overrides:
getHeadElements in class Tree
Returns:
the HTML HEAD elements for the control
See Also:
Control.getHeadElements()

bindSelectOrDeselectValues

public void bindSelectOrDeselectValues()
Binds the users request of selected nodes to the tree's nodes.

This method is automatically invoked when the CheckboxTree's parent form is submitted.

See onFormSubmission() for more details.

If you do not want CheckboxTree to automatically invoke this method, you can override onFormSubmission() to do nothing by default.

Then you must manually invoke this method when the form is submitted. For example:

 public void onInit() {
     CheckboxTree tree = new CheckboxTree("tree") {
         public void onFormSubmission() {
             // Do nothing
         }
     }
     Form form = createForm();
     form.add(tree);
     Submit submit = new Submit("save");
     form.add(submit);
     submit.setActionListener(new ActionListener() {
         public boolean onAction(Control source) {
             tree.bindSelectOrDeselectValues();
             return true;
         }
     });
     addControl(form);
 } 

Overrides:
bindSelectOrDeselectValues in class Tree

bindRequestValue

public void bindRequestValue()
This method binds any expand/collapse changes from the request parameters.

In other words the node id's of expanded and collapsed nodes are retrieved from the request.

Overrides:
bindRequestValue in class Tree
See Also:
Tree.bindExpandOrCollapseValues()

onFormSubmission

protected void onFormSubmission()
This method is invoked when the CheckboxTree parent Form is submitted.

This method delegates to bindSelectOrDeselectValues() in order to update the selected and deselected nodes.


createDecorator

protected Decorator createDecorator()
Creates and returns a custom Decorator that will render a Checkbox for each tree node.

Returns:
a decorator that renders a Checkbox for each tree node

renderCheckbox

protected void renderCheckbox(HtmlStringBuffer buffer,
                              TreeNode treeNode)
Renders a Checkbox for the specified treeNode to the buffer.

This method invokes getInputType() which returns "checkbox" by default, but allows subclasses to change the input type if necessary.

Parameters:
buffer - string buffer containing the markup
treeNode - treeNode to render

getInputType

protected String getInputType()
Return the input type of the CheckboxTree, default value is "checkbox".

This method allows subclasses to change the input type if necessary. For example in order to render Radio buttons instead of Checkboxes, override this method and return the input type "radio".

Returns:
the input type of the CheckboxTree

createJavascriptHandler

protected Tree.JavascriptHandler createJavascriptHandler(int javascriptPolicy)
Creates and return a new JavascriptHandler for the specified tree node. This implementation overrides the super class, to return its own custom JavascriptHandlers.

Overrides:
createJavascriptHandler in class Tree
Parameters:
javascriptPolicy - the current javascript policy
Returns:
newly created JavascriptHandler