Changeset 53

Show
Ignore:
Timestamp:
02/22/10 17:49:02 (7 months ago)
Author:
ke
Message:

DB tree: XML import and various bugfixes. Not functional yet.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • kahina/trunk/src/org/kahina/data/tree/KahinaDbTree.java

    r51 r53  
    88import org.kahina.core.KahinaException; 
    99import org.kahina.io.database.DatabaseHandler; 
     10import org.w3c.dom.Document; 
     11import org.w3c.dom.Element; 
     12import org.w3c.dom.Node; 
     13import org.w3c.dom.NodeList; 
    1014 
    1115public class KahinaDbTree extends KahinaTree 
     
    7882                { 
    7983                        db.execute("CREATE TABLE " + NODE_TABLE_NAME + " (id INT, " 
    80                                         + "tree INT, " + "nodeCaption LONG VARCHAR," 
    81                                         + " edgeLabel LONG VARCHAR," + " collapsed TINYINT(1)," 
    82                                         + " realParent INT," + " layer INT," 
    83                                         + " virtualParent INT," + " PRIMARY KEY (id, tree) " 
    84                                         + "INDEX realParent (realParent), " 
    85                                         + "INDEX layer (layer), " 
    86                                         + "INDEX virtualParent (virtualParent))"); 
     84                                        + "tree INT, " + "nodeCaption LONG VARCHAR, " 
     85                                        + "edgeLabel LONG VARCHAR, " + "status INT, " 
     86                                        + "collapsed SMALLINT, " + "realParent INT, " 
     87                                        + "layer INT, " + "virtualParent INT, " 
     88                                        + "PRIMARY KEY (id, tree))"); 
     89                        db.execute("CREATE INDEX tree ON " + NODE_TABLE_NAME + " (tree)"); 
     90                        db.execute("CREATE INDEX realParent ON " + NODE_TABLE_NAME 
     91                                        + " (realParent)"); 
     92                        db.execute("CREATE INDEX virtualParent ON " + NODE_TABLE_NAME 
     93                                        + " (virtualParent)"); 
     94                        db.register(CLIENT_ID); 
    8795                } 
    8896        } 
     
    106114                                                + NODE_TABLE_NAME + " WHERE id = ? AND tree = " 
    107115                                                + treeID); 
     116                getLayerStatement = db.prepareStatement("SELECT layer FROM " 
     117                                + NODE_TABLE_NAME + " WHERE id = ? AND tree = " + treeID); 
    108118                clearStatement = db.prepareStatement("DELETE FROM " + NODE_TABLE_NAME 
    109119                                + " WHERE tree = " + treeID); 
     
    126136                                .prepareStatement("SELECT nodeCaption FROM " + NODE_TABLE_NAME 
    127137                                                + " WHERE id = ? AND tree = " + treeID); 
     138                getNodeStatusStatement = db.prepareStatement("SELECT status FROM " 
     139                                + NODE_TABLE_NAME + " WHERE id = ? AND tree = " + treeID); 
    128140                getRootStatement = db.prepareStatement("SELECT id FROM " 
    129141                                + NODE_TABLE_NAME + " WHERE realParent IS NULL AND tree = " 
     
    135147        } 
    136148 
    137         @Override 
    138         public int addNode(String caption, String label, int nodeStatus) 
    139         { 
    140                 int id = nextID++; 
     149        public void addNode(int id, String caption, String label, int nodeStatus) 
     150        { 
    141151                try 
    142152                { 
     
    149159                        throw new KahinaException("SQL error.", e); 
    150160                } 
     161                nextID = Math.max(id, nextID) + 1; 
     162        } 
     163 
     164        @Override 
     165        public int addNode(String caption, String label, int nodeStatus) 
     166        { 
     167                int id = nextID++; 
     168                addNode(id, caption, label, nodeStatus); 
    151169                return id; 
    152170        } 
     
    166184                computeAndStoreLayerInformation(child); 
    167185        } 
    168          
     186 
    169187        private void computeAndStoreLayerInformation(int child) 
    170188        { 
     
    454472        } 
    455473 
     474        public static KahinaTree importXML(Document dom, LayerDecider decider, 
     475                        DatabaseHandler db) 
     476        { 
     477                KahinaDbTree m = new KahinaDbTree(decider, db); 
     478                Element treeElement = dom.getDocumentElement(); 
     479                NodeList childNodes = treeElement.getChildNodes(); 
     480                for (int i = 0; i < childNodes.getLength(); i++) 
     481                { 
     482                        Node n = childNodes.item(i); 
     483                        if (n.getNodeName().equals("node")) 
     484                        { 
     485                                importXMLNode(m, (Element) n, -1); 
     486                                // TODO: a little risky, root node could be assigned another ID 
     487                                m.setRootID(0); 
     488                                break; 
     489                        } 
     490                } 
     491                return m; 
     492        } 
     493 
     494        private static void importXMLNode(KahinaDbTree m, Element node, int parentID) 
     495        { 
     496                String caption = node.getAttribute("caption"); 
     497                String label = node.getAttribute("label"); 
     498                int status = 0; 
     499                if (node.getAttribute("status").length() > 0) 
     500                { 
     501                        status = Integer.parseInt(node.getAttribute("status")); 
     502                } 
     503                int id; 
     504                if (node.getAttribute("id").length() > 0) 
     505                { 
     506                        id = Integer.parseInt(node.getAttribute("id")); 
     507                        m.addNode(id, caption, label, status); 
     508                } else 
     509                { 
     510                        id = m.addNode(caption, label, status); 
     511                } 
     512                if (parentID != -1) 
     513                { 
     514                        m.addChild(parentID, id); 
     515                } 
     516                // go through children recursively 
     517                NodeList childNodes = node.getChildNodes(); 
     518                for (int i = 0; i < childNodes.getLength(); i++) 
     519                { 
     520                        Node n = childNodes.item(i); 
     521                        if (n.getNodeName().equals("node")) 
     522                        { 
     523                                importXMLNode(m, (Element) n, id); 
     524                        } 
     525                } 
     526        } 
     527 
     528        @Override 
     529        public void finalize() throws Throwable 
     530        { 
     531                clear(); 
     532                super.finalize(); 
     533        } 
     534 
    456535} 
  • kahina/trunk/src/org/kahina/data/tree/KahinaTree.java

    r52 r53  
    2222                super(nextID++); 
    2323                this.decider = decider; 
    24                 clear(); 
     24                doClear(); 
    2525        } 
    2626 
     
    3131         */ 
    3232        public void clear() 
     33        { 
     34                doClear(); 
     35        } 
     36         
     37        private void doClear() 
    3338        { 
    3439                primaryModel = this; 
  • kahina/trunk/src/org/kahina/test/KahinaTreeTest.java

    r48 r53  
    1313 
    1414import org.kahina.data.KahinaTypeException; 
     15import org.kahina.data.tree.KahinaDbTree; 
     16import org.kahina.data.tree.KahinaTree; 
     17import org.kahina.data.tree.LayerDecider; 
     18import org.kahina.io.database.DatabaseHandler; 
    1519import org.kahina.visual.tree.KahinaTreeView; 
    1620import org.kahina.visual.tree.KahinaTreeViewMarker; 
     
    2529        try 
    2630        { 
     31                LayerDecider decider = new TestLayerDecider(); 
     32                DatabaseHandler data = new DatabaseHandler(); 
     33                 
    2734            File file = new File("src/org/kahina/test/trale-tree.xml"); 
    2835            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    2936            DocumentBuilder db = dbf.newDocumentBuilder(); 
    3037            Document dom = db.parse(file); 
    31             TestLayeredTree m1 = TestLayeredTree.importXML(dom); 
     38            //TestLayeredTree m1 = TestLayeredTree.importXML(dom); 
     39            KahinaTree m1 = KahinaDbTree.importXML(dom, decider, data); 
    3240             
    3341            file = new File("src/org/kahina/test/trale-tree2.xml"); 
     
    3543            db = dbf.newDocumentBuilder(); 
    3644            dom = db.parse(file); 
    37             TestLayeredTree m2 = TestLayeredTree.importXML(dom);            
     45            //TestLayeredTree m2 = TestLayeredTree.importXML(dom); 
     46            KahinaTree m2 = KahinaDbTree.importXML(dom, decider, data); 
    3847             
    3948            KahinaTreeView v0 = new KahinaTreeView();