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