001    package ui.model;
002    
003    import ui.recognizer.JSpectra;
004    
005    import java.io.IOException;
006    import java.io.File;
007    import java.util.Date;
008    import java.util.Stack;
009    import javax.swing.SwingUtilities;
010    import javax.swing.tree.TreePath;
011    
012    /**
013     * A kind of TreeTableModel representing an XML database.<p>
014     *
015     * @version 1.0 2003-06-26
016     * @author John Talbot
017     */
018    public class DatabaseModel extends AbstractTreeTableModel {
019    
020        // Names and Types of the columns.
021        static protected String[] cNames = {"Database", "Resolution", "Spectra"};
022        static protected Class[]  cTypes = { TreeTableModel.class, Double.class, String.class};
023    
024        /**
025         * Creates a DatabaseModel with root <code>rootPath</code>.
026         */
027        public DatabaseModel(String rootPath) {
028            super(null);
029            root = null;
030        }
031    
032        //
033        // The TreeModel interface
034        //
035        /**
036         * Returns the number of children of <code>node</code>.
037         */
038        public int getChildCount(Object node) {
039            Object[] children = getChildren(node);
040            return (children == null) ? 0 : children.length;
041        }
042    
043        /**
044         * Returns the child of <code>node</code> at index <code>i</code>.
045         */
046        public Object getChild(Object node, int i) {
047            return getChildren(node)[i];
048        }
049    
050        /**
051         * Returns true if the passed in object represents a leaf, false
052         * otherwise.
053         */
054        public boolean isLeaf(Object node) {
055            return ((Node)node).isLeaf();
056        }
057    
058        //
059        //  The TreeTableNode interface.
060        //
061        /**
062         * Returns the number of columns.
063         */
064        public int getColumnCount() {
065            return cNames.length;
066        }
067    
068        /**
069         * Returns the name for a particular column.
070         */
071        public String getColumnName(int column) {
072            return cNames[column];
073        }
074    
075        /**
076         * Returns the class for the particular column.
077         */
078        public Class getColumnClass(int column) {
079            return cTypes[column];
080        }
081    
082        /**
083         * Returns the value of the particular column.
084         */
085        public Object getValueAt(Object node, int column) {
086            Node n = (Node)node;
087            try {
088                switch(column) {
089                case 0:
090                    return n.getName();
091                case 1:
092                    if (n.isPlot()) {
093                        return new Double(n.getResolution());
094                    }
095                    return null;
096                case 2:
097                    return n.isLeaf() ?  "spectra" : "range";
098                }
099            }
100            catch  (SecurityException se) { }
101    
102            return null;
103        }
104    
105        protected Object[] getChildren(Object node) {
106            Node n = (Node) node;
107            return n.getChildren();
108        }
109    
110        /**
111         * Represents part of a Java object tree read from an XML file using JAXB
112         */
113        class Node {
114            protected Node(Object node) { }
115            String getName() { return "name"; }
116            Object[] getChildren() { return null; }
117            double getResolution() { return 1.0; }
118            boolean isLeaf() { return false; }
119            boolean isPlot() { return false; }
120        }
121    }