From cab9e55b46423faaefa4e28f855c1f7e3d5e8250 Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr> Date: Fri, 7 Jul 2023 15:30:59 +0200 Subject: [PATCH] Resolving bug on main diagram in reset proverif backtracing --- src/main/java/ai/AIBlock.java | 4 +--- src/main/java/ai/AIStateMachine.java | 21 +++++++++++++++++---- src/main/java/myutil/AIInterface.java | 10 +++++----- src/main/java/ui/AvatarDesignPanel.java | 7 ++++++- src/main/java/ui/MainGUI.java | 1 + src/main/java/ui/window/JFrameAI.java | 20 +++++++++++++++++++- 6 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/main/java/ai/AIBlock.java b/src/main/java/ai/AIBlock.java index 6c23d28356..5780fd4e33 100644 --- a/src/main/java/ai/AIBlock.java +++ b/src/main/java/ai/AIBlock.java @@ -73,7 +73,7 @@ public class AIBlock extends AIInteract { "#Respect: Two connected signals must have " + "the same list of attributes, even if they are " + "defined in two different blocks. One of them must be output, the other one must be input" + - "#Respect: all input signals must have exactly one corresponding output signal, i.e. an ouput signal with the same name" + + "#Respect: all input signals must have exactly one corresponding output signal, i.e., an ouput signal with the same name" + "#Respect: two signals with the same name must be defined in different blocks"; /*"and after " + "the blocks, add the " + @@ -90,8 +90,6 @@ public class AIBlock extends AIInteract { "# A signal must be involved in one connection exactly";*/ - - public static String[] KNOWLEDGE_STAGES = {KNOWLEDGE_ON_JSON_FOR_BLOCKS_AND_ATTRIBUTES, KNOWLEDGE_ON_JSON_FOR_BLOCKS_AND_CONNECTIONS}; AvatarSpecification specification; private String[] QUESTION_IDENTIFY_SYSTEM_BLOCKS = {"From the following system specification, using the specified JSON format, identify the " + diff --git a/src/main/java/ai/AIStateMachine.java b/src/main/java/ai/AIStateMachine.java index 12915fa042..cf608d7a3d 100644 --- a/src/main/java/ai/AIStateMachine.java +++ b/src/main/java/ai/AIStateMachine.java @@ -44,6 +44,7 @@ import avatartranslator.AvatarBlock; import avatartranslator.AvatarSpecification; import avatartranslator.tosysmlv2.AVATAR2SysMLV2; import myutil.TraceManager; +import org.apache.batik.anim.timing.Trace; import java.util.ArrayList; @@ -125,18 +126,22 @@ public class AIStateMachine extends AIInteract implements AISysMLV2DiagramConten for(String blockName: blockNames) { TraceManager.addDev("Handling block: " + blockName); done = false; cpt = 0; + int max = 3; + + questionT = QUESTION_IDENTIFY_STATE_MACHINE[0] + blockName; - while (!done && cpt < 3) { + while (!done && cpt < max) { done = true; boolean ok = makeQuestion(questionT); if (!ok) { TraceManager.addDev("Make question failed"); } - if (specification != null) { + if (ok && specification != null) { AvatarBlock b = specification.getBlockWithName(blockName); if (b != null) { - ArrayList<String> errors = b.makeStateMachineFromJSON(extractJSON(), cpt == 2); + TraceManager.addDev("Making the state machine of " + blockName); + ArrayList<String> errors = b.makeStateMachineFromJSON(extractJSON(), cpt == (max - 1)); if ((errors != null) && (errors.size() > 0)) { done = false; questionT = "Your answer was not correct because of the following errors:"; @@ -150,9 +155,11 @@ public class AIStateMachine extends AIInteract implements AISysMLV2DiagramConten } else { TraceManager.addDev("ERROR: no block named " + blockName); } + } else { + TraceManager.addDev("Null specification"); } - waitIfConditionTrue(!done && cpt < 3); + waitIfConditionTrue(!done && cpt < max); cpt ++; } @@ -167,6 +174,12 @@ public class AIStateMachine extends AIInteract implements AISysMLV2DiagramConten } public Object applyAnswer(Object input) { + TraceManager.addDev("Apply answer in AIState Machine"); + if (specification == null) { + TraceManager.addDev("Null spec"); + } else { + TraceManager.addDev("Non null spec"); + } if (input == null) { return specification; } diff --git a/src/main/java/myutil/AIInterface.java b/src/main/java/myutil/AIInterface.java index 9d162891d7..fc0e46f420 100644 --- a/src/main/java/myutil/AIInterface.java +++ b/src/main/java/myutil/AIInterface.java @@ -117,9 +117,9 @@ public class AIInterface { try { if (connection == null) { - TraceManager.addDev("Connecting to " + urlText); + //TraceManager.addDev("Connecting to " + urlText); connection = (HttpURLConnection) new URL(urlText).openConnection(); - TraceManager.addDev("Connection to " + urlText + " is opened"); + //TraceManager.addDev("Connection to " + urlText + " is opened"); connection.setRequestMethod("POST"); //connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); @@ -131,7 +131,7 @@ public class AIInterface { disconnect(); throw new AIInterfaceException(CONNECTION_PB); } - TraceManager.addDev("Connection done with key: " + key); + //TraceManager.addDev("Connection done with key: " + key); } private void disconnect() throws AIInterfaceException { @@ -157,11 +157,11 @@ public class AIInterface { for(AIKnowledge aik: knowledge) { sub = new org.json.JSONObject(); sub.put("role", "user"); - TraceManager.addDev("Putting user knowledge: " + aik.userKnowledge); + //TraceManager.addDev("Putting user knowledge: " + aik.userKnowledge); sub.put("content", aik.userKnowledge); array.put(sub); sub = new org.json.JSONObject(); - TraceManager.addDev("Putting assistant knowledge: " + aik.assistantKnowledge); + //TraceManager.addDev("Putting assistant knowledge: " + aik.assistantKnowledge); sub.put("role", "assistant"); sub.put("content", aik.assistantKnowledge); array.put(sub); diff --git a/src/main/java/ui/AvatarDesignPanel.java b/src/main/java/ui/AvatarDesignPanel.java index 9ea54f3eff..d93d369a46 100644 --- a/src/main/java/ui/AvatarDesignPanel.java +++ b/src/main/java/ui/AvatarDesignPanel.java @@ -78,6 +78,7 @@ public class AvatarDesignPanel extends TURTLEPanel { if (_mgui == null) { //for unit testing only abdp = new AvatarBDPanel(null, null); + tdp = abdp; return; } // Issue #41 Ordering of tabbed panes @@ -299,7 +300,7 @@ public class AvatarDesignPanel extends TURTLEPanel { public TGComponent hasCheckableMasterMutex() { TGComponent tgc, tgctmp; for (int i = 0; i < panels.size(); i++) { - tdp = panels.get(i); + TDiagramPanel tdp = panels.get(i); if (tdp instanceof AvatarSMDPanel) { Iterator<TGComponent> iterator = panels.get(i).getComponentList().listIterator(); while (iterator.hasNext()) { @@ -318,6 +319,7 @@ public class AvatarDesignPanel extends TURTLEPanel { public void removeAllMutualExclusionWithMasterMutex() { TGComponent tgc; + TDiagramPanel tdp; for (int i = 0; i < panels.size(); i++) { tdp = panels.get(i); if (tdp instanceof AvatarSMDPanel) { @@ -332,6 +334,7 @@ public class AvatarDesignPanel extends TURTLEPanel { public void reinitMutualExclusionStates() { TGComponent tgc; + TDiagramPanel tdp; for (int i = 0; i < panels.size(); i++) { tdp = panels.get(i); if (tdp instanceof AvatarSMDPanel) { @@ -373,6 +376,7 @@ public class AvatarDesignPanel extends TURTLEPanel { } public void resetModelBacktracingProVerif() { + TDiagramPanel tdp; if (abdp == null) { return; } @@ -454,6 +458,7 @@ public class AvatarDesignPanel extends TURTLEPanel { } public void modelBacktracingProVerif(ProVerifOutputAnalyzer pvoa) { + TDiagramPanel tdp; if (abdp == null) { return; diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java index bebaf52c27..8cdba52409 100644 --- a/src/main/java/ui/MainGUI.java +++ b/src/main/java/ui/MainGUI.java @@ -8299,6 +8299,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per } public TDiagramPanel getCurrentMainTDiagramPanel() { + TraceManager.addDev("Main selected index:" + mainTabbedPane.getSelectedIndex()); return tabs.elementAt(mainTabbedPane.getSelectedIndex()).tdp; } diff --git a/src/main/java/ui/window/JFrameAI.java b/src/main/java/ui/window/JFrameAI.java index c5a5b1648b..f61d3ed792 100644 --- a/src/main/java/ui/window/JFrameAI.java +++ b/src/main/java/ui/window/JFrameAI.java @@ -119,6 +119,8 @@ public class JFrameAI extends JFrame implements ActionListener { chats = new ArrayList<>(); makeComponents(); + TraceManager.addDev("Selected TDP = " + mgui.getCurrentMainTDiagramPanel().getClass()); + } public void setIcon(ChatData _data, Icon newIcon) { @@ -144,7 +146,8 @@ public class JFrameAI extends JFrame implements ActionListener { help(); } }); - helpPopup.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "closeJlabel"); + helpPopup.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), + "closeJlabel"); helpPopup.getActionMap().put("closeJlabel", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { @@ -305,6 +308,7 @@ public class JFrameAI extends JFrame implements ActionListener { } private void start() { + TraceManager.addDev("Start in JFrameAI"); currentChatIndex = answerPane.getSelectedIndex(); ChatData selected = selectedChat(); @@ -315,7 +319,9 @@ public class JFrameAI extends JFrame implements ActionListener { } if (chatDataMade) { + TraceManager.addDev("chatDataMade in JFameAI"); String selectedClass = AIInteractClass[listOfPossibleActions.getSelectedIndex()]; + TraceManager.addDev("SelectedClass: " + selectedClass); selected.aiInteract = ai.AIInteract.getInstance("ai." + selectedClass, selected.aiChatData); @@ -324,7 +330,10 @@ public class JFrameAI extends JFrame implements ActionListener { return; } + TraceManager.addDev("Selected aiinteract: " + selected.aiInteract.getClass()); + if (selected.aiInteract instanceof AIAvatarSpecificationRequired) { + TraceManager.addDev("****** AIAvatarSpecificationRequired identified *****"); TDiagramPanel tdp = mgui.getCurrentMainTDiagramPanel(); boolean found = false; if (tdp instanceof AvatarBDPanel) { @@ -332,14 +341,22 @@ public class JFrameAI extends JFrame implements ActionListener { } if (found) { + TraceManager.addDev("BD panel: ok"); boolean ret = mgui.checkModelingSyntax(true); if (ret) { + TraceManager.addDev("****** Syntax checking OK *****"); ((AIAvatarSpecificationRequired) (selected.aiInteract)).setAvatarSpecification(mgui.gtm.getAvatarSpecification()); + } else { + TraceManager.addDev("\n\n*****Syntax checking failed: no avatar spec***\n\n"); } + } else { + TraceManager.addDev("Selected panel is not correct. tdp=" + tdp.getClass()); + return; } } if (selected.aiInteract instanceof AISysMLV2DiagramContent) { + TraceManager.addDev("****** AISysMLV2DiagramContent identified *****"); TDiagramPanel tdp = mgui.getCurrentTDiagramPanel(); String[] validDiagrams = ((AISysMLV2DiagramContent)(selected.aiInteract)).getValidDiagrams(); String className = tdp.getClass().getName(); @@ -413,6 +430,7 @@ public class JFrameAI extends JFrame implements ActionListener { } else if (selectedChat.aiInteract instanceof ai.AIDesignPropertyIdentification) { // nothing up to now :-) } else if (selectedChat.aiInteract instanceof ai.AIStateMachine) { + TraceManager.addDev("Applying state machines"); applyIdentifyStateMachines(selectedChat.aiInteract.applyAnswer(null)); } else if (selectedChat.aiInteract instanceof ai.AIAmulet) { applyMutations(); -- GitLab