Changeset 46
- Timestamp:
- 02/20/10 13:59:04 (2 years ago)
- Files:
-
- kahina/trunk/src/org/kahina/breakpoint/TreeAutomaton.java (modified) (2 diffs)
- kahina/trunk/src/org/kahina/core/KahinaState.java (modified) (2 diffs)
- kahina/trunk/src/org/kahina/core/data/LightweightKahinaObjectDbDataStore.java (modified) (1 diff)
- kahina/trunk/src/org/kahina/data/chart/KahinaDbChart.java (modified) (3 diffs)
- kahina/trunk/src/org/kahina/data/tree/DefaultLayerDecider.java (added)
- kahina/trunk/src/org/kahina/data/tree/KahinaDbTree.java (added)
- kahina/trunk/src/org/kahina/data/tree/KahinaMemTree.java (moved) (moved from kahina/trunk/src/org/kahina/data/tree/KahinaLayeredTree.java) (7 diffs)
- kahina/trunk/src/org/kahina/data/tree/KahinaTree.java (modified) (3 diffs)
- kahina/trunk/src/org/kahina/data/tree/KahinaUnlayeredMemTree.java (copied) (copied from kahina/trunk/src/org/kahina/data/tree/KahinaMemTree.java) (6 diffs)
- kahina/trunk/src/org/kahina/data/tree/LayerDecider.java (added)
- kahina/trunk/src/org/kahina/gui/breakpoint/BreakpointTestWindow.java (modified) (3 diffs)
- kahina/trunk/src/org/kahina/io/database/DatabaseHandler.java (modified) (1 diff)
- kahina/trunk/src/org/kahina/test/KahinaTreeTest.java (modified) (2 diffs)
- kahina/trunk/src/org/kahina/test/TestLayerDecider.java (added)
- kahina/trunk/src/org/kahina/test/TestLayeredTree.java (modified) (2 diffs)
- kahina/trunk/src/org/kahina/visual/tree/KahinaTreeView.java (modified) (5 diffs)
- kahina/trunk/src/org/kahina/visual/tree/KahinaTreeViewListener.java (modified) (2 diffs)
- kahina/trunk/src/org/kahina/visual/tree/KahinaTreeViewMarker.java (modified) (2 diffs)
- kahina/trunk/src/org/tralesld/behavior/TraleSLDTreeBehavior.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
kahina/trunk/src/org/kahina/breakpoint/TreeAutomaton.java
r42 r46 7 7 import org.kahina.control.KahinaController; 8 8 import org.kahina.control.event.KahinaTreeMatchEvent; 9 import org.kahina.data.tree.Kahina MemTree;9 import org.kahina.data.tree.KahinaUnlayeredMemTree; 10 10 import org.kahina.data.tree.KahinaTree; 11 11 … … 50 50 rules = new HashSet<TreeAutomatonRule>(); 51 51 52 this.tree = new Kahina MemTree();52 this.tree = new KahinaUnlayeredMemTree(); 53 53 this.annotations = new HashMap<Integer,Set<Integer>>(); 54 54 this.bp = bp; kahina/trunk/src/org/kahina/core/KahinaState.java
r19 r46 1 1 package org.kahina.core; 2 2 3 import org.kahina.data.tree.Kahina LayeredTree;3 import org.kahina.data.tree.KahinaMemTree; 4 4 import org.kahina.data.tree.KahinaTree; 5 5 … … 17 17 { 18 18 //the data structures that a kahina state always contains 19 Kahina LayeredTree stepTree;19 KahinaMemTree stepTree; 20 20 KahinaTree secondaryStepTree; 21 21 } kahina/trunk/src/org/kahina/core/data/LightweightKahinaObjectDbDataStore.java
r33 r46 116 116 return; 117 117 } 118 try 119 { 120 db.execute("CREATE TABLE " + OBJECT_TABLE_NAME + " (" 121 + "class_id INT, " + "object_id INT, " + "field_id INT, " 122 + "value_class_id INT, " + "value_object_id INT, " 123 + "INDEX id (class_id, object_id, field_id)" + "); " 124 + "CREATE TABLE KahinaObjectDbDataStore_string_values " 125 + "(" + "class_id INT, " + "object_id INT, " 126 + "field_id INT, " + "value LONG VARCHAR, " 127 + "INDEX id (class_id, object_id, field_id)" + "); " 128 + "CREATE TABLE KahinaObjectDbDataStore_int_values " + "(" 129 + "class_id INT, " + "object_id INT, " + "field_id INT, " 130 + "value INT, " 131 + "INDEX id (class_id, object_id, field_id)" + "); "); 132 } catch (SQLException e) 133 { 134 throw new KahinaException("Could not create tables. ", e); 135 } 118 db.execute("CREATE TABLE " + OBJECT_TABLE_NAME + " (" 119 + "class_id INT, " + "object_id INT, " + "field_id INT, " 120 + "value_class_id INT, " + "value_object_id INT, " 121 + "INDEX id (class_id, object_id, field_id)" + "); " 122 + "CREATE TABLE KahinaObjectDbDataStore_string_values " + "(" 123 + "class_id INT, " + "object_id INT, " + "field_id INT, " 124 + "value LONG VARCHAR, " 125 + "INDEX id (class_id, object_id, field_id)" + "); " 126 + "CREATE TABLE KahinaObjectDbDataStore_int_values " + "(" 127 + "class_id INT, " + "object_id INT, " + "field_id INT, " 128 + "value INT, " + "INDEX id (class_id, object_id, field_id)" 129 + "); "); 136 130 db.register(CLIENT_ID); 137 131 } kahina/trunk/src/org/kahina/data/chart/KahinaDbChart.java
r33 r46 14 14 15 15 private static final String TABLE_NAME_PREFIX = KahinaDbChart.class 16 .getSimpleName() + "_"; 16 .getSimpleName() 17 + "_"; 17 18 18 19 private static final String CHART_TABLE_NAME = TABLE_NAME_PREFIX + "charts"; … … 88 89 if (!db.isRegistered(CLIENT_ID)) 89 90 { 90 try 91 { 92 // create table for KahinaCharts 93 db.execute("CREATE TABLE " + CHART_TABLE_NAME + " (" 94 + "id INT," + "leftBound INT," + "rightBound INT," 95 + "leftmostCovered INT," + "rightmostCovered INT," 96 + "PRIMARY KEY (id)" + ")"); 97 // create a table for the chart segments 98 db.execute("CREATE TABLE " + SEGMENT_TABLE_NAME + " (" 99 + "id INT," + "chart INT," + "caption LONG VARCHAR," 100 + "PRIMARY KEY (id, chart)" + ")"); 101 // create a table for the chart edges 102 db.execute("CREATE TABLE " + EDGE_TABLE_NAME + " (" + "id INT," 103 + "chart INT," + "leftBound INT," + "rightBound INT," 104 + "caption LONG VARCHAR," + "status INT," 105 + "PRIMARY KEY (id, chart)" + ")"); 106 } catch (SQLException e) 107 { 108 throw new KahinaException("Failed to create tables. ", e); 109 } 91 // create table for KahinaCharts 92 db.execute("CREATE TABLE " + CHART_TABLE_NAME + " (" + "id INT," 93 + "leftBound INT," + "rightBound INT," 94 + "leftmostCovered INT," + "rightmostCovered INT," 95 + "PRIMARY KEY (id)" + ")"); 96 // create a table for the chart segments 97 db.execute("CREATE TABLE " + SEGMENT_TABLE_NAME + " (" + "id INT," 98 + "chart INT," + "caption LONG VARCHAR," 99 + "PRIMARY KEY (id, chart)" + ")"); 100 // create a table for the chart edges 101 db.execute("CREATE TABLE " + EDGE_TABLE_NAME + " (" + "id INT," 102 + "chart INT," + "leftBound INT," + "rightBound INT," 103 + "caption LONG VARCHAR," + "status INT," 104 + "PRIMARY KEY (id, chart)" + ")"); 110 105 db.register(CLIENT_ID); 111 106 } … … 114 109 private void createChart() 115 110 { 116 try 117 { 118 db 119 .execute("INSERT INTO " 120 + CHART_TABLE_NAME 121 + " (id, leftBound, rightBound, leftmostCovered, rightmostCovered) VALUES (" 122 + getID() + ", 0, 0, 0, 0)"); 123 } catch (SQLException e) 124 { 125 throw new KahinaException("Failed to create chart."); 126 } 111 db 112 .execute("INSERT INTO " 113 + CHART_TABLE_NAME 114 + " (id, leftBound, rightBound, leftmostCovered, rightmostCovered) VALUES (" 115 + getID() + ", 0, 0, 0, 0)"); 127 116 } 128 117 kahina/trunk/src/org/kahina/data/tree/KahinaMemTree.java
r42 r46 9 9 import org.w3c.dom.NodeList; 10 10 11 public class Kahina LayeredTree extends KahinaMemTree11 public class KahinaMemTree extends KahinaUnlayeredMemTree 12 12 { 13 13 //reference node should always be the same across views, so store it here 14 14 int referenceNode; 15 16 public KahinaMemTree() 17 { 18 this(new DefaultLayerDecider()); 19 } 15 20 16 public Kahina LayeredTree()21 public KahinaMemTree(LayerDecider decider) 17 22 { 18 super( );23 super(decider); 19 24 referenceNode = super.getRootID(0); 20 25 } … … 34 39 if (layerID == 0) return super.getRootID(0); 35 40 int rootID = referenceNode; 36 while (decide OnLevel(rootID) >= layerID)41 while (decider.decideOnLayer(rootID, this) >= layerID) 37 42 { 38 43 rootID = super.getParent(rootID,0); … … 45 50 if (nodeID == getRootID(layerID)) return -1; 46 51 int parent = super.getParent(nodeID,0); 47 while (decide OnLevel(parent) > layerID)52 while (decider.decideOnLayer(parent, this) > layerID) 48 53 { 49 54 parent = super.getParent(parent,0); … … 58 63 List<Integer> chi = new ArrayList<Integer>(); 59 64 List<Integer> frontLine = new ArrayList<Integer>(); 60 if (nodeID == getRootID(layerID) || decide OnLevel(nodeID) >= layerID)65 if (nodeID == getRootID(layerID) || decider.decideOnLayer(nodeID, this) >= layerID) 61 66 { 62 67 frontLine.addAll(super.getChildren(nodeID, layerID)); … … 67 72 int child = frontLine.remove(0); 68 73 //System.err.println("child: " + child + " level: " + decideOnLevel(child)); 69 if (decide OnLevel(child) <= layerID)74 if (decider.decideOnLayer(child, this) <= layerID) 70 75 { 71 76 chi.add(child); … … 81 86 } 82 87 83 //this method should be implemented by deriving classes! 84 //full access to the tree model, can thus be based on node info, tree structure, status information 85 //default version: all the nodes belong to level 0 86 public int decideOnLevel(int nodeID) 88 public static KahinaMemTree importXML(Document dom) 87 89 { 88 return 0; 89 } 90 91 public static KahinaLayeredTree importXML(Document dom) 92 { 93 KahinaLayeredTree m = new KahinaLayeredTree(); 90 KahinaMemTree m = new KahinaMemTree(); 94 91 Element treeElement = dom.getDocumentElement(); 95 92 NodeList childNodes = treeElement.getChildNodes(); … … 108 105 } 109 106 110 private static void importXMLNode(Kahina LayeredTree m, Element node, int parentID)107 private static void importXMLNode(KahinaMemTree m, Element node, int parentID) 111 108 { 112 109 int nodeID = 0; kahina/trunk/src/org/kahina/data/tree/KahinaTree.java
r44 r46 9 9 { 10 10 private static int nextID = 0; 11 12 protected LayerDecider decider; 11 13 12 public KahinaTree() 14 private KahinaTree primaryModel; 15 16 public KahinaTree(LayerDecider decider) 13 17 { 14 18 super(nextID++); 19 this.decider = decider; 20 clear(); 15 21 } 16 22 17 public abstract void clear(); 23 /** 24 * Clears the tree model. Implementors should override this method to clear 25 * implementation-specific data, but make sure to call this implementation 26 * using <code>super.clear()</code>. 27 */ 28 public void clear() 29 { 30 setPrimaryModel(this); 31 } 18 32 19 33 public abstract int addNode(String caption, String label, int nodeStatus); … … 62 76 63 77 public abstract int getRootID(int layerID); 64 65 public abstract void setPrimaryModel(KahinaTree primaryModel);66 78 67 79 public String exportXML() … … 97 109 } 98 110 111 public KahinaTree getPrimaryModel() 112 { 113 return primaryModel; 114 } 115 116 public void setPrimaryModel(KahinaTree primaryModel) 117 { 118 this.primaryModel = primaryModel; 119 } 120 99 121 } kahina/trunk/src/org/kahina/data/tree/KahinaUnlayeredMemTree.java
r44 r46 14 14 import org.w3c.dom.NodeList; 15 15 16 public class KahinaMemTree extends KahinaTree 16 /** 17 * A simple Kahina tree implementation which does not support layers. 18 */ 19 public class KahinaUnlayeredMemTree extends KahinaTree 17 20 { 18 21 //empty tree has rootID = -1 … … 31 34 //store the ID of the next node that is going to be added 32 35 private int nextID = 0; 33 //internal link to the primary model, must sometimes be used for decisions 34 protected KahinaTree primaryModel; 35 36 public KahinaMemTree() 36 public KahinaUnlayeredMemTree() 37 { 38 this(new DefaultLayerDecider()); 39 } 40 41 public KahinaUnlayeredMemTree(LayerDecider decider) 37 42 { 43 super(decider); 38 44 rootID = -1; 39 45 … … 46 52 47 53 terminals = new HashSet<Integer>(); 48 49 primaryModel = this;50 }51 52 @Override53 public void setPrimaryModel(KahinaTree primaryModel)54 {55 this.primaryModel = primaryModel;56 54 } 57 55 … … 299 297 public void clear() 300 298 { 299 super.clear(); 301 300 rootID = -1; 302 301 … … 310 309 terminals = new HashSet<Integer>(); 311 310 312 primaryModel = this;313 314 311 nextID = 0; 315 312 } 316 313 317 314 // TODO find a good way to make this implementation-independent 318 public static Kahina MemTree importXML(Document dom)319 { 320 Kahina MemTree m = new KahinaMemTree();315 public static KahinaTree importXML(Document dom) 316 { 317 KahinaUnlayeredMemTree m = new KahinaUnlayeredMemTree(); 321 318 Element treeElement = dom.getDocumentElement(); 322 319 NodeList childNodes = treeElement.getChildNodes(); … … 335 332 } 336 333 337 private static void importXMLNode(Kahina MemTree m, Element node, int parentID)334 private static void importXMLNode(KahinaUnlayeredMemTree m, Element node, int parentID) 338 335 { 339 336 int nodeID = 0; kahina/trunk/src/org/kahina/gui/breakpoint/BreakpointTestWindow.java
r34 r46 19 19 import org.kahina.control.event.KahinaTreeMatchEvent; 20 20 import org.kahina.data.KahinaTypeException; 21 import org.kahina.data.tree.Kahina LayeredTree;21 import org.kahina.data.tree.KahinaMemTree; 22 22 import org.kahina.visual.tree.KahinaTreeView; 23 23 import org.kahina.visual.tree.KahinaTreeViewMarker; … … 26 26 public class BreakpointTestWindow extends JFrame implements ActionListener, KahinaListener 27 27 { 28 Kahina LayeredTree model;28 KahinaMemTree model; 29 29 List<TreeAutomaton> breakpoints; 30 30 … … 50 50 mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS)); 51 51 52 model = new Kahina LayeredTree();52 model = new KahinaMemTree(); 53 53 int rootID = model.addNode("start", "none", 0); 54 54 model.setRootID(rootID); kahina/trunk/src/org/kahina/io/database/DatabaseHandler.java
r31 r46 48 48 } 49 49 50 public void execute(String sqlString) throws SQLException50 public void execute(String sqlString) 51 51 { 52 Statement statement = connection.createStatement(); 53 statement.execute(sqlString); 52 try 53 { 54 Statement statement = connection.createStatement(); 55 statement.execute(sqlString); 56 } catch (SQLException e) 57 { 58 throw new KahinaException("SQL error.", e); 59 } 54 60 } 55 61 kahina/trunk/src/org/kahina/test/KahinaTreeTest.java
r45 r46 2 2 3 3 import java.awt.Color; 4 import java.awt.Font;5 4 import java.io.File; 6 5 import java.io.IOException; … … 14 13 15 14 import org.kahina.data.KahinaTypeException; 16 import org.kahina.data.tree.KahinaTree;17 15 import org.kahina.visual.tree.KahinaTreeView; 18 16 import org.kahina.visual.tree.KahinaTreeViewMarker; kahina/trunk/src/org/kahina/test/TestLayeredTree.java
r34 r46 1 1 package org.kahina.test; 2 2 3 import org.kahina.data.tree.Kahina LayeredTree;3 import org.kahina.data.tree.KahinaMemTree; 4 4 import org.w3c.dom.Document; 5 5 import org.w3c.dom.Element; … … 7 7 import org.w3c.dom.NodeList; 8 8 9 public class TestLayeredTree extends Kahina LayeredTree9 public class TestLayeredTree extends KahinaMemTree 10 10 { 11 //this method should be implemented by deriving classes! 12 //full access to the tree model, can thus be based on node info, tree structure, status information 13 //TODO: in the case of the secondary tree model, use the captions from the primary model instead! 14 public int decideOnLevel(int nodeID) 15 { 16 if (nodeID == getRootID(0)) return 0; 17 if (nodeID == -1) return -1; 18 if (primaryModel.getNodeCaption(nodeID).indexOf("rule") != -1 || primaryModel.getNodeCaption(nodeID).indexOf("\"") != -1) return 0; 19 else if (primaryModel.getNodeCaption(nodeID).indexOf("goal") != -1) return 1; 20 return 2; 21 } 11 public TestLayeredTree() 12 { 13 super(new TestLayerDecider()); 14 } 22 15 23 16 public static TestLayeredTree importXML(Document dom) kahina/trunk/src/org/kahina/visual/tree/KahinaTreeView.java
r34 r46 15 15 import org.kahina.data.KahinaTypeException; 16 16 import org.kahina.data.tree.KahinaTree; 17 import org.kahina.data.tree.Kahina LayeredTree;17 import org.kahina.data.tree.KahinaMemTree; 18 18 import org.kahina.visual.KahinaView; 19 19 … … 123 123 public KahinaTreeView() 124 124 { 125 treeModel = new Kahina LayeredTree();125 treeModel = new KahinaMemTree(); 126 126 treeLayer = 0; 127 127 secondaryTreeModel = null; … … 588 588 } 589 589 treeLayer = 0; 590 this.treeModel = (Kahina LayeredTree) treeModel;590 this.treeModel = (KahinaMemTree) treeModel; 591 591 nodeBorderColor = new HashMap<Integer, Color>(); 592 592 resetAllStructures(); … … 600 600 throw new KahinaTypeException("",""); 601 601 } 602 this.secondaryTreeModel = (Kahina LayeredTree) treeModel;603 ((Kahina LayeredTree) this.secondaryTreeModel).setReferenceNode(((KahinaLayeredTree) this.treeModel).getReferenceNode());602 this.secondaryTreeModel = (KahinaMemTree) treeModel; 603 ((KahinaMemTree) this.secondaryTreeModel).setReferenceNode(((KahinaMemTree) this.treeModel).getReferenceNode()); 604 604 this.secondaryTreeModel.setPrimaryModel(this.treeModel); 605 605 nodeBorderColor = new HashMap<Integer, Color>(); … … 608 608 } 609 609 610 public void display(Kahina LayeredTree layerModel, int layerID, int referenceNode) throws KahinaTypeException610 public void display(KahinaMemTree layerModel, int layerID, int referenceNode) throws KahinaTypeException 611 611 { 612 612 treeLayer = layerID; kahina/trunk/src/org/kahina/visual/tree/KahinaTreeViewListener.java
r4 r46 14 14 import javax.swing.JOptionPane; 15 15 16 import org.kahina.data.tree.Kahina LayeredTree;16 import org.kahina.data.tree.KahinaMemTree; 17 17 import org.kahina.visual.chart.KahinaChartView; 18 18 import org.kahina.visual.chart.KahinaChartViewContextMenu; … … 29 29 { 30 30 this.view = view; 31 this.marker = new KahinaTreeViewMarker((Kahina LayeredTree) view.v.getTreeModel());31 this.marker = new KahinaTreeViewMarker((KahinaMemTree) view.v.getTreeModel()); 32 32 this.lastMouseEvent = null; 33 33 } kahina/trunk/src/org/kahina/visual/tree/KahinaTreeViewMarker.java
r4 r46 4 4 import java.util.Set; 5 5 6 import org.kahina.data.tree.Kahina LayeredTree;6 import org.kahina.data.tree.KahinaMemTree; 7 7 8 8 public class KahinaTreeViewMarker 9 9 { 10 10 int markedNode = -1; 11 Kahina LayeredTree model;12 Kahina LayeredTree secondaryModel;11 KahinaMemTree model; 12 KahinaMemTree secondaryModel; 13 13 Set<KahinaTreeViewPanel> views; 14 14 15 public KahinaTreeViewMarker(Kahina LayeredTree m)15 public KahinaTreeViewMarker(KahinaMemTree m) 16 16 { 17 17 this.model = m; … … 19 19 } 20 20 21 public KahinaTreeViewMarker(Kahina LayeredTree m, KahinaLayeredTree m2)21 public KahinaTreeViewMarker(KahinaMemTree m, KahinaMemTree m2) 22 22 { 23 23 this.model = m; kahina/trunk/src/org/tralesld/behavior/TraleSLDTreeBehavior.java
r8 r46 4 4 5 5 import org.kahina.behavior.KahinaTreeBehavior; 6 import org.kahina.data.tree.Kahina LayeredTree;6 import org.kahina.data.tree.KahinaMemTree; 7 7 import org.kahina.data.tree.KahinaTree; 8 8 import org.kahina.util.PrologUtilities; … … 21 21 int lastActiveID; 22 22 23 public TraleSLDTreeBehavior(Kahina LayeredTree tree, KahinaTree secondaryTree)23 public TraleSLDTreeBehavior(KahinaMemTree tree, KahinaTree secondaryTree) 24 24 { 25 25 super(tree);
