From 28c5687bf369de146c30b1f129fc942bdf885551 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Thu, 8 Feb 2024 18:26:26 +0100
Subject: [PATCH] Adding avatar dependency graph generation to cli

---
 src/main/java/cli/Action.java            | 57 ++++++++++++++++++++++++
 src/main/java/ui/ActionPerformer.java    |  2 +-
 src/main/java/ui/JToolBarMainTurtle.java |  2 +-
 src/main/java/ui/ModeManager.java        |  4 +-
 src/main/java/ui/TGUIAction.java         |  4 +-
 5 files changed, 63 insertions(+), 6 deletions(-)

diff --git a/src/main/java/cli/Action.java b/src/main/java/cli/Action.java
index 34338f99bc..138eb56708 100644
--- a/src/main/java/cli/Action.java
+++ b/src/main/java/cli/Action.java
@@ -142,6 +142,7 @@ public class Action extends Command implements ProVerifOutputListener {
     private final static String AVATAR_DRAW = "avatar-print";
     private final static String AVATAR_PRINT = "avatar-draw";
     private final static String AVATAR_RG_GENERATION = "avatar-rg";
+    private final static String AVATAR_DEPENDENCY_GRAPH = "avatar-dg";
     private final static String AVATAR_UPPAAL_VALIDATE = "avatar-rg-validate";
     private final static String AVATAR_SIMULATION_TO_BRK = "avatar-simulation-to-brk";
     private final static String AVATAR_SIMULATION_SELECT_TRACE = "avatar-simulation-select-trace";
@@ -1615,6 +1616,61 @@ public class Action extends Command implements ProVerifOutputListener {
             }
         };
 
