diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java index 8cb75de..810cad2 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java @@ -11,17 +11,12 @@ import com.mxgraph.util.mxEventSource.mxIEventListener; import com.mxgraph.util.mxPoint; import com.mxgraph.view.mxGraph; -import com.mxgraph.view.mxPerimeter; import com.mxgraph.view.mxStyleRegistry; import models.Edge; import models.Node; -import models.algebra.*; import models.controlFlowModel.*; -import models.dataConstraintModel.Channel; -import models.dataConstraintModel.ResourcePath; import models.dataFlowModel.*; import models.dependencyModel.*; -import simulator.states.State; import java.awt.event.MouseListener; import java.util.*; @@ -119,15 +114,22 @@ private HashMap buildStatefulObjectNodeMap(Stage prevStage) { HashMap result = new HashMap<>(); - Map prevResNodeToCell = - ((PushPullSelectionStage) prevStage).getResNodeToCell(); + Map rootMap = new HashMap<>(); + for (StatefulObjectNode root : dependencyGraph.getRootStatefulObjectNodes()) { + rootMap.put(root.getResource(), root); + } - for (StatefulObjectNode node : dependencyGraph.getRootStatefulObjectNodes()) { - ResourceNode resource = node.getResource(); - mxCell cell = prevResNodeToCell.get(resource); - if (cell != null) { - result.put(node, cell); - } + for (ResourceNode node : resNodeToCell.keySet()) { + mxCell cell = ((PushPullSelectionStage) prevStage) + .getResNodeToCell() + .get(node); + + if (cell == null) continue; + + // root にあればそれを使う、なければ new + StatefulObjectNode stateful = + rootMap.getOrDefault(node, new StatefulObjectNode(node)); + result.put(stateful, cell); } return result; @@ -212,7 +214,7 @@ geo.getX(), geo.getY(), geo.getWidth(), geo.getHeight(), newStyle); - StatefulObjectNode parentNode = findResourceNodeByCell(oldCell); + StatefulObjectNode parentNode = findStatefulObjectNodeByCell(oldCell); if( parentNode != null){ resNodeCells.put(parentNode.getResource(), newCell); }; @@ -223,7 +225,7 @@ mxCell oldChild = (mxCell) oldCell.getChildAt(i); mxCell newChild = cloneResourceCellHierarchy(oldChild, newCell, resNodeCells); - StatefulObjectNode childNode = findResourceNodeByCell(oldChild); + StatefulObjectNode childNode = findStatefulObjectNodeByCell(oldChild); addDependencyGraph(parentNode, childNode); } @@ -232,13 +234,13 @@ } /** - * Helper method to retrieve the corresponding ResourceNode from a cell. + * Helper method to retrieve the corresponding StatefulObject from a cell. * (Performs reverse lookup from resNodeToCell) */ - private StatefulObjectNode findResourceNodeByCell(mxCell cell) { - for (Map.Entry entry : resNodeToCell.entrySet()) { + private StatefulObjectNode findStatefulObjectNodeByCell(mxCell cell) { + for (Map.Entry entry : statefulObjectNodeToCell.entrySet()) { if (entry.getValue() == cell) { - return new StatefulObjectNode(entry.getKey()); + return entry.getKey(); } } return null;