diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java index 0e2fd7d..802aeff 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java @@ -27,18 +27,22 @@ String rename = ((ResourceNode) re.getDestination()).getIdentifierTemplate().getResourceName() .substring(0, 1).toUpperCase() + ((ResourceNode) re.getDestination()).getIdentifierTemplate().getResourceName().substring(1); - if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) == PushPullValue.PUSH) + if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) == PushPullValue.PUSH) { type.addField(new FieldDeclaration(new Type(rename, rename), ((ResourceNode) re.getDestination()).getIdentifierTemplate().getResourceName())); + type.addConstructor(new VariableDeclaration(new Type(rename, rename),((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName())); + } } for (Edge e : rn.getInEdges()) { ResourceDependency re = (ResourceDependency) e; String rename = ((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName() .substring(0, 1).toUpperCase() + ((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName().substring(1); - if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) != PushPullValue.PUSH) + if (((PushPullAttribute) re.getAttribute()).getOptions().get(0) != PushPullValue.PUSH) { type.addField(new FieldDeclaration(new Type(rename, rename), ((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName())); + type.addConstructor(new VariableDeclaration(new Type(rename, rename),((ResourceNode) re.getSource()).getIdentifierTemplate().getResourceName())); + } } if (((StoreAttribute) rn.getAttribute()).isStored()) type.addField(new FieldDeclaration(DataConstraintModel.typeInt, @@ -47,18 +51,36 @@ } return codes; } - - static public ArrayList getCodes(ArrayList codeTree){ + + static public ArrayList getCodes(ArrayList codeTree) { ArrayList codes = new ArrayList<>(); - for(TypeDeclaration type:codeTree) { + for (TypeDeclaration type : codeTree) { codes.add("public class " + type.getTypeName() + "{"); - for(FieldDeclaration field:type.getFields()) { - codes.add("\t" + field.getType().getImplementationTypeName() + " " + field.getName() + ";"); + for (FieldDeclaration field : type.getFields()) { + if(type.getTypeName() != "Main") { + codes.add("\t" + field.getType().getImplementationTypeName() + " " + field.getName() + " = null;"); + }else { + codes.add("\t" + field.getType().getImplementationTypeName() + " " + field.getName() + " = new " + field.getType().getTypeName() + "(" + ");"); + } } codes.add(""); - for(MethodDeclaration method:type.getMethods()) { - codes.add("\t" + "public " + method.getReturnType().getImplementationTypeName() + " " + method.getName() + "{"); - for(VariableDeclaration value:method.getParameters()) { + if (type.getTypeName() != "Main") { + String cons = "\t" + type.getTypeName() + "("; + for(VariableDeclaration constructor:type.getConstructor()) { + cons += constructor.getType().getTypeName() + " " + constructor.getName() + ","; + } + cons = cons.substring(0, cons.length() - 1); + cons += ");"; + codes.add(cons); + for (FieldDeclaration field : type.getFields()) { + if(type.getTypeName().toLowerCase() != field.getName()) codes.add("\t\t" + "this." + field.getName() + " = " + field.getName()); + } + codes.add("\t" + "}"); + } + for (MethodDeclaration method : type.getMethods()) { + codes.add("\t" + "public " + method.getReturnType().getImplementationTypeName() + " " + method.getName() + + "{"); + for (VariableDeclaration value : method.getParameters()) { codes.add("\t\t" + value.getType().getImplementationTypeName() + " " + value.getName()); } codes.add("\t" + "}");