+        Command AvatarDependencyGraphGeneration = new Command() {
+            public String getCommand() {
+                return AVATAR_DEPENDENCY_GRAPH;
+            }
+
+            public String getShortCommand() {
+                return "adg";
+            }
+
+            public String getDescription() {
+                return "Generate the dependency graph of an Avatar model";
+            }
+
+            public String getUsage() {
+                return "<graph name>: name of the file in which the graph is saved";
+            }
+
+            public String executeCommand(String command, Interpreter interpreter) {
+                AvatarSpecification spec = interpreter.mgui.gtm.getAvatarSpecification();
+
+                if (spec == null) {
+                    return "No AVATAR specification";
+                }
+
+                String[] commands = command.split(" ");
+                if (commands.length < 1) {
+                    return Interpreter.BAD;
+                }
+
+                String graphName = commands[0];
+
+                AvatarDependencyGraph adg = spec.makeDependencyGraph();
+                RG rg = new RG("Dependency Graph");
+                rg.graph = adg.getGraph();
+                rg.nbOfStates = rg.graph.getNbOfStates();
+                rg.nbOfTransitions = rg.graph.getNbOfTransitions();
+
+
+                String graphContent = rg.graph.toFullString();
+                try {
+                    FileUtils.saveFile(new File(graphName), graphContent);
+                } catch (Exception e) {
+                  return "Error when saving graph in File: " + e.getMessage();
+                }
+
+                interpreter.mgui.addRG(rg);
+
+
+                return null;
+                //}
+
+                //return null;
+            }
+        };
+
 
 
         Command generateRGFromAvatar = new Command() {
@@ -2380,6 +2436,7 @@ public class Action extends Command implements ProVerifOutputListener {
         addAndSortSubcommand(generic);
 
         addAndSortSubcommand(graphtToAvatar);
+        addAndSortSubcommand(AvatarDependencyGraphGeneration);
 
 
 
diff --git a/src/main/java/ui/ActionPerformer.java b/src/main/java/ui/ActionPerformer.java
index 3e11a673fb..47869d2258 100644
--- a/src/main/java/ui/ActionPerformer.java
+++ b/src/main/java/ui/ActionPerformer.java
@@ -79,7 +79,7 @@ public class ActionPerformer {
             mgui.openLastProject();
         } else if (command.equals(mgui.actions[TGUIAction.ACT_SAVE].getActionCommand())) {
             mgui.saveProject();
-        } else if (command.equals(mgui.actions[TGUIAction.ACT_IA].getActionCommand())) {
+        } else if (command.equals(mgui.actions[TGUIAction.ACT_AI].getActionCommand())) {
                 mgui.ai();
         } else if (command.equals(mgui.actions[TGUIAction.ACT_SAVE_AS_MODEL].getActionCommand())) {
             mgui.saveAsNewModel();
diff --git a/src/main/java/ui/JToolBarMainTurtle.java b/src/main/java/ui/JToolBarMainTurtle.java
index e97500599f..c53b1213a8 100644
--- a/src/main/java/ui/JToolBarMainTurtle.java
+++ b/src/main/java/ui/JToolBarMainTurtle.java
@@ -359,7 +359,7 @@ public  class JToolBarMainTurtle extends JToolBar implements ActionListener
 
         addSeparator();
 
-        ai = add(mgui.actions[TGUIAction.ACT_IA]);
+        ai = add(mgui.actions[TGUIAction.ACT_AI]);
         ai.addMouseListener(mgui.mouseHandler);
 
         addSeparator();
diff --git a/src/main/java/ui/ModeManager.java b/src/main/java/ui/ModeManager.java
index e99622e051..609a05e39d 100644
--- a/src/main/java/ui/ModeManager.java
+++ b/src/main/java/ui/ModeManager.java
@@ -98,7 +98,7 @@ public class ModeManager {
             if (mainBar != null) {
                 mainBar.activateSearch(false);
             }
-            actions[TGUIAction.ACT_IA].setEnabled(true);
+            actions[TGUIAction.ACT_AI].setEnabled(true);
             break;
         case MainGUI.OPENED:
             actions[TGUIAction.ACT_MERGE].setEnabled(true);
@@ -138,7 +138,7 @@ public class ModeManager {
                 mainBar.activateSearch(true);
             }
 
-            actions[TGUIAction.ACT_IA].setEnabled(true);
+            actions[TGUIAction.ACT_AI].setEnabled(true);
 
             // @author: Huy TRUONG
             actions[TGUIAction.ACT_EXTERNAL_SEARCH].setEnabled(true);
diff --git a/src/main/java/ui/TGUIAction.java b/src/main/java/ui/TGUIAction.java
index 07ca9f9d84..b15fe74e87 100644
--- a/src/main/java/ui/TGUIAction.java
+++ b/src/main/java/ui/TGUIAction.java
@@ -74,7 +74,7 @@ public class TGUIAction extends AbstractAction {
     public static final int ACT_MERGE = 228;
     public static final int ACT_SAVE = 2;
 
-    public static final int ACT_IA = 564;
+    public static final int ACT_AI = 564;
 
     public static final int ACT_SAVE_AS_PROJECT = 31;
     public static final int ACT_SAVE_AS_MODEL = 475;
@@ -852,7 +852,7 @@ public class TGUIAction extends AbstractAction {
         actions[ACT_SAVE_AS_PROJECT] = new TAction("saveasproject-command", "Save as Project",IconManager.imgic24, IconManager.imgic25, "Save as Project", "Save an opened or a new TTool modeling under a new project", 0);
         actions[ACT_SAVE_AS_MODEL] = new TAction("saveasmodel-command", "Save as Model",IconManager.imgic24, IconManager.imgic25, "Save as Model", "Save an opened or a new TTool modeling under a new model", 0);
         actions[ACT_QUIT] = new TAction("quit-command", "Quit", IconManager.imgic26, IconManager.imgic27, "Quit",  "Quit TTool", 'Q');
-        actions[ACT_IA] = new TAction("ia-command", "IA", IconManager.imgic152, IconManager.imgic152, "IA",  "Start IA for modeling", 'A');
+        actions[ACT_AI] = new TAction("ai-command", "AI", IconManager.imgic152, IconManager.imgic152, "AI",  "Use AI for modeling", 'A');
 
 
         actions[ACT_SAVE_LOTOS] = new TAction("save-last-lotos", "Save last RT-LOTOS specification",IconManager.imgic24, IconManager.imgic25, "Save last RT-LOTOS specification", "Save the lastest automatically generated RT-LOTOS specification", 0);
-- 
GitLab