001    package biz.hammurapi.antlr;
002    
003    import javax.swing.table.DefaultTableModel;
004    import javax.swing.table.TableModel;
005    import javax.swing.tree.DefaultMutableTreeNode;
006    import javax.swing.tree.MutableTreeNode;
007    
008    import biz.hammurapi.swing.Visualizable;
009    
010    public class AstVisualizable implements Visualizable {
011            
012            private AST ast;
013            private String[] tokenNames;
014    
015            public AstVisualizable(AST ast, String[] names) {
016                    super();
017                    this.ast = ast;
018                    tokenNames = names;
019            }
020    
021            public MutableTreeNode toTree(final String title) {
022                    DefaultMutableTreeNode ret=new DefaultMutableTreeNode(this) {
023                            public String toString() {
024                                    return title+" ["+tokenNames[ast.getType()]+"] "+ast.getLine()+":"+ast.getColumn()+" "+ast.getText();
025                            }
026                    };
027                    
028                    for (AST child=(AST) ast.getFirstChild(); child!=null; child=(AST) child.getNextSibling()) {
029                            ret.add(new AstVisualizable(child, tokenNames).toTree(""));
030                    }
031                    
032                    return ret;
033            }
034    
035            public TableModel toTable() {
036                    DefaultTableModel ret=new DefaultTableModel(4, 2);
037                    
038                    ret.setColumnIdentifiers(new String[] {"Property", "Value"});
039                    setRow(ret, 0, "Type", tokenNames[ast.getType()]);
040                    setRow(ret, 1, "Text", ast.getText());
041                    setRow(ret, 2, "Line", String.valueOf(ast.getLine()));
042                    setRow(ret, 3, "Column", String.valueOf(ast.getColumn()));
043                    
044                    return ret;
045            }
046    
047            private void setRow(DefaultTableModel ret, int row, String name, Object value) {
048                    ret.setValueAt(name, row, 0);
049                    ret.setValueAt(value, row, 1);
050            }               
051            
052    }