diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java index 6a90bf9..0cff3b8 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java @@ -22,7 +22,7 @@ import java.util.*; public class DependencyModelingStage extends Stage { - + static { mxGraphics2DCanvas.putShape("interface", new mxInterfaceShape()); mxStyleRegistry.putValue("interfacePerimeter", new mxInterfacePerimeter()); @@ -112,6 +112,10 @@ private HashMap buildStatefulObjectNodeMap(Stage prevStage) { HashMap result = new HashMap<>(); + Map nodeMap = new HashMap<>(); + for (StatefulObjectNode node : dependencyGraph.getStatefulObjectNodes()) { + nodeMap.put(node.getResource(), node); + } Map rootMap = new HashMap<>(); for (StatefulObjectNode root : dependencyGraph.getRootStatefulObjectNodes()) { rootMap.put(root.getResource(), root); @@ -122,9 +126,18 @@ if (cell == null) continue; - StatefulObjectNode stateful = - rootMap.getOrDefault(node, new StatefulObjectNode(node)); - result.put(stateful, cell); + StatefulObjectNode statefulRoot = rootMap.get(node); + StatefulObjectNode statefulNode = nodeMap.get(node); + + if (statefulRoot != null) { + result.put(statefulRoot, cell); + } + else if(statefulNode != null) { + result.put(statefulNode, cell); + }else { + result.put(new StatefulObjectNode(node), cell); + System.out.println("DependencyGraph に StatefulObjectNode が存在しません:" + rootMap.get(node)); + } } return result; diff --git a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java index 497d41f..ea3d5c6 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java @@ -11,6 +11,7 @@ import models.dataFlowModel.ResourceNode; import javax.swing.plaf.nimbus.State; +import javax.xml.crypto.Data; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -20,6 +21,7 @@ private final ControlFlowGraph controlFlowGraph; protected Map objectNodeMap = null; protected Set rootStatefulObjectNodes = null; + protected Set statefulObjectNodes = null; public DependencyGraph(ControlFlowGraph controlFlowGraph, DataTransferModel model) { this.controlFlowGraph = controlFlowGraph; @@ -33,16 +35,31 @@ } initRootStatefulObjectNodes(getDataFlowGraph()); + initStatefulObjectNodes(getDataFlowGraph()); } - //このコードはControlFlowModelingで実装するのが適している private void initRootStatefulObjectNodes(DataFlowGraph dfGraph) { rootStatefulObjectNodes = new HashSet<>(); for (ResourceNode res : dfGraph.getRootResourceNodes()) { StatefulObjectNode stateful = new StatefulObjectNode(res); rootStatefulObjectNodes.add(stateful); - System.out.println(stateful); + } + } + + private void initStatefulObjectNodes(DataFlowGraph dfGraph) { + statefulObjectNodes = new HashSet<>(); + for (ResourceNode root : dfGraph.getRootResourceNodes()) { + traverseResourceNode(root); + } + } + + private void traverseResourceNode(ResourceNode res) { + StatefulObjectNode stateful = new StatefulObjectNode(res); + statefulObjectNodes.add(stateful); + + for (ResourceNode child : res.getChildren()) { + traverseResourceNode(child); } } @@ -99,6 +116,8 @@ return rootStatefulObjectNodes; } + public Set getStatefulObjectNodes() { return statefulObjectNodes; } + @Override public Map> getAllComponentNodes() { return null;