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<>();