Changeset 42
- Timestamp:
- 02/17/10 10:00:10 (2 years ago)
- Files:
-
- kahina/trunk/src/org/kahina/breakpoint/TreeAutomaton.java (modified) (2 diffs)
- kahina/trunk/src/org/kahina/data/KahinaDbObject.java (deleted)
- kahina/trunk/src/org/kahina/data/KahinaMemObject.java (deleted)
- kahina/trunk/src/org/kahina/data/chart/KahinaChart.java (modified) (1 diff)
- kahina/trunk/src/org/kahina/data/chart/KahinaMemChart.java (modified) (1 diff)
- kahina/trunk/src/org/kahina/data/tree/KahinaLayeredTree.java (modified) (1 diff)
- kahina/trunk/src/org/kahina/data/tree/KahinaMemTree.java (copied) (copied from kahina/trunk/src/org/kahina/data/tree/KahinaTree.java) (18 diffs)
- kahina/trunk/src/org/kahina/data/tree/KahinaTree.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
kahina/trunk/src/org/kahina/breakpoint/TreeAutomaton.java
r38 r42 7 7 import org.kahina.control.KahinaController; 8 8 import org.kahina.control.event.KahinaTreeMatchEvent; 9 import org.kahina.data.tree.KahinaMemTree; 9 10 import org.kahina.data.tree.KahinaTree; 10 11 … … 49 50 rules = new HashSet<TreeAutomatonRule>(); 50 51 51 this.tree = new Kahina Tree();52 this.tree = new KahinaMemTree(); 52 53 this.annotations = new HashMap<Integer,Set<Integer>>(); 53 54 this.bp = bp; kahina/trunk/src/org/kahina/data/chart/KahinaChart.java
r31 r42 8 8 { 9 9 static int lastID = 0; 10 static String type = "KahinaChart";11 10 12 11 public KahinaChart() kahina/trunk/src/org/kahina/data/chart/KahinaMemChart.java
r12 r42 6 6 import java.util.Set; 7 7 8 import org.kahina.data.KahinaMemObject; 9 10 public class KahinaMemChart extends KahinaChart implements KahinaMemObject 8 public class KahinaMemChart extends KahinaChart 11 9 { 12 10 //the chart is divided up into cells (vertical segments) that the edges can range over kahina/trunk/src/org/kahina/data/tree/KahinaLayeredTree.java
r34 r42 9 9 import org.w3c.dom.NodeList; 10 10 11 public class KahinaLayeredTree extends Kahina Tree11 public class KahinaLayeredTree extends KahinaMemTree 12 12 { 13 13 //reference node should always be the same across views, so store it here kahina/trunk/src/org/kahina/data/tree/KahinaMemTree.java
r34 r42 6 6 import java.util.LinkedList; 7 7 import java.util.List; 8 9 import org.kahina.core.data.KahinaObject;10 import org.kahina.data.chart.KahinaChart; 8 import java.util.Map; 9 import java.util.Set; 10 11 11 import org.w3c.dom.Document; 12 12 import org.w3c.dom.Element; … … 14 14 import org.w3c.dom.NodeList; 15 15 16 public class Kahina Tree extends KahinaObject16 public class KahinaMemTree extends KahinaTree 17 17 { 18 18 static int lastID = 0; 19 static String type = "KahinaTree";20 19 21 20 //empty tree has rootID = -1 … … 23 22 24 23 //encode properties of individual nodes 25 protected HashMap<Integer, Integer> parents;26 protected HashMap<Integer, List<Integer>> children;27 protected HashMap<Integer, String> nodeCaptions; //captions are displayed on the nodes28 protected HashMap<Integer, String> edgeLabels; //labels are displayed on the edges to the parent29 protected HashMap<Integer, Integer> status; //appearance of nodes can be steered by appearance30 protected HashSet<Integer> collapsed; //node collapsing is stored in the model, not in individual views!24 protected Map<Integer, Integer> parents; 25 protected Map<Integer, List<Integer>> children; 26 protected Map<Integer, String> nodeCaptions; //captions are displayed on the nodes 27 protected Map<Integer, String> edgeLabels; //labels are displayed on the edges to the parent 28 protected Map<Integer, Integer> status; //appearance of nodes can be steered by appearance 29 protected Set<Integer> collapsed; //node collapsing is stored in the model, not in individual views! 31 30 32 31 HashSet<Integer> terminals; //terminals will be displayed on one level … … 37 36 protected KahinaTree primaryModel; 38 37 39 public Kahina Tree()38 public KahinaMemTree() 40 39 { 41 40 super(lastID++); … … 55 54 } 56 55 57 public void setPrimaryModel(KahinaTree primaryModel) 56 @Override 57 public void setPrimaryModel(KahinaTree primaryModel) 58 58 { 59 59 this.primaryModel = primaryModel; 60 60 } 61 61 62 public int getRootID(int layerID) 62 @Override 63 public int getRootID(int layerID) 63 64 { 64 65 return rootID; 65 66 } 66 67 67 public void setRootID(int rootID) 68 @Override 69 public void setRootID(int rootID) 68 70 { 69 71 this.rootID = rootID; 70 72 } 71 73 72 public void addChild(int parent, int child) 74 @Override 75 public void addChild(int parent, int child) 73 76 { 74 77 if (parent != -1) … … 85 88 } 86 89 87 public int getParent(int nodeID, int layerID) 90 @Override 91 public int getParent(int nodeID, int layerID) 88 92 { 89 93 Integer parent = parents.get(nodeID); … … 92 96 } 93 97 94 public String getNodeCaption(int nodeID) 98 @Override 99 public String getNodeCaption(int nodeID) 95 100 { 96 101 String caption = nodeCaptions.get(nodeID); … … 105 110 } 106 111 107 public String getEdgeLabel(int nodeID) 112 @Override 113 public String getEdgeLabel(int nodeID) 108 114 { 109 115 String label = edgeLabels.get(nodeID); … … 118 124 } 119 125 120 public int getNodeStatus(int nodeID) 126 @Override 127 public int getNodeStatus(int nodeID) 121 128 { 122 129 Integer st = status.get(nodeID); … … 131 138 } 132 139 133 public List<Integer> getChildren(int nodeID, int layerID) 140 @Override 141 public List<Integer> getChildren(int nodeID, int layerID) 134 142 { 135 143 //System.err.print("KahinaTree.getChildren(" + nodeID + "," + layerID + ") = "); … … 147 155 } 148 156 149 public List<Integer> getLeaves() 157 @Override 158 public List<Integer> getLeaves() 150 159 { 151 160 List<Integer> leaves = new LinkedList<Integer>(); … … 173 182 } 174 183 175 public HashMap<Integer, String> getNodeCaptions() 184 @Override 185 public Map<Integer, String> getNodeCaptions() 176 186 { 177 187 return nodeCaptions; 178 188 } 179 189 180 public void setNodeCaptions(HashMap<Integer, String> nodeCaptions) 190 @Override 191 public void setNodeCaptions(Map<Integer, String> nodeCaptions) 181 192 { 182 193 this.nodeCaptions = nodeCaptions; 183 194 } 184 195 185 public HashMap<Integer, String> getEdgeLabels() 196 @Override 197 public Map<Integer, String> getEdgeLabels() 186 198 { 187 199 return edgeLabels; 188 200 } 189 201 190 public void setEdgeLabels(HashMap<Integer, String> edgeLabels) 202 @Override 203 public void setEdgeLabels(Map<Integer, String> edgeLabels) 191 204 { 192 205 this.edgeLabels = edgeLabels; 193 206 } 194 207 195 public HashMap<Integer, Integer> getStatus() 208 @Override 209 public Map<Integer, Integer> getStatus() 196 210 { 197 211 return status; 198 212 } 199 213 200 public void setStatus(HashMap<Integer, Integer> status) 214 @Override 215 public void setStatus(Map<Integer, Integer> status) 201 216 { 202 217 this.status = status; 203 218 } 204 219 205 public boolean isCollapsed(int nodeID) 220 @Override 221 public boolean isCollapsed(int nodeID) 206 222 { 207 223 return collapsed.contains(nodeID); 208 224 } 209 225 210 public void collapse(int nodeID) 226 @Override 227 public void collapse(int nodeID) 211 228 { 212 229 if (nodeID != -1) … … 216 233 } 217 234 218 public void decollapse(int nodeID) 235 @Override 236 public void decollapse(int nodeID) 219 237 { 220 238 collapsed.remove(nodeID); 221 239 } 222 240 223 public void decollapseAll() 241 @Override 242 public void decollapseAll() 224 243 { 225 244 collapsed = new HashSet<Integer>(); 226 245 } 227 246 228 public void toggleCollapse(int nodeID) 247 @Override 248 public void toggleCollapse(int nodeID) 229 249 { 230 250 if (!isCollapsed(nodeID)) … … 238 258 } 239 259 240 public boolean hasCollapsedAncestor(int nodeID) 260 @Override 261 public boolean hasCollapsedAncestor(int nodeID) 241 262 { 242 263 Integer parent = parents.get(nodeID); … … 252 273 } 253 274 254 public int addNode(String caption, String label, int nodeStatus) 275 @Override 276 public int addNode(String caption, String label, int nodeStatus) 255 277 { 256 278 int nodeID = getNextFreeID(); … … 272 294 } 273 295 274 public void clear() 296 @Override 297 public void clear() 275 298 { 276 299 rootID = -1; … … 322 345 } 323 346 324 public static Kahina Tree importXML(Document dom)325 { 326 Kahina Tree m = new KahinaTree();347 public static KahinaMemTree importXML(Document dom) 348 { 349 KahinaMemTree m = new KahinaMemTree(); 327 350 Element treeElement = dom.getDocumentElement(); 328 351 NodeList childNodes = treeElement.getChildNodes(); … … 341 364 } 342 365 343 private static void importXMLNode(Kahina Tree m, Element node, int parentID)366 private static void importXMLNode(KahinaMemTree m, Element node, int parentID) 344 367 { 345 368 int nodeID = 0; kahina/trunk/src/org/kahina/data/tree/KahinaTree.java
r34 r42 1 1 package org.kahina.data.tree; 2 2 3 import java.util.ArrayList;4 import java.util.HashMap;5 import java.util.HashSet;6 import java.util.LinkedList;7 3 import java.util.List; 4 import java.util.Map; 8 5 9 6 import org.kahina.core.data.KahinaObject; 10 import org.kahina.data.chart.KahinaChart;11 import org.w3c.dom.Document;12 import org.w3c.dom.Element;13 import org.w3c.dom.Node;14 import org.w3c.dom.NodeList;15 7 16 public class KahinaTree extends KahinaObject8 public abstract class KahinaTree extends KahinaObject 17 9 { 18 static int lastID = 0;19 static String type = "KahinaTree";20 21 //empty tree has rootID = -122 protected int rootID = -1;23 24 //encode properties of individual nodes25 protected HashMap<Integer, Integer> parents;26 protected HashMap<Integer, List<Integer>> children;27 protected HashMap<Integer, String> nodeCaptions; //captions are displayed on the nodes28 protected HashMap<Integer, String> edgeLabels; //labels are displayed on the edges to the parent29 protected HashMap<Integer, Integer> status; //appearance of nodes can be steered by appearance30 protected HashSet<Integer> collapsed; //node collapsing is stored in the model, not in individual views!31 32 HashSet<Integer> terminals; //terminals will be displayed on one level33 34 //store the ID of the next node that is going to be added35 private int nextID = 0;36 //internal link to the primary model, must sometimes be used for decisions37 protected KahinaTree primaryModel;38 39 public KahinaTree()40 {41 super(lastID++);42 43 rootID = -1;44 45 parents = new HashMap<Integer, Integer>();46 children = new HashMap<Integer, List<Integer>>();47 nodeCaptions = new HashMap<Integer, String>();48 edgeLabels = new HashMap<Integer, String>();49 status = new HashMap<Integer, Integer>();50 collapsed = new HashSet<Integer>();51 52 terminals = new HashSet<Integer>();53 54 primaryModel = this;55 }56 57 public void setPrimaryModel(KahinaTree primaryModel)58 {59 this.primaryModel = primaryModel;60 }61 62 public int getRootID(int layerID)63 {64 return rootID;65 }66 67 public void setRootID(int rootID)68 {69 this.rootID = rootID;70 }71 72 public void addChild(int parent, int child)73 {74 if (parent != -1)75 {76 List<Integer> childIDs = children.get(parent);77 if (childIDs == null)78 {79 childIDs = new ArrayList<Integer>();80 children.put(parent, childIDs);81 }82 childIDs.add(child);83 }84 parents.put(child, parent);85 }86 87 public int getParent(int nodeID, int layerID)88 {89 Integer parent = parents.get(nodeID);90 if (parent == null) return -1;91 return parent;92 }93 94 public String getNodeCaption(int nodeID)95 {96 String caption = nodeCaptions.get(nodeID);97 if (caption == null)98 {99 return null;100 }101 else102 {103 return caption;104 }105 }106 107 public String getEdgeLabel(int nodeID)108 {109 String label = edgeLabels.get(nodeID);110 if (label == null)111 {112 return "";113 }114 else115 {116 return label;117 }118 }119 120 public int getNodeStatus(int nodeID)121 {122 Integer st = status.get(nodeID);123 if (st == null)124 {125 return 0;126 }127 else128 {129 return st;130 }131 }132 133 public List<Integer> getChildren(int nodeID, int layerID)134 {135 //System.err.print("KahinaTree.getChildren(" + nodeID + "," + layerID + ") = ");136 List<Integer> ids = children.get(nodeID);137 if (ids == null)138 {139 //System.err.println("[]");140 return new ArrayList<Integer>();141 }142 else143 {144 //System.err.println(ids);145 return ids;146 }147 }148 149 public List<Integer> getLeaves()150 {151 List<Integer> leaves = new LinkedList<Integer>();152 collectLeaves(rootID, leaves);153 return leaves;154 }155 156 private void collectLeaves(int nodeID, List<Integer> leaves)157 {158 if (nodeID != -1)159 {160 List<Integer> nodeChildren = children.get(nodeID);161 if (nodeChildren == null)162 {163 leaves.add(nodeID);164 }165 else166 {167 for (int child : nodeChildren)168 {169 collectLeaves(child, leaves);170 }171 }172 }173 }174 175 public HashMap<Integer, String> getNodeCaptions()176 {177 return nodeCaptions;178 }179 10 180 public void setNodeCaptions(HashMap<Integer, String> nodeCaptions)181 {182 this.nodeCaptions = nodeCaptions;183 }11 public KahinaTree(int id) 12 { 13 super(id); 14 } 184 15 185 public HashMap<Integer, String> getEdgeLabels() 186 { 187 return edgeLabels; 188 } 16 public abstract void clear(); 189 17 190 public void setEdgeLabels(HashMap<Integer, String> edgeLabels) 191 { 192 this.edgeLabels = edgeLabels; 193 } 18 public abstract int addNode(String caption, String label, int nodeStatus); 194 19 195 public HashMap<Integer, Integer> getStatus() 196 { 197 return status; 198 } 20 public abstract boolean hasCollapsedAncestor(int nodeID); 199 21 200 public void setStatus(HashMap<Integer, Integer> status) 201 { 202 this.status = status; 203 } 204 205 public boolean isCollapsed(int nodeID) 206 { 207 return collapsed.contains(nodeID); 208 } 209 210 public void collapse(int nodeID) 211 { 212 if (nodeID != -1) 213 { 214 collapsed.add(nodeID); 215 } 216 } 217 218 public void decollapse(int nodeID) 219 { 220 collapsed.remove(nodeID); 221 } 222 223 public void decollapseAll() 224 { 225 collapsed = new HashSet<Integer>(); 226 } 227 228 public void toggleCollapse(int nodeID) 229 { 230 if (!isCollapsed(nodeID)) 231 { 232 collapse(nodeID); 233 } 234 else 235 { 236 decollapse(nodeID); 237 } 238 } 239 240 public boolean hasCollapsedAncestor(int nodeID) 241 { 242 Integer parent = parents.get(nodeID); 243 while (parent != null) 244 { 245 if (isCollapsed(parent)) 246 { 247 return true; 248 } 249 parent = parents.get(parent); 250 } 251 return false; 252 } 253 254 public int addNode(String caption, String label, int nodeStatus) 255 { 256 int nodeID = getNextFreeID(); 257 nodeCaptions.put(nodeID, caption); 258 edgeLabels.put(nodeID, label); 259 status.put(nodeID,nodeStatus); 260 return nodeID; 261 } 22 public abstract void toggleCollapse(int nodeID); 262 23 263 protected int getNextFreeID() 264 { 265 int nextIDHyp = nextID; 266 while (parents.get(nextIDHyp) != null) 267 { 268 nextIDHyp++; 269 } 270 nextID = nextIDHyp + 1; 271 return nextIDHyp; 272 } 273 274 public void clear() 275 { 276 rootID = -1; 277 278 parents = new HashMap<Integer, Integer>(); 279 children = new HashMap<Integer, List<Integer>>(); 280 nodeCaptions = new HashMap<Integer, String>(); 281 edgeLabels = new HashMap<Integer, String>(); 282 status = new HashMap<Integer, Integer>(); 283 collapsed = new HashSet<Integer>(); 284 285 terminals = new HashSet<Integer>(); 286 287 primaryModel = this; 288 289 nextID = 0; 290 } 291 292 public String exportXML() 293 { 294 StringBuilder b = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); 295 b.append("<kahinaTree>\n"); 296 if (rootID != -1) 297 { 298 exportXML(b, rootID, 2); 299 } 300 b.append("</kahinaTree>\n"); 301 return b.toString(); 302 } 303 304 private void exportXML(StringBuilder b, int node, int depth) 305 { 306 createSpace(b, depth); 307 b.append("<node id=\"" + node + "\" caption=\"" + getNodeCaption(node) + "\" label=\"" + getEdgeLabel(node) + "\" status=\"" + getNodeStatus(node) + "\">\n"); 308 for (int child : getChildren(node, 0)) 309 { 310 exportXML(b, child, depth + 2); 311 } 312 createSpace(b, depth); 313 b.append("</node>\n"); 314 } 315 316 private void createSpace(StringBuilder b, int amount) 317 { 318 for (int i = 0; i < amount; i++) 319 { 320 b.append(' '); 321 } 322 } 323 324 public static KahinaTree importXML(Document dom) 325 { 326 KahinaTree m = new KahinaTree(); 327 Element treeElement = dom.getDocumentElement(); 328 NodeList childNodes = treeElement.getChildNodes(); 329 for (int i = 0; i < childNodes.getLength(); i++) 330 { 331 Node n = childNodes.item(i); 332 if (n.getNodeName().equals("node")) 333 { 334 importXMLNode(m, (Element) n, -1); 335 //TODO: a little risky, root node could be assigned another ID 336 m.rootID = 0; 337 break; 338 } 339 } 340 return m; 341 } 342 343 private static void importXMLNode(KahinaTree m, Element node, int parentID) 344 { 345 int nodeID = 0; 346 if (node.getAttribute("id").length() > 0) 347 { 348 nodeID = Integer.parseInt(node.getAttribute("id")); 349 } 350 else 351 { 352 nodeID = m.getNextFreeID(); 353 } 354 m.nodeCaptions.put(nodeID, node.getAttribute("caption")); 355 m.edgeLabels.put(nodeID, node.getAttribute("label")); 356 if (node.getAttribute("status").length() > 0) 357 { 358 m.status.put(nodeID, Integer.parseInt(node.getAttribute("status"))); 359 } 360 m.addChild(parentID, nodeID); 361 //go through children recursively 362 NodeList childNodes = node.getChildNodes(); 363 for (int i = 0; i < childNodes.getLength(); i++) 364 { 365 Node n = childNodes.item(i); 366 if (n.getNodeName().equals("node")) 367 { 368 importXMLNode(m, (Element) n, nodeID); 369 } 370 } 371 } 24 public abstract void decollapseAll(); 25 26 public abstract void decollapse(int nodeID); 27 28 public abstract void collapse(int nodeID); 29 30 public abstract boolean isCollapsed(int nodeID); 31 32 public abstract void setStatus(Map<Integer, Integer> status); 33 34 public abstract Map<Integer, Integer> getStatus(); 35 36 public abstract void setEdgeLabels(Map<Integer, String> edgeLabels); 37 38 public abstract Map<Integer, String> getEdgeLabels(); 39 40 public abstract void setNodeCaptions(Map<Integer, String> nodeCaptions); 41 42 public abstract Map<Integer, String> getNodeCaptions(); 43 44 public abstract List<Integer> getLeaves(); 45 46 public abstract List<Integer> getChildren(int nodeID, int layerID); 47 48 public abstract int getNodeStatus(int nodeID); 49 50 public abstract String getEdgeLabel(int nodeID); 51 52 public abstract String getNodeCaption(int nodeID); 53 54 public abstract int getParent(int nodeID, int layerID); 55 56 public abstract void addChild(int parent, int child); 57 58 public abstract void setRootID(int rootID); 59 60 public abstract int getRootID(int layerID); 61 62 public abstract void setPrimaryModel(KahinaTree primaryModel); 63 372 64 }
