ASTModel.java
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 ((Nodeparent).jjtGetChild(index);
041     }
042 
043     /**
044      @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object)
045      */
046     public int getChildCount(Object parent) {
047         return ((Nodeparent).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 = (Nodeparent;
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 ((Nodenode).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 }