diff --git a/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java index 5ba1720..912d44a 100644 --- a/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/algorithms/CodeGenerator.java @@ -15,6 +15,8 @@ import models.algebra.Symbol; import models.algebra.Term; import models.algebra.Type; +import models.dataConstraintModel.ChannelGenerator; +import models.dataConstraintModel.ChannelMember; import models.dataConstraintModel.DataConstraintModel; import models.dataConstraintModel.IdentifierTemplate; import models.dataFlowModel.DataFlowModel; @@ -105,12 +107,27 @@ } } type.addMethod(cons); + for (ChannelGenerator cg : model.getIOChannelGenerators()) { + for (ChannelMember cm : cg.getChannelMembers()) { + if (cm.getIdentifierTemplate().getResourceName().equals(type.getTypeName().toLowerCase())) { + if (cm.getStateTransition().getMessageExpression().getClass() == Term.class) { + ArrayList params = new ArrayList<>(); + params.add(new VariableDeclaration(cm.getIdentifierTemplate().getResourceStateType(),cm.getIdentifierTemplate().getResourceName())); + MethodDeclaration io = new MethodDeclaration( + ((Term) cm.getStateTransition().getMessageExpression()).getSymbol().getImplName(),false, + typeVoid,params); + type.addMethod(io); + } + } + } + } if (flag) type.addMethod(new MethodDeclaration("update", false, typeVoid, vars)); if (((StoreAttribute) rn.getAttribute()).isStored()) { - String str = "new " + rn.getIdentifierTemplate().getResourceStateType() - .getImplementationTypeName()+ "()"; - if(!rn.getIdentifierTemplate().getResourceStateType().getTypeName().contains("List")) str = null; + String str = "new " + rn.getIdentifierTemplate().getResourceStateType().getImplementationTypeName() + + "()"; + if (!rn.getIdentifierTemplate().getResourceStateType().getTypeName().contains("List")) + str = null; type.addField(new FieldDeclaration(rn.getIdentifierTemplate().getResourceStateType(), rn.getIdentifierTemplate().getResourceName(), str)); } @@ -121,11 +138,14 @@ codes.get(0).addMethod(new MethodDeclaration("input", typeVoid)); for (Node n : graph.getNodes()) { ResourceNode rn = (ResourceNode) n; - codes.get(0) - .addMethod(new MethodDeclaration( - "get" + rn.getIdentifierTemplate().getResourceName().substring(0, 1).toUpperCase() - + rn.getIdentifierTemplate().getResourceName().substring(1), - rn.getIdentifierTemplate().getResourceStateType())); + MethodDeclaration get = new MethodDeclaration( + "get" + rn.getIdentifierTemplate().getResourceName().substring(0, 1).toUpperCase() + + rn.getIdentifierTemplate().getResourceName().substring(1), + rn.getIdentifierTemplate().getResourceStateType()); + get.setBody(new Block()); + get.getBody().addStatement( + "return " + rn.getIdentifierTemplate().getResourceName() + "." + get.getName() + "();"); + codes.get(0).addMethod(get); } return codes; } @@ -278,7 +298,8 @@ @Override public Expression getNextStateAccessorFor(IdentifierTemplate target, IdentifierTemplate from) { - Term getter = new Term(new Symbol("get" + target.getResourceName(), 1, Symbol.Type.METHOD)); + Term getter = new Term(new Symbol("get" + target.getResourceName().substring(0, 1).toUpperCase() + + target.getResourceName().substring(1), 1, Symbol.Type.METHOD)); getter.addChild(new Field(target.getResourceName(), target.getResourceStateType())); return getter; }