diff --git a/dg/src/main/jastadd/DGtoDotG.jrag b/dg/src/main/jastadd/DGtoDotG.jrag new file mode 100644 index 0000000000000000000000000000000000000000..f4e4f50ed9a4b23949b6751396f427fe74ce3358 --- /dev/null +++ b/dg/src/main/jastadd/DGtoDotG.jrag @@ -0,0 +1,65 @@ +aspect DGtoDotG { + + syn DotGraph DependencyGraph.dotGraph() { + DotGraph dg = new DotGraph(); + //create DotGraph + dg.setDependencyGraph(this); + Map<Component,DotNode> componentMap = new HashMap<>(); + for (Component component: getComponentList()) { + DotNode n = new DotNode(); + n.setComponent(component); + dg.addDotNode(n); + componentMap.put(component, n); + } + + for (Component from: getComponentList()) { + for (Component to: from.getToList()) { + if (to.getToList().contains(from)) { + if (to.hashCode() < from.hashCode()) { + componentMap.get(from).addRel(componentMap.get(to)); + } + } else { + componentMap.get(from).addRef(componentMap.get(to)); + } + } + } + + return dg; + } + + syn DotGraph DependencyGraph.dotGraph(Set<Component> components) { + DotGraph dg = new DotGraph(); + //Ensure that components are part of DependencyGraph + Set<Component> subset=new HashSet(); + for (Component c:getComponentList()) + subset.add(c); + subset.retainAll(components); + + //create DotGraph + dg.setDependencyGraph(this); + Map<Component,DotNode> componentMap = new HashMap<>(); + for (Component component: subset) { + DotNode n = new DotNode(); + n.setComponent(component); + dg.addDotNode(n); + componentMap.put(component, n); + } + + for (Component from: subset) { + for (Component to: from.getToList()) { + if (subset.contains(to)) { + if (to.getToList().contains(from)) { + if (to.hashCode() < from.hashCode()) { + componentMap.get(from).addRel(componentMap.get(to)); + } + } else { + componentMap.get(from).addRef(componentMap.get(to)); + } + } + } + } + + return dg; + } + +} diff --git a/dg/src/main/jastadd/DGtoDotG.relast b/dg/src/main/jastadd/DGtoDotG.relast new file mode 100644 index 0000000000000000000000000000000000000000..17412cfc910992dfc544b14dba034705acbb2de8 --- /dev/null +++ b/dg/src/main/jastadd/DGtoDotG.relast @@ -0,0 +1,2 @@ +rel DotGraph.DependencyGraph -> DependencyGraph; +rel DotNode.Component -> Component; diff --git a/dg/src/main/jastadd/DotGraph.jrag b/dg/src/main/jastadd/DotGraph.jrag new file mode 100644 index 0000000000000000000000000000000000000000..08c35a6f6d1f92f2ccfa36815e34af88b6c97aee --- /dev/null +++ b/dg/src/main/jastadd/DotGraph.jrag @@ -0,0 +1,58 @@ +aspect DotGraphToPlantUML { + + inh String DotNode.name(); + eq DotGraph.getDotNode(int i).name() = "v" + i; + + syn String DotNode.label() = name(); + +// syn String CycleGraph.toDot() { +// StringBuilder b = new StringBuilder(); +// b.append("strict digraph cycles {\n"); + +// for (Vertex from: getVertexList()) { +// b.append(" ").append(from.name()).append("[label=\"").append(from.label()).append("\"];\n"); + +// for (Vertex to: from.getRefList()) { +// b.append(" ").append(from.name()).append(" -> ").append(to.name()).append(";\n"); +// } +// for (Vertex to: from.getRelList()) { +// b.append(" ").append(from.name()).append(" -> ").append(to.name()).append("[dir=\"both\"];\n"); +// } +// } + +// b.append("}\n"); +// return b.toString(); +// } + + syn String DotGraph.toPlant(String shape, String relation) { + StringBuilder b = new StringBuilder(); + b.append("@startuml\n") + .append("hide circle\n") + .append("skinparam shadowing false\n") + .append("skinparam monochrome true\n") + .append("skinparam classAttributeIconSize 0\n") + .append("/'Remove automatic namespace generation'/\n") + .append("set namespaceSeparator none\n"); + + for (DotNode from: getDotNodeList()) { + b.append(shape).append(" ") + .append(from.label()).append("\n"); + } + + for (DotNode from: getDotNodeList()) { + for (DotNode to: from.getRefList()) { + b.append(from.label()) + .append(" ").append(relation).append("> ") + .append(to.label()).append("\n"); + } + for (DotNode to: from.getRelList()) { + b.append(from.label()) + .append(" <").append(relation).append("> ") + .append(to.label()).append("\n"); + } + } + + b.append("@enduml\n"); + return b.toString(); + } +} diff --git a/dg/src/main/jastadd/DotGraph.relast b/dg/src/main/jastadd/DotGraph.relast new file mode 100644 index 0000000000000000000000000000000000000000..1bb8ddf8e3d8f73c9018194380449c3e640f5374 --- /dev/null +++ b/dg/src/main/jastadd/DotGraph.relast @@ -0,0 +1,4 @@ +DotGraph ::= DotNode*; +DotNode; +rel DotNode.Ref* -> DotNode; +rel DotNode.Rel* -> DotNode;