From 8e09f90669b080febe3443fdcc84f54c88d7e7b0 Mon Sep 17 00:00:00 2001
From: Letitia Li <leli@enst.fr>
Date: Wed, 25 May 2016 15:09:37 +0000
Subject: [PATCH] Simulator UI changes

---
 src/ui/MainGUI.java                           | 30 ++++++++++++
 src/ui/TGComponent.java                       | 46 ++++++++++++++-----
 .../JFrameInteractiveSimulation.java          | 10 ++--
 .../interactivesimulation/TaskTableModel.java |  2 +-
 src/ui/tmldd/TMLArchiArtifact.java            |  8 ++++
 5 files changed, 81 insertions(+), 15 deletions(-)

diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java
index 32fda55f59..ac5b6a10f1 100755
--- a/src/ui/MainGUI.java
+++ b/src/ui/MainGUI.java
@@ -303,6 +303,7 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
     private ArrayList<RunningInfo> runningIDs;
     private ArrayList<LoadInfo> loadIDs;
     private Map<Integer, ArrayList<SimulationTransaction>> transactionMap = new HashMap<Integer, ArrayList<SimulationTransaction>>();
+    private Map<String, String> statusMap = new HashMap<String, String>();
     private JFrameInteractiveSimulation jfis;
     private JFrameAvatarInteractiveSimulation jfais;
 
@@ -7605,7 +7606,13 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
 
         return transactionMap.get(id);
     }
+    public synchronized Map<String,String> getStatus(int id){
+        if (statusMap == null) {
+            return null;
+        }
 
+        return statusMap;
+    }
     public synchronized LoadInfo isLoadID(int id) {
         if (loadIDs == null) {
             return null;
@@ -7641,6 +7648,20 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
             tdp.repaint();
         }
     }
+    public synchronized void resetTransactions() {
+	transactionMap.clear();
+	TDiagramPanel tdp = getCurrentTDiagramPanel();
+        if (tdp != null) {
+            tdp.repaint();
+        }
+    }
+    public synchronized void resetStatus() {
+	statusMap.clear();
+	TDiagramPanel tdp = getCurrentTDiagramPanel();
+        if (tdp != null) {
+            tdp.repaint();
+        }
+    }
 
     public synchronized void addRunningIDTaskState(int _id, String _state) {
         if (runningIDs == null) {
@@ -7702,6 +7723,15 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
             tdp.repaint();
         }
     }
+
+    public synchronized void addStatus(String task, String stat){
+	statusMap.put(task, stat);
+	TDiagramPanel tdp = getCurrentTDiagramPanel();
+        if (tdp != null) {
+            tdp.repaint();
+        }
+    }
+
     public synchronized void addLoadInfo(int _id, double _load, long _energy) {
         if (loadIDs == null) {
             loadIDs = new ArrayList<LoadInfo>();
diff --git a/src/ui/TGComponent.java b/src/ui/TGComponent.java
index 33f312cfac..5844025f79 100755
--- a/src/ui/TGComponent.java
+++ b/src/ui/TGComponent.java
@@ -154,6 +154,9 @@ public abstract class TGComponent implements CDElement, GenericTree {
     public String transaction="";
     public ArrayList<SimulationTransaction> transactions;
 
+    //If task
+    public String runningStatus="";
+
     protected String value; //applies if editable
     protected String name = "TGComponent";
 
@@ -752,9 +755,10 @@ public abstract class TGComponent implements CDElement, GenericTree {
     }
 
 
+
     public void drawRunningDiploID(Graphics g, RunningInfo ri) {
         //System.out.println("Drawing running DIPLO");
-        int wb = 30;
+        int wb = 50;
         int hb = 10;
         int wh = 15;
         int hh = 20;
@@ -810,7 +814,7 @@ public abstract class TGComponent implements CDElement, GenericTree {
             int ww = g.getFontMetrics().stringWidth(s);
 
             if (ri.startTime != null) {
-                g.drawString(ri.startTime, x - sep - wb -wh, y + ((height-hb) / 2) - 1);
+                g.drawString("startTime:"+ri.startTime, x - sep - wb -wh, y + ((height-hb) / 2) - 1);
             }
             g.drawString(s, x - sep - wb -wh -ww, y + 4 + ((height) / 2));
             if (ri.finishTime != null) {
@@ -818,7 +822,7 @@ public abstract class TGComponent implements CDElement, GenericTree {
                 if (s.compareTo("-1") == 0) {
                     s = "?";
                 }
-                g.drawString(s, x - sep - wb -wh, y + ((height+hb) / 2) + 10);
+                g.drawString("endTime:" +s, x - sep - wb -wh, y + ((height+hb) / 2) + 10);
             }
 
             // Transaction
@@ -839,7 +843,7 @@ public abstract class TGComponent implements CDElement, GenericTree {
                         }
                     }
                 }
-                g.drawString("Transactions " +s1, x - sep - wb -wh + 2, y + 4 + ((height) / 2));
+               //g.drawString("Transactions " +s1, x - sep - wb -wh + 2, y + 4 + ((height) / 2));
 
             }
         }
@@ -870,12 +874,18 @@ public abstract class TGComponent implements CDElement, GenericTree {
 	//Draw transactions too??? 
     }
     public void drawTransaction(Graphics g){
-	g.drawString(transaction, x, y+100);
-	int i=0;
-	for (SimulationTransaction t:transactions){
-	  //  g.drawString(t.taskName + " "+t.command, x, y+100+10*i);
-	    i++;
-	}
+	Color c=g.getColor();
+	Color textColor=Color.BLACK;
+	g.setColor(textColor);
+	g.drawString(transaction, x, y+height+10);
+	g.setColor(c);
+    }
+    public void drawStatus(Graphics g){
+	Color c=g.getColor();
+	Color textColor=Color.BLACK;
+	g.setColor(textColor);
+	g.drawString(runningStatus, x+width, y);
+	g.setColor(c);
     }
     public void draw(Graphics g) {
         RunningInfo ri;
@@ -1001,10 +1011,24 @@ public abstract class TGComponent implements CDElement, GenericTree {
                         }
 			ArrayList<SimulationTransaction> ts= tdp.getMGUI().getTransactions(getDIPLOID());
 			if (ts !=null){
-			    transaction = "";
+			    transaction = ts.get(0).taskName+ ":" +ts.get(0).command;
 			    transactions=ts;
 			    drawTransaction(g);
 			}
+			Map<String, String> statMap = tdp.getMGUI().getStatus(getDIPLOID());
+			for (String name:statMap.keySet()){
+			    String stat =statMap.get(name);
+			    for (int i=0; i< nbInternalTGComponent; i++){	
+				Object ob = getChild(i);
+				if (ob instanceof TMLArchiArtifact){
+				     TMLArchiArtifact art = (TMLArchiArtifact) ob;
+				     if (art.getValue().replaceAll(":", "_").equals(name)){
+					art.runningStatus=stat;
+			    		art.drawStatus(g);
+				     }
+				}
+			    }
+			}
 		    
                     }
                     /*if (this instanceof TMLArchiCPUNode) {
diff --git a/src/ui/interactivesimulation/JFrameInteractiveSimulation.java b/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
index 70b1e6c4a9..b497a16045 100755
--- a/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
+++ b/src/ui/interactivesimulation/JFrameInteractiveSimulation.java
@@ -1291,7 +1291,9 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
             }
 	}
     }
-
+    protected void addStatusToNode(String status, String task){
+            mgui.addStatus(task,status);
+    }
     protected boolean loadConfiguration(Node node1) {
         NodeList diagramNl = node1.getChildNodes();
         if (diagramNl == null) {
@@ -1493,6 +1495,7 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
                             }
 
                             if ((id != null) && ((extime != null) || (state != null))) {
+				addStatusToNode(state, name);
                                 updateTaskCyclesAndState(id, extime, state);
                             }
 
@@ -2375,7 +2378,6 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
         Integer i = getInteger(_id);
         Integer ex = getInteger(_extime);
         int row;
-
         String s = "";
         if (_state != null) {
             s += _state;
@@ -2385,7 +2387,7 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
             s+= _extime;
         }
 
-
+	
 
         if ((i != null) && (ex != null)) {
             try {
@@ -2590,6 +2592,8 @@ public  class JFrameInteractiveSimulation extends JFrame implements ActionListen
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_RESET_SIMU].getActionCommand())) {
             mgui.resetRunningID();
             mgui.resetLoadID();
+            mgui.resetTransactions();
+            mgui.resetStatus();
             sendCommand("reset");
             askForUpdate();
         } else if (command.equals(actions[InteractiveSimulationActions.ACT_STOP_SIMU].getActionCommand())) {
diff --git a/src/ui/interactivesimulation/TaskTableModel.java b/src/ui/interactivesimulation/TaskTableModel.java
index 37f1bf1403..1f86334b63 100755
--- a/src/ui/interactivesimulation/TaskTableModel.java
+++ b/src/ui/interactivesimulation/TaskTableModel.java
@@ -197,4 +197,4 @@ public class TaskTableModel extends AbstractTableModel {
 		return;
 	}
 
-}
\ No newline at end of file
+}
diff --git a/src/ui/tmldd/TMLArchiArtifact.java b/src/ui/tmldd/TMLArchiArtifact.java
index 34e77d1aa2..f4e4a2c474 100755
--- a/src/ui/tmldd/TMLArchiArtifact.java
+++ b/src/ui/tmldd/TMLArchiArtifact.java
@@ -75,6 +75,8 @@ public class TMLArchiArtifact extends TGCWithoutInternalComponent implements Swa
 
 		private ArchUnitMEC fatherArchUnitMECType = new CpuMEC();
     
+    public String status="";
+    public String lastTransaction="";
     public TMLArchiArtifact(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);
         
@@ -114,7 +116,13 @@ public class TMLArchiArtifact extends TGCWithoutInternalComponent implements Swa
         
         g.drawRect(x, y, width, height);
 		Color c = g.getColor();
+
+	if (status.equals("running")){
+		g.setColor(ColorManager.CURRENT_COMMAND_RUNNING);
+        }
+	else {
 		g.setColor(ColorManager.CPU_BOX_2);
+        }
 		g.fillRect(x+1, y+1, width-1, height-1);
         g.setColor(c);
 		
-- 
GitLab