From bcf8bc8a1753f78405c88997eae70209fc138afa Mon Sep 17 00:00:00 2001
From: Sophie Coudert <sophie.coudert@telecom-paris.fr>
Date: Sun, 26 May 2024 13:47:10 +0200
Subject: [PATCH] transition handler : receive transition in progress...

---
 .../tosysmlv2/AvatarFromSysML.java            | 41 ++++++++++++-------
 .../tosysmlv2/AvatarFromSysMLSyntax.java      | 10 ++++-
 2 files changed, 35 insertions(+), 16 deletions(-)

diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
index 846e80f91a..b44f6d564a 100644
--- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysML.java
@@ -306,24 +306,37 @@ public class AvatarFromSysML {
                                 }
                             }
                         }
-                        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));
+                        if(transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRESENDSTATE ||
+                           transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRERECEIVESTATE)
+                            transition = transition.getTarget().getTransition(0);
+
+                        AvatarStateMachineElement tgtState = getState(transition.getTarget(), theBlock);
+                        theTransition.addNext(tgtState);
+
+                        if (transition.getType() == AvatarFromSysMLSyntax.STXSENDTRANSITION) {
+                            if(tgtState instanceof AvatarActionOnSignal) {
+                                AvatarActionOnSignal state = (AvatarActionOnSignal)tgtState;
+                                state.setSignal( getSignal(transition.getSignal()));
+                                ArrayList<StxTerm> sendPayload = transition.getSendPayload();
+                                for(StxTerm p: sendPayload) {
+                                    if (p instanceof StxId){
+                                        String[] ids = extendPath(((StxId)p).getString(),blk).split(",");
+                                        for (String id : ids) { state.addValue(id.trim()); }
+                                    }
+                                    else if (p instanceof StxExpr){ state.addValue( ((StxExpr)p).getString() ); }
+                                    else { state.addValue( extendCall((StxCall)p,blk) ); }
                                 }
-                                else {}
                             }
-                            else if (transition.getTarget().getType() == AvatarFromSysMLSyntax.STXPRERECEIVESTATE){}
-                            else {}
+                        }
+                        else if (transition.getType() == AvatarFromSysMLSyntax.STXRECEIVETRANSITION) {
+                            if(tgtState instanceof AvatarActionOnSignal) {
+                                AvatarActionOnSignal state = (AvatarActionOnSignal)tgtState;
+                                state.setSignal(getSignal(transition.getSignal()));
+                                StxOutMessage profile = transition.getSignal().getChannel().getOutProfile();
+                                HashMap<String, String> receivePayload = transition.getReceivePayload();
 
+                            }
                         }
-                        else if (transition.getType() == AvatarFromSysMLSyntax.STXRECEIVETRANSITION) {}
                         else if (transition.getType() == AvatarFromSysMLSyntax.STXSETTIMERTRANSITION) {}
                         else if (transition.getType() == AvatarFromSysMLSyntax.STXRESETTIMERTRANSITION) {}
                         else if (transition.getType() == AvatarFromSysMLSyntax.STXEXPIRETIMERTRANSITION) {}
diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
index b667bc41cb..f208a86c72 100644
--- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
+++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java
@@ -412,6 +412,7 @@ public class AvatarFromSysMLSyntax {
     public static class StxSignal extends StxElement {
         private String name;
         private boolean input;
+        private StxChannel channel;
         public StxSignal(Location _left, Location _right, String _name){
             super(_left, _right);
             name = _name;
@@ -421,7 +422,9 @@ public class AvatarFromSysMLSyntax {
             name = _name;
         }
         public void setInput(boolean _b) { input = _b; }
-        public boolean isInput() { return input; }
+        public void setChannel(StxChannel _c) { channel = _c; }
+        public StxChannel getChannel() { return channel; }
+       public boolean isInput() { return input; }
         public String getName() { return name; }
     }
     public static class StxInMessage extends StxStructure {
@@ -462,7 +465,10 @@ public class AvatarFromSysMLSyntax {
         }
         public void complete() {
             fieldMap.forEach(new Complete());
-            inMessage.channel.setOutProfile(this);
+            channel = inMessage.channel;
+            channel.setOutProfile(this);
+            channel.getSignalA().setChannel(channel);
+            channel.getSignalB().setChannel(channel);
         }
     }
     public static class StxState extends StxElement {
-- 
GitLab