diff --git a/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java index 61cb9b0..4486d9d 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithm/CodeGenerator.java @@ -3,15 +3,33 @@ import java.util.ArrayList; import models.*; +import models.dataConstraintModel.IdentifierTemplate; import models.dataFlowModel.*; public class CodeGenerator { - static public ArrayList doGenerate(ResourceDependencyGraph graph){ + static public ArrayList doGenerate(ResourceDependencyGraph graph) { ArrayList codes = new ArrayList<>(); - for(Node n:graph.getNodes()) { + codes.add("public class Main {"); + for (Node n : graph.getNodes()) { + ResourceNode resource = (ResourceNode) n; + String str = "\t" + "private " + + resource.getIdentifierTemplate().getResourceName().substring(0, 1).toUpperCase() + + resource.getIdentifierTemplate().getResourceName().substring(1) + " " + + resource.getIdentifierTemplate().getResourceName() + " = new " + + resource.getIdentifierTemplate().getResourceName().substring(0, 1).toUpperCase() + + resource.getIdentifierTemplate().getResourceName().substring(1) + "("; + if (((StoreAttribute) resource.getAttribute()).isStored()) { + for (Node pn : resource.getSuccessors()) { + str += ((ResourceNode) pn).getIdentifierTemplate().getResourceName().substring(0, 1).toUpperCase() + ((ResourceNode) pn).getIdentifierTemplate().getResourceName().substring(1) + ","; + } + } + str = str + ");"; + codes.add(str); + } + codes.add("}"); + for (Node n : graph.getNodes()) { ResourceNode resource = (ResourceNode) n; codes.add("public class " + resource.getIdentifierTemplate().getResourceName() + " {"); - ((StoreAttribute) resource.getAttribute()).isStored(); codes.add("}"); } return codes; diff --git a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java index ec5e155..fb5e265 100644 --- a/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java +++ b/AlgebraicDataflowArchitectureModel/src/graphicalrefactor/editor/Editor.java @@ -41,7 +41,7 @@ public class Editor { final int PORT_DIAMETER = 8; final int PORT_RADIUS = PORT_DIAMETER / 2; - + private mxGraph graph = null; private DataFlowModel model = null; @@ -64,13 +64,13 @@ public void setModel(DataFlowModel model) { this.model = model; } - + public DataFlowModel open(File file) { try { Parser parser = new Parser(new BufferedReader(new FileReader(file))); try { model = parser.doParse(); - + graph = constructGraph(model); return model; } catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutKeyword @@ -86,7 +86,7 @@ public mxGraph constructGraph(DataFlowModel model) { ResourceDependencyGraph resourceDependencyGraph = model.getResourceDependencyGraph(); - + ((mxGraphModel) graph.getModel()).clear(); Object parent = graph.getDefaultParent(); graph.getModel().beginUpdate(); @@ -94,21 +94,26 @@ mxGeometry geo1 = new mxGeometry(0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo1.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); geo1.setRelative(true); - + mxGeometry geo2 = new mxGeometry(1.0, 0.5, PORT_DIAMETER, PORT_DIAMETER); geo2.setOffset(new mxPoint(-PORT_RADIUS, -PORT_RADIUS)); geo2.setRelative(true); - + HashMap channelsIn = new HashMap<>(); HashMap channelsOut = new HashMap<>(); HashMap resources = new HashMap<>(); - - for (Edge e: resourceDependencyGraph.getEdges()) { + + for (Edge e : resourceDependencyGraph.getEdges()) { if (e instanceof ResourceDependency) { ResourceDependency dependency = (ResourceDependency) e; DataflowChannelGenerator channelGen = dependency.getChannelGenerator(); - if (channelsIn.get(channelGen) == null || channelsOut.get(channelGen) == null) { - Object channel = graph.insertVertex(parent, null, channelGen.getChannelName(), 150, 20, 30, 30); // insert a channel as a vertex + if (channelsIn.get(channelGen) == null || channelsOut.get(channelGen) == null) { + Object channel = graph.insertVertex(parent, null, channelGen.getChannelName(), 150, 20, 30, 30); // insert + // a + // channel + // as + // a + // vertex mxCell port_in = new mxCell(null, geo1, "shape=ellipse;perimter=ellipsePerimeter"); port_in.setVertex(true); graph.addCell(port_in, channel); @@ -120,32 +125,36 @@ } } } - - for (Node n: resourceDependencyGraph.getNodes()) { + + for (Node n : resourceDependencyGraph.getNodes()) { if (n instanceof ResourceNode) { ResourceNode resourceNode = (ResourceNode) n; - Object resource = graph.insertVertex(parent, null, resourceNode.getIdentifierTemplate().getResourceName(), - 20, 20, 80, 30, "shape=ellipse;perimeter=ellipsePerimeter"); // insert a resource as a node + Object resource = graph.insertVertex(parent, null, + resourceNode.getIdentifierTemplate().getResourceName(), 20, 20, 80, 30, + "shape=ellipse;perimeter=ellipsePerimeter"); // insert a resource as a node resources.put(resourceNode, resource); } } - - for (Edge e: resourceDependencyGraph.getEdges()) { + + for (Edge e : resourceDependencyGraph.getEdges()) { if (e instanceof ResourceDependency) { ResourceDependency dependency = (ResourceDependency) e; - dependency.setAttribute(new PushPullAttribute(new PushPullValue[] {PushPullValue.PUSHorPULL, PushPullValue.PULL, PushPullValue.PUSH})); + dependency.setAttribute(new PushPullAttribute( + new PushPullValue[] { PushPullValue.PUSHorPULL, PushPullValue.PULL, PushPullValue.PUSH })); DataflowChannelGenerator channelGen = dependency.getChannelGenerator(); - graph.insertEdge(parent, null, dependency.getAttribute(), resources.get(dependency.getSource()), channelsIn.get(channelGen)); - graph.insertEdge(parent, null, null, channelsOut.get(channelGen), resources.get(dependency.getDestination())); + graph.insertEdge(parent, null, dependency.getAttribute(), resources.get(dependency.getSource()), + channelsIn.get(channelGen)); + graph.insertEdge(parent, null, null, channelsOut.get(channelGen), + resources.get(dependency.getDestination())); } } - + } finally { graph.getModel().endUpdate(); } setTreeLayout(); - - return graph; + + return graph; } public void setTreeLayout() { diff --git a/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java b/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java index 86ec34d..6370c7c 100644 --- a/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java +++ b/AlgebraicDataflowArchitectureModel/src/tests/CodeGeneratorTest.java @@ -21,7 +21,9 @@ ResourceDependencyGraph graph = DataStorageNecessity.run(model); EdgeTransitionSelectable.run(graph); DataStorageDecision.run(graph); - System.out.println(CodeGenerator.doGenerate(graph)); + for(String str:CodeGenerator.doGenerate(graph)) { + System.out.println(str); + } } catch (ExpectedChannel | ExpectedChannelName | ExpectedLeftCurlyBracket | ExpectedInOrOutKeyword | ExpectedStateTransition | ExpectedEquals | ExpectedRHSExpression | WrongLHSExpression | WrongRHSExpression | ExpectedRightBracket e) {