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