diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java index 6271060..343dd1e 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java @@ -132,13 +132,13 @@ private HashMap buildStatefulObjectNodeMap(Stage prevStage) { HashMap result = new HashMap<>(); - Map nodeMap = new HashMap<>(); + /*Map nodeMap = new HashMap<>(); for (StatefulObjectNode node : dependencyGraph.getStatefulObjectNodes()) { nodeMap.put(node.getResource(), node); - } - Map rootMap = new HashMap<>(); + }*/ + Map> resNodeToStatefulObjectNode = new HashMap<>(); for (StatefulObjectNode root : dependencyGraph.getRootStatefulObjectNodes()) { - rootMap.put(root.getResource(), root); + putDescendantNodes(root, resNodeToStatefulObjectNode); } for (ResourceNode node : ((PushPullSelectionStage) prevStage).getResNodeToCell().keySet()) { @@ -146,23 +146,40 @@ if (cell == null) continue; - StatefulObjectNode statefulRoot = rootMap.get(node); - StatefulObjectNode statefulNode = nodeMap.get(node); + Set statefulRoots = resNodeToStatefulObjectNode.get(node); + // StatefulObjectNode statefulNode = nodeMap.get(node); - if (statefulRoot != null) { - result.put(statefulRoot, cell); + if (statefulRoots != null) { + for (StatefulObjectNode statefulObjectNode: statefulRoots){ + result.put(statefulObjectNode, cell); + } } - else if(statefulNode != null) { + /*else if(statefulNode != null) { result.put(statefulNode, cell); - }else { + }*/else { result.put(new StatefulObjectNode(node), cell); - // System.out.println("DependencyGraph に StatefulObjectNode が存在しません:" + node.getResourceName()); + System.out.println("DependencyGraph に StatefulObjectNode が存在しません:" + node.getResourceHierarchy()); } } return result; } + + private static void putDescendantNodes(StatefulObjectNode node, Map> resNodeToStatefulObjectNode) { + Set nodes = resNodeToStatefulObjectNode.getOrDefault(node.getResource(), new HashSet<>()); + nodes.add(node); + resNodeToStatefulObjectNode.put(node.getResource(), nodes); + + for (int i = 0; i < node.getChildrenNum(); i++) { + ObjectNode child = node.getChildren(i); + if (child instanceof StatefulObjectNode) { + putDescendantNodes((StatefulObjectNode) child, resNodeToStatefulObjectNode); + } + } + } + + private HashMap buildEventChannelObjNodeMap(Stage prevStage) { HashMap result = new HashMap<>(); diff --git a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java index c7cf70b..2f51055 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java @@ -38,6 +38,21 @@ initStatefulObjectNodes(getDataFlowGraph()); } + public DependencyGraph(DataFlowGraph dataFlowGraph, DataTransferModel model){ + this.controlFlowGraph = new ControlFlowGraph(dataFlowGraph, model); + this.objectNodeMap = new HashMap<>(); + + for (Edge e : controlFlowGraph.getPushCallGraph().getEdges()) { + addEdge(e.getSource(), e.getDestination()); + } + for (Edge e : controlFlowGraph.getPullCallGraph().getEdges()) { + addEdge(e.getSource(), e.getDestination()); + } + + initRootStatefulObjectNodes(getDataFlowGraph()); + initStatefulObjectNodes(getDataFlowGraph()); + } + private void initRootStatefulObjectNodes(DataFlowGraph dfGraph) { rootStatefulObjectNodes = new HashSet<>();