From 49f897d2ff82780917613ce4c648305fbead9857 Mon Sep 17 00:00:00 2001
From: Letitia Li <leli@enst.fr>
Date: Fri, 20 May 2016 13:34:26 +0000
Subject: [PATCH] TML2AvatarDesignPanel draft 1

---
 src/tmltranslator/toavatar/TML2AvatarDP.java | 91 +++++++++++++++-----
 src/ui/GTURTLEModeling.java                  |  9 +-
 src/ui/avatarbd/AvatarBDBlock.java           |  4 +-
 src/ui/avatarbd/AvatarBDPortConnector.java   | 23 ++++-
 4 files changed, 102 insertions(+), 25 deletions(-)

diff --git a/src/tmltranslator/toavatar/TML2AvatarDP.java b/src/tmltranslator/toavatar/TML2AvatarDP.java
index 595ba5a160..6ebe403d07 100644
--- a/src/tmltranslator/toavatar/TML2AvatarDP.java
+++ b/src/tmltranslator/toavatar/TML2AvatarDP.java
@@ -63,7 +63,7 @@ public class TML2AvatarDP {
     //protected CorrespondanceTGElement listB; // list for particular element -> first element of group of blocks
     protected TMLMapping tmlmap;
     public AvatarDesignPanel adp;
-    private List<String> signals;
+
     private Map<AvatarTransition, TGConnectingPoint> tranSourceMap = new HashMap<AvatarTransition, TGConnectingPoint>();
     private Map<AvatarTransition, AvatarStateMachineElement> tranDestMap = new HashMap<AvatarTransition, AvatarStateMachineElement>();
     private Map<AvatarStateMachineElement, TGConnectingPoint> locMap = new HashMap<AvatarStateMachineElement, TGConnectingPoint>();
@@ -71,30 +71,37 @@ public class TML2AvatarDP {
     public Map<String, Set<String>> originDestMap = new HashMap<String, Set<String>>();
     public Map<String, AvatarBDBlock> blockMap = new HashMap<String, AvatarBDBlock>();
     public TML2AvatarDP(TMLMapping tmlmapping) {
+  
         tmlmap = tmlmapping;
     }
 
     public void commMap(){
+	//Create a map of all connections
 	TMLModeling tmlmodel=tmlmap.getTMLModeling();
 	for (TMLTask t: tmlmodel.getTasks()){
 	    Set<String> hs = new HashSet<String>();
-	 
+	    //Iterate through channels
 	    LinkedList ll= tmlmodel.getChannelsToMe(t);
       	    ListIterator iterator = ll.listIterator();
             TMLChannel chanl;
+	    String name="";
             while(iterator.hasNext()) {
                 chanl = (TMLChannel)(iterator.next()); 
-		for (TMLTask dt: chanl.getDestinationTasks()){
-		    hs.add(dt.getName());
+		for (TMLTask dt: chanl.getOriginTasks()){
+		    name= dt.getName();
+		    hs.add(name.split("__")[name.split("__").length-1]);
 		}
+		name= chanl.getOriginTask().getName();
+		hs.add(name.split("__")[name.split("__").length-1]);
 	    }
-	    originDestMap.put(t.getName(), hs);
-	    //check channels
+	    name=t.getName();
+	    originDestMap.put(name.split("__")[name.split("__").length-1], hs);
+	    
 	    //get connections
 	//Do we care about requests/events
 	}
     }
-    public void addStates(AvatarStateMachineElement asme, int x, int y, AvatarSMDPanel smp){
+    public void addStates(AvatarStateMachineElement asme, int x, int y, AvatarSMDPanel smp, AvatarBDBlock bl){
 	TGConnectingPoint tp = new TGConnectingPoint(null, x, y, false, false);
 	if (asme instanceof AvatarStartState){
 	    AvatarSMDStartState smdss = new AvatarSMDStartState(x, y, x, x*2, y, y*2, false, null, smp);
@@ -111,23 +118,33 @@ public class TML2AvatarDP {
 	    if (sig.isOut()){
 		AvatarSMDReceiveSignal smdrs = new AvatarSMDReceiveSignal(x, y, x, x*2, y, y*2, false, null, smp);
 		smp.addComponent(smdrs, x, y, false, true);
-	        smdrs.setValue(sig.getName().split("__")[sig.getName().split("__").length-1]);
+		String name=sig.getName().split("__")[sig.getName().split("__").length-1];
+	        smdrs.setValue(name+"()");
+		sig.setName(name);
 	        smdrs.recalculateSize();
 		SMDMap.put(asme, smdrs);
 	        tp = smdrs.getFreeTGConnectingPoint(x+smdrs.getWidth()/2,y+smdrs.getHeight());
 		TGConnectingPoint tp2 = smdrs.getFreeTGConnectingPoint(x+smdrs.getWidth()/2,y);
 	    	locMap.put(asme, tp2);
+		if (bl.getAvatarSignalFromName(name) ==null){
+		    bl.addSignal(new ui.AvatarSignal(0, name, new String[0], new String[0]));
+		}
 
 	    }
 	    else {
 		AvatarSMDSendSignal smdss = new AvatarSMDSendSignal(x, y, x, x*2, y, y*2, false, null, smp);
 		smp.addComponent(smdss, x, y, false, true);
-	        smdss.setValue(sig.getName().split("__")[sig.getName().split("__").length-1]);
+	        String name=sig.getName().split("__")[sig.getName().split("__").length-1];
+	        smdss.setValue(name+"()");
+		sig.setName(name);
 	        smdss.recalculateSize();
 		SMDMap.put(asme, smdss);
 	    	tp = smdss.getFreeTGConnectingPoint(x+smdss.getWidth()/2,y+smdss.getHeight());
 		TGConnectingPoint tp2 = smdss.getFreeTGConnectingPoint(x+smdss.getWidth()/2,y);
 	    	locMap.put(asme, tp2);
+		if (bl.getAvatarSignalFromName(name)  == null){
+		    bl.addSignal(new ui.AvatarSignal(1, name, new String[0], new String[0]));
+		}
 	    }
 
 	}
@@ -150,7 +167,7 @@ public class TML2AvatarDP {
 			    tranDestMap.put(at, next);
 			}
 		    }
-		    addStates(next, x, y, smp);
+		    addStates(next, x, y, smp,bl);
 		    return;
 		}
 	    }
@@ -173,7 +190,7 @@ public class TML2AvatarDP {
 		AvatarTransition t = (AvatarTransition) asme;
 		tranDestMap.put(t, el);
 	    }
-	    addStates(el, diff*i, y+ydiff, smp);
+	    addStates(el, diff*i, y+ydiff, smp, bl);
 	    i++;  
 	}
 	return;
@@ -192,7 +209,7 @@ public class TML2AvatarDP {
 	    tranSourceMap.clear();
 	    bl.setValue(ab.getName().split("__")[1]);
 	    abd.changeStateMachineTabName ("Block0", bl.getValue());
-	    blockMap.put(bl.getValue(), abd);
+	    blockMap.put(bl.getValue(), bl);
 	    abd.addComponent(bl, xpos, ypos, false, true);
 	    xpos+=400;
 	    //Build the state machine
@@ -208,7 +225,7 @@ public class TML2AvatarDP {
 	    //Remove the empty check states
 	    
 	    AvatarStartState start= asm.getStartState();
-	    addStates(start, smx, smy, smp);
+	    addStates(start, smx, smy, smp, bl);
 	    //Add transitions
 	    for (AvatarTransition t: tranSourceMap.keySet()){
 		TGConnectingPoint p1 = tranSourceMap.get(t);
@@ -224,12 +241,29 @@ public class TML2AvatarDP {
 	}
 
 	
-
+	commMap();
 
 	//Add Relations
-	for (String s: originDestMap.keySet()){
-	AvatarBDCompositionConnector conn = new AvatarBDCompositionConnector(int _x, int _y, int _minX, int _minY, int _maxX, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp, TGConnectingPoint _p1, TGConnectingPoint _p2, Vector _listPoint);
-	
+	for (String bl1: originDestMap.keySet()){
+	    for (String bl2:originDestMap.get(bl1)){ 
+		Vector points=new Vector();
+		TGConnectingPoint p1= blockMap.get(bl1).getFreeTGConnectingPoint(blockMap.get(bl1).getX(), blockMap.get(bl1).getY());
+		TGConnectingPoint p2=blockMap.get(bl2).getFreeTGConnectingPoint(blockMap.get(bl2).getX(),blockMap.get(bl2).getY());
+		AvatarBDPortConnector conn = new AvatarBDPortConnector(0, 0, 0, 0, 0, 0, true, null, abd, p1, p2, points);
+
+		//Add Relations to connector
+		for (ui.AvatarSignal sig:blockMap.get(bl1).getSignalList()){
+		    for (ui.AvatarSignal sig2: blockMap.get(bl2).getSignalList()){
+			if (sig.getId().equals(sig2.getId())){
+			    conn.addSignal("in "+sig.getId(), true, true);
+			    conn.addSignal("out "+sig.getId(), false, false);
+			}
+		    }
+		}
+		abd.addComponent(conn, 0,0,false,true);
+		System.out.println("size " +conn.getAssociationSignals().size());
+	    }
+	}
 	ypos+=100;
 	//Add Pragmas
 	AvatarBDPragma pragma=new AvatarBDPragma(xpos, ypos, xpos, xpos*2, ypos, ypos*2, false, null,abd);
@@ -237,9 +271,26 @@ public class TML2AvatarDP {
 	String s="";
 	int i=0;
 	for (AvatarPragma p: avspec.getPragmas()){
-	    System.out.println(p.getName());
-	    arr[i] = p.getName();
-	    s=s.concat(p.getName()+"\n");
+	    
+//	    arr[i] = p.getName();
+	    String t= "";
+	    String[] split = p.getName().split(" ");
+	    if (p.getName().contains("#Confidentiality")){
+	        for (String str:split){
+		    if (str.contains(".")){
+			String tmp = str.split("\\.")[0];
+			String tmp2 = str.split("\\.")[1];
+			System.out.println("TMP " + tmp + " "+ tmp2);
+		    	t=t.concat(tmp.split("__")[tmp.split("__").length-1] + "." + tmp2.split("__")[Math.max(tmp2.split("__").length-2,0)] + " ");
+		    }
+		    else {
+			t=t.concat(str+" ");
+		    }
+		}
+	    }
+	    else if (p.getName().contains("Authenticity")){
+	    }
+	    s=s.concat(t+"\n");
 	    i++;
 	}
 	pragma.setValue(s);
diff --git a/src/ui/GTURTLEModeling.java b/src/ui/GTURTLEModeling.java
index 435c500704..a844ccceae 100755
--- a/src/ui/GTURTLEModeling.java
+++ b/src/ui/GTURTLEModeling.java
@@ -637,11 +637,14 @@ public class GTURTLEModeling {
 	return generateProVerifFromAVATAR(_path, _stateReachability, _typed, "1");
     }
     public boolean generateProVerifFromAVATAR(String _path, int _stateReachability, boolean _typed, String loopLimit) {
-	if (tmap!=null){
+	if (avatarspec !=null){
+	     //use avspec
+	}
+	else if (tmap!=null){
 	    t2a = new TML2Avatar(tmap);
-	/*    TML2AvatarDP tml2avatardp = new TML2AvatarDP(tmap);
+	    TML2AvatarDP tml2avatardp = new TML2AvatarDP(tmap);
 	    tml2avatardp.adp = mgui.getFirstAvatarDesignPanelFound();
-	    tml2avatardp.translate(); */
+	    tml2avatardp.translate(); 
 	    avatarspec = t2a.generateAvatarSpec(loopLimit);
 	}
 	else if (tmlm!=null){
diff --git a/src/ui/avatarbd/AvatarBDBlock.java b/src/ui/avatarbd/AvatarBDBlock.java
index 4fa10ceb27..0f862e5ce6 100644
--- a/src/ui/avatarbd/AvatarBDBlock.java
+++ b/src/ui/avatarbd/AvatarBDBlock.java
@@ -152,7 +152,9 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S
         this.internalDrawingAux (graph);
         graph.setFont (font);
     }
-
+    public void addSignal(AvatarSignal sig){
+	this.mySignals.add(sig);
+    }
     public void internalDrawingAux (Graphics graph) {
         // Draw outer rectangle (for border)
         Color c = graph.getColor ();
diff --git a/src/ui/avatarbd/AvatarBDPortConnector.java b/src/ui/avatarbd/AvatarBDPortConnector.java
index e79f57c18c..dc1cba0630 100644
--- a/src/ui/avatarbd/AvatarBDPortConnector.java
+++ b/src/ui/avatarbd/AvatarBDPortConnector.java
@@ -571,6 +571,8 @@ public class AvatarBDPortConnector extends TGConnectorWithCommentConnectionPoint
 
         for(i=0; i<outSignalsAtOrigin.size(); i++) {
             try {
+		System.out.println("OUT " +outSignalsAtOrigin.get(i));
+		System.out.println("SIGNAL " + block1.getAvatarSignalFromFullName(outSignalsAtOrigin.get(i)));
                 s = makeSignalAssociation(block1, block1.getAvatarSignalFromFullName(outSignalsAtOrigin.get(i)), block2, block2.getAvatarSignalFromFullName(inSignalsAtDestination.get(i)));
                 v.add(s);
             } catch (Exception e) {
@@ -580,6 +582,8 @@ public class AvatarBDPortConnector extends TGConnectorWithCommentConnectionPoint
 
         for(i=0; i<inSignalsAtOrigin.size(); i++) {
             try {
+		System.out.println("OUT " +inSignalsAtOrigin.get(i));
+		System.out.println("SIGNAL " + block1.getAvatarSignalFromFullName(inSignalsAtOrigin.get(i)));
                 s = makeSignalAssociation(block1, block1.getAvatarSignalFromFullName(inSignalsAtOrigin.get(i)), block2, block2.getAvatarSignalFromFullName(outSignalsAtDestination.get(i)));
                 v.add(s);
             } catch (Exception e) {
@@ -639,7 +643,24 @@ public class AvatarBDPortConnector extends TGConnectorWithCommentConnectionPoint
 
         return _assoc.substring(index0+1, _assoc.length()).trim();
     }
-
+    public void addSignal(String signal, boolean in, boolean origin){
+	if (in){
+	    if (origin){
+		inSignalsAtOrigin.add(signal);
+	    }
+	    else {
+		inSignalsAtDestination.add(signal);
+	    }
+	}
+	else {
+	    if (origin){
+		outSignalsAtOrigin.add(signal);
+	    }
+	    else {
+		outSignalsAtDestination.add(signal);
+	    }
+	}
+    }
     public void updateAllSignals() {
         try {
             Vector v = getAssociationSignals();
-- 
GitLab