001 package net.sourceforge.pmd.util.viewer.model;
002
003
004 import java.util.ArrayList;
005 import java.util.List;
006
007 import javax.swing.event.TreeModelEvent;
008 import javax.swing.event.TreeModelListener;
009 import javax.swing.tree.TreeModel;
010 import javax.swing.tree.TreePath;
011
012 import net.sourceforge.pmd.lang.ast.Node;
013
014
015 /**
016 * Model for the AST Panel Tree component
017 *
018 * @author Boris Gruschko ( boris at gruschko.org )
019 * @version $Id: ASTModel.java 6260 2008-06-24 06:07:28Z rgustav $
020 */
021
022 public class ASTModel implements TreeModel {
023
024 private Node root;
025 private List<TreeModelListener> listeners = new ArrayList<TreeModelListener>(1);
026
027 /**
028 * creates the tree model
029 *
030 * @param root tree's root
031 */
032 public ASTModel(Node root) {
033 this.root = root;
034 }
035
036 /**
037 * @see javax.swing.tree.TreeModel
038 */
039 public Object getChild(Object parent, int index) {
040 return ((Node) parent).jjtGetChild(index);
041 }
042
043 /**
044 * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object)
045 */
046 public int getChildCount(Object parent) {
047 return ((Node) parent).jjtGetNumChildren();
048 }
049
050 /**
051 * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object,java.lang.Object)
052 */
053 public int getIndexOfChild(Object parent, Object child) {
054 Node node = (Node) parent;
055 for (int i = 0; i < node.jjtGetNumChildren(); i++) {
056 if (node.jjtGetChild(i).equals(child)) {
057 return i;
058 }
059 }
060 return -1;
061 }
062
063 /**
064 * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object)
065 */
066 public boolean isLeaf(Object node) {
067 return ((Node) node).jjtGetNumChildren() == 0;
068 }
069
070 /**
071 * @see javax.swing.tree.TreeModel#getRoot()
072 */
073 public Object getRoot() {
074 return root;
075 }
076
077 /**
078 * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath,java.lang.Object)
079 */
080 public void valueForPathChanged(TreePath path, Object newValue) {
081 throw new UnsupportedOperationException();
082 }
083
084 /**
085 * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener)
086 */
087 public void addTreeModelListener(TreeModelListener l) {
088 listeners.add(l);
089 }
090
091
092 /**
093 * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener)
094 */
095 public void removeTreeModelListener(TreeModelListener l) {
096 listeners.remove(l);
097 }
098
099
100 protected void fireTreeModelEvent(TreeModelEvent e) {
101 for (TreeModelListener listener : listeners) {
102 listener.treeNodesChanged(e);
103 }
104 }
105
106 }
|