diff --git a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java index 6008f15333c0f70b4bfb06ded5a93124fcb1ff8c..3131de23134ca83bd55cbe933b12423a0826263f 100644 --- a/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java +++ b/src/main/java/avatartranslator/tosysmlv2/Avatar2SysML.java @@ -131,6 +131,7 @@ public class Avatar2SysML { stateList.clear(); avsysml = new StringBuffer(header); indent += indentStep; + searcCountSignals();; communications2SysML(); blocks2SysML(); avsysml.append("}\n"); @@ -282,10 +283,12 @@ public class Avatar2SysML { } } - void attribute2SysML(AvatarAttribute aa, String prefix){ + void attribute2SysML(AvatarAttribute aa, String prefix, boolean init) { avsysml.append(indent + prefix + "attribute " + attributeSysMLname(aa.getName()) + " : "); - if (aa.isInt()) avsysml.append("Integer;\n"); - else avsysml.append("Boolean;\n"); + if (aa.isInt()) avsysml.append("Integer"); + else avsysml.append("Boolean"); + if (init && aa.hasInitialValue()) avsysml.append(" := " + aa.getInitialValue().trim() ); + avsysml.append(";\n"); } void method2SysML(AvatarMethod am){ @@ -301,19 +304,24 @@ public class Avatar2SysML { if (returnType == null) { avsysml.append(indent + "action " + methodSysMLname(am.getName()) + ": '#AvatarVoidMethod' {\n"); indent += indentStep; - for (AvatarAttribute aa : am.getListOfAttributes()) attribute2SysML(aa, "in "); + for (AvatarAttribute aa : am.getListOfAttributes()) attribute2SysML(aa, "in ", false); indent = indent.substring(indentStepSize); avsysml.append(indent + "}\n"); } else { avsysml.append(indent + "calc " + methodSysMLname(am.getName()) + ": '#AvatarCalcMethod' {\n"); indent += indentStep; - for (AvatarAttribute aa : am.getListOfAttributes()) attribute2SysML(aa, "in "); + for (AvatarAttribute aa : am.getListOfAttributes()) attribute2SysML(aa, "in ", false); avsysml.append(indent + "return : " + returnType + ";\n"); indent = indent.substring(indentStepSize); avsysml.append(indent + "}\n"); } } + void signal2SysML(AvatarSignal as){ + + avsysml.append(indent + "part " + signalMap.get(as).getName() + " : " + + (fifoSet.contains(as) ? "'#Fifo'" : "'#Channel'") + ";\n"); + } // handling one block void block2SysML(AvatarBlock block){ String blockSYSMLname = blockSysMLname(block.getName()); @@ -324,15 +332,21 @@ public class Avatar2SysML { indent += indentStep; // attributes -------------------- - for (AvatarAttribute aa : block.getAttributes()) attribute2SysML(aa, ""); + avsysml.append(indent + "// Attributes ---------------------\n"); + for (AvatarAttribute aa : block.getAttributes()) attribute2SysML(aa, "", true); avsysml.append("\n"); // methods -------------------- + avsysml.append(indent + "// Methods ---------------------\n"); for (AvatarMethod am : block.getMethods()) method2SysML(am); avsysml.append("\n"); + avsysml.append(indent + "// Signals ---------------------\n"); + for (AvatarSignal as : block.getSignals()) signal2SysML(as); + avsysml.append("\n"); // state-machine -------------------- statemachine2SysML(block.getStateMachine()); avsysml.append("\n"); // sub-blocks ------------------- + avsysml.append(indent + "// Sub-Blocks ---------------------\n"); for(AvatarBlock blk: avspec.getListOfBlocks()) { if (blk.getFather() == block) block2SysML(blk); } indent = indent.substring(indentStepSize);