Changeset 53
- Timestamp:
- 02/22/10 17:49:02 (7 months ago)
- Files:
-
- kahina/trunk/src/org/kahina/core/data (deleted)
- kahina/trunk/src/org/kahina/data/tree/KahinaDbTree.java (modified) (8 diffs)
- kahina/trunk/src/org/kahina/data/tree/KahinaTree.java (modified) (2 diffs)
- kahina/trunk/src/org/kahina/test/KahinaTreeTest.java (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
kahina/trunk/src/org/kahina/data/tree/KahinaDbTree.java
r51 r53 8 8 import org.kahina.core.KahinaException; 9 9 import org.kahina.io.database.DatabaseHandler; 10 import org.w3c.dom.Document; 11 import org.w3c.dom.Element; 12 import org.w3c.dom.Node; 13 import org.w3c.dom.NodeList; 10 14 11 15 public class KahinaDbTree extends KahinaTree … … 78 82 { 79 83 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); 87 95 } 88 96 } … … 106 114 + NODE_TABLE_NAME + " WHERE id = ? AND tree = " 107 115 + treeID); 116 getLayerStatement = db.prepareStatement("SELECT layer FROM " 117 + NODE_TABLE_NAME + " WHERE id = ? AND tree = " + treeID); 108 118 clearStatement = db.prepareStatement("DELETE FROM " + NODE_TABLE_NAME 109 119 + " WHERE tree = " + treeID); … … 126 136 .prepareStatement("SELECT nodeCaption FROM " + NODE_TABLE_NAME 127 137 + " WHERE id = ? AND tree = " + treeID); 138 getNodeStatusStatement = db.prepareStatement("SELECT status FROM " 139 + NODE_TABLE_NAME + " WHERE id = ? AND tree = " + treeID); 128 140 getRootStatement = db.prepareStatement("SELECT id FROM " 129 141 + NODE_TABLE_NAME + " WHERE realParent IS NULL AND tree = " … … 135 147 } 136 148 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 { 141 151 try 142 152 { … … 149 159 throw new KahinaException("SQL error.", e); 150 160 } 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); 151 169 return id; 152 170 } … … 166 184 computeAndStoreLayerInformation(child); 167 185 } 168 186 169 187 private void computeAndStoreLayerInformation(int child) 170 188 { … … 454 472 } 455 473 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 456 535 } kahina/trunk/src/org/kahina/data/tree/KahinaTree.java
r52 r53 22 22 super(nextID++); 23 23 this.decider = decider; 24 clear();24 doClear(); 25 25 } 26 26 … … 31 31 */ 32 32 public void clear() 33 { 34 doClear(); 35 } 36 37 private void doClear() 33 38 { 34 39 primaryModel = this; kahina/trunk/src/org/kahina/test/KahinaTreeTest.java
r48 r53 13 13 14 14 import org.kahina.data.KahinaTypeException; 15 import org.kahina.data.tree.KahinaDbTree; 16 import org.kahina.data.tree.KahinaTree; 17 import org.kahina.data.tree.LayerDecider; 18 import org.kahina.io.database.DatabaseHandler; 15 19 import org.kahina.visual.tree.KahinaTreeView; 16 20 import org.kahina.visual.tree.KahinaTreeViewMarker; … … 25 29 try 26 30 { 31 LayerDecider decider = new TestLayerDecider(); 32 DatabaseHandler data = new DatabaseHandler(); 33 27 34 File file = new File("src/org/kahina/test/trale-tree.xml"); 28 35 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 29 36 DocumentBuilder db = dbf.newDocumentBuilder(); 30 37 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); 32 40 33 41 file = new File("src/org/kahina/test/trale-tree2.xml"); … … 35 43 db = dbf.newDocumentBuilder(); 36 44 dom = db.parse(file); 37 TestLayeredTree m2 = TestLayeredTree.importXML(dom); 45 //TestLayeredTree m2 = TestLayeredTree.importXML(dom); 46 KahinaTree m2 = KahinaDbTree.importXML(dom, decider, data); 38 47 39 48 KahinaTreeView v0 = new KahinaTreeView();
