From fac537e3757b2c62f75b55e6338ca0dc6b16ad46 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Tue, 16 Jul 2024 13:22:14 +0200
Subject: [PATCH] saving in sysml v2 from cli with command ass2

---
 src/main/java/cli/Action.java                 | 64 +++++++++++++++++++
 src/main/java/cli/Interpreter.java            |  1 +
 .../DiplodocusSimulatorTest.java              |  2 +
 3 files changed, 67 insertions(+)

diff --git a/src/main/java/cli/Action.java b/src/main/java/cli/Action.java
index ce0adc24c9..8990a32e67 100644
--- a/src/main/java/cli/Action.java
+++ b/src/main/java/cli/Action.java
@@ -49,6 +49,7 @@ import avatartranslator.modelcheckervalidator.ModelCheckerValidator;
 import avatartranslator.mutation.ApplyMutationException;
 import avatartranslator.mutation.AvatarMutation;
 import avatartranslator.mutation.ParseMutationException;
+import avatartranslator.tosysmlv2.AVATAR2SysMLV2;
 import common.ConfigurationTTool;
 import common.SpecConfigTTool;
 import graph.AUTGraph;
@@ -153,6 +154,7 @@ public class Action extends Command implements ProVerifOutputListener {
     private final static String AVATAR_SIMULATION_OPEN_WINDOW = "avatar-simulation-open-window";
     private final static String AVATAR_SIMULATION_GENERIC = "avatar-simulation-generic";
     private final static String AVATAR_LOAD_FROM_SYSMLV2 = "avatar-load-sysmlv2";
+    private final static String AVATAR_SAVE_FROM_SYSMLV2 = "avatar-save-sysmlv2";
     private final static String AVATAR_SYNTAX_CHECKER = "avatar-syntax-checker";
 
     private final static String AVATAR_COMPLEXITY = "avatar-complexity";
@@ -2371,6 +2373,67 @@ public class Action extends Command implements ProVerifOutputListener {
             }
         };
 
+        Command avatarSaveFromSysMLV2 = new Command() {
+            public String getCommand() {
+                return AVATAR_SAVE_FROM_SYSMLV2;
+            }
+
+            public String getShortCommand() {
+                return "ass2";
+            }
+
+            public String getDescription() {
+                return "Save an Avatar specification to a SysML v2 textual description";
+            }
+
+            public String getUsage() {
+                String usage =  "avatar-save-sysmlv2 <path-to-file>\n";
+                return usage;
+
+            }
+
+            public String executeCommand(String command, Interpreter interpreter) {
+
+                String[] commands = command.split(" ");
+
+                if (commands.length < 1) {
+                    return Interpreter.BAD;
+                }
+
+                AvatarSpecification spec = as;
+                if (spec == null) {
+                    if (interpreter.hasAModel()) {
+                        spec = interpreter.mgui.gtm.getAvatarSpecification();
+                    }
+                    if (spec == null) {
+                        return Interpreter.AVATAR_NO_SPEC;
+                    }
+                }
+
+                List<AvatarError> errors = AvatarSyntaxChecker.checkSyntaxErrors(spec);
+
+                if (errors.size() > 0) {
+                    return Interpreter.BAD_AVATAR_SPEC;
+                }
+
+                AVATAR2SysMLV2 toS = new AVATAR2SysMLV2(spec);
+                StringBuffer sb = toS.generateSysMLV2Spec(true, true, null);
+
+                if (sb == null) {
+                    return Interpreter.BAD_AVATAR_SPEC;
+                }
+
+                try {
+                    FileUtils.saveFile(new File(commands[0]), sb.toString());
+                } catch (Exception e) {
+                    return interpreter.BAD_FILE_NAME;
+                }
+
+                return null;
+            }
+        };
+
+
         Command avatarSyntaxChecker = new Command() {
             public String getCommand() {
                 return AVATAR_SYNTAX_CHECKER;
@@ -2576,6 +2639,7 @@ public class Action extends Command implements ProVerifOutputListener {
         addAndSortSubcommand(avatarSimulationOpenWindow);
         addAndSortSubcommand(avatarSimulationGeneric);
         addAndSortSubcommand(avatarLoadFromSysMLV2);
+        addAndSortSubcommand(avatarSaveFromSysMLV2);
         addAndSortSubcommand(avatarSyntaxChecker);
 
         addAndSortSubcommand(generic);
diff --git a/src/main/java/cli/Interpreter.java b/src/main/java/cli/Interpreter.java
index 52e9afed35..73b46bcdea 100644
--- a/src/main/java/cli/Interpreter.java
+++ b/src/main/java/cli/Interpreter.java
@@ -80,6 +80,7 @@ public class Interpreter implements Runnable, TerminalProviderInterface {
     public final static String BAD_DIRECTORY = "Unvalid directory identifier";
     public final static String BAD_FILE = "Badly formatted file";
     public final static String AVATAR_NO_SPEC = "No Avatar specification";
+    public final static String BAD_AVATAR_SPEC = "Avatar specification is incorrect";
     public final static String TML_NO_SPEC = "No TML specification";
     public final static String TMAP_NO_SPEC = "No TMAP specification";
     public final static String NO_WINDOW = "The targeted window does not exist";
diff --git a/ttool/src/test/java/tmltranslator/DiplodocusSimulatorTest.java b/ttool/src/test/java/tmltranslator/DiplodocusSimulatorTest.java
index a50719ba50..b789a2dabe 100644
--- a/ttool/src/test/java/tmltranslator/DiplodocusSimulatorTest.java
+++ b/ttool/src/test/java/tmltranslator/DiplodocusSimulatorTest.java
@@ -30,6 +30,8 @@ public class DiplodocusSimulatorTest extends AbstractTest {
     final int [] NB_Of_TRANSTIONS = {118, 1053};
     final int [] MIN_CYCLES = {192, 2510};
     final int [] MAX_CYCLES = {279, 2510};
+
+
     //model for daemon task
     final String [] MODELS_DAEMON = {"daemontest1", "daemontest2"};
     final int [] NB_Of_DAEMON_STATES = {8, 114};
-- 
GitLab