From 45cfae3364d8299e44f3da663a22d9df90787f69 Mon Sep 17 00:00:00 2001 From: Sophie Coudert <sophie.coudert@telecom-paris.fr> Date: Sun, 26 May 2024 12:25:51 +0200 Subject: [PATCH] transition handler : begin draft... --- .../tosysmlv2/AvatarFromSysML.java | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java index 56e5a606b0..846e80f91a 100644 --- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java +++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java @@ -278,13 +278,57 @@ public class AvatarFromSysML { List<StxTransition> transitions = states[i].getTransitions(); int tsize = transitions.size(); for (int j = 0; j < tsize; j++) { + StxTransition transition = transitions.get(j); AvatarTransition theTransition = new AvatarTransition(theBlock,"", null); transitionList.add(theTransition); theSourceState.addNext(theTransition); - theTransition.setGuard(transitions.get(j).getGuard()); - theTransition.setDelays(transitions.get(j).getMinDelay(), transitions.get(j).getMaxDelay()); - setDistributionLaw(theTransition, transitions.get(j).getDelayDistributionLaw(),transitions.get(j).getDelayExtra()); - } + theTransition.setGuard(transition.getGuard()); + theTransition.setDelays(transition.getMinDelay(), transition.getMaxDelay()); + setDistributionLaw(theTransition, transition.getDelayDistributionLaw(),transition.getDelayExtra()); + // add actions + List<StxAction> actions = transition.getActions(); // should exist only in some cases... + int asize = actions.size(); + for (int k = 0; k < asize; k++) { + StxAction action = actions.get(k); + if(action.getType() == AvatarFromSysMLSyntax.STXASSIGNACTION){ + String leftHandStr = extendIdent(action.getTarget(),blk); + String rightHandStr; + StxTerm value = action.getValue(); + if (value instanceof StxId){ rightHandStr = extendIdent(((StxId)value).getString(),blk); } + else if (value instanceof StxExpr){ rightHandStr = ((StxExpr)value).getString(); } + else { rightHandStr = extendCall((StxCall)value,blk); } + theTransition.addAction(AvatarTerm.createActionFromString(theBlock, leftHandStr + "=" + rightHandStr)); + } + else { // STXMETHODACTION + if (action.getValue() instanceof StxCall) { // else ERROR + String termStr = extendCall((StxCall)action.getValue(),blk); + theTransition.addAction(AvatarTerm.createActionFromString(theBlock, termStr)); + } + } + } + if (transition.getType() == AvatarFromSysMLSyntax.STXTRIVIALTRANSITION) { + // search next state + AvatarStateMachineElement tgtState = getState(transition.getTarget(), theBlock); + theTransition.addNext(tgtState); + } + else if (transition.getType() == AvatarFromSysMLSyntax.STXSENDTRANSITION) { + if(transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRESENDSTATE){ + AvatarStateMachineElement tgtState = getState(transition.getTarget(), theBlock); + if (tgtState instanceof AvatarActionOnSignal) { // ELSE ERROR + theTransition.addNext(getState(transition.getTarget().getTransition(0).getTarget(), theBlock)); + } + else {} + } + else if (transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRERECEIVESTATE){} + else {} + + } + else if (transition.getType() == AvatarFromSysMLSyntax.STXRECEIVETRANSITION) {} + else if (transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION) {} + else if (transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION) {} + else if (transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION) {} + else {} + } } } } -- GitLab