/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.util.viewer.model;
import java.util.ArrayList;
import java.util.List;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import net.sourceforge.pmd.lang.ast.Node;
/**
* Model for the AST Panel Tree component
*
* @author Boris Gruschko ( boris at gruschko.org )
* @version $Id$
*/
public class ASTModel implements TreeModel {
private Node root;
private List<TreeModelListener> listeners = new ArrayList<>(1);
/**
* creates the tree model
*
* @param root
* tree's root
*/
public ASTModel(Node root) {
this.root = root;
}
/**
* @see javax.swing.tree.TreeModel
*/
@Override
public Object getChild(Object parent, int index) {
return ((Node) parent).jjtGetChild(index);
}
/**
* @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object)
*/
@Override
public int getChildCount(Object parent) {
return ((Node) parent).jjtGetNumChildren();
}
/**
* @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object,java.lang.Object)
*/
@Override
public int getIndexOfChild(Object parent, Object child) {
Node node = (Node) parent;
for (int i = 0; i < node.jjtGetNumChildren(); i++) {
if (node.jjtGetChild(i).equals(child)) {
return i;
}
}
return -1;
}
/**
* @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object)
*/
@Override
public boolean isLeaf(Object node) {
return ((Node) node).jjtGetNumChildren() == 0;
}
/**
* @see javax.swing.tree.TreeModel#getRoot()
*/
@Override
public Object getRoot() {
return root;
}
/**
* @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath,java.lang.Object)
*/
@Override
public void valueForPathChanged(TreePath path, Object newValue) {
throw new UnsupportedOperationException();
}
/**
* @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener)
*/
@Override
public void addTreeModelListener(TreeModelListener l) {
listeners.add(l);
}
/**
* @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener)
*/
@Override
public void removeTreeModelListener(TreeModelListener l) {
listeners.remove(l);
}
protected void fireTreeModelEvent(TreeModelEvent e) {
for (TreeModelListener listener : listeners) {
listener.treeNodesChanged(e);
}
}
}