From cfeb5b92b21c9805be798d15d705a3db64d0bfe7 Mon Sep 17 00:00:00 2001
From: Le Van Truong <le.truong@telecom-paris.fr>
Date: Thu, 12 Mar 2020 10:46:19 +0100
Subject: [PATCH] Add Remove transaction button

---
 .../FormalVerificationToolBar.java            |  4 ++
 .../InteractiveSimulationActions.java         |  4 +-
 .../JFrameInteractiveSimulation.java          | 57 +++++++++++++++++++
 .../JPanelTaskTransactions.java               | 28 +++++----
 .../JPanelTransactions.java                   |  6 ++
 .../MainCommandsToolBar.java                  |  6 +-
 .../TransactionTableModel.java                | 12 ++--
 src/main/java/ui/tmldd/TMLArchiCPUNode.java   | 16 +++++-
 8 files changed, 114 insertions(+), 19 deletions(-)

diff --git a/src/main/java/ui/interactivesimulation/FormalVerificationToolBar.java b/src/main/java/ui/interactivesimulation/FormalVerificationToolBar.java
index f9e99c078e..325e5f381a 100755
--- a/src/main/java/ui/interactivesimulation/FormalVerificationToolBar.java
+++ b/src/main/java/ui/interactivesimulation/FormalVerificationToolBar.java
@@ -66,6 +66,7 @@ public class FormalVerificationToolBar extends InteractiveSimulationBar {
         jfis.actions[InteractiveSimulationActions.ACT_RUN_EXPLORATION].setEnabled(b);
         jfis.actions[InteractiveSimulationActions.ACT_ANALYSIS_RG].setEnabled(b);
         jfis.actions[InteractiveSimulationActions.ACT_VIEW_RG].setEnabled(b);
+        jfis.actions[InteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(b);
     }
 
     protected void setButtons() {
@@ -74,6 +75,9 @@ public class FormalVerificationToolBar extends InteractiveSimulationBar {
         button = this.add(jfis.actions[InteractiveSimulationActions.ACT_RESET_SIMU]);
         button.addMouseListener(jfis.mouseHandler);
 
+        button = this.add(jfis.actions[InteractiveSimulationActions.ACT_REMOVE_ALL_TRANS]);
+        button.addMouseListener(jfis.mouseHandler);
+
         this.addSeparator();
 
         button = this.add(jfis.actions[InteractiveSimulationActions.ACT_STOP_SIMU]);
diff --git a/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java b/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java
index 753e691fc2..a8f1487f8e 100755
--- a/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java
+++ b/src/main/java/ui/interactivesimulation/InteractiveSimulationActions.java
@@ -111,7 +111,8 @@ public class InteractiveSimulationActions extends AbstractAction {
     public static final int ACT_SAVE_SD_SVG = 38;
 
     public static final int ACT_SAVE_SD_PNG = 39;
-    public static final int NB_ACTION = 41;
+    public static final int ACT_REMOVE_ALL_TRANS = 41;
+    public static final int NB_ACTION = 42;
 
 
     private  static final TAction [] actions = new TAction[NB_ACTION];
@@ -158,6 +159,7 @@ public class InteractiveSimulationActions extends AbstractAction {
         actions[ACT_RUN_TO_TIME] = new TAction("run-to-time", "Run to time x", IconManager.imgic1304, IconManager.imgic1304, "Run to time x", "Run simulation until time x is reached. Works only if the simulator is \"ready\"", 'R');
         actions[ACT_RUN_X_TRANSACTIONS] = new TAction("run-x-transactions", "Run x transactions", IconManager.imgic1306, IconManager.imgic1306, "Run x transactions", "Run simulation for x transactions. Works only if the simulator is \"ready\"", 'R');
         actions[ACT_RUN_X_COMMANDS] = new TAction("run-x-commands", "Run x commands", IconManager.imgic1308, IconManager.imgic1308, "Run x commands", "Run simulation for x commands. Works only if the simulator is \"ready\"", 'R');
+        actions[ACT_REMOVE_ALL_TRANS] = new TAction("remove-all-trans","Remove all transactions",IconManager.imgic337, IconManager.imgic337,"Remove all transactions", "Remove all the transactions stored before", 'R');
 
         actions[ACT_RUN_EXPLORATION] = new TAction("run-exploration", "Run exploration", IconManager.imgic1326, IconManager.imgic1326, "Run exploration", "Explore branches of the simulation", 'R');
         actions[ACT_RUN_TO_NEXT_BUS_TRANSFER] = new TAction("run-until-bus-transfer", "Run until bus transfer", IconManager.imgic1316, IconManager.imgic1316, "Run until transfer on bus", "Run until a transfer on the indicated bus is performed. Works only if the simulator is \"ready\"", 'R');
diff --git a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
index 6867d4ab52..de314c73b8 100644
--- a/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
+++ b/src/main/java/ui/interactivesimulation/JFrameInteractiveSimulation.java
@@ -53,6 +53,8 @@ import remotesimulation.RemoteConnection;
 import remotesimulation.RemoteConnectionException;
 import tmltranslator.*;
 import ui.*;
+import ui.tmldd.TMLArchiCPUNode;
+import ui.tmldd.TMLArchiDiagramPanel;
 import ui.window.JDialogSelectTasks;
 import ui.util.IconManager;
 
@@ -2346,6 +2348,31 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
                 if (latencyPanel !=null){
                     processLatency();
                 }
+                for(TURTLEPanel _tab : mgui.getTabs()) {
+                    if(_tab instanceof TMLArchiPanel) {
+                        for (TDiagramPanel tdp : _tab.getPanels()) {
+                            if (tdp instanceof TMLArchiDiagramPanel) {
+                                mgui.selectTab(tdp);
+                                for (TGComponent tg : tdp.getComponentList()) {
+                                    if (tg instanceof TMLArchiCPUNode) {
+                                        Vector <SimulationTransaction> _trans = new Vector<SimulationTransaction>();
+                                        TMLArchiCPUNode tmpcpu = (TMLArchiCPUNode) tg;
+                                        for (int i = 0; i < trans.size(); i++) {
+                                            String temp = trans.get(i).deviceName;
+                                            temp = temp.substring(0, temp.indexOf("_"));
+                                            if (tg.getName().equals(temp)) {
+                                                _trans.add(trans.elementAt(i));
+                                            }
+                                        }
+                                        tmpcpu.transferList(_trans);
+                                    }
+                                }
+                                break;
+                            }
+                        }
+                        break;
+                    }
+                }
                 //ttm.setData(trans);
             }
         } catch (Exception e) {
@@ -2559,6 +2586,7 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
         actions[InteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(b);
         actions[InteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(b);
         actions[InteractiveSimulationActions.ACT_RUN_EXPLORATION].setEnabled(b);
+        actions[InteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(b);
 
         if (jpsv != null) {
             jpsv.setVariableButton(b);
@@ -3451,6 +3479,35 @@ public class JFrameInteractiveSimulation extends JFrame implements ActionListene
             transTimes=new HashMap<String, List<String>>();
             processLatency();
             askForUpdate();
+        } else if (command.equals(actions[InteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].getActionCommand())) {
+            sendCommand("rmat 1");
+            updateTransactions();
+
+            if(taskTransactionPanel != null) {
+                taskTransactionPanel.resetTable();
+            }
+            if(taskTransactionPanel != null) {
+                transactionPanel.resetTable();
+            }
+
+            for(TURTLEPanel _tab : mgui.getTabs()) {
+                if(_tab instanceof TMLArchiPanel) {
+                    for (TDiagramPanel tdp : _tab.getPanels()) {
+                        if (tdp instanceof TMLArchiDiagramPanel) {
+                            mgui.selectTab(tdp);
+                            for (TGComponent tg : tdp.getComponentList()) {
+                                if (tg instanceof TMLArchiCPUNode) {
+                                    TMLArchiCPUNode tmpcpu = (TMLArchiCPUNode) tg;
+                                    tmpcpu.resetTransactionsList();
+                                }
+                            }
+                            break;
+                        }
+                    }
+                    break;
+                }
+            }
+
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_STOP_SIMU].getActionCommand())) {
             sendCommand("stop");
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_UPDATE_VARIABLES].getActionCommand())) {
diff --git a/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java b/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java
index 8a64791598..3752218e5d 100644
--- a/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java
+++ b/src/main/java/ui/interactivesimulation/JPanelTaskTransactions.java
@@ -98,15 +98,15 @@ public class JPanelTaskTransactions extends JPanel {
         add(tasks, c2);
         updateTransactionInformationButton = new JButton(jfis.actions[InteractiveSimulationActions.ACT_UPDATE_TRANSACTIONS]);
         add(updateTransactionInformationButton, c2);
-        clearAllOldTransactions = new JButton();
-        clearAllOldTransactions.setText("Clear all old transactions");
-        clearAllOldTransactions.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent actionEvent) {
-                jfis.sendCommand("rmat 1");
-            }
-        });
-        add(clearAllOldTransactions, c2);
+//        clearAllOldTransactions = new JButton();
+//        clearAllOldTransactions.setText("Clear all old transactions");
+//        clearAllOldTransactions.addActionListener(new ActionListener() {
+//            @Override
+//            public void actionPerformed(ActionEvent actionEvent) {
+//                jfis.sendCommand("rmat 1");
+//            }
+//        });
+//        add(clearAllOldTransactions, c2);
         tasks.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent actionEvent) {
@@ -133,6 +133,12 @@ public class JPanelTaskTransactions extends JPanel {
         return ttm;
     }
 
+    public void resetTable() {
+        if (ttm != null) {
+            ttm.setData(_trans,"----");
+        }
+    }
+
     public int getNbOfTransactions() {
 
         try {
@@ -147,7 +153,9 @@ public class JPanelTaskTransactions extends JPanel {
 
 
     public void setData(Vector<SimulationTransaction> _trans) {
-      this._trans = _trans;
+        this._trans = _trans;
+        ttm.setData(_trans,tasks.getSelectedItem().toString());
+
     }
 
 }
diff --git a/src/main/java/ui/interactivesimulation/JPanelTransactions.java b/src/main/java/ui/interactivesimulation/JPanelTransactions.java
index b09a920c92..b344b60162 100755
--- a/src/main/java/ui/interactivesimulation/JPanelTransactions.java
+++ b/src/main/java/ui/interactivesimulation/JPanelTransactions.java
@@ -143,6 +143,12 @@ public  class JPanelTransactions extends JPanel  {
 	return ttm;
     }
 
+    public void resetTable() {
+        if (ttm != null) {
+            ttm.setData(null);
+        }
+    }
+
     public int getNbOfTransactions() {
 	
 	try {
diff --git a/src/main/java/ui/interactivesimulation/MainCommandsToolBar.java b/src/main/java/ui/interactivesimulation/MainCommandsToolBar.java
index cf7f616bc4..1ee63bf1e3 100755
--- a/src/main/java/ui/interactivesimulation/MainCommandsToolBar.java
+++ b/src/main/java/ui/interactivesimulation/MainCommandsToolBar.java
@@ -74,6 +74,7 @@ public class MainCommandsToolBar extends InteractiveSimulationBar {
 		jfis.actions[InteractiveSimulationActions.ACT_RUN_UNTIL_CHANNEL_ACCESS].setEnabled(b);
         jfis.actions[InteractiveSimulationActions.ACT_STOP_SIMU].setEnabled(b);
 		jfis.actions[InteractiveSimulationActions.ACT_RESET_SIMU].setEnabled(b);
+		jfis.actions[InteractiveSimulationActions.ACT_REMOVE_ALL_TRANS].setEnabled(b);
     }
     
     protected void setButtons() {
@@ -81,7 +82,10 @@ public class MainCommandsToolBar extends InteractiveSimulationBar {
         
         button = this.add(jfis.actions[InteractiveSimulationActions.ACT_RESET_SIMU]);
         button.addMouseListener(jfis.mouseHandler);
-        
+
+		button = this.add(jfis.actions[InteractiveSimulationActions.ACT_REMOVE_ALL_TRANS]);
+		button.addMouseListener(jfis.mouseHandler);
+
 		this.addSeparator();
 		
 		button = this.add(jfis.actions[InteractiveSimulationActions.ACT_STOP_SIMU]);
diff --git a/src/main/java/ui/interactivesimulation/TransactionTableModel.java b/src/main/java/ui/interactivesimulation/TransactionTableModel.java
index 64205a920c..f9803392ee 100755
--- a/src/main/java/ui/interactivesimulation/TransactionTableModel.java
+++ b/src/main/java/ui/interactivesimulation/TransactionTableModel.java
@@ -126,11 +126,13 @@ public class TransactionTableModel extends AbstractTableModel {
     }
 
     public synchronized void setData(Vector<SimulationTransaction> _trans) {
-	data = new SimulationTransaction[_trans.size()];
-	for(int i=0; i<_trans.size(); i++) {
-	    data[i] = _trans.get(i);
-	}
-	fireTableStructureChanged();
+        if(_trans != null){
+            data = new SimulationTransaction[_trans.size()];
+            for(int i=0; i<_trans.size(); i++) {
+                data[i] = _trans.get(i);
+            }
+            fireTableStructureChanged();
+        }
     }
 
 }
diff --git a/src/main/java/ui/tmldd/TMLArchiCPUNode.java b/src/main/java/ui/tmldd/TMLArchiCPUNode.java
index 20bc76b997..d7232cdf84 100755
--- a/src/main/java/ui/tmldd/TMLArchiCPUNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiCPUNode.java
@@ -45,11 +45,14 @@ import org.w3c.dom.NodeList;
 import tmltranslator.HwCPU;
 import tmltranslator.modelcompiler.ArchUnitMEC;
 import ui.*;
+import ui.interactivesimulation.SimulationTransaction;
 import ui.util.IconManager;
 import ui.window.JDialogCPUNode;
 
 import javax.swing.*;
 import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Vector;
 
 /**
@@ -83,6 +86,7 @@ public class TMLArchiCPUNode extends TMLArchiNode implements SwallowTGComponent,
     private int cacheMiss = HwCPU.DEFAULT_CACHE_MISS;
     private int encryption = HwCPU.ENCRYPTION_NONE;
     private String operation = "";
+    private  List<SimulationTransaction> transactionsTemp;
 
     public TMLArchiCPUNode(int _x, int _y, int _minX, int _maxX, int _minY, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp) {
         super(_x, _y, _minX, _maxX, _minY, _maxY, _pos, _father, _tdp);
@@ -195,6 +199,15 @@ public class TMLArchiCPUNode extends TMLArchiNode implements SwallowTGComponent,
 
     }
 
+    public void resetTransactionsList() {
+        if(transactionsTemp != null)
+            transactionsTemp.removeAll(transactionsTemp);
+    }
+
+    public void transferList(Vector <SimulationTransaction> _trans) {
+        transactionsTemp = new ArrayList<SimulationTransaction>(_trans);
+    }
+
     public String getNodeName() {
         return name;
     }
@@ -205,8 +218,7 @@ public class TMLArchiCPUNode extends TMLArchiNode implements SwallowTGComponent,
         String errors = "";
         int tmp;
         String tmpName;
-
-        JDialogCPUNode dialog = new JDialogCPUNode(getTDiagramPanel().getMainGUI(), frame, "Setting CPU attributes", this, MECType, transactions);
+        JDialogCPUNode dialog = new JDialogCPUNode(getTDiagramPanel().getMainGUI(), frame, "Setting CPU attributes", this, MECType, transactionsTemp);
         dialog.setSize(500, 450);
         GraphicLib.centerOnParent(dialog, 500, 450);
         // dialog.show(); // blocked until dialog has been closed
-- 
GitLab