package org.cloudgraph.web.model.tree; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.cloudgraph.web.model.OperationName; import org.primefaces.model.TreeNode; @SuppressWarnings({ "serial", "unchecked" }) public class TreeNodeModel implements TreeNode { private static Log log = LogFactory.getLog(TreeNodeModel.class); private Object id; private String name; private String label; private String tooltip; private SortedMap<Object, TreeNode> nodes; private TreeNode parent; private String type = DefaultTreeNodeType.node.toString(); private boolean enabled = true; private boolean selected = false; private String action; private OperationName operation; private Object userData; @SuppressWarnings("unused") private TreeNodeModel(Comparator comparator) { if (comparator != null) nodes = new TreeMap<Object, TreeNode>(comparator); else nodes = new TreeMap<Object, TreeNode>(); } public TreeNodeModel(Object id, Comparator comparator) { this(comparator); this.id = String.valueOf(id); } public TreeNodeModel(Object id) { this(null); this.id = String.valueOf(id); } public Map<Object, TreeNode> getNodes() { return this.nodes; } public void addNode(TreeNodeModel node) { addChild(node.getId(), node); node.setParent(this); } public void addChild(Object id, TreeNode child) { getNodes().put(String.valueOf(id), child); } public TreeNode getChild(Object id) { return (TreeNode) getNodes().get(String.valueOf(id)); } //public Iterator getChildren() { // return getNodes().entrySet().iterator(); //} public Object getData() { return this; // RichFaces rendering seems to desperately need this } public TreeNode getParent() { return parent; } public boolean isLeaf() { return getNodes().isEmpty(); } public void removeChild(Object id) { getNodes().remove(String.valueOf(id)); } public void setData(Object data) { // RichFaces rendering seems to desperately need this } public void setParent(TreeNode parent) { this.parent = parent; } public Object getId() { return id; } public Object getUserData() { return this.userData; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean getEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getTooltip() { return tooltip; } public void setTooltip(String tooltip) { this.tooltip = tooltip; } public void setUserData(Object userData) { this.userData = userData; } public String onAction() { this.selected = true; if (log.isDebugEnabled()) log.debug("onAction: " + String.valueOf(this.action)); return null; //this.action; // don't return the action lest we cause a refresh } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } public void clearSelection() { this.selected = false; //Iterator<TreeNode> iter = this.getChildren(); //while (iter.hasNext()) // ((TreeNodeModel)iter.next()).clearSelection(); } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public OperationName getOperation() { return operation; } public void setOperation(OperationName operation) { this.operation = operation; } @Override public boolean isExpanded() { // TODO Auto-generated method stub return false; } @Override public void setExpanded(boolean expanded) { // TODO Auto-generated method stub } @Override public int getChildCount() { // TODO Auto-generated method stub return 0; } @Override public boolean isSelectable() { // TODO Auto-generated method stub return false; } @Override public void setSelectable(boolean selectable) { // TODO Auto-generated method stub } @Override public List<TreeNode> getChildren() { // TODO Auto-generated method stub return null; } }