package husacct.define.presentation.moduletree; import husacct.define.task.components.AbstractCombinedComponent; import java.util.ArrayList; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; public class CombinedModuleTreeModel implements TreeModel { AbstractCombinedComponent root; public CombinedModuleTreeModel(AbstractCombinedComponent root) { this.root = root; } /** * #TODO TreeModel never fires any events (since it is not editable) */ @Override public void addTreeModelListener(TreeModelListener l) { } private int checkChildrenForIndex( ArrayList<AbstractCombinedComponent> children, Object child) { if (children != null) { for (int i = 0; i < children.size(); i++) { if (children.get(i) == child) { return i; } } } return -1; } @Override public Object getChild(Object nodeObject, int index) { if (nodeObject instanceof AbstractCombinedComponent) { AbstractCombinedComponent node = (AbstractCombinedComponent) nodeObject; ArrayList<AbstractCombinedComponent> children = node.getChildren(); return children.get(index); } return null; } @Override public int getChildCount(Object nodeObject) { if (nodeObject instanceof AbstractCombinedComponent) { AbstractCombinedComponent node = (AbstractCombinedComponent) nodeObject; ArrayList<AbstractCombinedComponent> children = node.getChildren(); return children.size(); } return 0; } @Override public int getIndexOfChild(Object nodeObject, Object child) { if (nodeObject instanceof AbstractCombinedComponent) { AbstractCombinedComponent node = (AbstractCombinedComponent) nodeObject; ArrayList<AbstractCombinedComponent> children = node.getChildren(); return checkChildrenForIndex(children, child); } return -1; } @Override public Object getRoot() { return root; } /** * Is this node a leaf? (Leaf nodes are displayed differently by JTree) Any * node that isn't a container is a leaf, since they cannot have children. * We also define containers with no children as leaves. */ @Override public boolean isLeaf(Object nodeObject) { if (nodeObject instanceof AbstractCombinedComponent) { AbstractCombinedComponent node = (AbstractCombinedComponent) nodeObject; ArrayList<AbstractCombinedComponent> children = node.getChildren(); return children.size() == 0; } else { return true; } } /** * #TODO TreeModel never fires any events (since it is not editable) */ @Override public void removeTreeModelListener(TreeModelListener l) { } /** * #TODO TreeModel never fires any events (since it is not editable) */ @Override public void valueForPathChanged(TreePath path, Object newvalue) { } }