diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java index b44f6d564a1568efd7bfea2286f1d28875e1a5e9..26cb4837e1706dc62cc72ba8ae301c8ae4e3af18 100644 --- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java +++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java @@ -80,6 +80,11 @@ public class AvatarFromSysML { if(l.get(i).getName().equals(_name)) return l.get(i); return null; } + private AvatarAttribute getTimerByName(String _name, AvatarBlock _block) { + AvatarAttribute res = getAttributeByName(_name, _block); + if (res != null && res.getType() == AvatarType.TIMER) return res; + return null; + } private AvatarStateMachineElement getState(StxState _s, AvatarBlock _b) { AvatarStateMachineElement s = stateMap.get(_s); if (s == null) { @@ -334,12 +339,32 @@ public class AvatarFromSysML { state.setSignal(getSignal(transition.getSignal())); StxOutMessage profile = transition.getSignal().getChannel().getOutProfile(); HashMap<String, String> receivePayload = transition.getReceivePayload(); - + int nbParams = profile.getSize(); + for (int k = 0; k < nbParams; k++) { + String[] ids = extendPath( receivePayload.get(profile.getFieldName(k)), blk).split(","); + for (String id : ids) state.addValue(id); + } + } + } + else if (transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION) { + if(tgtState instanceof AvatarSetTimer) { + AvatarSetTimer state = (AvatarSetTimer) tgtState; + state.setTimer(getTimerByName(transition.getTimer(), theBlock)); + state.setTimerValue(((StxExpr)transition.getSendPayload().get(0)).getString()); + } + } + else if (transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION) { + if(tgtState instanceof AvatarResetTimer) { + AvatarResetTimer state = (AvatarResetTimer) tgtState; + state.setTimer(getTimerByName(transition.getTimer(), theBlock)); + } + } + else if (transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION) { + if(tgtState instanceof AvatarExpireTimer) { + AvatarExpireTimer state = (AvatarExpireTimer) tgtState; + state.setTimer(getTimerByName(transition.getTimer(), theBlock)); } } - else if (transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION) {} - else if (transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION) {} - else if (transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION) {} else {} } } diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup index bb352a93bc274bfe3f41a48d96f1990ceccc34b7..a6ba87ee7c9dd7dde2a5dde0d7afd9239ba4dc16 100644 --- a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup +++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup @@ -945,6 +945,11 @@ payloadParam ::= :} | payloadParamBegin IDENT LPAR RPAR | payloadParamBegin IDENT + | payloadParamBegin TIMERSETMSG_T LPAR StxExpr:e RPAR {: + argList.add(e); + theTransition.setSendPayload(argList); + argList = null; + :} ; payloadParamBegin ::= PAYLOAD_F EQUAL {: argList= new ArrayList<StxTerm>(); :}; @@ -953,7 +958,7 @@ channelParam ::= CHANNEL_F EQUAL IDENT:id {: theTransition.setSignal(theSignal); :}; -settimerParam ::= CHANNEL_F EQUAL IDENT:id POINT SET_TM {: +settimerParam ::= CHANNEL_F EQUAL IDENT:id POINT SET_TM {: // '@payload' = '#TimerSetMsg'(10) theTransition.setTimer(id.getAvatarName()); :}; resettimerParam ::= CHANNEL_F EQUAL IDENT:id POINT RESET_TM {: