From bc5338b0144636ccd078ffa73bf9aa372f55706c Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Thu, 2 May 2024 16:54:10 +0200
Subject: [PATCH] multi-mapping automated refactoring when renaming a
 communication component

---
 src/main/java/ui/TDiagramPanel.java           |  4 ++
 src/main/java/ui/tmldd/TMLArchiBUSNode.java   |  4 ++
 .../java/ui/tmldd/TMLArchiBridgeNode.java     |  2 +
 src/main/java/ui/tmldd/TMLArchiCPNode.java    |  2 +
 .../tmldd/TMLArchiCommunicationArtifact.java  | 19 ++++++
 .../java/ui/tmldd/TMLArchiCrossbarNode.java   | 21 +------
 src/main/java/ui/tmldd/TMLArchiDMANode.java   |  2 +
 .../java/ui/tmldd/TMLArchiDiagramPanel.java   | 24 +++++++
 .../java/ui/tmldd/TMLArchiFirewallNode.java   |  4 +-
 .../java/ui/tmldd/TMLArchiMemoryNode.java     |  2 +
 .../java/ui/tmldd/TMLArchiRouterNode.java     |  2 +
 src/main/java/ui/tmldd/TMLArchiVGMNNode.java  | 63 +------------------
 12 files changed, 69 insertions(+), 80 deletions(-)

diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java
index de1835932f..b78ae41f53 100644
--- a/src/main/java/ui/TDiagramPanel.java
+++ b/src/main/java/ui/TDiagramPanel.java
@@ -336,6 +336,10 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
 
     private FontMetrics savedFontMetrics = null;
 
+    public boolean changeOnComponent(TGComponent tgc, String oldValue, String newValue) {
+        return true;
+    }
+
     public int stringWidth(Graphics g, String str) {
         if (this.savedFontMetrics == null)
             this.savedFontMetrics = g.getFontMetrics(new Font(Font.SANS_SERIF, Font.PLAIN, this.getFontSize()));
diff --git a/src/main/java/ui/tmldd/TMLArchiBUSNode.java b/src/main/java/ui/tmldd/TMLArchiBUSNode.java
index 148a6a9e76..45bb6ddd9f 100755
--- a/src/main/java/ui/tmldd/TMLArchiBUSNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiBUSNode.java
@@ -271,7 +271,9 @@ public class TMLArchiBUSNode extends TMLArchiCommunicationNode implements Swallo
                 error = true;
                 errors += "Name of the node  ";
             } else {
+                String oldName = name;
                 name = tmpName;
+                tdp.changeOnComponent(this, oldName, name);
             }
         }
 
@@ -378,6 +380,8 @@ public class TMLArchiBUSNode extends TMLArchiCommunicationNode implements Swallo
             return false;
         }
 
+
+
         return true;
     }
 
diff --git a/src/main/java/ui/tmldd/TMLArchiBridgeNode.java b/src/main/java/ui/tmldd/TMLArchiBridgeNode.java
index 9b0d7fa715..b678716ec0 100755
--- a/src/main/java/ui/tmldd/TMLArchiBridgeNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiBridgeNode.java
@@ -204,7 +204,9 @@ public class TMLArchiBridgeNode extends TMLArchiCommunicationNode implements Swa
                 error = true;
                 errors += "Name of the node  ";
             } else {
+                String oldName = name;
                 name = tmpName;
+                tdp.changeOnComponent(this, oldName, name);
             }
         }
 
diff --git a/src/main/java/ui/tmldd/TMLArchiCPNode.java b/src/main/java/ui/tmldd/TMLArchiCPNode.java
index 0f97175cf1..f90df58371 100755
--- a/src/main/java/ui/tmldd/TMLArchiCPNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiCPNode.java
@@ -279,7 +279,9 @@ public class TMLArchiCPNode extends TMLArchiCommunicationNode implements Swallow
                 errors += "Name of the node  ";
             }
             else        {
+                String oldName = name;
                 name = tmpName;
+                tdp.changeOnComponent(this, oldName, name);
             }
         }
 
diff --git a/src/main/java/ui/tmldd/TMLArchiCommunicationArtifact.java b/src/main/java/ui/tmldd/TMLArchiCommunicationArtifact.java
index f65bac120b..ab9b166d8f 100755
--- a/src/main/java/ui/tmldd/TMLArchiCommunicationArtifact.java
+++ b/src/main/java/ui/tmldd/TMLArchiCommunicationArtifact.java
@@ -411,4 +411,23 @@ public class TMLArchiCommunicationArtifact extends TGCWithoutInternalComponent i
     public String getAttributes() {
         return "Priority = " + priority;
     }
+
+    public void updateMappedElements(String oldName, String newName) {
+        //TraceManager.addDev("Old:" + oldName + " newName:" + newName);
+        String found = null;
+        int index = 0;
+        for(String s: mappedElements) {
+            if (s.compareTo(oldName) == 0) {
+                found = s;
+                break;
+            }
+            index ++;
+        }
+
+        if (found != null) {
+            //TraceManager.addDev("Found mapping to change");
+            mappedElements.remove(index);
+            mappedElements.add(index, newName);
+        }
+    }
 }
diff --git a/src/main/java/ui/tmldd/TMLArchiCrossbarNode.java b/src/main/java/ui/tmldd/TMLArchiCrossbarNode.java
index 34f7ec8793..d5772d6b2e 100755
--- a/src/main/java/ui/tmldd/TMLArchiCrossbarNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiCrossbarNode.java
@@ -215,28 +215,13 @@ public class TMLArchiCrossbarNode extends TMLArchiCommunicationNode implements S
                 error = true;
                 errors += "Name of the node  ";
             } else {
+                String oldName = name;
                 name = tmpName;
-            }
-        }
+                tdp.changeOnComponent(this, oldName, name);
 
-	/*      arbitrationPolicy = dialog.getArbitrationPolicy();
-        privacy = dialog.getPrivacy();
-        if (arbitrationPolicy == HwBus.BASIC_ROUND_ROBIN) {
-            stereotype = "BUS-RR";
-        }
-
-        if (arbitrationPolicy == HwBus.PRIORITY_BASED) {
-            stereotype = "BUS-PB";
-        }
-
-        if (arbitrationPolicy == HwBus.CAN) {
-            stereotype = "BUS-CAN";
+            }
         }
 
-        if (arbitrationPolicy == HwBus.CROSSBAR) {
-            stereotype = "CROSSBAR";
-	    }*/
-
 	// DG we need only data size
 
         if (dialog.getByteDataSize().length() != 0) {
diff --git a/src/main/java/ui/tmldd/TMLArchiDMANode.java b/src/main/java/ui/tmldd/TMLArchiDMANode.java
index 28ea0cec3a..2e96f0152c 100755
--- a/src/main/java/ui/tmldd/TMLArchiDMANode.java
+++ b/src/main/java/ui/tmldd/TMLArchiDMANode.java
@@ -208,7 +208,9 @@ public class TMLArchiDMANode extends TMLArchiCommunicationNode implements Swallo
                 error = true;
                 errors += "Name of the node  ";
             } else {
+                String oldName = name;
                 name = tmpName;
+                tdp.changeOnComponent(this, oldName, name);
             }
         }
 
diff --git a/src/main/java/ui/tmldd/TMLArchiDiagramPanel.java b/src/main/java/ui/tmldd/TMLArchiDiagramPanel.java
index 0a43ea411a..1ce1806d7c 100755
--- a/src/main/java/ui/tmldd/TMLArchiDiagramPanel.java
+++ b/src/main/java/ui/tmldd/TMLArchiDiagramPanel.java
@@ -79,6 +79,9 @@ public class TMLArchiDiagramPanel extends TDiagramPanel implements TDPWithAttrib
 
     @Override
     public boolean actionOnDoubleClick(TGComponent tgc) {
+
+        TraceManager.addDev("Change on tgc=" + tgc);
+
         //
         /*if (tgc instanceof TCDTClass) {
           TCDTClass t = (TCDTClass)tgc;
@@ -98,6 +101,8 @@ public class TMLArchiDiagramPanel extends TDiagramPanel implements TDPWithAttrib
         return false;
     }
 
+
+
     @Override
     public boolean actionOnAdd(TGComponent tgc) {
         /*if (tgc instanceof TCDTClass) {
@@ -185,10 +190,29 @@ public class TMLArchiDiagramPanel extends TDiagramPanel implements TDPWithAttrib
         /*if (tgc instanceof TCDTClass) {
           return actionOnDoubleClick(tgc);
           }*/
+
+
         listOfCP = getListOfCPNodes();
         return false;
     }
 
+    public boolean changeOnComponent(TGComponent tgc, String oldData, String newData) {
+
+        if (tgc instanceof TMLArchiCommunicationNode) {
+            // This change of name may induce mapping problems -> we do the refactoring
+            // We have to find all comm artifacts, and update their multi-mapping
+            //TraceManager.addDev("Change on comm node name");
+            for(TGComponent artifact: getAllComponentList()) {
+                if (artifact instanceof TMLArchiCommunicationArtifact) {
+                    //TraceManager.addDev("Artifact found: " + artifact.getName() + " " + artifact.getValue());
+                    ((TMLArchiCommunicationArtifact)artifact).updateMappedElements(oldData, newData);
+                }
+            }
+        }
+
+        return true;
+    }
+
     public int getMasterClockFrequency() {
         return masterClockFrequency;
     }
diff --git a/src/main/java/ui/tmldd/TMLArchiFirewallNode.java b/src/main/java/ui/tmldd/TMLArchiFirewallNode.java
index 22d941c68e..757263ca72 100644
--- a/src/main/java/ui/tmldd/TMLArchiFirewallNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiFirewallNode.java
@@ -213,7 +213,9 @@ public class TMLArchiFirewallNode extends TMLArchiCommunicationNode implements S
                 error = true;
 				errors += "Name of the node  ";
 			 } else {
-				 name = tmpName;
+                 String oldName = name;
+                 name = tmpName;
+                 tdp.changeOnComponent(this, oldName, name);
 			 }
 		}
 		latency = Integer.valueOf(dialog.getLatency());
diff --git a/src/main/java/ui/tmldd/TMLArchiMemoryNode.java b/src/main/java/ui/tmldd/TMLArchiMemoryNode.java
index 36c7c6cfc0..7d43e3ccce 100755
--- a/src/main/java/ui/tmldd/TMLArchiMemoryNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiMemoryNode.java
@@ -219,7 +219,9 @@ public class TMLArchiMemoryNode extends TMLArchiCommunicationNode implements Swa
                 error = true;
                 errors += "Name of the node  ";
             } else {
+                String oldName = name;
                 name = tmpName;
+                tdp.changeOnComponent(this, oldName, name);
             }
         }
 
diff --git a/src/main/java/ui/tmldd/TMLArchiRouterNode.java b/src/main/java/ui/tmldd/TMLArchiRouterNode.java
index d9ea2d11cc..e25a95c7d9 100755
--- a/src/main/java/ui/tmldd/TMLArchiRouterNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiRouterNode.java
@@ -209,7 +209,9 @@ public class TMLArchiRouterNode extends TMLArchiCommunicationNode implements Swa
                 error = true;
                 errors += "Name of the node  ";
             } else {
+                String oldName = name;
                 name = tmpName;
+                tdp.changeOnComponent(this, oldName, name);
             }
         }
 
diff --git a/src/main/java/ui/tmldd/TMLArchiVGMNNode.java b/src/main/java/ui/tmldd/TMLArchiVGMNNode.java
index fb8a79651d..87320dd592 100755
--- a/src/main/java/ui/tmldd/TMLArchiVGMNNode.java
+++ b/src/main/java/ui/tmldd/TMLArchiVGMNNode.java
@@ -232,28 +232,13 @@ public class TMLArchiVGMNNode extends TMLArchiCommunicationNode implements Swall
                 error = true;
                 errors += "Name of the node  ";
             } else {
+                String oldName = name;
                 name = tmpName;
+                tdp.changeOnComponent(this, oldName, name);
             }
         }
 
-	/*      arbitrationPolicy = dialog.getArbitrationPolicy();
-        privacy = dialog.getPrivacy();
-        if (arbitrationPolicy == HwBus.BASIC_ROUND_ROBIN) {
-            stereotype = "BUS-RR";
-        }
-
-        if (arbitrationPolicy == HwBus.PRIORITY_BASED) {
-            stereotype = "BUS-PB";
-        }
 
-        if (arbitrationPolicy == HwBus.CAN) {
-            stereotype = "BUS-CAN";
-        }
-
-        if (arbitrationPolicy == HwBus.CROSSBAR) {
-            stereotype = "CROSSBAR";
-	    }*/
-	//DG we need only data size
         if (dialog.getByteDataSize().length() != 0) {
             try {
                 tmp = byteDataSize;
@@ -269,50 +254,6 @@ public class TMLArchiVGMNNode extends TMLArchiCommunicationNode implements Swall
             }
         }
 
-	/*       if (dialog.getSliceTime().length() != 0) {
-            try {
-                tmp = sliceTime;
-                sliceTime = Integer.decode(dialog.getSliceTime()).intValue();
-                if (sliceTime <= 0) {
-                    sliceTime = tmp;
-                    error = true;
-                    errors += "Slice time  ";
-                }
-            } catch (Exception e) {
-                error = true;
-                errors += "Slice time  ";
-            }
-        }
-
-        if (dialog.getPipelineSize().length() != 0) {
-            try {
-                tmp = pipelineSize;
-                pipelineSize = Integer.decode(dialog.getPipelineSize()).intValue();
-                if (pipelineSize <= 0) {
-                    pipelineSize = tmp;
-                    error = true;
-                    errors += "Pipeline size  ";
-                }
-            } catch (Exception e) {
-                error = true;
-                errors += "Pipeline size  ";
-            }
-        }
-
-        if (dialog.getClockRatio().length() != 0) {
-            try {
-                tmp = clockRatio;
-                clockRatio = Integer.decode(dialog.getClockRatio()).intValue();
-                if (clockRatio <= 0) {
-                    clockRatio = tmp;
-                    error = true;
-                    errors += "Clock diviser  ";
-                }
-            } catch (Exception e) {
-                error = true;
-                errors += "Clock diviser  ";
-            }
-        }*/
 
         if (error) {
             JOptionPane.showMessageDialog(frame,
-- 
GitLab