diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java index 0cff3b8..94a1e8a 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java @@ -17,6 +17,7 @@ import models.controlFlowModel.*; import models.dataFlowModel.*; import models.dependencyModel.*; +import simulator.Event; import java.awt.event.MouseListener; import java.util.*; @@ -136,7 +137,7 @@ result.put(statefulNode, cell); }else { result.put(new StatefulObjectNode(node), cell); - System.out.println("DependencyGraph に StatefulObjectNode が存在しません:" + rootMap.get(node)); + System.out.println("DependencyGraph に StatefulObjectNode が存在しません:" + node.getResourceName()); } } @@ -180,7 +181,7 @@ graph.getModel().beginUpdate(); try { - Map dependencyResNodeCells = createCellsOfResourceMap(); + Map dependencyResNodeCells = createCellsOfResourceMap(); Map dependencyEventNodeCells = createEventChannelCells(); graph = insertDependencyEdges(dependencyResNodeCells, dependencyEventNodeCells); @@ -190,8 +191,8 @@ return graph; } - private Map createCellsOfResourceMap() { - Map resNodeCells = new HashMap<>(); + private Map createCellsOfResourceMap() { + Map resNodeCells = new HashMap<>(); mxCell root = (mxCell) graph.getDefaultParent(); mxCell dependencyLayer = (mxCell) root.getChildAt(DEPENDENCY_LAYER); @@ -201,7 +202,7 @@ mxCell oldCell = statefulObjectNodeToCell.get(statefulObjectNode); if (oldCell != null) { mxCell newCell = cloneResourceCellHierarchy(oldCell, dependencyLayer, resNodeCells); - resNodeCells.put(statefulObjectNode.getResource(), newCell); + resNodeCells.put(statefulObjectNode, newCell); } } @@ -212,7 +213,7 @@ * Reconstructs an identical cell hierarchy on a new layer * by traversing the original cell structure. */ - private mxCell cloneResourceCellHierarchy(mxCell oldCell, mxCell newParent, Map resNodeCells) { + private mxCell cloneResourceCellHierarchy(mxCell oldCell, mxCell newParent, Map resNodeCells) { mxGeometry geo = (mxGeometry) oldCell.getGeometry().clone(); String label = (String) oldCell.getValue(); @@ -224,7 +225,7 @@ StatefulObjectNode parentNode = findStatefulObjectNodeByCell(oldCell); if( parentNode != null){ - resNodeCells.put(parentNode.getResource(), newCell); + resNodeCells.put(parentNode, newCell); }; int childCount = oldCell.getChildCount(); @@ -337,7 +338,7 @@ } private mxGraph insertDependencyEdges( - final Map resNodeCells, + final Map resNodeCells, final Map eventChNodeCells ) { mxCell root = (mxCell) graph.getDefaultParent(); @@ -359,7 +360,7 @@ if(srcNode instanceof EventChannelObjectNode){ srcCell = eventChNodeCells.get(srcNode); } else if (srcNode instanceof StatefulObjectNode){ - srcCell = resNodeCells.get(((StatefulObjectNode) srcNode).getResource()); + srcCell = resNodeCells.get(srcNode); srcIsRes = true; } @@ -367,7 +368,7 @@ if(dstNode instanceof EventChannelObjectNode){ dstCell = eventChNodeCells.get(dstNode); } else if (dstNode instanceof StatefulObjectNode){ - dstCell = resNodeCells.get(((StatefulObjectNode) dstNode).getResource()); + dstCell = resNodeCells.get(dstNode); dstIsRes = true; } diff --git a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java index ea3d5c6..763313e 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java @@ -42,34 +42,51 @@ rootStatefulObjectNodes = new HashSet<>(); for (ResourceNode res : dfGraph.getRootResourceNodes()) { - StatefulObjectNode stateful = new StatefulObjectNode(res); - rootStatefulObjectNodes.add(stateful); + + for (Node node : getNodes()) { + if (node instanceof StatefulObjectNode) { + StatefulObjectNode sNode = (StatefulObjectNode) node; + if (sNode.getResource() == res) { + rootStatefulObjectNodes.add(sNode); + break; + } + } + } } } private void initStatefulObjectNodes(DataFlowGraph dfGraph) { statefulObjectNodes = new HashSet<>(); - for (ResourceNode root : dfGraph.getRootResourceNodes()) { - traverseResourceNode(root); + for (ResourceNode resNode : dfGraph.getResourceNodes()) { + StatefulObjectNode found = null; + StatefulObjectNode sNode = null; + + for (Node node : getNodes()) { + if (node instanceof StatefulObjectNode) { + sNode = (StatefulObjectNode) node; + if (sNode.getResource() == resNode) { + found = sNode; + statefulObjectNodes.add(sNode); + break; + } + } + } + + if (found == null) { + statefulObjectNodes.add((StatefulObjectNode) addNode(sNode)); + } + } } - private void traverseResourceNode(ResourceNode res) { - StatefulObjectNode stateful = new StatefulObjectNode(res); - statefulObjectNodes.add(stateful); - - for (ResourceNode child : res.getChildren()) { - traverseResourceNode(child); - } - } - - public void addNode(ObjectNode node) { + public ObjectNode addNode(ObjectNode node) { if (node instanceof EventChannelObjectNode) { EventChannelObjectNode ecoNode = (EventChannelObjectNode) node; if (!objectNodeMap.containsKey(ecoNode)) { ecoNode = new EventChannelObjectNode(((EventChannelObjectNode) node).getIOChannel()); objectNodeMap.put(node, ecoNode); super.addNode(ecoNode); + return ecoNode; } } else if (node instanceof StatefulObjectNode) { StatefulObjectNode sNode = (StatefulObjectNode) node; @@ -77,10 +94,12 @@ sNode = new StatefulObjectNode(((StatefulObjectNode) node).getResource()); objectNodeMap.put(node, sNode); super.addNode(sNode); + return sNode; } } else { super.addNode(node); } + return node; } public void addEdge(Node srcNode, Node dstNode){