diff --git a/src/main/java/ui/GTURTLEModeling.java b/src/main/java/ui/GTURTLEModeling.java
index 7fa257ca30040b9271e7f7d404cbd317f0a75ea5..3499e7cc63197ed57940073e05946403f29ba53c 100755
--- a/src/main/java/ui/GTURTLEModeling.java
+++ b/src/main/java/ui/GTURTLEModeling.java
@@ -153,9470 +153,9486 @@ import java.util.List;
 
 public class GTURTLEModeling {
 
-	//Added by Solange
-
-	public GProactiveDesign gpdtemp;
-
-
-	//
-	private Vector<TURTLEPanel> panels; /* analysis, design, deployment, tml design */
-	private TURTLEModeling tm;
-	private AvatarSpecification avatarspec;
-	//  private AttackTree attackTree;
-	private AVATAR2UPPAAL avatar2uppaal;
-	private AVATAR2ProVerif avatar2proverif;
-	private boolean optimizeAvatar;
-	private int tmState; // 0:generated, 1: to be generated from mapping, 2: to be generated from TML modeling
-
-	private TMLModeling tmlm;
-	private TMLMapping artificialtmap;
-	private TMLMapping tmap;
-	private TMLCP tmlcp;
-	private TML2Avatar t2a;
-	private RequirementModeling rm;
-	private NCStructure ncs;
-	private MainGUI mgui;
-	private CorrespondanceTGElement listE;
-	private String rtlotos;
-
-	private EBRDD ebrdd;
-
-	private UPPAALSpec uppaal;
-	private RelationTIFUPPAAL uppaalTIFTable;
-	private RelationTMLUPPAAL uppaalTMLTable;
-
-	private ProVerifSpec proverif;
-
-	private AVATAR2TPN avatar2tpn;
-	private TPN tpnFromAvatar;
-
-	private String tpn;
-	private String sim;
-	private String dta;
-	private String dtadot;
-	private String rg;
-	private String rgdot;
-	private String rgaut;
-	private String rgautdot;
-	private String rgautproj;
-	private String rgautprojdot;
-	private String tlsa;
-	private String tlsadot;
-
-	private List<RG> graphs;
-	private GraphTree gt;
-
-	private int nbRTLOTOS;
-	private int nbSuggestedDesign;
-	//	private int nbSuggestedAnalysis;
-	//	private int nbTPN;
-
-	//private ValidationDataTree vdt;
-	private SearchTree st;
-	private SyntaxAnalysisTree mcvdt;
-	private InvariantDataTree idt;
-
-	private List<CheckingError> checkingErrors;
-	private List<CheckingError> warnings;
-
-	private List<Invariant> invariants;
-
-	List<TGConnectorInfo> pendingConnectors;
-
-	private Vector<String> savedOperations;
-	private Vector<Point> savedPanels;
-	private int nbMaxSavedOperations = 10;
-	private int pointerOperation;
-
-	private DocumentBuilderFactory dbf;
-	private DocumentBuilder db;
-	private Document docCopy;
-
-	private int decX, decY, decId;
-
-	private static int graphId = 0;
-
-	private int languageID;
-	public final static int RT_LOTOS = 0;
-	public final static int LOTOS = 1;
-	public final static int AUT = 2;
-	public final static int TPN = 3;
-	public final static int MATRIX = 4;
-	public final static int UPPAAL = 5;
-	public final static int PROVERIF = 6;
-
-	private boolean undoRunning = false;
-
-	boolean hasCrypto=false;
-	//private Charset chset1, chset2;
-
-	public GTURTLEModeling(MainGUI _mgui, Vector<TURTLEPanel> _panels) {
-		mgui = _mgui;
-		panels = _panels;
-		try {
-			dbf = DocumentBuilderFactory.newInstance();
-			db = dbf.newDocumentBuilder();
-		} catch (ParserConfigurationException e) {
-			dbf = null;
-			db = null;
-		}
-		savedOperations = new Vector<String>();
-		savedPanels = new Vector<Point>();
-		pointerOperation = -1;
-
-		graphs = new ArrayList<RG>();
-		invariants = new LinkedList<Invariant>();
-
-		//vdt = new ValidationDataTree(mgui);
-		mcvdt = new SyntaxAnalysisTree(mgui);
-		idt = new InvariantDataTree(mgui);
-		st = new SearchTree(mgui);
-		gt = new GraphTree(mgui);
-
-		/*if (!Charset.isSupported("UTF-8")) {
-		  ErrorGUI.exit(ErrorGUI.ERROR_CHARSET);
-		  }
-
-		  chset1 = Charset.forName("UTF-8");*/
-	}
-
-	public int getLanguageID() {
-		return languageID;
-	}
-
-	public boolean isRegularTM() {
-		if (tm == null ){
-			return false;
-		}
-		return tm.isARegularTIFSpec();
-	}
-
-	public List<RG> getRGs() {
-		return graphs;
-	}
-
-	public void addRG(RG newGraph) {
-		//TraceManager.addDev("Adding new graph " + newGraph);
-		graphs.add(newGraph);
-	}
-
-	public void removeRG(RG oldGraph) {
-		//TraceManager.addDev("Adding new graph " + newGraph);
-		graphs.remove(oldGraph);
-	}
-
-
-	public List<Invariant> getInvariants() {
-		return invariants;
-	}
-
-
-
-	public void addInvariant(Invariant _inv) {
-		invariants.add(_inv);
-		TraceManager.addDev("Adding invariant: " + _inv.toString());
-	}
-
-	public void clearInvariants() {
-		invariants.clear();
-	}
-
-
-
-	public String saveTIF() {
-		if (tm == null) {
-			TraceManager.addDev("NO TIF to save");
-			return null;
-		}
-
-		TIFExchange tif = new TIFExchange();
-		tif.setTURTLEModeling(tm);
-		String ret = tif.saveInXMLTIF();
-		TraceManager.addDev("TIF=\n" +  ret);
-		return ret;
-	}
-
-	public boolean openTIF(String s) {
-		TIFExchange tif = new TIFExchange();
-		boolean ret = false;
-
-		try {
-			ret = tif.loadFromXMLTIF(s);
-			if (ret) {
-				tm = tif.getTURTLEModeling();
-				tmState = 0;
-				TraceManager.addDev("Got TIF");
-				generateDesign();
-			}
-		} catch (Exception e) {
-			TraceManager.addDev("Exception on TIF: " + e.getMessage());
-		}
-		return ret;
-	}
-
-	public boolean openSD(String s) {
-		SDExchange sde = new SDExchange();
-		boolean ret = false;
-
-		try {
-			ret = sde.loadFromXMLSD(s);
-			if (ret) {
-				//tm = tif.getTURTLEModeling();
-				//tmState = 0;
-				TraceManager.addDev("Got SD");
-				generateIOD(sde.getHMSC(), sde.getMSC());
-			}
-		} catch (Exception e) {
-			TraceManager.addDev("Exception on SD: " + e.getMessage());
-		}
-		return ret;
-	}
-
-	/*public void mergeChoices(boolean nonDeterministic) {
-	  if (tm != null) {
-	  tm.mergeChoices(nonDeterministic);
-	  }
-	  }*/
-
-	public NCStructure getNCS() {
-		return ncs;
-	}
-
-	public void generateRTLOTOS(File f) {
-		TURTLETranslator tt = new TURTLETranslator(tm);
-		rtlotos = tt.generateRTLOTOS();
-		warnings = tt.getWarnings();
-		nbRTLOTOS ++;
-		if (f != null) {
-			saveInFile(f, rtlotos);
-		}
-		languageID = RT_LOTOS;
-		mgui.setMode(MainGUI.RTLOTOS_OK);
-	}
-
-	public void generateFullLOTOS(File f) {
-		reinitSIM();
-		reinitDTA();
-		reinitRG();
-		reinitRGAUT();
-		reinitRGAUTPROJDOT();
-		//TraceManager.addDev("generate LOTOS");
-		generateLOTOS(f);
-	}
-
-	public void generateLOTOS(File f) {
-		//tm.print();
-		TraceManager.addDev("Generating Lotos");
-		TURTLETranslator tt = new TURTLETranslator(tm);
-		rtlotos = tt.generateLOTOS(true);
-		warnings = tt.getWarnings();
-		TraceManager.addDev("Lotos generated");
-
-
-
-		nbRTLOTOS ++;
-		if (f != null) {
-			saveInFile(f, rtlotos);
-		}
-		TraceManager.addDev("LOTOS to file done");
-		languageID = LOTOS;
-		mgui.setMode(MainGUI.RTLOTOS_OK);
-	}
-
-	public void generateTPN(File f) {
-		//tm.print();
-		TURTLE2TPN t2tpn = new TURTLE2TPN(tm);
-		tpn = t2tpn.generateTPN(false).toString();
-		warnings = t2tpn.getWarnings();
-
-		//  nbTPN ++;
-		if (f != null) {
-			TraceManager.addDev("Saving in file: " + f);
-			saveInFile(f, tpn);
-		}
-		languageID = TPN;
-
-		// For debug purpose
-		//TraceManager.addDev(tpn);
-
-		mgui.setMode(MainGUI.RTLOTOS_OK);
-	}
-
-	public List<String> generateAUT(String path) {
-		TML2AUT tml2aut = new TML2AUT(tmlm);
-		tml2aut.generateAutomatas(true);
-		try {
-			return tml2aut.saveInFiles(path);
-		} catch (FileException fe) {
-			return null;
-		}
-	}
-
-	public boolean generateCCode( String _title )	   {
-
-		//CheckingError ce;
-		//int type;
-		// TGComponent tgc;
-		String applicationName;
-		TMLModelCompiler CCode;
-
-		if( tmap == null )	  {
-			JOptionPane.showMessageDialog( mgui.frame, "C code is only generated from an architecture diagram with mapping information", "Control code generation failed", JOptionPane.INFORMATION_MESSAGE );
-			return true;
-		}
-		// Get the file from DiplodocusPECPragma
-		//List<TGComponent> components = mgui.getCurrentArchiPanel().tmlap.getComponentList();
-		// Parse the PEC file and the library of code snippets for each DIPLODOCUS unit
-		applicationName = tmap.getMappedTasks().get(0).getName().split("__")[0];	// Remember that it works only for one application
-		CCode = new TMLModelCompiler( _title, applicationName, mgui.frame, mgui.getAllTMLCP(), tmap );
-		CCode.toTextFormat();
-		try {
-			if( ConfigurationTTool.CCodeDirectory.equals("") )  {
-				JOptionPane.showMessageDialog(  mgui.frame,
-												"No directory for C code generation found in config.xml. The C code cannot be generated.",
-												"Control code generation failed", JOptionPane.INFORMATION_MESSAGE );
-				return true;
-			}
-			else		{
-				CCode.saveFile( ConfigurationTTool.CCodeDirectory + File.separator, applicationName );
-			}
-		}
-		catch( Exception e ) {
-			JOptionPane.showMessageDialog(  mgui.frame, "The application C files could not be saved: " + e.getMessage(), "Control code generation failed", JOptionPane.INFORMATION_MESSAGE );
-			return true;
-		}
-		return false;
-	}
-
-	public boolean generateTMLTxt( String _title ) {
-
-
-		//This branch is activated if doing the syntax check from the architecture panel.
-		//It generates the text TML for the architecture and the application + mapping information
-		if (tmap != null) {
-			TMLMappingTextSpecification spec = new TMLMappingTextSpecification( _title );
-			spec.toTextFormat( tmap );	  //TMLMapping
-			try {
-				//TraceManager.addDev( "*** " + ConfigurationTTool.TMLCodeDirectory + File.separator );
-				spec.saveFile( ConfigurationTTool.TMLCodeDirectory + File.separator, "spec" );
-			}
-			catch( Exception e ) {
-				TraceManager.addError( "Files could not be saved: " + e.getMessage() );
-				return false;
-			}
-		}
-
-		if( tmlcp != null )	 {	   //Use the data structure filled by translateToTML... and pass it to the appropriate toTextFormat()
-			TraceManager.addError( "About to generate the TMLText for CPs" );
-			TMLCPTextSpecification specCP = new TMLCPTextSpecification( _title );
-
-			//get the architecture panel and the nodes
-			TMLArchiDiagramPanel tmlap = mgui.getTMLArchiDiagramPanels().get(0).tmlap;
-			List<TGComponent> components = tmlap.getComponentList();
-			Iterator<TGComponent> iterator = components.listIterator();
-			TGComponent tgc;
-
-			while(iterator.hasNext()) {
-				tgc = iterator.next();
-
-				if (tgc instanceof TMLArchiCPNode) {
-					TMLArchiCPNode node = (TMLArchiCPNode) tgc;
-					TraceManager.addDev( "Found CP node: " + node.getName() );
-					TraceManager.addDev( "with mapping info: " + node.getMappedUnits() );
-				}
-			}
-
-			List<TMLCommunicationPatternPanel> tmlcpPanelsList = new ArrayList<TMLCommunicationPatternPanel>();
-			//get the TMLCommunicationPatternPanels :)
-			for( int i = 0; i < mgui.tabs.size(); i++ ) {
-				TURTLEPanel panel = mgui.tabs.get(i);
-
-				if( panel instanceof TMLCommunicationPatternPanel )	 {
-					tmlcpPanelsList.add( (TMLCommunicationPatternPanel) panel );
-					TraceManager.addDev( "Found TMLCommunicationPatternPanel: " + ((TMLCommunicationPatternPanel)panel).toString() );
-				}
-			}
-
-			specCP.toTextFormat( tmlcp );	   // the data structure tmlcp is filled with the info concerning the CP panel
-			// from which the button is pressed. If there are multiple CP panels this operation must be repeated for each panel. It
-			// should be no difficult to implement.
-			try {
-				specCP.saveFile( ConfigurationTTool.TMLCodeDirectory + File.separator, "spec.tmlcp" );
-			}
-			catch( Exception e ) {
-				TraceManager.addError( "Writing TMLText for CPs, file could not be saved: " + e.getMessage() );
-				return false;
-			}
-
-		} else if (tmap == null) {
-			//This branch is activated if doing the syntax check from the application panel.
-			//It only generates the application TML text
-			if( tmap == null ) {
-				TMLTextSpecification spec = new TMLTextSpecification( _title );
-				spec.toTextFormat( tmlm );	  //TMLModeling
-				try {
-					spec.saveFile( ConfigurationTTool.TMLCodeDirectory + File.separator, "spec.tml" );
-				}
-				catch( Exception e ) {
-					TraceManager.addError( "File could not be saved: " + e.getMessage() );
-					return false;
-				}
-			}
-
-
-		}
-		return true;	//temporary, just to check functionality
-	}
-
-	public boolean generateUPPAALFromTIF(String path, boolean debug, int nb, boolean choices, boolean variables) {
-		TURTLE2UPPAAL turtle2uppaal = new TURTLE2UPPAAL(tm);
-		turtle2uppaal.setChoiceDeterministic(choices);
-		turtle2uppaal.setVariablesAsActions(variables);
-		uppaal = turtle2uppaal.generateUPPAAL(debug, nb);
-		TraceManager.addDev("Building relation table");
-		uppaalTIFTable = turtle2uppaal.getRelationTIFUPPAAL();
-		TraceManager.addDev("Building relation table done");
-		uppaalTMLTable = null;
-
-		languageID = UPPAAL;
-		mgui.setMode(MainGUI.UPPAAL_OK);
-
-		try {
-			TraceManager.addDev("Saving specification in " + path + "\n");
-			turtle2uppaal.saveInFile(path);
-			TraceManager.addDev("UPPAAL specification has been generated in " + path + "\n");
-			return true;
-		} catch (FileException fe) {
-			TraceManager.addError("Exception: " + fe.getMessage());
-			return false;
-		}
-	}
-
-	public boolean generateUPPAALFromTML(String _path, boolean _debug, int _size, boolean choices) {
-		TraceManager.addDev("Generate UPPAAL from TML");
-		TML2UPPAAL tml2uppaal = new TML2UPPAAL(tmlm);
-		//tml2uppaal.setChoiceDeterministic(choices);
-		tml2uppaal.setSizeInfiniteFIFO(_size);
-		uppaal = tml2uppaal.generateUPPAAL(_debug);
-		uppaalTMLTable = tml2uppaal.getRelationTMLUPPAAL();
-		uppaalTIFTable = null;
-		languageID = UPPAAL;
-		mgui.setMode(MainGUI.UPPAAL_OK);
-		//uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
-		try {
-			tml2uppaal.saveInFile(_path);
-			return true;
-		} catch (FileException fe) {
-			TraceManager.addError("Exception: " + fe.getMessage());
-			return false;
-		}
-	}
-
-	public boolean generateUPPAALFromAVATAR(String _path) {
-		if (avatarspec == null) {
-			TraceManager.addDev("Null avatar spec");
-			return false;
-		}
-		avatar2uppaal = new AVATAR2UPPAAL(avatarspec);
-		//tml2uppaal.setChoiceDeterministic(choices);
-		//tml2uppaal.setSizeInfiniteFIFO(_size);
-		uppaal = avatar2uppaal.generateUPPAAL(true, optimizeAvatar);
-		warnings = avatar2uppaal.getWarnings();
-		uppaalTMLTable = null;
-		uppaalTIFTable = null;
-		languageID = UPPAAL;
-		mgui.setMode(MainGUI.UPPAAL_OK);
-		//uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
-		try {
-			avatar2uppaal.saveInFile(_path);
-			return true;
-		} catch (FileException fe) {
-			TraceManager.addError("Exception: " + fe.getMessage());
-			return false;
-		}
-	}
-
-	public AvatarSpecification getAvatarSpecification() {
-		return avatarspec;
-	}
-
-	public AVATAR2UPPAAL getAvatar2Uppaal(){
-		return avatar2uppaal;
-	}
-
-	public ProVerifOutputAnalyzer getProVerifOutputAnalyzer () {
-		return this.avatar2proverif.getOutputAnalyzer ();
-	}
-
-	public boolean generateProVerifFromAVATAR(String _path, int _stateReachability, boolean _typed){
-		return generateProVerifFromAVATAR(_path, _stateReachability, _typed, "1");
-	}
-
-	public int calcSec(){
-		int overhead=0;
-		//count # of insecure channels?
-		return overhead;
-	}
-
-	public boolean channelAllowed(TMLMapping map, TMLChannel chan){
-		TMLTask orig = chan.getOriginTask();
-		TMLTask dest = chan.getDestinationTask();
-		List<HwNode> path = getPath(map,orig, dest);
-		for (HwNode node:path){
-			if (node instanceof HwBridge){
-				for (String rule:((HwBridge) node).firewallRules){
-					String t1 = rule.split("->")[0];
-					String t2 = rule.split("->")[1];
-					if (t1.equals(orig.getName().replaceAll("__","::")) || t1.equals("*")){
-						if (t2.equals(dest.getName().replaceAll("__","::")) || t2.equals("*")){
-							return false;
-						}
-					}
-				}
-			}
-		}
-		return true;
-	}
-
-	public List<HwNode> getPath(TMLMapping map, TMLTask t1, TMLTask t2){
-		HwNode node1 = map.getHwNodeOf(t1);
-		HwNode node2 = map.getHwNodeOf(t2);
-		List<HwNode> path = new ArrayList<HwNode>();
-		if (node1==node2){
-			return path;
-		}
-		if (node1!=node2){
-			//Navigate architecture for node
-			List<HwLink> links = map.getTMLArchitecture().getHwLinks();
-			//  HwNode last = node1;
-			List<HwNode> found = new ArrayList<HwNode>();
-			List<HwNode> done = new ArrayList<HwNode>();
-			Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>();
-			for (HwLink link: links){
-				if (link.hwnode == node1){
-					found.add(link.bus);
-					List<HwNode> tmp = new ArrayList<HwNode>();
-					tmp.add(link.bus);
-					pathMap.put(link.bus, tmp);
-				}
-			}
-			outerloop:
-			while (found.size()>0){
-				HwNode curr = found.remove(0);
-				for (HwLink link: links){
-					if (curr == link.bus){
-						if (link.hwnode == node2){
-							path = pathMap.get(curr);
-							break outerloop;
-						}
-						if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge){
-							found.add(link.hwnode);
-							List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-							tmp.add(link.hwnode);
-							pathMap.put(link.hwnode, tmp);
-						}
-					}
-					else if (curr == link.hwnode){
-						if (!done.contains(link.bus) && !found.contains(link.bus)){
-							found.add(link.bus);
-							List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-							tmp.add(link.bus);
-							pathMap.put(link.bus, tmp);
-						}
-					}
-				}
-				done.add(curr);
-			}
-		}
-		return path;
-	}
-	public TMLMapping drawFirewall(TMLMapping map){
-		System.out.println("DRAWING FIREWALL");
-		TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
-		TMLModeling tmlm = map.getTMLModeling();
-		TMLActivityDiagramPanel firewallADP = null;
-		TMLComponentTaskDiagramPanel tcdp = tmlcdp.tmlctdp;
-		if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){
-			MainGUI gui = tmlcdp.getMainGUI();
-			int arch = mgui.tabs.indexOf(map.tmlap);
-			gui.cloneRenameTab(arch,"firewallArch");
-			TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
-			int ind = gui.tabs.indexOf(tmlcdp);
-			String tabName = gui.getTitleAt(tmlcdp);
-			gui.cloneRenameTab(ind, "firewallDesign");
-			//  TMLComponentDesignPanel tcp = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1);
-			newarch.renameMapping(tabName, tabName+"_firewallDesign");
-
-		}
-		for (HwBridge firewallNode:map.getTMLArchitecture().getFirewalls()){
-			TraceManager.addDev("Found firewall " + firewallNode.getName());
-			TMLCPrimitiveComponent firewallComp = null;
-			TMLADStartState adStart=null;
-			TMLADForEverLoop adLoop = null;
-			TMLADChoice adChoice =null;
-			TMLADReadChannel adRC=null;
-			TMLADExecI exec=null;
-			TMLADWriteChannel adWC=null;
-			TMLADStopState adStop =null;
-
-
-
-			int links = map.getArch().getLinkByHwNode(firewallNode).size();
-			TraceManager.addDev("Links " + links);
-
-			HwCPU cpu = new HwCPU(firewallNode.getName());
-			map.getTMLArchitecture().replaceFirewall(firewallNode,cpu);
-			for (int link =0; link< links/2; link++){
-				HashMap<TMLChannel, TMLChannel> inChans = new HashMap<TMLChannel, TMLChannel>();
-				HashMap<TMLChannel, TMLChannel> outChans = new HashMap<TMLChannel, TMLChannel>();
-				if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){
-					firewallComp = new TMLCPrimitiveComponent(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxY(), false, null, tmlcdp.tmlctdp);
-					tmlcdp.tmlctdp.addComponent(firewallComp,0,0,false,true);
-					firewallComp.setValueWithChange(firewallNode.getName()+link);
-					firewallADP = tmlcdp.getTMLActivityDiagramPanel(firewallNode.getName()+link);
-				}
-
-				List<TMLChannel> channelsCopy = tmlm.getChannels();
-				List<TMLChannel> toAdd = new ArrayList<TMLChannel>();
-
-				TMLTask firewall = new TMLTask("TASK__"+firewallNode.getName()+"_"+link, firewallComp,firewallADP);
-
-
-				tmlm.addTask(firewall);
-				map.addTaskToHwExecutionNode(firewall,cpu);
-				TMLActivity act = firewall.getActivityDiagram();
-
-				TraceManager.addDev("FirewallADP " + firewallADP);
-				for (TMLChannel chan: channelsCopy){
-					TMLTask orig = chan.getOriginTask();
-					TMLTask dest = chan.getDestinationTask();
-					TMLPort origPort = chan.getOriginPort();
-					TMLPort destPort = chan.getDestinationPort();
-					TMLChannel wr = new TMLChannel(chan.getName()+"_firewallIn"+link,chan.getReferenceObject());
-					//Specify new channel attributes
-					wr.setSize(chan.getSize());
-					wr.setMax(chan.getMax());
-					wr.setPorts(origPort,destPort);
-					wr.setType(TMLChannel.BRBW);
-					wr.setPriority(chan.getPriority());
-					wr.setTasks(orig, firewall);
-					TMLChannel rd = new TMLChannel(chan.getName()+"_firewallOut"+link, chan.getReferenceObject());
-					rd.setTasks(firewall,dest);
-					rd.setSize(chan.getSize());
-					rd.setMax(chan.getMax());
-					rd.setPorts(origPort,destPort);
-					rd.setType(TMLChannel.BRBW);
-					rd.setPriority(chan.getPriority());
-					inChans.put(chan,wr);
-					outChans.put(chan,rd);
-					toAdd.add(rd);
-					toAdd.add(wr);
-					map.listE.addCor(rd, (TGComponent) rd.getReferenceObject());
-					map.listE.addCor(wr, (TGComponent) wr.getReferenceObject());
-				}
-				tmlm.removeAllChannels();
-				for (TMLChannel c:toAdd){
-					tmlm.addChannel(c);
-				}
-
-
-				if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){
-					//Build activity diagram
-					//Get start state
-					adStart = (TMLADStartState) firewallADP.getComponentList().get(0);
-					//add loop
-					adLoop = new TMLADForEverLoop(400,150,firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
-					firewallADP.addComponent(adLoop,400,150,false,true);
-					TGConnector tmp =new TGConnectorTMLAD(adLoop.getX(), adLoop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adStart.getTGConnectingPointAtIndex(0),adLoop.getTGConnectingPointAtIndex(0), new Vector<Point>());
-					firewallADP.addComponent(tmp, adLoop.getX(),adLoop.getY(),false,true);
-					//add choice
-					adChoice = new TMLADChoice(400,300, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
-					firewallADP.addComponent(adChoice, 400,300,false,true);
-
-					tmp =new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adLoop.getTGConnectingPointAtIndex(1), adChoice.getTGConnectingPointAtIndex(0), new Vector<Point>());
-					firewallADP.addComponent(tmp, adChoice.getX(),adChoice.getY(),false,true);
-					for (TMLChannel chan: inChans.keySet()){
-						TMLChannel newChan = inChans.get(chan);
-						TMLCChannelOutPort originPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
-						TMLCChannelOutPort destPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
-						for (TGComponent tg: tcdp.getComponentList()){
-							if (tg instanceof TMLCPrimitiveComponent){
-								if (tg.getValue().equals(newChan.getOriginTask().getName().split("__")[1])){
-									originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
-									originPort.commName=newChan.getName();
-									tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
-								}
-								else if (tg.getValue().equals(firewallNode.getName())){
-									destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
-									destPort.isOrigin=false;
-									destPort.commName=newChan.getName();
-									tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
-								}
-							}
-						}
-						TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
-						tcdp.addComponent(conn, 0,0,false,true);
-
-						TMLChannel wrChan = outChans.get(chan);
-						for (TGComponent tg: tcdp.getComponentList()){
-							if (tg instanceof TMLCPrimitiveComponent){
-								if (tg.getValue().equals(firewallNode.getName())){
-									originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
-									originPort.commName=wrChan.getName();
-									tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
-								}
-								else if (tg.getValue().equals(wrChan.getDestinationTask().getName().split("__")[1])){
-									destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
-									destPort.isOrigin=false;
-									destPort.commName=wrChan.getName();
-									tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
-								}
-							}
-						}
-						conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
-						tcdp.addComponent(conn, 0,0,false,true);
-					}
-					int xpos=200;
-					int i=1;
-					for (TMLChannel chan: inChans.keySet()){
-						TMLChannel newChan = inChans.get(chan);
-						adRC = new TMLADReadChannel(xpos,350, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
-						adRC.setChannelName(newChan.getName());
-						adRC.setSamples("1");
-
-						tmp =new TGConnectorTMLAD(adRC.getX(), adRC.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adChoice.getTGConnectingPointAtIndex(i), adRC.getTGConnectingPointAtIndex(0), new Vector<Point>());
-						firewallADP.addComponent(tmp, adRC.getX(),adRC.getY(),false,true);
-
-						firewallADP.addComponent(adRC,xpos,350,false,true);
-
-						//Execute for latency value
-						exec = new TMLADExecI(xpos,400,firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
-
-						exec.setDelayValue(Integer.toString(firewallNode.latency));
-						firewallADP.addComponent(exec,400,200,false,true);
-
-						tmp =new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adRC.getTGConnectingPointAtIndex(1), exec.getTGConnectingPointAtIndex(0), new Vector<Point>());
-						firewallADP.addComponent(tmp, exec.getX(),exec.getY(),false,true);
-
-						if (channelAllowed(map,chan)){
-							TMLChannel wrChan = outChans.get(chan);
-
-							adWC = new TMLADWriteChannel(xpos,400, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
-							adWC.setChannelName(wrChan.getName());
-							adWC.setSamples("1");
-							firewallADP.addComponent(adWC, xpos,400, false,true);
-
-							tmp =new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,exec.getTGConnectingPointAtIndex(1), adWC.getTGConnectingPointAtIndex(0), new Vector<Point>());
-							firewallADP.addComponent(tmp, exec.getX(),exec.getY(),false,true);
-
-							adStop = new TMLADStopState(xpos,500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
-							firewallADP.addComponent(adStop, xpos,500, false,true);
-							tmp =new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adWC.getTGConnectingPointAtIndex(1), adStop.getTGConnectingPointAtIndex(0), new Vector<Point>());
-							firewallADP.addComponent(tmp, adStop.getX(),adStop.getY(),false,true);
-						}
-						else {
-							adStop = new TMLADStopState(xpos,500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
-							firewallADP.addComponent(adStop, xpos,500, false,true);
-
-							tmp =new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,exec.getTGConnectingPointAtIndex(1), adStop.getTGConnectingPointAtIndex(0), new Vector<Point>());
-							firewallADP.addComponent(tmp, adStop.getX(),adStop.getY(),false,true);
-						}
-						xpos+=100;
-						i++;
-					}
-				}
-
-				TMLStartState start = new TMLStartState("start", adStart);
-				act.setFirst(start);
-				map.listE.addCor(start,adStart);
-
-				//Add infinite loop
-
-				TMLForLoop loop = new TMLForLoop("infiniteloop",adLoop);
-				loop.setInit("");
-				loop.setCondition("");
-				loop.setIncrement("");
-				loop.setInfinite(true);
-				start.addNext(loop);
-				act.addElement(loop);
-				//Add choice
-
-				TMLChoice choice = new TMLChoice("chooseChannel", adChoice);
-				act.addElement(choice);
-				loop.addNext(choice);
-				map.listE.addCor(choice,adChoice);
-
-
-
-
-				for (TMLChannel chan: inChans.keySet()){
-					TMLChannel newChan = inChans.get(chan);
-					TMLChannel wrChan = outChans.get(chan);
-					//Add channels into firewall activity diagram
-					TMLReadChannel rd = new TMLReadChannel(newChan.getName(), adRC);
-					rd.setNbOfSamples("1");
-					rd.addChannel(newChan);
-					choice.addNext(rd);
-					choice.addGuard("");
-
-					act.addElement(rd);
-
-					//Execute for latency value
-
-					TMLExecI ex = new TMLExecI("execi", exec);
-					ex.setAction(Integer.toString(firewallNode.latency));
-					act.addElement(ex);
-					rd.addNext(ex);
-
-					if (channelAllowed(map,chan)){
-
-						TMLWriteChannel wr = new TMLWriteChannel(wrChan.getName(), adWC);
-						wr.setNbOfSamples("1");
-						wr.addChannel(wrChan);
-						ex.addNext(wr);
-						act.addElement(wr);
-
-						TMLStopState stop = new TMLStopState("stop", adStop);
-						wr.addNext(stop);
-						act.addElement(stop);
-
-					}
-					else {
-						TMLStopState stop = new TMLStopState("stop", adStop);
-						ex.addNext(stop);
-						act.addElement(stop);
-					}
-					for (TMLTask t:tmlm.getTasks()){
-						TMLActivity actd = t.getActivityDiagram();
-						actd.replaceWriteChannelWith(chan,newChan);
-						actd.replaceReadChannelWith(chan, outChans.get(chan));
-					}
-				}
-
-			}
-
-		}
-		//Redo all reference objects
-
-		map.listE.useDIPLOIDs();
-		return map;
-	}
-
-	class ChannelData {
-		public String name;
-		public boolean isOrigin;
-		public boolean isChan;
-		public ChannelData(String n, boolean orig, boolean isCh){
-			name=n;
-			isOrigin=orig;
-			isChan=isCh;
-		}
-
-	}
-	class HSMChannel {
-		public String name;
-		public static final int SENC=0;
-		public static final int NONCE_ENC=1;
-		public static final int MAC=2;
-		public static final int DEC=3;
-		public static final int AENC=4;
-		public static final int NONCE=5;
-		public String task;
-		public String securityContext="";
-		public int secType;
-		public String nonceName="";
-		public HSMChannel (String n, String t, int type){
-			name=n;	
-			task=t;
-			secType=type;
-		}
-	}
-
-	public HashMap<String, HashSet<String>> getCPUTaskMap(){
-		HashMap<String, HashSet<String>> cpuTaskMap = new HashMap<String, HashSet<String>>();
-		if (tmap ==null){
-			return cpuTaskMap;
-		}
-
-		for (HwNode node: tmap.getArch().getCPUs()){
-			if (tmap.getMappedTasks(node).size()>0){
-				cpuTaskMap.put(node.getName(), tmap.getMappedTasks(node));
-			}
-		}
-
-		return cpuTaskMap;
-	}
-
-	public void addHSM(MainGUI gui, Map<String, List<String>> selectedCpuTasks){
-		System.out.println("Adding HSM");
-		String encComp="100";
-		String decComp="100";
-		String overhead ="0";
-		String name="hsm";
-		if (tmap==null){
-			return;
-		}
-		//Clone diagrams
-
-		int arch = gui.tabs.indexOf(tmap.tmlap);
-		gui.cloneRenameTab(arch,"hsm");
-		TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
-
-		TMLComponentDesignPanel tmlcdp = tmap.getTMLCDesignPanel();
-		int ind = gui.tabs.indexOf(tmlcdp);
-		String tabName = gui.getTitleAt(tmlcdp);
-		gui.cloneRenameTab(ind, name);
-		TMLComponentDesignPanel t = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1);
-		TMLComponentTaskDiagramPanel tcdp = t.tmlctdp;
-		//Create clone of architecture panel and map tasks to it
-		newarch.renameMapping(tabName, tabName+"_"+name);
-
-
-		//ProVerif analysis
-		ArrayList<String> nonAuthChans = new ArrayList<String>();
-		ArrayList<String> nonSecChans = new ArrayList<String>();
-
-		proverifAnalysis(tmap, nonAuthChans, nonSecChans);
-
-		TGConnector fromStart;
-		HashMap<String, HSMChannel> secChannels = new HashMap<String, HSMChannel>();
-		//Add a HSM for each selected CPU on the component diagram
-		for (String cpuName: selectedCpuTasks.keySet()){
-			HashMap<String, HSMChannel> hsmChannels = new HashMap<String, HSMChannel>();
-			TMLCPrimitiveComponent hsm = new TMLCPrimitiveComponent(0, 500, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxY(), false, null, tcdp);
-			TAttribute isEnc = new TAttribute(2, "isEnc", "true", 4);
-			hsm.getAttributes().add(isEnc);
-			tcdp.addComponent(hsm, 0,500,false,true);
-			hsm.setValueWithChange("HSM_"+cpuName);
-			//Find all associated components
-			List<TMLCPrimitiveComponent> comps = new ArrayList<TMLCPrimitiveComponent>();
-			//Find the component to add a HSM to
-
-			for (TGComponent tg: tcdp.getComponentList()){
-				if (tg instanceof TMLCPrimitiveComponent){
-					for (String compName: selectedCpuTasks.get(cpuName)){
-						if (tg.getValue().equals(compName)){
-							comps.add((TMLCPrimitiveComponent) tg);
-							break;
-						}
-					}
-				}
-				else if (tg instanceof TMLCCompositeComponent){
-					TMLCCompositeComponent cc = (TMLCCompositeComponent) tg;
-					List<TMLCPrimitiveComponent> pcomps =cc.getAllPrimitiveComponents();
-					for (TMLCPrimitiveComponent pc: pcomps){
-						for (String compName: selectedCpuTasks.get(cpuName)){
-							if (pc.getValue().equals(compName)){
-								comps.add((TMLCPrimitiveComponent) pc);
-								break;
-							}
-						}
-					}
-				}
-			}
-			if (comps.size()==0){
-				//System.out.println("No Components found");
-				continue;
-			}
-		//	System.out.println("nonAuthChans " + nonAuthChans);
-			//System.out.println("nonSecChans "+ nonSecChans);
-			for (TMLCPrimitiveComponent comp: comps){
-
-				HashMap<String, HSMChannel> compChannels = new HashMap<String, HSMChannel>();
-				String compName=comp.getValue();
-				TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(compName);
-				HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
-				HashSet<TGComponent> secOperators = new HashSet<TGComponent>();
-				isEnc = new TAttribute(2, "isEnc", "true", 4);
-				comp.getAttributes().add(isEnc);
-				//Find all unsecured channels
-				//For previously secured channels, relocate encryption to the hsm
-	
-				for (TGComponent tg: tad.getComponentList()){
-					if (tg instanceof TMLADWriteChannel){
-						TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-						if (writeChannel.securityContext.equals("")){
-							String nonceName="";
-							int type=-1;
-							if (nonSecChans.contains(compName+"__"+writeChannel.getChannelName()+"_chData")){
-								type=HSMChannel.SENC;
-								if (nonAuthChans.contains(compName+"__"+writeChannel.getChannelName())){
-									nonceName="nonce_"+writeChannel.getChannelName();
-								}
-							}
-							else if (nonAuthChans.contains(compName+"__"+writeChannel.getChannelName())){
-								type=HSMChannel.MAC;
-							}
-							HSMChannel ch=new HSMChannel(writeChannel.getChannelName(), compName, type);
-							ch.securityContext="hsmSec_"+writeChannel.getChannelName();
-							ch.nonceName=nonceName;
-							fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-							if (fromStart!=null){
-								if (type!=-1){
-									compChannels.put(writeChannel.getChannelName(),ch);
-									channelInstances.add(tg);
-								}
-							}
-						}
-						else {
-							//System.out.println("security context:"+writeChannel.securityContext);
-							fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-							if (fromStart!=null){
-								channelInstances.add(tg);
-								SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.securityContext);
-								int type=-1;
-								if (sp.type.equals("Symmetric Encryption")){
-									type=HSMChannel.SENC;
-								}
-								else if (sp.type.equals("Asymmetric Encryption")){
-									type=HSMChannel.AENC;
-								}
-								else if (sp.type.equals("MAC")){
-									type=HSMChannel.MAC;
-								}
-								else if (sp.type.equals("Nonce")){
-									type=HSMChannel.NONCE;
-								}
-								HSMChannel ch = new HSMChannel(writeChannel.getChannelName(), compName, type);
-								ch.securityContext=writeChannel.securityContext;
-								compChannels.put(writeChannel.getChannelName(),ch);
-								//chanNames.add(writeChannel.getChannelName()+compName);
-							}
-						}
-					}
-					if (tg instanceof TMLADReadChannel){
-						TMLADReadChannel readChannel = (TMLADReadChannel) tg;
-						if (readChannel.securityContext.equals("")){
-							fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-							if (fromStart!=null){
-								if(nonSecChans.contains(compName+"__"+readChannel.getChannelName()+"_chData") || nonAuthChans.contains(compName+"__"+readChannel.getChannelName())){
-									channelInstances.add(tg);
-									HSMChannel ch = new HSMChannel(readChannel.getChannelName(), compName, HSMChannel.DEC);
-									ch.securityContext="hsmSec_"+readChannel.getChannelName();
-									compChannels.put(readChannel.getChannelName(),ch);
-									if (nonSecChans.contains(compName+"__"+readChannel.getChannelName()+"_chData") && nonAuthChans.contains(compName+"__"+readChannel.getChannelName())){
-										ch.nonceName="nonce_"+readChannel.getChannelName();
-									}
-								}
-							}
-						}
-						else {
-							fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-							if (fromStart!=null){
-								channelInstances.add(tg);
-								HSMChannel ch = new HSMChannel(readChannel.getChannelName(), compName, HSMChannel.DEC);
-								ch.securityContext=readChannel.securityContext;
-								compChannels.put(readChannel.getChannelName(),ch);
-							}
-						}
-					}
-					if (tg instanceof TMLADEncrypt){
-					//	TMLADEncrypt enc = (TMLADEncrypt) tg;
-						secOperators.add(tg);
-						//}
-					}
-					if (tg instanceof TMLADDecrypt){
-					//	TMLADDecrypt dec = (TMLADDecrypt) tg;
-						secOperators.add(tg);
-						//}
-					}
-				}
-				//System.out.println("compchannels " +compChannels);
-				List<ChannelData> hsmChans = new ArrayList<ChannelData>();
-				ChannelData chd = new ChannelData("startHSM_"+cpuName,false,false);
-				hsmChans.add(chd);
-				for (String s: compChannels.keySet()){
-					hsmChannels.put(s,compChannels.get(s));
-					chd = new ChannelData("data_"+s+"_"+compChannels.get(s).task,false,true);
-					hsmChans.add(chd);
-					chd = new ChannelData("retData_"+s+"_"+compChannels.get(s).task,true,true);
-					hsmChans.add(chd);
-				}
-				for (ChannelData hsmChan: hsmChans){
-					TMLCChannelOutPort originPort =new TMLCChannelOutPort(comp.getX(), comp.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, hsm, tcdp);
-					TMLCChannelOutPort destPort = new TMLCChannelOutPort(comp.getX(), comp.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, comp, tcdp);
-					originPort.commName=hsmChan.name;
-					originPort.isOrigin=hsmChan.isOrigin;
-					tcdp.addComponent(originPort,hsm.getX(), hsm.getY(),true,true);
-					destPort.commName=hsmChan.name;
-					if (!hsmChan.isChan){
-						originPort.typep=2;
-						destPort.typep=2;
-						originPort.setParam(0, new TType(2));
-					}
-					destPort.isOrigin=!hsmChan.isOrigin;
-
-					tcdp.addComponent(destPort,comp.getX(), comp.getY(),true,true);
-
-					TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
-					tcdp.addComponent(conn, 0,0,false,true);
-				}
-				int xpos=0;
-				int ypos=0;
-
-				//Remove existing security elements
-				for (TGComponent op: secOperators){
-					TGConnector prev = tad.findTGConnectorEndingAt(op.getTGConnectingPointAtIndex(0));
-					//TGConnectingPoint point = prev.getTGConnectingPointP1();
-					TGConnector end = tad.findTGConnectorStartingAt(op.getTGConnectingPointAtIndex(1));
-					TGConnectingPoint point2 = end.getTGConnectingPointP2();
-					tad.removeComponent(op);
-					tad.removeComponent(end);
-					tad.addComponent(prev,0,0,false,true);
-					prev.setP2(point2);
-				}
-
-				//Modify component activity diagram to add read/write to HSM
-
-				//Add actions before Write Channel
-				for (TGComponent chan: channelInstances){
-					String chanName="";
-					if (!(chan instanceof TMLADWriteChannel)){
-						continue;
-					}
-					TMLADWriteChannel writeChannel = (TMLADWriteChannel) chan;
-					chanName=writeChannel.getChannelName();
-					HSMChannel ch = hsmChannels.get(chanName);
-					writeChannel.securityContext = ch.securityContext;
-					xpos = chan.getX();
-					ypos = chan.getY();
-					fromStart = tad.findTGConnectorEndingAt(chan.getTGConnectingPointAtIndex(0));
-					TGConnectingPoint point = fromStart.getTGConnectingPointP2();
-
-					//set isEnc to true
-					int yShift=50;
-					
-					TMLADSendRequest req = new TMLADSendRequest(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					req.setRequestName("startHSM_"+cpuName);
-					req.setParam(0,"isEnc");
-					tad.addComponent(req, xpos, ypos+yShift, false,true);
-
-					fromStart.setP2(req.getTGConnectingPointAtIndex(0));
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-
-					//Add connection
-					fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					fromStart.setP1(req.getTGConnectingPointAtIndex(1));
-					TMLADWriteChannel wr =new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					
-					yShift+=50;
-					//Add write channel operator
-					wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					wr.setChannelName("data_"+chanName+"_"+compName);
-					wr.securityContext = ch.securityContext;
-					tad.addComponent(wr, xpos, ypos+yShift, false,true);
-
-
-					fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-
-					fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-					fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
-					
-
-
-					
-
-					
-
-					//Add read channel operator
-
-					yShift+=60;
-					TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					rd.setChannelName("retData_"+chanName+"_"+compName);
-					rd.securityContext = ch.securityContext;
-					tad.addComponent(rd, xpos, ypos+yShift, false,true);
-
-					fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
-					yShift+=50;
-
-					//Add connector
-					fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-					fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-					yShift+=50;
-
-					//Direct the last TGConnector back to the start of the write channel operator
-
-
-					fromStart.setP2(point);
-					//Shift components down to make room for the added ones, and add security contexts to write channels
-					for (TGComponent tg:tad.getComponentList()){
-						if (tg.getY() >= ypos && tg !=wr && tg!=req && tg!=rd){
-							tg.setCd(tg.getX(), tg.getY()+yShift);
-						}
-					}
-					tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-					tad.repaint();
-
-				}
-				//Add actions after Read Channel
-				for (TGComponent chan: channelInstances){
-					String chanName="";
-					if (!(chan instanceof TMLADReadChannel)) {
-						continue;
-					}
-					TMLADReadChannel readChannel = (TMLADReadChannel) chan;
-					chanName=readChannel.getChannelName();
-					HSMChannel ch= hsmChannels.get(chanName);
-					readChannel.securityContext = ch.securityContext;;
-					xpos = chan.getX()+10;
-					ypos = chan.getY();
-					fromStart = tad.findTGConnectorStartingAt(chan.getTGConnectingPointAtIndex(1));
-					if (fromStart==null){
-						fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(chan.getTGConnectingPointAtIndex(1));
-						tad.addComponent(fromStart, xpos,ypos,false,true);
-					}
-					TGConnectingPoint point = fromStart.getTGConnectingPointP2();
-
-					//Set isEnc to false
-					int yShift=50;
-					TMLADActionState act = new TMLADActionState(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					act.setValue("isEnc=false");
-					tad.addComponent(act, xpos, ypos+yShift, false,true);
-					fromStart.setP2(act.getTGConnectingPointAtIndex(0));
-
-
-					//Add send request operator
-
-					yShift+=50;
-					TMLADSendRequest req = new TMLADSendRequest(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					req.setRequestName("startHSM_"+cpuName);
-					req.setParam(0,"isEnc");
-					req.makeValue();
-					tad.addComponent(req, xpos, ypos+yShift, false,true);
+    //Added by Solange
 
+    public GProactiveDesign gpdtemp;
+
+
+    //
+    private Vector<TURTLEPanel> panels; /* analysis, design, deployment, tml design */
+    private TURTLEModeling tm;
+    private AvatarSpecification avatarspec;
+    //  private AttackTree attackTree;
+    private AVATAR2UPPAAL avatar2uppaal;
+    private AVATAR2ProVerif avatar2proverif;
+    private boolean optimizeAvatar;
+    private int tmState; // 0:generated, 1: to be generated from mapping, 2: to be generated from TML modeling
+
+    private TMLModeling tmlm;
+    private TMLMapping artificialtmap;
+    private TMLMapping tmap;
+    private TMLCP tmlcp;
+    private TML2Avatar t2a;
+    private RequirementModeling rm;
+    private NCStructure ncs;
+    private MainGUI mgui;
+    private CorrespondanceTGElement listE;
+    private String rtlotos;
+
+    private EBRDD ebrdd;
+
+    private UPPAALSpec uppaal;
+    private RelationTIFUPPAAL uppaalTIFTable;
+    private RelationTMLUPPAAL uppaalTMLTable;
+
+    private ProVerifSpec proverif;
+
+    private AVATAR2TPN avatar2tpn;
+    private TPN tpnFromAvatar;
+
+    private String tpn;
+    private String sim;
+    private String dta;
+    private String dtadot;
+    private String rg;
+    private String rgdot;
+    private String rgaut;
+    private String rgautdot;
+    private String rgautproj;
+    private String rgautprojdot;
+    private String tlsa;
+    private String tlsadot;
+
+    private List<RG> graphs;
+    private GraphTree gt;
+
+    private int nbRTLOTOS;
+    private int nbSuggestedDesign;
+    //  private int nbSuggestedAnalysis;
+    //  private int nbTPN;
+
+    //private ValidationDataTree vdt;
+    private SearchTree st;
+    private SyntaxAnalysisTree mcvdt;
+    private InvariantDataTree idt;
+
+    private List<CheckingError> checkingErrors;
+    private List<CheckingError> warnings;
+
+    private List<Invariant> invariants;
+
+    List<TGConnectorInfo> pendingConnectors;
+
+    private Vector<String> savedOperations;
+    private Vector<Point> savedPanels;
+    private int nbMaxSavedOperations = 10;
+    private int pointerOperation;
 
-					//Add connection
-					fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					fromStart.setP1(act.getTGConnectingPointAtIndex(1));
-					fromStart.setP2(req.getTGConnectingPointAtIndex(0));
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-
-
-
-
-					yShift+=50;
-					//Add write channel operator
-					TMLADWriteChannel wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					wr.setChannelName("data_"+chanName+"_"+compName);
-					wr.securityContext = ch.securityContext;;
-					tad.addComponent(wr, xpos, ypos+yShift, false,true);
-
-
-					//Add connection
-					fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					fromStart.setP1(req.getTGConnectingPointAtIndex(1));
-					fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-
-					//Add read channel operator
-
-					yShift+=60;
-					TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					rd.setChannelName("retData_"+chanName+"_"+compName);
-					rd.securityContext = ch.securityContext;;
-					tad.addComponent(rd, xpos, ypos+yShift, false,true);
-
-					fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-					fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
-					fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
-					yShift+=50;
-
-					if (point!=null){
-						fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						tad.addComponent(fromStart, xpos, ypos, false, true);
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						//Direct the last TGConnector back to the start of the write channel operator
-
-						fromStart.setP2(point);
-					}
-					yShift+=50;
-
-					//Shift components down to make room for the added ones, and add security contexts to write channels
-					for (TGComponent tg:tad.getComponentList()){
-						if (tg.getY() >= ypos && tg !=wr && tg!=req && tg!=rd && tg!=chan && tg!=act){
-							tg.setCd(tg.getX(), tg.getY()+yShift);
-						}
-					}
-					tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-					tad.repaint();
-				}
-				//for (String chan: chanNames){
-				//			  hsmChannels.put(chan, compName);
-				//}
-			}
-
-			int xpos=0;
-			int ypos=0;
-
-
-
-			//Build HSM Activity diagram
-
-			TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel("HSM_"+cpuName);
-
-			TMLADStartState start = (TMLADStartState) tad.getComponentList().get(0);
-			fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-
-
-			TMLADReadRequestArg req = new TMLADReadRequestArg(300, 100, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-			tad.addComponent(req, 300,100,false,true);
-			req.setParam(0, "isEnc");
-			req.makeValue();
-
-			//Connect start and readrequest
-			fromStart.setP1(start.getTGConnectingPointAtIndex(0));
-			fromStart.setP2(req.getTGConnectingPointAtIndex(0));
-			tad.addComponent(fromStart, 300,200,false,true);
-
-
-
-			TMLADChoice choice = new TMLADChoice(300, 200, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-			tad.addComponent(choice, 300,200,false,true);
-
-
-			//Connect readrequest and choice
-			fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-			fromStart.setP1(req.getTGConnectingPointAtIndex(1));
-			fromStart.setP2(choice.getTGConnectingPointAtIndex(0));
-			tad.addComponent(fromStart, 300,200,false,true);
-
-
-			int xc = 150;
-			//Allows 9 channels max to simplify the diagram
-
-			//If more than 3 channels, build 2 levels of choices
-			TMLADChoice choice2= new TMLADChoice(xc, 400, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-			if (hsmChannels.keySet().size()>3){
-				int i=0;
-				for (String chan: hsmChannels.keySet()){
-					HSMChannel ch = hsmChannels.get(chan);
-					if (i%3==0){
-					//Add a new choice every third channel
-						choice2= new TMLADChoice(xc, 250, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						tad.addComponent(choice2, xc, 400,false,true);
-						//Connect new choice operator to top choice
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(choice.getTGConnectingPointAtIndex(i/3+1));
-						fromStart.setP2(choice2.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-					}
-					TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task);
-					rd.securityContext = ch.securityContext;;
-					tad.addComponent(rd, xc,300,false,true);
-					//Connect choice and readchannel						
-					fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					fromStart.setP1(choice2.getTGConnectingPointAtIndex(i%3+1));
-					fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
-			
-					tad.addComponent(fromStart, 300,200,false,true);
-					TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task);
-					tad.addComponent(wr, xc, 600,false,true);
-					wr.securityContext = ch.securityContext;
-
-
-					if (hsmChannels.get(chan).secType==HSMChannel.DEC){
-						TMLADDecrypt dec = new TMLADDecrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						dec.securityContext =  ch.securityContext;
-		   			 	tad.addComponent(dec, xc, 500,false,true);
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-						
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-						
-						//Connect encrypt and writechannel
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-					}
-					else {
-						TMLADEncrypt enc = new TMLADEncrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						enc.securityContext = ch.securityContext;
-						if (hsmChannels.get(chan).secType==HSMChannel.SENC){
-							enc.type = "Symmetric Encryption";
-						}
-						else if (hsmChannels.get(chan).secType==HSMChannel.AENC){	
-							enc.type="Asymmetric Encryption";
-						}
-						else if (hsmChannels.get(chan).secType==HSMChannel.MAC){	
-							enc.type="MAC";
-						}
-						else if (hsmChannels.get(chan).secType==HSMChannel.NONCE){
-							enc.type="Nonce";
-						}
-
-						enc.message_overhead = overhead;
-						enc.encTime= encComp;
-						enc.decTime=decComp;
-						enc.nonce=hsmChannels.get(chan).nonceName;
-						tad.addComponent(enc, xc, 500,false,true);
-					
-						//Connect encrypt and readchannel
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-							
-						//Connect encrypt and writechannel
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-
-					}	
-					xc+=300;
-					i++;
-				}
-			}
-			else {
-			
-				int i=1;
-
-				for (String chan: hsmChannels.keySet()){
-					HSMChannel ch = hsmChannels.get(chan);
-					TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task);
-					rd.securityContext = ch.securityContext;
-					tad.addComponent(rd, xc,300,false,true);
-					//Connect choice and readchannel
-				
-					fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					fromStart.setP1(choice.getTGConnectingPointAtIndex(i));
-					fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
-			
-					tad.addComponent(fromStart, 300,200,false,true);
-
-					TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task);
-					tad.addComponent(wr, xc, 600,false,true);
-					wr.securityContext = ch.securityContext;
-
-
-					if (hsmChannels.get(chan).secType==HSMChannel.DEC){
-						TMLADDecrypt dec = new TMLADDecrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						dec.securityContext = ch.securityContext;
-			   		 	tad.addComponent(dec, xc, 500,false,true);
-
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-						
-						//Connect encrypt and writechannel
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-					}
-					else {
-						TMLADEncrypt enc = new TMLADEncrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						enc.securityContext = ch.securityContext;
-						if (hsmChannels.get(chan).secType==HSMChannel.SENC){
-							enc.type = "Symmetric Encryption";
-						}
-						else if (hsmChannels.get(chan).secType==HSMChannel.AENC){	
-							enc.type="Asymmetric Encryption";
-						}
-						else if (hsmChannels.get(chan).secType==HSMChannel.MAC){	
-							enc.type="MAC";
-						}
-						else if (hsmChannels.get(chan).secType==HSMChannel.NONCE){	
-							enc.type="Nonce";
-						}
-
-						enc.message_overhead = overhead;
-						enc.encTime= encComp;
-						enc.decTime=decComp;
-						tad.addComponent(enc, xc, 500,false,true);
-						
-						//Connect encrypt and readchannel
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-						
-						//Connect encrypt and writechannel
-						fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
-						tad.addComponent(fromStart, 300,200,false,true);
-
-
-					}
-
-
-				/*MLADChoice choice2 = new TMLADChoice(xc, 400, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-				tad.addComponent(choice2, xc, 400,false,true);
-				choice2.setGuard("[isEnc]", 0);
-				choice2.setGuard("[else]",1);
-
-				//connect readchannel and choice 2
-				fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
-				fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-				fromStart.setP2(choice2.getTGConnectingPointAtIndex(0));
-				tad.addComponent(fromStart, 300,200,false,true);
-
-				TMLADEncrypt enc = new TMLADEncrypt(xc-75, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-				enc.securityContext = "hsmSec_"+chan;
-				enc.type = "Symmetric Encryption";
-				enc.message_overhead = overhead;
-				enc.encTime= encComp;
-				enc.decTime=decComp;
-				tad.addComponent(enc, xc-75, 500,false,true);
-
-				//Connect choice 2 and encrypt
-				fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
-				fromStart.setP1(choice2.getTGConnectingPointAtIndex(1));
-				fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
-				tad.addComponent(fromStart, 300,200,false,true);
-
-				TMLADWriteChannel wr = new TMLADWriteChannel(xc-75, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-				wr.setChannelName("retData_"+chan+hsmChannels.get(chan));
-				tad.addComponent(wr, xc-75, 600,false,true);
-				wr.securityContext = "hsmSec_"+chan;
-
-				//Connect encrypt and writeChannel
-				fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
-				fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
-				fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
-				tad.addComponent(fromStart, 300,200,false,true);
-
-
-				TMLADDecrypt dec = new TMLADDecrypt(xc+75, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-				dec.securityContext = "hsmSec_"+chan;
-				tad.addComponent(dec, xc+75, 500,false,true);
-
-				//Connect choice2 and decrypt
-
-				fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
-				fromStart.setP1(choice2.getTGConnectingPointAtIndex(2));
-				fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
-				tad.addComponent(fromStart, 300,200,false,true);
-
-				TMLADWriteChannel wr2 = new TMLADWriteChannel(xc+75, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-				wr2.setChannelName("retData_"+chan+hsmChannels.get(chan));
-				wr2.securityContext = "hsmSec_"+chan;
-
-				//Connect decrypt and writeChannel
-				fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
-				fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
-				fromStart.setP2(wr2.getTGConnectingPointAtIndex(0));
-				tad.addComponent(fromStart, 300,200,false,true);
-				tad.addComponent(wr2, xc+75, 600,false,true);
-
-*/
-				xc+=300;
-				i++;
-			}
-		
-		}
-
-	secChannels.putAll(hsmChannels);
-}
-			//For all the tasks that receive encrypted data, decrypt it, assuming it has no associated HSM
-			for (TMLTask task: tmap.getTMLModeling().getTasks()){
-				int xpos, ypos;
-				//System.out.println("loop 2");
-				TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(task.getName());
-				HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
-				for (String chan: secChannels.keySet()){
-					HSMChannel ch = secChannels.get(chan);
-					channelInstances.clear();
-					for (TGComponent tg: tad.getComponentList()){
-						if (tg instanceof TMLADReadChannel){
-							TMLADReadChannel readChannel = (TMLADReadChannel) tg;
-							if (readChannel.getChannelName().equals(chan) && readChannel.securityContext.equals("")){
-								fromStart = tad.findTGConnectorStartingAt(tg.getTGConnectingPointAtIndex(1));
-								if (fromStart!=null){
-									channelInstances.add(tg);
-								}
-							}
-						}
-					}
-					for (TGComponent chI: channelInstances){
-						TMLADReadChannel readChannel = (TMLADReadChannel) chI;
-						readChannel.securityContext=ch.securityContext;
-						xpos = chI.getX();
-						ypos = chI.getY()+10;
-						fromStart = tad.findTGConnectorStartingAt(chI.getTGConnectingPointAtIndex(1));
-						if (fromStart==null){
-							fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-							fromStart.setP1(chI.getTGConnectingPointAtIndex(1));
-							tad.addComponent(fromStart, xpos,ypos,false,true);
-						}
-						TGConnectingPoint point = fromStart.getTGConnectingPointP2();
-						//Add decryption operator
-						int yShift=100;
-						TMLADDecrypt dec = new TMLADDecrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						dec.securityContext = ch.securityContext;
-						tad.addComponent(dec, xpos,ypos+yShift, false, true);
-
-
-						fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
-						if (point!=null){
-							fromStart=new TGConnectorTMLAD(dec.getX(), dec.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-							tad.addComponent(fromStart, xpos, ypos, false, true);
-							fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
-
-							//Direct the last TGConnector back to the next action
-
-							fromStart.setP2(point);
-						}
-						//Shift components down to make room for the added ones, and add security contexts to write channels
-						for (TGComponent tg:tad.getComponentList()){
-							if (tg.getY() >= ypos && tg!=dec){
-								tg.setCd(tg.getX(), tg.getY()+yShift);
-							}
-						}
-						tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-						tad.repaint();
-
-					}
-				}
-				//Next find channels that send encrypted data, and add the encryption operator
-				for (String chan: secChannels.keySet()){
-					channelInstances.clear();
-					HSMChannel ch = secChannels.get(chan);
-					for (TGComponent tg: tad.getComponentList()){
-						if (tg instanceof TMLADWriteChannel){
-							TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-							if (writeChannel.getChannelName().equals(chan) && writeChannel.securityContext.equals("")){
-								fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-								if (fromStart!=null){
-									channelInstances.add(tg);
-								}
-							}
-						}
-					}
-					for (TGComponent chI: channelInstances){
-						TMLADWriteChannel writeChannel = (TMLADWriteChannel) chI;
-						writeChannel.securityContext=ch.securityContext;
-						xpos = chI.getX();
-						ypos = chI.getY()-10;
-						fromStart = tad.findTGConnectorEndingAt(chI.getTGConnectingPointAtIndex(0));
-						TGConnectingPoint point = fromStart.getTGConnectingPointP2();
-						//Add encryption operator
-						int yShift=100;
-
-						TMLADEncrypt enc = new TMLADEncrypt(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						tad.addComponent(enc,xpos, ypos, false,true);
-						enc.securityContext = ch.securityContext;
-						enc.type = "Symmetric Encryption";
-						enc.message_overhead = overhead;
-						enc.encTime= encComp;
-						enc.decTime=decComp;
-						enc.size=overhead;
-
-
-						fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
-						fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						tad.addComponent(fromStart, xpos, ypos, false, true);
-						fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
-
-						//Direct the last TGConnector back to the start of the write channel operator
-
-						fromStart.setP2(point);
-						//Shift components down to make room for the added ones, and add security contexts to write channels
-						for (TGComponent tg:tad.getComponentList()){
-							if (tg.getY() >= ypos && tg !=enc){
-								tg.setCd(tg.getX(), tg.getY()+yShift);
-							}
-						}
-						tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-						tad.repaint();
-
-					}
-				}
-
-			}			
-		for (String cpuName: selectedCpuTasks.keySet()){
-			//Add a private bus to Hardware Accelerator with the task for hsm
-
-			//Find the CPU the task is mapped to
-			TMLArchiDiagramPanel archPanel = newarch.tmlap;
-			TMLArchiCPUNode cpu=null;
-			String refTask="";
-			for (TGComponent tg: archPanel.getComponentList()){
-				if (tg instanceof TMLArchiCPUNode){
-					if (tg.getName().equals(cpuName)){
-						cpu=(TMLArchiCPUNode) tg;
-						TMLArchiArtifact art = (TMLArchiArtifact) cpu.getArtifactList().get(0);
-						refTask=art.getReferenceTaskName();
-						break;
-
-					}
-				}
-			}
-
-			if (cpu==null){
-				return;
-			}
-
-			//Add new memory
-			TMLArchiMemoryNode mem = new TMLArchiMemoryNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel);
-			archPanel.addComponent(mem, cpu.getX()+100, cpu.getY()+100, false, true);
-			mem.setName("HSMMemory_"+cpuName);
-			//Add Hardware Accelerator
-
-			TMLArchiHWANode hwa = new TMLArchiHWANode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel);
-			archPanel.addComponent(hwa, cpu.getX()+100, cpu.getY()+100, false, true);
-			hwa.setName("HSM_"+cpuName);
-			//Add hsm task to hwa
-
-
-			TMLArchiArtifact hsmArt = new TMLArchiArtifact(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, hwa, archPanel);
-			archPanel.addComponent(hsmArt, cpu.getX()+100, cpu.getY()+100, true, true);
-			hsmArt.setFullName("HSM_"+cpuName, refTask);
-			//Add bus connecting the cpu and HWA
-
-			TMLArchiBUSNode bus = new TMLArchiBUSNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel);
-			bus.setPrivacy(1);
-			bus.setName("HSMBus_"+cpuName);
-			archPanel.addComponent(bus, cpu.getX()+200, cpu.getY()+200, false, true);
-
-			//Connect Bus and CPU
-			TMLArchiConnectorNode connect =new  TMLArchiConnectorNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel, null, null, new Vector<Point>());
-			TGConnectingPoint p1 = bus.findFirstFreeTGConnectingPoint(true,true);
-			p1.setFree(false);
-			connect.setP2(p1);
-
-
-
-			TGConnectingPoint p2 = cpu.findFirstFreeTGConnectingPoint(true,true);
-			p1.setFree(false);
-			connect.setP1(p2);
-			archPanel.addComponent(connect, cpu.getX()+100, cpu.getY()+100, false, true);
-			//Connect Bus and HWA
-
-			connect = new TMLArchiConnectorNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel, null, null, new Vector<Point>());
-			p1 = bus.findFirstFreeTGConnectingPoint(true,true);
-			p1.setFree(false);
-			connect.setP2(p1);
-
-			p2 = hwa.findFirstFreeTGConnectingPoint(true,true);
-			p1.setFree(false);
-			connect.setP1(p2);
-
-			archPanel.addComponent(connect, cpu.getX()+100, cpu.getY()+100, false, true);
-			//Connect Bus and Memory
-
-			connect = new TMLArchiConnectorNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel, null, null, new Vector<Point>());
-			p1 = bus.findFirstFreeTGConnectingPoint(true,true);
-			p1.setFree(false);
-			connect.setP2(p1);
-
-			p2 = mem.findFirstFreeTGConnectingPoint(true,true);
-			p1.setFree(false);
-			connect.setP1(p2);
-			archPanel.addComponent(connect, cpu.getX()+100, cpu.getY()+100, false, true);
-		}
-	
-	}
-
-	public TMLMapping autoSecure(MainGUI gui, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
-		//TODO add more options
-		//
-		if (tmap==null){
-			return null;
-		}
-		int arch = gui.tabs.indexOf(tmap.tmlap);
-		gui.cloneRenameTab(arch,"enc");
-		TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
-		return autoSecure(gui, "enc", tmap,newarch,autoConf,autoWeakAuth, autoStrongAuth);
-	}
-	public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch){
-		return autoSecure(gui,name,map,newarch,"100","0","100",true,false,false);
-	}
-	public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
-		return autoSecure(gui,name,map,newarch,"100","0","100",autoConf,autoWeakAuth, autoStrongAuth);
-	}
-
-	public TMLMapping autoSecure(MainGUI gui, String encComp, String overhead, String decComp){
-		if (tmap==null){
-			return null;
-		}
-		int arch = gui.tabs.indexOf(tmap.tmlap);
-		gui.cloneRenameTab(arch,"enc");
-		TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
-		return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,true,false,false);
-	}
-
-	public TMLMapping autoSecure(MainGUI gui, String encComp, String overhead, String decComp, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
-		if (tmap==null){
-			return null;
-		}
-		int arch = gui.tabs.indexOf(tmap.tmlap);
-		gui.cloneRenameTab(arch,"enc");
-		TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
-		return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,autoConf,autoWeakAuth, autoStrongAuth);
-	}
-	public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch, String encComp, String overhead, String decComp){
-		return autoSecure(gui,name, tmap,newarch,encComp, overhead,decComp,true,false, false);
-	}
-
-	public void proverifAnalysis(TMLMapping map,  ArrayList<String> nonAuthChans, ArrayList<String> nonSecChans){
- 		if (map==null){
-			TraceManager.addDev("No mapping");
-			return;
-		}
-		//Perform ProVerif Analysis
-		TML2Avatar t2a = new TML2Avatar(map,false,true);
-		AvatarSpecification avatarspec = t2a.generateAvatarSpec("1");
-		if (avatarspec == null){
-			TraceManager.addDev("No avatar spec");
-			return;
-		}
-
-		avatar2proverif = new AVATAR2ProVerif(avatarspec);
-		try {
-			proverif = avatar2proverif.generateProVerif(true, true, 1, true);
-			warnings = avatar2proverif.getWarnings();
-
-			if (!avatar2proverif.saveInFile("pvspec")){
-				return;
-			}
-
-			RshClient rshc = new RshClient(ConfigurationTTool.ProVerifVerifierHost);
-
-			rshc.setCmd(ConfigurationTTool.ProVerifVerifierPath + " -in pitype pvspec");
-			rshc.sendExecuteCommandRequest();
-			Reader data  = rshc.getDataReaderFromProcess();
-
-			ProVerifOutputAnalyzer pvoa = getProVerifOutputAnalyzer ();
-			pvoa.analyzeOutput(data, true);
-                        HashMap<AvatarPragmaSecret, ProVerifQueryResult> confResults = pvoa.getConfidentialityResults();
-			for (AvatarPragmaSecret pragma: confResults.keySet()) {
-                            if (confResults.get(pragma).isProved() && !confResults.get(pragma).isSatisfied())
-                            {
-				nonSecChans.add(pragma.getArg().getBlock().getName() + "__" + pragma.getArg().getName());
-				TraceManager.addDev(pragma.getArg().getBlock().getName() + "." + pragma.getArg().getName()+ " is not secret");
-				TMLChannel chan = map.getTMLModeling().getChannelByShortName(pragma.getArg().getName().replaceAll("_chData",""));
-				for (String block:chan.getTaskNames()){
-					nonSecChans.add(block+"__"+pragma.getArg().getName());
-				}
+    private DocumentBuilderFactory dbf;
+    private DocumentBuilder db;
+    private Document docCopy;
+
+    private int decX, decY, decId;
+
+    private static int graphId = 0;
+
+    private int languageID;
+    public final static int RT_LOTOS = 0;
+    public final static int LOTOS = 1;
+    public final static int AUT = 2;
+    public final static int TPN = 3;
+    public final static int MATRIX = 4;
+    public final static int UPPAAL = 5;
+    public final static int PROVERIF = 6;
+
+    private boolean undoRunning = false;
+
+
+
+    boolean hasCrypto=false;
+    //private Charset chset1, chset2;
+
+    public GTURTLEModeling(MainGUI _mgui, Vector<TURTLEPanel> _panels) {
+        mgui = _mgui;
+        panels = _panels;
+        try {
+            dbf = DocumentBuilderFactory.newInstance();
+            db = dbf.newDocumentBuilder();
+        } catch (ParserConfigurationException e) {
+            dbf = null;
+            db = null;
+        }
+        savedOperations = new Vector<String>();
+        savedPanels = new Vector<Point>();
+        pointerOperation = -1;
+
+        graphs = new ArrayList<RG>();
+        invariants = new LinkedList<Invariant>();
+
+        //vdt = new ValidationDataTree(mgui);
+        mcvdt = new SyntaxAnalysisTree(mgui);
+        idt = new InvariantDataTree(mgui);
+        st = new SearchTree(mgui);
+        gt = new GraphTree(mgui);
+
+        /*if (!Charset.isSupported("UTF-8")) {
+          ErrorGUI.exit(ErrorGUI.ERROR_CHARSET);
+          }
+
+          chset1 = Charset.forName("UTF-8");*/
+    }
+
+    public int getLanguageID() {
+        return languageID;
+    }
+
+    public boolean isRegularTM() {
+        if (tm == null ){
+            return false;
+        }
+        return tm.isARegularTIFSpec();
+    }
+
+    public List<RG> getRGs() {
+        return graphs;
+    }
+
+    public void addRG(RG newGraph) {
+        //TraceManager.addDev("Adding new graph " + newGraph);
+        graphs.add(newGraph);
+    }
+
+    public void removeRG(RG oldGraph) {
+        //TraceManager.addDev("Adding new graph " + newGraph);
+        graphs.remove(oldGraph);
+    }
+
+
+    public List<Invariant> getInvariants() {
+        return invariants;
+    }
+
+
+
+    public void addInvariant(Invariant _inv) {
+        invariants.add(_inv);
+        TraceManager.addDev("Adding invariant: " + _inv.toString());
+    }
+
+    public void clearInvariants() {
+        invariants.clear();
+    }
+
+
+
+    public String saveTIF() {
+        if (tm == null) {
+            TraceManager.addDev("NO TIF to save");
+            return null;
+        }
+
+        TIFExchange tif = new TIFExchange();
+        tif.setTURTLEModeling(tm);
+        String ret = tif.saveInXMLTIF();
+        TraceManager.addDev("TIF=\n" +  ret);
+        return ret;
+    }
+
+    public boolean openTIF(String s) {
+        TIFExchange tif = new TIFExchange();
+        boolean ret = false;
+
+        try {
+            ret = tif.loadFromXMLTIF(s);
+            if (ret) {
+                tm = tif.getTURTLEModeling();
+                tmState = 0;
+                TraceManager.addDev("Got TIF");
+                generateDesign();
+            }
+        } catch (Exception e) {
+            TraceManager.addDev("Exception on TIF: " + e.getMessage());
+        }
+        return ret;
+    }
+
+    public boolean openSD(String s) {
+        SDExchange sde = new SDExchange();
+        boolean ret = false;
+
+        try {
+            ret = sde.loadFromXMLSD(s);
+            if (ret) {
+                //tm = tif.getTURTLEModeling();
+                //tmState = 0;
+                TraceManager.addDev("Got SD");
+                generateIOD(sde.getHMSC(), sde.getMSC());
+            }
+        } catch (Exception e) {
+            TraceManager.addDev("Exception on SD: " + e.getMessage());
+        }
+        return ret;
+    }
+
+    /*public void mergeChoices(boolean nonDeterministic) {
+      if (tm != null) {
+      tm.mergeChoices(nonDeterministic);
+      }
+      }*/
+
+    public NCStructure getNCS() {
+        return ncs;
+    }
+
+    public void generateRTLOTOS(File f) {
+        TURTLETranslator tt = new TURTLETranslator(tm);
+        rtlotos = tt.generateRTLOTOS();
+        warnings = tt.getWarnings();
+        nbRTLOTOS ++;
+        if (f != null) {
+            saveInFile(f, rtlotos);
+        }
+        languageID = RT_LOTOS;
+        mgui.setMode(MainGUI.RTLOTOS_OK);
+    }
+
+    public void generateFullLOTOS(File f) {
+        reinitSIM();
+        reinitDTA();
+        reinitRG();
+        reinitRGAUT();
+        reinitRGAUTPROJDOT();
+        //TraceManager.addDev("generate LOTOS");
+        generateLOTOS(f);
+    }
+
+    public void generateLOTOS(File f) {
+        //tm.print();
+        TraceManager.addDev("Generating Lotos");
+        TURTLETranslator tt = new TURTLETranslator(tm);
+        rtlotos = tt.generateLOTOS(true);
+        warnings = tt.getWarnings();
+        TraceManager.addDev("Lotos generated");
+
+
+
+        nbRTLOTOS ++;
+        if (f != null) {
+            saveInFile(f, rtlotos);
+        }
+        TraceManager.addDev("LOTOS to file done");
+        languageID = LOTOS;
+        mgui.setMode(MainGUI.RTLOTOS_OK);
+    }
+
+    public void generateTPN(File f) {
+        //tm.print();
+        TURTLE2TPN t2tpn = new TURTLE2TPN(tm);
+        tpn = t2tpn.generateTPN(false).toString();
+        warnings = t2tpn.getWarnings();
+
+        //  nbTPN ++;
+        if (f != null) {
+            TraceManager.addDev("Saving in file: " + f);
+            saveInFile(f, tpn);
+        }
+        languageID = TPN;
+
+        // For debug purpose
+        //TraceManager.addDev(tpn);
+
+        mgui.setMode(MainGUI.RTLOTOS_OK);
+    }
+
+    public List<String> generateAUT(String path) {
+        TML2AUT tml2aut = new TML2AUT(tmlm);
+        tml2aut.generateAutomatas(true);
+        try {
+            return tml2aut.saveInFiles(path);
+        } catch (FileException fe) {
+            return null;
+        }
+    }
+
+    public boolean generateCCode( String _title )          {
+
+        //CheckingError ce;
+        //int type;
+        // TGComponent tgc;
+        String applicationName;
+        TMLModelCompiler CCode;
+
+        if( tmap == null )        {
+            JOptionPane.showMessageDialog( mgui.frame, "C code is only generated from an architecture diagram with mapping information", "Control code generation failed", JOptionPane.INFORMATION_MESSAGE );
+            return true;
+        }
+        // Get the file from DiplodocusPECPragma
+        //List<TGComponent> components = mgui.getCurrentArchiPanel().tmlap.getComponentList();
+        // Parse the PEC file and the library of code snippets for each DIPLODOCUS unit
+        applicationName = tmap.getMappedTasks().get(0).getName().split("__")[0];        // Remember that it works only for one application
+        CCode = new TMLModelCompiler( _title, applicationName, mgui.frame, mgui.getAllTMLCP(), tmap );
+        CCode.toTextFormat();
+        try {
+            if( ConfigurationTTool.CCodeDirectory.equals("") )  {
+                JOptionPane.showMessageDialog(  mgui.frame,
+                                                "No directory for C code generation found in config.xml. The C code cannot be generated.",
+                                                "Control code generation failed", JOptionPane.INFORMATION_MESSAGE );
+                return true;
+            }
+            else                {
+                CCode.saveFile( ConfigurationTTool.CCodeDirectory + File.separator, applicationName );
+            }
+        }
+        catch( Exception e ) {
+            JOptionPane.showMessageDialog(  mgui.frame, "The application C files could not be saved: " + e.getMessage(), "Control code generation failed", JOptionPane.INFORMATION_MESSAGE );
+            return true;
+        }
+        return false;
+    }
+
+    public boolean generateTMLTxt( String _title ) {
+
+
+        //This branch is activated if doing the syntax check from the architecture panel.
+        //It generates the text TML for the architecture and the application + mapping information
+        if (tmap != null) {
+            TMLMappingTextSpecification spec = new TMLMappingTextSpecification( _title );
+            spec.toTextFormat( tmap );    //TMLMapping
+            try {
+                //TraceManager.addDev( "*** " + ConfigurationTTool.TMLCodeDirectory + File.separator );
+                spec.saveFile( ConfigurationTTool.TMLCodeDirectory + File.separator, "spec" );
+            }
+            catch( Exception e ) {
+                TraceManager.addError( "Files could not be saved: " + e.getMessage() );
+                return false;
+            }
+        }
+
+        if( tmlcp != null )      {         //Use the data structure filled by translateToTML... and pass it to the appropriate toTextFormat()
+            TraceManager.addError( "About to generate the TMLText for CPs" );
+            TMLCPTextSpecification specCP = new TMLCPTextSpecification( _title );
+
+            //get the architecture panel and the nodes
+            TMLArchiDiagramPanel tmlap = mgui.getTMLArchiDiagramPanels().get(0).tmlap;
+            List<TGComponent> components = tmlap.getComponentList();
+            Iterator<TGComponent> iterator = components.listIterator();
+            TGComponent tgc;
+
+            while(iterator.hasNext()) {
+                tgc = iterator.next();
+
+                if (tgc instanceof TMLArchiCPNode) {
+                    TMLArchiCPNode node = (TMLArchiCPNode) tgc;
+                    TraceManager.addDev( "Found CP node: " + node.getName() );
+                    TraceManager.addDev( "with mapping info: " + node.getMappedUnits() );
+                }
+            }
+
+            List<TMLCommunicationPatternPanel> tmlcpPanelsList = new ArrayList<TMLCommunicationPatternPanel>();
+            //get the TMLCommunicationPatternPanels :)
+            for( int i = 0; i < mgui.tabs.size(); i++ ) {
+                TURTLEPanel panel = mgui.tabs.get(i);
+
+                if( panel instanceof TMLCommunicationPatternPanel )      {
+                    tmlcpPanelsList.add( (TMLCommunicationPatternPanel) panel );
+                    TraceManager.addDev( "Found TMLCommunicationPatternPanel: " + ((TMLCommunicationPatternPanel)panel).toString() );
+                }
+            }
+
+            specCP.toTextFormat( tmlcp );          // the data structure tmlcp is filled with the info concerning the CP panel
+            // from which the button is pressed. If there are multiple CP panels this operation must be repeated for each panel. It
+            // should be no difficult to implement.
+            try {
+                specCP.saveFile( ConfigurationTTool.TMLCodeDirectory + File.separator, "spec.tmlcp" );
+            }
+            catch( Exception e ) {
+                TraceManager.addError( "Writing TMLText for CPs, file could not be saved: " + e.getMessage() );
+                return false;
+            }
+
+        } else if (tmap == null) {
+            //This branch is activated if doing the syntax check from the application panel.
+            //It only generates the application TML text
+            if( tmap == null ) {
+                TMLTextSpecification spec = new TMLTextSpecification( _title );
+                spec.toTextFormat( tmlm );        //TMLModeling
+                try {
+                    spec.saveFile( ConfigurationTTool.TMLCodeDirectory + File.separator, "spec.tml" );
+                }
+                catch( Exception e ) {
+                    TraceManager.addError( "File could not be saved: " + e.getMessage() );
+                    return false;
+                }
+            }
+
+
+        }
+        return true;    //temporary, just to check functionality
+    }
+
+    public boolean generateUPPAALFromTIF(String path, boolean debug, int nb, boolean choices, boolean variables) {
+        TURTLE2UPPAAL turtle2uppaal = new TURTLE2UPPAAL(tm);
+        turtle2uppaal.setChoiceDeterministic(choices);
+        turtle2uppaal.setVariablesAsActions(variables);
+        uppaal = turtle2uppaal.generateUPPAAL(debug, nb);
+        TraceManager.addDev("Building relation table");
+        uppaalTIFTable = turtle2uppaal.getRelationTIFUPPAAL();
+        TraceManager.addDev("Building relation table done");
+        uppaalTMLTable = null;
+
+        languageID = UPPAAL;
+        mgui.setMode(MainGUI.UPPAAL_OK);
+
+        try {
+            TraceManager.addDev("Saving specification in " + path + "\n");
+            turtle2uppaal.saveInFile(path);
+            TraceManager.addDev("UPPAAL specification has been generated in " + path + "\n");
+            return true;
+        } catch (FileException fe) {
+            TraceManager.addError("Exception: " + fe.getMessage());
+            return false;
+        }
+    }
+
+    public boolean generateUPPAALFromTML(String _path, boolean _debug, int _size, boolean choices) {
+        TraceManager.addDev("Generate UPPAAL from TML");
+        TML2UPPAAL tml2uppaal = new TML2UPPAAL(tmlm);
+        //tml2uppaal.setChoiceDeterministic(choices);
+        tml2uppaal.setSizeInfiniteFIFO(_size);
+        uppaal = tml2uppaal.generateUPPAAL(_debug);
+        uppaalTMLTable = tml2uppaal.getRelationTMLUPPAAL();
+        uppaalTIFTable = null;
+        languageID = UPPAAL;
+        mgui.setMode(MainGUI.UPPAAL_OK);
+        //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
+        try {
+            tml2uppaal.saveInFile(_path);
+            return true;
+        } catch (FileException fe) {
+            TraceManager.addError("Exception: " + fe.getMessage());
+            return false;
+        }
+    }
+
+    public boolean generateUPPAALFromAVATAR(String _path) {
+        if (avatarspec == null) {
+            TraceManager.addDev("Null avatar spec");
+            return false;
+        }
+        avatar2uppaal = new AVATAR2UPPAAL(avatarspec);
+        //tml2uppaal.setChoiceDeterministic(choices);
+        //tml2uppaal.setSizeInfiniteFIFO(_size);
+        uppaal = avatar2uppaal.generateUPPAAL(true, optimizeAvatar);
+        warnings = avatar2uppaal.getWarnings();
+        uppaalTMLTable = null;
+        uppaalTIFTable = null;
+        languageID = UPPAAL;
+        mgui.setMode(MainGUI.UPPAAL_OK);
+        //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
+        try {
+            avatar2uppaal.saveInFile(_path);
+            return true;
+        } catch (FileException fe) {
+            TraceManager.addError("Exception: " + fe.getMessage());
+            return false;
+        }
+    }
+
+    public AvatarSpecification getAvatarSpecification() {
+        return avatarspec;
+    }
+
+    public AVATAR2UPPAAL getAvatar2Uppaal(){
+        return avatar2uppaal;
+    }
+
+    public ProVerifOutputAnalyzer getProVerifOutputAnalyzer () {
+        return this.avatar2proverif.getOutputAnalyzer ();
+    }
+
+    public boolean generateProVerifFromAVATAR(String _path, int _stateReachability, boolean _typed){
+        return generateProVerifFromAVATAR(_path, _stateReachability, _typed, "1");
+    }
+
+    public int calcSec(){
+        int overhead=0;
+        //count # of insecure channels?
+        return overhead;
+    }
+
+    public boolean channelAllowed(TMLMapping map, TMLChannel chan){
+        TMLTask orig = chan.getOriginTask();
+        TMLTask dest = chan.getDestinationTask();
+        List<HwNode> path = getPath(map,orig, dest);
+        for (HwNode node:path){
+            if (node instanceof HwBridge){
+                for (String rule:((HwBridge) node).firewallRules){
+                    String t1 = rule.split("->")[0];
+                    String t2 = rule.split("->")[1];
+                    if (t1.equals(orig.getName().replaceAll("__","::")) || t1.equals("*")){
+                        if (t2.equals(dest.getName().replaceAll("__","::")) || t2.equals("*")){
+                            return false;
+                        }
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    public List<HwNode> getPath(TMLMapping map, TMLTask t1, TMLTask t2){
+        HwNode node1 = map.getHwNodeOf(t1);
+        HwNode node2 = map.getHwNodeOf(t2);
+        List<HwNode> path = new ArrayList<HwNode>();
+        if (node1==node2){
+            return path;
+        }
+        if (node1!=node2){
+            //Navigate architecture for node
+            List<HwLink> links = map.getTMLArchitecture().getHwLinks();
+            //  HwNode last = node1;
+            List<HwNode> found = new ArrayList<HwNode>();
+            List<HwNode> done = new ArrayList<HwNode>();
+            Map<HwNode, List<HwNode>> pathMap = new HashMap<HwNode, List<HwNode>>();
+            for (HwLink link: links){
+                if (link.hwnode == node1){
+                    found.add(link.bus);
+                    List<HwNode> tmp = new ArrayList<HwNode>();
+                    tmp.add(link.bus);
+                    pathMap.put(link.bus, tmp);
+                }
+            }
+            outerloop:
+            while (found.size()>0){
+                HwNode curr = found.remove(0);
+                for (HwLink link: links){
+                    if (curr == link.bus){
+                        if (link.hwnode == node2){
+                            path = pathMap.get(curr);
+                            break outerloop;
+                        }
+                        if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge){
+                            found.add(link.hwnode);
+                            List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
+                            tmp.add(link.hwnode);
+                            pathMap.put(link.hwnode, tmp);
+                        }
+                    }
+                    else if (curr == link.hwnode){
+                        if (!done.contains(link.bus) && !found.contains(link.bus)){
+                            found.add(link.bus);
+                            List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
+                            tmp.add(link.bus);
+                            pathMap.put(link.bus, tmp);
+                        }
+                    }
+                }
+                done.add(curr);
+            }
+        }
+        return path;
+    }
+    public TMLMapping drawFirewall(TMLMapping map){
+        System.out.println("DRAWING FIREWALL");
+        TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
+        TMLModeling tmlm = map.getTMLModeling();
+        TMLActivityDiagramPanel firewallADP = null;
+        TMLComponentTaskDiagramPanel tcdp = tmlcdp.tmlctdp;
+        if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){
+            MainGUI gui = tmlcdp.getMainGUI();
+            int arch = mgui.tabs.indexOf(map.tmlap);
+            gui.cloneRenameTab(arch,"firewallArch");
+            TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
+            int ind = gui.tabs.indexOf(tmlcdp);
+            String tabName = gui.getTitleAt(tmlcdp);
+            gui.cloneRenameTab(ind, "firewallDesign");
+            //  TMLComponentDesignPanel tcp = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1);
+            newarch.renameMapping(tabName, tabName+"_firewallDesign");
+
+        }
+        for (HwBridge firewallNode:map.getTMLArchitecture().getFirewalls()){
+            TraceManager.addDev("Found firewall " + firewallNode.getName());
+            TMLCPrimitiveComponent firewallComp = null;
+            TMLADStartState adStart=null;
+            TMLADForEverLoop adLoop = null;
+            TMLADChoice adChoice =null;
+            TMLADReadChannel adRC=null;
+            TMLADExecI exec=null;
+            TMLADWriteChannel adWC=null;
+            TMLADStopState adStop =null;
+
+
+
+            int links = map.getArch().getLinkByHwNode(firewallNode).size();
+            TraceManager.addDev("Links " + links);
+
+            HwCPU cpu = new HwCPU(firewallNode.getName());
+            map.getTMLArchitecture().replaceFirewall(firewallNode,cpu);
+            for (int link =0; link< links/2; link++){
+                HashMap<TMLChannel, TMLChannel> inChans = new HashMap<TMLChannel, TMLChannel>();
+                HashMap<TMLChannel, TMLChannel> outChans = new HashMap<TMLChannel, TMLChannel>();
+                if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){
+                    firewallComp = new TMLCPrimitiveComponent(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxY(), false, null, tmlcdp.tmlctdp);
+                    tmlcdp.tmlctdp.addComponent(firewallComp,0,0,false,true);
+                    firewallComp.setValueWithChange(firewallNode.getName()+link);
+                    firewallADP = tmlcdp.getTMLActivityDiagramPanel(firewallNode.getName()+link);
+                }
+
+                List<TMLChannel> channelsCopy = tmlm.getChannels();
+                List<TMLChannel> toAdd = new ArrayList<TMLChannel>();
+
+                TMLTask firewall = new TMLTask("TASK__"+firewallNode.getName()+"_"+link, firewallComp,firewallADP);
+
+
+                tmlm.addTask(firewall);
+                map.addTaskToHwExecutionNode(firewall,cpu);
+                TMLActivity act = firewall.getActivityDiagram();
+
+                TraceManager.addDev("FirewallADP " + firewallADP);
+                for (TMLChannel chan: channelsCopy){
+                    TMLTask orig = chan.getOriginTask();
+                    TMLTask dest = chan.getDestinationTask();
+                    TMLPort origPort = chan.getOriginPort();
+                    TMLPort destPort = chan.getDestinationPort();
+                    TMLChannel wr = new TMLChannel(chan.getName()+"_firewallIn"+link,chan.getReferenceObject());
+                    //Specify new channel attributes
+                    wr.setSize(chan.getSize());
+                    wr.setMax(chan.getMax());
+                    wr.setPorts(origPort,destPort);
+                    wr.setType(TMLChannel.BRBW);
+                    wr.setPriority(chan.getPriority());
+                    wr.setTasks(orig, firewall);
+                    TMLChannel rd = new TMLChannel(chan.getName()+"_firewallOut"+link, chan.getReferenceObject());
+                    rd.setTasks(firewall,dest);
+                    rd.setSize(chan.getSize());
+                    rd.setMax(chan.getMax());
+                    rd.setPorts(origPort,destPort);
+                    rd.setType(TMLChannel.BRBW);
+                    rd.setPriority(chan.getPriority());
+                    inChans.put(chan,wr);
+                    outChans.put(chan,rd);
+                    toAdd.add(rd);
+                    toAdd.add(wr);
+                    map.listE.addCor(rd, (TGComponent) rd.getReferenceObject());
+                    map.listE.addCor(wr, (TGComponent) wr.getReferenceObject());
+                }
+                tmlm.removeAllChannels();
+                for (TMLChannel c:toAdd){
+                    tmlm.addChannel(c);
+                }
+
+
+                if (TraceManager.devPolicy == TraceManager.TO_CONSOLE){
+                    //Build activity diagram
+                    //Get start state
+                    adStart = (TMLADStartState) firewallADP.getComponentList().get(0);
+                    //add loop
+                    adLoop = new TMLADForEverLoop(400,150,firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+                    firewallADP.addComponent(adLoop,400,150,false,true);
+                    TGConnector tmp =new TGConnectorTMLAD(adLoop.getX(), adLoop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adStart.getTGConnectingPointAtIndex(0),adLoop.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                    firewallADP.addComponent(tmp, adLoop.getX(),adLoop.getY(),false,true);
+                    //add choice
+                    adChoice = new TMLADChoice(400,300, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+                    firewallADP.addComponent(adChoice, 400,300,false,true);
+
+                    tmp =new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adLoop.getTGConnectingPointAtIndex(1), adChoice.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                    firewallADP.addComponent(tmp, adChoice.getX(),adChoice.getY(),false,true);
+                    for (TMLChannel chan: inChans.keySet()){
+                        TMLChannel newChan = inChans.get(chan);
+                        TMLCChannelOutPort originPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
+                        TMLCChannelOutPort destPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
+                        for (TGComponent tg: tcdp.getComponentList()){
+                            if (tg instanceof TMLCPrimitiveComponent){
+                                if (tg.getValue().equals(newChan.getOriginTask().getName().split("__")[1])){
+                                    originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+                                    originPort.commName=newChan.getName();
+                                    tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
+                                }
+                                else if (tg.getValue().equals(firewallNode.getName())){
+                                    destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+                                    destPort.isOrigin=false;
+                                    destPort.commName=newChan.getName();
+                                    tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
+                                }
+                            }
+                        }
+                        TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        tcdp.addComponent(conn, 0,0,false,true);
+
+                        TMLChannel wrChan = outChans.get(chan);
+                        for (TGComponent tg: tcdp.getComponentList()){
+                            if (tg instanceof TMLCPrimitiveComponent){
+                                if (tg.getValue().equals(firewallNode.getName())){
+                                    originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+                                    originPort.commName=wrChan.getName();
+                                    tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
+                                }
+                                else if (tg.getValue().equals(wrChan.getDestinationTask().getName().split("__")[1])){
+                                    destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+                                    destPort.isOrigin=false;
+                                    destPort.commName=wrChan.getName();
+                                    tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
+                                }
+                            }
+                        }
+                        conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        tcdp.addComponent(conn, 0,0,false,true);
+                    }
+                    int xpos=200;
+                    int i=1;
+                    for (TMLChannel chan: inChans.keySet()){
+                        TMLChannel newChan = inChans.get(chan);
+                        adRC = new TMLADReadChannel(xpos,350, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+                        adRC.setChannelName(newChan.getName());
+                        adRC.setSamples("1");
+
+                        tmp =new TGConnectorTMLAD(adRC.getX(), adRC.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adChoice.getTGConnectingPointAtIndex(i), adRC.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        firewallADP.addComponent(tmp, adRC.getX(),adRC.getY(),false,true);
+
+                        firewallADP.addComponent(adRC,xpos,350,false,true);
+
+                        //Execute for latency value
+                        exec = new TMLADExecI(xpos,400,firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+
+                        exec.setDelayValue(Integer.toString(firewallNode.latency));
+                        firewallADP.addComponent(exec,400,200,false,true);
+
+                        tmp =new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adRC.getTGConnectingPointAtIndex(1), exec.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        firewallADP.addComponent(tmp, exec.getX(),exec.getY(),false,true);
+
+                        if (channelAllowed(map,chan)){
+                            TMLChannel wrChan = outChans.get(chan);
+
+                            adWC = new TMLADWriteChannel(xpos,400, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+                            adWC.setChannelName(wrChan.getName());
+                            adWC.setSamples("1");
+                            firewallADP.addComponent(adWC, xpos,400, false,true);
+
+                            tmp =new TGConnectorTMLAD(exec.getX(), exec.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,exec.getTGConnectingPointAtIndex(1), adWC.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                            firewallADP.addComponent(tmp, exec.getX(),exec.getY(),false,true);
+
+                            adStop = new TMLADStopState(xpos,500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+                            firewallADP.addComponent(adStop, xpos,500, false,true);
+                            tmp =new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adWC.getTGConnectingPointAtIndex(1), adStop.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                            firewallADP.addComponent(tmp, adStop.getX(),adStop.getY(),false,true);
+                        }
+                        else {
+                            adStop = new TMLADStopState(xpos,500, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+                            firewallADP.addComponent(adStop, xpos,500, false,true);
+
+                            tmp =new TGConnectorTMLAD(adStop.getX(), adStop.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,exec.getTGConnectingPointAtIndex(1), adStop.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                            firewallADP.addComponent(tmp, adStop.getX(),adStop.getY(),false,true);
+                        }
+                        xpos+=100;
+                        i++;
+                    }
+                }
+
+                TMLStartState start = new TMLStartState("start", adStart);
+                act.setFirst(start);
+                map.listE.addCor(start,adStart);
+
+                //Add infinite loop
+
+                TMLForLoop loop = new TMLForLoop("infiniteloop",adLoop);
+                loop.setInit("");
+                loop.setCondition("");
+                loop.setIncrement("");
+                loop.setInfinite(true);
+                start.addNext(loop);
+                act.addElement(loop);
+                //Add choice
+
+                TMLChoice choice = new TMLChoice("chooseChannel", adChoice);
+                act.addElement(choice);
+                loop.addNext(choice);
+                map.listE.addCor(choice,adChoice);
+
+
+
+
+                for (TMLChannel chan: inChans.keySet()){
+                    TMLChannel newChan = inChans.get(chan);
+                    TMLChannel wrChan = outChans.get(chan);
+                    //Add channels into firewall activity diagram
+                    TMLReadChannel rd = new TMLReadChannel(newChan.getName(), adRC);
+                    rd.setNbOfSamples("1");
+                    rd.addChannel(newChan);
+                    choice.addNext(rd);
+                    choice.addGuard("");
+
+                    act.addElement(rd);
+
+                    //Execute for latency value
+
+                    TMLExecI ex = new TMLExecI("execi", exec);
+                    ex.setAction(Integer.toString(firewallNode.latency));
+                    act.addElement(ex);
+                    rd.addNext(ex);
+
+                    if (channelAllowed(map,chan)){
+
+                        TMLWriteChannel wr = new TMLWriteChannel(wrChan.getName(), adWC);
+                        wr.setNbOfSamples("1");
+                        wr.addChannel(wrChan);
+                        ex.addNext(wr);
+                        act.addElement(wr);
+
+                        TMLStopState stop = new TMLStopState("stop", adStop);
+                        wr.addNext(stop);
+                        act.addElement(stop);
+
+                    }
+                    else {
+                        TMLStopState stop = new TMLStopState("stop", adStop);
+                        ex.addNext(stop);
+                        act.addElement(stop);
+                    }
+                    for (TMLTask t:tmlm.getTasks()){
+                        TMLActivity actd = t.getActivityDiagram();
+                        actd.replaceWriteChannelWith(chan,newChan);
+                        actd.replaceReadChannelWith(chan, outChans.get(chan));
+                    }
+                }
+
+            }
+
+        }
+        //Redo all reference objects
+
+        map.listE.useDIPLOIDs();
+        return map;
+    }
+
+    class ChannelData {
+        public String name;
+        public boolean isOrigin;
+        public boolean isChan;
+        public ChannelData(String n, boolean orig, boolean isCh){
+            name=n;
+            isOrigin=orig;
+            isChan=isCh;
+        }
+
+    }
+    class HSMChannel {
+        public String name;
+        public static final int SENC=0;
+        public static final int NONCE_ENC=1;
+        public static final int MAC=2;
+        public static final int DEC=3;
+        public static final int AENC=4;
+        public static final int NONCE=5;
+        public String task;
+        public String securityContext="";
+        public int secType;
+        public String nonceName="";
+        public HSMChannel (String n, String t, int type){
+            name=n;
+            task=t;
+            secType=type;
+        }
+    }
+
+    public HashMap<String, HashSet<String>> getCPUTaskMap(){
+        HashMap<String, HashSet<String>> cpuTaskMap = new HashMap<String, HashSet<String>>();
+        if (tmap ==null){
+            return cpuTaskMap;
+        }
+
+        for (HwNode node: tmap.getArch().getCPUs()){
+            if (tmap.getMappedTasks(node).size()>0){
+                cpuTaskMap.put(node.getName(), tmap.getMappedTasks(node));
+            }
+        }
+
+        return cpuTaskMap;
+    }
+
+    public void addHSM(MainGUI gui, Map<String, List<String>> selectedCpuTasks){
+        System.out.println("Adding HSM");
+        String encComp="100";
+        String decComp="100";
+        String overhead ="0";
+        String name="hsm";
+        if (tmap==null){
+            return;
+        }
+        //Clone diagrams
+
+        int arch = gui.tabs.indexOf(tmap.tmlap);
+        gui.cloneRenameTab(arch,"hsm");
+        TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
+
+        TMLComponentDesignPanel tmlcdp = tmap.getTMLCDesignPanel();
+        int ind = gui.tabs.indexOf(tmlcdp);
+        String tabName = gui.getTitleAt(tmlcdp);
+        gui.cloneRenameTab(ind, name);
+        TMLComponentDesignPanel t = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1);
+        TMLComponentTaskDiagramPanel tcdp = t.tmlctdp;
+        //Create clone of architecture panel and map tasks to it
+        newarch.renameMapping(tabName, tabName+"_"+name);
+
+
+        //ProVerif analysis
+        ArrayList<String> nonAuthChans = new ArrayList<String>();
+        ArrayList<String> nonSecChans = new ArrayList<String>();
+
+        proverifAnalysis(tmap, nonAuthChans, nonSecChans);
+
+        TGConnector fromStart;
+        HashMap<String, HSMChannel> secChannels = new HashMap<String, HSMChannel>();
+        //Add a HSM for each selected CPU on the component diagram
+        for (String cpuName: selectedCpuTasks.keySet()){
+            HashMap<String, HSMChannel> hsmChannels = new HashMap<String, HSMChannel>();
+            TMLCPrimitiveComponent hsm = new TMLCPrimitiveComponent(0, 500, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxY(), false, null, tcdp);
+            TAttribute isEnc = new TAttribute(2, "isEnc", "true", 4);
+            hsm.getAttributes().add(isEnc);
+            tcdp.addComponent(hsm, 0,500,false,true);
+            hsm.setValueWithChange("HSM_"+cpuName);
+            //Find all associated components
+            List<TMLCPrimitiveComponent> comps = new ArrayList<TMLCPrimitiveComponent>();
+            //Find the component to add a HSM to
+
+            for (TGComponent tg: tcdp.getComponentList()){
+                if (tg instanceof TMLCPrimitiveComponent){
+                    for (String compName: selectedCpuTasks.get(cpuName)){
+                        if (tg.getValue().equals(compName)){
+                            comps.add((TMLCPrimitiveComponent) tg);
+                            break;
+                        }
+                    }
+                }
+                else if (tg instanceof TMLCCompositeComponent){
+                    TMLCCompositeComponent cc = (TMLCCompositeComponent) tg;
+                    List<TMLCPrimitiveComponent> pcomps =cc.getAllPrimitiveComponents();
+                    for (TMLCPrimitiveComponent pc: pcomps){
+                        for (String compName: selectedCpuTasks.get(cpuName)){
+                            if (pc.getValue().equals(compName)){
+                                comps.add((TMLCPrimitiveComponent) pc);
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+            if (comps.size()==0){
+                //System.out.println("No Components found");
+                continue;
+            }
+            //  System.out.println("nonAuthChans " + nonAuthChans);
+            //System.out.println("nonSecChans "+ nonSecChans);
+            for (TMLCPrimitiveComponent comp: comps){
+
+                HashMap<String, HSMChannel> compChannels = new HashMap<String, HSMChannel>();
+                String compName=comp.getValue();
+                TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(compName);
+                HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
+                HashSet<TGComponent> secOperators = new HashSet<TGComponent>();
+                isEnc = new TAttribute(2, "isEnc", "true", 4);
+                comp.getAttributes().add(isEnc);
+                //Find all unsecured channels
+                //For previously secured channels, relocate encryption to the hsm
+
+                for (TGComponent tg: tad.getComponentList()){
+                    if (tg instanceof TMLADWriteChannel){
+                        TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
+                        if (writeChannel.securityContext.equals("")){
+                            String nonceName="";
+                            int type=-1;
+                            if (nonSecChans.contains(compName+"__"+writeChannel.getChannelName()+"_chData")){
+                                type=HSMChannel.SENC;
+                                if (nonAuthChans.contains(compName+"__"+writeChannel.getChannelName())){
+                                    nonceName="nonce_"+writeChannel.getChannelName();
+                                }
                             }
-			}
-                        HashMap<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authResults = pvoa.getAuthenticityResults();
-			for (AvatarPragmaAuthenticity pragma: authResults.keySet()) {
-                            if (authResults.get(pragma).isProved() && !authResults.get(pragma).isSatisfied()) {
-				nonAuthChans.add(pragma.getAttrA().getAttribute().getBlock().getName() + "__" + pragma.getAttrA().getState().getName().replaceAll("_chData", ""));
-				nonAuthChans.add(pragma.getAttrB().getAttribute().getBlock().getName() + "__" + pragma.getAttrB().getState().getName().replaceAll("_chData", ""));
+                            else if (nonAuthChans.contains(compName+"__"+writeChannel.getChannelName())){
+                                type=HSMChannel.MAC;
                             }
-			}
-			TraceManager.addDev("all results displayed");
-
-		}
-		catch (Exception e){
-			System.out.println("ProVerif Analysis Failed " + e);
-		}
-	}
-
-	public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch, String encComp, String overhead, String decComp, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
-		HashMap<TMLTask, java.util.List<TMLTask>> toSecure = new HashMap<TMLTask, java.util.List<TMLTask>>();
-		HashMap<TMLTask, java.util.List<TMLTask>> toSecureRev = new HashMap<TMLTask, java.util.List<TMLTask>>();
-		HashMap<TMLTask, java.util.List<String>> secOutChannels = new HashMap<TMLTask, java.util.List<String>>();
-		HashMap<TMLTask, java.util.List<String>> secInChannels = new HashMap<TMLTask, java.util.List<String>>();
-		HashMap<TMLTask, java.util.List<String>> nonceOutChannels = new HashMap<TMLTask, java.util.List<String>>();
-		HashMap<TMLTask, java.util.List<String>> nonceInChannels = new HashMap<TMLTask, java.util.List<String>>();
-		HashMap<TMLTask, java.util.List<String>> macOutChannels = new HashMap<TMLTask, java.util.List<String>>();
-		HashMap<TMLTask, java.util.List<String>> macInChannels = new HashMap<TMLTask, java.util.List<String>>();
-		HashMap<TMLTask, java.util.List<String>> macNonceOutChannels = new HashMap<TMLTask, java.util.List<String>>();
-		HashMap<TMLTask, java.util.List<String>> macNonceInChannels = new HashMap<TMLTask, java.util.List<String>>();
-		TraceManager.addDev("mapping " + map.getSummaryTaskMapping());
-		ArrayList<String> nonAuthChans = new ArrayList<String>();
-		ArrayList<String> nonSecChans = new ArrayList<String>();
-
-		proverifAnalysis(map, nonAuthChans, nonSecChans);
-	   
-		TMLModeling tmlmodel = map.getTMLModeling();
-		java.util.List<TMLChannel> channels = tmlmodel.getChannels();
-		for (TMLChannel channel: channels){
-			for (TMLCPrimitivePort p: channel.ports){
-				channel.checkConf = channel.checkConf || p.checkConf;
-				channel.checkAuth = channel.checkAuth || p.checkAuth;
-			}
-		}
-
-		//Create clone of Component Diagram + Activity diagrams to secure
-
-		TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
-		int ind = gui.tabs.indexOf(tmlcdp);
-		if (ind==-1){
-			TraceManager.addDev("No Component Design Panel");
-			return null;
-		}
-		String tabName = gui.getTitleAt(tmlcdp);
-		gui.cloneRenameTab(ind, name);
-		TMLComponentDesignPanel t = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1);
-		map.setTMLDesignPanel(t);
-		TMLComponentTaskDiagramPanel tcdp = t.tmlctdp;
-		//Create clone of architecture panel and map tasks to it
-		newarch.renameMapping(tabName, tabName+"_"+name);
-
-		for (TMLTask task: map.getTMLModeling().getTasks()){
-			java.util.List<String> tmp = new ArrayList<String>();
-			java.util.List<String> tmp2 = new ArrayList<String>();
-			java.util.List<TMLTask> tmp3 = new ArrayList<TMLTask>();
-			java.util.List<TMLTask> tmp4 = new ArrayList<TMLTask>();
-			java.util.List<String> tmp5 = new ArrayList<String>();
-			java.util.List<String> tmp6 = new ArrayList<String>();
-			java.util.List<String> tmp7 = new ArrayList<String>();
-			java.util.List<String> tmp8 = new ArrayList<String>();
-			java.util.List<String> tmp9 = new ArrayList<String>();
-			java.util.List<String> tmp10 = new ArrayList<String>();
-			secInChannels.put(task, tmp);
-			secOutChannels.put(task, tmp2);
-			toSecure.put(task,tmp3);
-			toSecureRev.put(task,tmp4);
-			nonceInChannels.put(task,tmp5);
-			nonceOutChannels.put(task,tmp6);
-			macInChannels.put(task,tmp7);
-			macOutChannels.put(task,tmp8);
-			macNonceOutChannels.put(task,tmp9);
-			macNonceInChannels.put(task,tmp10);
-		}
-		//With the proverif results, check which channels need to be secured
-		for (TMLTask task: map.getTMLModeling().getTasks()){
-			//Check if all channel operators are secured
-			TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(task.getName());
-			for (TGComponent tg:tad.getComponentList()){
-				if (tg instanceof TMLADWriteChannel){
-					TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-					if (writeChannel.securityContext.equals("")){
-
-						TMLChannel chan = tmlmodel.getChannelByName(tabName+"__"+writeChannel.getChannelName());
-						//System.out.println("channel " + chan);
-						if (chan!=null){
-							if (chan.checkConf){
-								//	  System.out.println(chan.getOriginTask().getName().split("__")[1]);
-								if (nonSecChans.contains(chan.getOriginTask().getName().split("__")[1]+"__"+writeChannel.getChannelName()+"_chData") && !secInChannels.get(chan.getDestinationTask()).contains(writeChannel.getChannelName())){
-									//												  if (!securePath(map, chan.getOriginTask(), chan.getDestinationTask())){
-									secOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
-									secInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
-									toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask());
-									if (chan.checkAuth && autoStrongAuth){
-										toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
-										nonceOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
-										nonceInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
-									}
-								}
-							}
-							else if (chan.checkAuth && autoWeakAuth){
-								if (nonAuthChans.contains(chan.getDestinationTask().getName().split("__")[1]+"__"+writeChannel.getChannelName())){
-									toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask());
-									macOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
-									macInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
-									if (autoStrongAuth){
-										toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
-										macNonceInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
-										macNonceOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
-									}
-								}
-	
-							}
-						}
-					}
-				}
-			}
-		}
-		TraceManager.addDev("macoutchans "+ macOutChannels);
-		TraceManager.addDev("macinchans " +macInChannels);
-		TraceManager.addDev("nonsecin " +secInChannels);
-		TraceManager.addDev("nonsecout " +secOutChannels);
-		TraceManager.addDev("noncein " +nonceInChannels);
-		TraceManager.addDev("nonceout " +nonceOutChannels);
-
-		//	  System.out.println(secOutChanannels.toString());
-		//	  int num=0;
-		//int nonceNum=0;
-		//Create reverse channels on component diagram to send nonces if they don't already exist
-
-		for (TMLTask task: toSecureRev.keySet()){
-			TraceManager.addDev("Adding nonces to " + task.getName());
-			List<TMLChannel> chans = tmlmodel.getChannelsFromMe(task);
-
-			for (TMLTask task2: toSecureRev.get(task)){
-				boolean addChan = true;
-				for (TMLChannel chan:chans){
-					if (chan.getDestinationTask()==task2){
-						addChan=false;
-					}
-				}
-
-				if (addChan){
-					TMLCChannelOutPort originPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
-					TMLCChannelOutPort destPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
-					for (TGComponent tg: tcdp.getComponentList()){
-						if (tg instanceof TMLCPrimitiveComponent){
-							if (tg.getValue().equals(task.getName().split("__")[1])){
-								originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
-								originPort.commName="nonceCh"+task.getName().split("__")[1] + "_"+task2.getName().split("__")[1];
-								tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
-							}
-							else if (tg.getValue().equals(task2.getName().split("__")[1])){
-								destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
-								destPort.isOrigin=false;
-								destPort.commName="nonceCh"+task.getName().split("__")[1] + "_"+ task2.getName().split("__")[1];
-								tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
-							}
-						}
-					}
-					tmlmodel.addChannel(new TMLChannel("nonceCh"+task.getName().split("__")[1] + "_"+ task2.getName().split("__")[1], originPort));
-					//Add connection
-					TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
-					tcdp.addComponent(conn, 0,0,false,true);
-				}
-			}
-		}
-		//  }
-		//Add encryption/nonces to activity diagram
-		for (TMLTask task:toSecure.keySet()){
-			String title = task.getName().split("__")[0];
-			TraceManager.addDev("Securing task " + task.getName());
-			TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(task.getName());
-			//Get start state position, shift everything down
-			int xpos=0;
-			int ypos=0;
-			TGConnector fromStart= new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>());
-			TGConnectingPoint point = new TGConnectingPoint(null, 0, 0, false, false);
-			//Find states immediately before the write channel operator
-
-			//For each occurence of a write channel operator, add encryption/nonces before it
-
-			for (String channel: secOutChannels.get(task)){
-				Set<TGComponent> channelInstances = new HashSet<TGComponent>();
-				int yShift=50;
-				TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
-				//First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator
-				for (TGComponent tg: tad.getComponentList()){
-					if (tg instanceof TMLADWriteChannel){
-						TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-						if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){
-
-							if (fromStart!=null){
-								channelInstances.add(tg);
-							}
-						}
-					}
-				}
-				for (TGComponent comp: channelInstances){
-					//TMLADWriteChannel writeChannel = (TMLADWriteChannel) comp;
-					xpos = comp.getX();
-					ypos = comp.getY();
-					fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
-					point = fromStart.getTGConnectingPointP2();
-					//Add encryption operator
-					TMLADEncrypt enc = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					TMLADReadChannel rd=new TMLADReadChannel(0, 0, 0, 0, 0, 0, false, null, tad);
-					if (nonceOutChannels.get(task).contains(channel)){
-						//Receive any nonces if ensuring authenticity
-						rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
-
-						if (matches.size()>0){
-							rd.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
-						}
-						else {
-							rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
-						}
-						rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						tad.addComponent(rd, xpos, ypos+yShift, false,true);
-						fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
-						fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						tad.addComponent(fromStart, xpos, ypos, false, true);
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						yShift+=60;
-						//Move encryption operator after receive nonce component
-						enc.setCd(xpos, ypos+yShift);
-						if (tmlc!=null){
-							enc.nonce= "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						}
-					}
-
-					enc.securityContext = "autoEncrypt_"+channel;
-					enc.type = "Symmetric Encryption";
-					enc.message_overhead = overhead;
-					enc.encTime= encComp;
-					enc.decTime=decComp;
-					tad.addComponent(enc, xpos ,ypos+yShift, false, true);
-					yShift+=60;
-					fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
-					fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-					fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
-
-					//Direct the last TGConnector back to the start of the write channel operator
-
-					fromStart.setP2(point);
-					//Shift components down to make room for the added ones, and add security contexts to write channels
-					for (TGComponent tg:tad.getComponentList()){
-						if (tg instanceof TMLADWriteChannel){
-							TMLADWriteChannel wChannel = (TMLADWriteChannel) tg;
-							TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName());
-							if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){
-								TraceManager.addDev("Securing write channel " + wChannel.getChannelName());
-								wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName();
-
-							}
-						}
-						if (tg.getY() >= ypos && tg !=enc && tg!=rd){
-							tg.setCd(tg.getX(), tg.getY()+yShift);
-						}
-					}
-					tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-					tad.repaint();
-				}
-			}
-
-			for (String channel: macOutChannels.get(task)){
-				//Add MAC before writechannel
-				int yShift=50;
-				TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
-				//First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator
-				HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
-				for (TGComponent tg: tad.getComponentList()){
-					if (tg instanceof TMLADWriteChannel){
-						TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
-						if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){
-							xpos = tg.getX();
-							ypos = tg.getY();
-							fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-							if (fromStart!=null){
-								channelInstances.add(tg);
-							}
-						}
-					}
-				}
-				for (TGComponent comp: channelInstances){
-					//TMLADWriteChannel writeChannel = (TMLADWriteChannel) comp;
-					xpos = comp.getX();
-					ypos = comp.getY();
-					fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
-					point = fromStart.getTGConnectingPointP2();
-	
-					TMLADEncrypt enc = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-
-					//If we need to receive a nonce
-					TMLADReadChannel rd=new TMLADReadChannel(0, 0, 0, 0, 0, 0, false, null, tad);
-					if (macNonceOutChannels.get(task).contains(channel)){
-						//Receive any nonces if ensuring authenticity
-						rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
-
-						if (matches.size()>0){
-							rd.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
-						}
-						else {
-							rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
-						}
-						rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						tad.addComponent(rd, xpos, ypos+yShift, false,true);
-						fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
-						fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-						tad.addComponent(fromStart, xpos, ypos, false, true);
-						fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
-						yShift+=60;
-						//Move encryption operator after receive nonce component
-						enc.setCd(xpos, ypos+yShift);
-						if (tmlc!=null){
-							enc.nonce= "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						}
-					}
-
-					//Add encryption operator
-
-					enc.securityContext = "autoEncrypt_"+channel;
-					enc.type = "MAC";
-					enc.message_overhead = overhead;
-					enc.encTime= encComp;
-					enc.decTime=decComp;
-					enc.size=overhead;
-					tad.addComponent(enc, xpos ,ypos+yShift, false, true);
-					yShift+=60;
-					fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
-					fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
-					tad.addComponent(fromStart, xpos, ypos, false, true);
-					fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
-
-					//Direct the last TGConnector back to the start of the write channel operator
-
-					fromStart.setP2(point);
-					//Shift components down to make room for the added ones, and add security contexts to write channels
-					for (TGComponent tg:tad.getComponentList()){
-						if (tg instanceof TMLADWriteChannel){
-							TMLADWriteChannel wChannel = (TMLADWriteChannel) tg;
-							TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName());
-							if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){
-								TraceManager.addDev("Securing write channel " + wChannel.getChannelName());
-								wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName();
-								tad.repaint();
-							}
-						}
-						if (tg.getY() >= ypos && tg !=enc && tg!=rd){
-							tg.setCd(tg.getX(), tg.getY()+yShift);
-						}
-					}
-					tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-				}
-			}
-			for (String channel: macInChannels.get(task)){
-				//Add decryptmac after readchannel
-				int yShift=50;
-				Set<TGComponent> channelInstances = new HashSet<TGComponent>();
-				TGConnector conn =new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>());
-				TGConnectingPoint next = new TGConnectingPoint(null, 0, 0, false, false);
-				//Find read channel operator
-
-				for (TGComponent tg: tad.getComponentList()){
-					if (tg instanceof TMLADReadChannel){
-						TMLADReadChannel readChannel = (TMLADReadChannel) tg;
-						if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){
-							fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-							if (fromStart!=null){
-								channelInstances.add(tg);
-							}
-						}
-					}
-				}
-
-
-				for (TGComponent comp: channelInstances){
-
-					fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
-					point = fromStart.getTGConnectingPointP2();
-					conn = tad.findTGConnectorStartingAt(comp.getTGConnectingPointAtIndex(1));
-					next= conn.getTGConnectingPointP2();
-					xpos = fromStart.getX();
-					ypos = fromStart.getY();
-
-
-					TMLADReadChannel readChannel = (TMLADReadChannel) comp;
-					TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-					readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
-					tad.repaint();
-
-					TMLADWriteChannel wr = new TMLADWriteChannel(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					//Create nonce and send it
-					TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
-					if (macNonceInChannels.get(task).contains(channel)){
-						//Create a nonce operator and a write channel operator
-						TMLADEncrypt nonce = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						nonce.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						nonce.type = "Nonce";
-						nonce.message_overhead = overhead;
-						nonce.encTime= encComp;
-						nonce.decTime=decComp;
-						tad.addComponent(nonce, xpos ,ypos+yShift, false, true);
-						fromStart.setP2(nonce.getTGConnectingPointAtIndex(0));
-						yShift+=50;
-						wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						//Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver
-						//Find matching channels
-						List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
-
-						if (matches.size()>0){
-							wr.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
-						}
-						else {
-							wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
-						}
-						//send the nonce along the channel
-						wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						tad.addComponent(wr,xpos,ypos+yShift,false,true);
-						wr.makeValue();
-						TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>());
-						tad.addComponent(tmp, xpos,ypos,false,true);
-						fromStart=new TGConnectorTMLAD(wr.getX(), wr.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, wr.getTGConnectingPointAtIndex(1), null, new Vector<Point>());
-						tad.addComponent(fromStart, xpos, ypos, false, true);
-						//Connect created write channel operator to start of read channel operator
-						fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(point);
-						//Shift everything from the read channel on down
-						for (TGComponent tg:tad.getComponentList()){
-							if (tg.getY() >= ypos && tg!=nonce && tg!=wr){
-								tg.setCd(tg.getX(), tg.getY()+yShift);
-							}
-						}
-					}
-
-					//Add decryption operator if it does not already exist
-					xpos = conn.getX();
-					ypos = conn.getY();
-
-					TMLADDecrypt dec = new TMLADDecrypt(xpos+10, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					dec.securityContext = "autoEncrypt_" + readChannel.getChannelName();
-					tad.addComponent(dec, dec.getX(), dec.getY(), false, true);
-					conn.setP2(dec.getTGConnectingPointAtIndex(0));
-					yShift+=60;
-					conn = new TGConnectorTMLAD(xpos,ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, dec.getTGConnectingPointAtIndex(1), next, new Vector<Point>());
-					conn.setP1(dec.getTGConnectingPointAtIndex(1));
-					conn.setP2(next);
-					tad.addComponent(conn, conn.getX(), conn.getY(), false,true);
-					//Shift everything down
-					for (TGComponent tg:tad.getComponentList()){
-						if (tg instanceof TMLADReadChannel){
-							readChannel = (TMLADReadChannel) tg;
-							TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName());
-							if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){
-								TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-								readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
-
-							}
-						}
-						if (tg.getY() > ypos && tg!=dec && tg!=comp){
-
-							tg.setCd(tg.getX(), tg.getY()+yShift);
-						}
-					}
-
-
-					tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-					tad.repaint();
-				}
-			}
-			for (String channel: secInChannels.get(task)){
-				TraceManager.addDev("securing channel "+channel);
-				int yShift=20;
-				//	  String title = task.getName().split("__")[0];
-				TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
-				TGConnector conn =new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>());
-				TGConnectingPoint next = new TGConnectingPoint(null, 0, 0, false, false);
-				//Find read channel operator
-				TMLADReadChannel readChannel = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-				HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
-				for (TGComponent tg: tad.getComponentList()){
-					if (tg instanceof TMLADReadChannel){
-						readChannel = (TMLADReadChannel) tg;
-						if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){
-							fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
-							if (fromStart!=null){
-								channelInstances.add(tg);
-							}
-						}
-					}
-				}
-
-				for (TGComponent comp: channelInstances){
-
-					fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
-					point = fromStart.getTGConnectingPointP2();
-					conn = tad.findTGConnectorStartingAt(comp.getTGConnectingPointAtIndex(1));
-					next = conn.getTGConnectingPointP2();
-					xpos = fromStart.getX();
-					ypos = fromStart.getY();
-					TMLADWriteChannel wr = new TMLADWriteChannel(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					if (nonceInChannels.get(task).contains(channel)){
-						//Create a nonce operator and a write channel operator
-						TMLADEncrypt nonce = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						nonce.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						nonce.type = "Nonce";
-						nonce.message_overhead = overhead;
-						nonce.encTime= encComp;
-						nonce.decTime=decComp;
-						tad.addComponent(nonce, xpos ,ypos+yShift, false, true);
-						fromStart.setP2(nonce.getTGConnectingPointAtIndex(0));
-						yShift+=50;
-						wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-						//Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver
-						//Find matching channels
-						List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
-
-						if (matches.size()>0){
-							wr.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
-						}
-						else {
-							wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
-						}
-						//send the nonce along the channel
-						wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
-						tad.addComponent(wr,xpos,ypos+yShift,false,true);
-						wr.makeValue();
-						TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>());
-						tad.addComponent(tmp, xpos,ypos,false,true);
-						fromStart=new TGConnectorTMLAD(wr.getX(), wr.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, wr.getTGConnectingPointAtIndex(1), null, new Vector<Point>());
-						tad.addComponent(fromStart, xpos, ypos, false, true);
-						//Connect created write channel operator to start of read channel operator
-						fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
-						fromStart.setP2(point);
-						//Shift everything from the read channel on down
-						for (TGComponent tg:tad.getComponentList()){
-							if (tg.getY() >= ypos && tg!=nonce && tg!=wr){
-								tg.setCd(tg.getX(), tg.getY()+yShift);
-							}
-						}
-					}
-					//tad.repaint();
-
-					//Now add the decrypt operator
-					yShift=40;
-					TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-					readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
-					tad.repaint();
-					//Add decryption operator if it does not already exist
-					xpos = readChannel.getX();
-					ypos = readChannel.getY();
-					TMLADDecrypt dec = new TMLADDecrypt(xpos+10, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
-					dec.securityContext = "autoEncrypt_" + readChannel.getChannelName();
-					tad.addComponent(dec, dec.getX(), dec.getY(), false, true);
-					conn.setP2(dec.getTGConnectingPointAtIndex(0));
-					yShift+=100;
-					conn = new TGConnectorTMLAD(xpos,ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, dec.getTGConnectingPointAtIndex(1), next, new Vector<Point>());
-					conn.setP1(dec.getTGConnectingPointAtIndex(1));
-
-					conn.setP2(next);
-					tad.addComponent(conn, conn.getX(), conn.getY(), false,true);
-					//Shift everything down
-					for (TGComponent tg:tad.getComponentList()){
-						if (tg instanceof TMLADReadChannel){
-							readChannel = (TMLADReadChannel) tg;
-							TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName());
-							if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){
-								TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
-								readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
-
-							}
-						}
-						if (tg.getY() > ypos && tg!=dec){
-
-							tg.setCd(tg.getX(), tg.getY()+yShift);
-						}
-					}
-
-					tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
-
-					tad.repaint();
-				}
-			}
-		}
-		GTMLModeling gtm = new GTMLModeling(t, false);
-		TMLModeling newmodel = gtm.translateToTMLModeling(false,false);
-		for (TMLTask task:newmodel.getTasks()){
-			task.setName(tabName+"_"+name+"__"+task.getName());
-		}
-		for (TMLTask task: tmlmodel.getTasks()){
-			HwExecutionNode node =(HwExecutionNode) map.getHwNodeOf(task);
-			if (newmodel.getTMLTaskByName(task.getName().replace(tabName,tabName+"_"+name))!=null){
-				map.addTaskToHwExecutionNode(newmodel.getTMLTaskByName(task.getName().replace(tabName,tabName+"_"+name)), node);
-				map.removeTask(task);
-			}
-			else {
-				System.out.println("Can't find " + task.getName());
-			}
-		}
-		//map.setTMLModeling(newmodel);
-		//System.out.println(map);
-		//TMLMapping newMap = gtm.translateToTMLMapping();
-		map.setTMLModeling(newmodel);
-		return map;
-	}
-	public boolean securePath(TMLMapping map, TMLTask t1, TMLTask t2){
-		//Check if a path between two tasks is secure
-		boolean secure=true;
-		java.util.List<HwLink> links = map.getTMLArchitecture().getHwLinks();
-		HwExecutionNode node1 = (HwExecutionNode) map.getHwNodeOf(t1);
-		HwExecutionNode node2 = (HwExecutionNode) map.getHwNodeOf(t2);
-		java.util.List<HwNode> found = new ArrayList<HwNode>();
-		java.util.List<HwNode> done = new ArrayList<HwNode>();
-		java.util.List<HwNode> path = new ArrayList<HwNode>();
-		Map<HwNode, java.util.List<HwNode>> pathMap = new HashMap<HwNode, java.util.List<HwNode>>();
-		TraceManager.addDev("Links " + links);
-		if (node1==node2){
-			return true;
-		}
-		for (HwLink link: links){
-			if (link.hwnode == node1){
-				found.add(link.bus);
-				java.util.List<HwNode> tmp = new ArrayList<HwNode>();
-				tmp.add(link.bus);
-				pathMap.put(link.bus, tmp);
-			}
-		}
-		outerloop:
-		while (found.size()>0){
-			HwNode curr = found.remove(0);
-			for (HwLink link: links){
-				if (curr == link.bus){
-					if (link.hwnode == node2){
-						path = pathMap.get(curr);
-						break outerloop;
-					}
-					if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge){
-						found.add(link.hwnode);
-						java.util.List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-						tmp.add(link.hwnode);
-						pathMap.put(link.hwnode, tmp);
-					}
-				}
-				else if (curr == link.hwnode){
-					if (!done.contains(link.bus) && !found.contains(link.bus)){
-						found.add(link.bus);
-						java.util.List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
-						tmp.add(link.bus);
-						pathMap.put(link.bus, tmp);
-					}
-				}
-			}
-			done.add(curr);
-		}
-		if (path.size() ==0){
-			System.out.println("no path");
-			return true;
-		}
-		else {
-			HwBus bus;
-			//Check if all buses and bridges are private
-			for (HwNode n: path){
-				if (n instanceof HwBus){
-					bus = (HwBus) n;
-					if (bus.privacy ==0){
-						return false;
-					}
-				}
-			}
-		}
-		return secure;
-	}
-	
-	public void autoMapKeys(){
-		TraceManager.addDev("auto map keys");
-		if (tmap==null){
-			return;
-		}
-		java.util.List<HwLink> links = tmap.getArch().getHwLinks();
-		//Find all Security Patterns, if they don't have an associated memory at encrypt and decrypt, map them
-		TMLModeling tmlm = tmap.getTMLModeling();
-		if (tmlm.securityTaskMap ==null){
-			return;
-		}
-		//	System.out.println(tmlm.securityTaskMap);
-		for (SecurityPattern sp: tmlm.securityTaskMap.keySet()){
-			if (sp.type.contains("Encryption") || sp.type.equals("MAC")){
-				TraceManager.addDev("Finding security "+sp);
-				for (TMLTask t:tmlm.securityTaskMap.get(sp)){
-					ArrayList<HwMemory> mems = new ArrayList<HwMemory>();
-					boolean keyFound=false;
-					HwExecutionNode node1 = (HwExecutionNode) tmap.getHwNodeOf(t);
-					//Try to find memory using only private buses
-					java.util.List<HwNode> toVisit = new ArrayList<HwNode>();
-					//  java.util.List<HwNode> toMemory = new ArrayList<HwNode>();
-					java.util.List<HwNode> complete = new ArrayList<HwNode>();
-					for (HwLink link:links){
-						if (link.hwnode==node1){
-							if (link.bus.privacy==1){
-								toVisit.add(link.bus);
-							}
-						}
-					}
-					memloop:
-					while (toVisit.size()>0){
-						HwNode curr = toVisit.remove(0);
-						for (HwLink link: links){
-							if (curr == link.bus){
-								if (link.hwnode instanceof HwMemory){
-									mems.add((HwMemory) link.hwnode);
-									TMLArchiMemoryNode memNode= (TMLArchiMemoryNode) listE.getTG(link.hwnode);
-									ArrayList<TMLArchiKey> keys = memNode.getKeyList();
-									String patternString= "";
-									for (TMLArchiKey key: keys){
-										if (key.getValue().equals(sp.name)){
-
-											keyFound=true;
-											break memloop;
-										}
-										patternString += key.getValue();
-										patternString += " ";
-									}
-									TraceManager.addDev("Memory "+ link.hwnode.getName() + " has currently mapped: " + patternString);
-								}
-								if (!complete.contains(link.hwnode) && !toVisit.contains(link.hwnode) && link.hwnode instanceof HwBridge){
-									toVisit.add(link.hwnode);
-								}
-							}
-							else if (curr == link.hwnode){
-								if (!complete.contains(link.bus) && !toVisit.contains(link.bus)){
-									toVisit.add(link.bus);
-								}
-							}
-						}
-						complete.add(curr);
-					}
-					if (!keyFound){
-						if (mems.size()>0){
-							TMLArchiMemoryNode memNode= (TMLArchiMemoryNode) listE.getTG(mems.get(0));
-							TMLArchiKey key = new TMLArchiKey(memNode.x, memNode.y, memNode.tdp.getMinX(), memNode.tdp.getMaxX(), memNode.tdp.getMinY(), memNode.tdp.getMaxY(), false, memNode, memNode.tdp);
-							key.setReferenceKey(sp.name);
-							key.makeFullValue();
-							TraceManager.addDev("Adding " +sp.name+ " key to " +memNode.getName());
-							TraceManager.addDev("Adding " +sp + " key to " +memNode.getName());
-							memNode.tdp.addComponent(key, memNode.x, memNode.y, true,true);
-							memNode.tdp.repaint();
-						}
-						else {
-							System.out.println("Can't map key to memory for " + sp.name + " on task " + t.getName());
-							UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot map key in memory for " + sp.name + " on task " + t.getName());
-							ce.setTDiagramPanel(tmap.tmlap.tmlap);
-							ce.setTGComponent(null);
-							checkingErrors.add(ce);
-						}
-					}
-				}
-			}
-		}
-		TraceManager.addDev("Mapping finished");
-	}
-
-	public void generateAvatarFromTML(boolean mc, boolean security){
-		TraceManager.addDev("Generating Avatar from TML");
-		if (tmlm!=null && tmap==null){
-			tmap = tmlm.getDefaultMapping();
-		}
-		if (avatarspec!=null){
-			return;
-		}
-		else if (tmap!=null){
-			t2a = new TML2Avatar(tmap, mc, security);
-			TraceManager.addDev("Avatar spec generation");
-			avatarspec = t2a.generateAvatarSpec("1");
-			TraceManager.addDev("Avatar spec generation: done");
-		}
-	}
-
-	public boolean generateProVerifFromAVATAR(String _path, int _stateReachability, boolean _typed, String loopLimit) {
-	//	System.out.println(avatarspec);
-		if (avatarspec !=null){
-			//use avspec
-		}
-		else if (tmap!=null){
-			t2a = new TML2Avatar(tmap,false,true);
-			avatarspec = t2a.generateAvatarSpec(loopLimit);
-			drawPanel(avatarspec, mgui.getFirstAvatarDesignPanelFound());
-
-		}
-		else if (tmlm!=null){
-			//Generate default mapping
-			tmap = tmlm.getDefaultMapping();
-			tmap.setTMLDesignPanel((TMLComponentDesignPanel)mgui.getCurrentTURTLEPanel());
-			t2a=new TML2Avatar(tmap,false,true);
-			avatarspec = t2a.generateAvatarSpec(loopLimit);
-		}
-		else if (avatarspec == null){
-			return false;
-		}
-
-		avatar2proverif = new AVATAR2ProVerif(avatarspec);
-		//tml2uppaal.setChoiceDeterministic(choices);
-		//tml2uppaal.setSizeInfiniteFIFO(_size);
-		proverif = avatar2proverif.generateProVerif(true, true, _stateReachability, _typed);
-		warnings = avatar2proverif.getWarnings();
-		languageID = PROVERIF;
-		mgui.setMode(MainGUI.EDIT_PROVERIF_OK);
-		//uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
-		try {
-			if (avatar2proverif.saveInFile(_path)){
-				TraceManager.addDev("Specification generated in " + _path);
-				return true;
-			}
-			return false;
-		} catch (FileException fe) {
-			TraceManager.addError("Exception: " + fe.getMessage());
-			return false;
-		}
-	}
-
-	public TPN generateTPNFromAvatar() {
-		avatar2tpn = new AVATAR2TPN(avatarspec);
-		//tml2uppaal.setChoiceDeterministic(choices);
-		//tml2uppaal.setSizeInfiniteFIFO(_size);
-		tpnFromAvatar = avatar2tpn.generateTPN(true, true);
-		languageID = TPN;
-		return tpnFromAvatar;
-	}
-
-	/*IntMatrix im = tpnFromAvatar.getIncidenceMatrix();
-	  TraceManager.addDev("Farkas computing on " + im.toString());
-	  im.Farkas();
-	  TraceManager.addDev("Farkas done:" + im.toString());
-
-
-
-	  languageID = TPN;
-	  //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
-	  return true;
-	  /*try {
-	  avatar2tpn.saveInFile(_path);
-	  TraceManager.addDev("Specification generated in " + _path);
-	  return true;
-	  } catch (FileException fe) {
-	  TraceManager.addError("Exception: " + fe.getMessage());
-	  return false;
-	  }*/
-
-
-	public ArrayList<TGComponentAndUPPAALQuery> getUPPAALQueries() {
-		return getUPPAALQueries(mgui.getCurrentTURTLEPanel());
-	}
-
-	public ArrayList<TGComponentAndUPPAALQuery> getUPPAALQueries(TURTLEPanel tp) {
-		TraceManager.addDev("Searching for queries on " + mgui.getTabName(tp));
-		ArrayList<TGComponent> list = new ArrayList<TGComponent>();
-		ArrayList<TClass> tclasses;
-		tp.getAllCheckableTGComponent(list);
-		TGComponentAndUPPAALQuery tmpQ;
-
-		ArrayList<TGComponentAndUPPAALQuery> listQ = new ArrayList<TGComponentAndUPPAALQuery>();
-
-		if (tp instanceof DesignPanel) {
-			ArrayList<ADComponent> listAD = listE.getADComponentCorrespondance(list);
-
-			//TraceManager.addDev("List size:" + listAD.size());
-
-			if (listAD == null) {
-				return null;
-			}
-
-			TClass t;
-			String s;
-			for(ADComponent adc:listAD) {
-				if (adc != null) {
-					t = tm.findTClass(adc);
-					//TraceManager.addDev("Found class:" + t.getName());
-					if (t!= null) {
-						tclasses = new ArrayList<TClass>();
-						tclasses.add(t);
-						// For handling tobjects
-						tm.addAllTClassesEndingWith(tclasses, "_" + t.getName());
-						for(TClass tc: tclasses) {
-							//TraceManager.addDev("Analyzing class:" + tc.getName());
-							s = uppaalTIFTable.getRQuery(tc, adc);
-							if (s != null) {
-								//TraceManager.addDev("Adding query:" + s);
-								tmpQ = new TGComponentAndUPPAALQuery(null, s + "$" + adc);
-								listQ.add(tmpQ);
-							}
-						}
-					}
-				}
-			}
-		} else if ((tp instanceof TMLComponentDesignPanel) || (tp instanceof TMLDesignPanel)) {
-			//TraceManager.addDev("uppaalTMLTable");
-			ArrayList<TMLActivityElement> listAE = listE.getTMLActivityElementCorrespondance(list);
-
-			if (listAE == null) {
-				return null;
-			}
-
-			TMLTask task;
-			String s;
-			for(TMLActivityElement elt:listAE) {
-				if (elt != null) {
-					task = tmlm.findTMLTask(elt);
-					if (task!= null) {
-						s = uppaalTMLTable.getRQuery(task, elt);
-						if (s != null) {
-							//TraceManager.addDev("Adding query:" + s);
-							// Object ref;
-							if (elt.getReferenceObject() instanceof TGComponent) {
-								tmpQ = new TGComponentAndUPPAALQuery((TGComponent)(elt.getReferenceObject()), s + "$" + elt);
-							} else {
-								tmpQ = new TGComponentAndUPPAALQuery(null, s + "$" + elt);
-							}
-							listQ.add(tmpQ);
-						}
-					}
-				}
-			}
-
-		} else if ((avatar2uppaal != null) && (tp instanceof AvatarDesignPanel)) {
-			TraceManager.addDev("Making UPPAAL queries");
-			for(TGComponent tgc: list) {
-				TraceManager.addDev("Making UPPAAL query for " + tgc);
-				String s = avatar2uppaal.getUPPAALIdentification(tgc);
-				TraceManager.addDev("Query: " + s);
-				if ((s!= null) && (s.length() > 0)) {
-					AvatarBlock block = avatar2uppaal.getBlockFromReferenceObject(tgc);
-					listQ.add(new TGComponentAndUPPAALQuery(tgc, s + "$" + block.getName() + "." + tgc));
-				} else {
-					TraceManager.addDev("Could not make query for " + tgc);
-				}
-			}
-		} else if ((avatar2uppaal != null) && (tp instanceof AttackTreePanel)) {
-			TraceManager.addDev("Making UPPAAL queries");
-			for(TGComponent tgc: list) {
-				TraceManager.addDev("Making UPPAAL query for " + tgc);
-				String s = avatar2uppaal.getUPPAALIdentification(tgc);
-				TraceManager.addDev("Query: " + s);
-				if ((s!= null) && (s.length() > 0)) {
-					AvatarBlock block = avatar2uppaal.getBlockFromReferenceObject(tgc);
-					listQ.add(new TGComponentAndUPPAALQuery(tgc, s + "$" + block.getName() + "." + tgc));
-				} else {
-					TraceManager.addDev("Could not make query for " + tgc);
-				}
-			}
-		}
-
-		return listQ;
-	}
-
-	public List<String> generateLOTOSAUT(String path) {
-		TML2AUTviaLOTOS tml2aut = new TML2AUTviaLOTOS(tmlm, tm);
-		tml2aut.generateLOTOS(true);
-		return tml2aut.getSpecs();
-		/*try {
-		  return tml2aut.saveInFiles(path);
-		  } catch (FileException fe) {
-		  return null;
-		  }*/
-	}
-
-	public void generateSystemC() {
-		String path = ConfigurationTTool.SystemCCodeDirectory;
-		String list = FileUtils.deleteFiles(path, ".cpp");
-		if (list.length() == 0) {
-			TraceManager.addDev("No cpp files were deleted\n");
-		} else {
-			TraceManager.addDev("Files deleted:\n" + list + "\n");
-		}
-
-		list = FileUtils.deleteFiles(path, ".x");
-
-		if (list.length() == 0) {
-			TraceManager.addDev("No x files were deleted\n");
-		} else {
-			TraceManager.addDev("Files deleted:\n" + list + "\n");
-		}
-
-		TML2SystemC tml2systc = new TML2SystemC(tmlm);
-		tml2systc.generateSystemC(true);
-		//tml2systc.print();
-		try {
-			tml2systc.saveFile(path, "appmodel");
-		} catch (FileException fe) {
-			TraceManager.addError("File could not be saved (SystemC)");
-		}
-
-	}
-
-
-	public void saveSIM(File f) {
-		if ((sim != null) && (f != null)) {
-			saveInFile(f, sim);
-		}
-	}
-
-	public void saveDTA(File f) {
-		if ((dta != null) && (f != null)) {
-			saveInFile(f, dta);
-		}
-	}
-
-	public void saveDTADOT(File f) {
-		if ((dtadot != null) && (f != null)) {
-			saveInFile(f, dtadot);
-		}
-	}
-
-	public void saveRG(File f) {
-		if ((rg != null) && (f != null)) {
-			saveInFile(f, rg);
-		}
-	}
-
-	public void saveTLSA(File f) {
-		if ((rg != null) && (f != null)) {
-			saveInFile(f, tlsa);
-		}
-	}
-
-	public void saveRGAut(File f) {
-		if ((rgaut != null) && (f != null)) {
-			saveInFile(f, rgaut);
-		}
-	}
-
-	public void saveRGDOT(File f) {
-		if ((rgdot != null) && (f != null)) {
-			saveInFile(f, rgdot);
-		}
-	}
-
-	public void saveTLSADOT(File f) {
-		if ((rgdot != null) && (f != null)) {
-			saveInFile(f, tlsadot);
-		}
-	}
-
-	public void saveRGAutDOT(File f) {
-		if ((rgautdot != null) && (f != null)) {
-			saveInFile(f, rgautdot);
-		}
-	}
-
-	public void saveRGAutProj(File f) {
-		if ((rgautproj != null) && (f != null)) {
-			saveInFile(f, rgautproj);
-		}
-	}
-
-	public void saveRGAutProjDOT(File f) {
-		if ((rgautprojdot != null) && (f != null)) {
-			saveInFile(f, rgautprojdot);
-		}
-	}
-
-	public void modifyMinimizedGraph() {
-		/*AUTMappingGraph graph = new AUTMappingGraph();
-		  TraceManager.addDev("Building graph");
-		  graph.buildGraph(rgautproj);
-		  TraceManager.addDev("Renaming transitions");
-		  graph.renameTransitions();
-		  TraceManager.addDev("Merging transitions 23/4=" + (23/4) + "23%4="  + (23%4));
-		  graph.mergeWriteTransitions();
-		  graph.mergeReadTransitions();
-		  graph.removeInternalTransitions();
-		  TraceManager.addDev("Printing graph:\n" + graph.toAUTStringFormat());
-		  TraceManager.addDev("Splitting transitions");
-		  graph.splitTransitions();
-		  modifiedaut = graph.toAUTStringFormat();
-		  TraceManager.addDev("Printing graph:\n" + modifiedaut);
-		  TraceManager.addDev("Translation in DOT format");
-
-		  // AUT  2 dot
-		  String fileName = "graph";
-		  try {
-		  RshClient rshc = new RshClient(getHostAldebaran());
-		  int id = rshc.getId();
-		  fileName = FileUtils.addBeforeFileExtension(fileName, "_" + id);
-		  String data = rgautproj;
-		  rshc.sendFileData(fileName + ".aut", data);
-		  String cmd1 = getPathBcgio() + " -aldebaran " + fileName + ".aut" + " -graphviz " + fileName + ".dot";
-		  data = processCmd(rshc, cmd1);
-		  data = rshc.getFileData(fileName + ".dot");
-		  modifiedautdot = data;
-		  TraceManager.addDev("All done");
-		  } catch (LauncherException le) {
-		  TraceManager.addDev("Error: conversion failed");
-		  }*/
-	}
-
-	protected String processCmd(RshClient rshc, String cmd) throws LauncherException {
-		rshc.setCmd(cmd);
-		String s = null;
-		rshc.sendExecuteCommandRequest();
-		s = rshc.getDataFromProcess();
-		return s;
-	}
-
-	public void showSIM(int type) {
-		if (sim != null) {
-			JFrameSimulationTrace jfst = new JFrameSimulationTrace("Last simulation trace", sim, type);
-			jfst.setIconImage(IconManager.img8);
-			//  jfst.setSize(900, 600);
-			GraphicLib.centerOnParent( jfst, 900, 600 );
-			jfst.setVisible(true);
-		}
-	}
-
-	public String showDTA() {
-		if (dta != null) {
-			return runDOTTY(dtadot);
-		}
-		return null;
-	}
-
-	public String showRG() {
-		if (rg != null) {
-			return runDOTTY(rgdot);
-		}
-		return null;
-	}
-
-	public String showTLSA() {
-		if (rg != null) {
-			return runDOTTY(tlsadot);
-		}
-		return null;
-	}
-
-	public String showRGAut() {
-		if (rgaut != null) {
-			return runDOTTY(rgautdot);
-		}
-		return null;
-	}
-
-	public String showRGDiplodocus() {
-		TraceManager.addDev("Show diplodocus graph located in " + ConfigurationTTool.GGraphPath + "/tree.dot");
-		RemoteExecutionThread ret = new RemoteExecutionThread(ConfigurationTTool.DOTTYHost, null, null, ConfigurationTTool.DOTTYPath + " " + ConfigurationTTool.GGraphPath + "/tree.dot");
-		ret.start();
-		return null;
-	}
-
-	public String showRGAutProj() {
-		if (rgaut != null) {
-			return runDOTTY(rgautprojdot);
-		}
-		return null;
-	}
-
-	public static String showGGraph(String ggraph) {
-		if (ggraph != null) {
-			return runDOTTY(ggraph);
-		}
-		return null;
-	}
-
-	public static String runDOTTY(String data) {
-		String fileName = "graph" + graphId + ".dot";
-		graphId ++;
-
-		RemoteExecutionThread ret = new RemoteExecutionThread(ConfigurationTTool.DOTTYHost, fileName, data, ConfigurationTTool.DOTTYPath + " " + fileName);
-		ret.start();
-
-		return null;
-	}
-
-	public boolean useDynamicStructure(String data) {
-		int index1 = data.indexOf("behaviour");
-		if (index1 == -1) {
-			return false;
-		}
-
-		data = data.substring(index1, data.length());
-
-		return (data.indexOf("Queue_nat") != -1);
-
-	}
-
-
-
-	public void saveInFile(File file, String s) {
-		TraceManager.addDev("Saving in file " + file.getAbsolutePath() + " size of file=" + s.length());
-		//TraceManager.addDev("Length of s=" + s.length());
-
-		int index1 = 0, index2;
-		int step = 1048576;
-		int length = s.length();
-		//String sub;
-
-		try {
-			FileOutputStream fos = new FileOutputStream(file);
-			while(index1<length) {
-				index2 = Math.min(index1+step, length);
-				fos.write(s.substring(index1, index2).getBytes());
-				index1 += step;
-			}
-			fos.close();
-		} catch(Exception e) {
-			JOptionPane.showMessageDialog(mgui.frame, "Specification could not be saved " + e.getMessage(), "Lotos File Error", JOptionPane.INFORMATION_MESSAGE);
-			TraceManager.addError("Specification could not be saved " + e.getMessage());
-		}
-
-		/*try {
-		  FileOutputStream fos = new FileOutputStream(file);
-		  fos.write(s.getBytes());
-		  fos.close();
-		  } catch(Exception e) {
-		  JOptionPane.showMessageDialog(mgui.frame, "Specification could not be saved " + e.getMessage(), "Lotos File Error", JOptionPane.INFORMATION_MESSAGE);
-		  TraceManager.addDev("Specification could not be saved " + e.getMessage());
-		  }*/
-	}
-
-	public String getLastRTLOTOSSpecification() {
-		return  rtlotos;
-	}
-
-	public String getLastTextualDTA() {
-		return dta;
-	}
-
-	public String getLastGraphicalDTA() {
-		return dtadot;
-	}
-
-	public String getLastTextualRG() {
-		return rg;
-	}
-
-	public String getLastGraphicalRG() {
-		return rgdot;
-	}
-
-	public String getLastTextualTLSA() {
-		return tlsa;
-	}
-
-	public String getLastGraphicalTLSA() {
-		return tlsadot;
-	}
-
-	public String getLastTextualRGAUT() {
-		return rgaut;
-	}
-
-	public String getLastGraphicalRGAUT() {
-		return rgautdot;
-	}
-
-	public String getLastTextualRGAUTProj() {
-		return rgautproj;
-	}
-
-	public String getLastGraphicalRGAUTProj() {
-		return rgautprojdot;
-	}
-
-	public String getLastProVerifSpecification() {
-		if (proverif == null) {
-			return "";
-		}
-
-		return proverif.getStringSpec();
-	}
-
-	public int getNbRTLOTOS() {
-		return nbRTLOTOS;
-	}
-
-	public String getLastTextualDesign() {
-		if (tm == null) {
-			return "";
-		} else {
-			return tm.printToStringBuffer().toString();
-		}
-	}
-
-	public int getNbSuggestedDesign() {
-		return nbSuggestedDesign;
-	}
-
-	// formal validation
-	public void reinitSIM() {
-		sim = null;
-		mgui.setMode(MainGUI.SIM_KO);
-	}
-
-	public void reinitDTA() {
-		dta = null;
-		dtadot = null;
-		mgui.setMode(MainGUI.DTADOT_KO);
-	}
-
-	public void reinitRG() {
-		rg = null;
-		rgdot = null;
-		mgui.setMode(MainGUI.RGDOT_KO);
-	}
-
-	public void reinitRGAUT() {
-		rgaut = null;
-		rgautdot = null;
-		mgui.setMode(MainGUI.RGAUTDOT_KO);
-		mgui.setMode(MainGUI.RGAUT_KO);
-	}
-
-	public void reinitRGAUTPROJDOT() {
-		rgautprojdot = null;
-		mgui.setMode(MainGUI.RGAUTPROJDOT_KO);
-	}
-
-	public void setSIM(String data) {
-		sim = data;
-		mgui.setMode(MainGUI.SIM_OK);
-	}
-
-	public void setDTA(String data) {
-		dta = data;
-	}
-
-	public void setDTADOT(String data) {
-		dtadot = data;
-		mgui.setMode(MainGUI.DTADOT_OK);
-	}
-
-	public void setRG(String data) {
-		rg = data;
-		mgui.setMode(MainGUI.RGDOT_OK);
-	}
-
-	public void setTLSA(String data) {
-		tlsa = data;
-		//mgui.setMode(MainGUI.TLSADOT_OK);
-	}
-
-	public void setTLSADOT(String data) {
-		tlsadot = data;
-		mgui.setMode(MainGUI.TLSADOT_OK);
-	}
-
-	public void setRGAut(String data) {
-		rgaut = data;
-		mgui.setMode(MainGUI.RGAUT_OK);
-	}
-
-	public String getLastRGAUT() {
-		return rgaut;
-	}
-
-	public void setRGDOT(String data) {
-		rgdot = data;
-		mgui.setMode(MainGUI.RGDOT_OK);
-	}
-
-	public void setRGAutDOT(String data) {
-		rgautdot = data;
-		mgui.setMode(MainGUI.RGAUTDOT_OK);
-	}
-
-	public void setRGAUTPROJ(String data) {
-		rgautproj = data;
-	}
-
-	public void setRGAUTPROJDOT(String data) {
-		rgautprojdot = data;
-		mgui.setMode(MainGUI.RGAUTPROJDOT_OK);
-	}
-
-	// Configuration
-
-	public String getPathRTL() {
-		return ConfigurationTTool.RTLPath;
-	}
-
-	public String getPathCaesar() {
-		return ConfigurationTTool.CaesarPath;
-	}
-
-	public String getPathCaesarOpen() {
-		return ConfigurationTTool.CaesarOpenPath;
-	}
-
-	public String getPathDTA2DOT() {
-		return ConfigurationTTool.DTA2DOTPath;
-	}
-
-	public String getPathRGSTRAP() {
-		return ConfigurationTTool.RGSTRAPPath;
-	}
-
-	public String getPathRG2TLSA() {
-		return ConfigurationTTool.RG2TLSAPath;
-	}
-
-	public String getHost() {
-		return ConfigurationTTool.RTLHost;
-	}
-
-	public static String getCaesarHost() {
-		return ConfigurationTTool.AldebaranHost;
-	}
-
-	public static String getHostAldebaran() {
-		return ConfigurationTTool.AldebaranHost;
-	}
-
-	public static String getPathAldebaran() {
-		return ConfigurationTTool.AldebaranPath;
-	}
-
-	public static String getPathBcgio() {
-		return ConfigurationTTool.BcgioPath;
-	}
-
-	public static String getPathBisimulator() {
-		return ConfigurationTTool.BisimulatorPath;
-	}
-
-	public String getPathBcgmerge() {
-		return ConfigurationTTool.BcgmergePath;
-	}
-
-	public String getPathBcgmin() {
-		return ConfigurationTTool.BcgminPath;
-	}
-
-	public String getPathVerifyta() {
-		return ConfigurationTTool.UPPAALVerifierPath;
-	}
-
-	public String getPathUPPAALVerifier() {
-		return ConfigurationTTool.UPPAALVerifierPath;
-	}
-
-	public String getPathUPPAALFile() {
-		return ConfigurationTTool.UPPAALCodeDirectory;
-	}
-
-	public String getUPPAALVerifierHost() {
-		return ConfigurationTTool.UPPAALVerifierHost;
-	}
-
-
-
-	public TURTLEModeling getTURTLEModeling() {
-		return tm;
-	}
-
-	public int getTURTLEModelingState() {
-		return tmState;
-	}
-
-	public TMLModeling getTMLModeling() {
-		return tmlm;
-	}
-	public TML2Avatar getTML2Avatar(){
-		return t2a;
-	}
-	public TMLMapping getArtificialTMLMapping() {
-		return artificialtmap;
-	}
-
-	public TMLMapping getTMLMapping() {
-		return tmap;
-	}
-
-	public UPPAALSpec getLastUPPAALSpecification() {
-		return uppaal;
-	}
-
-	// TREE MANAGEMENT
-
-	public String toString() {
-		return mgui.getTitle();
-	}
-
-	public int getChildCount() {
-		return panels.size() + 4;
-	}
-
-	public Object getChild(int index) {
-		if (index < panels.size()) {
-			return panels.elementAt(index);
-		} else if (index == panels.size()) {
-			return mcvdt;
-		} else if (index == (panels.size() + 1)) {
-			return gt;
-		}  else if (index == (panels.size() + 2)) {
-			return idt;
-		} else {
-			return st;
-		}
-
-	}
-
-	public int getIndexOfChild(Object child) {
-		int index = panels.indexOf(child);
-
-		if (index > -1) {
-			return index;
-		}
-
-		if (child == mcvdt) {
-			return panels.size();
-		}
-
-		if (child == gt) {
-			return panels.size() + 1;
-		}
-
-		if (child == idt) {
-			return panels.size() + 2;
-		}
-
-		return panels.size()+3;
-	}
-
-	// Projection management
-
-	public MasterGateManager getNewMasterGateManager() {
-		return new MasterGateManager(tm);
-	}
-
-	// Assume the inputData is in AUT format: generated by RTL or CADP
-	public String performProjection(String inputData, LinkedList<TClassAndGateDS> gates) {
-		StringBuffer result = new StringBuffer("");
-		StringReader sr = new StringReader(inputData);
-		BufferedReader br = new BufferedReader(sr);
-		String s;
-		String actionName, actionName1;
-		int index, index1, index2;
-		MasterGateManager mgm = new MasterGateManager(tm, 1);
-		//   Gate g;
-		GroupOfGates gog;
-		Hashtable <String, GroupOfGates> hashtable = new Hashtable<String, GroupOfGates>();
-
-		//   int cpt = 0;
-
-		//TraceManager.addDev("input data=" + inputData);
-
-		// Fill Hashtable
-		// int j;
-		for (TClassAndGateDS tag: gates) {
-			//TraceManager.addDev("TClass:" + tag.getTClassName() + " Gate:" + tag.getGateName());
-			//actionName = tag.getGateName();
-			//g = mgm.getGate(tag.getTClassName(), actionName);
-			//TraceManager.addDev("actionName = " + actionName + " gateName = " + g.getName());
-			//if (g != null) {
-			//gog = mgm.getGroupOfGatesByGate(g);
-			gog = mgm.groupOf(tag.getTClassName(), tag.getGateName());
-			if (gog != null) {
-				//TraceManager.addDev("Found a gog: >" + gog.getMasterGateName() + "<");
-				hashtable.put(gog.getMasterGateName().getName(), gog);
-				/*for(j=0;j<gog.size();j++) {
-				  g = gog.getGateAt(j);
-				  TraceManager.addDev("Putting: " + g.getName());
-				  hashtable.put(g.getName(), g);
-				  }*/
-			}
-			//}
-		}
-
-		try {
-			while((s = br.readLine()) != null) {
-				/*if (cpt % 10000 == 0) {
-				  TraceManager.addDev("cpt=" + cpt);
-				  }*/
-				//   cpt ++;
-
-				if (s.startsWith("des")) {
-					result.append(s + "\n");
-				} else if (s.startsWith("(")) {
-					index = s.indexOf("\"t\"");
-					if (index > 0) {
-						// temporal action
-						// replace t with i
-						s = s.replaceAll("\"t\"", "i");
-						result.append(s + "\n");
-					} else {
-						//exit action?
-						index = s.indexOf("\"exit\"");
-						if (index > 0) {
-							// exit action
-							// replace t with i
-							s = s.replaceAll("\"exit\"", "i");
-							result.append(s + "\n");
-						} else {
-							// regular action
-							// find the name of this action
-							index1 = s.indexOf("i(");
-							index2 = s.indexOf(")");
-							actionName = s.substring(index1 + 2, index2);
-							index = actionName.indexOf("<");
-							if (index < 0) {
-								actionName1 = actionName;
-							} else {
-								actionName1 = actionName.substring(0, index);
-							}
-							TraceManager.addDev("Action = >" + actionName1 + "<");
-
-							gog = hashtable.get(actionName1);
-							if (gog == null) {
-								TraceManager.addDev("Not in hash");
-								result.append(makeIAction(s) + "\n");
-							} else {
-								TraceManager.addDev("In hash");
-								result.append(makeAction(s, actionName) + "\n");
-							}
-
-							// action to ignored or to project ?
-							/*g = mgm.getGate(actionName1);
-							  if (g == null) {
-							  //TraceManager.addDev("null1");
-							  result.append(makeIAction(s) + "\n");
-							  } else {
-							  gog = mgm.getGroupOfGatesByGate(g);
-							  if (gog == null) {
-							  //TraceManager.addDev("null2");
-							  result.append(makeIAction(s) + "\n");
-							  } else {
-							  if (!belongTo(gog, gates)) {
-							  // Check if directly a master Gate!
-							  // A completer ...
-							  //TraceManager.addDev("null3");
-							  result.append(makeIAction(s) + "\n");
-							  } else {
-							  //TraceManager.addDev("action added: " + actionName);
-							  result.append(makeAction(s, actionName) + "\n");
-							  }
-							  }
-							  }*/
-						}
-
-					}
-				}
-			}
-		} catch (Exception e) {
-			TraceManager.addError("Exception during projection" + e.getMessage());
-			return null;
-		}
-		return new String(result);
-	}
-
-	// Assume the inputData is in AUT format and has been generated by CADP
-	// Note: might not work because of case sensitive problem...
-	public String convertCADP_AUT_to_RTL_AUT(String inputData, int max) {
-		StringBuffer result = new StringBuffer("");
-		StringReader sr = new StringReader(inputData);
-		BufferedReader br = new BufferedReader(sr);
-		String s, s1;
-		String actionName;
-		int index1, index2, index3, index4;
-		Gate g;
-		String g0, g1, g2;
-		int cpt, transi=0;
-		MasterGateManager mgm = new MasterGateManager(tm, 1);
-		Map<String, Gate> ht = mgm.getGatesUpperCaseHashTable();
-		warnings = new LinkedList<CheckingError> ();
-
-		//TraceManager.addDev("input data=" + inputData);
-
-		//   int cpt1 = 0;
-
-		try {
-			while((s = br.readLine()) != null) {
-				//   cpt1 ++;
-				//if (cpt1 % 100000 == 0) {
-				//TraceManager.addDev("=" + cpt1 + " / " + transi);
-				//}
-				if (s.charAt(0) == '(') {
-					index1 = s.indexOf(",");
-					if ((index1 > -1) && ((index1+1) < s.length())) {
-						g1 = s.substring(0, index1 + 1);
-						s = s.substring(index1+1, s.length());
-
-						//TraceManager.addDev("g1=" + g1 + " s=" + s);
-
-						index2 = s.indexOf(",");
-						if ((index2 > -1) && ((index2+1) < s.length())) {
-							g2 = s.substring(index2, s.length());
-							s = s.substring(0, index2);
-							s = s.trim();
-
-							//TraceManager.addDev("g2=" + g2 + " s=" + s);
-
-							// Get action id
-							// Most common case: no data
-							index3 = s.indexOf('"');
-							if (index3 == -1) { // no data
-								actionName = s;
-								g0 = "";
-							} else {
-								// Extract action name
-								actionName = s.substring(index3+1, s.indexOf('!')).trim();
-
-								// Format data
-								g0 = "<";
-								cpt = 0;
-								while((index4 = s.indexOf('!')) > -1) {
-									s = s.substring(index4+1, s.length());
-									if (cpt > 0) {
-										g0 += ",";
-									}
-									cpt ++;
-									index4 = s.indexOf('!');
-									if (index4 > -1) {
-										g0 += s.substring(0, index4);
-									} else {
-										g0 += s.substring(0, s.indexOf('"')).trim();
-									}
-								}
-								g0 += ">";
-							}
-
-							// Working on action name!
-							//g = mgm.getGateLowerCase(actionName);
-							g = (Gate)(ht.get(actionName));
-
-							if (g != null) {
-								//actionName1 = actionName;
-								actionName = g.getName();
-								//TraceManager.addDev("actionName = " + g.getName());
-								/*if (mgm.nbOfPossibleGatesLowerCase(actionName1) > 1) {
-								  CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Action " + actionName1 + " has several possible candidates ; " + actionName + " has been chosen");
-								  warnings.add(ce);
-								  }*/
-							} else {
-								TraceManager.addDev("actionName is not in hashtable: ->" + actionName + "<- length=" + actionName.length());
-							}
-
-							// Store result
-							result.append(g1 + "\"i(" + actionName + g0 + ")\"" + g2 + "\n");
-						}
-					}
-				} else if (s.startsWith("des")) {
-					index1 = s.indexOf(",");
-					s1 = s.substring(index1+1, s.length());
-					index1 = s1.indexOf(",");
-					s1 = s1.substring(0, index1).trim();
-					//TraceManager.addDev("nb of transitions=" + s);
-					transi = Integer.decode(s1).intValue();
-					if (transi > max) {
-						return null;
-					}
-					result.append(s + "\n");
-				}
-			}
-		} catch (Exception e) {
-			TraceManager.addError("Exception convert0" + e.getMessage());
-			return null;
-		}
-		return new String(result);
-	}
-
-	
-	public boolean belongTo(GroupOfGates gog, Vector<TClassAndGateDS> gates) {
-		int i, j;
-		TClassAndGateDS tcg;
-		String nameTClass, nameGate;
-		for(i=0; i<gog.size(); i++) {
-			nameTClass = gog.getTClassAt(i).getName();
-			nameGate = gog.getGateAt(i).getName();
-			for(j=0; j<gates.size(); j++) {
-				tcg = gates.elementAt(j);
-
-				if ((tcg.getTClassName().compareTo(nameTClass) == 0) && (tcg.getGateName().compareTo(nameGate) == 0)) {
-					//TraceManager.addDev("Projected gate");
-					return true;
-				}
-			}
-
-		}
-		return false;
-
-	}
-
-	public String makeIAction(String s) {
-		int index1, index2;
-		index1 = s.indexOf("i(");
-		index2 = s.indexOf(")");
-		return s.substring(0, index1-1) + "i" + s.substring(index2+2, s.length());
-	}
-
-	public String makeAction(String s, String actionName) {
-		int index1, index2;
-		index1 = s.indexOf("i(");
-		index2 = s.indexOf(")");
-		return s.substring(0, index1) + actionName + s.substring(index2+1, s.length());
-	}
-
-	public void enableUndo(boolean b) {
-		undoRunning = !b;
-	}
-
-	public boolean isUndoEnable() {
-		return !undoRunning;
-	}
-
-	// UNDO MANAGEMENT
-
-	// This function is not be performed when executing an undo
-	// if variable undoRunnin has been set to true
-	public void saveOperation(Point p) {
-		if (undoRunning) {
-			return;
-		}
-
-		//TraceManager.addDev("Save operation");
-
-		String s = makeXMLFromTurtleModeling(-1);
-
-		if ((pointerOperation > -1) && (pointerOperation < savedOperations.size() - 1)) {
-			// some save operations must be erased
-			for (int i = pointerOperation +1; i<savedOperations.size(); i++) {
-				savedOperations.removeElementAt(i);
-				savedPanels.removeElementAt(i);
-				i --;
-			}
-		}
-
-		// save actions on tab
-		int size = savedPanels.size();
-		if (size > 0) {
-			Point p1  = savedPanels.elementAt(size - 1); // panels are saved under the form of a point -> x = analysis/design, y = panel
-			if (p == null)
-				p = p1;
-			/*if ((p1.x != p.x) || (p1.y != p.y)){
-			  savedOperations.add(savedOperations.elementAt(size - 1));
-			  savedPanels.add(p);
-			  if (savedOperations.size() > nbMaxSavedOperations) {
-			  savedOperations.removeElementAt(0);
-			  savedPanels.removeElementAt(0);
-			  }
-			  }*/
-		}
-
-		savedOperations.add(s);
-		savedPanels.add(p);
-		if (savedOperations.size() > nbMaxSavedOperations) {
-			savedOperations.removeElementAt(0);
-			savedPanels.removeElementAt(0);
-		}
-		pointerOperation = savedOperations.size() - 1;
-		//TraceManager.addDev("Setting pointer to " + pointerOperation);
-
-		selectBackwardMode();
-	}
-
-	public void backward() {
-		undoRunning = true;
-		TraceManager.addDev("Nb Of saved operations:" + savedOperations.size() + " pointer=" + pointerOperation);
-		if ((pointerOperation < 1)	  || (savedOperations.size() < 2)) {
-			TraceManager.addDev("Undo not possible");
-			undoRunning = false;
-			return;
-		}
-
-		removeAllComponents();
-		mgui.reinitMainTabbedPane();
-
-		// Issue #42: the selected tabs should be memorized before decrementing the pointer
-		final Point prevSelectedTabs = savedPanels.elementAt( pointerOperation );
-		
-		try {
-			pointerOperation --;
-			TraceManager.addDev("Decrementing pointer =" + pointerOperation);
-			loadModelingFromXML((String)(savedOperations.elementAt(pointerOperation)));
-
-		} catch (Exception e) {
-			TraceManager.addError("Exception in backward: " + e.getMessage());
-		}
-
-		TraceManager.addDev("Selecting tab");
-		
-		// Issue #42:
-		//Point p = savedPanels.elementAt(pointerOperation);
-		
-		if ( prevSelectedTabs != null ) {
-			TraceManager.addDev("Selecting tab panel=" + prevSelectedTabs.getX() + " diagram=" + prevSelectedTabs.getY());
-			TDiagramPanel tdp = mgui.selectTab( prevSelectedTabs );
-			tdp.mode = TDiagramPanel.NORMAL;
-			tdp.setDraw(true);
-			tdp.repaint();
-		}
-
-
-		TraceManager.addDev("Selecting backward mode");
-		selectBackwardMode();
-		undoRunning = false;
-	}
-
-	public void selectBackwardMode() {
-		if (pointerOperation <0) {
-			mgui.setMode(MainGUI.NO_BACKWARD);
-			mgui.setMode(MainGUI.NO_FORWARD);
-		} else {
-
-			// forward
-			if (pointerOperation < savedOperations.size() - 1) {
-				mgui.setMode(MainGUI.FORWARD);
-			}  else {
-				mgui.setMode(MainGUI.NO_FORWARD);
-			}
-
-			// backward
-			if (pointerOperation > 0) {
-				mgui.setMode(MainGUI.BACKWARD);
-			} else {
-				mgui.setMode(MainGUI.NO_BACKWARD);
-			}
-		}
-	}
-
-
-	public void forward() {
-		if ((pointerOperation < 0) || (pointerOperation >	   savedOperations.size() - 2)) {
-			return;
-		}
-
-		undoRunning = true;
-		removeAllComponents();
-		mgui.reinitMainTabbedPane();
-
-		try {
-			pointerOperation ++;
-			loadModelingFromXML((String)(savedOperations.elementAt(pointerOperation)));
-		} catch (Exception e) {
-			TraceManager.addError("Exception in forward: " + e.getMessage());
-		}
-
-		Point p = (Point)(savedPanels.elementAt(pointerOperation));
-		if (p != null) {
-			TDiagramPanel tdp = mgui.selectTab(p);
-			tdp.mode = TDiagramPanel.NORMAL;
-			tdp.setDraw(true);
-			tdp.repaint();
-		}
-
-		selectBackwardMode();
-		undoRunning = false;
-	}
-
-
-	// BUILDING A TURTLE MODELING AND CHECKING IT
-	public boolean checkTURTLEModeling(LinkedList<TClassInterface> tclasses, DesignPanel dp, boolean overideSyntaxChecking) {
-		// Builds a TURTLE modeling from diagrams
-		//warnings = new Vector();
-		//checkingErrors = null;
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-		//tm = new TURTLEModeling();
-		//listE = new CorrespondanceTGElement();
-		mgui.reinitCountOfPanels();
-
-		DesignPanelTranslator dpt = new DesignPanelTranslator(dp);
-		tm = dpt.generateTURTLEModeling(tclasses, "");
-		tmState = 0;
-
-		listE = dpt.getCorrespondanceTGElement();
-		checkingErrors = dpt.getErrors();
-		warnings = dpt.getWarnings();
-		if ((checkingErrors != null) && (checkingErrors.size() >0)){
-			return false;
-		}
-
-		// modeling is built
-		// Now check it !
-		if (!overideSyntaxChecking) {
-			TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE);
-
-			checkingErrors = tmc.syntaxAnalysisChecking();
-			warnings.addAll(tmc.getWarnings());
-
-			if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-				analyzeErrors();
-				return false;
-			} else {
-				return true;
-			}
-		}
-
-		return true;
-	}
-
-	// BUILDING An AVATAR Design AND CHECKING IT
-	public boolean checkAvatarDesign(LinkedList<AvatarBDStateMachineOwner> blocks, AvatarDesignPanel adp, boolean _optimize) {
-		// Builds a TURTLE modeling from diagrams
-		//warnings = new Vector();
-		//checkingErrors = null;
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-		//tm = new TURTLEModeling();
-		//listE = new CorrespondanceTGElement();
-		mgui.reinitCountOfPanels();
-
-		//avatarspec = new AvatarSpecification("avatarspecification", adp);
-
-		AvatarDesignPanelTranslator adpt = new AvatarDesignPanelTranslator(adp);
-		avatarspec = adpt.generateAvatarSpecification(blocks);
-		avatarspec.setInformationSource(adp);
-		optimizeAvatar = _optimize;
-		//TraceManager.addDev("AvatarSpec:" + avatarspec.toString() + "\n\n");
-		tmState = 3;
-
-		listE = adpt.getCorrespondanceTGElement();
-		checkingErrors = adpt.getErrors();
-		warnings = adpt.getWarnings();
-		if ((checkingErrors != null) && (checkingErrors.size() >0)){
-			return false;
-		}
-		return true;
-
-		// Modeling is built
-		// Now check it !
-		/*if (!overideSyntaxChecking) {
-		  TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE);
-
-		  checkingErrors = tmc.syntaxAnalysisChecking();
-		  warnings.addAll(tmc.getWarnings());
-
-		  if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-		  analyzeErrors();
-		  return false;
-		  } else {
-		  return true;
-		  }
-		  }
-
-		  return true;*/
-	}
-
-	// Return values
-	// -1: error
-	// -2: no mutex
-	// -3: invariant for mutex not found
-	// else: invariant found! -> invariant index
-	public int computeMutex() {
-		if (avatarspec == null) {
-			return -1;
-		}
-
-		AvatarDesignPanel adp = null;
-
-		try {
-			adp = (AvatarDesignPanel)(avatarspec.getInformationSource());
-		} catch (Exception e) {
-			TraceManager.addDev("Exception gtm: " + e.getMessage());
-			return -1;
-		}
-
-		// Building the list of all states in the mutex
-		LinkedList<TGComponent> compInMutex = adp.getListOfComponentsInMutex();
-		TraceManager.addDev("Nb of elements in mutex:" + compInMutex.size());
-
-		if (compInMutex.size() ==0) {
-			return -2;
-		}
-
-		LinkedList<TGComponent> comps;
-		boolean found;
-		int nbOfFound;
-		int cpt = 0;
-		// Go thru invariants, and see whether one contains
-		for(Invariant inv: invariants) {
-			comps = inv.getComponents();
-			nbOfFound = 0;
-			for(TGComponent tgc_mutex: compInMutex) {
-				found = false;
-				for(TGComponent tgc_inv: comps) {
-					if (tgc_mutex == tgc_inv) {
-						found = true;
-						break;
-					}
-				}
-				if (!found) {
-					break;
-				}
-				nbOfFound ++;
-			}
-			if (nbOfFound == compInMutex.size()) {
-				TraceManager.addDev("Mutex found in inv:" + cpt);
-				for(TGComponent tgc: compInMutex) {
-					tgc.setMutexResult(TGComponent.MUTEX_OK);
-				}
-				return cpt;
-			}
-			cpt ++;
-		}
-
-
-		for(TGComponent tgc: compInMutex) {
-			tgc.setMutexResult(TGComponent.MUTEX_UNKNOWN);
-		}
-
-		return -3;
-
-
-	}
-
-	public void clearGraphicalInfoOnInvariants() {
-		if (avatarspec == null) {
-			return;
-		}
-
-		AvatarDesignPanel adp = null;
-
-		try {
-			adp = (AvatarDesignPanel)(avatarspec.getInformationSource());
-		} catch (Exception e) {
-			TraceManager.addDev("Exception gtm: " + e.getMessage());
-			return;
-		}
-
-		if (adp == null) {
-			return;
-		}
-
-		adp.removeAllMutualExclusionWithMasterMutex();
-
-
-
-	}
-
-
-	// Returns the number of states found
-	// Returns -1 in case of error
-	public int computeMutexStatesWith(AvatarSMDState state) {
-		Vector<TGComponent> list = new Vector<TGComponent>();
-
-		if (state == null) {
-			// DB Issue 17 this will cause null pointer exception
-			//			state.setMutexWith(TGComponent.MUTEX_UNKNOWN);
-			return -1;
-		}
-
-		for(Invariant inv: invariants) {
-			if (inv.containsComponent(state)) {
-				// All other states are in mutual exclusion
-				for(TGComponent tgc: inv.getComponents()) {
-					if ((tgc instanceof AvatarSMDState) && (tgc != state)) {
-						if (tgc.getTDiagramPanel() != state.getTDiagramPanel()) {
-							if (!(list.contains(tgc))) {
-								tgc.setMutualExclusionWithMasterMutex(state.getTDiagramPanel().getName() + "/" + state.getStateName());
-								list.add(tgc);
-
-							}
-						}
-					}
-				}
-			}
-		}
-
-		if (list.size() > 0) {
-			state.setMutexWith(TGComponent.MUTEX_OK);
-		} else {
-			state.setMutexWith(TGComponent.MUTEX_UNKNOWN);
-		}
-
-		return list.size();
-
-	}
-
-
-	public void computeAllMutualExclusions() {
-		TURTLEPanel tp = mgui.getCurrentTURTLEPanel();
-
-		if (tp == null) {
-			return;
-		}
-
-		if (!(tp instanceof AvatarDesignPanel)) {
-			return;
-		}
-
-		AvatarDesignPanel adp = (AvatarDesignPanel)(tp);
-		adp.reinitMutualExclusionStates();
-
-		// First step: build a list of all states being in invariants
-		Vector<AvatarSMDState> v = new Vector<AvatarSMDState>();
-		for(Invariant inv: invariants) {
-			for(TGComponent tgc: inv.getComponents()) {
-				if (tgc instanceof AvatarSMDState) {
-					if (!(v.contains(tgc))) {
-						v.add((AvatarSMDState)tgc);
-					}
-				}
-			}
-		}
-
-		// Then, add to all states its list of mutually exclusive states
-
-		for(AvatarSMDState s: v) {
-			Vector<AvatarSMDState> v0 = new Vector<AvatarSMDState>();
-			for(Invariant inv: invariants) {
-				if (inv.containsComponent(s)) {
-					for(TGComponent tgc: inv.getComponents()) {
-						if ((tgc instanceof AvatarSMDState) && (tgc != s)) {
-							if (tgc.getTDiagramPanel() != s.getTDiagramPanel()) {
-								if (!(v0.contains(tgc))) {
-									v0.add((AvatarSMDState)tgc);
-								}
-							}
-						}
-					}
-				}
-			}
-			TraceManager.addDev("State " + s.getStateName() + " has " + v0.size() + " mutually eclusive states");
-
-			for(AvatarSMDState s0: v0) {
-				s.addMutexState(s0);
-			}
-		}
-
-
-	}
-
-	// From AVATAR to TURTLEModeling
-	public boolean translateAvatarSpecificationToTIF() {
-		AVATAR2TURTLE att = new AVATAR2TURTLE(avatarspec);
-		tm = att.generateTURTLEModeling();
-
-		TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE);
-
-		checkingErrors = tmc.syntaxAnalysisChecking();
-		warnings.addAll(tmc.getWarnings());
-
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			analyzeErrors();
-			return false;
-		} else {
-			return true;
-		}
-
-	}
-
-	public List<CheckingError> getCheckingErrors() {
-		return checkingErrors;
-	}
-
-	public List<CheckingError> getCheckingWarnings() {
-		return warnings;
-	}
-
-
-	// SAVING AND LOADING IN XML
-	public static String transformString(String s) {
-		if (s != null) {
-			s = Conversion.replaceAllChar(s, '&', "&amp;");
-			s = Conversion.replaceAllChar(s, '<', "&lt;");
-			s = Conversion.replaceAllChar(s, '>', "&gt;");
-			s = Conversion.replaceAllChar(s, '"', "&quot;");
-			s = Conversion.replaceAllChar(s, '\'', "&apos;");
-		}
-		return s;
-	}
-
-	public static String encodeString(String s) {
-		return s;
-	}
-
-	public static String decodeString(String s) throws MalformedModelingException {
-		if (s == null)
-			return s;
-		byte b[] = null;
-		try {
-			b = s.getBytes("ISO-8859-1");
-			return new String(b);
-		} catch (Exception e) {
-			throw new MalformedModelingException();
-		}
-	}
-
-	public String mergeTURTLEGModeling(String modeling1, String modeling2) {
-		int index1 = modeling1.indexOf("</TURTLEGMODELING");
-		int index2 = modeling2.indexOf("<TURTLEGMODELING");
-		if ((index1 == -1) || (index2 == -1)) {
-			return null;
-		}
-
-		String modeling = modeling1.substring(0, index1);
-		String tmp = modeling2.substring(index2, modeling2.length());
-		index2 = modeling2.indexOf('<');
-		if (index2 == -1) {
-			return null;
-		}
-
-		tmp = tmp.substring(index2+1, tmp.length());
-
-		return modeling + tmp;
-	}
-
-	public String makeXMLFromComponentOfADiagram(TDiagramPanel tdp, TGComponent tgc, int copyMaxId, int _decX, int _decY) {
-		StringBuffer sb = new StringBuffer();
-
-		//sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
-		sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGSELECTEDCOMPONENTS ");
-		sb.append("version=\"" + DefaultText.getVersion());
-		sb.append("\" copyMaxId=\"" + copyMaxId);
-		sb.append("\" decX=\"" + _decX);
-		sb.append("\" decY=\"" + _decY);
-		sb.append("\" >\n\n");
-
-		StringBuffer s;
-		String str;
-
-		s = tdp.saveComponentInXML(tgc);
-
-		if (tgc instanceof AvatarBDBlock) {
-			AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
-			s.append(asmdp.saveInXML());
-			LinkedList<AvatarBDBlock> list = ((AvatarBDBlock)tgc).getFullBlockList();
-			for(AvatarBDBlock b:list) {
-				asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), b.getValue());
-				s.append(asmdp.saveInXML());
-			}
-		}
-
-		if (tgc instanceof AvatarBDLibraryFunction) {
-			AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), ((AvatarBDLibraryFunction) tgc).getFunctionName ());
-			s.append(asmdp.saveInXML());
-		}
-
-		if (tgc instanceof TCDTClass) {
-			TActivityDiagramPanel tadp = mgui.getActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
-			s.append(tadp.saveInXML());
-		}
-
-		if (tgc instanceof TOSClass) {
-			TURTLEOSActivityDiagramPanel tosadp = mgui.getTURTLEOSActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
-			s.append(tosadp.saveInXML());
-		}
-
-		if (tgc instanceof TMLTaskOperator) {
-			TMLActivityDiagramPanel tmladp1 = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
-			s.append(tmladp1.saveInXML());
-		}
-
-		if (tgc instanceof TMLCPrimitiveComponent) {
-			TMLActivityDiagramPanel tmladp2 = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
-			s.append(tmladp2.saveInXML());
-		}
-
-		if (tgc instanceof TMLCCompositeComponent) {
-			TMLActivityDiagramPanel tmladp3;
-			List<TMLCPrimitiveComponent> list =  ((TMLCCompositeComponent)tgc).getAllPrimitiveComponents();
-
-			for (TMLCPrimitiveComponent comp: list) {
-				tmladp3 =  mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), comp.getValue());
-				s.append(tmladp3.saveInXML());
-			}
-		}
-
-		if (s == null) {
-			return null;
-		}
-		sb.append(s);
-		sb.append("\n\n");
-		sb.append("</TURTLEGSELECTEDCOMPONENTS>");
-
-		str = new String(sb);
-		str = encodeString(str);
-
-		return str;
-	}
-
-
-	public String makeXMLFromSelectedComponentOfADiagram(TDiagramPanel tdp, int copyMaxId, int _decX, int _decY) {
-		StringBuffer sb = new StringBuffer();
-		//TraceManager.addDev("Making copy");
-
-		//sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
-		sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGSELECTEDCOMPONENTS ");
-		sb.append("version=\"" + DefaultText.getVersion());
-		sb.append("\" copyMaxId=\"" + copyMaxId);
-		sb.append("\" decX=\"" + _decX);
-		sb.append("\" decY=\"" + _decY);
-		sb.append("\" >\n\n");
-
-		StringBuffer s;
-		String str;
-
-		s = tdp.saveSelectedInXML();
-
-		final Vector<TCDTClass> classes = tdp.selectedTclasses();
-
-		if ((classes != null) && (classes.size() > 0)) {
-			TCDTClass t;
-			TActivityDiagramPanel tadp;
-			for(int i=0; i<classes.size(); i++) {
-				t = classes.elementAt(i);
-				tadp = mgui.getActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue());
-				s.append(tadp.saveInXML());
-			}
-		}
-
-		//Added by Solange
-		//bug removed by Emil
-		if (tdp instanceof ProactiveCSDPanel) {
-			final Vector<ProCSDComponent> comp =((ProactiveCSDPanel)tdp).selectedProCSDComponent(null);
-
-			if ((comp != null) && (comp.size() > 0)) {
-				ProCSDComponent t;
-				ProactiveSMDPanel psmd;
-				for(int i=0; i<comp.size(); i++) {
-					t = comp.elementAt(i);
-					psmd = mgui.getSMDPanel(mgui.getCurrentSelectedIndex(), t.getValue());
-					if (psmd!=null)
-						s.append(psmd.saveInXML());
-				}
-			}
-		}
-		//until here
-
-
-		final Vector<TOSClass> toClasses = tdp.selectedTURTLEOSClasses();
-
-		if ((toClasses != null) && (toClasses.size() > 0)) {
-			//TraceManager.addDev("Saving TURTLEOS activity diagram Panel...");
-			TOSClass t;
-			TURTLEOSActivityDiagramPanel tosadp;
-			for(int i=0; i<toClasses.size(); i++) {
-				t = toClasses.elementAt(i);
-				tosadp = mgui.getTURTLEOSActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue());
-				s.append(tosadp.saveInXML());
-			}
-		}
-
-		final Vector<TMLTaskOperator> operators = tdp.selectedTMLTasks();
-		if ((operators != null) && (operators.size() > 0)) {
-			//TraceManager.addDev("Saving TML activity diagram Panel...");
-			TMLTaskOperator t;
-			TMLActivityDiagramPanel tmladp;
-			for(int i=0; i<operators.size(); i++) {
-				t = operators.elementAt(i);
-				tmladp = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue());
-				s.append(tmladp.saveInXML());
-			}
-		}
-
-		final Vector<AvatarBDBlock> blocks = tdp.selectedAvatarBDBlocks();
-		if ((blocks != null) && (blocks.size() > 0)) {
-			//TraceManager.addDev("Saving TML activity diagram Panel...");
-			AvatarBDBlock abdb;
-			AvatarSMDPanel asmdp;
-			for(int i=0; i<blocks.size(); i++) {
-				abdb = blocks.elementAt(i);
-				asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), abdb.getBlockName());
-				s.append(asmdp.saveInXML());
-
-			}
-		}
-
-		final Vector<TMLCPrimitiveComponent> primComps = tdp.selectedCPrimitiveComponent();
-
-		if ((primComps != null) && (primComps.size() > 0)) {
-			//TraceManager.addDev("Saving TML activity diagram Panel...");
-			TMLCPrimitiveComponent ct;
-			TMLActivityDiagramPanel tmladp;
-			for(int i=0; i<primComps.size(); i++) {
-				ct = primComps.elementAt(i);
-				tmladp = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), ct.getValue());
-				s.append(tmladp.saveInXML());
-			}
-		}
-
-		if (s == null) {
-			return null;
-		}
-		sb.append(s);
-		sb.append("\n\n");
-		sb.append("</TURTLEGSELECTEDCOMPONENTS>");
-
-		str = new String(sb);
-		str = encodeString(str);
-
-		TraceManager.addDev("Copy done");
-		//TraceManager.addDev(str);
-
-		return str;
-	}
-
-	public String makeOneDiagramXMLFromGraphicalModel(TURTLEPanel tp, int indexOfDiagram) {
-		StringBuffer sb = new StringBuffer();
-		//sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
-		sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGMODELING version=\"" + DefaultText.getVersion() + "\">\n\n");
-
-		StringBuffer s;
-		String str;
-
-
-		s = tp.saveInXML(indexOfDiagram);
-
-		sb.append(s);
-		sb.append("\n\n");
-
-
-		sb.append("</TURTLEGMODELING>");
-
-		str = new String(sb);
-		str = encodeString(str);
-
-		return str;
-	}
-
-	public String makeXMLFromTurtleModeling(int index) {
-		return makeXMLFromTurtleModeling(index, null);
-	}
-
-	public String makeXMLFromTurtleModeling(int index, String extensionToName) {
-		StringBuffer sb = new StringBuffer();
-		//sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
-		sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGMODELING version=\"" + DefaultText.getVersion() + "\">\n\n");
-
-		StringBuffer s;
-		String str;
-
-		TURTLEPanel tp;
-		int i;
-		// search for diagram panels (Design)
-		for(i=0; i<panels.size(); i++) {
-			if ((index == -1) || (i == index)) {
-				tp = (TURTLEPanel)(panels.elementAt(i));
-				s = tp.saveInXML(extensionToName);
-				if (s == null) {
-					return null;
-				}
-				sb.append(s);
-				sb.append("\n\n");
-			}
-		}
-
-		sb.append("</TURTLEGMODELING>");
-
-		str = new String(sb);
-		str = encodeString(str);
-
-		return str;
-	}
-
-	public void removeAllComponents() {
-		TDiagramPanel tdp;
-		int i, j;
-		Vector<TDiagramPanel> panelss;
-		// search for diagram panels
-		for(i=0; i<panels.size(); i++) {
-			panelss = (((TURTLEPanel)(panels.elementAt(i))).panels);
-			for(j=0; j<panelss.size(); j++) {
-				tdp = (TDiagramPanel)(panelss.elementAt(j));
-				tdp.removeAll();
-			}
-		}
-	}
-
-
-	private void prepareErrors() {
-	checkingErrors = new ArrayList<CheckingError>();
-	warnings = new ArrayList<CheckingError>();
-	}
-	
-	public void copyModelingFromXML(TDiagramPanel tdp, String s, int X, int Y) throws MalformedModelingException {
-		//TraceManager.addDev("copyModelingFromXML: " + s);
-		//TraceManager.addDev("tdp: " + tdp);
-
-		//TraceManager.addDev(s);
-		//TraceManager.addDev("copyModelingFromXML:");
-		//LinkedList ComponentsList=tdp.getComponentList();
-
-	prepareErrors();
-
-	
-		int beginIndex = tdp.getComponentList().size();
-
-		//Added by Solange
-		int cuenta=1;
+                            HSMChannel ch=new HSMChannel(writeChannel.getChannelName(), compName, type);
+                            ch.securityContext="hsmSec_"+writeChannel.getChannelName();
+                            ch.nonceName=nonceName;
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                if (type!=-1){
+                                    compChannels.put(writeChannel.getChannelName(),ch);
+                                    channelInstances.add(tg);
+                                }
+                            }
+                        }
+                        else {
+                            //System.out.println("security context:"+writeChannel.securityContext);
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                                SecurityPattern sp = tmap.getSecurityPatternByName(writeChannel.securityContext);
+                                int type=-1;
+                                if (sp.type.equals("Symmetric Encryption")){
+                                    type=HSMChannel.SENC;
+                                }
+                                else if (sp.type.equals("Asymmetric Encryption")){
+                                    type=HSMChannel.AENC;
+                                }
+                                else if (sp.type.equals("MAC")){
+                                    type=HSMChannel.MAC;
+                                }
+                                else if (sp.type.equals("Nonce")){
+                                    type=HSMChannel.NONCE;
+                                }
+                                HSMChannel ch = new HSMChannel(writeChannel.getChannelName(), compName, type);
+                                ch.securityContext=writeChannel.securityContext;
+                                compChannels.put(writeChannel.getChannelName(),ch);
+                                //chanNames.add(writeChannel.getChannelName()+compName);
+                            }
+                        }
+                    }
+                    if (tg instanceof TMLADReadChannel){
+                        TMLADReadChannel readChannel = (TMLADReadChannel) tg;
+                        if (readChannel.securityContext.equals("")){
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                if(nonSecChans.contains(compName+"__"+readChannel.getChannelName()+"_chData") || nonAuthChans.contains(compName+"__"+readChannel.getChannelName())){
+                                    channelInstances.add(tg);
+                                    HSMChannel ch = new HSMChannel(readChannel.getChannelName(), compName, HSMChannel.DEC);
+                                    ch.securityContext="hsmSec_"+readChannel.getChannelName();
+                                    compChannels.put(readChannel.getChannelName(),ch);
+                                    if (nonSecChans.contains(compName+"__"+readChannel.getChannelName()+"_chData") && nonAuthChans.contains(compName+"__"+readChannel.getChannelName())){
+                                        ch.nonceName="nonce_"+readChannel.getChannelName();
+                                    }
+                                }
+                            }
+                        }
+                        else {
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                                HSMChannel ch = new HSMChannel(readChannel.getChannelName(), compName, HSMChannel.DEC);
+                                ch.securityContext=readChannel.securityContext;
+                                compChannels.put(readChannel.getChannelName(),ch);
+                            }
+                        }
+                    }
+                    if (tg instanceof TMLADEncrypt){
+                        //      TMLADEncrypt enc = (TMLADEncrypt) tg;
+                        secOperators.add(tg);
+                        //}
+                    }
+                    if (tg instanceof TMLADDecrypt){
+                        //      TMLADDecrypt dec = (TMLADDecrypt) tg;
+                        secOperators.add(tg);
+                        //}
+                    }
+                }
+                //System.out.println("compchannels " +compChannels);
+                List<ChannelData> hsmChans = new ArrayList<ChannelData>();
+                ChannelData chd = new ChannelData("startHSM_"+cpuName,false,false);
+                hsmChans.add(chd);
+                for (String s: compChannels.keySet()){
+                    hsmChannels.put(s,compChannels.get(s));
+                    chd = new ChannelData("data_"+s+"_"+compChannels.get(s).task,false,true);
+                    hsmChans.add(chd);
+                    chd = new ChannelData("retData_"+s+"_"+compChannels.get(s).task,true,true);
+                    hsmChans.add(chd);
+                }
+                for (ChannelData hsmChan: hsmChans){
+                    TMLCChannelOutPort originPort =new TMLCChannelOutPort(comp.getX(), comp.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, hsm, tcdp);
+                    TMLCChannelOutPort destPort = new TMLCChannelOutPort(comp.getX(), comp.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, comp, tcdp);
+                    originPort.commName=hsmChan.name;
+                    originPort.isOrigin=hsmChan.isOrigin;
+                    tcdp.addComponent(originPort,hsm.getX(), hsm.getY(),true,true);
+                    destPort.commName=hsmChan.name;
+                    if (!hsmChan.isChan){
+                        originPort.typep=2;
+                        destPort.typep=2;
+                        originPort.setParam(0, new TType(2));
+                    }
+                    destPort.isOrigin=!hsmChan.isOrigin;
+
+                    tcdp.addComponent(destPort,comp.getX(), comp.getY(),true,true);
+
+                    TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                    tcdp.addComponent(conn, 0,0,false,true);
+                }
+                int xpos=0;
+                int ypos=0;
+
+                //Remove existing security elements
+                for (TGComponent op: secOperators){
+                    TGConnector prev = tad.findTGConnectorEndingAt(op.getTGConnectingPointAtIndex(0));
+                    //TGConnectingPoint point = prev.getTGConnectingPointP1();
+                    TGConnector end = tad.findTGConnectorStartingAt(op.getTGConnectingPointAtIndex(1));
+                    TGConnectingPoint point2 = end.getTGConnectingPointP2();
+                    tad.removeComponent(op);
+                    tad.removeComponent(end);
+                    tad.addComponent(prev,0,0,false,true);
+                    prev.setP2(point2);
+                }
+
+                //Modify component activity diagram to add read/write to HSM
+
+                //Add actions before Write Channel
+                for (TGComponent chan: channelInstances){
+                    String chanName="";
+                    if (!(chan instanceof TMLADWriteChannel)){
+                        continue;
+                    }
+                    TMLADWriteChannel writeChannel = (TMLADWriteChannel) chan;
+                    chanName=writeChannel.getChannelName();
+                    HSMChannel ch = hsmChannels.get(chanName);
+                    writeChannel.securityContext = ch.securityContext;
+                    xpos = chan.getX();
+                    ypos = chan.getY();
+                    fromStart = tad.findTGConnectorEndingAt(chan.getTGConnectingPointAtIndex(0));
+                    TGConnectingPoint point = fromStart.getTGConnectingPointP2();
+
+                    //set isEnc to true
+                    int yShift=50;
+
+                    TMLADSendRequest req = new TMLADSendRequest(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    req.setRequestName("startHSM_"+cpuName);
+                    req.setParam(0,"isEnc");
+                    tad.addComponent(req, xpos, ypos+yShift, false,true);
+
+                    fromStart.setP2(req.getTGConnectingPointAtIndex(0));
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+
+                    //Add connection
+                    fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    fromStart.setP1(req.getTGConnectingPointAtIndex(1));
+                    TMLADWriteChannel wr =new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+
+                    yShift+=50;
+                    //Add write channel operator
+                    wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    wr.setChannelName("data_"+chanName+"_"+compName);
+                    wr.securityContext = ch.securityContext;
+                    tad.addComponent(wr, xpos, ypos+yShift, false,true);
+
+
+                    fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+
+                    fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+                    fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
+
+
+
+
+
+
+
+                    //Add read channel operator
+
+                    yShift+=60;
+                    TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    rd.setChannelName("retData_"+chanName+"_"+compName);
+                    rd.securityContext = ch.securityContext;
+                    tad.addComponent(rd, xpos, ypos+yShift, false,true);
+
+                    fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
+                    yShift+=50;
+
+                    //Add connector
+                    fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+                    fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                    yShift+=50;
+
+                    //Direct the last TGConnector back to the start of the write channel operator
+
+
+                    fromStart.setP2(point);
+                    //Shift components down to make room for the added ones, and add security contexts to write channels
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg.getY() >= ypos && tg !=wr && tg!=req && tg!=rd){
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+                    tad.repaint();
+
+                }
+                //Add actions after Read Channel
+                for (TGComponent chan: channelInstances){
+                    String chanName="";
+                    if (!(chan instanceof TMLADReadChannel)) {
+                        continue;
+                    }
+                    TMLADReadChannel readChannel = (TMLADReadChannel) chan;
+                    chanName=readChannel.getChannelName();
+                    HSMChannel ch= hsmChannels.get(chanName);
+                    readChannel.securityContext = ch.securityContext;;
+                    xpos = chan.getX()+10;
+                    ypos = chan.getY();
+                    fromStart = tad.findTGConnectorStartingAt(chan.getTGConnectingPointAtIndex(1));
+                    if (fromStart==null){
+                        fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(chan.getTGConnectingPointAtIndex(1));
+                        tad.addComponent(fromStart, xpos,ypos,false,true);
+                    }
+                    TGConnectingPoint point = fromStart.getTGConnectingPointP2();
+
+                    //Set isEnc to false
+                    int yShift=50;
+                    TMLADActionState act = new TMLADActionState(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    act.setValue("isEnc=false");
+                    tad.addComponent(act, xpos, ypos+yShift, false,true);
+                    fromStart.setP2(act.getTGConnectingPointAtIndex(0));
 
-		s = decodeString(s);
-
-		//TraceManager.addDev("copy=" + s);
-
-		ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes());
-		if ((dbf == null) || (db == null)) {
-			throw new MalformedModelingException();
-		}
-
-		int i;
-		//int copyMaxId;
-		int _decX = 0, _decY = 0;
-
-		try {
-			// building nodes from xml String
-			Document doc = db.parse(bais);
-			NodeList nl;
-
-			decId = tdp.getMaxId() + 1;
-			TGComponent.setGeneralId(TGComponent.getGeneralId() + decId + 2);
-			nl = doc.getElementsByTagName("TURTLEGSELECTEDCOMPONENTS");
-
-			if (nl == null) {
-				return;
-			}
-
-			Node adn;
-			Element elt;
-
-			for(i=0; i<nl.getLength(); i++) {
-				adn = nl.item(i);
-				if (adn.getNodeType() == Node.ELEMENT_NODE) {
-					elt = (Element) adn;
-					_decX = X - Integer.decode(elt.getAttribute("decX")).intValue();
-					_decY = Y - Integer.decode(elt.getAttribute("decY")).intValue();
-					//copyMaxId = Integer.decode(elt.getAttribute("copyMaxId")).intValue();
-				}
-			}
-
-			// Managing diagrams
-			if (tdp instanceof TClassDiagramPanel) {
-				TraceManager.addDev("TClassDiagramPanel copy");
-
-				nl = doc.getElementsByTagName("TClassDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-
-				TClassDiagramPanel tcdp = (TClassDiagramPanel)tdp;
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tcdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						tcdp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Class diagram : " + tcdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tcdp);
-						makePostProcessing(tcdp);
-						//TraceManager.addDev("Class diagram : " + tcdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tcdp);
-						//TraceManager.addDev("Class diagram : " + tcdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tcdp);
-						//TraceManager.addDev("Class diagram : " + tcdp.getName() + " real points");
-						connectConnectorsToRealPoints(tcdp);
-						tcdp.structureChanged();
-						//TraceManager.addDev("Class diagram : " + tcdp.getName() + " post loading " + beginIndex);
-						makePostLoading(tcdp, beginIndex);
-						//TraceManager.addDev("Class diagram : " + tcdp.getName() + " post loading done");
-					}
-				}
-				docCopy = null;
-
-			} else if (tdp instanceof TActivityDiagramPanel) {
-				TraceManager.addDev("TActivityDiagramPanel copy");
-				nl = doc.getElementsByTagName("TActivityDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				TActivityDiagramPanel tadp = (TActivityDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tadp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						tadp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-						connectConnectorsToRealPoints(tadp);
-						tadp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-						makePostLoading(tadp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof InteractionOverviewDiagramPanel) {
-
-				nl = doc.getElementsByTagName("InteractionOverviewDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				InteractionOverviewDiagramPanel iodp = (InteractionOverviewDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (iodp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), iodp);
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), iodp);
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), iodp);
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " real points");
-						connectConnectorsToRealPoints(iodp);
-						iodp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
-						makePostLoading(iodp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof ui.sd.SequenceDiagramPanel) {
-				//TraceManager.addDev("Sequence diagram!");
-				nl = doc.getElementsByTagName("SequenceDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				ui.sd.SequenceDiagramPanel sdp = (ui.sd.SequenceDiagramPanel)tdp;
-
-				//TraceManager.addDev("Sequence diagram!");
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (sdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), sdp);
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), sdp);
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), sdp);
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " real points");
-						connectConnectorsToRealPoints(sdp);
-						sdp.structureChanged();
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " post loading");
-						makePostLoading(sdp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof ui.sd2.SequenceDiagramPanel) {
-				//TraceManager.addDev("Sequence diagram!");
-				nl = doc.getElementsByTagName("SequenceDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				ui.sd2.SequenceDiagramPanel sdp = (ui.sd2.SequenceDiagramPanel)tdp;
-
-				//TraceManager.addDev("Sequence diagram!");
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (sdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), sdp);
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), sdp);
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), sdp);
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " real points");
-						connectConnectorsToRealPoints(sdp);
-						sdp.structureChanged();
-						//TraceManager.addDev("Sequence diagram: " + sdp.getName() + " post loading");
-						makePostLoading(sdp, beginIndex);
-					}
-				}
-
-			} else if (tdp instanceof UseCaseDiagramPanel) {
-				nl = doc.getElementsByTagName("UseCaseDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				UseCaseDiagramPanel ucdp = (UseCaseDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (ucdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ucdp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ucdp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ucdp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points");
-						connectConnectorsToRealPoints(ucdp);
-						ucdp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
-						makePostLoading(ucdp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof TDeploymentDiagramPanel) {
-				nl = doc.getElementsByTagName("TDeploymentDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				TDeploymentDiagramPanel tddp = (TDeploymentDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tddp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tddp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tddp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tddp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points");
-						connectConnectorsToRealPoints(tddp);
-						tddp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
-						makePostLoading(tddp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof NCDiagramPanel) {
-				nl = doc.getElementsByTagName("NCDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				NCDiagramPanel ncdp = (NCDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (ncdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ncdp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ncdp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ncdp);
-						//TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points");
-						connectConnectorsToRealPoints(ncdp);
-						ncdp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
-						makePostLoading(ncdp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof RequirementDiagramPanel) {
-				nl = doc.getElementsByTagName("TRequirementDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				RequirementDiagramPanel rdp = (RequirementDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (rdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), rdp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), rdp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), rdp);
-						connectConnectorsToRealPoints(rdp);
-						rdp.structureChanged();
-						makePostLoading(rdp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof EBRDDPanel) {
-				nl = doc.getElementsByTagName("EBRDDPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				EBRDDPanel ebrddp = (EBRDDPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (ebrddp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ebrddp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ebrddp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ebrddp);
-						connectConnectorsToRealPoints(ebrddp);
-						ebrddp.structureChanged();
-						makePostLoading(ebrddp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof AttackTreeDiagramPanel) {
-				nl = doc.getElementsByTagName("AttackTreeDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				AttackTreeDiagramPanel atdp = (AttackTreeDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (atdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), atdp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), atdp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), atdp);
-						connectConnectorsToRealPoints(atdp);
-						atdp.structureChanged();
-						makePostLoading(atdp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof TMLTaskDiagramPanel) {
-				nl = doc.getElementsByTagName("TMLTaskDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-
-				TMLTaskDiagramPanel tmltdp = (TMLTaskDiagramPanel)tdp;
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tmltdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						tmltdp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
 
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmltdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(tmltdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmltdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmltdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(tmltdp);
-						tmltdp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(tmltdp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-			}else if (tdp instanceof DiplodocusMethodologyDiagramPanel) {
-				nl = doc.getElementsByTagName("DiplodocusMethodologyDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-
-				DiplodocusMethodologyDiagramPanel tmltdp = (DiplodocusMethodologyDiagramPanel)tdp;
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
+                    //Add send request operator
 
-						if (tmltdp == null) {
-							throw new MalformedModelingException();
-						}
+                    yShift+=50;
+                    TMLADSendRequest req = new TMLADSendRequest(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    req.setRequestName("startHSM_"+cpuName);
+                    req.setParam(0,"isEnc");
+                    req.makeValue();
+                    tad.addComponent(req, xpos, ypos+yShift, false,true);
 
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
 
-						decX = _decX;
-						decY = _decY;
-
-						tmltdp.loadExtraParameters(elt);
+                    //Add connection
+                    fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    fromStart.setP1(act.getTGConnectingPointAtIndex(1));
+                    fromStart.setP2(req.getTGConnectingPointAtIndex(0));
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
 
-						//TraceManager.addDev("Toto 2");
 
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmltdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(tmltdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmltdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmltdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(tmltdp);
-						tmltdp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(tmltdp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
 
 
-			}else if (tdp instanceof AvatarMethodologyDiagramPanel) {
-				nl = doc.getElementsByTagName("AvatarMethodologyDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-
-				AvatarMethodologyDiagramPanel amdp = (AvatarMethodologyDiagramPanel)tdp;
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (amdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						amdp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(amdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(amdp);
-						amdp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(amdp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-			}else if (tdp instanceof SysmlsecMethodologyDiagramPanel) {
-				nl = doc.getElementsByTagName("SysmlsecMethodologyDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-
-				SysmlsecMethodologyDiagramPanel amdp = (SysmlsecMethodologyDiagramPanel)tdp;
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (amdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						amdp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(amdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(amdp);
-						amdp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(amdp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-			}  else if (tdp instanceof TMLComponentTaskDiagramPanel) {
-				nl = doc.getElementsByTagName("TMLComponentTaskDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-
-				TMLComponentTaskDiagramPanel tmlctdp = (TMLComponentTaskDiagramPanel)tdp;
-				//tmlctdp.updateReferences();
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tmlctdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						tmlctdp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlctdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(tmlctdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlctdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlctdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(tmlctdp);
-						tmlctdp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(tmlctdp, beginIndex);
-						tmlctdp.hideConnectors();
-						tmlctdp.updatePorts();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-				tmlctdp.updatePorts();
-			} else if (tdp instanceof TMLActivityDiagramPanel) {
-				nl = doc.getElementsByTagName("TMLActivityDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				TMLActivityDiagramPanel tmladp = (TMLActivityDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tmladp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//tmladp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmladp);
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmladp);
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmladp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-						connectConnectorsToRealPoints(tmladp);
-						tmladp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-						makePostLoading(tmladp, beginIndex);
-					}
-				}
-			}  else if (tdp instanceof TMLCPPanel) {
-				nl = doc.getElementsByTagName("CommunicationPatternDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-				TMLCPPanel tmlcpp = (TMLCPPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tmlcpp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//tmlcpp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlcpp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(tmlcpp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlcpp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlcpp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(tmlcpp);
-						tmlcpp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(tmlcpp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-			} else if (tdp instanceof TMLSDPanel) {
-				nl = doc.getElementsByTagName("TMLSDPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-				TMLSDPanel tmlsdp = (TMLSDPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tmlsdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//tmlcpp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlsdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(tmlsdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlsdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlsdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(tmlsdp);
-						tmlsdp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(tmlsdp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-			} else if (tdp instanceof TMLArchiDiagramPanel) {
-				nl = doc.getElementsByTagName("TMLArchiDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-				TMLArchiDiagramPanel tmadp = (TMLArchiDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tmadp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						tmadp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmadp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(tmadp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmadp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmadp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(tmadp);
-						tmadp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(tmadp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-			} else if (tdp instanceof TURTLEOSClassDiagramPanel) {
-				nl = doc.getElementsByTagName("TURTLEOSClassDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				TURTLEOSClassDiagramPanel toscdp = (TURTLEOSClassDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (toscdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//toscdp.loadExtraParameters(elt);
-						//TraceManager.addDev("Toto 2");
-						//TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), toscdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(toscdp);
-						//TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), toscdp);
-						//TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), toscdp);
-						//TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " real points");
-						connectConnectorsToRealPoints(toscdp);
-						toscdp.structureChanged();
-						//TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " post loading " + beginIndex);
-						makePostLoading(toscdp, beginIndex);
-						//TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " post loading done");
-					}
-				}
-			} else if (tdp instanceof TURTLEOSActivityDiagramPanel) {
-				nl = doc.getElementsByTagName("TURTLEOSActivityDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				TURTLEOSActivityDiagramPanel tosadp = (TURTLEOSActivityDiagramPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (tosadp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//tmladp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tosadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tosadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tosadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-						connectConnectorsToRealPoints(tosadp);
-						tosadp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-						makePostLoading(tosadp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof ProactiveCSDPanel) {
-				//cuenta=beginIndex+1;
-				cuenta=mgui.tabs.size()-1;
-				nl = doc.getElementsByTagName("ProactiveCSDPanelCopy");
-				if (nl.getLength()==0)
-					{
-						nl=doc.getElementsByTagName("ProactiveCSDPanel");
-					}
-				docCopy = doc;
-				if (nl == null)
-					{
-						return;
-					}
-				ProactiveCSDPanel pcsdp = (ProactiveCSDPanel)tdp;
-				for(i=0; i<nl.getLength(); i++)
-					{
-						adn = nl.item(i);
-						if (adn.getNodeType() == Node.ELEMENT_NODE)
-							{
-								elt = (Element) adn;
-								if (pcsdp == null)
-									{
-										throw new MalformedModelingException();
-									}
-
-
-								//											  int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-								//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-								//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-								//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-								decX = _decX;
-								decY = _decY;
-
-								//pcsdp.loadExtraParameters(elt);
-								//TraceManager.addDev("Toto 2");
-								//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-								makeXMLComponents(elt.getElementsByTagName("COMPONENT"), pcsdp);
-								//TraceManager.addDev("Toto 3");
-								makePostProcessing(pcsdp);
-								//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-								makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), pcsdp);
-								//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-								makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), pcsdp);
-								//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-								connectConnectorsToRealPoints(pcsdp);
-								pcsdp.structureChanged();
-								//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-								makePostLoading(pcsdp, beginIndex);
-								//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-							}
-					}
-				// Added by Solange
-				nl = doc.getElementsByTagName("ProactiveSMDPanel");
-				if (nl == null)
-					{
-						return;
-					}
-				String name="";
-				ProactiveSMDPanel psmdp;
-				for(i=0; i<nl.getLength(); i++) //Erased cuenta++ by Solange at the end condition of the for
-					{
-						adn = nl.item(i);
-						if (adn.getNodeType() == Node.ELEMENT_NODE)
-							{
-								elt = (Element) adn;
-								name=elt.getAttribute("name");
-								//Added by Solange name at the beginning and cuenta
-								name=mgui.createProActiveSMD(cuenta,name);
-								psmdp=mgui.getSMDPanel(cuenta, name);
-								if (psmdp == null)
-									{
-										throw new MalformedModelingException();
-									}
-
-								//											  int xSel = Integer.decode(elt.getAttribute("minX")).intValue();
-								//int ySel = Integer.decode(elt.getAttribute("maxX")).intValue(); // - mgui.getCurrentTDiagramPanel().currentX;
-								//											  int widthSel = Integer.decode(elt.getAttribute("minY")).intValue(); // - mgui.getCurrentTDiagramPanel().currentY;;
-								//											  int heightSel = Integer.decode(elt.getAttribute("maxY")).intValue(); // - mgui.getCurrentTDiagramPanel().currentY;;
-
-								decX = _decX;
-								decY = _decY;
-
-								//tmladp.loadExtraParameters(elt);
-								//TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
-								makeXMLComponents(elt.getElementsByTagName("COMPONENT"), psmdp);
-								//TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
-								makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), psmdp);
-								//TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
-								makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), psmdp);
-								//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-								connectConnectorsToRealPoints(psmdp);
-								psmdp.structureChanged();
-								//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-								makePostLoading(psmdp, beginIndex);
-								//until here
-							}
-					}
-			} else if (tdp instanceof ProactiveSMDPanel) {
-				//Changed by Solange, before it was like the first line
-				//nl = doc.getElementsByTagName("ProactiveSMDPanelCopy");
-				nl = doc.getElementsByTagName("ProactiveSMDPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				ProactiveSMDPanel psmdp = (ProactiveSMDPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (psmdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//tmladp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), psmdp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), psmdp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), psmdp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-						connectConnectorsToRealPoints(psmdp);
-						psmdp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-						makePostLoading(psmdp, beginIndex);
-					}
-				}
-
-				// AVATAR
-			} else if (tdp instanceof AvatarBDPanel) {
-				nl = doc.getElementsByTagName("AVATARBlockDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-
-				AvatarBDPanel abdp = (AvatarBDPanel)tdp;
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (abdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						abdp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), abdp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(abdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), abdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), abdp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(abdp);
-						abdp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(abdp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-
-
-			} else if (tdp instanceof ADDDiagramPanel) {
-				nl = doc.getElementsByTagName("ADDDiagramPanelCopy");
-				docCopy = doc;
-
-				if (nl == null) {
-					return;
-				}
-
-				//TraceManager.addDev("Toto 1");
-
-
-				ADDDiagramPanel addp = (ADDDiagramPanel)tdp;
-
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (addp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						addp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Toto 2");
-
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), addp);
-						//TraceManager.addDev("Toto 3");
-						makePostProcessing(addp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), addp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), addp);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
-						connectConnectorsToRealPoints(addp);
-						addp.structureChanged();
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
-						makePostLoading(addp, beginIndex);
-						//TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
-					}
-				}
-
-			} else if (tdp instanceof AvatarSMDPanel) {
-				nl = doc.getElementsByTagName("AVATARStateMachineDiagramPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				AvatarSMDPanel asmdp = (AvatarSMDPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (asmdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						//tmladp.loadExtraParameters(elt);
-
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), asmdp);
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), asmdp);
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), asmdp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-						connectConnectorsToRealPoints(asmdp);
-						asmdp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-						makePostLoading(asmdp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof AvatarRDPanel) {
-				nl = doc.getElementsByTagName("AvatarRDPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				AvatarRDPanel ardp = (AvatarRDPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (ardp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ardp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ardp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ardp);
-						connectConnectorsToRealPoints(ardp);
-						ardp.structureChanged();
-						makePostLoading(ardp, beginIndex);
-					}
-				}
-
-			} else if (tdp instanceof AvatarMADPanel) {
-				nl = doc.getElementsByTagName("AvatarMADPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				AvatarMADPanel amadp = (AvatarMADPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (amadp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amadp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amadp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amadp);
-						connectConnectorsToRealPoints(amadp);
-						amadp.structureChanged();
-						makePostLoading(amadp, beginIndex);
-					}
-				}
-
-			} else if (tdp instanceof AvatarPDPanel) {
-				nl = doc.getElementsByTagName("AvatarPDPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				AvatarPDPanel apdp = (AvatarPDPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (apdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), apdp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), apdp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), apdp);
-						connectConnectorsToRealPoints(apdp);
-						apdp.structureChanged();
-						makePostLoading(apdp, beginIndex);
-					}
-				}
-
-			} else if (tdp instanceof AvatarCDPanel) {
-				nl = doc.getElementsByTagName("AvatarCDPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				AvatarCDPanel acdp = (AvatarCDPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (acdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
-						//int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
-						//int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
-						//int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
-
-						decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), acdp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), acdp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), acdp);
-						connectConnectorsToRealPoints(acdp);
-						acdp.structureChanged();
-						makePostLoading(acdp, beginIndex);
-					}
-				}
-			} else if (tdp instanceof AvatarADPanel) {
-				nl = doc.getElementsByTagName("AvatarADPanelCopy");
-
-				if (nl == null) {
-					return;
-				}
-
-				AvatarADPanel aadp = (AvatarADPanel)tdp;
-
-				for(i=0; i<nl.getLength(); i++) {
-					adn = nl.item(i);
-					if (adn.getNodeType() == Node.ELEMENT_NODE) {
-						elt = (Element) adn;
-
-						if (aadp == null) {
-							throw new MalformedModelingException();
-						}
-
-			decX = _decX;
-						decY = _decY;
-
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), aadp);
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), aadp);
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), aadp);
-						connectConnectorsToRealPoints(aadp);
-						aadp.structureChanged();
-						makePostLoading(aadp, beginIndex);
-					}
-				}
-			}
-
-		} catch (IOException e) {
-			TraceManager.addError("Loading 500: " + e.getMessage());
-			throw new MalformedModelingException();
-		} catch (SAXException saxe) {
-			TraceManager.addError("Loading 501 " + saxe.getMessage());
-			throw new MalformedModelingException();
-		}
-
-	}
-
-	// Returns null if s is not a saved TURTLE modeling of an older format
-	public String upgradeSaved(String s) {
-		int index1, index2, index3;
-		StringBuffer sb = new StringBuffer("");;
-		//String tmp;
-
-		index1 = s.indexOf("<TClassDiagramPanel");
-		index2 = s.indexOf("<InteractionOverviewDiagramPanel ");
-		index3 = s.indexOf("</TURTLEGMODELING>");
-
-		if ((index1 <0) ||(index3 < 0)){
-			return null;
-		}
-
-		sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGMODELING version=\"" + DefaultText.getVersion() + "\">\n\n");
-
-		if (index2 > -1) {
-			sb.append("<Modeling type=\"Analysis\" nameTab=\"Analysis\" >\n");
-			sb.append(s.substring(index2, index3));
-			sb.append("</Modeling>\n\n");
-		}
-
-		if (index2 < 0) {
-			index2 = index3;
-		}
-		sb.append("<Modeling type=\"Design\" nameTab=\"Design\" >\n");
-		sb.append(s.substring(index1, index2));
-		sb.append("</Modeling>\n\n");
-
-		sb.append(s.substring(index3, s.length()));
-
-		//TraceManager.addDev("Got:" + sb);
-
-		return sb.toString();
-	}
-
-	public void loadModelingFromXML(String s) throws MalformedModelingException {
-
-		if (s == null) {
-			return;
-		}
-
-		s = decodeString(s);
-
-		decX = 0;
-		decY = 0;
-		decId = 0;
-		TGComponent.setGeneralId(100000);
-
-		ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes());
-
-		if ((dbf == null) || (db == null)) {
-			throw new MalformedModelingException();
-		}
-
-	prepareErrors();
-
-		try {
-			// building nodes from xml String
-			Document doc = db.parse(bais);
-			NodeList panelNl;
-			//NodeList designPanelNl;
-			//NodeList analysisNl;
-
-			int i;
-			//Element elt;
-			Node node;
-
-			// Managing design panels
-			panelNl = doc.getElementsByTagName("Modeling");
-
-			if (panelNl.getLength() == 0) {
-				// Modeling saved in old format?
-				s = upgradeSaved(s);
-				if (s != null) {
-					JOptionPane.showMessageDialog(mgui.frame, "The modeling has been converted to this new version of TTool", "Loading information", JOptionPane.INFORMATION_MESSAGE);
-				}
-				loadModelingFromXML(s);
-				return;
-
-			}
-			//designPanelNl = doc.getElementsByTagName("Design");
-			//analysisNl = doc.getElementsByTagName("Analysis");
-
-			pendingConnectors = new ArrayList<TGConnectorInfo>();
-
-			//TraceManager.addDev("nb de design=" + designPanelNl.getLength() + " nb d'analyse=" + analysisNl.getLength());
-			boolean error = false;
-			for(i=0; i<panelNl.getLength(); i++) {
-				node = panelNl.item(i);
-				//TraceManager.addDev("Node = " + dnd);
-
-				if (node.getNodeType() == Node.ELEMENT_NODE) {
-					// create design, and get an index for it
-					try {
-						loadModeling(node);
-					} catch (MalformedModelingException mme) {
-						Element elt = (Element) node;
-						String type = elt.getAttribute("type");
-						TraceManager.addDev("Error when loading diagram: " + elt + " " +type);
-						error = true;
-					}
-				}
-			}
-			if (error == true) {
-				throw new MalformedModelingException();
-			}
-
-		} catch (NumberFormatException nfe) {
-			TraceManager.addError("Loading 400 " + nfe.getMessage());
-			throw new MalformedModelingException();
-		} catch (IOException e) {
-			TraceManager.addError("Loading 600 " + e.getMessage());
-			throw new MalformedModelingException();
-		} catch (SAXException saxe) {
-			TraceManager.addError("Loading 601 " + saxe.getMessage());
-			throw new MalformedModelingException();
-		}
-		//TraceManager.addDev("making IDs");
-		makeLastLoad();
-		makeLovelyIds();
-		//TraceManager.addDev("IDs done");
-	}
-
-	public void loadModeling(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String type = elt.getAttribute("type");
-		// AVATAR
-		if (type.compareTo("ADD") == 0) {
-			loadAvatarDeployment(node);
-		} else if (type.compareTo("AVATAR Design") == 0) {
-			loadAvatarDesign(node);
-		} else if (type.compareTo("Avatar Requirement") == 0) {
-			loadAvatarRequirement(node);
-		} else if (type.compareTo("Avatar MAD") == 0) {
-			loadAvatarMADs(node);
-		} else if (type.compareTo("Avatar Analysis") == 0) {
-			loadAvatarAnalysis(node);
-
-
-			// TURTLE
-		} else if (type.compareTo("Design") == 0) {
-			loadDesign(node);
-		} else if (type.compareTo("Analysis") == 0) {
-			loadAnalysis(node);
-		} else if (type.compareTo("Deployment") == 0) {
-			loadDeployment(node);
-		} else if (type.compareTo("NC diagram") == 0) {
-			loadNC(node);
-		} else if (type.compareTo("Requirement") == 0) {
-			loadRequirement(node);
-		} else if (type.compareTo("AttackTree") == 0) {
-			loadAttackTree(node);
-		} else if (type.compareTo("Diplodocus Methodology") == 0) {
-			loadDiplodocusMethodology(node);
-		} else if (type.compareTo("Avatar Methodology") == 0) {
-			loadAvatarMethodology(node);
-		} else if (type.compareTo("Sysmlsec Methodology") == 0) {
-			loadSysmlsecMethodology(node);
-		} else if (type.compareTo("TML Design") == 0) {
-			loadTMLDesign(node);
-		} else if (type.compareTo("TML Component Design") == 0) {
-			loadTMLComponentDesign(node);
-		} else if (type.compareTo("TML CP") == 0) {
-			loadTMLCP(node);
-		} else if (type.compareTo("TML Architecture") == 0) {
-			loadTMLArchitecture(node);
-		} else if (type.compareTo("TURTLE-OS Design") == 0) {
-			loadTURTLEOSDesign(node);
-		} else if (type.compareTo("ProActive Design") == 0) {
-			loadProActiveDesign(node);
-		} else {
-			throw new MalformedModelingException();
-		}
-	}
-
-	public void loadAvatarDesign(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createAvatarDesign(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		/* First load all Block diagrams, then all state machines
-		 * This is done this way so that state machines can rely on
-		 * informations provided by blocks. For instance we can check
-		 * that an attribute used in a state machine really exists.
-		 */
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element) node;
-				if (elt.getTagName().compareTo("AVATARBlockDiagramPanel") == 0)
-					// Class diagram
-					loadAvatarBD(elt, indexDesign);
-			}
-		}
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element) node;
-				if (elt.getTagName().compareTo("AVATARStateMachineDiagramPanel") == 0)
-					// Managing activity diagrams
-					loadAvatarSMD(elt, indexDesign);
-			}
-		}
-	}
-
-	public void loadAvatarDeployment(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexReq;
-		int cpt_req = 0;
-
-		TraceManager.addDev("Loading ADD 0");
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexReq = mgui.createADD(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Deployment nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("ADDDiagramPanel") == 0) {
-					TraceManager.addDev("Loading ADD 1");
-					loadADDDiagram(elt, indexReq, cpt_req);
-					cpt_req ++;
-				}
-			}
-		}
-	}
-
-	public void loadAvatarRequirement(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexReq;
-		int cpt_req = 0;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexReq = mgui.createAvatarRequirement(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Deployment nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("AvatarRDPanel") == 0) {
-					loadAvatarRD(elt, indexReq, cpt_req);
-					cpt_req ++;
-				} else if (elt.getTagName().compareTo("AvatarPDPanel") == 0) {
-					loadAvatarPD(elt, indexReq, cpt_req);
-					cpt_req ++;
-				}
-			}
-		}
-	}
-
-	public void loadAttackTree(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexTree;
-		int cpttdp = 0;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexTree = mgui.createAttackTree(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Deployment nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("AttackTreeDiagramPanel") == 0) {
-					loadAttackTreeDiagram(elt, indexTree, cpttdp);
-					cpttdp ++;
-				}
-			}
-		}
-	}
-
-	public void loadAvatarMADs(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexReq;
-		int cpt_req = 0;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		TraceManager.addDev("Creating MAD panel ");
-
-		indexReq = mgui.createAvatarMADs(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			TraceManager.addDev("MADs nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("AvatarMADPanel") == 0) {
-					loadAvatarMAD(elt, indexReq, cpt_req);
-					cpt_req ++;
-				}
-			}
-		}
-	}
-
-	public void loadDesign(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createDesign(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("TClassDiagramPanel") == 0) {
-					// Class diagram
-					loadTClassDiagram(elt, indexDesign);
-				} else { // Managing activity diagrams
-					if (elt.getTagName().compareTo("TActivityDiagramPanel") == 0) {
-						// Managing activity diagrams
-						loadTActivityDiagram(elt, indexDesign);
-					}
-				}
-			}
-		}
-	}
-
-	public void loadAnalysis(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexAnalysis;
-		int cpt = 0;
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexAnalysis = mgui.createAnalysis(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("InteractionOverviewDiagramPanel") == 0) {
-					// IOD
-					loadIODiagram(elt, indexAnalysis);
-					cpt ++;
-				} else { // Managing sequence diagrams
-					if (elt.getTagName().compareTo("SequenceDiagramPanel") == 0) {
-						loadSequenceDiagram(elt, indexAnalysis);
-						cpt ++;
-					} else if (elt.getTagName().compareTo("SequenceDiagramPanelZV") == 0) {
-						loadSequenceDiagramZV(elt, indexAnalysis);
-						cpt ++;
-					} else if (elt.getTagName().compareTo("UseCaseDiagramPanel") == 0) {
-						// Managing use case diagrams
-						loadUseCaseDiagram(elt, indexAnalysis, cpt);
-						cpt ++;
-					} /*else if (elt.getTagName().compareTo("AvatarCDPanel") == 0) {
-					  // Managing use case diagrams
-					  loadAvatarCD(elt, indexAnalysis, cpt);
-					  cpt ++;
-					  } else if (elt.getTagName().compareTo("AvatarADPanel") == 0) {
-					  // Managing use case diagrams
-					  loadAvatarAD(elt, indexAnalysis, cpt);
-					  cpt ++;
-					  }*/
-				}
-			}
-		}
-	}
-
-	public void loadTMLCP(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexTMLCP;
-		//  int cpt = 0;
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexTMLCP = mgui.createTMLCP(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("CommunicationPatternDiagramPanel") == 0) {
-					// CP
-					loadTMLCPDiagram(elt, indexTMLCP);
-					// cpt ++;
-				} else { // Managing sequence diagrams
-					if (elt.getTagName().compareTo("TMLSDPanel") == 0) {
-						loadTMLSDDiagram(elt, indexTMLCP);
-						//	 cpt ++;
-					}
-				}
-			}
-		}
-	}
-
-	public void loadAvatarAnalysis(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexAnalysis;
-		int cpt = 0;
-
-		//TraceManager.addDev("Loading Avatar analysis");
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexAnalysis = mgui.createAvatarAnalysis(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-
-				if (elt.getTagName().compareTo("SequenceDiagramPanel") == 0) {
-					//TraceManager.addDev("Loading seq diag");
-					loadSequenceDiagram(elt, indexAnalysis);
-					//TraceManager.addDev("Loading seq diag done");
-					cpt ++;
-				} else if (elt.getTagName().compareTo("SequenceDiagramPanelZV") == 0) {
-					//TraceManager.addDev("Loading seq diag");
-					loadSequenceDiagramZV(elt, indexAnalysis);
-					//TraceManager.addDev("Loading seq diag done");
-					cpt ++;
-				} else if (elt.getTagName().compareTo("UseCaseDiagramPanel") == 0) {
-					// Managing use case diagrams
-					//TraceManager.addDev("Loading ucd diag");
-					loadUseCaseDiagram(elt, indexAnalysis, cpt);
-					//TraceManager.addDev("Loading ucd diag done");
-
-					cpt ++;
-				} else if (elt.getTagName().compareTo("AvatarCDPanel") == 0) {
-					// Managing use case diagrams
-					//TraceManager.addDev("Loading cd diag");
-					loadAvatarCD(elt, indexAnalysis, cpt);
-					//TraceManager.addDev("Loading cd diag done");
-					cpt ++;
-				} else if (elt.getTagName().compareTo("AvatarADPanel") == 0) {
-					// Managing use case diagrams
-					//TraceManager.addDev("Loading ad diag");
-					loadAvatarAD(elt, indexAnalysis, cpt);
-					//TraceManager.addDev("Loading ad diag done");
-					cpt ++;
-				}
-
-			}
-		}
-	}
-
-	public void loadDeployment(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexAnalysis;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexAnalysis = mgui.createDeployment(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Deployment nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("TDeploymentDiagramPanel") == 0) {
-					// IOD
-					loadTDeploymentDiagram(elt, indexAnalysis);
-				}
-			}
-		}
-	}
-
-	public void loadNC(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexAnalysis;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexAnalysis = mgui.createNC(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Deployment nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("NCDiagramPanel") == 0) {
-					// IOD
-					loadNCDiagram(elt, indexAnalysis);
-				}
-			}
-		}
-	}
-
-	public void loadRequirement(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexReq;
-		int cpt_req = 0;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexReq = mgui.createRequirement(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Deployment nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("TRequirementDiagramPanel") == 0) {
-					loadRequirementDiagram(elt, indexReq, cpt_req);
-					cpt_req ++;
-				} else if (elt.getTagName().compareTo("EBRDDPanel") == 0) {
-					loadEBRDD(elt, indexReq, cpt_req);
-					cpt_req ++;
-				}
-			}
-		}
-	}
-
-
-
-	public void loadDiplodocusMethodology(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createDiplodocusMethodology(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("DiplodocusMethodologyDiagramPanel") == 0) {
-					// Class diagram
-					//TraceManager.addDev("Loading TML CD");
-					loadDiplodocusMethodologyDiagram(elt, indexDesign);
-					//TraceManager.addDev("End loading TML CD");
-				}
-			}
-		}
-	}
-
-	public void loadAvatarMethodology(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createAvatarMethodology(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("AvatarMethodologyDiagramPanel") == 0) {
-					// Class diagram
-					TraceManager.addDev("Loading Avatar methodo");
-					loadAvatarMethodologyDiagram(elt, indexDesign);
-					TraceManager.addDev("End Loading avatar methodo");
-				}
-			}
-		}
-	}
-
-	public void loadSysmlsecMethodology(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createSysmlsecMethodology(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("SysmlsecMethodologyDiagramPanel") == 0) {
-					// Class diagram
-					TraceManager.addDev("Loading SysMLSec methodo");
-					loadSysmlsecMethodologyDiagram(elt, indexDesign);
-					TraceManager.addDev("End loading SysMLSec methodo");
-				}
-			}
-		}
-	}
-
-	public void loadTMLDesign(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createTMLDesign(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("TMLTaskDiagramPanel") == 0) {
-					// Class diagram
-					//TraceManager.addDev("Loading TML CD");
-					loadTMLTaskDiagram(elt, indexDesign);
-					//TraceManager.addDev("End loading TML CD");
-				} else { // Managing activity diagrams
-					if (elt.getTagName().compareTo("TMLActivityDiagramPanel") == 0) {
-						// Managing activity diagrams
-						//TraceManager.addDev("Loading TML AD");
-						loadTMLActivityDiagram(elt, indexDesign);
-					}
-				}
-			}
-		}
-	}
-
-	public void loadTMLComponentDesign(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createTMLComponentDesign(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("TMLComponentTaskDiagramPanel") == 0) {
-					// Component diagram
-					//TraceManager.addDev("Loading TML Component diagram");
-					loadTMLComponentTaskDiagram(elt, indexDesign);
-					//TraceManager.addDev("End loading TML CD");
-				} else { // Managing activity diagrams
-					if (elt.getTagName().compareTo("TMLActivityDiagramPanel") == 0) {
-						// Managing activity diagrams
-						//TraceManager.addDev("Loading TML AD");
-						loadTMLActivityDiagram(elt, indexDesign);
-					}
-				}
-			}
-		}
-	}
-
-	public void loadTMLArchitecture(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createTMLArchitecture(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			TraceManager.addDev("TML Architecture nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("TMLArchiDiagramPanel") == 0) {
-					TraceManager.addDev("Loading TML DD" + elt.getTagName() );
-					loadTMLArchitectureDiagram(elt, indexDesign);
-					TraceManager.addDev("End loading TML DD");
-				}
-			}
-		}
-	}
-
-	public void loadTURTLEOSDesign(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createTURTLEOSDesign(nameTab);
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("TURTLEOSClassDiagramPanel") == 0) {
-					// Class diagram
-					//TraceManager.addDev("Loading TURTLEOS CD");
-					loadTURTLEOSClassDiagram(elt, indexDesign);
-					//TraceManager.addDev("End loading TML CD");
-				} else { // Managing activity diagrams
-					if (elt.getTagName().compareTo("TURTLEOSActivityDiagramPanel") == 0) {
-						// Managing activity diagrams
-						//TraceManager.addDev("Loading TURTLEOS AD");
-						loadTURTLEOSActivityDiagram(elt, indexDesign);
-					}
-				}
-			}
-		}
-	}
-
-	public void loadProActiveDesign(Node node) throws  MalformedModelingException, SAXException {
-		Element elt = (Element) node;
-		String nameTab;
-		NodeList diagramNl;
-		int indexDesign;
-
-
-		nameTab = elt.getAttribute("nameTab");
-
-		indexDesign = mgui.createProActiveDesign(nameTab);
-
-
-		diagramNl = node.getChildNodes();
-
-		for(int j=0; j<diagramNl.getLength(); j++) {
-			//TraceManager.addDev("Design nodes: " + j);
-			node = diagramNl.item(j);
-			if (node.getNodeType() == Node.ELEMENT_NODE) {
-				elt = (Element)node;
-				if (elt.getTagName().compareTo("ProactiveCSDPanel") == 0) {
-					// Class diagram
-					//TraceManager.addDev("Loading TML CD");
-					loadProactiveCSD(elt, indexDesign);
-					//TraceManager.addDev("End loading TML CD");
-				} else { // Managing activity diagrams
-					if (elt.getTagName().compareTo("ProactiveSMDPanel") == 0) {
-						// Managing activity diagrams
-						//TraceManager.addDev("Loading TML AD");
-						loadProactiveSMD(elt, indexDesign);
-					}
-				}
-			}
-		}
-	}
-
-	public void loadDiagram(Element elt, TDiagramPanel tdp) throws  MalformedModelingException, SAXException {
-		int x, y;
-		double zoom = 0;
-		try {
-			x = Integer.decode(elt.getAttribute("minX")).intValue();
-			tdp.setMinX(x);
-			x = Integer.decode(elt.getAttribute("maxX")).intValue();
-			tdp.setMaxX(x);
-			y = Integer.decode(elt.getAttribute("minY")).intValue();
-			tdp.setMinY(y);
-			y = Integer.decode(elt.getAttribute("maxY")).intValue();
-			tdp.setMaxY(y);
-			tdp.updateSize();
-			zoom = Double.parseDouble(elt.getAttribute("zoom"));
-			if (zoom != 0) {
-				tdp.setZoom(zoom);
-				mgui.updateZoomInfo();
-			}
-		} catch (Exception e) {
-			// Model was saved in an older version of TTool
-		}
-
-		// for TClassdiagram Panel
-		if (tdp instanceof TClassDiagramPanel) {
-			((TClassDiagramPanel)tdp).loadExtraParameters(elt);
-		}
-
-		if (tdp instanceof TActivityDiagramPanel) {
-			((TActivityDiagramPanel)tdp).loadExtraParameters(elt);
-		}
-
-		if (tdp instanceof TMLTaskDiagramPanel) {
-			((TMLTaskDiagramPanel)tdp).loadExtraParameters(elt);
-		}
-
-		if (tdp instanceof TMLComponentTaskDiagramPanel) {
-			((TMLComponentTaskDiagramPanel)tdp).loadExtraParameters(elt);
-		}
-
-		if (tdp instanceof TMLArchiDiagramPanel) {
-			((TMLArchiDiagramPanel)tdp).loadExtraParameters(elt);
-		}
-
-
-		if (tdp instanceof AvatarBDPanel) {
-			((AvatarBDPanel)tdp).loadExtraParameters(elt);
-		}
-
-		//TraceManager.addDev("Element" + elt.toString());
-		// Loads components of the class diagram
-		//TraceManager.addDev("Components");
-		makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tdp);
-		//TraceManager.addDev("Post processing");
-		makePostProcessing(tdp);
-		//TraceManager.addDev("Connectors");
-		makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tdp);
-		//TraceManager.addDev("Subcomponents");
-		makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tdp);
-		//TraceManager.addDev("RealPoints");
-		connectConnectorsToRealPoints(tdp);
-		//TraceManager.addDev("Structure changed");
-		tdp.structureChanged();
-		//TraceManager.addDev("Post loading");
-		makePostLoading(tdp, 0);
-
-		//TraceManager.addDev("Test connectors");
-		if (tdp instanceof TMLComponentTaskDiagramPanel) {
-			//TraceManager.addDev("Connectors...");
-			((TMLComponentTaskDiagramPanel)tdp).setConnectorsToFront();
-		}
-
-		if (tdp instanceof EBRDDPanel) {
-			//TraceManager.addDev("Connectors...");
-			((EBRDDPanel)tdp).setConnectorsToFront();
-		}
-
-		if (tdp instanceof AttackTreeDiagramPanel) {
-			//TraceManager.addDev("Connectors...");
-			((AttackTreeDiagramPanel)tdp).setConnectorsToFront();
-		}
-
-		if (tdp instanceof AvatarBDPanel) {
-			//TraceManager.addDev("Connectors...");
-			((AvatarBDPanel)tdp).setConnectorsToFront();
-		}
-
-		if (tdp instanceof AvatarSMDPanel) {
-			//TraceManager.addDev("Connectors...");
-			((AvatarSMDPanel)tdp).setConnectorsToFront();
-		}
-
-		if (tdp instanceof AvatarPDPanel) {
-			//TraceManager.addDev("Connectors...");
-			((AvatarPDPanel)tdp).setConnectorsToFront();
-		}
-
-		if (tdp instanceof AvatarCDPanel) {
-			//TraceManager.addDev("Connectors...");
-			((AvatarCDPanel)tdp).setConnectorsToFront();
-		}
-
-		if (tdp instanceof AvatarADPanel) {
-			//TraceManager.addDev("Connectors...");
-			((AvatarADPanel)tdp).setConnectorsToFront();
-		}
-	}
-
-	// AVATAR
-	public void loadAvatarBD(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
-
-		String name;
-		TDiagramPanel tdp;
-
-		// class diagram name
-		name = elt.getAttribute("name");
-		mgui.setAvatarBDName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
-
-		loadDiagram(elt, tdp);
-	}
-
-	public void loadAvatarSMD(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
-		String name;
-
-		name = elt.getAttribute("name");
-		//TraceManager.addDev("Loading SMD of:" + name);
-		AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(indexDesign, name);
-
-		if (asmdp == null) {
-			throw new MalformedModelingException();
-		}
-
-		asmdp.removeAll();
-
-		mgui.selectDummyTab (indexDesign);
-		loadDiagram(elt, asmdp);
-		mgui.forgetDummyTab ();
-	}
+                    yShift+=50;
+                    //Add write channel operator
+                    TMLADWriteChannel wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    wr.setChannelName("data_"+chanName+"_"+compName);
+                    wr.securityContext = ch.securityContext;;
+                    tad.addComponent(wr, xpos, ypos+yShift, false,true);
 
-	public void loadAvatarRD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
 
-		name = elt.getAttribute("name");
-		mgui.createAvatarRD(indexAnalysis, name);
-
-
-		TDiagramPanel tdp = mgui.getAvatarRDPanel(indexAnalysis, indexTab, name);
+                    //Add connection
+                    fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    fromStart.setP1(req.getTGConnectingPointAtIndex(1));
+                    fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+
+                    //Add read channel operator
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+                    yShift+=60;
+                    TMLADReadChannel rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    rd.setChannelName("retData_"+chanName+"_"+compName);
+                    rd.securityContext = ch.securityContext;;
+                    tad.addComponent(rd, xpos, ypos+yShift, false,true);
+
+                    fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+                    fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
+                    fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
+                    yShift+=50;
+
+                    if (point!=null){
+                        fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        tad.addComponent(fromStart, xpos, ypos, false, true);
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        //Direct the last TGConnector back to the start of the write channel operator
+
+                        fromStart.setP2(point);
+                    }
+                    yShift+=50;
+
+                    //Shift components down to make room for the added ones, and add security contexts to write channels
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg.getY() >= ypos && tg !=wr && tg!=req && tg!=rd && tg!=chan && tg!=act){
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+                    tad.repaint();
+                }
+                //for (String chan: chanNames){
+                //                        hsmChannels.put(chan, compName);
+                //}
+            }
+
+            int xpos=0;
+            int ypos=0;
+
+
+
+            //Build HSM Activity diagram
+
+            TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel("HSM_"+cpuName);
+
+            TMLADStartState start = (TMLADStartState) tad.getComponentList().get(0);
+            fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+
+
+            TMLADReadRequestArg req = new TMLADReadRequestArg(300, 100, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+            tad.addComponent(req, 300,100,false,true);
+            req.setParam(0, "isEnc");
+            req.makeValue();
+
+            //Connect start and readrequest
+            fromStart.setP1(start.getTGConnectingPointAtIndex(0));
+            fromStart.setP2(req.getTGConnectingPointAtIndex(0));
+            tad.addComponent(fromStart, 300,200,false,true);
+
+
+
+            TMLADChoice choice = new TMLADChoice(300, 200, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+            tad.addComponent(choice, 300,200,false,true);
+
+
+            //Connect readrequest and choice
+            fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+            fromStart.setP1(req.getTGConnectingPointAtIndex(1));
+            fromStart.setP2(choice.getTGConnectingPointAtIndex(0));
+            tad.addComponent(fromStart, 300,200,false,true);
+
+
+            int xc = 150;
+            //Allows 9 channels max to simplify the diagram
+
+            //If more than 3 channels, build 2 levels of choices
+            TMLADChoice choice2= new TMLADChoice(xc, 400, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+            if (hsmChannels.keySet().size()>3){
+                int i=0;
+                for (String chan: hsmChannels.keySet()){
+                    HSMChannel ch = hsmChannels.get(chan);
+                    if (i%3==0){
+                        //Add a new choice every third channel
+                        choice2= new TMLADChoice(xc, 250, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        tad.addComponent(choice2, xc, 400,false,true);
+                        //Connect new choice operator to top choice
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(choice.getTGConnectingPointAtIndex(i/3+1));
+                        fromStart.setP2(choice2.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+                    }
+                    TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task);
+                    rd.securityContext = ch.securityContext;;
+                    tad.addComponent(rd, xc,300,false,true);
+                    //Connect choice and readchannel
+                    fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    fromStart.setP1(choice2.getTGConnectingPointAtIndex(i%3+1));
+                    fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
+
+                    tad.addComponent(fromStart, 300,200,false,true);
+                    TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task);
+                    tad.addComponent(wr, xc, 600,false,true);
+                    wr.securityContext = ch.securityContext;
+
+
+                    if (hsmChannels.get(chan).secType==HSMChannel.DEC){
+                        TMLADDecrypt dec = new TMLADDecrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        dec.securityContext =  ch.securityContext;
+                        tad.addComponent(dec, xc, 500,false,true);
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+
+                        //Connect encrypt and writechannel
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+                    }
+                    else {
+                        TMLADEncrypt enc = new TMLADEncrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        enc.securityContext = ch.securityContext;
+                        if (hsmChannels.get(chan).secType==HSMChannel.SENC){
+                            enc.type = "Symmetric Encryption";
+                        }
+                        else if (hsmChannels.get(chan).secType==HSMChannel.AENC){
+                            enc.type="Asymmetric Encryption";
+                        }
+                        else if (hsmChannels.get(chan).secType==HSMChannel.MAC){
+                            enc.type="MAC";
+                        }
+                        else if (hsmChannels.get(chan).secType==HSMChannel.NONCE){
+                            enc.type="Nonce";
+                        }
+
+                        enc.message_overhead = overhead;
+                        enc.encTime= encComp;
+                        enc.decTime=decComp;
+                        enc.nonce=hsmChannels.get(chan).nonceName;
+                        tad.addComponent(enc, xc, 500,false,true);
+
+                        //Connect encrypt and readchannel
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+
+                        //Connect encrypt and writechannel
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+
+                    }
+                    xc+=300;
+                    i++;
+                }
+            }
+            else {
+
+                int i=1;
+
+                for (String chan: hsmChannels.keySet()){
+                    HSMChannel ch = hsmChannels.get(chan);
+                    TMLADReadChannel rd = new TMLADReadChannel(xc, 300, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    rd.setChannelName("data_"+chan+"_"+hsmChannels.get(chan).task);
+                    rd.securityContext = ch.securityContext;
+                    tad.addComponent(rd, xc,300,false,true);
+                    //Connect choice and readchannel
+
+                    fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    fromStart.setP1(choice.getTGConnectingPointAtIndex(i));
+                    fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
+
+                    tad.addComponent(fromStart, 300,200,false,true);
+
+                    TMLADWriteChannel wr = new TMLADWriteChannel(xc, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    wr.setChannelName("retData_"+chan+"_"+hsmChannels.get(chan).task);
+                    tad.addComponent(wr, xc, 600,false,true);
+                    wr.securityContext = ch.securityContext;
+
+
+                    if (hsmChannels.get(chan).secType==HSMChannel.DEC){
+                        TMLADDecrypt dec = new TMLADDecrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        dec.securityContext = ch.securityContext;
+                        tad.addComponent(dec, xc, 500,false,true);
+
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+
+                        //Connect encrypt and writechannel
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+                    }
+                    else {
+                        TMLADEncrypt enc = new TMLADEncrypt(xc, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        enc.securityContext = ch.securityContext;
+                        if (hsmChannels.get(chan).secType==HSMChannel.SENC){
+                            enc.type = "Symmetric Encryption";
+                        }
+                        else if (hsmChannels.get(chan).secType==HSMChannel.AENC){
+                            enc.type="Asymmetric Encryption";
+                        }
+                        else if (hsmChannels.get(chan).secType==HSMChannel.MAC){
+                            enc.type="MAC";
+                        }
+                        else if (hsmChannels.get(chan).secType==HSMChannel.NONCE){
+                            enc.type="Nonce";
+                        }
+
+                        enc.message_overhead = overhead;
+                        enc.encTime= encComp;
+                        enc.decTime=decComp;
+                        tad.addComponent(enc, xc, 500,false,true);
+
+                        //Connect encrypt and readchannel
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+
+                        //Connect encrypt and writechannel
+                        fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
+                        tad.addComponent(fromStart, 300,200,false,true);
+
+
+                    }
+
+
+                    /*MLADChoice choice2 = new TMLADChoice(xc, 400, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                      tad.addComponent(choice2, xc, 400,false,true);
+                      choice2.setGuard("[isEnc]", 0);
+                      choice2.setGuard("[else]",1);
+
+                      //connect readchannel and choice 2
+                      fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
+                      fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                      fromStart.setP2(choice2.getTGConnectingPointAtIndex(0));
+                      tad.addComponent(fromStart, 300,200,false,true);
+
+                      TMLADEncrypt enc = new TMLADEncrypt(xc-75, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                      enc.securityContext = "hsmSec_"+chan;
+                      enc.type = "Symmetric Encryption";
+                      enc.message_overhead = overhead;
+                      enc.encTime= encComp;
+                      enc.decTime=decComp;
+                      tad.addComponent(enc, xc-75, 500,false,true);
+
+                      //Connect choice 2 and encrypt
+                      fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
+                      fromStart.setP1(choice2.getTGConnectingPointAtIndex(1));
+                      fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
+                      tad.addComponent(fromStart, 300,200,false,true);
+
+                      TMLADWriteChannel wr = new TMLADWriteChannel(xc-75, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                      wr.setChannelName("retData_"+chan+hsmChannels.get(chan));
+                      tad.addComponent(wr, xc-75, 600,false,true);
+                      wr.securityContext = "hsmSec_"+chan;
+
+                      //Connect encrypt and writeChannel
+                      fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
+                      fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
+                      fromStart.setP2(wr.getTGConnectingPointAtIndex(0));
+                      tad.addComponent(fromStart, 300,200,false,true);
+
+
+                      TMLADDecrypt dec = new TMLADDecrypt(xc+75, 500, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                      dec.securityContext = "hsmSec_"+chan;
+                      tad.addComponent(dec, xc+75, 500,false,true);
+
+                      //Connect choice2 and decrypt
+
+                      fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
+                      fromStart.setP1(choice2.getTGConnectingPointAtIndex(2));
+                      fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
+                      tad.addComponent(fromStart, 300,200,false,true);
+
+                      TMLADWriteChannel wr2 = new TMLADWriteChannel(xc+75, 600, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                      wr2.setChannelName("retData_"+chan+hsmChannels.get(chan));
+                      wr2.securityContext = "hsmSec_"+chan;
+
+                      //Connect decrypt and writeChannel
+                      fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector());
+                      fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
+                      fromStart.setP2(wr2.getTGConnectingPointAtIndex(0));
+                      tad.addComponent(fromStart, 300,200,false,true);
+                      tad.addComponent(wr2, xc+75, 600,false,true);
+
+                    */
+                    xc+=300;
+                    i++;
+                }
+
+            }
+
+            secChannels.putAll(hsmChannels);
+        }
+        //For all the tasks that receive encrypted data, decrypt it, assuming it has no associated HSM
+        for (TMLTask task: tmap.getTMLModeling().getTasks()){
+            int xpos, ypos;
+            //System.out.println("loop 2");
+            TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(task.getName());
+            HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
+            for (String chan: secChannels.keySet()){
+                HSMChannel ch = secChannels.get(chan);
+                channelInstances.clear();
+                for (TGComponent tg: tad.getComponentList()){
+                    if (tg instanceof TMLADReadChannel){
+                        TMLADReadChannel readChannel = (TMLADReadChannel) tg;
+                        if (readChannel.getChannelName().equals(chan) && readChannel.securityContext.equals("")){
+                            fromStart = tad.findTGConnectorStartingAt(tg.getTGConnectingPointAtIndex(1));
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                            }
+                        }
+                    }
+                }
+                for (TGComponent chI: channelInstances){
+                    TMLADReadChannel readChannel = (TMLADReadChannel) chI;
+                    readChannel.securityContext=ch.securityContext;
+                    xpos = chI.getX();
+                    ypos = chI.getY()+10;
+                    fromStart = tad.findTGConnectorStartingAt(chI.getTGConnectingPointAtIndex(1));
+                    if (fromStart==null){
+                        fromStart=new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        fromStart.setP1(chI.getTGConnectingPointAtIndex(1));
+                        tad.addComponent(fromStart, xpos,ypos,false,true);
+                    }
+                    TGConnectingPoint point = fromStart.getTGConnectingPointP2();
+                    //Add decryption operator
+                    int yShift=100;
+                    TMLADDecrypt dec = new TMLADDecrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    dec.securityContext = ch.securityContext;
+                    tad.addComponent(dec, xpos,ypos+yShift, false, true);
+
+
+                    fromStart.setP2(dec.getTGConnectingPointAtIndex(0));
+                    if (point!=null){
+                        fromStart=new TGConnectorTMLAD(dec.getX(), dec.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        tad.addComponent(fromStart, xpos, ypos, false, true);
+                        fromStart.setP1(dec.getTGConnectingPointAtIndex(1));
+
+                        //Direct the last TGConnector back to the next action
+
+                        fromStart.setP2(point);
+                    }
+                    //Shift components down to make room for the added ones, and add security contexts to write channels
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg.getY() >= ypos && tg!=dec){
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+                    tad.repaint();
+
+                }
+            }
+            //Next find channels that send encrypted data, and add the encryption operator
+            for (String chan: secChannels.keySet()){
+                channelInstances.clear();
+                HSMChannel ch = secChannels.get(chan);
+                for (TGComponent tg: tad.getComponentList()){
+                    if (tg instanceof TMLADWriteChannel){
+                        TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
+                        if (writeChannel.getChannelName().equals(chan) && writeChannel.securityContext.equals("")){
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                            }
+                        }
+                    }
+                }
+                for (TGComponent chI: channelInstances){
+                    TMLADWriteChannel writeChannel = (TMLADWriteChannel) chI;
+                    writeChannel.securityContext=ch.securityContext;
+                    xpos = chI.getX();
+                    ypos = chI.getY()-10;
+                    fromStart = tad.findTGConnectorEndingAt(chI.getTGConnectingPointAtIndex(0));
+                    TGConnectingPoint point = fromStart.getTGConnectingPointP2();
+                    //Add encryption operator
+                    int yShift=100;
+
+                    TMLADEncrypt enc = new TMLADEncrypt(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    tad.addComponent(enc,xpos, ypos, false,true);
+                    enc.securityContext = ch.securityContext;
+                    enc.type = "Symmetric Encryption";
+                    enc.message_overhead = overhead;
+                    enc.encTime= encComp;
+                    enc.decTime=decComp;
+                    enc.size=overhead;
+
+
+                    fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
+                    fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+                    fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
+
+                    //Direct the last TGConnector back to the start of the write channel operator
+
+                    fromStart.setP2(point);
+                    //Shift components down to make room for the added ones, and add security contexts to write channels
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg.getY() >= ypos && tg !=enc){
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+                    tad.repaint();
+
+                }
+            }
+
+        }
+        for (String cpuName: selectedCpuTasks.keySet()){
+            //Add a private bus to Hardware Accelerator with the task for hsm
+
+            //Find the CPU the task is mapped to
+            TMLArchiDiagramPanel archPanel = newarch.tmlap;
+            TMLArchiCPUNode cpu=null;
+            String refTask="";
+            for (TGComponent tg: archPanel.getComponentList()){
+                if (tg instanceof TMLArchiCPUNode){
+                    if (tg.getName().equals(cpuName)){
+                        cpu=(TMLArchiCPUNode) tg;
+                        TMLArchiArtifact art = (TMLArchiArtifact) cpu.getArtifactList().get(0);
+                        refTask=art.getReferenceTaskName();
+                        break;
+
+                    }
+                }
+            }
+
+            if (cpu==null){
+                return;
+            }
+
+            //Add new memory
+            TMLArchiMemoryNode mem = new TMLArchiMemoryNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel);
+            archPanel.addComponent(mem, cpu.getX()+100, cpu.getY()+100, false, true);
+            mem.setName("HSMMemory_"+cpuName);
+            //Add Hardware Accelerator
+
+            TMLArchiHWANode hwa = new TMLArchiHWANode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel);
+            archPanel.addComponent(hwa, cpu.getX()+100, cpu.getY()+100, false, true);
+            hwa.setName("HSM_"+cpuName);
+            //Add hsm task to hwa
+
+
+            TMLArchiArtifact hsmArt = new TMLArchiArtifact(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, hwa, archPanel);
+            archPanel.addComponent(hsmArt, cpu.getX()+100, cpu.getY()+100, true, true);
+            hsmArt.setFullName("HSM_"+cpuName, refTask);
+            //Add bus connecting the cpu and HWA
+
+            TMLArchiBUSNode bus = new TMLArchiBUSNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel);
+            bus.setPrivacy(1);
+            bus.setName("HSMBus_"+cpuName);
+            archPanel.addComponent(bus, cpu.getX()+200, cpu.getY()+200, false, true);
+
+            //Connect Bus and CPU
+            TMLArchiConnectorNode connect =new  TMLArchiConnectorNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel, null, null, new Vector<Point>());
+            TGConnectingPoint p1 = bus.findFirstFreeTGConnectingPoint(true,true);
+            p1.setFree(false);
+            connect.setP2(p1);
+
+
+
+            TGConnectingPoint p2 = cpu.findFirstFreeTGConnectingPoint(true,true);
+            p1.setFree(false);
+            connect.setP1(p2);
+            archPanel.addComponent(connect, cpu.getX()+100, cpu.getY()+100, false, true);
+            //Connect Bus and HWA
+
+            connect = new TMLArchiConnectorNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel, null, null, new Vector<Point>());
+            p1 = bus.findFirstFreeTGConnectingPoint(true,true);
+            p1.setFree(false);
+            connect.setP2(p1);
+
+            p2 = hwa.findFirstFreeTGConnectingPoint(true,true);
+            p1.setFree(false);
+            connect.setP1(p2);
+
+            archPanel.addComponent(connect, cpu.getX()+100, cpu.getY()+100, false, true);
+            //Connect Bus and Memory
+
+            connect = new TMLArchiConnectorNode(cpu.getX()+100, cpu.getY()+100, archPanel.getMinX(), archPanel.getMaxX(), archPanel.getMinY(), archPanel.getMaxY(), true, null, archPanel, null, null, new Vector<Point>());
+            p1 = bus.findFirstFreeTGConnectingPoint(true,true);
+            p1.setFree(false);
+            connect.setP2(p1);
+
+            p2 = mem.findFirstFreeTGConnectingPoint(true,true);
+            p1.setFree(false);
+            connect.setP1(p2);
+            archPanel.addComponent(connect, cpu.getX()+100, cpu.getY()+100, false, true);
+        }
+
+    }
+
+    public TMLMapping autoSecure(MainGUI gui, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
+        //TODO add more options
+        //
+        if (tmap==null){
+            return null;
+        }
+        int arch = gui.tabs.indexOf(tmap.tmlap);
+        gui.cloneRenameTab(arch,"enc");
+        TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
+        return autoSecure(gui, "enc", tmap,newarch,autoConf,autoWeakAuth, autoStrongAuth);
+    }
+    public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch){
+        return autoSecure(gui,name,map,newarch,"100","0","100",true,false,false);
+    }
+    public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
+        return autoSecure(gui,name,map,newarch,"100","0","100",autoConf,autoWeakAuth, autoStrongAuth);
+    }
+
+    public TMLMapping autoSecure(MainGUI gui, String encComp, String overhead, String decComp){
+        if (tmap==null){
+            return null;
+        }
+        int arch = gui.tabs.indexOf(tmap.tmlap);
+        gui.cloneRenameTab(arch,"enc");
+        TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
+        return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,true,false,false);
+    }
+
+    public TMLMapping autoSecure(MainGUI gui, String encComp, String overhead, String decComp, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
+        if (tmap==null){
+            return null;
+        }
+        int arch = gui.tabs.indexOf(tmap.tmlap);
+        gui.cloneRenameTab(arch,"enc");
+        TMLArchiPanel newarch = (TMLArchiPanel) gui.tabs.get(gui.tabs.size()-1);
+        return autoSecure(gui,"enc", tmap,newarch,encComp, overhead,decComp,autoConf,autoWeakAuth, autoStrongAuth);
+    }
+    public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch, String encComp, String overhead, String decComp){
+        return autoSecure(gui,name, tmap,newarch,encComp, overhead,decComp,true,false, false);
+    }
+
+    public void proverifAnalysis(TMLMapping map,  ArrayList<String> nonAuthChans, ArrayList<String> nonSecChans){
+        if (map==null){
+            TraceManager.addDev("No mapping");
+            return;
+        }
+        //Perform ProVerif Analysis
+        TML2Avatar t2a = new TML2Avatar(map,false,true);
+        AvatarSpecification avatarspec = t2a.generateAvatarSpec("1");
+        if (avatarspec == null){
+            TraceManager.addDev("No avatar spec");
+            return;
+        }
+
+        avatar2proverif = new AVATAR2ProVerif(avatarspec);
+        try {
+            proverif = avatar2proverif.generateProVerif(true, true, 1, true);
+            warnings = avatar2proverif.getWarnings();
+
+            if (!avatar2proverif.saveInFile("pvspec")){
+                return;
+            }
+
+            RshClient rshc = new RshClient(ConfigurationTTool.ProVerifVerifierHost);
+
+            rshc.setCmd(ConfigurationTTool.ProVerifVerifierPath + " -in pitype pvspec");
+            rshc.sendExecuteCommandRequest();
+            Reader data  = rshc.getDataReaderFromProcess();
+
+            ProVerifOutputAnalyzer pvoa = getProVerifOutputAnalyzer ();
+            pvoa.analyzeOutput(data, true);
+            HashMap<AvatarPragmaSecret, ProVerifQueryResult> confResults = pvoa.getConfidentialityResults();
+            for (AvatarPragmaSecret pragma: confResults.keySet()) {
+                if (confResults.get(pragma).isProved() && !confResults.get(pragma).isSatisfied())
+                    {
+                        nonSecChans.add(pragma.getArg().getBlock().getName() + "__" + pragma.getArg().getName());
+                        TraceManager.addDev(pragma.getArg().getBlock().getName() + "." + pragma.getArg().getName()+ " is not secret");
+                        TMLChannel chan = map.getTMLModeling().getChannelByShortName(pragma.getArg().getName().replaceAll("_chData",""));
+                        for (String block:chan.getTaskNames()){
+                            nonSecChans.add(block+"__"+pragma.getArg().getName());
+                        }
+                    }
+            }
+            HashMap<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authResults = pvoa.getAuthenticityResults();
+            for (AvatarPragmaAuthenticity pragma: authResults.keySet()) {
+                if (authResults.get(pragma).isProved() && !authResults.get(pragma).isSatisfied()) {
+                    nonAuthChans.add(pragma.getAttrA().getAttribute().getBlock().getName() + "__" + pragma.getAttrA().getState().getName().replaceAll("_chData", ""));
+                    nonAuthChans.add(pragma.getAttrB().getAttribute().getBlock().getName() + "__" + pragma.getAttrB().getState().getName().replaceAll("_chData", ""));
+                }
+            }
+            TraceManager.addDev("all results displayed");
+
+        }
+        catch (Exception e){
+            System.out.println("ProVerif Analysis Failed " + e);
+        }
+    }
+
+    public TMLMapping autoSecure(MainGUI gui, String name, TMLMapping map, TMLArchiPanel newarch, String encComp, String overhead, String decComp, boolean autoConf, boolean autoWeakAuth, boolean autoStrongAuth){
+        HashMap<TMLTask, java.util.List<TMLTask>> toSecure = new HashMap<TMLTask, java.util.List<TMLTask>>();
+        HashMap<TMLTask, java.util.List<TMLTask>> toSecureRev = new HashMap<TMLTask, java.util.List<TMLTask>>();
+        HashMap<TMLTask, java.util.List<String>> secOutChannels = new HashMap<TMLTask, java.util.List<String>>();
+        HashMap<TMLTask, java.util.List<String>> secInChannels = new HashMap<TMLTask, java.util.List<String>>();
+        HashMap<TMLTask, java.util.List<String>> nonceOutChannels = new HashMap<TMLTask, java.util.List<String>>();
+        HashMap<TMLTask, java.util.List<String>> nonceInChannels = new HashMap<TMLTask, java.util.List<String>>();
+        HashMap<TMLTask, java.util.List<String>> macOutChannels = new HashMap<TMLTask, java.util.List<String>>();
+        HashMap<TMLTask, java.util.List<String>> macInChannels = new HashMap<TMLTask, java.util.List<String>>();
+        HashMap<TMLTask, java.util.List<String>> macNonceOutChannels = new HashMap<TMLTask, java.util.List<String>>();
+        HashMap<TMLTask, java.util.List<String>> macNonceInChannels = new HashMap<TMLTask, java.util.List<String>>();
+        TraceManager.addDev("mapping " + map.getSummaryTaskMapping());
+        ArrayList<String> nonAuthChans = new ArrayList<String>();
+        ArrayList<String> nonSecChans = new ArrayList<String>();
+
+        proverifAnalysis(map, nonAuthChans, nonSecChans);
+
+        TMLModeling tmlmodel = map.getTMLModeling();
+        java.util.List<TMLChannel> channels = tmlmodel.getChannels();
+        for (TMLChannel channel: channels){
+            for (TMLCPrimitivePort p: channel.ports){
+                channel.checkConf = channel.checkConf || p.checkConf;
+                channel.checkAuth = channel.checkAuth || p.checkAuth;
+            }
+        }
+
+        //Create clone of Component Diagram + Activity diagrams to secure
+
+        TMLComponentDesignPanel tmlcdp = map.getTMLCDesignPanel();
+        int ind = gui.tabs.indexOf(tmlcdp);
+        if (ind==-1){
+            TraceManager.addDev("No Component Design Panel");
+            return null;
+        }
+        String tabName = gui.getTitleAt(tmlcdp);
+        gui.cloneRenameTab(ind, name);
+        TMLComponentDesignPanel t = (TMLComponentDesignPanel) gui.tabs.get(gui.tabs.size()-1);
+        map.setTMLDesignPanel(t);
+        TMLComponentTaskDiagramPanel tcdp = t.tmlctdp;
+        //Create clone of architecture panel and map tasks to it
+        newarch.renameMapping(tabName, tabName+"_"+name);
+
+        for (TMLTask task: map.getTMLModeling().getTasks()){
+            java.util.List<String> tmp = new ArrayList<String>();
+            java.util.List<String> tmp2 = new ArrayList<String>();
+            java.util.List<TMLTask> tmp3 = new ArrayList<TMLTask>();
+            java.util.List<TMLTask> tmp4 = new ArrayList<TMLTask>();
+            java.util.List<String> tmp5 = new ArrayList<String>();
+            java.util.List<String> tmp6 = new ArrayList<String>();
+            java.util.List<String> tmp7 = new ArrayList<String>();
+            java.util.List<String> tmp8 = new ArrayList<String>();
+            java.util.List<String> tmp9 = new ArrayList<String>();
+            java.util.List<String> tmp10 = new ArrayList<String>();
+            secInChannels.put(task, tmp);
+            secOutChannels.put(task, tmp2);
+            toSecure.put(task,tmp3);
+            toSecureRev.put(task,tmp4);
+            nonceInChannels.put(task,tmp5);
+            nonceOutChannels.put(task,tmp6);
+            macInChannels.put(task,tmp7);
+            macOutChannels.put(task,tmp8);
+            macNonceOutChannels.put(task,tmp9);
+            macNonceInChannels.put(task,tmp10);
+        }
+        //With the proverif results, check which channels need to be secured
+        for (TMLTask task: map.getTMLModeling().getTasks()){
+            //Check if all channel operators are secured
+            TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(task.getName());
+            for (TGComponent tg:tad.getComponentList()){
+                if (tg instanceof TMLADWriteChannel){
+                    TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
+                    if (writeChannel.securityContext.equals("")){
+
+                        TMLChannel chan = tmlmodel.getChannelByName(tabName+"__"+writeChannel.getChannelName());
+                        //System.out.println("channel " + chan);
+                        if (chan!=null){
+                            if (chan.checkConf){
+                                //        System.out.println(chan.getOriginTask().getName().split("__")[1]);
+                                if (nonSecChans.contains(chan.getOriginTask().getName().split("__")[1]+"__"+writeChannel.getChannelName()+"_chData") && !secInChannels.get(chan.getDestinationTask()).contains(writeChannel.getChannelName())){
+                                    //                                                                                            if (!securePath(map, chan.getOriginTask(), chan.getDestinationTask())){
+                                    secOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
+                                    secInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
+                                    toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask());
+                                    if (chan.checkAuth && autoStrongAuth){
+                                        toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
+                                        nonceOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
+                                        nonceInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
+                                    }
+                                }
+                            }
+                            else if (chan.checkAuth && autoWeakAuth){
+                                if (nonAuthChans.contains(chan.getDestinationTask().getName().split("__")[1]+"__"+writeChannel.getChannelName())){
+                                    toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask());
+                                    macOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
+                                    macInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
+                                    if (autoStrongAuth){
+                                        toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask());
+                                        macNonceInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
+                                        macNonceOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
+                                    }
+                                }
 
-		loadDiagram(elt, tdp);
-	}
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        TraceManager.addDev("macoutchans "+ macOutChannels);
+        TraceManager.addDev("macinchans " +macInChannels);
+        TraceManager.addDev("nonsecin " +secInChannels);
+        TraceManager.addDev("nonsecout " +secOutChannels);
+        TraceManager.addDev("noncein " +nonceInChannels);
+        TraceManager.addDev("nonceout " +nonceOutChannels);
+
+        //        System.out.println(secOutChanannels.toString());
+        //        int num=0;
+        //int nonceNum=0;
+        //Create reverse channels on component diagram to send nonces if they don't already exist
+
+        for (TMLTask task: toSecureRev.keySet()){
+            TraceManager.addDev("Adding nonces to " + task.getName());
+            List<TMLChannel> chans = tmlmodel.getChannelsFromMe(task);
+
+            for (TMLTask task2: toSecureRev.get(task)){
+                boolean addChan = true;
+                for (TMLChannel chan:chans){
+                    if (chan.getDestinationTask()==task2){
+                        addChan=false;
+                    }
+                }
+
+                if (addChan){
+                    TMLCChannelOutPort originPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
+                    TMLCChannelOutPort destPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
+                    for (TGComponent tg: tcdp.getComponentList()){
+                        if (tg instanceof TMLCPrimitiveComponent){
+                            if (tg.getValue().equals(task.getName().split("__")[1])){
+                                originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+                                originPort.commName="nonceCh"+task.getName().split("__")[1] + "_"+task2.getName().split("__")[1];
+                                tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
+                            }
+                            else if (tg.getValue().equals(task2.getName().split("__")[1])){
+                                destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+                                destPort.isOrigin=false;
+                                destPort.commName="nonceCh"+task.getName().split("__")[1] + "_"+ task2.getName().split("__")[1];
+                                tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
+                            }
+                        }
+                    }
+                    tmlmodel.addChannel(new TMLChannel("nonceCh"+task.getName().split("__")[1] + "_"+ task2.getName().split("__")[1], originPort));
+                    //Add connection
+                    TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                    tcdp.addComponent(conn, 0,0,false,true);
+                }
+            }
+        }
+        //  }
+        //Add encryption/nonces to activity diagram
+        for (TMLTask task:toSecure.keySet()){
+            String title = task.getName().split("__")[0];
+            TraceManager.addDev("Securing task " + task.getName());
+            TMLActivityDiagramPanel tad = t.getTMLActivityDiagramPanel(task.getName());
+            //Get start state position, shift everything down
+            int xpos=0;
+            int ypos=0;
+            TGConnector fromStart= new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>());
+            TGConnectingPoint point = new TGConnectingPoint(null, 0, 0, false, false);
+            //Find states immediately before the write channel operator
+
+            //For each occurence of a write channel operator, add encryption/nonces before it
+
+            for (String channel: secOutChannels.get(task)){
+                Set<TGComponent> channelInstances = new HashSet<TGComponent>();
+                int yShift=50;
+                TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
+                //First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator
+                for (TGComponent tg: tad.getComponentList()){
+                    if (tg instanceof TMLADWriteChannel){
+                        TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
+                        if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){
+
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                            }
+                        }
+                    }
+                }
+                for (TGComponent comp: channelInstances){
+                    //TMLADWriteChannel writeChannel = (TMLADWriteChannel) comp;
+                    xpos = comp.getX();
+                    ypos = comp.getY();
+                    fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
+                    point = fromStart.getTGConnectingPointP2();
+                    //Add encryption operator
+                    TMLADEncrypt enc = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    TMLADReadChannel rd=new TMLADReadChannel(0, 0, 0, 0, 0, 0, false, null, tad);
+                    if (nonceOutChannels.get(task).contains(channel)){
+                        //Receive any nonces if ensuring authenticity
+                        rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
+
+                        if (matches.size()>0){
+                            rd.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
+                        }
+                        else {
+                            rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
+                        }
+                        rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        tad.addComponent(rd, xpos, ypos+yShift, false,true);
+                        fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
+                        fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        tad.addComponent(fromStart, xpos, ypos, false, true);
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        yShift+=60;
+                        //Move encryption operator after receive nonce component
+                        enc.setCd(xpos, ypos+yShift);
+                        if (tmlc!=null){
+                            enc.nonce= "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        }
+                    }
+
+                    enc.securityContext = "autoEncrypt_"+channel;
+                    enc.type = "Symmetric Encryption";
+                    enc.message_overhead = overhead;
+                    enc.encTime= encComp;
+                    enc.decTime=decComp;
+                    tad.addComponent(enc, xpos ,ypos+yShift, false, true);
+                    yShift+=60;
+                    fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
+                    fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+                    fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
+
+                    //Direct the last TGConnector back to the start of the write channel operator
+
+                    fromStart.setP2(point);
+                    //Shift components down to make room for the added ones, and add security contexts to write channels
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg instanceof TMLADWriteChannel){
+                            TMLADWriteChannel wChannel = (TMLADWriteChannel) tg;
+                            TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName());
+                            if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){
+                                TraceManager.addDev("Securing write channel " + wChannel.getChannelName());
+                                wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName();
 
-	public void loadAvatarMAD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
-		name = elt.getAttribute("name");
-		mgui.createAvatarMAD(indexAnalysis, name);
-		TDiagramPanel tdp = mgui.getAvatarMADPanel(indexAnalysis, indexTab, name);
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
-		loadDiagram(elt, tdp);
-	}
+                            }
+                        }
+                        if (tg.getY() >= ypos && tg !=enc && tg!=rd){
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+                    tad.repaint();
+                }
+            }
+
+            for (String channel: macOutChannels.get(task)){
+                //Add MAC before writechannel
+                int yShift=50;
+                TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
+                //First, find the connector that points to it. We will add the encryption, nonce operators directly before the write channel operator
+                HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
+                for (TGComponent tg: tad.getComponentList()){
+                    if (tg instanceof TMLADWriteChannel){
+                        TMLADWriteChannel writeChannel = (TMLADWriteChannel) tg;
+                        if (writeChannel.getChannelName().equals(channel) && writeChannel.securityContext.equals("")){
+                            xpos = tg.getX();
+                            ypos = tg.getY();
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                            }
+                        }
+                    }
+                }
+                for (TGComponent comp: channelInstances){
+                    //TMLADWriteChannel writeChannel = (TMLADWriteChannel) comp;
+                    xpos = comp.getX();
+                    ypos = comp.getY();
+                    fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
+                    point = fromStart.getTGConnectingPointP2();
+
+                    TMLADEncrypt enc = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+
+                    //If we need to receive a nonce
+                    TMLADReadChannel rd=new TMLADReadChannel(0, 0, 0, 0, 0, 0, false, null, tad);
+                    if (macNonceOutChannels.get(task).contains(channel)){
+                        //Receive any nonces if ensuring authenticity
+                        rd = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
+
+                        if (matches.size()>0){
+                            rd.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
+                        }
+                        else {
+                            rd.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
+                        }
+                        rd.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        tad.addComponent(rd, xpos, ypos+yShift, false,true);
+                        fromStart.setP2(rd.getTGConnectingPointAtIndex(0));
+                        fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                        tad.addComponent(fromStart, xpos, ypos, false, true);
+                        fromStart.setP1(rd.getTGConnectingPointAtIndex(1));
+                        yShift+=60;
+                        //Move encryption operator after receive nonce component
+                        enc.setCd(xpos, ypos+yShift);
+                        if (tmlc!=null){
+                            enc.nonce= "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        }
+                    }
+
+                    //Add encryption operator
+
+                    enc.securityContext = "autoEncrypt_"+channel;
+                    enc.type = "MAC";
+                    enc.message_overhead = overhead;
+                    enc.encTime= encComp;
+                    enc.decTime=decComp;
+                    enc.size=overhead;
+                    tad.addComponent(enc, xpos ,ypos+yShift, false, true);
+                    yShift+=60;
+                    fromStart.setP2(enc.getTGConnectingPointAtIndex(0));
+                    fromStart=new TGConnectorTMLAD(enc.getX(), enc.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>());
+                    tad.addComponent(fromStart, xpos, ypos, false, true);
+                    fromStart.setP1(enc.getTGConnectingPointAtIndex(1));
+
+                    //Direct the last TGConnector back to the start of the write channel operator
+
+                    fromStart.setP2(point);
+                    //Shift components down to make room for the added ones, and add security contexts to write channels
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg instanceof TMLADWriteChannel){
+                            TMLADWriteChannel wChannel = (TMLADWriteChannel) tg;
+                            TraceManager.addDev("Inspecting write channel " + wChannel.getChannelName());
+                            if (channel.equals(wChannel.getChannelName()) && wChannel.securityContext.equals("")){
+                                TraceManager.addDev("Securing write channel " + wChannel.getChannelName());
+                                wChannel.securityContext = "autoEncrypt_"+wChannel.getChannelName();
+                                tad.repaint();
+                            }
+                        }
+                        if (tg.getY() >= ypos && tg !=enc && tg!=rd){
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+                }
+            }
+            for (String channel: macInChannels.get(task)){
+                //Add decryptmac after readchannel
+                int yShift=50;
+                Set<TGComponent> channelInstances = new HashSet<TGComponent>();
+                TGConnector conn =new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>());
+                TGConnectingPoint next = new TGConnectingPoint(null, 0, 0, false, false);
+                //Find read channel operator
+
+                for (TGComponent tg: tad.getComponentList()){
+                    if (tg instanceof TMLADReadChannel){
+                        TMLADReadChannel readChannel = (TMLADReadChannel) tg;
+                        if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                            }
+                        }
+                    }
+                }
+
+
+                for (TGComponent comp: channelInstances){
+
+                    fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
+                    point = fromStart.getTGConnectingPointP2();
+                    conn = tad.findTGConnectorStartingAt(comp.getTGConnectingPointAtIndex(1));
+                    next= conn.getTGConnectingPointP2();
+                    xpos = fromStart.getX();
+                    ypos = fromStart.getY();
+
+
+                    TMLADReadChannel readChannel = (TMLADReadChannel) comp;
+                    TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
+                    readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
+                    tad.repaint();
+
+                    TMLADWriteChannel wr = new TMLADWriteChannel(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    //Create nonce and send it
+                    TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
+                    if (macNonceInChannels.get(task).contains(channel)){
+                        //Create a nonce operator and a write channel operator
+                        TMLADEncrypt nonce = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        nonce.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        nonce.type = "Nonce";
+                        nonce.message_overhead = overhead;
+                        nonce.encTime= encComp;
+                        nonce.decTime=decComp;
+                        tad.addComponent(nonce, xpos ,ypos+yShift, false, true);
+                        fromStart.setP2(nonce.getTGConnectingPointAtIndex(0));
+                        yShift+=50;
+                        wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        //Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver
+                        //Find matching channels
+                        List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
+
+                        if (matches.size()>0){
+                            wr.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
+                        }
+                        else {
+                            wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
+                        }
+                        //send the nonce along the channel
+                        wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        tad.addComponent(wr,xpos,ypos+yShift,false,true);
+                        wr.makeValue();
+                        TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        tad.addComponent(tmp, xpos,ypos,false,true);
+                        fromStart=new TGConnectorTMLAD(wr.getX(), wr.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, wr.getTGConnectingPointAtIndex(1), null, new Vector<Point>());
+                        tad.addComponent(fromStart, xpos, ypos, false, true);
+                        //Connect created write channel operator to start of read channel operator
+                        fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(point);
+                        //Shift everything from the read channel on down
+                        for (TGComponent tg:tad.getComponentList()){
+                            if (tg.getY() >= ypos && tg!=nonce && tg!=wr){
+                                tg.setCd(tg.getX(), tg.getY()+yShift);
+                            }
+                        }
+                    }
+
+                    //Add decryption operator if it does not already exist
+                    xpos = conn.getX();
+                    ypos = conn.getY();
+
+                    TMLADDecrypt dec = new TMLADDecrypt(xpos+10, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    dec.securityContext = "autoEncrypt_" + readChannel.getChannelName();
+                    tad.addComponent(dec, dec.getX(), dec.getY(), false, true);
+                    conn.setP2(dec.getTGConnectingPointAtIndex(0));
+                    yShift+=60;
+                    conn = new TGConnectorTMLAD(xpos,ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, dec.getTGConnectingPointAtIndex(1), next, new Vector<Point>());
+                    conn.setP1(dec.getTGConnectingPointAtIndex(1));
+                    conn.setP2(next);
+                    tad.addComponent(conn, conn.getX(), conn.getY(), false,true);
+                    //Shift everything down
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg instanceof TMLADReadChannel){
+                            readChannel = (TMLADReadChannel) tg;
+                            TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName());
+                            if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){
+                                TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
+                                readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
 
+                            }
+                        }
+                        if (tg.getY() > ypos && tg!=dec && tg!=comp){
+
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+
+
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+                    tad.repaint();
+                }
+            }
+            for (String channel: secInChannels.get(task)){
+                TraceManager.addDev("securing channel "+channel);
+                int yShift=20;
+                //        String title = task.getName().split("__")[0];
+                TMLChannel tmlc = tmlmodel.getChannelByName(title +"__"+channel);
+                TGConnector conn =new TGConnectorTMLAD(0, 0, 0, 0, 0, 0, false, null, tad, null, null, new Vector<Point>());
+                TGConnectingPoint next = new TGConnectingPoint(null, 0, 0, false, false);
+                //Find read channel operator
+                TMLADReadChannel readChannel = new TMLADReadChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                HashSet<TGComponent> channelInstances = new HashSet<TGComponent>();
+                for (TGComponent tg: tad.getComponentList()){
+                    if (tg instanceof TMLADReadChannel){
+                        readChannel = (TMLADReadChannel) tg;
+                        if (readChannel.getChannelName().equals(channel) && readChannel.securityContext.equals("")){
+                            fromStart = tad.findTGConnectorEndingAt(tg.getTGConnectingPointAtIndex(0));
+                            if (fromStart!=null){
+                                channelInstances.add(tg);
+                            }
+                        }
+                    }
+                }
+
+                for (TGComponent comp: channelInstances){
+
+                    fromStart = tad.findTGConnectorEndingAt(comp.getTGConnectingPointAtIndex(0));
+                    point = fromStart.getTGConnectingPointP2();
+                    conn = tad.findTGConnectorStartingAt(comp.getTGConnectingPointAtIndex(1));
+                    next = conn.getTGConnectingPointP2();
+                    xpos = fromStart.getX();
+                    ypos = fromStart.getY();
+                    TMLADWriteChannel wr = new TMLADWriteChannel(0, 0, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    if (nonceInChannels.get(task).contains(channel)){
+                        //Create a nonce operator and a write channel operator
+                        TMLADEncrypt nonce = new TMLADEncrypt(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        nonce.securityContext = "nonce_"+ tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        nonce.type = "Nonce";
+                        nonce.message_overhead = overhead;
+                        nonce.encTime= encComp;
+                        nonce.decTime=decComp;
+                        tad.addComponent(nonce, xpos ,ypos+yShift, false, true);
+                        fromStart.setP2(nonce.getTGConnectingPointAtIndex(0));
+                        yShift+=50;
+                        wr = new TMLADWriteChannel(xpos, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                        //Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver
+                        //Find matching channels
+                        List<TMLChannel> matches = tmlmodel.getChannels(tmlc.getDestinationTask(), tmlc.getOriginTask());
+
+                        if (matches.size()>0){
+                            wr.setChannelName(matches.get(0).getName().replaceAll(title+"__",""));
+                        }
+                        else {
+                            wr.setChannelName("nonceCh"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1]);
+                        }
+                        //send the nonce along the channel
+                        wr.securityContext = "nonce_"+tmlc.getDestinationTask().getName().split("__")[1] + "_"+tmlc.getOriginTask().getName().split("__")[1];
+                        tad.addComponent(wr,xpos,ypos+yShift,false,true);
+                        wr.makeValue();
+                        TGConnector tmp =new TGConnectorTMLAD(wr.getX(), wr.getY()+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null,tad,nonce.getTGConnectingPointAtIndex(1), wr.getTGConnectingPointAtIndex(0), new Vector<Point>());
+                        tad.addComponent(tmp, xpos,ypos,false,true);
+                        fromStart=new TGConnectorTMLAD(wr.getX(), wr.getY(), tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, wr.getTGConnectingPointAtIndex(1), null, new Vector<Point>());
+                        tad.addComponent(fromStart, xpos, ypos, false, true);
+                        //Connect created write channel operator to start of read channel operator
+                        fromStart.setP1(wr.getTGConnectingPointAtIndex(1));
+                        fromStart.setP2(point);
+                        //Shift everything from the read channel on down
+                        for (TGComponent tg:tad.getComponentList()){
+                            if (tg.getY() >= ypos && tg!=nonce && tg!=wr){
+                                tg.setCd(tg.getX(), tg.getY()+yShift);
+                            }
+                        }
+                    }
+                    //tad.repaint();
+
+                    //Now add the decrypt operator
+                    yShift=40;
+                    TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
+                    readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
+                    tad.repaint();
+                    //Add decryption operator if it does not already exist
+                    xpos = readChannel.getX();
+                    ypos = readChannel.getY();
+                    TMLADDecrypt dec = new TMLADDecrypt(xpos+10, ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad);
+                    dec.securityContext = "autoEncrypt_" + readChannel.getChannelName();
+                    tad.addComponent(dec, dec.getX(), dec.getY(), false, true);
+                    conn.setP2(dec.getTGConnectingPointAtIndex(0));
+                    yShift+=100;
+                    conn = new TGConnectorTMLAD(xpos,ypos+yShift, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, dec.getTGConnectingPointAtIndex(1), next, new Vector<Point>());
+                    conn.setP1(dec.getTGConnectingPointAtIndex(1));
+
+                    conn.setP2(next);
+                    tad.addComponent(conn, conn.getX(), conn.getY(), false,true);
+                    //Shift everything down
+                    for (TGComponent tg:tad.getComponentList()){
+                        if (tg instanceof TMLADReadChannel){
+                            readChannel = (TMLADReadChannel) tg;
+                            TraceManager.addDev("Inspecting read channel " + readChannel.getChannelName());
+                            if (channel.equals(readChannel.getChannelName()) && readChannel.securityContext.equals("")){
+                                TraceManager.addDev("Securing read channel " + readChannel.getChannelName());
+                                readChannel.securityContext = "autoEncrypt_"+readChannel.getChannelName();
 
-	public void loadADDDiagram(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
+                            }
+                        }
+                        if (tg.getY() > ypos && tg!=dec){
+
+                            tg.setCd(tg.getX(), tg.getY()+yShift);
+                        }
+                    }
+
+                    tad.setMaxPanelSize(tad.getMaxX(), tad.getMaxY()+yShift);
+
+                    tad.repaint();
+                }
+            }
+        }
+        GTMLModeling gtm = new GTMLModeling(t, false);
+        TMLModeling newmodel = gtm.translateToTMLModeling(false,false);
+        for (TMLTask task:newmodel.getTasks()){
+            task.setName(tabName+"_"+name+"__"+task.getName());
+        }
+        for (TMLTask task: tmlmodel.getTasks()){
+            HwExecutionNode node =(HwExecutionNode) map.getHwNodeOf(task);
+            if (newmodel.getTMLTaskByName(task.getName().replace(tabName,tabName+"_"+name))!=null){
+                map.addTaskToHwExecutionNode(newmodel.getTMLTaskByName(task.getName().replace(tabName,tabName+"_"+name)), node);
+                map.removeTask(task);
+            }
+            else {
+                System.out.println("Can't find " + task.getName());
+            }
+        }
+        //map.setTMLModeling(newmodel);
+        //System.out.println(map);
+        //TMLMapping newMap = gtm.translateToTMLMapping();
+        map.setTMLModeling(newmodel);
+        return map;
+    }
+    public boolean securePath(TMLMapping map, TMLTask t1, TMLTask t2){
+        //Check if a path between two tasks is secure
+        boolean secure=true;
+        java.util.List<HwLink> links = map.getTMLArchitecture().getHwLinks();
+        HwExecutionNode node1 = (HwExecutionNode) map.getHwNodeOf(t1);
+        HwExecutionNode node2 = (HwExecutionNode) map.getHwNodeOf(t2);
+        java.util.List<HwNode> found = new ArrayList<HwNode>();
+        java.util.List<HwNode> done = new ArrayList<HwNode>();
+        java.util.List<HwNode> path = new ArrayList<HwNode>();
+        Map<HwNode, java.util.List<HwNode>> pathMap = new HashMap<HwNode, java.util.List<HwNode>>();
+        TraceManager.addDev("Links " + links);
+        if (node1==node2){
+            return true;
+        }
+        for (HwLink link: links){
+            if (link.hwnode == node1){
+                found.add(link.bus);
+                java.util.List<HwNode> tmp = new ArrayList<HwNode>();
+                tmp.add(link.bus);
+                pathMap.put(link.bus, tmp);
+            }
+        }
+        outerloop:
+        while (found.size()>0){
+            HwNode curr = found.remove(0);
+            for (HwLink link: links){
+                if (curr == link.bus){
+                    if (link.hwnode == node2){
+                        path = pathMap.get(curr);
+                        break outerloop;
+                    }
+                    if (!done.contains(link.hwnode) && !found.contains(link.hwnode) && link.hwnode instanceof HwBridge){
+                        found.add(link.hwnode);
+                        java.util.List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
+                        tmp.add(link.hwnode);
+                        pathMap.put(link.hwnode, tmp);
+                    }
+                }
+                else if (curr == link.hwnode){
+                    if (!done.contains(link.bus) && !found.contains(link.bus)){
+                        found.add(link.bus);
+                        java.util.List<HwNode> tmp = new ArrayList<HwNode>(pathMap.get(curr));
+                        tmp.add(link.bus);
+                        pathMap.put(link.bus, tmp);
+                    }
+                }
+            }
+            done.add(curr);
+        }
+        if (path.size() ==0){
+            System.out.println("no path");
+            return true;
+        }
+        else {
+            HwBus bus;
+            //Check if all buses and bridges are private
+            for (HwNode n: path){
+                if (n instanceof HwBus){
+                    bus = (HwBus) n;
+                    if (bus.privacy ==0){
+                        return false;
+                    }
+                }
+            }
+        }
+        return secure;
+    }
+
+    public void autoMapKeys(){
+        TraceManager.addDev("auto map keys");
+        if (tmap==null){
+            return;
+        }
+        java.util.List<HwLink> links = tmap.getArch().getHwLinks();
+        //Find all Security Patterns, if they don't have an associated memory at encrypt and decrypt, map them
+        TMLModeling tmlm = tmap.getTMLModeling();
+        if (tmlm.securityTaskMap ==null){
+            return;
+        }
+        //      System.out.println(tmlm.securityTaskMap);
+        for (SecurityPattern sp: tmlm.securityTaskMap.keySet()){
+            if (sp.type.contains("Encryption") || sp.type.equals("MAC")){
+                TraceManager.addDev("Finding security "+sp);
+                for (TMLTask t:tmlm.securityTaskMap.get(sp)){
+                    ArrayList<HwMemory> mems = new ArrayList<HwMemory>();
+                    boolean keyFound=false;
+                    HwExecutionNode node1 = (HwExecutionNode) tmap.getHwNodeOf(t);
+                    //Try to find memory using only private buses
+                    java.util.List<HwNode> toVisit = new ArrayList<HwNode>();
+                    //  java.util.List<HwNode> toMemory = new ArrayList<HwNode>();
+                    java.util.List<HwNode> complete = new ArrayList<HwNode>();
+                    for (HwLink link:links){
+                        if (link.hwnode==node1){
+                            if (link.bus.privacy==1){
+                                toVisit.add(link.bus);
+                            }
+                        }
+                    }
+                    memloop:
+                    while (toVisit.size()>0){
+                        HwNode curr = toVisit.remove(0);
+                        for (HwLink link: links){
+                            if (curr == link.bus){
+                                if (link.hwnode instanceof HwMemory){
+                                    mems.add((HwMemory) link.hwnode);
+                                    TMLArchiMemoryNode memNode= (TMLArchiMemoryNode) listE.getTG(link.hwnode);
+                                    ArrayList<TMLArchiKey> keys = memNode.getKeyList();
+                                    String patternString= "";
+                                    for (TMLArchiKey key: keys){
+                                        if (key.getValue().equals(sp.name)){
+
+                                            keyFound=true;
+                                            break memloop;
+                                        }
+                                        patternString += key.getValue();
+                                        patternString += " ";
+                                    }
+                                    TraceManager.addDev("Memory "+ link.hwnode.getName() + " has currently mapped: " + patternString);
+                                }
+                                if (!complete.contains(link.hwnode) && !toVisit.contains(link.hwnode) && link.hwnode instanceof HwBridge){
+                                    toVisit.add(link.hwnode);
+                                }
+                            }
+                            else if (curr == link.hwnode){
+                                if (!complete.contains(link.bus) && !toVisit.contains(link.bus)){
+                                    toVisit.add(link.bus);
+                                }
+                            }
+                        }
+                        complete.add(curr);
+                    }
+                    if (!keyFound){
+                        if (mems.size()>0){
+                            TMLArchiMemoryNode memNode= (TMLArchiMemoryNode) listE.getTG(mems.get(0));
+                            TMLArchiKey key = new TMLArchiKey(memNode.x, memNode.y, memNode.tdp.getMinX(), memNode.tdp.getMaxX(), memNode.tdp.getMinY(), memNode.tdp.getMaxY(), false, memNode, memNode.tdp);
+                            key.setReferenceKey(sp.name);
+                            key.makeFullValue();
+                            TraceManager.addDev("Adding " +sp.name+ " key to " +memNode.getName());
+                            TraceManager.addDev("Adding " +sp + " key to " +memNode.getName());
+                            memNode.tdp.addComponent(key, memNode.x, memNode.y, true,true);
+                            memNode.tdp.repaint();
+                        }
+                        else {
+                            System.out.println("Can't map key to memory for " + sp.name + " on task " + t.getName());
+                            UICheckingError ce = new UICheckingError(CheckingError.STRUCTURE_ERROR, "Cannot map key in memory for " + sp.name + " on task " + t.getName());
+                            ce.setTDiagramPanel(tmap.tmlap.tmlap);
+                            ce.setTGComponent(null);
+                            checkingErrors.add(ce);
+                        }
+                    }
+                }
+            }
+        }
+        TraceManager.addDev("Mapping finished");
+    }
+
+    public void generateAvatarFromTML(boolean mc, boolean security){
+        TraceManager.addDev("Generating Avatar from TML");
+        if (tmlm!=null && tmap==null){
+            tmap = tmlm.getDefaultMapping();
+        }
+        if (avatarspec!=null){
+            return;
+        }
+        else if (tmap!=null){
+            t2a = new TML2Avatar(tmap, mc, security);
+            TraceManager.addDev("Avatar spec generation");
+            avatarspec = t2a.generateAvatarSpec("1");
+            TraceManager.addDev("Avatar spec generation: done");
+        }
+    }
+
+    public boolean generateProVerifFromAVATAR(String _path, int _stateReachability, boolean _typed, String loopLimit) {
+        //      System.out.println(avatarspec);
+        if (avatarspec !=null){
+            //use avspec
+        }
+        else if (tmap!=null){
+            t2a = new TML2Avatar(tmap,false,true);
+            avatarspec = t2a.generateAvatarSpec(loopLimit);
+            drawPanel(avatarspec, mgui.getFirstAvatarDesignPanelFound());
+
+        }
+        else if (tmlm!=null){
+            //Generate default mapping
+            tmap = tmlm.getDefaultMapping();
+            tmap.setTMLDesignPanel((TMLComponentDesignPanel)mgui.getCurrentTURTLEPanel());
+            t2a=new TML2Avatar(tmap,false,true);
+            avatarspec = t2a.generateAvatarSpec(loopLimit);
+        }
+        else if (avatarspec == null){
+            return false;
+        }
+
+        avatar2proverif = new AVATAR2ProVerif(avatarspec);
+        //tml2uppaal.setChoiceDeterministic(choices);
+        //tml2uppaal.setSizeInfiniteFIFO(_size);
+        proverif = avatar2proverif.generateProVerif(true, true, _stateReachability, _typed);
+        warnings = avatar2proverif.getWarnings();
+        languageID = PROVERIF;
+        mgui.setMode(MainGUI.EDIT_PROVERIF_OK);
+        //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
+        try {
+            if (avatar2proverif.saveInFile(_path)){
+                TraceManager.addDev("Specification generated in " + _path);
+                return true;
+            }
+            return false;
+        } catch (FileException fe) {
+            TraceManager.addError("Exception: " + fe.getMessage());
+            return false;
+        }
+    }
+
+    public TPN generateTPNFromAvatar() {
+        avatar2tpn = new AVATAR2TPN(avatarspec);
+        //tml2uppaal.setChoiceDeterministic(choices);
+        //tml2uppaal.setSizeInfiniteFIFO(_size);
+        tpnFromAvatar = avatar2tpn.generateTPN(true, true);
+        languageID = TPN;
+        return tpnFromAvatar;
+    }
+
+    /*IntMatrix im = tpnFromAvatar.getIncidenceMatrix();
+      TraceManager.addDev("Farkas computing on " + im.toString());
+      im.Farkas();
+      TraceManager.addDev("Farkas done:" + im.toString());
+
+
+
+      languageID = TPN;
+      //uppaalTable = tml2uppaal.getRelationTIFUPPAAL(_debug);
+      return true;
+      /*try {
+      avatar2tpn.saveInFile(_path);
+      TraceManager.addDev("Specification generated in " + _path);
+      return true;
+      } catch (FileException fe) {
+      TraceManager.addError("Exception: " + fe.getMessage());
+      return false;
+      }*/
+
+
+    public ArrayList<TGComponentAndUPPAALQuery> getUPPAALQueries() {
+        return getUPPAALQueries(mgui.getCurrentTURTLEPanel());
+    }
+
+    public ArrayList<TGComponentAndUPPAALQuery> getUPPAALQueries(TURTLEPanel tp) {
+        TraceManager.addDev("Searching for queries on " + mgui.getTabName(tp));
+        ArrayList<TGComponent> list = new ArrayList<TGComponent>();
+        ArrayList<TClass> tclasses;
+        tp.getAllCheckableTGComponent(list);
+        TGComponentAndUPPAALQuery tmpQ;
+
+        ArrayList<TGComponentAndUPPAALQuery> listQ = new ArrayList<TGComponentAndUPPAALQuery>();
+
+        if (tp instanceof DesignPanel) {
+            ArrayList<ADComponent> listAD = listE.getADComponentCorrespondance(list);
+
+            //TraceManager.addDev("List size:" + listAD.size());
+
+            if (listAD == null) {
+                return null;
+            }
+
+            TClass t;
+            String s;
+            for(ADComponent adc:listAD) {
+                if (adc != null) {
+                    t = tm.findTClass(adc);
+                    //TraceManager.addDev("Found class:" + t.getName());
+                    if (t!= null) {
+                        tclasses = new ArrayList<TClass>();
+                        tclasses.add(t);
+                        // For handling tobjects
+                        tm.addAllTClassesEndingWith(tclasses, "_" + t.getName());
+                        for(TClass tc: tclasses) {
+                            //TraceManager.addDev("Analyzing class:" + tc.getName());
+                            s = uppaalTIFTable.getRQuery(tc, adc);
+                            if (s != null) {
+                                //TraceManager.addDev("Adding query:" + s);
+                                tmpQ = new TGComponentAndUPPAALQuery(null, s + "$" + adc);
+                                listQ.add(tmpQ);
+                            }
+                        }
+                    }
+                }
+            }
+        } else if ((tp instanceof TMLComponentDesignPanel) || (tp instanceof TMLDesignPanel)) {
+            //TraceManager.addDev("uppaalTMLTable");
+            ArrayList<TMLActivityElement> listAE = listE.getTMLActivityElementCorrespondance(list);
+
+            if (listAE == null) {
+                return null;
+            }
+
+            TMLTask task;
+            String s;
+            for(TMLActivityElement elt:listAE) {
+                if (elt != null) {
+                    task = tmlm.findTMLTask(elt);
+                    if (task!= null) {
+                        s = uppaalTMLTable.getRQuery(task, elt);
+                        if (s != null) {
+                            //TraceManager.addDev("Adding query:" + s);
+                            // Object ref;
+                            if (elt.getReferenceObject() instanceof TGComponent) {
+                                tmpQ = new TGComponentAndUPPAALQuery((TGComponent)(elt.getReferenceObject()), s + "$" + elt);
+                            } else {
+                                tmpQ = new TGComponentAndUPPAALQuery(null, s + "$" + elt);
+                            }
+                            listQ.add(tmpQ);
+                        }
+                    }
+                }
+            }
+
+        } else if ((avatar2uppaal != null) && (tp instanceof AvatarDesignPanel)) {
+            TraceManager.addDev("Making UPPAAL queries");
+            for(TGComponent tgc: list) {
+                TraceManager.addDev("Making UPPAAL query for " + tgc);
+                String s = avatar2uppaal.getUPPAALIdentification(tgc);
+                TraceManager.addDev("Query: " + s);
+                if ((s!= null) && (s.length() > 0)) {
+                    AvatarBlock block = avatar2uppaal.getBlockFromReferenceObject(tgc);
+                    listQ.add(new TGComponentAndUPPAALQuery(tgc, s + "$" + block.getName() + "." + tgc));
+                } else {
+                    TraceManager.addDev("Could not make query for " + tgc);
+                }
+            }
+        } else if ((avatar2uppaal != null) && (tp instanceof AttackTreePanel)) {
+            TraceManager.addDev("Making UPPAAL queries");
+            for(TGComponent tgc: list) {
+                TraceManager.addDev("Making UPPAAL query for " + tgc);
+                String s = avatar2uppaal.getUPPAALIdentification(tgc);
+                TraceManager.addDev("Query: " + s);
+                if ((s!= null) && (s.length() > 0)) {
+                    AvatarBlock block = avatar2uppaal.getBlockFromReferenceObject(tgc);
+                    listQ.add(new TGComponentAndUPPAALQuery(tgc, s + "$" + block.getName() + "." + tgc));
+                } else {
+                    TraceManager.addDev("Could not make query for " + tgc);
+                }
+            }
+        }
+
+        return listQ;
+    }
+
+    public List<String> generateLOTOSAUT(String path) {
+        TML2AUTviaLOTOS tml2aut = new TML2AUTviaLOTOS(tmlm, tm);
+        tml2aut.generateLOTOS(true);
+        return tml2aut.getSpecs();
+        /*try {
+          return tml2aut.saveInFiles(path);
+          } catch (FileException fe) {
+          return null;
+          }*/
+    }
+
+    public void generateSystemC() {
+        String path = ConfigurationTTool.SystemCCodeDirectory;
+        String list = FileUtils.deleteFiles(path, ".cpp");
+        if (list.length() == 0) {
+            TraceManager.addDev("No cpp files were deleted\n");
+        } else {
+            TraceManager.addDev("Files deleted:\n" + list + "\n");
+        }
+
+        list = FileUtils.deleteFiles(path, ".x");
+
+        if (list.length() == 0) {
+            TraceManager.addDev("No x files were deleted\n");
+        } else {
+            TraceManager.addDev("Files deleted:\n" + list + "\n");
+        }
+
+        TML2SystemC tml2systc = new TML2SystemC(tmlm);
+        tml2systc.generateSystemC(true);
+        //tml2systc.print();
+        try {
+            tml2systc.saveFile(path, "appmodel");
+        } catch (FileException fe) {
+            TraceManager.addError("File could not be saved (SystemC)");
+        }
+
+    }
+
+
+    public void saveSIM(File f) {
+        if ((sim != null) && (f != null)) {
+            saveInFile(f, sim);
+        }
+    }
+
+    public void saveDTA(File f) {
+        if ((dta != null) && (f != null)) {
+            saveInFile(f, dta);
+        }
+    }
+
+    public void saveDTADOT(File f) {
+        if ((dtadot != null) && (f != null)) {
+            saveInFile(f, dtadot);
+        }
+    }
+
+    public void saveRG(File f) {
+        if ((rg != null) && (f != null)) {
+            saveInFile(f, rg);
+        }
+    }
+
+    public void saveTLSA(File f) {
+        if ((rg != null) && (f != null)) {
+            saveInFile(f, tlsa);
+        }
+    }
+
+    public void saveRGAut(File f) {
+        if ((rgaut != null) && (f != null)) {
+            saveInFile(f, rgaut);
+        }
+    }
+
+    public void saveRGDOT(File f) {
+        if ((rgdot != null) && (f != null)) {
+            saveInFile(f, rgdot);
+        }
+    }
+
+    public void saveTLSADOT(File f) {
+        if ((rgdot != null) && (f != null)) {
+            saveInFile(f, tlsadot);
+        }
+    }
+
+    public void saveRGAutDOT(File f) {
+        if ((rgautdot != null) && (f != null)) {
+            saveInFile(f, rgautdot);
+        }
+    }
+
+    public void saveRGAutProj(File f) {
+        if ((rgautproj != null) && (f != null)) {
+            saveInFile(f, rgautproj);
+        }
+    }
+
+    public void saveRGAutProjDOT(File f) {
+        if ((rgautprojdot != null) && (f != null)) {
+            saveInFile(f, rgautprojdot);
+        }
+    }
+
+    public void modifyMinimizedGraph() {
+        /*AUTMappingGraph graph = new AUTMappingGraph();
+          TraceManager.addDev("Building graph");
+          graph.buildGraph(rgautproj);
+          TraceManager.addDev("Renaming transitions");
+          graph.renameTransitions();
+          TraceManager.addDev("Merging transitions 23/4=" + (23/4) + "23%4="  + (23%4));
+          graph.mergeWriteTransitions();
+          graph.mergeReadTransitions();
+          graph.removeInternalTransitions();
+          TraceManager.addDev("Printing graph:\n" + graph.toAUTStringFormat());
+          TraceManager.addDev("Splitting transitions");
+          graph.splitTransitions();
+          modifiedaut = graph.toAUTStringFormat();
+          TraceManager.addDev("Printing graph:\n" + modifiedaut);
+          TraceManager.addDev("Translation in DOT format");
+
+          // AUT  2 dot
+          String fileName = "graph";
+          try {
+          RshClient rshc = new RshClient(getHostAldebaran());
+          int id = rshc.getId();
+          fileName = FileUtils.addBeforeFileExtension(fileName, "_" + id);
+          String data = rgautproj;
+          rshc.sendFileData(fileName + ".aut", data);
+          String cmd1 = getPathBcgio() + " -aldebaran " + fileName + ".aut" + " -graphviz " + fileName + ".dot";
+          data = processCmd(rshc, cmd1);
+          data = rshc.getFileData(fileName + ".dot");
+          modifiedautdot = data;
+          TraceManager.addDev("All done");
+          } catch (LauncherException le) {
+          TraceManager.addDev("Error: conversion failed");
+          }*/
+    }
+
+    protected String processCmd(RshClient rshc, String cmd) throws LauncherException {
+        rshc.setCmd(cmd);
+        String s = null;
+        rshc.sendExecuteCommandRequest();
+        s = rshc.getDataFromProcess();
+        return s;
+    }
+
+    public void showSIM(int type) {
+        if (sim != null) {
+            JFrameSimulationTrace jfst = new JFrameSimulationTrace("Last simulation trace", sim, type);
+            jfst.setIconImage(IconManager.img8);
+            //  jfst.setSize(900, 600);
+            GraphicLib.centerOnParent( jfst, 900, 600 );
+            jfst.setVisible(true);
+        }
+    }
+
+    public String showDTA() {
+        if (dta != null) {
+            return runDOTTY(dtadot);
+        }
+        return null;
+    }
+
+    public String showRG() {
+        if (rg != null) {
+            return runDOTTY(rgdot);
+        }
+        return null;
+    }
+
+    public String showTLSA() {
+        if (rg != null) {
+            return runDOTTY(tlsadot);
+        }
+        return null;
+    }
+
+    public String showRGAut() {
+        if (rgaut != null) {
+            return runDOTTY(rgautdot);
+        }
+        return null;
+    }
+
+    public String showRGDiplodocus() {
+        TraceManager.addDev("Show diplodocus graph located in " + ConfigurationTTool.GGraphPath + "/tree.dot");
+        RemoteExecutionThread ret = new RemoteExecutionThread(ConfigurationTTool.DOTTYHost, null, null, ConfigurationTTool.DOTTYPath + " " + ConfigurationTTool.GGraphPath + "/tree.dot");
+        ret.start();
+        return null;
+    }
+
+    public String showRGAutProj() {
+        if (rgaut != null) {
+            return runDOTTY(rgautprojdot);
+        }
+        return null;
+    }
+
+    public static String showGGraph(String ggraph) {
+        if (ggraph != null) {
+            return runDOTTY(ggraph);
+        }
+        return null;
+    }
+
+    public static String runDOTTY(String data) {
+        String fileName = "graph" + graphId + ".dot";
+        graphId ++;
+
+        RemoteExecutionThread ret = new RemoteExecutionThread(ConfigurationTTool.DOTTYHost, fileName, data, ConfigurationTTool.DOTTYPath + " " + fileName);
+        ret.start();
+
+        return null;
+    }
+
+    public boolean useDynamicStructure(String data) {
+        int index1 = data.indexOf("behaviour");
+        if (index1 == -1) {
+            return false;
+        }
+
+        data = data.substring(index1, data.length());
+
+        return (data.indexOf("Queue_nat") != -1);
+
+    }
+
+
+
+    public void saveInFile(File file, String s) {
+        TraceManager.addDev("Saving in file " + file.getAbsolutePath() + " size of file=" + s.length());
+        //TraceManager.addDev("Length of s=" + s.length());
+
+        int index1 = 0, index2;
+        int step = 1048576;
+        int length = s.length();
+        //String sub;
+
+        try {
+            FileOutputStream fos = new FileOutputStream(file);
+            while(index1<length) {
+                index2 = Math.min(index1+step, length);
+                fos.write(s.substring(index1, index2).getBytes());
+                index1 += step;
+            }
+            fos.close();
+        } catch(Exception e) {
+            JOptionPane.showMessageDialog(mgui.frame, "Specification could not be saved " + e.getMessage(), "Lotos File Error", JOptionPane.INFORMATION_MESSAGE);
+            TraceManager.addError("Specification could not be saved " + e.getMessage());
+        }
+
+        /*try {
+          FileOutputStream fos = new FileOutputStream(file);
+          fos.write(s.getBytes());
+          fos.close();
+          } catch(Exception e) {
+          JOptionPane.showMessageDialog(mgui.frame, "Specification could not be saved " + e.getMessage(), "Lotos File Error", JOptionPane.INFORMATION_MESSAGE);
+          TraceManager.addDev("Specification could not be saved " + e.getMessage());
+          }*/
+    }
+
+    public String getLastRTLOTOSSpecification() {
+        return  rtlotos;
+    }
+
+    public String getLastTextualDTA() {
+        return dta;
+    }
+
+    public String getLastGraphicalDTA() {
+        return dtadot;
+    }
+
+    public String getLastTextualRG() {
+        return rg;
+    }
+
+    public String getLastGraphicalRG() {
+        return rgdot;
+    }
+
+    public String getLastTextualTLSA() {
+        return tlsa;
+    }
+
+    public String getLastGraphicalTLSA() {
+        return tlsadot;
+    }
+
+    public String getLastTextualRGAUT() {
+        return rgaut;
+    }
+
+    public String getLastGraphicalRGAUT() {
+        return rgautdot;
+    }
+
+    public String getLastTextualRGAUTProj() {
+        return rgautproj;
+    }
+
+    public String getLastGraphicalRGAUTProj() {
+        return rgautprojdot;
+    }
+
+    public String getLastProVerifSpecification() {
+        if (proverif == null) {
+            return "";
+        }
+
+        return proverif.getStringSpec();
+    }
+
+    public int getNbRTLOTOS() {
+        return nbRTLOTOS;
+    }
+
+    public String getLastTextualDesign() {
+        if (tm == null) {
+            return "";
+        } else {
+            return tm.printToStringBuffer().toString();
+        }
+    }
+
+    public int getNbSuggestedDesign() {
+        return nbSuggestedDesign;
+    }
+
+    // formal validation
+    public void reinitSIM() {
+        sim = null;
+        mgui.setMode(MainGUI.SIM_KO);
+    }
+
+    public void reinitDTA() {
+        dta = null;
+        dtadot = null;
+        mgui.setMode(MainGUI.DTADOT_KO);
+    }
+
+    public void reinitRG() {
+        rg = null;
+        rgdot = null;
+        mgui.setMode(MainGUI.RGDOT_KO);
+    }
+
+    public void reinitRGAUT() {
+        rgaut = null;
+        rgautdot = null;
+        mgui.setMode(MainGUI.RGAUTDOT_KO);
+        mgui.setMode(MainGUI.RGAUT_KO);
+    }
+
+    public void reinitRGAUTPROJDOT() {
+        rgautprojdot = null;
+        mgui.setMode(MainGUI.RGAUTPROJDOT_KO);
+    }
+
+    public void setSIM(String data) {
+        sim = data;
+        mgui.setMode(MainGUI.SIM_OK);
+    }
+
+    public void setDTA(String data) {
+        dta = data;
+    }
+
+    public void setDTADOT(String data) {
+        dtadot = data;
+        mgui.setMode(MainGUI.DTADOT_OK);
+    }
+
+    public void setRG(String data) {
+        rg = data;
+        mgui.setMode(MainGUI.RGDOT_OK);
+    }
+
+    public void setTLSA(String data) {
+        tlsa = data;
+        //mgui.setMode(MainGUI.TLSADOT_OK);
+    }
+
+    public void setTLSADOT(String data) {
+        tlsadot = data;
+        mgui.setMode(MainGUI.TLSADOT_OK);
+    }
+
+    public void setRGAut(String data) {
+        rgaut = data;
+        mgui.setMode(MainGUI.RGAUT_OK);
+    }
+
+    public String getLastRGAUT() {
+        return rgaut;
+    }
+
+    public void setRGDOT(String data) {
+        rgdot = data;
+        mgui.setMode(MainGUI.RGDOT_OK);
+    }
+
+    public void setRGAutDOT(String data) {
+        rgautdot = data;
+        mgui.setMode(MainGUI.RGAUTDOT_OK);
+    }
+
+    public void setRGAUTPROJ(String data) {
+        rgautproj = data;
+    }
+
+    public void setRGAUTPROJDOT(String data) {
+        rgautprojdot = data;
+        mgui.setMode(MainGUI.RGAUTPROJDOT_OK);
+    }
+
+    // Configuration
+
+    public String getPathRTL() {
+        return ConfigurationTTool.RTLPath;
+    }
+
+    public String getPathCaesar() {
+        return ConfigurationTTool.CaesarPath;
+    }
+
+    public String getPathCaesarOpen() {
+        return ConfigurationTTool.CaesarOpenPath;
+    }
+
+    public String getPathDTA2DOT() {
+        return ConfigurationTTool.DTA2DOTPath;
+    }
+
+    public String getPathRGSTRAP() {
+        return ConfigurationTTool.RGSTRAPPath;
+    }
+
+    public String getPathRG2TLSA() {
+        return ConfigurationTTool.RG2TLSAPath;
+    }
+
+    public String getHost() {
+        return ConfigurationTTool.RTLHost;
+    }
+
+    public static String getCaesarHost() {
+        return ConfigurationTTool.AldebaranHost;
+    }
+
+    public static String getHostAldebaran() {
+        return ConfigurationTTool.AldebaranHost;
+    }
+
+    public static String getPathAldebaran() {
+        return ConfigurationTTool.AldebaranPath;
+    }
+
+    public static String getPathBcgio() {
+        return ConfigurationTTool.BcgioPath;
+    }
+
+    public static String getPathBisimulator() {
+        return ConfigurationTTool.BisimulatorPath;
+    }
+
+    public String getPathBcgmerge() {
+        return ConfigurationTTool.BcgmergePath;
+    }
+
+    public String getPathBcgmin() {
+        return ConfigurationTTool.BcgminPath;
+    }
+
+    public String getPathVerifyta() {
+        return ConfigurationTTool.UPPAALVerifierPath;
+    }
+
+    public String getPathUPPAALVerifier() {
+        return ConfigurationTTool.UPPAALVerifierPath;
+    }
+
+    public String getPathUPPAALFile() {
+        return ConfigurationTTool.UPPAALCodeDirectory;
+    }
+
+    public String getUPPAALVerifierHost() {
+        return ConfigurationTTool.UPPAALVerifierHost;
+    }
+
+
+
+    public TURTLEModeling getTURTLEModeling() {
+        return tm;
+    }
+
+    public int getTURTLEModelingState() {
+        return tmState;
+    }
+
+    public TMLModeling getTMLModeling() {
+        return tmlm;
+    }
+    public TML2Avatar getTML2Avatar(){
+        return t2a;
+    }
+    public TMLMapping getArtificialTMLMapping() {
+        return artificialtmap;
+    }
+
+    public TMLMapping getTMLMapping() {
+        return tmap;
+    }
+
+    public UPPAALSpec getLastUPPAALSpecification() {
+        return uppaal;
+    }
+
+    // TREE MANAGEMENT
+
+    public String toString() {
+        return mgui.getTitle();
+    }
+
+    public int getChildCount() {
+        return panels.size() + 4;
+    }
+
+    public Object getChild(int index) {
+        if (index < panels.size()) {
+            return panels.elementAt(index);
+        } else if (index == panels.size()) {
+            return mcvdt;
+        } else if (index == (panels.size() + 1)) {
+            return gt;
+        }  else if (index == (panels.size() + 2)) {
+            return idt;
+        } else {
+            return st;
+        }
+
+    }
+
+    public int getIndexOfChild(Object child) {
+        int index = panels.indexOf(child);
+
+        if (index > -1) {
+            return index;
+        }
+
+        if (child == mcvdt) {
+            return panels.size();
+        }
+
+        if (child == gt) {
+            return panels.size() + 1;
+        }
+
+        if (child == idt) {
+            return panels.size() + 2;
+        }
+
+        return panels.size()+3;
+    }
+
+    // Projection management
+
+    public MasterGateManager getNewMasterGateManager() {
+        return new MasterGateManager(tm);
+    }
+
+    // Assume the inputData is in AUT format: generated by RTL or CADP
+    public String performProjection(String inputData, LinkedList<TClassAndGateDS> gates) {
+        StringBuffer result = new StringBuffer("");
+        StringReader sr = new StringReader(inputData);
+        BufferedReader br = new BufferedReader(sr);
+        String s;
+        String actionName, actionName1;
+        int index, index1, index2;
+        MasterGateManager mgm = new MasterGateManager(tm, 1);
+        //   Gate g;
+        GroupOfGates gog;
+        Hashtable <String, GroupOfGates> hashtable = new Hashtable<String, GroupOfGates>();
+
+        //   int cpt = 0;
+
+        //TraceManager.addDev("input data=" + inputData);
+
+        // Fill Hashtable
+        // int j;
+        for (TClassAndGateDS tag: gates) {
+            //TraceManager.addDev("TClass:" + tag.getTClassName() + " Gate:" + tag.getGateName());
+            //actionName = tag.getGateName();
+            //g = mgm.getGate(tag.getTClassName(), actionName);
+            //TraceManager.addDev("actionName = " + actionName + " gateName = " + g.getName());
+            //if (g != null) {
+            //gog = mgm.getGroupOfGatesByGate(g);
+            gog = mgm.groupOf(tag.getTClassName(), tag.getGateName());
+            if (gog != null) {
+                //TraceManager.addDev("Found a gog: >" + gog.getMasterGateName() + "<");
+                hashtable.put(gog.getMasterGateName().getName(), gog);
+                /*for(j=0;j<gog.size();j++) {
+                  g = gog.getGateAt(j);
+                  TraceManager.addDev("Putting: " + g.getName());
+                  hashtable.put(g.getName(), g);
+                  }*/
+            }
+            //}
+        }
+
+        try {
+            while((s = br.readLine()) != null) {
+                /*if (cpt % 10000 == 0) {
+                  TraceManager.addDev("cpt=" + cpt);
+                  }*/
+                //   cpt ++;
+
+                if (s.startsWith("des")) {
+                    result.append(s + "\n");
+                } else if (s.startsWith("(")) {
+                    index = s.indexOf("\"t\"");
+                    if (index > 0) {
+                        // temporal action
+                        // replace t with i
+                        s = s.replaceAll("\"t\"", "i");
+                        result.append(s + "\n");
+                    } else {
+                        //exit action?
+                        index = s.indexOf("\"exit\"");
+                        if (index > 0) {
+                            // exit action
+                            // replace t with i
+                            s = s.replaceAll("\"exit\"", "i");
+                            result.append(s + "\n");
+                        } else {
+                            // regular action
+                            // find the name of this action
+                            index1 = s.indexOf("i(");
+                            index2 = s.indexOf(")");
+                            actionName = s.substring(index1 + 2, index2);
+                            index = actionName.indexOf("<");
+                            if (index < 0) {
+                                actionName1 = actionName;
+                            } else {
+                                actionName1 = actionName.substring(0, index);
+                            }
+                            TraceManager.addDev("Action = >" + actionName1 + "<");
+
+                            gog = hashtable.get(actionName1);
+                            if (gog == null) {
+                                TraceManager.addDev("Not in hash");
+                                result.append(makeIAction(s) + "\n");
+                            } else {
+                                TraceManager.addDev("In hash");
+                                result.append(makeAction(s, actionName) + "\n");
+                            }
 
-		name = elt.getAttribute("name");
+                            // action to ignored or to project ?
+                            /*g = mgm.getGate(actionName1);
+                              if (g == null) {
+                              //TraceManager.addDev("null1");
+                              result.append(makeIAction(s) + "\n");
+                              } else {
+                              gog = mgm.getGroupOfGatesByGate(g);
+                              if (gog == null) {
+                              //TraceManager.addDev("null2");
+                              result.append(makeIAction(s) + "\n");
+                              } else {
+                              if (!belongTo(gog, gates)) {
+                              // Check if directly a master Gate!
+                              // A completer ...
+                              //TraceManager.addDev("null3");
+                              result.append(makeIAction(s) + "\n");
+                              } else {
+                              //TraceManager.addDev("action added: " + actionName);
+                              result.append(makeAction(s, actionName) + "\n");
+                              }
+                              }
+                              }*/
+                        }
+
+                    }
+                }
+            }
+        } catch (Exception e) {
+            TraceManager.addError("Exception during projection" + e.getMessage());
+            return null;
+        }
+        return new String(result);
+    }
+
+    // Assume the inputData is in AUT format and has been generated by CADP
+    // Note: might not work because of case sensitive problem...
+    public String convertCADP_AUT_to_RTL_AUT(String inputData, int max) {
+        StringBuffer result = new StringBuffer("");
+        StringReader sr = new StringReader(inputData);
+        BufferedReader br = new BufferedReader(sr);
+        String s, s1;
+        String actionName;
+        int index1, index2, index3, index4;
+        Gate g;
+        String g0, g1, g2;
+        int cpt, transi=0;
+        MasterGateManager mgm = new MasterGateManager(tm, 1);
+        Map<String, Gate> ht = mgm.getGatesUpperCaseHashTable();
+        warnings = new LinkedList<CheckingError> ();
+
+        //TraceManager.addDev("input data=" + inputData);
+
+        //   int cpt1 = 0;
+
+        try {
+            while((s = br.readLine()) != null) {
+                //   cpt1 ++;
+                //if (cpt1 % 100000 == 0) {
+                //TraceManager.addDev("=" + cpt1 + " / " + transi);
+                //}
+                if (s.charAt(0) == '(') {
+                    index1 = s.indexOf(",");
+                    if ((index1 > -1) && ((index1+1) < s.length())) {
+                        g1 = s.substring(0, index1 + 1);
+                        s = s.substring(index1+1, s.length());
+
+                        //TraceManager.addDev("g1=" + g1 + " s=" + s);
+
+                        index2 = s.indexOf(",");
+                        if ((index2 > -1) && ((index2+1) < s.length())) {
+                            g2 = s.substring(index2, s.length());
+                            s = s.substring(0, index2);
+                            s = s.trim();
+
+                            //TraceManager.addDev("g2=" + g2 + " s=" + s);
+
+                            // Get action id
+                            // Most common case: no data
+                            index3 = s.indexOf('"');
+                            if (index3 == -1) { // no data
+                                actionName = s;
+                                g0 = "";
+                            } else {
+                                // Extract action name
+                                actionName = s.substring(index3+1, s.indexOf('!')).trim();
+
+                                // Format data
+                                g0 = "<";
+                                cpt = 0;
+                                while((index4 = s.indexOf('!')) > -1) {
+                                    s = s.substring(index4+1, s.length());
+                                    if (cpt > 0) {
+                                        g0 += ",";
+                                    }
+                                    cpt ++;
+                                    index4 = s.indexOf('!');
+                                    if (index4 > -1) {
+                                        g0 += s.substring(0, index4);
+                                    } else {
+                                        g0 += s.substring(0, s.indexOf('"')).trim();
+                                    }
+                                }
+                                g0 += ">";
+                            }
 
-		TraceManager.addDev("ADD 2");
-		mgui.createAvatarPD(indexAnalysis, name);
+                            // Working on action name!
+                            //g = mgm.getGateLowerCase(actionName);
+                            g = (Gate)(ht.get(actionName));
+
+                            if (g != null) {
+                                //actionName1 = actionName;
+                                actionName = g.getName();
+                                //TraceManager.addDev("actionName = " + g.getName());
+                                /*if (mgm.nbOfPossibleGatesLowerCase(actionName1) > 1) {
+                                  CheckingError ce = new CheckingError(CheckingError.BEHAVIOR_ERROR, "Action " + actionName1 + " has several possible candidates ; " + actionName + " has been chosen");
+                                  warnings.add(ce);
+                                  }*/
+                            } else {
+                                TraceManager.addDev("actionName is not in hashtable: ->" + actionName + "<- length=" + actionName.length());
+                            }
 
-		TraceManager.addDev("ADD 3");
-		TDiagramPanel tdp = mgui.getAvatarADDPanel(indexAnalysis, indexTab, name);
+                            // Store result
+                            result.append(g1 + "\"i(" + actionName + g0 + ")\"" + g2 + "\n");
+                        }
+                    }
+                } else if (s.startsWith("des")) {
+                    index1 = s.indexOf(",");
+                    s1 = s.substring(index1+1, s.length());
+                    index1 = s1.indexOf(",");
+                    s1 = s1.substring(0, index1).trim();
+                    //TraceManager.addDev("nb of transitions=" + s);
+                    transi = Integer.decode(s1).intValue();
+                    if (transi > max) {
+                        return null;
+                    }
+                    result.append(s + "\n");
+                }
+            }
+        } catch (Exception e) {
+            TraceManager.addError("Exception convert0" + e.getMessage());
+            return null;
+        }
+        return new String(result);
+    }
+
+
+    public boolean belongTo(GroupOfGates gog, Vector<TClassAndGateDS> gates) {
+        int i, j;
+        TClassAndGateDS tcg;
+        String nameTClass, nameGate;
+        for(i=0; i<gog.size(); i++) {
+            nameTClass = gog.getTClassAt(i).getName();
+            nameGate = gog.getGateAt(i).getName();
+            for(j=0; j<gates.size(); j++) {
+                tcg = gates.elementAt(j);
+
+                if ((tcg.getTClassName().compareTo(nameTClass) == 0) && (tcg.getGateName().compareTo(nameGate) == 0)) {
+                    //TraceManager.addDev("Projected gate");
+                    return true;
+                }
+            }
+
+        }
+        return false;
+
+    }
+
+    public String makeIAction(String s) {
+        int index1, index2;
+        index1 = s.indexOf("i(");
+        index2 = s.indexOf(")");
+        return s.substring(0, index1-1) + "i" + s.substring(index2+2, s.length());
+    }
+
+    public String makeAction(String s, String actionName) {
+        int index1, index2;
+        index1 = s.indexOf("i(");
+        index2 = s.indexOf(")");
+        return s.substring(0, index1) + actionName + s.substring(index2+1, s.length());
+    }
+
+    public void enableUndo(boolean b) {
+        undoRunning = !b;
+    }
+
+    public boolean isUndoEnable() {
+        return !undoRunning;
+    }
+
+    // UNDO MANAGEMENT
+
+    // This function is not be performed when executing an undo
+    // if variable undoRunnin has been set to true
+    public void saveOperation(Point p) {
+        if (undoRunning) {
+            return;
+        }
+
+        //TraceManager.addDev("Save operation");
+
+        String s = makeXMLFromTurtleModeling(-1);
+
+        if ((pointerOperation > -1) && (pointerOperation < savedOperations.size() - 1)) {
+            // some save operations must be erased
+            for (int i = pointerOperation +1; i<savedOperations.size(); i++) {
+                savedOperations.removeElementAt(i);
+                savedPanels.removeElementAt(i);
+                i --;
+            }
+        }
+
+        // save actions on tab
+        int size = savedPanels.size();
+        if (size > 0) {
+            Point p1  = savedPanels.elementAt(size - 1); // panels are saved under the form of a point -> x = analysis/design, y = panel
+            if (p == null)
+                p = p1;
+            /*if ((p1.x != p.x) || (p1.y != p.y)){
+              savedOperations.add(savedOperations.elementAt(size - 1));
+              savedPanels.add(p);
+              if (savedOperations.size() > nbMaxSavedOperations) {
+              savedOperations.removeElementAt(0);
+              savedPanels.removeElementAt(0);
+              }
+              }*/
+        }
+
+        savedOperations.add(s);
+        savedPanels.add(p);
+        if (savedOperations.size() > nbMaxSavedOperations) {
+            savedOperations.removeElementAt(0);
+            savedPanels.removeElementAt(0);
+        }
+        pointerOperation = savedOperations.size() - 1;
+        //TraceManager.addDev("Setting pointer to " + pointerOperation);
+
+        selectBackwardMode();
+    }
+
+    public void backward() {
+        undoRunning = true;
+        TraceManager.addDev("Nb Of saved operations:" + savedOperations.size() + " pointer=" + pointerOperation);
+        if ((pointerOperation < 1)        || (savedOperations.size() < 2)) {
+            TraceManager.addDev("Undo not possible");
+            undoRunning = false;
+            return;
+        }
+
+        removeAllComponents();
+        mgui.reinitMainTabbedPane();
+
+        // Issue #42: the selected tabs should be memorized before decrementing the pointer
+        final Point prevSelectedTabs = savedPanels.elementAt( pointerOperation );
+
+        try {
+            pointerOperation --;
+            TraceManager.addDev("Decrementing pointer =" + pointerOperation);
+            loadModelingFromXML((String)(savedOperations.elementAt(pointerOperation)));
+
+        } catch (Exception e) {
+            TraceManager.addError("Exception in backward: " + e.getMessage());
+        }
+
+        TraceManager.addDev("Selecting tab");
+
+        // Issue #42:
+        //Point p = savedPanels.elementAt(pointerOperation);
+
+        if ( prevSelectedTabs != null ) {
+            TraceManager.addDev("Selecting tab panel=" + prevSelectedTabs.getX() + " diagram=" + prevSelectedTabs.getY());
+            TDiagramPanel tdp = mgui.selectTab( prevSelectedTabs );
+            tdp.mode = TDiagramPanel.NORMAL;
+            tdp.setDraw(true);
+            tdp.repaint();
+        }
+
+
+        TraceManager.addDev("Selecting backward mode");
+        selectBackwardMode();
+        undoRunning = false;
+    }
+
+    public void selectBackwardMode() {
+        if (pointerOperation <0) {
+            mgui.setMode(MainGUI.NO_BACKWARD);
+            mgui.setMode(MainGUI.NO_FORWARD);
+        } else {
+
+            // forward
+            if (pointerOperation < savedOperations.size() - 1) {
+                mgui.setMode(MainGUI.FORWARD);
+            }  else {
+                mgui.setMode(MainGUI.NO_FORWARD);
+            }
+
+            // backward
+            if (pointerOperation > 0) {
+                mgui.setMode(MainGUI.BACKWARD);
+            } else {
+                mgui.setMode(MainGUI.NO_BACKWARD);
+            }
+        }
+    }
+
+
+    public void forward() {
+        if ((pointerOperation < 0) || (pointerOperation >          savedOperations.size() - 2)) {
+            return;
+        }
+
+        undoRunning = true;
+        removeAllComponents();
+        mgui.reinitMainTabbedPane();
+
+        try {
+            pointerOperation ++;
+            loadModelingFromXML((String)(savedOperations.elementAt(pointerOperation)));
+        } catch (Exception e) {
+            TraceManager.addError("Exception in forward: " + e.getMessage());
+        }
+
+        Point p = (Point)(savedPanels.elementAt(pointerOperation));
+        if (p != null) {
+            TDiagramPanel tdp = mgui.selectTab(p);
+            tdp.mode = TDiagramPanel.NORMAL;
+            tdp.setDraw(true);
+            tdp.repaint();
+        }
+
+        selectBackwardMode();
+        undoRunning = false;
+    }
+
+
+    // BUILDING A TURTLE MODELING AND CHECKING IT
+    public boolean checkTURTLEModeling(LinkedList<TClassInterface> tclasses, DesignPanel dp, boolean overideSyntaxChecking) {
+        // Builds a TURTLE modeling from diagrams
+        //warnings = new Vector();
+        //checkingErrors = null;
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+        //tm = new TURTLEModeling();
+        //listE = new CorrespondanceTGElement();
+        mgui.reinitCountOfPanels();
+
+        DesignPanelTranslator dpt = new DesignPanelTranslator(dp);
+        tm = dpt.generateTURTLEModeling(tclasses, "");
+        tmState = 0;
+
+        listE = dpt.getCorrespondanceTGElement();
+        checkingErrors = dpt.getErrors();
+        warnings = dpt.getWarnings();
+        if ((checkingErrors != null) && (checkingErrors.size() >0)){
+            return false;
+        }
+
+        // modeling is built
+        // Now check it !
+        if (!overideSyntaxChecking) {
+            TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE);
+
+            checkingErrors = tmc.syntaxAnalysisChecking();
+            warnings.addAll(tmc.getWarnings());
+
+            if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+                analyzeErrors();
+                return false;
+            } else {
+                return true;
+            }
+        }
+
+        return true;
+    }
+
+    // BUILDING An AVATAR Design AND CHECKING IT
+    public boolean checkAvatarDesign(LinkedList<AvatarBDStateMachineOwner> blocks, AvatarDesignPanel adp, boolean _optimize) {
+        // Builds a TURTLE modeling from diagrams
+        //warnings = new Vector();
+        //checkingErrors = null;
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+        //tm = new TURTLEModeling();
+        //listE = new CorrespondanceTGElement();
+        mgui.reinitCountOfPanels();
+
+        //avatarspec = new AvatarSpecification("avatarspecification", adp);
+
+        AvatarDesignPanelTranslator adpt = new AvatarDesignPanelTranslator(adp);
+        avatarspec = adpt.generateAvatarSpecification(blocks);
+        avatarspec.setInformationSource(adp);
+        optimizeAvatar = _optimize;
+        //TraceManager.addDev("AvatarSpec:" + avatarspec.toString() + "\n\n");
+        tmState = 3;
+
+        listE = adpt.getCorrespondanceTGElement();
+        checkingErrors = adpt.getErrors();
+        warnings = adpt.getWarnings();
+        if ((checkingErrors != null) && (checkingErrors.size() >0)){
+            return false;
+        }
+        return true;
+
+        // Modeling is built
+        // Now check it !
+        /*if (!overideSyntaxChecking) {
+          TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE);
+
+          checkingErrors = tmc.syntaxAnalysisChecking();
+          warnings.addAll(tmc.getWarnings());
+
+          if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+          analyzeErrors();
+          return false;
+          } else {
+          return true;
+          }
+          }
+
+          return true;*/
+    }
+
+    // Return values
+    // -1: error
+    // -2: no mutex
+    // -3: invariant for mutex not found
+    // else: invariant found! -> invariant index
+    public int computeMutex() {
+        if (avatarspec == null) {
+            return -1;
+        }
+
+        AvatarDesignPanel adp = null;
+
+        try {
+            adp = (AvatarDesignPanel)(avatarspec.getInformationSource());
+        } catch (Exception e) {
+            TraceManager.addDev("Exception gtm: " + e.getMessage());
+            return -1;
+        }
+
+        // Building the list of all states in the mutex
+        LinkedList<TGComponent> compInMutex = adp.getListOfComponentsInMutex();
+        TraceManager.addDev("Nb of elements in mutex:" + compInMutex.size());
+
+        if (compInMutex.size() ==0) {
+            return -2;
+        }
+
+        LinkedList<TGComponent> comps;
+        boolean found;
+        int nbOfFound;
+        int cpt = 0;
+        // Go thru invariants, and see whether one contains
+        for(Invariant inv: invariants) {
+            comps = inv.getComponents();
+            nbOfFound = 0;
+            for(TGComponent tgc_mutex: compInMutex) {
+                found = false;
+                for(TGComponent tgc_inv: comps) {
+                    if (tgc_mutex == tgc_inv) {
+                        found = true;
+                        break;
+                    }
+                }
+                if (!found) {
+                    break;
+                }
+                nbOfFound ++;
+            }
+            if (nbOfFound == compInMutex.size()) {
+                TraceManager.addDev("Mutex found in inv:" + cpt);
+                for(TGComponent tgc: compInMutex) {
+                    tgc.setMutexResult(TGComponent.MUTEX_OK);
+                }
+                return cpt;
+            }
+            cpt ++;
+        }
+
+
+        for(TGComponent tgc: compInMutex) {
+            tgc.setMutexResult(TGComponent.MUTEX_UNKNOWN);
+        }
+
+        return -3;
+
+
+    }
+
+    public void clearGraphicalInfoOnInvariants() {
+        if (avatarspec == null) {
+            return;
+        }
+
+        AvatarDesignPanel adp = null;
+
+        try {
+            adp = (AvatarDesignPanel)(avatarspec.getInformationSource());
+        } catch (Exception e) {
+            TraceManager.addDev("Exception gtm: " + e.getMessage());
+            return;
+        }
+
+        if (adp == null) {
+            return;
+        }
+
+        adp.removeAllMutualExclusionWithMasterMutex();
+
+
+
+    }
+
+
+    // Returns the number of states found
+    // Returns -1 in case of error
+    public int computeMutexStatesWith(AvatarSMDState state) {
+        Vector<TGComponent> list = new Vector<TGComponent>();
+
+        if (state == null) {
+            // DB Issue 17 this will cause null pointer exception
+            //                  state.setMutexWith(TGComponent.MUTEX_UNKNOWN);
+            return -1;
+        }
+
+        for(Invariant inv: invariants) {
+            if (inv.containsComponent(state)) {
+                // All other states are in mutual exclusion
+                for(TGComponent tgc: inv.getComponents()) {
+                    if ((tgc instanceof AvatarSMDState) && (tgc != state)) {
+                        if (tgc.getTDiagramPanel() != state.getTDiagramPanel()) {
+                            if (!(list.contains(tgc))) {
+                                tgc.setMutualExclusionWithMasterMutex(state.getTDiagramPanel().getName() + "/" + state.getStateName());
+                                list.add(tgc);
 
-		TraceManager.addDev("ADD 3.1");
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if (list.size() > 0) {
+            state.setMutexWith(TGComponent.MUTEX_OK);
+        } else {
+            state.setMutexWith(TGComponent.MUTEX_UNKNOWN);
+        }
+
+        return list.size();
+
+    }
+
+
+    public void computeAllMutualExclusions() {
+        TURTLEPanel tp = mgui.getCurrentTURTLEPanel();
+
+        if (tp == null) {
+            return;
+        }
+
+        if (!(tp instanceof AvatarDesignPanel)) {
+            return;
+        }
+
+        AvatarDesignPanel adp = (AvatarDesignPanel)(tp);
+        adp.reinitMutualExclusionStates();
+
+        // First step: build a list of all states being in invariants
+        Vector<AvatarSMDState> v = new Vector<AvatarSMDState>();
+        for(Invariant inv: invariants) {
+            for(TGComponent tgc: inv.getComponents()) {
+                if (tgc instanceof AvatarSMDState) {
+                    if (!(v.contains(tgc))) {
+                        v.add((AvatarSMDState)tgc);
+                    }
+                }
+            }
+        }
+
+        // Then, add to all states its list of mutually exclusive states
+
+        for(AvatarSMDState s: v) {
+            Vector<AvatarSMDState> v0 = new Vector<AvatarSMDState>();
+            for(Invariant inv: invariants) {
+                if (inv.containsComponent(s)) {
+                    for(TGComponent tgc: inv.getComponents()) {
+                        if ((tgc instanceof AvatarSMDState) && (tgc != s)) {
+                            if (tgc.getTDiagramPanel() != s.getTDiagramPanel()) {
+                                if (!(v0.contains(tgc))) {
+                                    v0.add((AvatarSMDState)tgc);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            TraceManager.addDev("State " + s.getStateName() + " has " + v0.size() + " mutually eclusive states");
+
+            for(AvatarSMDState s0: v0) {
+                s.addMutexState(s0);
+            }
+        }
+
+
+    }
+
+    // From AVATAR to TURTLEModeling
+    public boolean translateAvatarSpecificationToTIF() {
+        AVATAR2TURTLE att = new AVATAR2TURTLE(avatarspec);
+        tm = att.generateTURTLEModeling();
+
+        TURTLEModelChecker tmc = new TURTLEModelChecker(tm, listE);
+
+        checkingErrors = tmc.syntaxAnalysisChecking();
+        warnings.addAll(tmc.getWarnings());
+
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            analyzeErrors();
+            return false;
+        } else {
+            return true;
+        }
+
+    }
+
+    public List<CheckingError> getCheckingErrors() {
+        return checkingErrors;
+    }
+
+    public List<CheckingError> getCheckingWarnings() {
+        return warnings;
+    }
+
+
+    // SAVING AND LOADING IN XML
+    public static String transformString(String s) {
+        if (s != null) {
+            s = Conversion.replaceAllChar(s, '&', "&amp;");
+            s = Conversion.replaceAllChar(s, '<', "&lt;");
+            s = Conversion.replaceAllChar(s, '>', "&gt;");
+            s = Conversion.replaceAllChar(s, '"', "&quot;");
+            s = Conversion.replaceAllChar(s, '\'', "&apos;");
+        }
+        return s;
+    }
+
+    public static String encodeString(String s) {
+        return s;
+    }
+
+    public static String decodeString(String s) throws MalformedModelingException {
+        if (s == null)
+            return s;
+        byte b[] = null;
+        try {
+            b = s.getBytes("ISO-8859-1");
+            return new String(b);
+        } catch (Exception e) {
+            throw new MalformedModelingException();
+        }
+    }
+
+    public String mergeTURTLEGModeling(String modeling1, String modeling2) {
+        int index1 = modeling1.indexOf("</TURTLEGMODELING");
+        int index2 = modeling2.indexOf("<TURTLEGMODELING");
+        if ((index1 == -1) || (index2 == -1)) {
+            return null;
+        }
+
+        String modeling = modeling1.substring(0, index1);
+        String tmp = modeling2.substring(index2, modeling2.length());
+        index2 = modeling2.indexOf('<');
+        if (index2 == -1) {
+            return null;
+        }
+
+        tmp = tmp.substring(index2+1, tmp.length());
+
+        return modeling + tmp;
+    }
+
+    public String makeXMLFromComponentOfADiagram(TDiagramPanel tdp, TGComponent tgc, int copyMaxId, int _decX, int _decY) {
+        StringBuffer sb = new StringBuffer();
+
+        //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
+        sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGSELECTEDCOMPONENTS ");
+        sb.append("version=\"" + DefaultText.getVersion());
+        sb.append("\" copyMaxId=\"" + copyMaxId);
+        sb.append("\" decX=\"" + _decX);
+        sb.append("\" decY=\"" + _decY);
+        sb.append("\" >\n\n");
+
+        StringBuffer s;
+        String str;
+
+        s = tdp.saveComponentInXML(tgc);
+
+        if (tgc instanceof AvatarBDBlock) {
+            AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
+            s.append(asmdp.saveInXML());
+            LinkedList<AvatarBDBlock> list = ((AvatarBDBlock)tgc).getFullBlockList();
+            for(AvatarBDBlock b:list) {
+                asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), b.getValue());
+                s.append(asmdp.saveInXML());
+            }
+        }
+
+        if (tgc instanceof AvatarBDLibraryFunction) {
+            AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), ((AvatarBDLibraryFunction) tgc).getFunctionName ());
+            s.append(asmdp.saveInXML());
+        }
+
+        if (tgc instanceof TCDTClass) {
+            TActivityDiagramPanel tadp = mgui.getActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
+            s.append(tadp.saveInXML());
+        }
+
+        if (tgc instanceof TOSClass) {
+            TURTLEOSActivityDiagramPanel tosadp = mgui.getTURTLEOSActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
+            s.append(tosadp.saveInXML());
+        }
+
+        if (tgc instanceof TMLTaskOperator) {
+            TMLActivityDiagramPanel tmladp1 = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
+            s.append(tmladp1.saveInXML());
+        }
+
+        if (tgc instanceof TMLCPrimitiveComponent) {
+            TMLActivityDiagramPanel tmladp2 = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), tgc.getValue());
+            s.append(tmladp2.saveInXML());
+        }
+
+        if (tgc instanceof TMLCCompositeComponent) {
+            TMLActivityDiagramPanel tmladp3;
+            List<TMLCPrimitiveComponent> list =  ((TMLCCompositeComponent)tgc).getAllPrimitiveComponents();
+
+            for (TMLCPrimitiveComponent comp: list) {
+                tmladp3 =  mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), comp.getValue());
+                s.append(tmladp3.saveInXML());
+            }
+        }
+
+        if (s == null) {
+            return null;
+        }
+        sb.append(s);
+        sb.append("\n\n");
+        sb.append("</TURTLEGSELECTEDCOMPONENTS>");
+
+        str = new String(sb);
+        str = encodeString(str);
+
+        return str;
+    }
+
+
+    public String makeXMLFromSelectedComponentOfADiagram(TDiagramPanel tdp, int copyMaxId, int _decX, int _decY) {
+        StringBuffer sb = new StringBuffer();
+        //TraceManager.addDev("Making copy");
+
+        //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
+        sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGSELECTEDCOMPONENTS ");
+        sb.append("version=\"" + DefaultText.getVersion());
+        sb.append("\" copyMaxId=\"" + copyMaxId);
+        sb.append("\" decX=\"" + _decX);
+        sb.append("\" decY=\"" + _decY);
+        sb.append("\" >\n\n");
+
+        StringBuffer s;
+        String str;
+
+        s = tdp.saveSelectedInXML();
+
+        final Vector<TCDTClass> classes = tdp.selectedTclasses();
+
+        if ((classes != null) && (classes.size() > 0)) {
+            TCDTClass t;
+            TActivityDiagramPanel tadp;
+            for(int i=0; i<classes.size(); i++) {
+                t = classes.elementAt(i);
+                tadp = mgui.getActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue());
+                s.append(tadp.saveInXML());
+            }
+        }
+
+        //Added by Solange
+        //bug removed by Emil
+        if (tdp instanceof ProactiveCSDPanel) {
+            final Vector<ProCSDComponent> comp =((ProactiveCSDPanel)tdp).selectedProCSDComponent(null);
+
+            if ((comp != null) && (comp.size() > 0)) {
+                ProCSDComponent t;
+                ProactiveSMDPanel psmd;
+                for(int i=0; i<comp.size(); i++) {
+                    t = comp.elementAt(i);
+                    psmd = mgui.getSMDPanel(mgui.getCurrentSelectedIndex(), t.getValue());
+                    if (psmd!=null)
+                        s.append(psmd.saveInXML());
+                }
+            }
+        }
+        //until here
+
+
+        final Vector<TOSClass> toClasses = tdp.selectedTURTLEOSClasses();
+
+        if ((toClasses != null) && (toClasses.size() > 0)) {
+            //TraceManager.addDev("Saving TURTLEOS activity diagram Panel...");
+            TOSClass t;
+            TURTLEOSActivityDiagramPanel tosadp;
+            for(int i=0; i<toClasses.size(); i++) {
+                t = toClasses.elementAt(i);
+                tosadp = mgui.getTURTLEOSActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue());
+                s.append(tosadp.saveInXML());
+            }
+        }
+
+        final Vector<TMLTaskOperator> operators = tdp.selectedTMLTasks();
+        if ((operators != null) && (operators.size() > 0)) {
+            //TraceManager.addDev("Saving TML activity diagram Panel...");
+            TMLTaskOperator t;
+            TMLActivityDiagramPanel tmladp;
+            for(int i=0; i<operators.size(); i++) {
+                t = operators.elementAt(i);
+                tmladp = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), t.getValue());
+                s.append(tmladp.saveInXML());
+            }
+        }
+
+        final Vector<AvatarBDBlock> blocks = tdp.selectedAvatarBDBlocks();
+        if ((blocks != null) && (blocks.size() > 0)) {
+            //TraceManager.addDev("Saving TML activity diagram Panel...");
+            AvatarBDBlock abdb;
+            AvatarSMDPanel asmdp;
+            for(int i=0; i<blocks.size(); i++) {
+                abdb = blocks.elementAt(i);
+                asmdp = mgui.getAvatarSMDPanel(mgui.getCurrentSelectedIndex(), abdb.getBlockName());
+                s.append(asmdp.saveInXML());
+
+            }
+        }
+
+        final Vector<TMLCPrimitiveComponent> primComps = tdp.selectedCPrimitiveComponent();
+
+        if ((primComps != null) && (primComps.size() > 0)) {
+            //TraceManager.addDev("Saving TML activity diagram Panel...");
+            TMLCPrimitiveComponent ct;
+            TMLActivityDiagramPanel tmladp;
+            for(int i=0; i<primComps.size(); i++) {
+                ct = primComps.elementAt(i);
+                tmladp = mgui.getTMLActivityDiagramPanel(mgui.getCurrentSelectedIndex(), ct.getValue());
+                s.append(tmladp.saveInXML());
+            }
+        }
+
+        if (s == null) {
+            return null;
+        }
+        sb.append(s);
+        sb.append("\n\n");
+        sb.append("</TURTLEGSELECTEDCOMPONENTS>");
+
+        str = new String(sb);
+        str = encodeString(str);
+
+        TraceManager.addDev("Copy done");
+        //TraceManager.addDev(str);
+
+        return str;
+    }
+
+    public String makeOneDiagramXMLFromGraphicalModel(TURTLEPanel tp, int indexOfDiagram) {
+        StringBuffer sb = new StringBuffer();
+        //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
+        sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGMODELING version=\"" + DefaultText.getVersion() + "\">\n\n");
+
+        StringBuffer s;
+        String str;
+
+
+        s = tp.saveInXML(indexOfDiagram);
+
+        sb.append(s);
+        sb.append("\n\n");
+
+
+        sb.append("</TURTLEGMODELING>");
+
+        str = new String(sb);
+        str = encodeString(str);
+
+        return str;
+    }
+
+    public String makeXMLFromTurtleModeling(int index) {
+        return makeXMLFromTurtleModeling(index, null);
+    }
+
+    public String makeXMLFromTurtleModeling(int index, String extensionToName) {
+        StringBuffer sb = new StringBuffer();
+        //sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<TURTLEGMODELING>\n\n");
+        sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGMODELING version=\"" + DefaultText.getVersion() + "\">\n\n");
+
+        StringBuffer s;
+        String str;
+
+        TURTLEPanel tp;
+        int i;
+        // search for diagram panels (Design)
+        for(i=0; i<panels.size(); i++) {
+            if ((index == -1) || (i == index)) {
+                tp = (TURTLEPanel)(panels.elementAt(i));
+                s = tp.saveInXML(extensionToName);
+                if (s == null) {
+                    return null;
+                }
+                sb.append(s);
+                sb.append("\n\n");
+            }
+        }
+
+        sb.append("</TURTLEGMODELING>");
+
+        str = new String(sb);
+        str = encodeString(str);
+
+        return str;
+    }
+
+    public void removeAllComponents() {
+        TDiagramPanel tdp;
+        int i, j;
+        Vector<TDiagramPanel> panelss;
+        // search for diagram panels
+        for(i=0; i<panels.size(); i++) {
+            panelss = (((TURTLEPanel)(panels.elementAt(i))).panels);
+            for(j=0; j<panelss.size(); j++) {
+                tdp = (TDiagramPanel)(panelss.elementAt(j));
+                tdp.removeAll();
+            }
+        }
+    }
+
+
+    private void prepareErrors() {
+        checkingErrors = new ArrayList<CheckingError>();
+        warnings = new ArrayList<CheckingError>();
+    }
 
-		if (tdp == null) {
-			// Try to get the first diagram of the panel
-			tdp = mgui.getAvatarADDPanelByIndex(indexAnalysis, indexTab);
-			if (tdp == null) {
-				TraceManager.addDev("ADD 3.2");
-				throw new MalformedModelingException();
-			}
-		}
-		tdp.removeAll();
-		TraceManager.addDev("ADD 4");
+    public void copyModelingFromXML(TDiagramPanel tdp, String s, int X, int Y) throws MalformedModelingException {
+        //TraceManager.addDev("copyModelingFromXML: " + s);
+        //TraceManager.addDev("tdp: " + tdp);
 
-		loadDiagram(elt, tdp);
-		TraceManager.addDev("ADD 5");
-	}
+        //TraceManager.addDev(s);
+        //TraceManager.addDev("copyModelingFromXML:");
+        //LinkedList ComponentsList=tdp.getComponentList();
 
-	public void loadAvatarPD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
+        prepareErrors();
 
-		name = elt.getAttribute("name");
-		mgui.createAvatarPD(indexAnalysis, name);
 
-		TDiagramPanel tdp = mgui.getAvatarPDPanel(indexAnalysis, indexTab, name);
+        int beginIndex = tdp.getComponentList().size();
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+        //Added by Solange
+        int cuenta=1;
 
-		loadDiagram(elt, tdp);
-	}
+        s = decodeString(s);
 
-	public void loadAvatarCD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
+        //TraceManager.addDev("copy=" + s);
 
-		name = elt.getAttribute("name");
-		mgui.createAvatarCD(indexAnalysis, name);
+        ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes());
+        if ((dbf == null) || (db == null)) {
+            throw new MalformedModelingException();
+        }
 
-		TDiagramPanel tdp = mgui.getAvatarCDPanel(indexAnalysis, indexTab, name);
+        int i;
+        //int copyMaxId;
+        int _decX = 0, _decY = 0;
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+        try {
+            // building nodes from xml String
+            Document doc = db.parse(bais);
+            NodeList nl;
+
+            decId = tdp.getMaxId() + 1;
+            TGComponent.setGeneralId(TGComponent.getGeneralId() + decId + 2);
+            nl = doc.getElementsByTagName("TURTLEGSELECTEDCOMPONENTS");
+
+            if (nl == null) {
+                return;
+            }
+
+            Node adn;
+            Element elt;
+
+            for(i=0; i<nl.getLength(); i++) {
+                adn = nl.item(i);
+                if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                    elt = (Element) adn;
+                    _decX = X - Integer.decode(elt.getAttribute("decX")).intValue();
+                    _decY = Y - Integer.decode(elt.getAttribute("decY")).intValue();
+                    //copyMaxId = Integer.decode(elt.getAttribute("copyMaxId")).intValue();
+                }
+            }
+
+            // Managing diagrams
+            if (tdp instanceof TClassDiagramPanel) {
+                TraceManager.addDev("TClassDiagramPanel copy");
+
+                nl = doc.getElementsByTagName("TClassDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+
+                TClassDiagramPanel tcdp = (TClassDiagramPanel)tdp;
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tcdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        tcdp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Class diagram : " + tcdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tcdp);
+                        makePostProcessing(tcdp);
+                        //TraceManager.addDev("Class diagram : " + tcdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tcdp);
+                        //TraceManager.addDev("Class diagram : " + tcdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tcdp);
+                        //TraceManager.addDev("Class diagram : " + tcdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tcdp);
+                        tcdp.structureChanged();
+                        //TraceManager.addDev("Class diagram : " + tcdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(tcdp, beginIndex);
+                        //TraceManager.addDev("Class diagram : " + tcdp.getName() + " post loading done");
+                    }
+                }
+                docCopy = null;
+
+            } else if (tdp instanceof TActivityDiagramPanel) {
+                TraceManager.addDev("TActivityDiagramPanel copy");
+                nl = doc.getElementsByTagName("TActivityDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                TActivityDiagramPanel tadp = (TActivityDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tadp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        tadp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                        connectConnectorsToRealPoints(tadp);
+                        tadp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                        makePostLoading(tadp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof InteractionOverviewDiagramPanel) {
+
+                nl = doc.getElementsByTagName("InteractionOverviewDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                InteractionOverviewDiagramPanel iodp = (InteractionOverviewDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (iodp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), iodp);
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), iodp);
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), iodp);
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " real points");
+                        connectConnectorsToRealPoints(iodp);
+                        iodp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
+                        makePostLoading(iodp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof ui.sd.SequenceDiagramPanel) {
+                //TraceManager.addDev("Sequence diagram!");
+                nl = doc.getElementsByTagName("SequenceDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                ui.sd.SequenceDiagramPanel sdp = (ui.sd.SequenceDiagramPanel)tdp;
+
+                //TraceManager.addDev("Sequence diagram!");
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (sdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), sdp);
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), sdp);
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), sdp);
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " real points");
+                        connectConnectorsToRealPoints(sdp);
+                        sdp.structureChanged();
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " post loading");
+                        makePostLoading(sdp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof ui.sd2.SequenceDiagramPanel) {
+                //TraceManager.addDev("Sequence diagram!");
+                nl = doc.getElementsByTagName("SequenceDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                ui.sd2.SequenceDiagramPanel sdp = (ui.sd2.SequenceDiagramPanel)tdp;
+
+                //TraceManager.addDev("Sequence diagram!");
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (sdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), sdp);
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), sdp);
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), sdp);
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " real points");
+                        connectConnectorsToRealPoints(sdp);
+                        sdp.structureChanged();
+                        //TraceManager.addDev("Sequence diagram: " + sdp.getName() + " post loading");
+                        makePostLoading(sdp, beginIndex);
+                    }
+                }
+
+            } else if (tdp instanceof UseCaseDiagramPanel) {
+                nl = doc.getElementsByTagName("UseCaseDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                UseCaseDiagramPanel ucdp = (UseCaseDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (ucdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ucdp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ucdp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ucdp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points");
+                        connectConnectorsToRealPoints(ucdp);
+                        ucdp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
+                        makePostLoading(ucdp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof TDeploymentDiagramPanel) {
+                nl = doc.getElementsByTagName("TDeploymentDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                TDeploymentDiagramPanel tddp = (TDeploymentDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tddp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tddp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tddp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tddp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tddp);
+                        tddp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
+                        makePostLoading(tddp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof NCDiagramPanel) {
+                nl = doc.getElementsByTagName("NCDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                NCDiagramPanel ncdp = (NCDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (ncdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ncdp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ncdp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ncdp);
+                        //TraceManager.addDev("Activity diagram : " + sdp.getName() + " real points");
+                        connectConnectorsToRealPoints(ncdp);
+                        ncdp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + iodp.getName() + " post loading");
+                        makePostLoading(ncdp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof RequirementDiagramPanel) {
+                nl = doc.getElementsByTagName("TRequirementDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                RequirementDiagramPanel rdp = (RequirementDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (rdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), rdp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), rdp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), rdp);
+                        connectConnectorsToRealPoints(rdp);
+                        rdp.structureChanged();
+                        makePostLoading(rdp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof EBRDDPanel) {
+                nl = doc.getElementsByTagName("EBRDDPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                EBRDDPanel ebrddp = (EBRDDPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (ebrddp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ebrddp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ebrddp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ebrddp);
+                        connectConnectorsToRealPoints(ebrddp);
+                        ebrddp.structureChanged();
+                        makePostLoading(ebrddp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof AttackTreeDiagramPanel) {
+                nl = doc.getElementsByTagName("AttackTreeDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                AttackTreeDiagramPanel atdp = (AttackTreeDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (atdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), atdp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), atdp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), atdp);
+                        connectConnectorsToRealPoints(atdp);
+                        atdp.structureChanged();
+                        makePostLoading(atdp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof TMLTaskDiagramPanel) {
+                nl = doc.getElementsByTagName("TMLTaskDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+
+                TMLTaskDiagramPanel tmltdp = (TMLTaskDiagramPanel)tdp;
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tmltdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        tmltdp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
 
-		loadDiagram(elt, tdp);
-	}
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmltdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(tmltdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmltdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmltdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmltdp);
+                        tmltdp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(tmltdp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+            }else if (tdp instanceof DiplodocusMethodologyDiagramPanel) {
+                nl = doc.getElementsByTagName("DiplodocusMethodologyDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+
+                DiplodocusMethodologyDiagramPanel tmltdp = (DiplodocusMethodologyDiagramPanel)tdp;
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
 
-	public void loadAvatarAD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
+                        if (tmltdp == null) {
+                            throw new MalformedModelingException();
+                        }
 
-		name = elt.getAttribute("name");
-		mgui.createAvatarAD(indexAnalysis, name);
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
 
-		TDiagramPanel tdp = mgui.getAvatarADPanel(indexAnalysis, indexTab, name);
+                        decX = _decX;
+                        decY = _decY;
+
+                        tmltdp.loadExtraParameters(elt);
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+                        //TraceManager.addDev("Toto 2");
 
-		loadDiagram(elt, tdp);
-	}
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmltdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(tmltdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmltdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmltdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmltdp);
+                        tmltdp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(tmltdp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
 
-	// TURTLE Design
-	public void loadTClassDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		String name;
-		TDiagramPanel tdp;
+            }else if (tdp instanceof AvatarMethodologyDiagramPanel) {
+                nl = doc.getElementsByTagName("AvatarMethodologyDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+
+                AvatarMethodologyDiagramPanel amdp = (AvatarMethodologyDiagramPanel)tdp;
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (amdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        amdp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(amdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(amdp);
+                        amdp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(amdp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+            }else if (tdp instanceof SysmlsecMethodologyDiagramPanel) {
+                nl = doc.getElementsByTagName("SysmlsecMethodologyDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+
+                SysmlsecMethodologyDiagramPanel amdp = (SysmlsecMethodologyDiagramPanel)tdp;
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (amdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        amdp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(amdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(amdp);
+                        amdp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(amdp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+            }  else if (tdp instanceof TMLComponentTaskDiagramPanel) {
+                nl = doc.getElementsByTagName("TMLComponentTaskDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+
+                TMLComponentTaskDiagramPanel tmlctdp = (TMLComponentTaskDiagramPanel)tdp;
+                //tmlctdp.updateReferences();
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tmlctdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        tmlctdp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlctdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(tmlctdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlctdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlctdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmlctdp);
+                        tmlctdp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(tmlctdp, beginIndex);
+                        tmlctdp.hideConnectors();
+                        tmlctdp.updatePorts();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+                tmlctdp.updatePorts();
+            } else if (tdp instanceof TMLActivityDiagramPanel) {
+                nl = doc.getElementsByTagName("TMLActivityDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                TMLActivityDiagramPanel tmladp = (TMLActivityDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tmladp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //tmladp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmladp);
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmladp);
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmladp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmladp);
+                        tmladp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                        makePostLoading(tmladp, beginIndex);
+                    }
+                }
+            }  else if (tdp instanceof TMLCPPanel) {
+                nl = doc.getElementsByTagName("CommunicationPatternDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+                TMLCPPanel tmlcpp = (TMLCPPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tmlcpp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //tmlcpp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlcpp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(tmlcpp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlcpp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlcpp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmlcpp);
+                        tmlcpp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(tmlcpp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+            } else if (tdp instanceof TMLSDPanel) {
+                nl = doc.getElementsByTagName("TMLSDPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+                TMLSDPanel tmlsdp = (TMLSDPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tmlsdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //tmlcpp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmlsdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(tmlsdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmlsdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmlsdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmlsdp);
+                        tmlsdp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(tmlsdp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+            } else if (tdp instanceof TMLArchiDiagramPanel) {
+                nl = doc.getElementsByTagName("TMLArchiDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+                TMLArchiDiagramPanel tmadp = (TMLArchiDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tmadp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        tmadp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmadp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(tmadp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmadp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmadp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmadp);
+                        tmadp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(tmadp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+            } else if (tdp instanceof TURTLEOSClassDiagramPanel) {
+                nl = doc.getElementsByTagName("TURTLEOSClassDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                TURTLEOSClassDiagramPanel toscdp = (TURTLEOSClassDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (toscdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //toscdp.loadExtraParameters(elt);
+                        //TraceManager.addDev("Toto 2");
+                        //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), toscdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(toscdp);
+                        //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), toscdp);
+                        //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), toscdp);
+                        //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " real points");
+                        connectConnectorsToRealPoints(toscdp);
+                        toscdp.structureChanged();
+                        //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(toscdp, beginIndex);
+                        //TraceManager.addDev("TURTLEOS task diagram : " + toscdp.getName() + " post loading done");
+                    }
+                }
+            } else if (tdp instanceof TURTLEOSActivityDiagramPanel) {
+                nl = doc.getElementsByTagName("TURTLEOSActivityDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                TURTLEOSActivityDiagramPanel tosadp = (TURTLEOSActivityDiagramPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (tosadp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //tmladp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tosadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tosadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tosadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                        connectConnectorsToRealPoints(tosadp);
+                        tosadp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                        makePostLoading(tosadp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof ProactiveCSDPanel) {
+                //cuenta=beginIndex+1;
+                cuenta=mgui.tabs.size()-1;
+                nl = doc.getElementsByTagName("ProactiveCSDPanelCopy");
+                if (nl.getLength()==0)
+                    {
+                        nl=doc.getElementsByTagName("ProactiveCSDPanel");
+                    }
+                docCopy = doc;
+                if (nl == null)
+                    {
+                        return;
+                    }
+                ProactiveCSDPanel pcsdp = (ProactiveCSDPanel)tdp;
+                for(i=0; i<nl.getLength(); i++)
+                    {
+                        adn = nl.item(i);
+                        if (adn.getNodeType() == Node.ELEMENT_NODE)
+                            {
+                                elt = (Element) adn;
+                                if (pcsdp == null)
+                                    {
+                                        throw new MalformedModelingException();
+                                    }
+
+
+                                //                                                                                        int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                                //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                                //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                                //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                                decX = _decX;
+                                decY = _decY;
+
+                                //pcsdp.loadExtraParameters(elt);
+                                //TraceManager.addDev("Toto 2");
+                                //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                                makeXMLComponents(elt.getElementsByTagName("COMPONENT"), pcsdp);
+                                //TraceManager.addDev("Toto 3");
+                                makePostProcessing(pcsdp);
+                                //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                                makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), pcsdp);
+                                //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                                makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), pcsdp);
+                                //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                                connectConnectorsToRealPoints(pcsdp);
+                                pcsdp.structureChanged();
+                                //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                                makePostLoading(pcsdp, beginIndex);
+                                //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                            }
+                    }
+                // Added by Solange
+                nl = doc.getElementsByTagName("ProactiveSMDPanel");
+                if (nl == null)
+                    {
+                        return;
+                    }
+                String name="";
+                ProactiveSMDPanel psmdp;
+                for(i=0; i<nl.getLength(); i++) //Erased cuenta++ by Solange at the end condition of the for
+                    {
+                        adn = nl.item(i);
+                        if (adn.getNodeType() == Node.ELEMENT_NODE)
+                            {
+                                elt = (Element) adn;
+                                name=elt.getAttribute("name");
+                                //Added by Solange name at the beginning and cuenta
+                                name=mgui.createProActiveSMD(cuenta,name);
+                                psmdp=mgui.getSMDPanel(cuenta, name);
+                                if (psmdp == null)
+                                    {
+                                        throw new MalformedModelingException();
+                                    }
+
+                                //                                                                                        int xSel = Integer.decode(elt.getAttribute("minX")).intValue();
+                                //int ySel = Integer.decode(elt.getAttribute("maxX")).intValue(); // - mgui.getCurrentTDiagramPanel().currentX;
+                                //                                                                                        int widthSel = Integer.decode(elt.getAttribute("minY")).intValue(); // - mgui.getCurrentTDiagramPanel().currentY;;
+                                //                                                                                        int heightSel = Integer.decode(elt.getAttribute("maxY")).intValue(); // - mgui.getCurrentTDiagramPanel().currentY;;
+
+                                decX = _decX;
+                                decY = _decY;
+
+                                //tmladp.loadExtraParameters(elt);
+                                //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
+                                makeXMLComponents(elt.getElementsByTagName("COMPONENT"), psmdp);
+                                //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
+                                makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), psmdp);
+                                //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
+                                makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), psmdp);
+                                //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                                connectConnectorsToRealPoints(psmdp);
+                                psmdp.structureChanged();
+                                //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                                makePostLoading(psmdp, beginIndex);
+                                //until here
+                            }
+                    }
+            } else if (tdp instanceof ProactiveSMDPanel) {
+                //Changed by Solange, before it was like the first line
+                //nl = doc.getElementsByTagName("ProactiveSMDPanelCopy");
+                nl = doc.getElementsByTagName("ProactiveSMDPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                ProactiveSMDPanel psmdp = (ProactiveSMDPanel)tdp;
 
-		// class diagram name
-		name = elt.getAttribute("name");
-		mgui.setClassDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
 
-		loadDiagram(elt, tdp);
-	}
+                        if (psmdp == null) {
+                            throw new MalformedModelingException();
+                        }
 
-	public void loadTActivityDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
-		String name;
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
 
-		name = elt.getAttribute("name");
-		TActivityDiagramPanel tadp = mgui.getActivityDiagramPanel(indexDesign, name);
+                        decX = _decX;
+                        decY = _decY;
 
-		if (tadp == null) {
-			throw new MalformedModelingException();
-		}
+                        //tmladp.loadExtraParameters(elt);
 
-		tadp.removeAll();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), psmdp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), psmdp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), psmdp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                        connectConnectorsToRealPoints(psmdp);
+                        psmdp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                        makePostLoading(psmdp, beginIndex);
+                    }
+                }
+
+                // AVATAR
+            } else if (tdp instanceof AvatarBDPanel) {
+                nl = doc.getElementsByTagName("AVATARBlockDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+
+                AvatarBDPanel abdp = (AvatarBDPanel)tdp;
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (abdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        abdp.loadExtraParameters(elt);
 
-		loadDiagram(elt, tadp);
-	}
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), abdp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(abdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), abdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), abdp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(abdp);
+                        abdp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(abdp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+
+
+            } else if (tdp instanceof ADDDiagramPanel) {
+                nl = doc.getElementsByTagName("ADDDiagramPanelCopy");
+                docCopy = doc;
+
+                if (nl == null) {
+                    return;
+                }
+
+                //TraceManager.addDev("Toto 1");
+
+
+                ADDDiagramPanel addp = (ADDDiagramPanel)tdp;
+
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (addp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        addp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Toto 2");
+
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), addp);
+                        //TraceManager.addDev("Toto 3");
+                        makePostProcessing(addp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), addp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), addp);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " real points");
+                        connectConnectorsToRealPoints(addp);
+                        addp.structureChanged();
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading " + beginIndex);
+                        makePostLoading(addp, beginIndex);
+                        //TraceManager.addDev("TML task diagram : " + tmltdp.getName() + " post loading done");
+                    }
+                }
+
+            } else if (tdp instanceof AvatarSMDPanel) {
+                nl = doc.getElementsByTagName("AVATARStateMachineDiagramPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                AvatarSMDPanel asmdp = (AvatarSMDPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (asmdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        //tmladp.loadExtraParameters(elt);
+
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), asmdp);
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), asmdp);
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), asmdp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                        connectConnectorsToRealPoints(asmdp);
+                        asmdp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                        makePostLoading(asmdp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof AvatarRDPanel) {
+                nl = doc.getElementsByTagName("AvatarRDPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                AvatarRDPanel ardp = (AvatarRDPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (ardp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), ardp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), ardp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), ardp);
+                        connectConnectorsToRealPoints(ardp);
+                        ardp.structureChanged();
+                        makePostLoading(ardp, beginIndex);
+                    }
+                }
+
+            } else if (tdp instanceof AvatarMADPanel) {
+                nl = doc.getElementsByTagName("AvatarMADPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                AvatarMADPanel amadp = (AvatarMADPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (amadp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), amadp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), amadp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), amadp);
+                        connectConnectorsToRealPoints(amadp);
+                        amadp.structureChanged();
+                        makePostLoading(amadp, beginIndex);
+                    }
+                }
+
+            } else if (tdp instanceof AvatarPDPanel) {
+                nl = doc.getElementsByTagName("AvatarPDPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                AvatarPDPanel apdp = (AvatarPDPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (apdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), apdp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), apdp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), apdp);
+                        connectConnectorsToRealPoints(apdp);
+                        apdp.structureChanged();
+                        makePostLoading(apdp, beginIndex);
+                    }
+                }
+
+            } else if (tdp instanceof AvatarCDPanel) {
+                nl = doc.getElementsByTagName("AvatarCDPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                AvatarCDPanel acdp = (AvatarCDPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (acdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //int xSel = Integer.decode(elt.getAttribute("xSel")).intValue();
+                        //int ySel = Integer.decode(elt.getAttribute("ySel")).intValue();
+                        //int widthSel = Integer.decode(elt.getAttribute("widthSel")).intValue();
+                        //int heightSel = Integer.decode(elt.getAttribute("heightSel")).intValue();
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), acdp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), acdp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), acdp);
+                        connectConnectorsToRealPoints(acdp);
+                        acdp.structureChanged();
+                        makePostLoading(acdp, beginIndex);
+                    }
+                }
+            } else if (tdp instanceof AvatarADPanel) {
+                nl = doc.getElementsByTagName("AvatarADPanelCopy");
+
+                if (nl == null) {
+                    return;
+                }
+
+                AvatarADPanel aadp = (AvatarADPanel)tdp;
+
+                for(i=0; i<nl.getLength(); i++) {
+                    adn = nl.item(i);
+                    if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                        elt = (Element) adn;
+
+                        if (aadp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        decX = _decX;
+                        decY = _decY;
+
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), aadp);
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), aadp);
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), aadp);
+                        connectConnectorsToRealPoints(aadp);
+                        aadp.structureChanged();
+                        makePostLoading(aadp, beginIndex);
+                    }
+                }
+            }
+
+        } catch (IOException e) {
+            TraceManager.addError("Loading 500: " + e.getMessage());
+            throw new MalformedModelingException();
+        } catch (SAXException saxe) {
+            TraceManager.addError("Loading 501 " + saxe.getMessage());
+            throw new MalformedModelingException();
+        }
+
+    }
+
+    // Returns null if s is not a saved TURTLE modeling of an older format
+    public String upgradeSaved(String s) {
+        int index1, index2, index3;
+        StringBuffer sb = new StringBuffer("");;
+        //String tmp;
+
+        index1 = s.indexOf("<TClassDiagramPanel");
+        index2 = s.indexOf("<InteractionOverviewDiagramPanel ");
+        index3 = s.indexOf("</TURTLEGMODELING>");
+
+        if ((index1 <0) ||(index3 < 0)){
+            return null;
+        }
+
+        sb.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<TURTLEGMODELING version=\"" + DefaultText.getVersion() + "\">\n\n");
+
+        if (index2 > -1) {
+            sb.append("<Modeling type=\"Analysis\" nameTab=\"Analysis\" >\n");
+            sb.append(s.substring(index2, index3));
+            sb.append("</Modeling>\n\n");
+        }
+
+        if (index2 < 0) {
+            index2 = index3;
+        }
+        sb.append("<Modeling type=\"Design\" nameTab=\"Design\" >\n");
+        sb.append(s.substring(index1, index2));
+        sb.append("</Modeling>\n\n");
+
+        sb.append(s.substring(index3, s.length()));
+
+        //TraceManager.addDev("Got:" + sb);
+
+        return sb.toString();
+    }
+
+    public void loadModelingFromXML(String s) throws MalformedModelingException {
+
+        if (s == null) {
+            return;
+        }
+
+        s = decodeString(s);
+
+        decX = 0;
+        decY = 0;
+        decId = 0;
+        TGComponent.setGeneralId(100000);
+
+        ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes());
+
+        if ((dbf == null) || (db == null)) {
+            throw new MalformedModelingException();
+        }
+
+        prepareErrors();
+
+        try {
+            // building nodes from xml String
+            Document doc = db.parse(bais);
+            NodeList panelNl;
+            //NodeList designPanelNl;
+            //NodeList analysisNl;
+
+            int i;
+            //Element elt;
+            Node node;
+
+            // Managing design panels
+            panelNl = doc.getElementsByTagName("Modeling");
+
+            if (panelNl.getLength() == 0) {
+                // Modeling saved in old format?
+                s = upgradeSaved(s);
+                if (s != null) {
+                    JOptionPane.showMessageDialog(mgui.frame, "The modeling has been converted to this new version of TTool", "Loading information", JOptionPane.INFORMATION_MESSAGE);
+                }
+                loadModelingFromXML(s);
+                return;
+
+            }
+            //designPanelNl = doc.getElementsByTagName("Design");
+            //analysisNl = doc.getElementsByTagName("Analysis");
+
+            pendingConnectors = new ArrayList<TGConnectorInfo>();
+
+            //TraceManager.addDev("nb de design=" + designPanelNl.getLength() + " nb d'analyse=" + analysisNl.getLength());
+            boolean error = false;
+            for(i=0; i<panelNl.getLength(); i++) {
+                node = panelNl.item(i);
+                //TraceManager.addDev("Node = " + dnd);
+
+                if (node.getNodeType() == Node.ELEMENT_NODE) {
+                    // create design, and get an index for it
+                    try {
+                        loadModeling(node);
+                    } catch (MalformedModelingException mme) {
+                        Element elt = (Element) node;
+                        String type = elt.getAttribute("type");
+                        TraceManager.addDev("Error when loading diagram: " + elt + " " +type);
+                        error = true;
+                    }
+                }
+            }
+            if (error == true) {
+                throw new MalformedModelingException();
+            }
+
+        } catch (NumberFormatException nfe) {
+            TraceManager.addError("Loading 400 " + nfe.getMessage());
+            throw new MalformedModelingException();
+        } catch (IOException e) {
+            TraceManager.addError("Loading 600 " + e.getMessage());
+            throw new MalformedModelingException();
+        } catch (SAXException saxe) {
+            TraceManager.addError("Loading 601 " + saxe.getMessage());
+            throw new MalformedModelingException();
+        }
+        //TraceManager.addDev("making IDs");
+        makeLastLoad();
+        makeLovelyIds();
+        //TraceManager.addDev("IDs done");
+    }
+
+    public void loadModeling(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String type = elt.getAttribute("type");
+        // AVATAR
+        if (type.compareTo("ADD") == 0) {
+            loadAvatarDeployment(node);
+        } else if (type.compareTo("AVATAR Design") == 0) {
+            loadAvatarDesign(node);
+        } else if (type.compareTo("Avatar Requirement") == 0) {
+            loadAvatarRequirement(node);
+        } else if (type.compareTo("Avatar MAD") == 0) {
+            loadAvatarMADs(node);
+        } else if (type.compareTo("Avatar Analysis") == 0) {
+            loadAvatarAnalysis(node);
+
+
+            // TURTLE
+        } else if (type.compareTo("Design") == 0) {
+            loadDesign(node);
+        } else if (type.compareTo("Analysis") == 0) {
+            loadAnalysis(node);
+        } else if (type.compareTo("Deployment") == 0) {
+            loadDeployment(node);
+        } else if (type.compareTo("NC diagram") == 0) {
+            loadNC(node);
+        } else if (type.compareTo("Requirement") == 0) {
+            loadRequirement(node);
+        } else if (type.compareTo("AttackTree") == 0) {
+            loadAttackTree(node);
+        } else if (type.compareTo("Diplodocus Methodology") == 0) {
+            loadDiplodocusMethodology(node);
+        } else if (type.compareTo("Avatar Methodology") == 0) {
+            loadAvatarMethodology(node);
+        } else if (type.compareTo("Sysmlsec Methodology") == 0) {
+            loadSysmlsecMethodology(node);
+        } else if (type.compareTo("TML Design") == 0) {
+            loadTMLDesign(node);
+        } else if (type.compareTo("TML Component Design") == 0) {
+            loadTMLComponentDesign(node);
+        } else if (type.compareTo("TML CP") == 0) {
+            loadTMLCP(node);
+        } else if (type.compareTo("TML Architecture") == 0) {
+            loadTMLArchitecture(node);
+        } else if (type.compareTo("TURTLE-OS Design") == 0) {
+            loadTURTLEOSDesign(node);
+        } else if (type.compareTo("ProActive Design") == 0) {
+            loadProActiveDesign(node);
+        } else {
+            throw new MalformedModelingException();
+        }
+    }
+
+    public void loadAvatarDesign(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createAvatarDesign(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        /* First load all Block diagrams, then all state machines
+         * This is done this way so that state machines can rely on
+         * informations provided by blocks. For instance we can check
+         * that an attribute used in a state machine really exists.
+         */
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element) node;
+                if (elt.getTagName().compareTo("AVATARBlockDiagramPanel") == 0)
+                    // Class diagram
+                    loadAvatarBD(elt, indexDesign);
+            }
+        }
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element) node;
+                if (elt.getTagName().compareTo("AVATARStateMachineDiagramPanel") == 0)
+                    // Managing activity diagrams
+                    loadAvatarSMD(elt, indexDesign);
+            }
+        }
+    }
+
+    public void loadAvatarDeployment(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexReq;
+        int cpt_req = 0;
+
+        TraceManager.addDev("Loading ADD 0");
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexReq = mgui.createADD(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Deployment nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("ADDDiagramPanel") == 0) {
+                    TraceManager.addDev("Loading ADD 1");
+                    loadADDDiagram(elt, indexReq, cpt_req);
+                    cpt_req ++;
+                }
+            }
+        }
+    }
+
+    public void loadAvatarRequirement(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexReq;
+        int cpt_req = 0;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexReq = mgui.createAvatarRequirement(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Deployment nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("AvatarRDPanel") == 0) {
+                    loadAvatarRD(elt, indexReq, cpt_req);
+                    cpt_req ++;
+                } else if (elt.getTagName().compareTo("AvatarPDPanel") == 0) {
+                    loadAvatarPD(elt, indexReq, cpt_req);
+                    cpt_req ++;
+                }
+            }
+        }
+    }
+
+    public void loadAttackTree(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexTree;
+        int cpttdp = 0;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexTree = mgui.createAttackTree(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Deployment nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("AttackTreeDiagramPanel") == 0) {
+                    loadAttackTreeDiagram(elt, indexTree, cpttdp);
+                    cpttdp ++;
+                }
+            }
+        }
+    }
+
+    public void loadAvatarMADs(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexReq;
+        int cpt_req = 0;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        TraceManager.addDev("Creating MAD panel ");
+
+        indexReq = mgui.createAvatarMADs(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            TraceManager.addDev("MADs nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("AvatarMADPanel") == 0) {
+                    loadAvatarMAD(elt, indexReq, cpt_req);
+                    cpt_req ++;
+                }
+            }
+        }
+    }
+
+    public void loadDesign(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createDesign(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("TClassDiagramPanel") == 0) {
+                    // Class diagram
+                    loadTClassDiagram(elt, indexDesign);
+                } else { // Managing activity diagrams
+                    if (elt.getTagName().compareTo("TActivityDiagramPanel") == 0) {
+                        // Managing activity diagrams
+                        loadTActivityDiagram(elt, indexDesign);
+                    }
+                }
+            }
+        }
+    }
+
+    public void loadAnalysis(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexAnalysis;
+        int cpt = 0;
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexAnalysis = mgui.createAnalysis(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("InteractionOverviewDiagramPanel") == 0) {
+                    // IOD
+                    loadIODiagram(elt, indexAnalysis);
+                    cpt ++;
+                } else { // Managing sequence diagrams
+                    if (elt.getTagName().compareTo("SequenceDiagramPanel") == 0) {
+                        loadSequenceDiagram(elt, indexAnalysis);
+                        cpt ++;
+                    } else if (elt.getTagName().compareTo("SequenceDiagramPanelZV") == 0) {
+                        loadSequenceDiagramZV(elt, indexAnalysis);
+                        cpt ++;
+                    } else if (elt.getTagName().compareTo("UseCaseDiagramPanel") == 0) {
+                        // Managing use case diagrams
+                        loadUseCaseDiagram(elt, indexAnalysis, cpt);
+                        cpt ++;
+                    } /*else if (elt.getTagName().compareTo("AvatarCDPanel") == 0) {
+                      // Managing use case diagrams
+                      loadAvatarCD(elt, indexAnalysis, cpt);
+                      cpt ++;
+                      } else if (elt.getTagName().compareTo("AvatarADPanel") == 0) {
+                      // Managing use case diagrams
+                      loadAvatarAD(elt, indexAnalysis, cpt);
+                      cpt ++;
+                      }*/
+                }
+            }
+        }
+    }
+
+    public void loadTMLCP(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexTMLCP;
+        //  int cpt = 0;
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexTMLCP = mgui.createTMLCP(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("CommunicationPatternDiagramPanel") == 0) {
+                    // CP
+                    loadTMLCPDiagram(elt, indexTMLCP);
+                    // cpt ++;
+                } else { // Managing sequence diagrams
+                    if (elt.getTagName().compareTo("TMLSDPanel") == 0) {
+                        loadTMLSDDiagram(elt, indexTMLCP);
+                        //       cpt ++;
+                    }
+                }
+            }
+        }
+    }
+
+    public void loadAvatarAnalysis(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexAnalysis;
+        int cpt = 0;
+
+        //TraceManager.addDev("Loading Avatar analysis");
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexAnalysis = mgui.createAvatarAnalysis(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+
+                if (elt.getTagName().compareTo("SequenceDiagramPanel") == 0) {
+                    //TraceManager.addDev("Loading seq diag");
+                    loadSequenceDiagram(elt, indexAnalysis);
+                    //TraceManager.addDev("Loading seq diag done");
+                    cpt ++;
+                } else if (elt.getTagName().compareTo("SequenceDiagramPanelZV") == 0) {
+                    //TraceManager.addDev("Loading seq diag");
+                    loadSequenceDiagramZV(elt, indexAnalysis);
+                    //TraceManager.addDev("Loading seq diag done");
+                    cpt ++;
+                } else if (elt.getTagName().compareTo("UseCaseDiagramPanel") == 0) {
+                    // Managing use case diagrams
+                    //TraceManager.addDev("Loading ucd diag");
+                    loadUseCaseDiagram(elt, indexAnalysis, cpt);
+                    //TraceManager.addDev("Loading ucd diag done");
+
+                    cpt ++;
+                } else if (elt.getTagName().compareTo("AvatarCDPanel") == 0) {
+                    // Managing use case diagrams
+                    //TraceManager.addDev("Loading cd diag");
+                    loadAvatarCD(elt, indexAnalysis, cpt);
+                    //TraceManager.addDev("Loading cd diag done");
+                    cpt ++;
+                } else if (elt.getTagName().compareTo("AvatarADPanel") == 0) {
+                    // Managing use case diagrams
+                    //TraceManager.addDev("Loading ad diag");
+                    loadAvatarAD(elt, indexAnalysis, cpt);
+                    //TraceManager.addDev("Loading ad diag done");
+                    cpt ++;
+                }
+
+            }
+        }
+    }
+
+    public void loadDeployment(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexAnalysis;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexAnalysis = mgui.createDeployment(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Deployment nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("TDeploymentDiagramPanel") == 0) {
+                    // IOD
+                    loadTDeploymentDiagram(elt, indexAnalysis);
+                }
+            }
+        }
+    }
+
+    public void loadNC(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexAnalysis;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexAnalysis = mgui.createNC(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Deployment nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("NCDiagramPanel") == 0) {
+                    // IOD
+                    loadNCDiagram(elt, indexAnalysis);
+                }
+            }
+        }
+    }
+
+    public void loadRequirement(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexReq;
+        int cpt_req = 0;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexReq = mgui.createRequirement(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Deployment nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("TRequirementDiagramPanel") == 0) {
+                    loadRequirementDiagram(elt, indexReq, cpt_req);
+                    cpt_req ++;
+                } else if (elt.getTagName().compareTo("EBRDDPanel") == 0) {
+                    loadEBRDD(elt, indexReq, cpt_req);
+                    cpt_req ++;
+                }
+            }
+        }
+    }
+
+
+
+    public void loadDiplodocusMethodology(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createDiplodocusMethodology(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("DiplodocusMethodologyDiagramPanel") == 0) {
+                    // Class diagram
+                    //TraceManager.addDev("Loading TML CD");
+                    loadDiplodocusMethodologyDiagram(elt, indexDesign);
+                    //TraceManager.addDev("End loading TML CD");
+                }
+            }
+        }
+    }
+
+    public void loadAvatarMethodology(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createAvatarMethodology(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("AvatarMethodologyDiagramPanel") == 0) {
+                    // Class diagram
+                    TraceManager.addDev("Loading Avatar methodo");
+                    loadAvatarMethodologyDiagram(elt, indexDesign);
+                    TraceManager.addDev("End Loading avatar methodo");
+                }
+            }
+        }
+    }
+
+    public void loadSysmlsecMethodology(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createSysmlsecMethodology(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("SysmlsecMethodologyDiagramPanel") == 0) {
+                    // Class diagram
+                    TraceManager.addDev("Loading SysMLSec methodo");
+                    loadSysmlsecMethodologyDiagram(elt, indexDesign);
+                    TraceManager.addDev("End loading SysMLSec methodo");
+                }
+            }
+        }
+    }
+
+    public void loadTMLDesign(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createTMLDesign(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("TMLTaskDiagramPanel") == 0) {
+                    // Class diagram
+                    //TraceManager.addDev("Loading TML CD");
+                    loadTMLTaskDiagram(elt, indexDesign);
+                    //TraceManager.addDev("End loading TML CD");
+                } else { // Managing activity diagrams
+                    if (elt.getTagName().compareTo("TMLActivityDiagramPanel") == 0) {
+                        // Managing activity diagrams
+                        //TraceManager.addDev("Loading TML AD");
+                        loadTMLActivityDiagram(elt, indexDesign);
+                    }
+                }
+            }
+        }
+    }
+
+    public void loadTMLComponentDesign(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createTMLComponentDesign(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("TMLComponentTaskDiagramPanel") == 0) {
+                    // Component diagram
+                    //TraceManager.addDev("Loading TML Component diagram");
+                    loadTMLComponentTaskDiagram(elt, indexDesign);
+                    //TraceManager.addDev("End loading TML CD");
+                } else { // Managing activity diagrams
+                    if (elt.getTagName().compareTo("TMLActivityDiagramPanel") == 0) {
+                        // Managing activity diagrams
+                        //TraceManager.addDev("Loading TML AD");
+                        loadTMLActivityDiagram(elt, indexDesign);
+                    }
+                }
+            }
+        }
+    }
+
+    public void loadTMLArchitecture(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createTMLArchitecture(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            TraceManager.addDev("TML Architecture nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("TMLArchiDiagramPanel") == 0) {
+                    TraceManager.addDev("Loading TML DD" + elt.getTagName() );
+                    loadTMLArchitectureDiagram(elt, indexDesign);
+                    TraceManager.addDev("End loading TML DD");
+                }
+            }
+        }
+    }
+
+    public void loadTURTLEOSDesign(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createTURTLEOSDesign(nameTab);
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("TURTLEOSClassDiagramPanel") == 0) {
+                    // Class diagram
+                    //TraceManager.addDev("Loading TURTLEOS CD");
+                    loadTURTLEOSClassDiagram(elt, indexDesign);
+                    //TraceManager.addDev("End loading TML CD");
+                } else { // Managing activity diagrams
+                    if (elt.getTagName().compareTo("TURTLEOSActivityDiagramPanel") == 0) {
+                        // Managing activity diagrams
+                        //TraceManager.addDev("Loading TURTLEOS AD");
+                        loadTURTLEOSActivityDiagram(elt, indexDesign);
+                    }
+                }
+            }
+        }
+    }
+
+    public void loadProActiveDesign(Node node) throws  MalformedModelingException, SAXException {
+        Element elt = (Element) node;
+        String nameTab;
+        NodeList diagramNl;
+        int indexDesign;
+
+
+        nameTab = elt.getAttribute("nameTab");
+
+        indexDesign = mgui.createProActiveDesign(nameTab);
+
+
+        diagramNl = node.getChildNodes();
+
+        for(int j=0; j<diagramNl.getLength(); j++) {
+            //TraceManager.addDev("Design nodes: " + j);
+            node = diagramNl.item(j);
+            if (node.getNodeType() == Node.ELEMENT_NODE) {
+                elt = (Element)node;
+                if (elt.getTagName().compareTo("ProactiveCSDPanel") == 0) {
+                    // Class diagram
+                    //TraceManager.addDev("Loading TML CD");
+                    loadProactiveCSD(elt, indexDesign);
+                    //TraceManager.addDev("End loading TML CD");
+                } else { // Managing activity diagrams
+                    if (elt.getTagName().compareTo("ProactiveSMDPanel") == 0) {
+                        // Managing activity diagrams
+                        //TraceManager.addDev("Loading TML AD");
+                        loadProactiveSMD(elt, indexDesign);
+                    }
+                }
+            }
+        }
+    }
+
+    public void loadDiagram(Element elt, TDiagramPanel tdp) throws  MalformedModelingException, SAXException {
+        int x, y;
+        double zoom = 0;
+        try {
+            x = Integer.decode(elt.getAttribute("minX")).intValue();
+            tdp.setMinX(x);
+            x = Integer.decode(elt.getAttribute("maxX")).intValue();
+            tdp.setMaxX(x);
+            y = Integer.decode(elt.getAttribute("minY")).intValue();
+            tdp.setMinY(y);
+            y = Integer.decode(elt.getAttribute("maxY")).intValue();
+            tdp.setMaxY(y);
+            tdp.updateSize();
+            zoom = Double.parseDouble(elt.getAttribute("zoom"));
+            if (zoom != 0) {
+                tdp.setZoom(zoom);
+                mgui.updateZoomInfo();
+            }
+        } catch (Exception e) {
+            // Model was saved in an older version of TTool
+        }
+
+        // for TClassdiagram Panel
+        if (tdp instanceof TClassDiagramPanel) {
+            ((TClassDiagramPanel)tdp).loadExtraParameters(elt);
+        }
+
+        if (tdp instanceof TActivityDiagramPanel) {
+            ((TActivityDiagramPanel)tdp).loadExtraParameters(elt);
+        }
+
+        if (tdp instanceof TMLTaskDiagramPanel) {
+            ((TMLTaskDiagramPanel)tdp).loadExtraParameters(elt);
+        }
+
+        if (tdp instanceof TMLComponentTaskDiagramPanel) {
+            ((TMLComponentTaskDiagramPanel)tdp).loadExtraParameters(elt);
+        }
+
+        if (tdp instanceof TMLArchiDiagramPanel) {
+            ((TMLArchiDiagramPanel)tdp).loadExtraParameters(elt);
+        }
+
+
+        if (tdp instanceof AvatarBDPanel) {
+            ((AvatarBDPanel)tdp).loadExtraParameters(elt);
+        }
+
+        //TraceManager.addDev("Element" + elt.toString());
+        // Loads components of the class diagram
+        //TraceManager.addDev("Components");
+        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tdp);
+        //TraceManager.addDev("Post processing");
+        makePostProcessing(tdp);
+        //TraceManager.addDev("Connectors");
+        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tdp);
+        //TraceManager.addDev("Subcomponents");
+        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tdp);
+        //TraceManager.addDev("RealPoints");
+        connectConnectorsToRealPoints(tdp);
+        //TraceManager.addDev("Structure changed");
+        tdp.structureChanged();
+        //TraceManager.addDev("Post loading");
+        makePostLoading(tdp, 0);
+
+        //TraceManager.addDev("Test connectors");
+        if (tdp instanceof TMLComponentTaskDiagramPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((TMLComponentTaskDiagramPanel)tdp).setConnectorsToFront();
+        }
+
+        if (tdp instanceof EBRDDPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((EBRDDPanel)tdp).setConnectorsToFront();
+        }
+
+        if (tdp instanceof AttackTreeDiagramPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((AttackTreeDiagramPanel)tdp).setConnectorsToFront();
+        }
+
+        if (tdp instanceof AvatarBDPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((AvatarBDPanel)tdp).setConnectorsToFront();
+        }
+
+        if (tdp instanceof AvatarSMDPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((AvatarSMDPanel)tdp).setConnectorsToFront();
+        }
+
+        if (tdp instanceof AvatarPDPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((AvatarPDPanel)tdp).setConnectorsToFront();
+        }
+
+        if (tdp instanceof AvatarCDPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((AvatarCDPanel)tdp).setConnectorsToFront();
+        }
+
+        if (tdp instanceof AvatarADPanel) {
+            //TraceManager.addDev("Connectors...");
+            ((AvatarADPanel)tdp).setConnectorsToFront();
+        }
+    }
+
+    // AVATAR
+    public void loadAvatarBD(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+
+        String name;
+        TDiagramPanel tdp;
+
+        // class diagram name
+        name = elt.getAttribute("name");
+        mgui.setAvatarBDName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadAvatarSMD(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        //TraceManager.addDev("Loading SMD of:" + name);
+        AvatarSMDPanel asmdp = mgui.getAvatarSMDPanel(indexDesign, name);
+
+        if (asmdp == null) {
+            throw new MalformedModelingException();
+        }
+
+        asmdp.removeAll();
+
+        mgui.selectDummyTab (indexDesign);
+        loadDiagram(elt, asmdp);
+        mgui.forgetDummyTab ();
+    }
 
-	public void loadDiplodocusMethodologyDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+    public void loadAvatarRD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
 
-		String name;
-		TDiagramPanel tdp;
+        name = elt.getAttribute("name");
+        mgui.createAvatarRD(indexAnalysis, name);
+
+
+        TDiagramPanel tdp = mgui.getAvatarRDPanel(indexAnalysis, indexTab, name);
 
-		// Diagram name
-		name = elt.getAttribute("name");
-		mgui.setDiplodocusMethodologyDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
-		tdp.setName(name);
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
 
-		TraceManager.addDev("tdp=" + tdp.getName());
+        loadDiagram(elt, tdp);
+    }
 
-		loadDiagram(elt, tdp);
-	}
+    public void loadAvatarMAD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
+        name = elt.getAttribute("name");
+        mgui.createAvatarMAD(indexAnalysis, name);
+        TDiagramPanel tdp = mgui.getAvatarMADPanel(indexAnalysis, indexTab, name);
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
+        loadDiagram(elt, tdp);
+    }
 
-	public void loadAvatarMethodologyDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		String name;
-		TDiagramPanel tdp;
+    public void loadADDDiagram(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
 
-		// class diagram name
-		name = elt.getAttribute("name");
-		mgui.setAvatarMethodologyDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
-		tdp.setName(name);
+        name = elt.getAttribute("name");
 
-		//TraceManager.addDev("tdp=" + tdp.getName());
+        TraceManager.addDev("ADD 2");
+        mgui.createAvatarPD(indexAnalysis, name);
 
-		loadDiagram(elt, tdp);
-	}
+        TraceManager.addDev("ADD 3");
+        TDiagramPanel tdp = mgui.getAvatarADDPanel(indexAnalysis, indexTab, name);
 
-	public void loadSysmlsecMethodologyDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        TraceManager.addDev("ADD 3.1");
 
-		String name;
-		TDiagramPanel tdp;
+        if (tdp == null) {
+            // Try to get the first diagram of the panel
+            tdp = mgui.getAvatarADDPanelByIndex(indexAnalysis, indexTab);
+            if (tdp == null) {
+                TraceManager.addDev("ADD 3.2");
+                throw new MalformedModelingException();
+            }
+        }
+        tdp.removeAll();
+        TraceManager.addDev("ADD 4");
 
-		// class diagram name
-		name = elt.getAttribute("name");
-		mgui.setSysmlsecMethodologyDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
-		tdp.setName(name);
+        loadDiagram(elt, tdp);
+        TraceManager.addDev("ADD 5");
+    }
 
-		//TraceManager.addDev("tdp=" + tdp.getName());
+    public void loadAvatarPD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
 
-		loadDiagram(elt, tdp);
-	}
+        name = elt.getAttribute("name");
+        mgui.createAvatarPD(indexAnalysis, name);
 
-	public void loadTMLTaskDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        TDiagramPanel tdp = mgui.getAvatarPDPanel(indexAnalysis, indexTab, name);
 
-		String name;
-		TDiagramPanel tdp;
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
 
-		// class diagram name
-		name = elt.getAttribute("name");
-		mgui.setTMLTaskDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
+        loadDiagram(elt, tdp);
+    }
 
-		//TraceManager.addDev("tdp=" + tdp.getName());
+    public void loadAvatarCD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
 
-		loadDiagram(elt, tdp);
-	}
+        name = elt.getAttribute("name");
+        mgui.createAvatarCD(indexAnalysis, name);
 
-	public void loadTMLComponentTaskDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        TDiagramPanel tdp = mgui.getAvatarCDPanel(indexAnalysis, indexTab, name);
 
-		String name;
-		TDiagramPanel tdp;
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
 
-		// Diagram name
-		name = elt.getAttribute("name");
-		mgui.setTMLComponentTaskDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
+        loadDiagram(elt, tdp);
+    }
 
-		//TraceManager.addDev("tdp=" + tdp.getName());
+    public void loadAvatarAD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
 
-		loadDiagram(elt, tdp);
+        name = elt.getAttribute("name");
+        mgui.createAvatarAD(indexAnalysis, name);
 
-		((TMLComponentTaskDiagramPanel)tdp).hideConnectors();
-		((TMLComponentTaskDiagramPanel)tdp).updatePorts();
-	}
+        TDiagramPanel tdp = mgui.getAvatarADPanel(indexAnalysis, indexTab, name);
 
-	public void loadTMLArchitectureDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
 
-		String name;
-		TDiagramPanel tdp;
+        loadDiagram(elt, tdp);
+    }
 
-		// Diagram name
-		name = elt.getAttribute("name");
-		mgui.setTMLArchitectureDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
+    // TURTLE Design
+    public void loadTClassDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		//TraceManager.addDev("tdp=" + tdp.getName());
+        String name;
+        TDiagramPanel tdp;
 
-		loadDiagram(elt, tdp);
-	}
+        // class diagram name
+        name = elt.getAttribute("name");
+        mgui.setClassDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
 
-	public void loadTMLActivityDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
-		String name;
+        loadDiagram(elt, tdp);
+    }
 
-		name = elt.getAttribute("name");
+    public void loadTActivityDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        String name;
 
-		//TraceManager.addDev("getting tmladp: " + name);
-		TMLActivityDiagramPanel tmladp = mgui.getTMLActivityDiagramPanel(indexDesign, name);
-		//TraceManager.addDev("Got tmladp");
+        name = elt.getAttribute("name");
+        TActivityDiagramPanel tadp = mgui.getActivityDiagramPanel(indexDesign, name);
 
+        if (tadp == null) {
+            throw new MalformedModelingException();
+        }
 
-		if (tmladp == null) {
-			//TraceManager.addDev("null tmladp");
-			throw new MalformedModelingException();
-		}
+        tadp.removeAll();
 
-		tmladp.removeAll();
+        loadDiagram(elt, tadp);
+    }
 
-		loadDiagram(elt, tmladp);
-	}
+    public void loadDiplodocusMethodologyDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-	public void loadTURTLEOSClassDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        String name;
+        TDiagramPanel tdp;
 
-		String name;
-		TDiagramPanel tdp;
+        // Diagram name
+        name = elt.getAttribute("name");
+        mgui.setDiplodocusMethodologyDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
+        tdp.setName(name);
 
-		// class diagram name
-		name = elt.getAttribute("name");
-		mgui.setTMLTaskDiagramName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
-		loadDiagram(elt, tdp);
-	}
+        TraceManager.addDev("tdp=" + tdp.getName());
 
-	public void loadTURTLEOSActivityDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
-		String name;
+        loadDiagram(elt, tdp);
+    }
 
-		name = elt.getAttribute("name");
-		TURTLEOSActivityDiagramPanel tosadp = mgui.getTURTLEOSActivityDiagramPanel(indexDesign, name);
+    public void loadAvatarMethodologyDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		if (tosadp == null) {
-			throw new MalformedModelingException();
-		}
+        String name;
+        TDiagramPanel tdp;
 
-		tosadp.removeAll();
+        // class diagram name
+        name = elt.getAttribute("name");
+        mgui.setAvatarMethodologyDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
+        tdp.setName(name);
 
-		loadDiagram(elt, tosadp);
-	}
+        //TraceManager.addDev("tdp=" + tdp.getName());
 
-	public void loadProactiveCSD(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        loadDiagram(elt, tdp);
+    }
 
-		String name;
-		TDiagramPanel tdp;
+    public void loadSysmlsecMethodologyDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		// class diagram name
-		name = elt.getAttribute("name");
-		//  mgui.setProacticeCSDName(indexDesign, name);
-		tdp = mgui.getMainTDiagramPanel(indexDesign);
-		//ProactiveDesignPanel pdp=(ProactiveDesignPanel) mgui.getCurrentTURTLEPanel();
-		ProactiveDesignPanel pdp=(ProactiveDesignPanel) tdp.tp;
-		if (!tdp.getName().equals(name))
-			{
+        String name;
+        TDiagramPanel tdp;
 
-				//tdp=pdp.addCompositeStructureDiagram(name);
-				tdp=pdp.addProActiveCompSpecificationPanel(name);
-			}
+        // class diagram name
+        name = elt.getAttribute("name");
+        mgui.setSysmlsecMethodologyDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
+        tdp.setName(name);
 
-		//TraceManager.addDev("tdp=" + tdp.getName());
+        //TraceManager.addDev("tdp=" + tdp.getName());
 
-		loadDiagram(elt, tdp);
+        loadDiagram(elt, tdp);
+    }
 
-	}
+    public void loadTMLTaskDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-	public void loadProactiveSMD(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
-		String name;
+        String name;
+        TDiagramPanel tdp;
 
-		name = elt.getAttribute("name");
-		if (!(mgui.isProActiveSMDCreated(indexAnalysis, name))) {
-			mgui.createProActiveSMD(indexAnalysis, name);
-		}
-		ProactiveSMDPanel smd = mgui.getSMDPanel(indexAnalysis, name);
+        // class diagram name
+        name = elt.getAttribute("name");
+        mgui.setTMLTaskDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
 
-		if (smd == null) {
-			throw new MalformedModelingException();
-		}
+        //TraceManager.addDev("tdp=" + tdp.getName());
 
-		smd.removeAll();
+        loadDiagram(elt, tdp);
+    }
 
-		loadDiagram(elt, smd);
-	}
+    public void loadTMLComponentTaskDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-	public void loadIODiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
-		String name;
+        String name;
+        TDiagramPanel tdp;
 
-		name = elt.getAttribute("name");
-		//mgui.setIODName(indexAnalysis, name);
-		if (!(mgui.isIODCreated(indexAnalysis, name))) {
-			mgui.createIODiagram(indexAnalysis, name);
-		}
+        // Diagram name
+        name = elt.getAttribute("name");
+        mgui.setTMLComponentTaskDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
 
-		TDiagramPanel tdp = mgui.getIODiagramPanel(indexAnalysis, name);
+        //TraceManager.addDev("tdp=" + tdp.getName());
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+        loadDiagram(elt, tdp);
 
-		loadDiagram(elt, tdp);
-	}
+        ((TMLComponentTaskDiagramPanel)tdp).hideConnectors();
+        ((TMLComponentTaskDiagramPanel)tdp).updatePorts();
+    }
 
-	public void loadTMLCPDiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
-		String name;
+    public void loadTMLArchitectureDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		name = elt.getAttribute("name");
-		if (!(mgui.isTMLCPCreated(indexAnalysis, name))) {
-			mgui.createTMLCPDiagram(indexAnalysis, name);
-		}
+        String name;
+        TDiagramPanel tdp;
 
-		TDiagramPanel tdp = mgui.getTMLCPDiagramPanel(indexAnalysis, name);
+        // Diagram name
+        name = elt.getAttribute("name");
+        mgui.setTMLArchitectureDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+        //TraceManager.addDev("tdp=" + tdp.getName());
 
-		loadDiagram(elt, tdp);
-	}
+        loadDiagram(elt, tdp);
+    }
 
-	public void loadTMLSDDiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
-		String name;
+    public void loadTMLActivityDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        String name;
 
-		name = elt.getAttribute("name");
-		if (!(mgui.isTMLCPSDCreated(indexAnalysis, name))) {
-			mgui.createTMLCPSequenceDiagram(indexAnalysis, name);
-		}
+        name = elt.getAttribute("name");
 
-		TDiagramPanel tdp = mgui.getTMLCPSDDiagramPanel(indexAnalysis, name);
+        //TraceManager.addDev("getting tmladp: " + name);
+        TMLActivityDiagramPanel tmladp = mgui.getTMLActivityDiagramPanel(indexDesign, name);
+        //TraceManager.addDev("Got tmladp");
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
 
-		loadDiagram(elt, tdp);
-	}
+        if (tmladp == null) {
+            //TraceManager.addDev("null tmladp");
+            throw new MalformedModelingException();
+        }
 
-	public void loadRequirementDiagram(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
+        tmladp.removeAll();
 
-		name = elt.getAttribute("name");
-		mgui.createRequirementDiagram(indexAnalysis, name);
+        loadDiagram(elt, tmladp);
+    }
 
+    public void loadTURTLEOSClassDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		TDiagramPanel tdp = mgui.getRequirementDiagramPanel(indexAnalysis, indexTab, name);
+        String name;
+        TDiagramPanel tdp;
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+        // class diagram name
+        name = elt.getAttribute("name");
+        mgui.setTMLTaskDiagramName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
+        loadDiagram(elt, tdp);
+    }
 
-		loadDiagram(elt, tdp);
-	}
+    public void loadTURTLEOSActivityDiagram(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
+        String name;
 
-	public void loadEBRDD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
+        name = elt.getAttribute("name");
+        TURTLEOSActivityDiagramPanel tosadp = mgui.getTURTLEOSActivityDiagramPanel(indexDesign, name);
 
-		name = elt.getAttribute("name");
-		mgui.createEBRDD(indexAnalysis, name);
+        if (tosadp == null) {
+            throw new MalformedModelingException();
+        }
 
+        tosadp.removeAll();
 
-		TDiagramPanel tdp = mgui.getEBRDDPanel(indexAnalysis, indexTab, name);
+        loadDiagram(elt, tosadp);
+    }
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+    public void loadProactiveCSD(Element elt, int indexDesign) throws  MalformedModelingException, SAXException {
 
-		loadDiagram(elt, tdp);
-	}
+        String name;
+        TDiagramPanel tdp;
 
-	public void loadAttackTreeDiagram(Element elt, int indexDiag, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
+        // class diagram name
+        name = elt.getAttribute("name");
+        //  mgui.setProacticeCSDName(indexDesign, name);
+        tdp = mgui.getMainTDiagramPanel(indexDesign);
+        //ProactiveDesignPanel pdp=(ProactiveDesignPanel) mgui.getCurrentTURTLEPanel();
+        ProactiveDesignPanel pdp=(ProactiveDesignPanel) tdp.tp;
+        if (!tdp.getName().equals(name))
+            {
 
-		//TraceManager.addDev("indexDiag=" + indexDiag);
+                //tdp=pdp.addCompositeStructureDiagram(name);
+                tdp=pdp.addProActiveCompSpecificationPanel(name);
+            }
 
-		name = elt.getAttribute("name");
-		mgui.createAttackTreeDiagram(indexDiag, name);
+        //TraceManager.addDev("tdp=" + tdp.getName());
 
-		TDiagramPanel tdp = mgui.getAttackTreeDiagramPanel(indexDiag, indexTab, name);
+        loadDiagram(elt, tdp);
 
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		tdp.removeAll();
+    }
 
-		loadDiagram(elt, tdp);
-	}
+    public void loadProactiveSMD(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
+        String name;
 
-	public void loadSequenceDiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
-		String name;
+        name = elt.getAttribute("name");
+        if (!(mgui.isProActiveSMDCreated(indexAnalysis, name))) {
+            mgui.createProActiveSMD(indexAnalysis, name);
+        }
+        ProactiveSMDPanel smd = mgui.getSMDPanel(indexAnalysis, name);
 
-		name = elt.getAttribute("name");
-		if (!(mgui.isSDCreated(indexAnalysis, name))) {
-			mgui.createSequenceDiagram(indexAnalysis, name);
-		}
-		//TraceManager.addDev("Loading seq diag1");
-		ui.sd.SequenceDiagramPanel sdp = mgui.getSequenceDiagramPanel(indexAnalysis, name);
-		//TraceManager.addDev("Loading seq diag2");
+        if (smd == null) {
+            throw new MalformedModelingException();
+        }
 
-		if (sdp == null) {
-			throw new MalformedModelingException();
-		}
-		//TraceManager.addDev("Loading seq diag3");
+        smd.removeAll();
 
-		sdp.removeAll();
-		//TraceManager.addDev("Loading seq diag4");
+        loadDiagram(elt, smd);
+    }
 
-		loadDiagram(elt, sdp);
-		//TraceManager.addDev("Loading seq diag5");
-	}
-
-	public void loadSequenceDiagramZV(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
-		String name;
-
-		name = elt.getAttribute("name");
-		if (!(mgui.isSDZVCreated(indexAnalysis, name))) {
-			mgui.createSequenceDiagramZV(indexAnalysis, name);
-		}
-		//TraceManager.addDev("Loading seq diag1");
-		ui.sd2.SequenceDiagramPanel sdp = mgui.getSequenceDiagramPanelZV(indexAnalysis, name);
-		//TraceManager.addDev("Loading seq diag2");
-
-		if (sdp == null) {
-			throw new MalformedModelingException();
-		}
-		//TraceManager.addDev("Loading seq diag3");
-
-		sdp.removeAll();
-		//TraceManager.addDev("Loading seq diag4");
-
-		loadDiagram(elt, sdp);
-		//TraceManager.addDev("Loading seq diag5");
-	}
-
-	public void loadUseCaseDiagram(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
-		String name;
-
-		name = elt.getAttribute("name");
-		/*if (!(mgui.isUCDCreated(indexAnalysis, name))) {*/
-		mgui.createUseCaseDiagram(indexAnalysis, name);
-		//}
-		UseCaseDiagramPanel ucdp = mgui.getUseCaseDiagramPanel(indexAnalysis, indexTab, name);
-
-		if (ucdp == null) {
-			throw new MalformedModelingException();
-		}
-
-		ucdp.removeAll();
-
-		loadDiagram(elt, ucdp);
-	}
-
-	public void loadTDeploymentDiagram(Element elt, int indexDeployment) throws  MalformedModelingException, SAXException {
-		String name;
-
-		name = elt.getAttribute("name");
-		mgui.setDeploymentName(indexDeployment, name);
-		TDiagramPanel tdp = mgui.getMainTDiagramPanel(indexDeployment);
-
-		loadDiagram(elt, tdp);
-	}
-
-	public void loadNCDiagram(Element elt, int indexNC) throws  MalformedModelingException, SAXException {
-		String name;
-
-		name = elt.getAttribute("name");
-		mgui.setNCName(indexNC, name);
-		TDiagramPanel tdp = mgui.getMainTDiagramPanel(indexNC);
-
-		loadDiagram(elt, tdp);
-	}
-
-	// reinit the id of all components
-	public void makeLovelyIds() {
-		TDiagramPanel tdp;
-		int id = 1;
-		int i, j;
-		TURTLEPanel tp;
-		// search for diagram panels
-		for(i=0; i<panels.size(); i++) {
-			tp = (TURTLEPanel)(panels.elementAt(i));
-			for(j=0; j<tp.panels.size(); j++) {
-				tdp = (TDiagramPanel)(tp.panels.elementAt(j));
-				id = tdp.makeLovelyIds(id);
-				//TraceManager.addDev("Lovely id =" + id);
-			}
-		}
-
-		TGComponent.setGeneralId(id + 1);
-	}
-
-	public void loadDiagramInformation(Element elt, TDiagramPanel tdp) throws  MalformedModelingException {
-		int x, y;
-		double zoom = 0;
-		try {
-			x = Integer.decode(elt.getAttribute("minX")).intValue();
-			tdp.setMinX(x);
-			x = Integer.decode(elt.getAttribute("maxX")).intValue();
-			tdp.setMaxX(x);
-			y = Integer.decode(elt.getAttribute("minY")).intValue();
-			tdp.setMinY(y);
-			y = Integer.decode(elt.getAttribute("maxY")).intValue();
-			tdp.setMaxY(y);
-			tdp.updateSize();
-			zoom = Double.parseDouble(elt.getAttribute("zoom"));
-			if (zoom != 0) {
-				tdp.setZoom(zoom);
-				mgui.updateZoomInfo();
-			}
-		} catch (Exception e) {
-			// Model was saved in an older version of TTool
-		}
-
-		if (tdp instanceof TActivityDiagramPanel) {
-			((TActivityDiagramPanel)tdp).loadExtraParameters(elt);
-		}
-	}
-
-	public void loadActivityDiagram(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException {
-		//TraceManager.addDev("---> Load activity diagram");
-		try {
-			NodeList activityDiagramNl = docCopy.getElementsByTagName("TActivityDiagramPanel");
-
-			TraceManager.addDev("Loading activity diagram of " + newValue + "Before : " + oldValue);
-			TraceManager.addDev(""+docCopy);
-
-			if (activityDiagramNl == null) {
-				throw new MalformedModelingException();
-			}
-
-			Node adn;
-			Element elt;
-			TActivityDiagramPanel tadp;
-			String name;
-			int decXTmp = decX;
-			int decYTmp = decY;
-			int decIdTmp = decId;
-
-			for(int i=0; i<activityDiagramNl.getLength(); i++) {
-				adn = activityDiagramNl.item(i);
-				if (adn.getNodeType() == Node.ELEMENT_NODE) {
-					elt = (Element) adn;
-					// class diagram name
-					name = elt.getAttribute("name");
-					//TraceManager.addDev("Name of activity diagram=" + name);
-
-					if (name.equals(oldValue)) {
-						int indexDesign = mgui.getMajorIndexOf(tdp);
-
-						if (indexDesign < 0) {
-							throw new MalformedModelingException();
-						}
-
-						tadp = mgui.getActivityDiagramPanel(indexDesign, newValue);
-
-						//TraceManager.addDev("Searching panel");
-
-						if (tadp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//TraceManager.addDev("Panel ok");
-
-						decX = 0; decY = 0; decId = 0;
-
-
-
-						tadp.removeAll();
-
-						loadDiagramInformation(elt, tadp);
-
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tadp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-						connectConnectorsToRealPoints(tadp);
-						tadp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-						makePostLoading(tadp, 0);
-					}
-				}
-			}
-			decX = decXTmp;
-			decY = decYTmp;
-			decId = decIdTmp;
-		} catch (SAXException saxe) {
-			TraceManager.addError("Loading 701 " + saxe.getMessage());
-			throw new MalformedModelingException();
-		}
-	}
-
-	public void loadAvatarSMD(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException {
-		TraceManager.addDev("---> Load activity diagram of old=" + oldValue + " new=" + newValue);
-		try {
-			NodeList smdNl = docCopy.getElementsByTagName("AVATARStateMachineDiagramPanel");
-
-			//TraceManager.addDev("Loading state machine diagram of " + newValue + " Before : " + oldValue);
-			//TraceManager.addDev("smdNL: " + smdNl);
-
-			if (smdNl == null) {
-				TraceManager.addDev("AVATAR: null doc");
-				throw new MalformedModelingException();
-			}
-
-			Node adn;
-			Element elt;
-			AvatarSMDPanel asmdp;
-			String name;
-			int decXTmp = decX;
-			int decYTmp = decY;
-			int decIdTmp = decId;
-
-			for(int i=0; i<smdNl.getLength(); i++) {
-				adn = smdNl.item(i);
-				if (adn.getNodeType() == Node.ELEMENT_NODE) {
-					elt = (Element) adn;
-					// class diagram name
-					name = elt.getAttribute("name");
-					TraceManager.addDev("Name of activity diagram=" + name);
-
-					if (name.equals(oldValue)) {
-						int indexDesign = mgui.getMajorIndexOf(tdp);
-
-						if (indexDesign < 0) {
-							throw new MalformedModelingException();
-						}
-
-						asmdp = mgui.getAvatarSMDPanel(indexDesign, newValue);
-
-						TraceManager.addDev("Searching panel: " + newValue);
-
-						if (asmdp == null) {
-							throw new MalformedModelingException();
-						}
-
-						TraceManager.addDev("Panel ok");
-
-						decX = 0; decY = 0; decId = 0;
-
-
-						asmdp.removeAll();
-
-						loadDiagramInformation(elt, asmdp);
-
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), asmdp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), asmdp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), asmdp);
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
-						connectConnectorsToRealPoints(asmdp);
-						asmdp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
-						makePostLoading(asmdp, 0);
-					}
-				}
-			}
-			decX = decXTmp;
-			decY = decYTmp;
-			decId = decIdTmp;
-		} catch (SAXException saxe) {
-			TraceManager.addError("Loading 801 " + saxe.getMessage());
-			throw new MalformedModelingException();
-		}
-	}
-
-	public void loadTMLActivityDiagram(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException {
-		//TraceManager.addDev("---> Load TML activity diagram");
-		try {
-			if (docCopy == null) {
-				TraceManager.addDev("Null doc copy");
-			}
-			NodeList activityDiagramNl = docCopy.getElementsByTagName("TMLActivityDiagramPanel");
-
-			//TraceManager.addDev("Loading activity diagram of " + newValue + "Before : " + oldValue);
-
-			if (activityDiagramNl == null) {
-				//TraceManager.addDev("Null");
-				throw new MalformedModelingException();
-			}
-
-			Node adn;
-			Element elt;
-			TMLActivityDiagramPanel tmladp;
-			String name;
-			int decXTmp = decX;
-			int decYTmp = decY;
-			int decIdTmp = decId;
-
-			for(int i=0; i<activityDiagramNl.getLength(); i++) {
-				adn = activityDiagramNl.item(i);
-				if (adn.getNodeType() == Node.ELEMENT_NODE) {
-					elt = (Element) adn;
-					// class diagram name
-					name = elt.getAttribute("name");
-					//TraceManager.addDev("Name of activity diagram=" + name);
-
-					if (name.equals(oldValue)) {
-						int indexDesign = mgui.getMajorIndexOf(tdp);
-
-						if (indexDesign < 0) {
-							throw new MalformedModelingException();
-						}
-
-						tmladp = mgui.getTMLActivityDiagramPanel(indexDesign, newValue);
-
-						//TraceManager.addDev("Searching panel");
-
-						if (tmladp == null) {
-							throw new MalformedModelingException();
-						}
-
-						//TraceManager.addDev("Panel ok");
-
-						decX = 0; decY = 0; decId = 0;
-
-						tmladp.removeAll();
-
-						loadDiagramInformation(elt, tmladp);
-
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components");
-						makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmladp);
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors");
-						makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmladp);
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents");
-						makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmladp);
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " real points");
-						connectConnectorsToRealPoints(tmladp);
-						tmladp.structureChanged();
-						//TraceManager.addDev("Activity diagram : " + tmladp.getName() + " post loading");
-						makePostLoading(tmladp, 0);
-					}
-				}
-			}
-			decX = decXTmp;
-			decY = decYTmp;
-			decId = decIdTmp;
-		} catch (SAXException saxe) {
-			TraceManager.addError("Loading 901 " + saxe.getMessage());
-			throw new MalformedModelingException();
-		}
-	}
-
-	public void makePostLoading(TDiagramPanel tdp, int beginIndex) throws MalformedModelingException{
-		TGComponent tgc;
-
-		//TraceManager.addDev("Post loading of diagram " + tdp.toString());
-
-		List<TGComponent> list = tdp.getComponentList();
-
-		for(int i=0; i<list.size()-beginIndex; i++) {
-			tgc = list.get(i);
-			//TraceManager.addDev(tgc.getName());
-			//TraceManager.addDev(tgc.getValue());
-			tgc.makePostLoading(decId);
-		}
-
-		//TraceManager.addDev("Post loading of diagram " + tdp.toString() + " achieved");
-	}
-
-	public void makeXMLComponents(NodeList nl, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
-		Node n;
-		//Element elt;
-		TGComponent tgc;
-
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-		//boolean error = false;
-
-		for(int i=0; i<nl.getLength(); i++) {
-			n = nl.item(i);
-			if (n.getNodeType() == Node.ELEMENT_NODE) {
-				try {
-					tgc = makeXMLComponent(n, tdp);
-					//TraceManager.addDev("About to add component= " + tgc);
-					if ((tgc != null) && (tgc.getFather() == null)) {
-						//TraceManager.addDev("Component added to diagram tgc=" + tgc);
-						tdp.addBuiltComponent(tgc);
-					} else {
-						//TraceManager.addDev("Component not added to diagram");
-					}
-				} catch (MalformedModelingException mme) {
-			int type = getTypeOfComponentNode(n);
-			String t = "unknown";
-			if (type > 0) {
-			t = "" + type;
-			}
-			TraceManager.addDev ("a badly formed component Could not be created in the diagram");
-			
-			UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "A component could not be correctly loaded - type=" + t);
-			ce.setTDiagramPanel(tdp);
-			checkingErrors.add(ce);
-					//error = true;
-				}
-			}
-		}
-
-		/*if (error) {
-			throw new MalformedModelingException();
-		}*/
-	}
-
-	public int getTypeOfComponentNode(Node n) {
-	try {
-		//NodeList nl = n.getChildNodes();
-			Element elt = (Element)n;
-		return Integer.decode(elt.getAttribute("type")).intValue();
-	} catch (Exception e){
-	}
-	return -1;
-	}
-
-
-	public TGComponent makeXMLComponent(Node n, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
-		Element elt;
-		Element elt1;
-		TGComponent tgc = null;
-		TGComponent father;
-
-		//
-		try {
-
-			NodeList nl = n.getChildNodes();
-			elt = (Element)n;
-			elt1 = elt;
-			//TraceManager.addDev("elt=" + elt);
-
-			int myType = Integer.decode(elt.getAttribute("type")).intValue();
-			int myId = Integer.decode(elt.getAttribute("id")).intValue() + decId;
-
-			int myX = -1, myY = -1, myWidth = -1, myHeight =-1;
-			int myMinWidth = -1, myMinHeight = -1, myMinDesiredWidth = -1, myMinDesiredHeight = -1;
-			int myMinX = -1, myMaxX = -1, myMinY = -1, myMaxY = -1;
-			String myName = null, myValue = null;
-			Vector<Point> tgcpList = new Vector<Point>();
-			Point p;
-			int i, x, y;
-			int fatherId = -1, fatherNum = -1;
-			String pre = "", post = "";
-			String internalComment = "";
-			boolean accessibility = false;
-			boolean latencyCheck = false;
-			boolean invariant = false;
-			boolean breakpoint = false;
-			boolean hidden = false;
-			boolean masterMutex = false;
-			boolean enable = true;
-
-			for(i=0; i<nl.getLength(); i++) {
-				n = nl.item(i);
-				if (n.getNodeType() == Node.ELEMENT_NODE) {
-					elt = (Element) n;
-					if (elt.getTagName().equals("cdparam")) {
-						myX = Integer.decode(elt.getAttribute("x")).intValue() + decX;
-						myY = Integer.decode(elt.getAttribute("y")).intValue() + decY;
-					} else if (elt.getTagName().equals("sizeparam")) {
-						myWidth = Integer.decode(elt.getAttribute("width")).intValue();
-						myHeight = Integer.decode(elt.getAttribute("height")).intValue();
-						myMinWidth = Integer.decode(elt.getAttribute("minWidth")).intValue();
-						myMinHeight = Integer.decode(elt.getAttribute("minHeight")).intValue();
-						myMinDesiredWidth = Integer.decode(elt.getAttribute("minDesiredWidth")).intValue();
-						myMinDesiredHeight = Integer.decode(elt.getAttribute("minDesiredHeight")).intValue();
-					} else if (elt.getTagName().equals("cdrectangleparam")) {
-						myMinX = Integer.decode(elt.getAttribute("minX")).intValue();
-						myMaxX = Integer.decode(elt.getAttribute("maxX")).intValue();
-						myMinY = Integer.decode(elt.getAttribute("minY")).intValue();
-						myMaxY = Integer.decode(elt.getAttribute("maxY")).intValue();
-					} else if (elt.getTagName().equals("infoparam")) {
-						myName = elt.getAttribute("name");
-						myValue = elt.getAttribute("value");
-					} else if (elt.getTagName().equals("hidden")) {
-						hidden = elt.getAttribute("value").equals("true");
-					} else if (elt.getTagName().equals("enabled")) {
-						enable = elt.getAttribute("value").equals("true");
-					} else if (elt.getTagName().equals("TGConnectingPoint")) {
-						x = Integer.decode(elt.getAttribute("num")).intValue();
-						y = Integer.decode(elt.getAttribute("id")).intValue() + decId;
-						tgcpList.add(new Point(x, y));
-					} else if (elt.getTagName().equals("father")) {
-						fatherId = Integer.decode(elt.getAttribute("id")).intValue();
-						fatherNum = Integer.decode(elt.getAttribute("num")).intValue();
-					} else if (elt.getTagName().equals("prejavacode")) {
-						pre += elt.getAttribute("value") + "\n";
-					} else if (elt.getTagName().equals("postjavacode")) {
-						post += elt.getAttribute("value") + "\n";
-					} else if (elt.getTagName().equals("InternalComment")) {
-						internalComment += elt.getAttribute("value") + "\n";
-					} else if (elt.getTagName().equals("accessibility")) {
-						accessibility = true;
-					} else if (elt.getTagName().equals("latencyCheck")) {
-						latencyCheck = true;
-					} else if (elt.getTagName().equals("invariant")) {
-						invariant = true;
-					} else if (elt.getTagName().equals("mastermutex")) {
-						masterMutex = true;
-					} else if (elt.getTagName().equals("breakpoint")) {
-						breakpoint = true;
-					}
-				}
-			}
-
-			if ((myId == -1) || (myX == -1) || (myY == -1) || (myWidth == -1) || (myHeight == -1)) {
-				throw new MalformedModelingException();
-			}
-
-			//TraceManager.addDev("Making TGComponent of type " + myType + " and of name " + myName);
-			//TGComponent is ready to be built
-			if(fatherId != -1) {
-				fatherId += decId;
-				// internal component
-				//TraceManager.addDev("I am " + myName);
-				//TraceManager.addDev("Searching for component with id " + fatherId);
-				father = tdp.findComponentWithId(fatherId);
-				if (father == null) {
-					throw new MalformedModelingException();
-				}
-
-				//TraceManager.addDev("Done");
-				//TraceManager.addDev("Father My value is " + father.getValue());
-				//TraceManager.addDev("My class is " + father.getClass());
-
-				//TraceManager.addDev("Searching for component " + fatherNum + " at " + tgc.getName());
-				tgc = father.getInternalTGComponent(fatherNum);
-
-				if (tgc == null) {
-					// To be added to its father -> swallow component
-					if (father instanceof SwallowTGComponent) {
-						//TraceManager.addDev("1 Must add the component to its father:");
-						tgc = TGComponentManager.addComponent(myX, myY, myType, tdp);
-						//TraceManager.addDev("2 Must add the component to its father:" + tgc);
-						if (tgc instanceof SwallowedTGComponent) {
-							//TraceManager.addDev("3 Must add the component to its father:");
-							((SwallowTGComponent)father).addSwallowedTGComponent(tgc, myX, myY);
-							//TraceManager.addDev("Swallowed to father = " + father.getValue() + ". My name=" + myName + " decId=" + decId);
-						} else {
-							throw new MalformedModelingException();
-						}
-					} else {
-						throw new MalformedModelingException();
-					}
-				}
-
-				if (tgc != null) {
-					tgc.setCdRectangle(myMinX, myMaxX, myMinY, myMaxY);
-					tgc.setCd(myX, myY);
-					//TraceManager.addDev("set cd of " + tgc.getName());
-				}
-			} else {
-				tgc = TGComponentManager.addComponent(myX, myY, myType, tdp);
-			}
-			// TraceManager.addDev("TGComponent (" + tgc + ") built " + myType);
-
-			if (tgc == null) {
-				throw new MalformedModelingException();
-			}
-
-			if (myName != null) {
-				tgc.setName(myName);
-			}
-
-			tgc.setHidden(hidden);
-			tgc.setEnabled(enable);
-
-			/*if (tgc instanceof TCDTObject) {
-			  TraceManager.addDev("Loading " + myValue);
-			  }*/
-
-			String oldClassName = myValue;
-			//TraceManager.addDev("Old class name=" + oldClassName);
-			//Added by Solange
-			if ((myValue != null) && (!myValue.equals(null))){
-				if (tgc instanceof ProCSDComponent)
-					{
-						//Added by Solange
-						//And removed by emil
-						//myValue=generateNameIfInUse(myValue);
-						//  tgc.setValueWithChange(myValue);
-						//TraceManager.addDev("myValue=" + myValue);
-					}
-				//until here
-				if ((tgc instanceof TCDTClass) && (decId >0)){
-					if (tdp.isAlreadyATClassName(myValue)) {
-						myValue = tdp.findTClassName(myValue+"_");
-					}
-				}
-				if ((tgc instanceof TMLTaskOperator) && (decId >0)){
-					if (tdp.isAlreadyATMLTaskName(myValue)) {
-						myValue = tdp.findTMLTaskName(myValue+"_");
-					}
-				}
-
-				if ((tgc instanceof AvatarBDBlock) && (decId >0)){
-					if (tdp.isAlreadyAnAvatarBDBlockName(myValue)) {
-						myValue = tdp.findAvatarBDBlockName(myValue+"_");
-					}
-				}
-
-				if ((tgc instanceof TMLCPrimitiveComponent) && (decId >0)){
-					if (tdp.isAlreadyATMLPrimitiveComponentName(myValue)) {
-						myValue = tdp.findTMLPrimitiveComponentName(myValue+"_");
-					}
-					//TraceManager.addDev("MyValue=" + myValue);
-				}
-				if ((tgc instanceof TOSClass) && (decId >0)){
-					if (tdp.isAlreadyATOSClassName(myValue)) {
-						myValue = tdp.findTOSClassName(myValue+"_");
-					}
-				}
-				//TraceManager.addDev("myValue=" + myValue);
-				tgc.setValueWithChange(myValue);
-				//TraceManager.addDev("value done");
-				if ((tgc instanceof TCDTClass) && (decId >0)){
-					loadActivityDiagram(tdp, oldClassName, myValue);
-				}
-
-				if ((tgc instanceof AvatarBDBlock) && (decId >0)){
-					//TraceManager.addDev("Going to load ad of task " + oldClassName + " myValue=" + myValue);
-					loadAvatarSMD(tdp, oldClassName, myValue);
-				}
-
-				if ((tgc instanceof TMLTaskOperator) && (decId >0)){
-					//TraceManager.addDev("Going to load ad of task " + oldClassName + " myValue=" + myValue);
-					loadTMLActivityDiagram(tdp, oldClassName, myValue);
-				}
-
-				if ((tgc instanceof TMLCPrimitiveComponent) && (decId >0)){
-					//TraceManager.addDev("Going to load ad of component " + oldClassName + " myValue=" + myValue);
-					loadTMLActivityDiagram(tdp, oldClassName, myValue);
-				}
-			}
-
-			tgc.forceId(myId);
-			tgc.setLoaded(true);
-			tgc.setInternalLoaded(false);
-			tgc.setMinSize(myMinWidth, myMinHeight);
-			tgc.setMinDesiredSize(myMinDesiredWidth, myMinDesiredHeight);
-			tgc.resize(myWidth, myHeight);
-			tgc.hasBeenResized();
-
-			//TraceManager.addDev("Options set");
-
-			if (pre.compareTo("") != 0) {
-				tgc.setPreJavaCode(pre);
-			}
-			if (post.compareTo("") != 0) {
-				tgc.setPostJavaCode(post);
-			}
-
-			if (internalComment.compareTo("") != 0) {
-				tgc.setInternalComment(internalComment);
-			}
-
-			if (accessibility) {
-				tgc.setCheckableAccessibility(accessibility);
-
-			}
-
-			if (latencyCheck) {
-				tgc.setCheckLatency(latencyCheck);
-
-			}
-			if (invariant) {
-				tgc.setCheckableInvariant(invariant);
-			}
-
-			if (masterMutex) {
-				tgc.setMasterMutex(true);
-			}
-
-			if (breakpoint) {
-				tgc.setBreakpoint(breakpoint);
-			}
-
-			//extra param
-			// TraceManager.addDev("Extra params" + tgc.getClass());
-			// TraceManager.addDev("My value = " + tgc.getValue());
-			tgc.loadExtraParam(elt1.getElementsByTagName("extraparam"), decX, decY, decId);
-			// TraceManager.addDev("Extra param ok");
-
-			if ((tgc instanceof TCDTObject) && (decId > 0)) {
-				TCDTObject to = (TCDTObject)tgc;
-				//TraceManager.addDev("Setting TObject name to: " + to.getObjectName());
-				//TraceManager.addDev("Setting TObject name to: " + tdp.findTObjectName(to.getObjectName()));
-				to.setObjectName(tdp.findTObjectName(to.getObjectName()));
-			}
-
-			//TraceManager.addDev(tgc.toString());
-
-			//TraceManager.addDev("Making connecting points " + tgcpList.size());
-			for(i=0; i<tgcpList.size(); i++) {
-				p = (Point)(tgcpList.elementAt(i));
-				if (!tgc.setIdTGConnectingPoint(p.x, p.y)) {
-					//TraceManager.addDev("Warning: a connecting point has been removed");
-					//throw new MalformedModelingException();
-				}
-			}
-
-			//TraceManager.addDev("Not yet except!");
-			if (decId >0) {
-				tdp.bringToFront(tgc);
-			}
-			//TraceManager.addDev("Connecting points done " + myType);
-
-			/*if (tgc instanceof TCDTObject) {
-			  TraceManager.addDev("getValue " + tgc.getValue());
-			  }*/
-
-		} catch (Exception e) {
-			// TraceManager.addError("Exception XML Component "/* + e.getMessage() + "trace=" + e.getStackTrace()*/);
-			throw new MalformedModelingException();
-		}
-		return tgc;
-	}
-
-	//method added by Solange
-
-	public String generateNameIfInUse(String myName)
-	{
-		if (!(mgui.getCurrentTURTLEPanel().nameInUse(myName)))
-			{
-				return myName;
-			}
-
-		String other;
-		for(int w=0; w<100000; w++)
-			{
-				other = myName + "_" + w;
-				if (!(mgui.getCurrentTURTLEPanel().nameInUse(other)))
-					{
-						return other;
-					}
-			}
-		return null;
-	}
-	//until here
-
-	public void makePostProcessing(TDiagramPanel tdp) throws MalformedModelingException{
-		//TraceManager.addDev("Make post processing!");
-		if (tdp instanceof TClassDiagramPanel) {
-			((TClassDiagramPanel)tdp).makePostLoadingProcessing();
-		}
-		//TraceManager.addDev("Post processing is over");
-	}
-
-	public void makeXMLConnectors(NodeList nl, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
-		Node n;
-		//Element elt;
-		TGConnector tgco = null;
-		int i;
-
-		if (tdp == null) {
-			throw new MalformedModelingException();
-		}
-
-		for(i=0; i<nl.getLength(); i++) {
-			n = nl.item(i);
-			if (n.getNodeType() == Node.ELEMENT_NODE) {
-				tgco = makeXMLConnector(n, tdp);
-				if (tgco != null) {
-					tdp.addBuiltConnector(tgco);
-				} else {
-					TraceManager.addDev("Connector error");
-					throw new MalformedModelingException();
-				}
-			}
-		}
-	}
-
-	public void connectConnectorsToRealPoints(TDiagramPanel tdp) throws MalformedModelingException {
-		List<TGComponent> list = tdp.getComponentList();
-		TGConnectingPoint p1, p2, p3, p4;
-		//TGConnectingPointTmp p;
-		int i;
-		TGComponent tgc;
-		//TGComponent tgctmp;
-		TGConnector tgco = null;
-		//boolean error = false;
-		TGConnectorInfo tgcoinfo;
-
-
-		//connect connectors to their real connecting point
-		//TraceManager.addDev("Valid connectors ?");
-		for(i=0; i<list.size(); i++) {
-			tgc = (TGComponent)(list.get(i));
-			if (tgc instanceof TGConnector) {
-				tgco = (TGConnector)tgc;
-				p1 = tgco.getTGConnectingPointP1();
-				p2 = tgco.getTGConnectingPointP2();
-				if ((p1 instanceof TGConnectingPointTmp) && (p2 instanceof TGConnectingPointTmp)){
-					//TraceManager.addDev("Searching for id " + p1.getId());
-					p3 = tdp.findConnectingPoint(p1.getId());
-					//TraceManager.addDev("Searching for id " + p2.getId());
-					p4 = tdp.findConnectingPoint(p2.getId());
-					if (((p3 ==null) || (p4 == null)) &&(decId != 0)) {
-						if (list.remove(tgc)) {
-							i --;
-						} else {
-							throw new MalformedModelingException();
-						}
-					} else {
-						if ((p3 == null) ||(p4 == null)) {
-							//warning = true;
-							if (p3 == null) {
-								//TraceManager.addDev("Error on first id");
-							}
-							if (p4 == null) {
-								//TraceManager.addDev("Error on second id");
-							}
-							tgcoinfo = new TGConnectorInfo();
-							tgcoinfo.connector = tgco;
-							pendingConnectors.add(tgcoinfo);
-							TraceManager.addDev("One connector added to pending list");
-						} else {
-							tgco.setP1(p3);
-							p3.setFree(false);
-							tgco.setP2(p4);
-							p4.setFree(false);
-						}
-					}
-				}
-			}
-		}
-
-		/*for(TGConnector con: connectorsToRemove) {
-		  list.remove(con);
-		  }*/
-
-		/*if (error) {
-		  TraceManager.addDev("Connecting error: " + connectorsToRemove.size()  + " connectors have been removed");
-		  throw new MalformedModelingException();
-		  }*/
-	}
-
-	public void makeLastLoad() {
-		// Update references on all diagrams
-		//TraceManager.addDev("Updating ports");
-		//mgui.updateAllPorts();
-
-		// Update ports on all diagrams
-		//TraceManager.addDev("Updating references / ports");
-		mgui.updateAllReferences();
-
-		mgui.updateAllPorts();
-
-		//TraceManager.addDev("Pending connectors");
-		// Make use of pending connectors
-		TGConnectingPoint p1, p2, p3, p4;
-		TDiagramPanel tdp;
-		TGConnector tgco;
-		for(TGConnectorInfo info: pendingConnectors) {
-			tgco = info.connector;
-			if (tgco != null) {
-				tdp = tgco.getTDiagramPanel();
-				if (tdp != null) {
-					p1 = tgco.getTGConnectingPointP1();
-					p2 = tgco.getTGConnectingPointP2();
-					if ((p1 instanceof TGConnectingPointTmp) && (p2 instanceof TGConnectingPointTmp)){
-						TraceManager.addDev("Searching for id " + p1.getId());
-						p3 = tdp.findConnectingPoint(p1.getId());
-						TraceManager.addDev("Searching for id " + p2.getId());
-						p4 = tdp.findConnectingPoint(p2.getId());
-						if ((p3 == null) ||(p4 == null)) {
-							//warning = true;
-							if (p3 == null) {
-								TraceManager.addDev("Error on first id");
-							}
-							if (p4 == null) {
-								TraceManager.addDev("Error on second id");
-							}
-							TraceManager.addDev("One connector ignored");
-						} else {
-							tgco.setP1(p3);
-							p3.setFree(false);
-							tgco.setP2(p4);
-							p4.setFree(false);
-						}
-					}
-				}
-			}
-		}
-		pendingConnectors.clear();
-		//TraceManager.addDev("Last load done");
-	}
-
-	public TGConnector makeXMLConnector(Node n, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
-		Element elt, elt1;
-		TGConnector tgco = null;
-		//TGComponent tgc = null;
-
-		//TraceManager.addDev(n.toString());
-
-		try {
-
-			NodeList nl = n.getChildNodes();
-			elt = (Element)n;
-			elt1 = elt;
-
-			int myType = Integer.decode(elt.getAttribute("type")).intValue();
-			int myId = Integer.decode(elt.getAttribute("id")).intValue() + decId;
-
-			int myX = -1, myY = -1, myWidth = -1, myHeight =-1;
-			int myMinWidth = -1, myMinHeight = -1, myMinDesiredWidth = -1, myMinDesiredHeight = -1;
-			int myMaxWidth = -1, myMaxHeight = -1;
-			String myName = null, myValue = null;
-			int tmpx, tmpy, tmpid;
-			TGConnectingPoint p1 = null, p2=null;
-			Vector<Point> pointList = new Vector<Point>();
-
-			Vector<Point> tgcpList = new Vector<Point>();
-			Point p;
-			int i, x, y;
-			//int fatherId = -1, fatherNum = -1;
-			boolean automaticDrawing = true;
-
-			for(i=0; i<nl.getLength(); i++) {
-				n = nl.item(i);
-				if (n.getNodeType() == Node.ELEMENT_NODE) {
-					elt = (Element) n;
-					if (elt.getTagName().equals("cdparam")) {
-						myX = Integer.decode(elt.getAttribute("x")).intValue() + decX;
-						myY = Integer.decode(elt.getAttribute("y")).intValue() + decY;
-					} else if (elt.getTagName().equals("sizeparam")) {
-						myWidth = Integer.decode(elt.getAttribute("width")).intValue();
-						myHeight = Integer.decode(elt.getAttribute("height")).intValue();
-						myMinWidth = Integer.decode(elt.getAttribute("minWidth")).intValue();
-						myMinHeight = Integer.decode(elt.getAttribute("minHeight")).intValue();
-						if ((elt.getAttribute("maxWidth") != null) && (elt.getAttribute("maxWidth").length() > 0)) { // Test is made for compatibility with old versions
-							//TraceManager.addDev("maxWidth = " +  elt.getAttribute("maxWidth"));
-							myMaxWidth = Integer.decode(elt.getAttribute("maxWidth")).intValue();
-							myMaxHeight = Integer.decode(elt.getAttribute("maxHeight")).intValue();
-						}
-						myMinDesiredWidth = Integer.decode(elt.getAttribute("minDesiredWidth")).intValue();
-						myMinDesiredHeight = Integer.decode(elt.getAttribute("minDesiredHeight")).intValue();
-					} else if (elt.getTagName().equals("infoparam")) {
-						myName = elt.getAttribute("name");
-						myValue = elt.getAttribute("value");
-					} else if (elt.getTagName().equals("P1")) {
-						tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX;
-						tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY;
-						tmpid = Integer.decode(elt.getAttribute("id")).intValue() + decId;
-						TGComponent tgc1 = TGComponentManager.addComponent(tmpx, tmpy, TGComponentManager.TAD_START_STATE, tdp);
-						p1 = new TGConnectingPointTmp(tgc1, tmpx, tmpy, tmpid);
-						//TraceManager.addDev("P1id = " + tmpid);
-					} else if (elt.getTagName().equals("P2")) {
-						tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX;
-						tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY;
-						tmpid = Integer.decode(elt.getAttribute("id")).intValue() + decId;
-						TGComponent tgc2 = TGComponentManager.addComponent(tmpx, tmpy, TGComponentManager.TAD_START_STATE, tdp);
-						p2 = new TGConnectingPointTmp(tgc2, tmpx, tmpy, tmpid);
-						//TraceManager.addDev("P2id = " + tmpid);
-					} else if (elt.getTagName().equals("Point")) {
-						tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX;
-						tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY;
-						pointList.add(new Point(tmpx, tmpy));
-					} else if (elt.getTagName().equals("TGConnectingPoint")) {
-						x = Integer.decode(elt.getAttribute("num")).intValue();
-						y = Integer.decode(elt.getAttribute("id")).intValue() + decId;
-						tgcpList.add(new Point(x, y));
-						//TraceManager.addDev(" adding Connecting point !");
-					} else if (elt.getTagName().equals("AutomaticDrawing")) {
-						//TraceManager.addDev("AutomaticDrawing=" + elt.getAttribute("data"));
-						if (elt.getAttribute("data").compareTo("true") == 0) {
-							automaticDrawing = true;
-							//TraceManager.addDev("set to true");
-						} else {
-							automaticDrawing = false;
-						}
-						//automaticDrawing = Boolean.getBoolean(elt.getAttribute("data"));
-					}
-				}
-			}
-
-			if ((myType == -1) || (myId == -1) || (myX == -1) || (myY == -1) || (myWidth == -1) || (myHeight == -1) || (p1 == null) || (p2 == null)) {
-				throw new MalformedModelingException();
-			}
-
-			//TGConnector is ready to be built
-			//TraceManager.addDev("Making TGConnector of type " + myType);
-			tgco = TGComponentManager.addConnector(myX, myY, myType, tdp, p1, p2, pointList);
-			//TraceManager.addDev("TGConnector built " + myType);
-
-			if (tgco == null) {
-				TraceManager.addDev( "TGCO is null myType: " + myType );
-				throw new MalformedModelingException();
-			}
-
-			tgco.setAutomaticDrawing(automaticDrawing);
-
-			if (myName != null) {
-				tgco.setName(myName);
-			}
-			if ((myValue != null) && (!myValue.equals(null))){
-				tgco.setValueWithChange(myValue);
-			}
-
-			tgco.forceId(myId);
-			tgco.setLoaded(true);
-			tgco.setInternalLoaded(false);
-			tgco.setMinSize(myMinWidth, myMinHeight);
-			tgco.setMaxSize(myMaxWidth, myMaxHeight);
-			tgco.setMinDesiredSize(myMinDesiredWidth, myMinDesiredHeight);
-			tgco.resize(myWidth, myHeight);
-
-			tgco.loadExtraParam(elt1.getElementsByTagName("extraparam"), decX, decY, decId);
-
-			//TraceManager.addDev("Making connecting points " + myType);
-			for(i=0; i<tgcpList.size(); i++) {
-				p = (Point)(tgcpList.elementAt(i));
-				if (!tgco.setIdTGConnectingPoint(p.x, p.y)) {
-					throw new MalformedModelingException();
-				}
-			}
-
-			if (decId >0) {
-				tdp.bringToFront(tgco);
-			}
-
-			//TraceManager.addDev("Connecting points done " + myType);
-
-		} catch (Exception e) {
-			TraceManager.addError("Exception on connectors: HERE I AM");
-			throw new MalformedModelingException();
-		}
-		return tgco;
-	}
-
-
-
-	public boolean buildTURTLEModelingFromAnalysis(AnalysisPanel ap) throws AnalysisSyntaxException {
-
-		HMSC h;
-		//listE = new CorrespondanceTGElement();
-		checkingErrors = new LinkedList<CheckingError> ();
-
-		AnalysisPanelTranslator apt = new AnalysisPanelTranslator(ap, mgui);
-
-		try {
-			h = apt.translateHMSC();
-			listE = apt.getCorrespondanceTGElement();
-			checkingErrors = apt.getErrors();
-			apt.translateMSCs(h);
-			listE = apt.getCorrespondanceTGElement();
-			checkingErrors = apt.getErrors();
-		} catch (AnalysisSyntaxException ase) {
-			CheckingError ce = new CheckingError(CheckingError.STRUCTURE_ERROR, ase.getMessage());
-			checkingErrors.add(ce);
-			throw ase;
-		}
-
-		SDTranslator sd = new SDTranslator(h);
-		checkingErrors = null;
-		warnings = new LinkedList<CheckingError> ();
-		//TraceManager.addDev("Step 02");
-
-		mgui.setMode( MainGUI.VIEW_SUGG_DESIGN_KO);
-
-		//TraceManager.addDev("Step 1");
-		try {
-			tm = sd.toTURTLEModeling();
-			tmState = 0;
-		} catch (SDTranslationException e) {
-			checkingErrors = new LinkedList<CheckingError> ();
-			CheckingError error = new CheckingError(CheckingError.STRUCTURE_ERROR, e.getMessage());
-			checkingErrors.add(error);
-
-			throw new AnalysisSyntaxException("Problem during translation to a design TURTLE modeling");
-		}
-
-		//TraceManager.addDev("Step 2");
-
-		if (checkingErrors != null) {
-			return false;
-		}
-
-		// modeling is built
-		// Now check it !
-		//TraceManager.addDev("Step 3");
-		TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
-		checkingErrors = tmc.syntaxAnalysisChecking();
-		//TraceManager.addDev("Step 4");
-
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-			return false;
-		} else {
-			mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_OK);
-			return true;
-		}
-	}
-
-	public void generateDesign() {
-		generateDesign(tm);
-	}
-
-	public void generateDesign(TURTLEModeling tm) {
-		//TURTLEPanel tp = mgui.getCurrentTURTLEPanel();
-		nbSuggestedDesign ++;
-		TURTLEModelingDrawer tmd = new TURTLEModelingDrawer(mgui);
-		tmd.setTURTLEModeling(tm);
-		tmd.draw(nbSuggestedDesign);
-		mgui.changeMade(null, -1);
-	}
-
-	public void generateIOD(HMSC _hmsc, MSC _msc) {
-		MSCDrawer mscd = new MSCDrawer(mgui);
-		mscd.setHMSC(_hmsc);
-		mscd.setMSC(_msc);
-		mscd.drawFromMSC(nbSuggestedDesign);
-		nbSuggestedDesign ++;
-		mgui.changeMade(null, -1);
-	}
-
-	public boolean translateDeployment(DeploymentPanel dp) {
-		// Builds a TURTLE modeling from a deployment diagram
-		TraceManager.addDev("deployement");
-		checkingErrors = new LinkedList<CheckingError> ();
-		warnings = new LinkedList<CheckingError> ();
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-		tm = new TURTLEModeling();
-		tmState = 0;
-		listE = new CorrespondanceTGElement();
-		mgui.reinitCountOfPanels();
-
-		List<TDDNode> ll;
-		Iterator<TDDNode> iterator;//, iterator2;
-
-		// First step: adding all necessary classes + their ad
-		ll = dp.tddp.getListOfNodes();
-		iterator = ll.listIterator();
-		TDDNode node;
-		Vector<TDDArtifact> artifacts;
-		TDDArtifact art;
-		int i;
-		DesignPanel dp2;
-		TGComponent tgc;
-		//TCDTClass tc;
-		String name;
-		TClass t;
-		DesignPanelTranslator dpt;
-
-		// Loop on nodes
-		while(iterator.hasNext()) {
-			node = iterator.next();
-
-			// Loop on artifact
-			artifacts = node.getArtifactList();
-			for(i=0; i<artifacts.size(); i++) {
-				art = artifacts.elementAt(i);
-				dp2 = art.getDesignPanel();
-
-				final Iterator<TGComponent> iterator2 = dp2.tcdp.getComponentList().listIterator();
-				LinkedList<TClassInterface> tclasses = new LinkedList<TClassInterface> ();
-				while(iterator2.hasNext()) {
-					tgc = iterator2.next();
-					if (tgc instanceof TClassInterface) {
-						TraceManager.addDev("Found tclass: " + tgc.getValue());
-						tclasses.add((TClassInterface) tgc);
-					}
-				}
-				if (tclasses.size() > 0) {
-					name = node.getNodeName() + "__" + art.getValue() + "__";
-					dpt = new DesignPanelTranslator(dp2);
-					dpt.addTClasses(dp2, tclasses, name,tm);
-					dpt.addRelations(dp2, name,tm);
-
-					listE.merge(dpt.getCorrespondanceTGElement());
-					checkingErrors.addAll(dpt.getErrors());
-
-					// Set package name of tclasses
-					for(int j=0; j<tclasses.size(); j++) {
-						tgc = (TGComponent) tclasses.get (j);
-						t = listE.getTClass(tgc);
-						if (t != null) {
-							TraceManager.addDev("Setting package name of " + t.getName() + " to " + node.getNodeName());
-							t.setPackageName(node.getNodeName()+"_"+art.getValue());
-						}
-					}
-				}
-			}
-		}
-
-		// Second step : dealing with links!
-
-		DDTranslator ddt = new DDTranslator(dp, tm, listE);
-
-		try {
-			TraceManager.addDev("Dealing with links!");
-			ddt.translateLinks();
-		} catch (DDSyntaxException e) {
-			//throw new AnalysisSyntaxException("Problem during translation to a design TURTLE modeling");
-			TraceManager.addDev("Error during translation: " + e.getMessage());
-			return false;
-		}
-
-		mgui.setMode(MainGUI.GEN_DESIGN_OK);
-
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		}
-
-		// modeling is built
-		// Now check it !
-		TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
-		checkingErrors = tmc.syntaxAnalysisChecking();
-
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		} else {
-			mgui.setMode(MainGUI.GEN_DESIGN_OK);
-			return true;
-		}
-	}
-
-	public boolean translateAttackTreePanel(AttackTreePanel atp) {
-		AttackTreePanelTranslator att = new AttackTreePanelTranslator(atp);
-		/*attackTree =*/ att.translateToAttackTreeDataStructure();
-		checkingErrors = att.getCheckingErrors();
-		warnings = att.getWarnings();
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		}
-		avatarspec = att.generateAvatarSpec();
-		TraceManager.addDev("Avatar spec:" + avatarspec);
-		return true;
-	}
-
-	public boolean translateNC(NCPanel ncp) {
-		TraceManager.addDev("Translating NC");
-		checkingErrors = new LinkedList<CheckingError> ();
-		warnings = new LinkedList<CheckingError> ();
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-
-		GNCModeling gncm = new GNCModeling(ncp);
-		ncs = gncm.translateToNCStructure();
-		listE = gncm.getCorrespondanceTable();
-
-		checkingErrors = gncm.getCheckingErrors();
-		warnings = gncm.getCheckingWarnings();
-
-		TraceManager.addDev("errors:" + checkingErrors.size() + " warnings:" + warnings.size());
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		} else {
-			// Generate XML file
-			try {
-				String fileName = "network.xml";
-				if (ConfigurationTTool.NCDirectory != null) {
-					fileName = ConfigurationTTool.NCDirectory + fileName;
-				}
-				TraceManager.addDev("Saving in network structure in file: " + fileName);
-				FileUtils.saveFile(fileName, ncs.toISAENetworkXML());
-				fileName = "traffics.xml";
-				if (ConfigurationTTool.NCDirectory != null) {
-					fileName = ConfigurationTTool.NCDirectory + fileName;
-				}
-				TraceManager.addDev("Saving in traffics in file: " + fileName);
-				FileUtils.saveFile(fileName, ncs.toISAETrafficsXML());
-				TraceManager.addDev("Save done");
-			} catch (FileException fe) {
-				TraceManager.addError("Could not save NC in file:" + fe.getMessage());
-			}
-			mgui.setMode(MainGUI.NC_OK);
-			return true;
-		}
-
-	}
-
-	private void nullifyTMLModeling() {
-		tmlm = null;
-		artificialtmap = null;
-		tmap = null;
-		tmlcp = null;
-	}
-
-
-	public boolean translateTMLDesign(Vector<? extends TGComponent> tasksToTakeIntoAccount, TMLDesignPanel tmldp, boolean optimize) {
-		nullifyTMLModeling();
-		//  List<TMLError> warningsOptimize = new ArrayList<TMLError>();
-		warnings = new LinkedList<CheckingError> ();
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-
-		GTMLModeling gtmlm = new GTMLModeling(tmldp, true);
-		gtmlm.setTasks(tasksToTakeIntoAccount);
-		tmlm = gtmlm.translateToTMLModeling(true);
-		//tmlm.removeAllRandomSequences();
-		TraceManager.addDev("New TML Modeling:" + tmlm.toString());
-		mgui.generateTMLTxt();
-		artificialtmap = tmlm.getDefaultMapping();
-		tmap = null;
-		listE = gtmlm.getCorrespondanceTable();
-		//TraceManager.addDev("TML Modeling translated");
-		//TraceManager.addDev("----- TML Modeling -----");
-		//TraceManager.addDev(tmlm.toString());
-		//TraceManager.addDev("------------------------");
-		checkingErrors = gtmlm.getCheckingErrors();
-
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			analyzeErrors();
-
-			return false;
-		} else {
-			//			if (optimize) {
-			//				warningsOptimize = tmlm.optimize();
-			//			}
-
-			tmState = 2;
-			mgui.resetAllDIPLOIDs();
-			listE.useDIPLOIDs();
-			return true;
-			//TraceManager.addDev("tm generated:");
-			//tm.print();
-		}
-	}
-
-	public Vector<CheckingError> convertToCheckingErrorTMLErrors( List<TMLError> warningsOptimize, TDiagramPanel _tdp) {
-		Vector<CheckingError> v = new Vector<CheckingError>();
-		UICheckingError warning;
-
-		for(TMLError error: warningsOptimize) {
-			warning = new UICheckingError(CheckingError.BEHAVIOR_ERROR, error.message);
-			warning.setTDiagramPanel(_tdp);
-			v.add(warning);
-		}
-
-		return v;
-	}
-
-	public boolean translateTMLComponentDesign(Vector<? extends TGComponent> componentsToTakeIntoAccount, TMLComponentDesignPanel tmlcdp, boolean optimize) {
-		nullifyTMLModeling();
-		//	ArrayList<TMLError> warningsOptimize = new ArrayList<TMLError>();
-		warnings = new LinkedList<CheckingError> ();
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-
-		GTMLModeling gctmlm = new GTMLModeling(tmlcdp, true);
-		gctmlm.putPrefixName(true);
-		gctmlm.setComponents(componentsToTakeIntoAccount);
-		tmlm = gctmlm.translateToTMLModeling(true);
-		mgui.generateTMLTxt();
-		artificialtmap = tmlm.getDefaultMapping();
-		tmap = null;
-		listE = gctmlm.getCorrespondanceTable();
-
-		//TraceManager.addDev("TML Modeling translated");
-		//TraceManager.addDev("----- TML Modeling -----");
-		//TraceManager.addDev(tmlm.toString());
-		//TraceManager.addDev("------------------------");
-		//mgui.generateTMLTxt();
-		checkingErrors = gctmlm.getCheckingErrors();
-
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			analyzeErrors();
-			return false;
-		}
-		else {
-			//			if (optimize) {
-			//				//TraceManager.addDev("OPTIMIZE");
-			//				warningsOptimize = tmlm.optimize();
-			//			}
-
-			tmState = 2;
-			//TraceManager.addDev("tm generated:");
-			mgui.resetAllDIPLOIDs();
-			listE.useDIPLOIDs();
-			return true;
-			//tm.print();
-		}
-	}
-
-	public boolean translateTMLModeling() {
-		TML2TURTLE tt = new TML2TURTLE(tmlm);
-		tm = tt.generateTURTLEModeling();
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			TraceManager.addDev("Error in TURTLE generation");
-			analyzeErrors();
-			return false;
-		} else {
-			// Optimize
-			TraceManager.addDev("Optimize");
-			tm.optimize();
-			TraceManager.addDev("Optimize done");
-			TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
-			checkingErrors = tmc.syntaxAnalysisChecking();
-			if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-				analyzeErrors();
-				return false;
-			} else {
-				mgui.setMode(MainGUI.GEN_DESIGN_OK);
-				return true;
-			}
-		}
-	}
-
-	public boolean checkSyntaxTMLMapping(Vector<TGComponent> nodesToTakeIntoAccount, TMLArchiPanel tmlap, boolean optimize) {
-		List<TMLError> warningsOptimize = new ArrayList<TMLError>();
-		warnings = new LinkedList<CheckingError> ();
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-		//TraceManager.addDev("New TML Mapping");
-		GTMLModeling gtmlm = new GTMLModeling(tmlap, true);
-
-
-		gtmlm.setNodes(nodesToTakeIntoAccount); //simply transforms the parameter from a Vector to LinkedList
-		nullifyTMLModeling();
-		tmlm = null;
-		tm = null;
-		tmState = 1;
-		tmap = gtmlm.translateToTMLMapping();
-
-		listE = gtmlm.getCorrespondanceTable();
-
-		checkingErrors = gtmlm.getCheckingErrors();
-		avatarspec = gtmlm.avspec;
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			analyzeErrors();
-			warnings = gtmlm.getCheckingWarnings();
-			return false;
-		} else {
-			//tmap.removeAllRandomSequences();
-			if (optimize) {
-				warningsOptimize = tmap.optimize();
-			}
-			warnings.addAll(convertToCheckingErrorTMLErrors(warningsOptimize, tmlap.tmlap));
-			mgui.resetAllDIPLOIDs();
-			listE.useDIPLOIDs();
-			mgui.setMode(MainGUI.GEN_DESIGN_OK);
-			return true;
-		}
-	}
-
-	//Newly introduced to perform Syntax check of CP diagrams. Actually the mapping of CPs onto the architecture is done via SDs,
-	//onto the application is done onto blocks in the architecture. It would be better to have all the mapping information in one
-	//diagram. Up to now, not taking the mapping information into account
-	public boolean checkSyntaxTMLCP( Vector<TGComponent> nodesToTakeIntoAccount, TMLCommunicationPatternPanel tmlcpp, boolean optimize ) {
-
-		//nodesToTakeIntoAccount is the list of SDs and ADs corresponding that compose the CP selected for syntax checking
-		//	List<TMLError> warningsOptimize = new ArrayList<TMLError>();
-		warnings = new LinkedList<CheckingError> ();
-		mgui.setMode( MainGUI.VIEW_SUGG_DESIGN_KO );
-		GTMLModeling gtmlm = new GTMLModeling( tmlcpp, true );
-
-		TraceManager.addDev( "NodesToTakeIntoAccount :" + nodesToTakeIntoAccount.toString() );
-
-		//Useless because nodesToTakeIntoAccount does not include the mainCP!
-		//gtmlm.setDiagramPanels( nodesToTakeIntoAccount );	 //passes the list of nodes (SDs and ADs) to gtml as a LinkedList
-		tmlm = null;
-		tm = null;
-		tmState = 1;
-		nullifyTMLModeling();
-		//tmlcp is the data structure for a CP corresponding to the graphical description with diagrams
-		tmlcp = gtmlm.translateToTMLCPDataStructure( tmlcpp.getName() );
-		//tmlcp.toString();
-		/*TraceManager.addDev( "I AM ABOUT TO GENERATE THE TMLtxt CODE!" );
-		  mgui.generateTMLTxt();		//Now generating the TMLtxt code
-		  TraceManager.addDev( "TMLtxt CODE GENERATION DONE" );*/
-		listE = gtmlm.getCorrespondanceTable();
-		//for( CorrespondanceTGElement element : listE.getNames() )	 {
-		TraceManager.addDev( "Printing listE.getNames: " + listE.getNames().toString() );
-		TraceManager.addDev( "Printing listE.getTG: " + listE.getTG().toString() );
-		TraceManager.addDev( "Printing listE.getPanelNames: " + listE.getPanelNames().toString() );
-		TraceManager.addDev( "Printing listE.getData: " + listE.getData().toString() );
-		//}
-		checkingErrors = gtmlm.getCheckingErrors();
-
-		if( (checkingErrors != null) && (checkingErrors.size() > 0) )   {
-			//analyzeErrors();
-
-			return false;
-		}
-		/*else {
-		//tmcp.removeAllRandomSequences();
-		if( optimize )  {
-		warningsOptimize = tmap.optimize();
-		//warningsOptimize = tmcp.optimize();
-		}
-		warnings.addAll( convertToCheckingErrorTMLErrors(warningsOptimize, tmlcpp.tmlcpp ) );
-		mgui.resetAllDIPLOIDs();
-		listE.useDIPLOIDs();
-		mgui.setMode( MainGUI.GEN_DESIGN_OK );
-		return true;
-		}*/
-		return true;	//It means that there are no errors
-	}
-
-	public boolean translateTMLMapping(boolean _sample, boolean _channel, boolean _event, boolean _request, boolean _exec, boolean _busTransfers, boolean _scheduling, boolean _taskState, boolean _channelState, boolean _branching, boolean _terminateCPU, boolean _terminateCPUs, boolean _clocked, String _tickValue, boolean _endClocked, boolean _countTick, boolean _maxCountTick, String _maxCountTickValue, boolean _randomTask) {
-		//TraceManager.addDev("TML=" + tmap.toString());
-		Mapping2TIF m2tif = new Mapping2TIF(tmap);
-		m2tif.setShowSampleChannels(_sample);
-		m2tif.setShowChannels(_channel);
-		m2tif.setShowEvents(_event);
-		m2tif.setShowRequests(_request);
-		m2tif.setShowExecs(_exec);
-		m2tif.setShowBusTransfers(_busTransfers);
-		m2tif.setShowScheduling(_scheduling);
-		m2tif.setIsClocked(_clocked);
-		m2tif.setTickValue(_tickValue);
-		m2tif.setIsEndClocked(_endClocked);
-		m2tif.setIsCountTick(_countTick);
-		m2tif.hasMaxCountTick(_maxCountTick);
-		if (_maxCountTick) {
-			m2tif.setMaxCountTickValue(_maxCountTickValue);
-		}
-		m2tif.setShowTaskState(_taskState);
-		m2tif.setShowChannelState(_channelState);
-		m2tif.setShowBlockedCPU(_terminateCPU);
-		m2tif.setShowTerminateCPUs(_terminateCPUs);
-		m2tif.setShowBranching(_branching);
-		m2tif.setRandomTasks(_randomTask);
-		tm = m2tif.generateTURTLEModeling();
-		//StringBuffer sb = tm.printToStringBuffer();
-		//TraceManager.addDev("tm=" + sb);
-
-		TraceManager.addDev("tm generated from TMAP");
-		checkingErrors = m2tif.getCheckingErrors();
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		}
-		mgui.setMode(MainGUI.GEN_DESIGN_OK);
-		return true;
-	}
-
-	//Added by Solange
-	public void generateLists(ProactiveDesignPanel pdp) {
-		gpdtemp = new GProactiveDesign(pdp);
-	}
-	//
-
-	public boolean translateTURTLEOSDesign(TURTLEOSDesignPanel tosdp) {
-		warnings = new LinkedList<CheckingError> ();
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-		//TraceManager.addDev("New TML Modeling");
-		GTURTLEOSModeling gosm = new GTURTLEOSModeling(tosdp);
-		//gtmlm.setTasks(tasksToTakeIntoAccount);
-		//tmlm = gosm.translateToTMLModeling();
-		//TraceManager.addDev("TML Modeling translated");
-		//TraceManager.addDev("----- TML Modeling -----");
-		//TraceManager.addDev(tmlm.toString());
-		//TraceManager.addDev("------------------------");
-		tm = gosm.generateTURTLEModeling();
-		tmState = 0;
-		checkingErrors = gosm.getCheckingErrors();
-
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		} else {
-
-			//TraceManager.addDev("Optimize");
-			tm.optimize();
-			//TraceManager.addDev("Optimize done");
-			TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
-			checkingErrors = tmc.syntaxAnalysisChecking();
-			if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-				return false;
-			} else {
-				warnings = gosm.getCheckingWarnings();
-				warnings.addAll(tmc.getWarnings());
-				mgui.setMode(MainGUI.GEN_DESIGN_OK);
-				return true;
-			}
-		}
-	}
-
-
-	public boolean translateProactiveDesign(ProactiveDesignPanel pdp) {
-		mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
-		GProactiveDesign gpd = new GProactiveDesign(pdp);
-
-		tm = gpd.generateTURTLEModeling();
-		tmState = 0;
-
-		if (gpd.checkSyntax() == false) {
-			TraceManager.addDev("Errors found");
-			warnings = gpd.getCheckingWarnings();
-			checkingErrors = gpd.getCheckingErrors();
-			return false;
-		}
-		TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
-		checkingErrors = tmc.syntaxAnalysisChecking();
-		warnings = tmc.getWarnings();
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		} else {
-			//A faire:
-			//  tm.optimize();
-			//  warnings = gpd.getCheckingWarnings();
-			//  warnings.addAll(tmc.getWarnings());
-			mgui.setMode(MainGUI.GEN_DESIGN_OK);
-			return true;
-		}
-
-	}
-
-
-	public void addStates(AvatarStateMachineElement asme, int x, int y, AvatarSMDPanel smp, AvatarBDBlock bl, Map<AvatarStateMachineElement, TGComponent> SMDMap, Map<AvatarStateMachineElement, TGComponent> locMap, Map<AvatarTransition, AvatarStateMachineElement> tranDestMap, Map<AvatarTransition, TGComponent> tranSourceMap){
-		// TGConnectingPoint tp = new TGConnectingPoint(null, x, y, false, false);
-		//Create dummy tgcomponent
-		TGComponent tgcomp = new AvatarSMDStartState(x,y,x,x*2,y,y*2,false,null,smp);
-		if (asme==null){
-			return;
-		}
-		if (asme instanceof AvatarStartState){
-			AvatarSMDStartState smdss = new AvatarSMDStartState(x, y, x, x*2, y, y*2, false, null, smp);
-			tgcomp = smdss;
-			smp.addComponent(smdss, x, y, false, true);
-			SMDMap.put(asme, smdss);
-			//   tp = smdss.tgconnectingPointAtIndex(0);
-			locMap.put(asme, smdss);
-		}
-		if (asme instanceof AvatarTransition){
-			//
-		}
-		if (asme instanceof AvatarActionOnSignal){
-			avatartranslator.AvatarSignal sig = ((AvatarActionOnSignal) asme).getSignal();
-			if (sig.isIn()){
-				AvatarSMDReceiveSignal smdrs = new AvatarSMDReceiveSignal(x, y, x, x*2, y, y*2, false, null, smp);
-				tgcomp=smdrs;
-				smp.addComponent(smdrs, x, y, false, true);
-//				String name=sig.minString();
-				//System.out.println("signal values" +((AvatarActionOnSignal)asme).getValues());
-				String parameters="";
-				if (((AvatarActionOnSignal)asme).getValues().size()>0){
-					parameters+=((AvatarActionOnSignal)asme).getValues().get(0);
-					for (int i=1; i < ((AvatarActionOnSignal)asme).getValues().size(); i++){
-						parameters=parameters+","+((AvatarActionOnSignal)asme).getValues().get(i);
-					}
-				}
-				String name=sig.getName()+"("+parameters+")";
-				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, smdrs);
-				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);
-				tgcomp=smdss;
-				smp.addComponent(smdss, x, y, false, true);				
-				String parameters="";
-				if (((AvatarActionOnSignal)asme).getValues().size()>0){
-					parameters+=((AvatarActionOnSignal)asme).getValues().get(0);
-					for (int i=1; i < ((AvatarActionOnSignal)asme).getValues().size(); i++){
-						parameters=parameters+","+((AvatarActionOnSignal)asme).getValues().get(i);
-					}
-				}
-				String name=sig.getName()+"("+parameters+")";
-				//String name=sig.minString();
-				smdss.setValue(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, smdss);
-				if (bl.getAvatarSignalFromName(name)  == null){
-					// bl.addSignal(new ui.AvatarSignal(1, name, new String[0], new String[0]));
-				}
-			}
-
-		}
-		if (asme instanceof AvatarStopState){
-			AvatarSMDStopState smdstop = new AvatarSMDStopState(x, y, x, x*2, y, y*2, false, null, smp);
-			tgcomp=smdstop;
-			SMDMap.put(asme, smdstop);
-			smp.addComponent(smdstop, x, y, false, true);
-			//	tp = smdstop.tgconnectingPointAtIndex(0);
-			locMap.put(asme, smdstop);
-		}
-		if (asme instanceof AvatarState){
-			//check if empty checker state
-			/* if (asme.getName().contains("signalstate_")){
-			//don't add the state, ignore next transition,
-			if (asme.getNexts().size()==1){
-			AvatarStateMachineElement next = asme.getNext(0).getNext(0);
-			//Reroute transition
-			for (AvatarTransition at: tranDestMap.keySet()){
-			if (tranDestMap.get(at) == asme){
-			tranDestMap.put(at, next);
-			}
-			}
-			addStates(next, x, y, smp,bl, SMDMap, locMap, tranDestMap, tranSourceMap);
-			return;
-			}
-			}*/
-			AvatarSMDState smdstate = new AvatarSMDState(x, y, x, x*2, y, y*2, false, null, smp);
-			tgcomp=smdstate;
-			smp.addComponent(smdstate, x, y, false, true);
-			smdstate.setValue(asme.getName());
-			smdstate.recalculateSize();
-			SMDMap.put(asme, smdstate);
-			//   tp = smdstate.getFreeTGConnectingPoint(x+smdstate.getWidth()/2,y+smdstate.getHeight());
-			//  TGConnectingPoint tp2 = smdstate.getFreeTGConnectingPoint(x+smdstate.getWidth()/2,y);
-			locMap.put(asme, smdstate);
-		}
-		int i=0;
-		int diff=100;
-		int ydiff=50;
-		int num = asme.nbOfNexts();
-		if (!(asme instanceof AvatarTransition)){
-			for (AvatarStateMachineElement el:asme.getNexts()){
-				if (!(el instanceof AvatarTransition)){
-					System.out.println("ERROR: non-Transition " + asme + " connected to non-Transition " + el);
-				}
-			}
-		}
-		for (AvatarStateMachineElement el:asme.getNexts()){
-			if (el instanceof AvatarTransition){
-				tranSourceMap.put((AvatarTransition) el, tgcomp);
-			}
-			else {
-				if (asme instanceof AvatarTransition){
-					AvatarTransition t = (AvatarTransition) asme;
-					tranDestMap.put(t, el);
-				}
-			}
-			if (!SMDMap.containsKey(el)){
-				addStates(el, x+diff*(i-num/2), y+ydiff, smp, bl, SMDMap, locMap, tranDestMap, tranSourceMap);
-			}
-			i++;
-		}
-		return;
-	}
-
-	public void drawBlockProperties(AvatarBlock ab, AvatarBDBlock bl){
-		for (avatartranslator.AvatarSignal sig:ab.getSignals()){
-			String name=sig.getName().split("__")[sig.getName().split("__").length-1];
-			//		 sig.setName(name);
-			String[] types = new String[sig.getListOfAttributes().size()];
-			String[] typeIds = new String[sig.getListOfAttributes().size()];
-			int i=0;
-			for (AvatarAttribute attr: sig.getListOfAttributes()){
-				types[i]=attr.getType().getStringType();
-				typeIds[i]=attr.getName();
-				i++;
-			}
-			TraceManager.addDev("Adding signal "+sig);
-			bl.addSignal(new ui.AvatarSignal(sig.getInOut(), name, types, typeIds));
-		}
-
-		bl.setValueWithChange(ab.getName().split("__")[ab.getName().split("__").length-1]);
-
-		for (AvatarAttribute attr: ab.getAttributes()){
-			int type=5;
-			if (attr.getType()==AvatarType.BOOLEAN){
-				type=4;
-			}
-			if (attr.getType()==AvatarType.INTEGER){
-				type=0;
-			}
-			if (attr.hasInitialValue()){
-				bl.addAttribute(new TAttribute(0, attr.getName(), attr.getInitialValue(), type));
-			}
-			else {
-				bl.addAttribute(new TAttribute(0, attr.getName(), attr.getType().getDefaultInitialValue(), type));
-			}
-			if (attr.getName().contains("key_")){
-				hasCrypto=true;
-				bl.addCryptoElements();
-			}
-		}
-		for (avatartranslator.AvatarMethod method: ab.getMethods()){
-			bl.addMethodIfApplicable(method.toString().replaceAll(" = 0",""));
-		}
-	}
-	public void drawPanel(AvatarSpecification avspec, AvatarDesignPanel adp){
-		//System.out.println(avspec.toString());
-		hasCrypto=false;
-		Map<String, Set<String>> originDestMap = new HashMap<String, Set<String>>();
-		Map<String, AvatarBDBlock> blockMap = new HashMap<String, AvatarBDBlock>();
-		if (adp ==null){
-			return;
-		}
-		if (avspec==null){
-			return;
-		}
-		AvatarBDPanel abd = adp.abdp;
-
-		//Find all blocks, create nested blocks starting from top left
-		int xpos=10;
-		int ypos=40;
-
-		//Create blocks recursively, starting from top level ones with no father
-		//Lowest level blocks should be 100x100, next should be 100x(number of children*100+50)...etc,
-		//Find level #, 0 refers to no father, etc
-		Map<AvatarBlock, Integer> blockLevelMap = new HashMap<AvatarBlock, Integer>();
-		Map<AvatarBlock, Integer> blockSizeMap = new HashMap<AvatarBlock, Integer>();
-		Map<AvatarBlock, Integer> blockIncMap = new HashMap<AvatarBlock, Integer>();
-		int maxLevel=0;
-		for (AvatarBlock ab: avspec.getListOfBlocks()){
-			int level=0;
-			AvatarBlock block=ab;
-			while (block.getFather()!=null){
-				if (blockSizeMap.containsKey(block.getFather())){
-					blockSizeMap.put(block.getFather(), blockSizeMap.get(block.getFather())+1);
-				}
-				else {
-					blockSizeMap.put(block.getFather(),1);
-					blockIncMap.put(block.getFather(), 10);
-				}
-				level++;
-				block=block.getFather();
-			}
-			if (level>maxLevel){
-				maxLevel=level;
-			}
-			if (!blockSizeMap.containsKey(block)){
-				blockSizeMap.put(block, 0);
-				blockIncMap.put(block,10);
-			}
-			blockLevelMap.put(ab, level);
-		}
-
-
-		for (int level=0; level<maxLevel+1; level++){
-			for (AvatarBlock ab:avspec.getListOfBlocks()){
-				if (blockLevelMap.get(ab)==level){
-					if (level==0){
-						AvatarBDBlock bl = new AvatarBDBlock(xpos, ypos, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, null, abd);
-						abd.addComponent(bl, xpos, ypos, false, true);
-						bl.resize(100*blockSizeMap.get(ab)+100, 100+(maxLevel-level)*50);
-						drawBlockProperties(ab,bl);
-						AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue());
-						buildStateMachine(ab, bl, smp);
-						blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length-1], bl);
-						xpos+=100*blockSizeMap.get(ab)+200;
-					}
-					else {
-
-						AvatarBDBlock father= blockMap.get(ab.getFather().getName().split("__")[ab.getFather().getName().split("__").length-1]);
-						//System.out.println("blockmap " + blockMap);
-						if (father==null){
-							//System.out.println("Missing father block " + ab.getFather().getName());
-							continue;
-						}
-						AvatarBDBlock bl = new AvatarBDBlock(father.getX()+blockIncMap.get(ab.getFather()), father.getY()+10, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, father, abd);
-						abd.addComponent(bl, father.getX()+blockIncMap.get(ab.getFather()), father.getY()+10, false, true);
-						int size=100;
-						if (blockSizeMap.containsKey(ab)){
-							size=100*blockSizeMap.get(ab)+50;
-						}
-						bl.resize(size, 100+(maxLevel-level)*50);
-						drawBlockProperties(ab,bl);
-						abd.attach(bl);
-						AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue());
-						buildStateMachine(ab, bl, smp);
-						blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length-1], bl);
-						blockIncMap.put(ab.getFather(), blockIncMap.get(ab.getFather())+size+10);
-					}
-				}
-			}
-		}
-
-
-		for (AvatarRelation ar: avspec.getRelations()){
-			String bl1 = ar.block1.getName();
-			String bl2 = ar.block2.getName();
-			if (originDestMap.containsKey(bl1.split("__")[bl1.split("__").length-1])){
-				originDestMap.get(bl1.split("__")[bl1.split("__").length-1]).add(bl2.split("__")[bl2.split("__").length-1]);
-			} else if (originDestMap.containsKey(bl2.split("__")[bl2.split("__").length-1])){
-                            originDestMap.get(bl2.split("__")[bl2.split("__").length-1]).add(bl1.split("__")[bl1.split("__").length-1]);
+    public void loadIODiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        //mgui.setIODName(indexAnalysis, name);
+        if (!(mgui.isIODCreated(indexAnalysis, name))) {
+            mgui.createIODiagram(indexAnalysis, name);
+        }
+
+        TDiagramPanel tdp = mgui.getIODiagramPanel(indexAnalysis, name);
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadTMLCPDiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        if (!(mgui.isTMLCPCreated(indexAnalysis, name))) {
+            mgui.createTMLCPDiagram(indexAnalysis, name);
+        }
+
+        TDiagramPanel tdp = mgui.getTMLCPDiagramPanel(indexAnalysis, name);
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadTMLSDDiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        if (!(mgui.isTMLCPSDCreated(indexAnalysis, name))) {
+            mgui.createTMLCPSequenceDiagram(indexAnalysis, name);
+        }
+
+        TDiagramPanel tdp = mgui.getTMLCPSDDiagramPanel(indexAnalysis, name);
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadRequirementDiagram(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        mgui.createRequirementDiagram(indexAnalysis, name);
+
+
+        TDiagramPanel tdp = mgui.getRequirementDiagramPanel(indexAnalysis, indexTab, name);
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadEBRDD(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        mgui.createEBRDD(indexAnalysis, name);
+
+
+        TDiagramPanel tdp = mgui.getEBRDDPanel(indexAnalysis, indexTab, name);
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadAttackTreeDiagram(Element elt, int indexDiag, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
+
+        //TraceManager.addDev("indexDiag=" + indexDiag);
+
+        name = elt.getAttribute("name");
+        mgui.createAttackTreeDiagram(indexDiag, name);
+
+        TDiagramPanel tdp = mgui.getAttackTreeDiagramPanel(indexDiag, indexTab, name);
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        tdp.removeAll();
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadSequenceDiagram(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        if (!(mgui.isSDCreated(indexAnalysis, name))) {
+            mgui.createSequenceDiagram(indexAnalysis, name);
+        }
+        //TraceManager.addDev("Loading seq diag1");
+        ui.sd.SequenceDiagramPanel sdp = mgui.getSequenceDiagramPanel(indexAnalysis, name);
+        //TraceManager.addDev("Loading seq diag2");
+
+        if (sdp == null) {
+            throw new MalformedModelingException();
+        }
+        //TraceManager.addDev("Loading seq diag3");
+
+        sdp.removeAll();
+        //TraceManager.addDev("Loading seq diag4");
+
+        loadDiagram(elt, sdp);
+        //TraceManager.addDev("Loading seq diag5");
+    }
+
+    public void loadSequenceDiagramZV(Element elt, int indexAnalysis) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        if (!(mgui.isSDZVCreated(indexAnalysis, name))) {
+            mgui.createSequenceDiagramZV(indexAnalysis, name);
+        }
+        //TraceManager.addDev("Loading seq diag1");
+        ui.sd2.SequenceDiagramPanel sdp = mgui.getSequenceDiagramPanelZV(indexAnalysis, name);
+        //TraceManager.addDev("Loading seq diag2");
+
+        if (sdp == null) {
+            throw new MalformedModelingException();
+        }
+        //TraceManager.addDev("Loading seq diag3");
+
+        sdp.removeAll();
+        //TraceManager.addDev("Loading seq diag4");
+
+        loadDiagram(elt, sdp);
+        //TraceManager.addDev("Loading seq diag5");
+    }
+
+    public void loadUseCaseDiagram(Element elt, int indexAnalysis, int indexTab) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        /*if (!(mgui.isUCDCreated(indexAnalysis, name))) {*/
+        mgui.createUseCaseDiagram(indexAnalysis, name);
+        //}
+        UseCaseDiagramPanel ucdp = mgui.getUseCaseDiagramPanel(indexAnalysis, indexTab, name);
+
+        if (ucdp == null) {
+            throw new MalformedModelingException();
+        }
+
+        ucdp.removeAll();
+
+        loadDiagram(elt, ucdp);
+    }
+
+    public void loadTDeploymentDiagram(Element elt, int indexDeployment) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        mgui.setDeploymentName(indexDeployment, name);
+        TDiagramPanel tdp = mgui.getMainTDiagramPanel(indexDeployment);
+
+        loadDiagram(elt, tdp);
+    }
+
+    public void loadNCDiagram(Element elt, int indexNC) throws  MalformedModelingException, SAXException {
+        String name;
+
+        name = elt.getAttribute("name");
+        mgui.setNCName(indexNC, name);
+        TDiagramPanel tdp = mgui.getMainTDiagramPanel(indexNC);
+
+        loadDiagram(elt, tdp);
+    }
+
+    // reinit the id of all components
+    public void makeLovelyIds() {
+        TDiagramPanel tdp;
+        int id = 1;
+        int i, j;
+        TURTLEPanel tp;
+        // search for diagram panels
+        for(i=0; i<panels.size(); i++) {
+            tp = (TURTLEPanel)(panels.elementAt(i));
+            for(j=0; j<tp.panels.size(); j++) {
+                tdp = (TDiagramPanel)(tp.panels.elementAt(j));
+                id = tdp.makeLovelyIds(id);
+                //TraceManager.addDev("Lovely id =" + id);
+            }
+        }
+
+        TGComponent.setGeneralId(id + 1);
+    }
+
+    public void loadDiagramInformation(Element elt, TDiagramPanel tdp) throws  MalformedModelingException {
+        int x, y;
+        double zoom = 0;
+        try {
+            x = Integer.decode(elt.getAttribute("minX")).intValue();
+            tdp.setMinX(x);
+            x = Integer.decode(elt.getAttribute("maxX")).intValue();
+            tdp.setMaxX(x);
+            y = Integer.decode(elt.getAttribute("minY")).intValue();
+            tdp.setMinY(y);
+            y = Integer.decode(elt.getAttribute("maxY")).intValue();
+            tdp.setMaxY(y);
+            tdp.updateSize();
+            zoom = Double.parseDouble(elt.getAttribute("zoom"));
+            if (zoom != 0) {
+                tdp.setZoom(zoom);
+                mgui.updateZoomInfo();
+            }
+        } catch (Exception e) {
+            // Model was saved in an older version of TTool
+        }
+
+        if (tdp instanceof TActivityDiagramPanel) {
+            ((TActivityDiagramPanel)tdp).loadExtraParameters(elt);
+        }
+    }
+
+    public void loadActivityDiagram(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException {
+        //TraceManager.addDev("---> Load activity diagram");
+        try {
+            NodeList activityDiagramNl = docCopy.getElementsByTagName("TActivityDiagramPanel");
+
+            TraceManager.addDev("Loading activity diagram of " + newValue + "Before : " + oldValue);
+            TraceManager.addDev(""+docCopy);
+
+            if (activityDiagramNl == null) {
+                throw new MalformedModelingException();
+            }
+
+            Node adn;
+            Element elt;
+            TActivityDiagramPanel tadp;
+            String name;
+            int decXTmp = decX;
+            int decYTmp = decY;
+            int decIdTmp = decId;
+
+            for(int i=0; i<activityDiagramNl.getLength(); i++) {
+                adn = activityDiagramNl.item(i);
+                if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                    elt = (Element) adn;
+                    // class diagram name
+                    name = elt.getAttribute("name");
+                    //TraceManager.addDev("Name of activity diagram=" + name);
+
+                    if (name.equals(oldValue)) {
+                        int indexDesign = mgui.getMajorIndexOf(tdp);
+
+                        if (indexDesign < 0) {
+                            throw new MalformedModelingException();
+                        }
+
+                        tadp = mgui.getActivityDiagramPanel(indexDesign, newValue);
+
+                        //TraceManager.addDev("Searching panel");
+
+                        if (tadp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //TraceManager.addDev("Panel ok");
+
+                        decX = 0; decY = 0; decId = 0;
+
+
+
+                        tadp.removeAll();
+
+                        loadDiagramInformation(elt, tadp);
+
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tadp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                        connectConnectorsToRealPoints(tadp);
+                        tadp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                        makePostLoading(tadp, 0);
+                    }
+                }
+            }
+            decX = decXTmp;
+            decY = decYTmp;
+            decId = decIdTmp;
+        } catch (SAXException saxe) {
+            TraceManager.addError("Loading 701 " + saxe.getMessage());
+            throw new MalformedModelingException();
+        }
+    }
+
+    public void loadAvatarSMD(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException {
+        TraceManager.addDev("---> Load activity diagram of old=" + oldValue + " new=" + newValue);
+        try {
+            NodeList smdNl = docCopy.getElementsByTagName("AVATARStateMachineDiagramPanel");
+
+            //TraceManager.addDev("Loading state machine diagram of " + newValue + " Before : " + oldValue);
+            //TraceManager.addDev("smdNL: " + smdNl);
+
+            if (smdNl == null) {
+                TraceManager.addDev("AVATAR: null doc");
+                throw new MalformedModelingException();
+            }
+
+            Node adn;
+            Element elt;
+            AvatarSMDPanel asmdp;
+            String name;
+            int decXTmp = decX;
+            int decYTmp = decY;
+            int decIdTmp = decId;
+
+            for(int i=0; i<smdNl.getLength(); i++) {
+                adn = smdNl.item(i);
+                if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                    elt = (Element) adn;
+                    // class diagram name
+                    name = elt.getAttribute("name");
+                    TraceManager.addDev("Name of activity diagram=" + name);
+
+                    if (name.equals(oldValue)) {
+                        int indexDesign = mgui.getMajorIndexOf(tdp);
+
+                        if (indexDesign < 0) {
+                            throw new MalformedModelingException();
+                        }
+
+                        asmdp = mgui.getAvatarSMDPanel(indexDesign, newValue);
+
+                        TraceManager.addDev("Searching panel: " + newValue);
+
+                        if (asmdp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        TraceManager.addDev("Panel ok");
+
+                        decX = 0; decY = 0; decId = 0;
+
+
+                        asmdp.removeAll();
+
+                        loadDiagramInformation(elt, asmdp);
+
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), asmdp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), asmdp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), asmdp);
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " real points");
+                        connectConnectorsToRealPoints(asmdp);
+                        asmdp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tadp.getName() + " post loading");
+                        makePostLoading(asmdp, 0);
+                    }
+                }
+            }
+            decX = decXTmp;
+            decY = decYTmp;
+            decId = decIdTmp;
+        } catch (SAXException saxe) {
+            TraceManager.addError("Loading 801 " + saxe.getMessage());
+            throw new MalformedModelingException();
+        }
+    }
+
+    public void loadTMLActivityDiagram(TDiagramPanel tdp, String oldValue, String newValue) throws MalformedModelingException {
+        //TraceManager.addDev("---> Load TML activity diagram");
+        try {
+            if (docCopy == null) {
+                TraceManager.addDev("Null doc copy");
+            }
+            NodeList activityDiagramNl = docCopy.getElementsByTagName("TMLActivityDiagramPanel");
+
+            //TraceManager.addDev("Loading activity diagram of " + newValue + "Before : " + oldValue);
+
+            if (activityDiagramNl == null) {
+                //TraceManager.addDev("Null");
+                throw new MalformedModelingException();
+            }
+
+            Node adn;
+            Element elt;
+            TMLActivityDiagramPanel tmladp;
+            String name;
+            int decXTmp = decX;
+            int decYTmp = decY;
+            int decIdTmp = decId;
+
+            for(int i=0; i<activityDiagramNl.getLength(); i++) {
+                adn = activityDiagramNl.item(i);
+                if (adn.getNodeType() == Node.ELEMENT_NODE) {
+                    elt = (Element) adn;
+                    // class diagram name
+                    name = elt.getAttribute("name");
+                    //TraceManager.addDev("Name of activity diagram=" + name);
+
+                    if (name.equals(oldValue)) {
+                        int indexDesign = mgui.getMajorIndexOf(tdp);
+
+                        if (indexDesign < 0) {
+                            throw new MalformedModelingException();
+                        }
+
+                        tmladp = mgui.getTMLActivityDiagramPanel(indexDesign, newValue);
+
+                        //TraceManager.addDev("Searching panel");
+
+                        if (tmladp == null) {
+                            throw new MalformedModelingException();
+                        }
+
+                        //TraceManager.addDev("Panel ok");
+
+                        decX = 0; decY = 0; decId = 0;
+
+                        tmladp.removeAll();
+
+                        loadDiagramInformation(elt, tmladp);
+
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " components");
+                        makeXMLComponents(elt.getElementsByTagName("COMPONENT"), tmladp);
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " connectors");
+                        makeXMLConnectors(elt.getElementsByTagName("CONNECTOR"), tmladp);
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " subcomponents");
+                        makeXMLComponents(elt.getElementsByTagName("SUBCOMPONENT"), tmladp);
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " real points");
+                        connectConnectorsToRealPoints(tmladp);
+                        tmladp.structureChanged();
+                        //TraceManager.addDev("Activity diagram : " + tmladp.getName() + " post loading");
+                        makePostLoading(tmladp, 0);
+                    }
+                }
+            }
+            decX = decXTmp;
+            decY = decYTmp;
+            decId = decIdTmp;
+        } catch (SAXException saxe) {
+            TraceManager.addError("Loading 901 " + saxe.getMessage());
+            throw new MalformedModelingException();
+        }
+    }
+
+    public void makePostLoading(TDiagramPanel tdp, int beginIndex) throws MalformedModelingException{
+        TGComponent tgc;
+
+        //TraceManager.addDev("Post loading of diagram " + tdp.toString());
+
+        List<TGComponent> list = tdp.getComponentList();
+
+        for(int i=0; i<list.size()-beginIndex; i++) {
+            tgc = list.get(i);
+            //TraceManager.addDev(tgc.getName());
+            //TraceManager.addDev(tgc.getValue());
+            tgc.makePostLoading(decId);
+        }
+
+        //TraceManager.addDev("Post loading of diagram " + tdp.toString() + " achieved");
+    }
+
+    public void makeXMLComponents(NodeList nl, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
+        Node n;
+        //Element elt;
+        TGComponent tgc;
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+        //boolean error = false;
+
+        tdp.drawable = false;
+
+        try {
+
+            for(int i=0; i<nl.getLength(); i++) {
+                n = nl.item(i);
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+                    try {
+                        tgc = makeXMLComponent(n, tdp);
+                        //TraceManager.addDev("About to add component= " + tgc);
+                        if ((tgc != null) && (tgc.getFather() == null)) {
+                            //TraceManager.addDev("Component added to diagram tgc=" + tgc);
+                            tdp.addBuiltComponent(tgc);
+                        } else {
+                            //TraceManager.addDev("Component not added to diagram");
+                        }
+                    } catch (MalformedModelingException mme) {
+                        int type = getTypeOfComponentNode(n);
+                        String t = "unknown";
+                        if (type > 0) {
+                            t = "" + type;
+                        }
+                        TraceManager.addDev ("a badly formed component Could not be created in the diagram");
+
+                        UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "A component could not be correctly loaded - type=" + t);
+                        ce.setTDiagramPanel(tdp);
+                        checkingErrors.add(ce);
+                        //error = true;
+                    }
+                }
+            }
+
+        } catch (SAXException se) {
+            tdp.drawable = true;
+            throw se;
+        } catch (Exception e) {
+            tdp.drawable = true;
+            throw e;
+        }
+
+        tdp.drawable = true;
+
+        /*if (error) {
+          throw new MalformedModelingException();
+          }*/
+    }
+
+    public int getTypeOfComponentNode(Node n) {
+        try {
+            //NodeList nl = n.getChildNodes();
+            Element elt = (Element)n;
+            return Integer.decode(elt.getAttribute("type")).intValue();
+        } catch (Exception e){
+        }
+        return -1;
+    }
+
+
+    public TGComponent makeXMLComponent(Node n, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
+        Element elt;
+        Element elt1;
+        TGComponent tgc = null;
+        TGComponent father;
+
+        //
+        try {
+
+            NodeList nl = n.getChildNodes();
+            elt = (Element)n;
+            elt1 = elt;
+            //TraceManager.addDev("elt=" + elt);
+
+            int myType = Integer.decode(elt.getAttribute("type")).intValue();
+            int myId = Integer.decode(elt.getAttribute("id")).intValue() + decId;
+
+            int myX = -1, myY = -1, myWidth = -1, myHeight =-1;
+            int myMinWidth = -1, myMinHeight = -1, myMinDesiredWidth = -1, myMinDesiredHeight = -1;
+            int myMinX = -1, myMaxX = -1, myMinY = -1, myMaxY = -1;
+            String myName = null, myValue = null;
+            Vector<Point> tgcpList = new Vector<Point>();
+            Point p;
+            int i, x, y;
+            int fatherId = -1, fatherNum = -1;
+            String pre = "", post = "";
+            String internalComment = "";
+            boolean accessibility = false;
+            boolean latencyCheck = false;
+            boolean invariant = false;
+            boolean breakpoint = false;
+            boolean hidden = false;
+            boolean masterMutex = false;
+            boolean enable = true;
+
+            for(i=0; i<nl.getLength(); i++) {
+                n = nl.item(i);
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+                    elt = (Element) n;
+                    if (elt.getTagName().equals("cdparam")) {
+                        myX = Integer.decode(elt.getAttribute("x")).intValue() + decX;
+                        myY = Integer.decode(elt.getAttribute("y")).intValue() + decY;
+                    } else if (elt.getTagName().equals("sizeparam")) {
+                        myWidth = Integer.decode(elt.getAttribute("width")).intValue();
+                        myHeight = Integer.decode(elt.getAttribute("height")).intValue();
+                        myMinWidth = Integer.decode(elt.getAttribute("minWidth")).intValue();
+                        myMinHeight = Integer.decode(elt.getAttribute("minHeight")).intValue();
+                        myMinDesiredWidth = Integer.decode(elt.getAttribute("minDesiredWidth")).intValue();
+                        myMinDesiredHeight = Integer.decode(elt.getAttribute("minDesiredHeight")).intValue();
+                    } else if (elt.getTagName().equals("cdrectangleparam")) {
+                        myMinX = Integer.decode(elt.getAttribute("minX")).intValue();
+                        myMaxX = Integer.decode(elt.getAttribute("maxX")).intValue();
+                        myMinY = Integer.decode(elt.getAttribute("minY")).intValue();
+                        myMaxY = Integer.decode(elt.getAttribute("maxY")).intValue();
+                    } else if (elt.getTagName().equals("infoparam")) {
+                        myName = elt.getAttribute("name");
+                        myValue = elt.getAttribute("value");
+                    } else if (elt.getTagName().equals("hidden")) {
+                        hidden = elt.getAttribute("value").equals("true");
+                    } else if (elt.getTagName().equals("enabled")) {
+                        enable = elt.getAttribute("value").equals("true");
+                    } else if (elt.getTagName().equals("TGConnectingPoint")) {
+                        x = Integer.decode(elt.getAttribute("num")).intValue();
+                        y = Integer.decode(elt.getAttribute("id")).intValue() + decId;
+                        tgcpList.add(new Point(x, y));
+                    } else if (elt.getTagName().equals("father")) {
+                        fatherId = Integer.decode(elt.getAttribute("id")).intValue();
+                        fatherNum = Integer.decode(elt.getAttribute("num")).intValue();
+                    } else if (elt.getTagName().equals("prejavacode")) {
+                        pre += elt.getAttribute("value") + "\n";
+                    } else if (elt.getTagName().equals("postjavacode")) {
+                        post += elt.getAttribute("value") + "\n";
+                    } else if (elt.getTagName().equals("InternalComment")) {
+                        internalComment += elt.getAttribute("value") + "\n";
+                    } else if (elt.getTagName().equals("accessibility")) {
+                        accessibility = true;
+                    } else if (elt.getTagName().equals("latencyCheck")) {
+                        latencyCheck = true;
+                    } else if (elt.getTagName().equals("invariant")) {
+                        invariant = true;
+                    } else if (elt.getTagName().equals("mastermutex")) {
+                        masterMutex = true;
+                    } else if (elt.getTagName().equals("breakpoint")) {
+                        breakpoint = true;
+                    }
+                }
+            }
+
+            if ((myId == -1) || (myX == -1) || (myY == -1) || (myWidth == -1) || (myHeight == -1)) {
+                throw new MalformedModelingException();
+            }
+
+            //TraceManager.addDev("Making TGComponent of type " + myType + " and of name " + myName);
+            //TGComponent is ready to be built
+            if(fatherId != -1) {
+                fatherId += decId;
+                // internal component
+                //TraceManager.addDev("I am " + myName);
+                //TraceManager.addDev("Searching for component with id " + fatherId);
+                father = tdp.findComponentWithId(fatherId);
+                if (father == null) {
+                    throw new MalformedModelingException();
+                }
+
+                //TraceManager.addDev("Done");
+                //TraceManager.addDev("Father My value is " + father.getValue());
+                //TraceManager.addDev("My class is " + father.getClass());
+
+                //TraceManager.addDev("Searching for component " + fatherNum + " at " + tgc.getName());
+                tgc = father.getInternalTGComponent(fatherNum);
+
+                if (tgc == null) {
+                    // To be added to its father -> swallow component
+                    if (father instanceof SwallowTGComponent) {
+                        //TraceManager.addDev("1 Must add the component to its father:");
+                        tgc = TGComponentManager.addComponent(myX, myY, myType, tdp);
+                        //TraceManager.addDev("2 Must add the component to its father:" + tgc);
+                        if (tgc instanceof SwallowedTGComponent) {
+                            //TraceManager.addDev("3 Must add the component to its father:");
+                            ((SwallowTGComponent)father).addSwallowedTGComponent(tgc, myX, myY);
+                            //TraceManager.addDev("Swallowed to father = " + father.getValue() + ". My name=" + myName + " decId=" + decId);
+                        } else {
+                            throw new MalformedModelingException();
+                        }
+                    } else {
+                        throw new MalformedModelingException();
+                    }
+                }
+
+                if (tgc != null) {
+                    tgc.setCdRectangle(myMinX, myMaxX, myMinY, myMaxY);
+                    tgc.setCd(myX, myY);
+                    //TraceManager.addDev("set cd of " + tgc.getName());
+                }
+            } else {
+                tgc = TGComponentManager.addComponent(myX, myY, myType, tdp);
+            }
+            // TraceManager.addDev("TGComponent (" + tgc + ") built " + myType);
+
+            if (tgc == null) {
+                throw new MalformedModelingException();
+            }
+
+            if (myName != null) {
+                tgc.setName(myName);
+            }
+
+            tgc.setHidden(hidden);
+            tgc.setEnabled(enable);
+
+            /*if (tgc instanceof TCDTObject) {
+              TraceManager.addDev("Loading " + myValue);
+              }*/
+
+            String oldClassName = myValue;
+            //TraceManager.addDev("Old class name=" + oldClassName);
+            //Added by Solange
+            if ((myValue != null) && (!myValue.equals(null))){
+                if (tgc instanceof ProCSDComponent)
+                    {
+                        //Added by Solange
+                        //And removed by emil
+                        //myValue=generateNameIfInUse(myValue);
+                        //  tgc.setValueWithChange(myValue);
+                        //TraceManager.addDev("myValue=" + myValue);
+                    }
+                //until here
+                if ((tgc instanceof TCDTClass) && (decId >0)){
+                    if (tdp.isAlreadyATClassName(myValue)) {
+                        myValue = tdp.findTClassName(myValue+"_");
+                    }
+                }
+                if ((tgc instanceof TMLTaskOperator) && (decId >0)){
+                    if (tdp.isAlreadyATMLTaskName(myValue)) {
+                        myValue = tdp.findTMLTaskName(myValue+"_");
+                    }
+                }
+
+                if ((tgc instanceof AvatarBDBlock) && (decId >0)){
+                    if (tdp.isAlreadyAnAvatarBDBlockName(myValue)) {
+                        myValue = tdp.findAvatarBDBlockName(myValue+"_");
+                    }
+                }
+
+                if ((tgc instanceof TMLCPrimitiveComponent) && (decId >0)){
+                    if (tdp.isAlreadyATMLPrimitiveComponentName(myValue)) {
+                        myValue = tdp.findTMLPrimitiveComponentName(myValue+"_");
+                    }
+                    //TraceManager.addDev("MyValue=" + myValue);
+                }
+                if ((tgc instanceof TOSClass) && (decId >0)){
+                    if (tdp.isAlreadyATOSClassName(myValue)) {
+                        myValue = tdp.findTOSClassName(myValue+"_");
+                    }
+                }
+                //TraceManager.addDev("myValue=" + myValue);
+                tgc.setValueWithChange(myValue);
+                //TraceManager.addDev("value done");
+                if ((tgc instanceof TCDTClass) && (decId >0)){
+                    loadActivityDiagram(tdp, oldClassName, myValue);
+                }
+
+                if ((tgc instanceof AvatarBDBlock) && (decId >0)){
+                    //TraceManager.addDev("Going to load ad of task " + oldClassName + " myValue=" + myValue);
+                    loadAvatarSMD(tdp, oldClassName, myValue);
+                }
+
+                if ((tgc instanceof TMLTaskOperator) && (decId >0)){
+                    //TraceManager.addDev("Going to load ad of task " + oldClassName + " myValue=" + myValue);
+                    loadTMLActivityDiagram(tdp, oldClassName, myValue);
+                }
+
+                if ((tgc instanceof TMLCPrimitiveComponent) && (decId >0)){
+                    //TraceManager.addDev("Going to load ad of component " + oldClassName + " myValue=" + myValue);
+                    loadTMLActivityDiagram(tdp, oldClassName, myValue);
+                }
+            }
+
+            tgc.forceId(myId);
+            tgc.setLoaded(true);
+            tgc.setInternalLoaded(false);
+            tgc.setMinSize(myMinWidth, myMinHeight);
+            tgc.setMinDesiredSize(myMinDesiredWidth, myMinDesiredHeight);
+            tgc.resize(myWidth, myHeight);
+            tgc.hasBeenResized();
+
+            //TraceManager.addDev("Options set");
+
+            if (pre.compareTo("") != 0) {
+                tgc.setPreJavaCode(pre);
+            }
+            if (post.compareTo("") != 0) {
+                tgc.setPostJavaCode(post);
+            }
+
+            if (internalComment.compareTo("") != 0) {
+                tgc.setInternalComment(internalComment);
+            }
+
+            if (accessibility) {
+                tgc.setCheckableAccessibility(accessibility);
+
+            }
+
+            if (latencyCheck) {
+                tgc.setCheckLatency(latencyCheck);
+
+            }
+            if (invariant) {
+                tgc.setCheckableInvariant(invariant);
+            }
+
+            if (masterMutex) {
+                tgc.setMasterMutex(true);
+            }
+
+            if (breakpoint) {
+                tgc.setBreakpoint(breakpoint);
+            }
+
+            //extra param
+            // TraceManager.addDev("Extra params" + tgc.getClass());
+            // TraceManager.addDev("My value = " + tgc.getValue());
+            tgc.loadExtraParam(elt1.getElementsByTagName("extraparam"), decX, decY, decId);
+            // TraceManager.addDev("Extra param ok");
+
+            if ((tgc instanceof TCDTObject) && (decId > 0)) {
+                TCDTObject to = (TCDTObject)tgc;
+                //TraceManager.addDev("Setting TObject name to: " + to.getObjectName());
+                //TraceManager.addDev("Setting TObject name to: " + tdp.findTObjectName(to.getObjectName()));
+                to.setObjectName(tdp.findTObjectName(to.getObjectName()));
+            }
+
+            //TraceManager.addDev(tgc.toString());
+
+            //TraceManager.addDev("Making connecting points " + tgcpList.size());
+            for(i=0; i<tgcpList.size(); i++) {
+                p = (Point)(tgcpList.elementAt(i));
+                if (!tgc.setIdTGConnectingPoint(p.x, p.y)) {
+                    //TraceManager.addDev("Warning: a connecting point has been removed");
+                    //throw new MalformedModelingException();
+                }
+            }
+
+            //TraceManager.addDev("Not yet except!");
+            if (decId >0) {
+                tdp.bringToFront(tgc);
+            }
+            //TraceManager.addDev("Connecting points done " + myType);
+
+            /*if (tgc instanceof TCDTObject) {
+              TraceManager.addDev("getValue " + tgc.getValue());
+              }*/
+
+        } catch (Exception e) {
+            // TraceManager.addError("Exception XML Component "/* + e.getMessage() + "trace=" + e.getStackTrace()*/);
+            throw new MalformedModelingException();
+        }
+        return tgc;
+    }
+
+    //method added by Solange
+
+    public String generateNameIfInUse(String myName)
+    {
+        if (!(mgui.getCurrentTURTLEPanel().nameInUse(myName)))
+            {
+                return myName;
+            }
+
+        String other;
+        for(int w=0; w<100000; w++)
+            {
+                other = myName + "_" + w;
+                if (!(mgui.getCurrentTURTLEPanel().nameInUse(other)))
+                    {
+                        return other;
+                    }
+            }
+        return null;
+    }
+    //until here
+
+    public void makePostProcessing(TDiagramPanel tdp) throws MalformedModelingException{
+        //TraceManager.addDev("Make post processing!");
+        if (tdp instanceof TClassDiagramPanel) {
+            ((TClassDiagramPanel)tdp).makePostLoadingProcessing();
+        }
+        //TraceManager.addDev("Post processing is over");
+    }
+
+    public void makeXMLConnectors(NodeList nl, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
+        Node n;
+        //Element elt;
+        TGConnector tgco = null;
+        int i;
+
+        if (tdp == null) {
+            throw new MalformedModelingException();
+        }
+
+        for(i=0; i<nl.getLength(); i++) {
+            n = nl.item(i);
+            if (n.getNodeType() == Node.ELEMENT_NODE) {
+                tgco = makeXMLConnector(n, tdp);
+                if (tgco != null) {
+                    tdp.addBuiltConnector(tgco);
+                } else {
+                    TraceManager.addDev("Connector error");
+                    throw new MalformedModelingException();
+                }
+            }
+        }
+    }
+
+    public void connectConnectorsToRealPoints(TDiagramPanel tdp) throws MalformedModelingException {
+        List<TGComponent> list = tdp.getComponentList();
+        TGConnectingPoint p1, p2, p3, p4;
+        //TGConnectingPointTmp p;
+        int i;
+        TGComponent tgc;
+        //TGComponent tgctmp;
+        TGConnector tgco = null;
+        //boolean error = false;
+        TGConnectorInfo tgcoinfo;
+
+
+        //connect connectors to their real connecting point
+        //TraceManager.addDev("Valid connectors ?");
+        for(i=0; i<list.size(); i++) {
+            tgc = (TGComponent)(list.get(i));
+            if (tgc instanceof TGConnector) {
+                tgco = (TGConnector)tgc;
+                p1 = tgco.getTGConnectingPointP1();
+                p2 = tgco.getTGConnectingPointP2();
+                if ((p1 instanceof TGConnectingPointTmp) && (p2 instanceof TGConnectingPointTmp)){
+                    //TraceManager.addDev("Searching for id " + p1.getId());
+                    p3 = tdp.findConnectingPoint(p1.getId());
+                    //TraceManager.addDev("Searching for id " + p2.getId());
+                    p4 = tdp.findConnectingPoint(p2.getId());
+                    if (((p3 ==null) || (p4 == null)) &&(decId != 0)) {
+                        if (list.remove(tgc)) {
+                            i --;
+                        } else {
+                            throw new MalformedModelingException();
+                        }
+                    } else {
+                        if ((p3 == null) ||(p4 == null)) {
+                            //warning = true;
+                            if (p3 == null) {
+                                //TraceManager.addDev("Error on first id");
+                            }
+                            if (p4 == null) {
+                                //TraceManager.addDev("Error on second id");
+                            }
+                            tgcoinfo = new TGConnectorInfo();
+                            tgcoinfo.connector = tgco;
+                            pendingConnectors.add(tgcoinfo);
+                            TraceManager.addDev("One connector added to pending list");
+                        } else {
+                            tgco.setP1(p3);
+                            p3.setFree(false);
+                            tgco.setP2(p4);
+                            p4.setFree(false);
+                        }
+                    }
+                }
+            }
+        }
+
+        /*for(TGConnector con: connectorsToRemove) {
+          list.remove(con);
+          }*/
+
+        /*if (error) {
+          TraceManager.addDev("Connecting error: " + connectorsToRemove.size()  + " connectors have been removed");
+          throw new MalformedModelingException();
+          }*/
+    }
+
+    public void makeLastLoad() {
+        // Update references on all diagrams
+        //TraceManager.addDev("Updating ports");
+        //mgui.updateAllPorts();
+
+        // Update ports on all diagrams
+        //TraceManager.addDev("Updating references / ports");
+        mgui.updateAllReferences();
+
+        mgui.updateAllPorts();
+
+        //TraceManager.addDev("Pending connectors");
+        // Make use of pending connectors
+        TGConnectingPoint p1, p2, p3, p4;
+        TDiagramPanel tdp;
+        TGConnector tgco;
+        for(TGConnectorInfo info: pendingConnectors) {
+            tgco = info.connector;
+            if (tgco != null) {
+                tdp = tgco.getTDiagramPanel();
+                if (tdp != null) {
+                    p1 = tgco.getTGConnectingPointP1();
+                    p2 = tgco.getTGConnectingPointP2();
+                    if ((p1 instanceof TGConnectingPointTmp) && (p2 instanceof TGConnectingPointTmp)){
+                        TraceManager.addDev("Searching for id " + p1.getId());
+                        p3 = tdp.findConnectingPoint(p1.getId());
+                        TraceManager.addDev("Searching for id " + p2.getId());
+                        p4 = tdp.findConnectingPoint(p2.getId());
+                        if ((p3 == null) ||(p4 == null)) {
+                            //warning = true;
+                            if (p3 == null) {
+                                TraceManager.addDev("Error on first id");
+                            }
+                            if (p4 == null) {
+                                TraceManager.addDev("Error on second id");
+                            }
+                            TraceManager.addDev("One connector ignored");
+                        } else {
+                            tgco.setP1(p3);
+                            p3.setFree(false);
+                            tgco.setP2(p4);
+                            p4.setFree(false);
+                        }
+                    }
+                }
+            }
+        }
+        pendingConnectors.clear();
+        //TraceManager.addDev("Last load done");
+    }
+
+    public TGConnector makeXMLConnector(Node n, TDiagramPanel tdp) throws SAXException, MalformedModelingException {
+        Element elt, elt1;
+        TGConnector tgco = null;
+        //TGComponent tgc = null;
+
+        //TraceManager.addDev(n.toString());
+
+        try {
+
+            NodeList nl = n.getChildNodes();
+            elt = (Element)n;
+            elt1 = elt;
+
+            int myType = Integer.decode(elt.getAttribute("type")).intValue();
+            int myId = Integer.decode(elt.getAttribute("id")).intValue() + decId;
+
+            int myX = -1, myY = -1, myWidth = -1, myHeight =-1;
+            int myMinWidth = -1, myMinHeight = -1, myMinDesiredWidth = -1, myMinDesiredHeight = -1;
+            int myMaxWidth = -1, myMaxHeight = -1;
+            String myName = null, myValue = null;
+            int tmpx, tmpy, tmpid;
+            TGConnectingPoint p1 = null, p2=null;
+            Vector<Point> pointList = new Vector<Point>();
+
+            Vector<Point> tgcpList = new Vector<Point>();
+            Point p;
+            int i, x, y;
+            //int fatherId = -1, fatherNum = -1;
+            boolean automaticDrawing = true;
+
+            for(i=0; i<nl.getLength(); i++) {
+                n = nl.item(i);
+                if (n.getNodeType() == Node.ELEMENT_NODE) {
+                    elt = (Element) n;
+                    if (elt.getTagName().equals("cdparam")) {
+                        myX = Integer.decode(elt.getAttribute("x")).intValue() + decX;
+                        myY = Integer.decode(elt.getAttribute("y")).intValue() + decY;
+                    } else if (elt.getTagName().equals("sizeparam")) {
+                        myWidth = Integer.decode(elt.getAttribute("width")).intValue();
+                        myHeight = Integer.decode(elt.getAttribute("height")).intValue();
+                        myMinWidth = Integer.decode(elt.getAttribute("minWidth")).intValue();
+                        myMinHeight = Integer.decode(elt.getAttribute("minHeight")).intValue();
+                        if ((elt.getAttribute("maxWidth") != null) && (elt.getAttribute("maxWidth").length() > 0)) { // Test is made for compatibility with old versions
+                            //TraceManager.addDev("maxWidth = " +  elt.getAttribute("maxWidth"));
+                            myMaxWidth = Integer.decode(elt.getAttribute("maxWidth")).intValue();
+                            myMaxHeight = Integer.decode(elt.getAttribute("maxHeight")).intValue();
+                        }
+                        myMinDesiredWidth = Integer.decode(elt.getAttribute("minDesiredWidth")).intValue();
+                        myMinDesiredHeight = Integer.decode(elt.getAttribute("minDesiredHeight")).intValue();
+                    } else if (elt.getTagName().equals("infoparam")) {
+                        myName = elt.getAttribute("name");
+                        myValue = elt.getAttribute("value");
+                    } else if (elt.getTagName().equals("P1")) {
+                        tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX;
+                        tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY;
+                        tmpid = Integer.decode(elt.getAttribute("id")).intValue() + decId;
+                        TGComponent tgc1 = TGComponentManager.addComponent(tmpx, tmpy, TGComponentManager.TAD_START_STATE, tdp);
+                        p1 = new TGConnectingPointTmp(tgc1, tmpx, tmpy, tmpid);
+                        //TraceManager.addDev("P1id = " + tmpid);
+                    } else if (elt.getTagName().equals("P2")) {
+                        tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX;
+                        tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY;
+                        tmpid = Integer.decode(elt.getAttribute("id")).intValue() + decId;
+                        TGComponent tgc2 = TGComponentManager.addComponent(tmpx, tmpy, TGComponentManager.TAD_START_STATE, tdp);
+                        p2 = new TGConnectingPointTmp(tgc2, tmpx, tmpy, tmpid);
+                        //TraceManager.addDev("P2id = " + tmpid);
+                    } else if (elt.getTagName().equals("Point")) {
+                        tmpx = Integer.decode(elt.getAttribute("x")).intValue() + decX;
+                        tmpy = Integer.decode(elt.getAttribute("y")).intValue() + decY;
+                        pointList.add(new Point(tmpx, tmpy));
+                    } else if (elt.getTagName().equals("TGConnectingPoint")) {
+                        x = Integer.decode(elt.getAttribute("num")).intValue();
+                        y = Integer.decode(elt.getAttribute("id")).intValue() + decId;
+                        tgcpList.add(new Point(x, y));
+                        //TraceManager.addDev(" adding Connecting point !");
+                    } else if (elt.getTagName().equals("AutomaticDrawing")) {
+                        //TraceManager.addDev("AutomaticDrawing=" + elt.getAttribute("data"));
+                        if (elt.getAttribute("data").compareTo("true") == 0) {
+                            automaticDrawing = true;
+                            //TraceManager.addDev("set to true");
                         } else {
-				Set<String> hs= new HashSet<String>();
-				hs.add(bl2.split("__")[bl2.split("__").length-1]);
-				originDestMap.put(bl1.split("__")[bl1.split("__").length-1], hs);
-			}
-		}
-		//Add Relations
-
-		for (String bl1: originDestMap.keySet()){
-			for (String bl2:originDestMap.get(bl1)){
-				Vector<Point> points=new Vector<Point>();
-			//	System.out.println("Finding " + bl1 + " and bl2 "+ bl2);
-				if (blockMap.get(bl1)==null || blockMap.get(bl2)==null){
-					continue;
-				}
-				TGConnectingPoint p1= blockMap.get(bl1).findFirstFreeTGConnectingPoint(true,true);
-				p1.setFree(false);
-
-				TGConnectingPoint p2= blockMap.get(bl2).findFirstFreeTGConnectingPoint(true,true);
-				p2.setFree(false);
-
-				if (bl2.equals(bl1)){
-					//Add 2 point so the connection looks square
-					Point p = new Point(p1.getX(), p1.getY()-10);
-					points.add(p);
-					p = new Point(p2.getX(), p2.getY()-10);
-					points.add(p);
-				}
-				AvatarBDPortConnector conn = new AvatarBDPortConnector(0, 0, 0, 0, 0, 0, true, null, abd, p1, p2, points);
-				abd.addComponent(conn, 0,0,false,true);
-
-				//Add Relations to connector
-				for (AvatarRelation ar:avspec.getRelations()){
-					if (ar.block1.getName().contains(bl1) && ar.block2.getName().contains(bl2) || ar.block1.getName().contains(bl2) && ar.block2.getName().contains(bl1)){
-
-						//TGConnectingPoint p1= blockMap.get(bl1).getFreeTGConnectingPoint(blockMap.get(bl1).getX(), blockMap.get(bl1).getY());
-
-						conn.setAsynchronous(ar.isAsynchronous());
-						conn.setBlocking(ar.isBlocking());
-						conn.setPrivate(ar.isPrivate());
-						conn.setSizeOfFIFO(ar.getSizeOfFIFO());
-						//System.out.println(bl1 +" "+ ar.block1.getName() + " "+ ar.block2.getName());
-						for (int i =0; i< ar.nbOfSignals(); i++){
-							//System.out.println("Adding relation " + ar.getSignal1(i).toString() + " " + ar.getSignal2(i).toBasicString());
-							conn.addSignal(ar.getSignal1(i).toString(),ar.getSignal1(i).getInOut()==0,ar.block1.getName().contains(bl1));
-							conn.addSignal(ar.getSignal2(i).toString(), ar.getSignal2(i).getInOut()==0,!ar.block1.getName().contains(bl1));
-							//  System.out.println("adding signal " +ar.getSignal1(i).toBasicString());
-						}
-						//System.out.println("Added Signals");
-						conn.updateAllSignals();
-
-
-					}
-					conn.updateAllSignals();
-				}
-
-				/*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);
-				  }
-				  }
-				  }*/
-			}
-		}
-		ypos+=100;
-		//Add Pragmas
-		AvatarBDPragma pragma=new AvatarBDPragma(xpos, ypos, xpos, xpos*2, ypos, ypos*2, false, null,abd);
-		//  String[] arr = new String[avspec.getPragmas().size()];
-		String s="";
-		// int i=0;
-		for (AvatarPragma p: avspec.getPragmas()){
-
-			//	  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];
-						t=t.concat(tmp.split("__")[tmp.split("__").length-1] + "." + tmp2.split("__")[tmp2.split("__").length-1] + " ");
-					}
-					else {
-						t=t.concat(str+" ");
-					}
-				}
-			}
-			else if (p.getName().contains("Authenticity")){
-				t=p.getName();
-			}
-			else if (p.getName().contains("Initial")){
-				t=p.getName();
-			}
-			else {
-				t=p.getName();
-			}
-			s=s.concat(t+"\n");
-			//  i++;
-		}
-		pragma.setValue(s);
-		pragma.makeValue();
-		abd.addComponent(pragma, xpos, ypos, false,true);
-		//Add message and key datatype if there is a cryptoblock
-
-		xpos=50;
-		ypos+=200;
-		if (hasCrypto){
-			AvatarBDDataType message = new AvatarBDDataType(xpos, ypos, xpos, xpos*2, ypos, ypos*2, false, null,abd);
-			message.setValue("Message");
-
-			abd.addComponent(message, xpos, ypos, false,true);
-			message.resize(200,100);
-			xpos+=400;
-
-			AvatarBDDataType key = new AvatarBDDataType(xpos, ypos, xpos, xpos*2, ypos, ypos*2, false, null,abd);
-			key.setValue("Key");
-			TAttribute attr = new TAttribute(2, "data", "0", 8);
-			message.addAttribute(attr);
-			key.addAttribute(attr);
-			key.resize(200,100);
-			abd.addComponent(key, xpos, ypos, false,true);
-		}
-	}
-
-	public void buildStateMachine(AvatarBlock ab, AvatarBDBlock bl, AvatarSMDPanel smp){
-		Map<AvatarTransition, TGComponent> tranSourceMap = new HashMap<AvatarTransition, TGComponent>();
-		Map<AvatarTransition, AvatarStateMachineElement> tranDestMap = new HashMap<AvatarTransition, AvatarStateMachineElement>();
-		Map<AvatarStateMachineElement, TGComponent> locMap = new HashMap<AvatarStateMachineElement, TGComponent>();
-		Map<AvatarStateMachineElement, TGComponent> SMDMap = new HashMap<AvatarStateMachineElement, TGComponent>();
-
-		//Build the state machine
-		int smx=400;
-		int smy=40;
-
-		if (smp==null){
-			System.out.println("can't find");
-			return;
-		}
-		smp.removeAll();
-		AvatarStateMachine asm = ab.getStateMachine();
-		//Remove the empty check states
-
-		AvatarStartState start= asm.getStartState();
-		addStates(start, smx, smy, smp, bl, SMDMap, locMap, tranDestMap, tranSourceMap);
-		//Add transitions
-		for (AvatarTransition t: tranSourceMap.keySet()){
-			if (tranSourceMap.get(t)==null || tranDestMap.get(t)==null){
-				continue;
-			}
-			int x=tranSourceMap.get(t).getX()+tranSourceMap.get(t).getWidth()/2;
-			int y=tranSourceMap.get(t).getY()+tranSourceMap.get(t).getHeight();
-
-			//	  TGConnectingPoint p1 = tranSourceMap.get(t).findFirstFreeTGConnectingPoint(true,false);
-			TGConnectingPoint p1 = tranSourceMap.get(t).closerFreeTGConnectingPoint(x, y, true, false);
-			if (p1==null){
-				//  p1= tranSourceMap.get(t).findFirstFreeTGConnectingPoint(true,true);
-				p1=tranSourceMap.get(t).closerFreeTGConnectingPoint(x,y,true, true);
-			}
-			x= locMap.get(tranDestMap.get(t)).getX()+ locMap.get(tranDestMap.get(t)).getWidth()/2;
-			y = locMap.get(tranDestMap.get(t)).getY();
-			if (tranSourceMap.get(t).getY() > locMap.get(tranDestMap.get(t)).getY()){
-				y=locMap.get(tranDestMap.get(t)).getY()+locMap.get(tranDestMap.get(t)).getHeight()/2;
-				if (tranSourceMap.get(t).getX() < locMap.get(tranDestMap.get(t)).getX()){
-					x = locMap.get(tranDestMap.get(t)).getX();
-				}
-				else {
-					x= locMap.get(tranDestMap.get(t)).getX()+locMap.get(tranDestMap.get(t)).getWidth();
-				}
-			}
-			TGConnectingPoint p2 = locMap.get(tranDestMap.get(t)).closerFreeTGConnectingPoint(x,y,false, true);
-			if (p2==null){
-				p2=locMap.get(tranDestMap.get(t)).closerFreeTGConnectingPoint(x,y,true, true);
-			}
-			Vector<Point> points = new Vector<Point>();
-			if (p1==null || p2 ==null){
-				System.out.println(tranSourceMap.get(t)+" "+locMap.get(tranDestMap.get(t)));
-
-				System.out.println("Missing point "+ p1 + " "+p2);
-				return;
-			}
-			AvatarSMDConnector SMDcon = new AvatarSMDConnector((int) p1.getX(), (int) p1.getY(), (int) p1.getX(), (int) p1.getY(), (int) p1.getX(), (int) p1.getY(), true, null, smp, p1, p2, points);
-			//System.out.println(tranSourceMap.get(t)+" "+locMap.get(tranDestMap.get(t)));
-			///System.out.println("FREE " +p1.isFree() + " "+ p2.isFree());
-			p1.setFree(false);
-			p2.setFree(false);
-			String action="";
-			if (t.getActions().size()==0){
-				action="";
-			}
-			else {
-				action=t.getActions().get(0).toString().replaceAll(" ","");
-			}
-			SMDcon.setTransitionInfo(t.getGuard().toString(), action);
-			for (int i=1; i<t.getActions().size(); i++){
-				SMDcon.setTransitionInfo("", t.getActions().get(i).toString().replaceAll(" ",""));
-			}
-			smp.addComponent(SMDcon, (int) p1.getX(), (int) p1.getY(), false, true);
-		}
-	}
-
-	// Generates for all observers, a TURTLE modeling for checking it
-	public boolean generateTMsForRequirementAnalysis(Vector<Requirement> reqs, RequirementDiagramPanel rdp) {
-		rm = new RequirementModeling(reqs, rdp, mgui);
-		checkingErrors = rm.getCheckingErrors();
-		warnings = rm.getWarnings();
-		if ((checkingErrors != null) && (checkingErrors.size() > 0)){
-			return false;
-		} else {
-			//mgui.setMode(mgui.GEN_DESIGN_OK);
-			languageID = MATRIX;
-			return true;
-		}
-	}
-
-	public RequirementModeling getRequirementModeling() {
-		return rm;
-	}
-
-	public void removeBreakpoint(Point p) {
-		if (listE == null) {
-			return;
-		}
-
-		listE.removeBreakpoint(p);
-	}
-
-	public void addBreakpoint(Point p) {
-		if (listE == null) {
-			return;
-		}
-
-		listE.addBreakpoint(p);
-	}
-
-	private void analyzeErrors() {
-		CheckingError ce;
-		TGComponent tgc;
-
-		for(int i=0; i<checkingErrors.size(); i++) {
-			ce = (CheckingError)(checkingErrors.get(i));
-			if (ce != null && ce instanceof UICheckingError) {
-				tgc = ((UICheckingError) ce).getTGComponent();
-				if (tgc != null) {
-					analyzeErrorOnComponent(tgc);
-				}
-			}
-		}
-	}
-
-	private void analyzeErrorOnComponent(TGComponent _tgc) {
-		if (_tgc instanceof BasicErrorHighlight) {
-			((BasicErrorHighlight)_tgc).setStateAction(ErrorHighlight.UNKNOWN);
-		} else if (_tgc instanceof ActionStateErrorHighlight) {
-			((ActionStateErrorHighlight)_tgc).setStateAction(ErrorHighlight.UNKNOWN_AS);
-		}
-	}
-
-	public boolean makeEBRDD(EBRDDPanel tdp) {
-		EBRDDTranslator ebrddt = new EBRDDTranslator();
-		ebrdd = ebrddt.generateEBRDD(tdp, tdp.getName());
-		warnings = ebrddt.getWarnings();
-		checkingErrors = ebrddt.getErrors();
-		if (checkingErrors.size() > 0) {
-			return false;
-		}
-		TraceManager.addDev("the EBRDD:\n" + ebrdd.toString());
-		return true;
-	}
-
-	public void setElementsOfSearchTree(Vector<Object> elements) {
-		st.setElements(elements);
-	}
+                            automaticDrawing = false;
+                        }
+                        //automaticDrawing = Boolean.getBoolean(elt.getAttribute("data"));
+                    }
+                }
+            }
+
+            if ((myType == -1) || (myId == -1) || (myX == -1) || (myY == -1) || (myWidth == -1) || (myHeight == -1) || (p1 == null) || (p2 == null)) {
+                throw new MalformedModelingException();
+            }
+
+            //TGConnector is ready to be built
+            //TraceManager.addDev("Making TGConnector of type " + myType);
+            tgco = TGComponentManager.addConnector(myX, myY, myType, tdp, p1, p2, pointList);
+            //TraceManager.addDev("TGConnector built " + myType);
+
+            if (tgco == null) {
+                TraceManager.addDev( "TGCO is null myType: " + myType );
+                throw new MalformedModelingException();
+            }
+
+            tgco.setAutomaticDrawing(automaticDrawing);
+
+            if (myName != null) {
+                tgco.setName(myName);
+            }
+            if ((myValue != null) && (!myValue.equals(null))){
+                tgco.setValueWithChange(myValue);
+            }
+
+            tgco.forceId(myId);
+            tgco.setLoaded(true);
+            tgco.setInternalLoaded(false);
+            tgco.setMinSize(myMinWidth, myMinHeight);
+            tgco.setMaxSize(myMaxWidth, myMaxHeight);
+            tgco.setMinDesiredSize(myMinDesiredWidth, myMinDesiredHeight);
+            tgco.resize(myWidth, myHeight);
+
+            tgco.loadExtraParam(elt1.getElementsByTagName("extraparam"), decX, decY, decId);
+
+            //TraceManager.addDev("Making connecting points " + myType);
+            for(i=0; i<tgcpList.size(); i++) {
+                p = (Point)(tgcpList.elementAt(i));
+                if (!tgco.setIdTGConnectingPoint(p.x, p.y)) {
+                    throw new MalformedModelingException();
+                }
+            }
+
+            if (decId >0) {
+                tdp.bringToFront(tgco);
+            }
+
+            //TraceManager.addDev("Connecting points done " + myType);
+
+        } catch (Exception e) {
+            TraceManager.addError("Exception on connectors: HERE I AM");
+            throw new MalformedModelingException();
+        }
+        return tgco;
+    }
+
+
+
+    public boolean buildTURTLEModelingFromAnalysis(AnalysisPanel ap) throws AnalysisSyntaxException {
+
+        HMSC h;
+        //listE = new CorrespondanceTGElement();
+        checkingErrors = new LinkedList<CheckingError> ();
+
+        AnalysisPanelTranslator apt = new AnalysisPanelTranslator(ap, mgui);
+
+        try {
+            h = apt.translateHMSC();
+            listE = apt.getCorrespondanceTGElement();
+            checkingErrors = apt.getErrors();
+            apt.translateMSCs(h);
+            listE = apt.getCorrespondanceTGElement();
+            checkingErrors = apt.getErrors();
+        } catch (AnalysisSyntaxException ase) {
+            CheckingError ce = new CheckingError(CheckingError.STRUCTURE_ERROR, ase.getMessage());
+            checkingErrors.add(ce);
+            throw ase;
+        }
+
+        SDTranslator sd = new SDTranslator(h);
+        checkingErrors = null;
+        warnings = new LinkedList<CheckingError> ();
+        //TraceManager.addDev("Step 02");
+
+        mgui.setMode( MainGUI.VIEW_SUGG_DESIGN_KO);
+
+        //TraceManager.addDev("Step 1");
+        try {
+            tm = sd.toTURTLEModeling();
+            tmState = 0;
+        } catch (SDTranslationException e) {
+            checkingErrors = new LinkedList<CheckingError> ();
+            CheckingError error = new CheckingError(CheckingError.STRUCTURE_ERROR, e.getMessage());
+            checkingErrors.add(error);
+
+            throw new AnalysisSyntaxException("Problem during translation to a design TURTLE modeling");
+        }
+
+        //TraceManager.addDev("Step 2");
+
+        if (checkingErrors != null) {
+            return false;
+        }
+
+        // modeling is built
+        // Now check it !
+        //TraceManager.addDev("Step 3");
+        TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
+        checkingErrors = tmc.syntaxAnalysisChecking();
+        //TraceManager.addDev("Step 4");
+
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+            return false;
+        } else {
+            mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_OK);
+            return true;
+        }
+    }
+
+    public void generateDesign() {
+        generateDesign(tm);
+    }
+
+    public void generateDesign(TURTLEModeling tm) {
+        //TURTLEPanel tp = mgui.getCurrentTURTLEPanel();
+        nbSuggestedDesign ++;
+        TURTLEModelingDrawer tmd = new TURTLEModelingDrawer(mgui);
+        tmd.setTURTLEModeling(tm);
+        tmd.draw(nbSuggestedDesign);
+        mgui.changeMade(null, -1);
+    }
+
+    public void generateIOD(HMSC _hmsc, MSC _msc) {
+        MSCDrawer mscd = new MSCDrawer(mgui);
+        mscd.setHMSC(_hmsc);
+        mscd.setMSC(_msc);
+        mscd.drawFromMSC(nbSuggestedDesign);
+        nbSuggestedDesign ++;
+        mgui.changeMade(null, -1);
+    }
+
+    public boolean translateDeployment(DeploymentPanel dp) {
+        // Builds a TURTLE modeling from a deployment diagram
+        TraceManager.addDev("deployement");
+        checkingErrors = new LinkedList<CheckingError> ();
+        warnings = new LinkedList<CheckingError> ();
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+        tm = new TURTLEModeling();
+        tmState = 0;
+        listE = new CorrespondanceTGElement();
+        mgui.reinitCountOfPanels();
+
+        List<TDDNode> ll;
+        Iterator<TDDNode> iterator;//, iterator2;
+
+        // First step: adding all necessary classes + their ad
+        ll = dp.tddp.getListOfNodes();
+        iterator = ll.listIterator();
+        TDDNode node;
+        Vector<TDDArtifact> artifacts;
+        TDDArtifact art;
+        int i;
+        DesignPanel dp2;
+        TGComponent tgc;
+        //TCDTClass tc;
+        String name;
+        TClass t;
+        DesignPanelTranslator dpt;
+
+        // Loop on nodes
+        while(iterator.hasNext()) {
+            node = iterator.next();
+
+            // Loop on artifact
+            artifacts = node.getArtifactList();
+            for(i=0; i<artifacts.size(); i++) {
+                art = artifacts.elementAt(i);
+                dp2 = art.getDesignPanel();
+
+                final Iterator<TGComponent> iterator2 = dp2.tcdp.getComponentList().listIterator();
+                LinkedList<TClassInterface> tclasses = new LinkedList<TClassInterface> ();
+                while(iterator2.hasNext()) {
+                    tgc = iterator2.next();
+                    if (tgc instanceof TClassInterface) {
+                        TraceManager.addDev("Found tclass: " + tgc.getValue());
+                        tclasses.add((TClassInterface) tgc);
+                    }
+                }
+                if (tclasses.size() > 0) {
+                    name = node.getNodeName() + "__" + art.getValue() + "__";
+                    dpt = new DesignPanelTranslator(dp2);
+                    dpt.addTClasses(dp2, tclasses, name,tm);
+                    dpt.addRelations(dp2, name,tm);
+
+                    listE.merge(dpt.getCorrespondanceTGElement());
+                    checkingErrors.addAll(dpt.getErrors());
+
+                    // Set package name of tclasses
+                    for(int j=0; j<tclasses.size(); j++) {
+                        tgc = (TGComponent) tclasses.get (j);
+                        t = listE.getTClass(tgc);
+                        if (t != null) {
+                            TraceManager.addDev("Setting package name of " + t.getName() + " to " + node.getNodeName());
+                            t.setPackageName(node.getNodeName()+"_"+art.getValue());
+                        }
+                    }
+                }
+            }
+        }
+
+        // Second step : dealing with links!
+
+        DDTranslator ddt = new DDTranslator(dp, tm, listE);
+
+        try {
+            TraceManager.addDev("Dealing with links!");
+            ddt.translateLinks();
+        } catch (DDSyntaxException e) {
+            //throw new AnalysisSyntaxException("Problem during translation to a design TURTLE modeling");
+            TraceManager.addDev("Error during translation: " + e.getMessage());
+            return false;
+        }
+
+        mgui.setMode(MainGUI.GEN_DESIGN_OK);
+
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        }
+
+        // modeling is built
+        // Now check it !
+        TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
+        checkingErrors = tmc.syntaxAnalysisChecking();
+
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        } else {
+            mgui.setMode(MainGUI.GEN_DESIGN_OK);
+            return true;
+        }
+    }
+
+    public boolean translateAttackTreePanel(AttackTreePanel atp) {
+        AttackTreePanelTranslator att = new AttackTreePanelTranslator(atp);
+        /*attackTree =*/ att.translateToAttackTreeDataStructure();
+        checkingErrors = att.getCheckingErrors();
+        warnings = att.getWarnings();
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        }
+        avatarspec = att.generateAvatarSpec();
+        TraceManager.addDev("Avatar spec:" + avatarspec);
+        return true;
+    }
+
+    public boolean translateNC(NCPanel ncp) {
+        TraceManager.addDev("Translating NC");
+        checkingErrors = new LinkedList<CheckingError> ();
+        warnings = new LinkedList<CheckingError> ();
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+
+        GNCModeling gncm = new GNCModeling(ncp);
+        ncs = gncm.translateToNCStructure();
+        listE = gncm.getCorrespondanceTable();
+
+        checkingErrors = gncm.getCheckingErrors();
+        warnings = gncm.getCheckingWarnings();
+
+        TraceManager.addDev("errors:" + checkingErrors.size() + " warnings:" + warnings.size());
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        } else {
+            // Generate XML file
+            try {
+                String fileName = "network.xml";
+                if (ConfigurationTTool.NCDirectory != null) {
+                    fileName = ConfigurationTTool.NCDirectory + fileName;
+                }
+                TraceManager.addDev("Saving in network structure in file: " + fileName);
+                FileUtils.saveFile(fileName, ncs.toISAENetworkXML());
+                fileName = "traffics.xml";
+                if (ConfigurationTTool.NCDirectory != null) {
+                    fileName = ConfigurationTTool.NCDirectory + fileName;
+                }
+                TraceManager.addDev("Saving in traffics in file: " + fileName);
+                FileUtils.saveFile(fileName, ncs.toISAETrafficsXML());
+                TraceManager.addDev("Save done");
+            } catch (FileException fe) {
+                TraceManager.addError("Could not save NC in file:" + fe.getMessage());
+            }
+            mgui.setMode(MainGUI.NC_OK);
+            return true;
+        }
+
+    }
+
+    private void nullifyTMLModeling() {
+        tmlm = null;
+        artificialtmap = null;
+        tmap = null;
+        tmlcp = null;
+    }
+
+
+    public boolean translateTMLDesign(Vector<? extends TGComponent> tasksToTakeIntoAccount, TMLDesignPanel tmldp, boolean optimize) {
+        nullifyTMLModeling();
+        //  List<TMLError> warningsOptimize = new ArrayList<TMLError>();
+        warnings = new LinkedList<CheckingError> ();
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+
+        GTMLModeling gtmlm = new GTMLModeling(tmldp, true);
+        gtmlm.setTasks(tasksToTakeIntoAccount);
+        tmlm = gtmlm.translateToTMLModeling(true);
+        //tmlm.removeAllRandomSequences();
+        TraceManager.addDev("New TML Modeling:" + tmlm.toString());
+        mgui.generateTMLTxt();
+        artificialtmap = tmlm.getDefaultMapping();
+        tmap = null;
+        listE = gtmlm.getCorrespondanceTable();
+        //TraceManager.addDev("TML Modeling translated");
+        //TraceManager.addDev("----- TML Modeling -----");
+        //TraceManager.addDev(tmlm.toString());
+        //TraceManager.addDev("------------------------");
+        checkingErrors = gtmlm.getCheckingErrors();
+
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            analyzeErrors();
+
+            return false;
+        } else {
+            //                  if (optimize) {
+            //                          warningsOptimize = tmlm.optimize();
+            //                  }
+
+            tmState = 2;
+            mgui.resetAllDIPLOIDs();
+            listE.useDIPLOIDs();
+            return true;
+            //TraceManager.addDev("tm generated:");
+            //tm.print();
+        }
+    }
+
+    public Vector<CheckingError> convertToCheckingErrorTMLErrors( List<TMLError> warningsOptimize, TDiagramPanel _tdp) {
+        Vector<CheckingError> v = new Vector<CheckingError>();
+        UICheckingError warning;
+
+        for(TMLError error: warningsOptimize) {
+            warning = new UICheckingError(CheckingError.BEHAVIOR_ERROR, error.message);
+            warning.setTDiagramPanel(_tdp);
+            v.add(warning);
+        }
+
+        return v;
+    }
+
+    public boolean translateTMLComponentDesign(Vector<? extends TGComponent> componentsToTakeIntoAccount, TMLComponentDesignPanel tmlcdp, boolean optimize) {
+        nullifyTMLModeling();
+        //      ArrayList<TMLError> warningsOptimize = new ArrayList<TMLError>();
+        warnings = new LinkedList<CheckingError> ();
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+
+        GTMLModeling gctmlm = new GTMLModeling(tmlcdp, true);
+        gctmlm.putPrefixName(true);
+        gctmlm.setComponents(componentsToTakeIntoAccount);
+        tmlm = gctmlm.translateToTMLModeling(true);
+        mgui.generateTMLTxt();
+        artificialtmap = tmlm.getDefaultMapping();
+        tmap = null;
+        listE = gctmlm.getCorrespondanceTable();
+
+        //TraceManager.addDev("TML Modeling translated");
+        //TraceManager.addDev("----- TML Modeling -----");
+        //TraceManager.addDev(tmlm.toString());
+        //TraceManager.addDev("------------------------");
+        //mgui.generateTMLTxt();
+        checkingErrors = gctmlm.getCheckingErrors();
+
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            analyzeErrors();
+            return false;
+        }
+        else {
+            //                  if (optimize) {
+            //                          //TraceManager.addDev("OPTIMIZE");
+            //                          warningsOptimize = tmlm.optimize();
+            //                  }
+
+            tmState = 2;
+            //TraceManager.addDev("tm generated:");
+            mgui.resetAllDIPLOIDs();
+            listE.useDIPLOIDs();
+            return true;
+            //tm.print();
+        }
+    }
+
+    public boolean translateTMLModeling() {
+        TML2TURTLE tt = new TML2TURTLE(tmlm);
+        tm = tt.generateTURTLEModeling();
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            TraceManager.addDev("Error in TURTLE generation");
+            analyzeErrors();
+            return false;
+        } else {
+            // Optimize
+            TraceManager.addDev("Optimize");
+            tm.optimize();
+            TraceManager.addDev("Optimize done");
+            TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
+            checkingErrors = tmc.syntaxAnalysisChecking();
+            if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+                analyzeErrors();
+                return false;
+            } else {
+                mgui.setMode(MainGUI.GEN_DESIGN_OK);
+                return true;
+            }
+        }
+    }
+
+    public boolean checkSyntaxTMLMapping(Vector<TGComponent> nodesToTakeIntoAccount, TMLArchiPanel tmlap, boolean optimize) {
+        List<TMLError> warningsOptimize = new ArrayList<TMLError>();
+        warnings = new LinkedList<CheckingError> ();
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+        //TraceManager.addDev("New TML Mapping");
+        GTMLModeling gtmlm = new GTMLModeling(tmlap, true);
+
+
+        gtmlm.setNodes(nodesToTakeIntoAccount); //simply transforms the parameter from a Vector to LinkedList
+        nullifyTMLModeling();
+        tmlm = null;
+        tm = null;
+        tmState = 1;
+        tmap = gtmlm.translateToTMLMapping();
+
+        listE = gtmlm.getCorrespondanceTable();
+
+        checkingErrors = gtmlm.getCheckingErrors();
+        avatarspec = gtmlm.avspec;
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            analyzeErrors();
+            warnings = gtmlm.getCheckingWarnings();
+            return false;
+        } else {
+            //tmap.removeAllRandomSequences();
+            if (optimize) {
+                warningsOptimize = tmap.optimize();
+            }
+            warnings.addAll(convertToCheckingErrorTMLErrors(warningsOptimize, tmlap.tmlap));
+            mgui.resetAllDIPLOIDs();
+            listE.useDIPLOIDs();
+            mgui.setMode(MainGUI.GEN_DESIGN_OK);
+            return true;
+        }
+    }
+
+    //Newly introduced to perform Syntax check of CP diagrams. Actually the mapping of CPs onto the architecture is done via SDs,
+    //onto the application is done onto blocks in the architecture. It would be better to have all the mapping information in one
+    //diagram. Up to now, not taking the mapping information into account
+    public boolean checkSyntaxTMLCP( Vector<TGComponent> nodesToTakeIntoAccount, TMLCommunicationPatternPanel tmlcpp, boolean optimize ) {
+
+        //nodesToTakeIntoAccount is the list of SDs and ADs corresponding that compose the CP selected for syntax checking
+        //      List<TMLError> warningsOptimize = new ArrayList<TMLError>();
+        warnings = new LinkedList<CheckingError> ();
+        mgui.setMode( MainGUI.VIEW_SUGG_DESIGN_KO );
+        GTMLModeling gtmlm = new GTMLModeling( tmlcpp, true );
+
+        TraceManager.addDev( "NodesToTakeIntoAccount :" + nodesToTakeIntoAccount.toString() );
+
+        //Useless because nodesToTakeIntoAccount does not include the mainCP!
+        //gtmlm.setDiagramPanels( nodesToTakeIntoAccount );      //passes the list of nodes (SDs and ADs) to gtml as a LinkedList
+        tmlm = null;
+        tm = null;
+        tmState = 1;
+        nullifyTMLModeling();
+        //tmlcp is the data structure for a CP corresponding to the graphical description with diagrams
+        tmlcp = gtmlm.translateToTMLCPDataStructure( tmlcpp.getName() );
+        //tmlcp.toString();
+        /*TraceManager.addDev( "I AM ABOUT TO GENERATE THE TMLtxt CODE!" );
+          mgui.generateTMLTxt();                //Now generating the TMLtxt code
+          TraceManager.addDev( "TMLtxt CODE GENERATION DONE" );*/
+        listE = gtmlm.getCorrespondanceTable();
+        //for( CorrespondanceTGElement element : listE.getNames() )      {
+        TraceManager.addDev( "Printing listE.getNames: " + listE.getNames().toString() );
+        TraceManager.addDev( "Printing listE.getTG: " + listE.getTG().toString() );
+        TraceManager.addDev( "Printing listE.getPanelNames: " + listE.getPanelNames().toString() );
+        TraceManager.addDev( "Printing listE.getData: " + listE.getData().toString() );
+        //}
+        checkingErrors = gtmlm.getCheckingErrors();
+
+        if( (checkingErrors != null) && (checkingErrors.size() > 0) )   {
+            //analyzeErrors();
+
+            return false;
+        }
+        /*else {
+        //tmcp.removeAllRandomSequences();
+        if( optimize )  {
+        warningsOptimize = tmap.optimize();
+        //warningsOptimize = tmcp.optimize();
+        }
+        warnings.addAll( convertToCheckingErrorTMLErrors(warningsOptimize, tmlcpp.tmlcpp ) );
+        mgui.resetAllDIPLOIDs();
+        listE.useDIPLOIDs();
+        mgui.setMode( MainGUI.GEN_DESIGN_OK );
+        return true;
+        }*/
+        return true;    //It means that there are no errors
+    }
+
+    public boolean translateTMLMapping(boolean _sample, boolean _channel, boolean _event, boolean _request, boolean _exec, boolean _busTransfers, boolean _scheduling, boolean _taskState, boolean _channelState, boolean _branching, boolean _terminateCPU, boolean _terminateCPUs, boolean _clocked, String _tickValue, boolean _endClocked, boolean _countTick, boolean _maxCountTick, String _maxCountTickValue, boolean _randomTask) {
+        //TraceManager.addDev("TML=" + tmap.toString());
+        Mapping2TIF m2tif = new Mapping2TIF(tmap);
+        m2tif.setShowSampleChannels(_sample);
+        m2tif.setShowChannels(_channel);
+        m2tif.setShowEvents(_event);
+        m2tif.setShowRequests(_request);
+        m2tif.setShowExecs(_exec);
+        m2tif.setShowBusTransfers(_busTransfers);
+        m2tif.setShowScheduling(_scheduling);
+        m2tif.setIsClocked(_clocked);
+        m2tif.setTickValue(_tickValue);
+        m2tif.setIsEndClocked(_endClocked);
+        m2tif.setIsCountTick(_countTick);
+        m2tif.hasMaxCountTick(_maxCountTick);
+        if (_maxCountTick) {
+            m2tif.setMaxCountTickValue(_maxCountTickValue);
+        }
+        m2tif.setShowTaskState(_taskState);
+        m2tif.setShowChannelState(_channelState);
+        m2tif.setShowBlockedCPU(_terminateCPU);
+        m2tif.setShowTerminateCPUs(_terminateCPUs);
+        m2tif.setShowBranching(_branching);
+        m2tif.setRandomTasks(_randomTask);
+        tm = m2tif.generateTURTLEModeling();
+        //StringBuffer sb = tm.printToStringBuffer();
+        //TraceManager.addDev("tm=" + sb);
+
+        TraceManager.addDev("tm generated from TMAP");
+        checkingErrors = m2tif.getCheckingErrors();
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        }
+        mgui.setMode(MainGUI.GEN_DESIGN_OK);
+        return true;
+    }
+
+    //Added by Solange
+    public void generateLists(ProactiveDesignPanel pdp) {
+        gpdtemp = new GProactiveDesign(pdp);
+    }
+    //
+
+    public boolean translateTURTLEOSDesign(TURTLEOSDesignPanel tosdp) {
+        warnings = new LinkedList<CheckingError> ();
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+        //TraceManager.addDev("New TML Modeling");
+        GTURTLEOSModeling gosm = new GTURTLEOSModeling(tosdp);
+        //gtmlm.setTasks(tasksToTakeIntoAccount);
+        //tmlm = gosm.translateToTMLModeling();
+        //TraceManager.addDev("TML Modeling translated");
+        //TraceManager.addDev("----- TML Modeling -----");
+        //TraceManager.addDev(tmlm.toString());
+        //TraceManager.addDev("------------------------");
+        tm = gosm.generateTURTLEModeling();
+        tmState = 0;
+        checkingErrors = gosm.getCheckingErrors();
+
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        } else {
+
+            //TraceManager.addDev("Optimize");
+            tm.optimize();
+            //TraceManager.addDev("Optimize done");
+            TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
+            checkingErrors = tmc.syntaxAnalysisChecking();
+            if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+                return false;
+            } else {
+                warnings = gosm.getCheckingWarnings();
+                warnings.addAll(tmc.getWarnings());
+                mgui.setMode(MainGUI.GEN_DESIGN_OK);
+                return true;
+            }
+        }
+    }
+
+
+    public boolean translateProactiveDesign(ProactiveDesignPanel pdp) {
+        mgui.setMode(MainGUI.VIEW_SUGG_DESIGN_KO);
+        GProactiveDesign gpd = new GProactiveDesign(pdp);
+
+        tm = gpd.generateTURTLEModeling();
+        tmState = 0;
+
+        if (gpd.checkSyntax() == false) {
+            TraceManager.addDev("Errors found");
+            warnings = gpd.getCheckingWarnings();
+            checkingErrors = gpd.getCheckingErrors();
+            return false;
+        }
+        TURTLEModelChecker tmc = new TURTLEModelChecker(tm);
+        checkingErrors = tmc.syntaxAnalysisChecking();
+        warnings = tmc.getWarnings();
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        } else {
+            //A faire:
+            //  tm.optimize();
+            //  warnings = gpd.getCheckingWarnings();
+            //  warnings.addAll(tmc.getWarnings());
+            mgui.setMode(MainGUI.GEN_DESIGN_OK);
+            return true;
+        }
+
+    }
+
+
+    public void addStates(AvatarStateMachineElement asme, int x, int y, AvatarSMDPanel smp, AvatarBDBlock bl, Map<AvatarStateMachineElement, TGComponent> SMDMap, Map<AvatarStateMachineElement, TGComponent> locMap, Map<AvatarTransition, AvatarStateMachineElement> tranDestMap, Map<AvatarTransition, TGComponent> tranSourceMap){
+        // TGConnectingPoint tp = new TGConnectingPoint(null, x, y, false, false);
+        //Create dummy tgcomponent
+        TGComponent tgcomp = new AvatarSMDStartState(x,y,x,x*2,y,y*2,false,null,smp);
+        if (asme==null){
+            return;
+        }
+        if (asme instanceof AvatarStartState){
+            AvatarSMDStartState smdss = new AvatarSMDStartState(x, y, x, x*2, y, y*2, false, null, smp);
+            tgcomp = smdss;
+            smp.addComponent(smdss, x, y, false, true);
+            SMDMap.put(asme, smdss);
+            //   tp = smdss.tgconnectingPointAtIndex(0);
+            locMap.put(asme, smdss);
+        }
+        if (asme instanceof AvatarTransition){
+            //
+        }
+        if (asme instanceof AvatarActionOnSignal){
+            avatartranslator.AvatarSignal sig = ((AvatarActionOnSignal) asme).getSignal();
+            if (sig.isIn()){
+                AvatarSMDReceiveSignal smdrs = new AvatarSMDReceiveSignal(x, y, x, x*2, y, y*2, false, null, smp);
+                tgcomp=smdrs;
+                smp.addComponent(smdrs, x, y, false, true);
+                //                              String name=sig.minString();
+                //System.out.println("signal values" +((AvatarActionOnSignal)asme).getValues());
+                String parameters="";
+                if (((AvatarActionOnSignal)asme).getValues().size()>0){
+                    parameters+=((AvatarActionOnSignal)asme).getValues().get(0);
+                    for (int i=1; i < ((AvatarActionOnSignal)asme).getValues().size(); i++){
+                        parameters=parameters+","+((AvatarActionOnSignal)asme).getValues().get(i);
+                    }
+                }
+                String name=sig.getName()+"("+parameters+")";
+                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, smdrs);
+                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);
+                tgcomp=smdss;
+                smp.addComponent(smdss, x, y, false, true);
+                String parameters="";
+                if (((AvatarActionOnSignal)asme).getValues().size()>0){
+                    parameters+=((AvatarActionOnSignal)asme).getValues().get(0);
+                    for (int i=1; i < ((AvatarActionOnSignal)asme).getValues().size(); i++){
+                        parameters=parameters+","+((AvatarActionOnSignal)asme).getValues().get(i);
+                    }
+                }
+                String name=sig.getName()+"("+parameters+")";
+                //String name=sig.minString();
+                smdss.setValue(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, smdss);
+                if (bl.getAvatarSignalFromName(name)  == null){
+                    // bl.addSignal(new ui.AvatarSignal(1, name, new String[0], new String[0]));
+                }
+            }
+
+        }
+        if (asme instanceof AvatarStopState){
+            AvatarSMDStopState smdstop = new AvatarSMDStopState(x, y, x, x*2, y, y*2, false, null, smp);
+            tgcomp=smdstop;
+            SMDMap.put(asme, smdstop);
+            smp.addComponent(smdstop, x, y, false, true);
+            //  tp = smdstop.tgconnectingPointAtIndex(0);
+            locMap.put(asme, smdstop);
+        }
+        if (asme instanceof AvatarState){
+            //check if empty checker state
+            /* if (asme.getName().contains("signalstate_")){
+            //don't add the state, ignore next transition,
+            if (asme.getNexts().size()==1){
+            AvatarStateMachineElement next = asme.getNext(0).getNext(0);
+            //Reroute transition
+            for (AvatarTransition at: tranDestMap.keySet()){
+            if (tranDestMap.get(at) == asme){
+            tranDestMap.put(at, next);
+            }
+            }
+            addStates(next, x, y, smp,bl, SMDMap, locMap, tranDestMap, tranSourceMap);
+            return;
+            }
+            }*/
+            AvatarSMDState smdstate = new AvatarSMDState(x, y, x, x*2, y, y*2, false, null, smp);
+            tgcomp=smdstate;
+            smp.addComponent(smdstate, x, y, false, true);
+            smdstate.setValue(asme.getName());
+            smdstate.recalculateSize();
+            SMDMap.put(asme, smdstate);
+            //   tp = smdstate.getFreeTGConnectingPoint(x+smdstate.getWidth()/2,y+smdstate.getHeight());
+            //  TGConnectingPoint tp2 = smdstate.getFreeTGConnectingPoint(x+smdstate.getWidth()/2,y);
+            locMap.put(asme, smdstate);
+        }
+        int i=0;
+        int diff=100;
+        int ydiff=50;
+        int num = asme.nbOfNexts();
+        if (!(asme instanceof AvatarTransition)){
+            for (AvatarStateMachineElement el:asme.getNexts()){
+                if (!(el instanceof AvatarTransition)){
+                    System.out.println("ERROR: non-Transition " + asme + " connected to non-Transition " + el);
+                }
+            }
+        }
+        for (AvatarStateMachineElement el:asme.getNexts()){
+            if (el instanceof AvatarTransition){
+                tranSourceMap.put((AvatarTransition) el, tgcomp);
+            }
+            else {
+                if (asme instanceof AvatarTransition){
+                    AvatarTransition t = (AvatarTransition) asme;
+                    tranDestMap.put(t, el);
+                }
+            }
+            if (!SMDMap.containsKey(el)){
+                addStates(el, x+diff*(i-num/2), y+ydiff, smp, bl, SMDMap, locMap, tranDestMap, tranSourceMap);
+            }
+            i++;
+        }
+        return;
+    }
+
+    public void drawBlockProperties(AvatarBlock ab, AvatarBDBlock bl){
+        for (avatartranslator.AvatarSignal sig:ab.getSignals()){
+            String name=sig.getName().split("__")[sig.getName().split("__").length-1];
+            //           sig.setName(name);
+            String[] types = new String[sig.getListOfAttributes().size()];
+            String[] typeIds = new String[sig.getListOfAttributes().size()];
+            int i=0;
+            for (AvatarAttribute attr: sig.getListOfAttributes()){
+                types[i]=attr.getType().getStringType();
+                typeIds[i]=attr.getName();
+                i++;
+            }
+            TraceManager.addDev("Adding signal "+sig);
+            bl.addSignal(new ui.AvatarSignal(sig.getInOut(), name, types, typeIds));
+        }
+
+        bl.setValueWithChange(ab.getName().split("__")[ab.getName().split("__").length-1]);
+
+        for (AvatarAttribute attr: ab.getAttributes()){
+            int type=5;
+            if (attr.getType()==AvatarType.BOOLEAN){
+                type=4;
+            }
+            if (attr.getType()==AvatarType.INTEGER){
+                type=0;
+            }
+            if (attr.hasInitialValue()){
+                bl.addAttribute(new TAttribute(0, attr.getName(), attr.getInitialValue(), type));
+            }
+            else {
+                bl.addAttribute(new TAttribute(0, attr.getName(), attr.getType().getDefaultInitialValue(), type));
+            }
+            if (attr.getName().contains("key_")){
+                hasCrypto=true;
+                bl.addCryptoElements();
+            }
+        }
+        for (avatartranslator.AvatarMethod method: ab.getMethods()){
+            bl.addMethodIfApplicable(method.toString().replaceAll(" = 0",""));
+        }
+    }
+    public void drawPanel(AvatarSpecification avspec, AvatarDesignPanel adp){
+        //System.out.println(avspec.toString());
+        hasCrypto=false;
+        Map<String, Set<String>> originDestMap = new HashMap<String, Set<String>>();
+        Map<String, AvatarBDBlock> blockMap = new HashMap<String, AvatarBDBlock>();
+        if (adp ==null){
+            return;
+        }
+        if (avspec==null){
+            return;
+        }
+        AvatarBDPanel abd = adp.abdp;
+
+        //Find all blocks, create nested blocks starting from top left
+        int xpos=10;
+        int ypos=40;
+
+        //Create blocks recursively, starting from top level ones with no father
+        //Lowest level blocks should be 100x100, next should be 100x(number of children*100+50)...etc,
+        //Find level #, 0 refers to no father, etc
+        Map<AvatarBlock, Integer> blockLevelMap = new HashMap<AvatarBlock, Integer>();
+        Map<AvatarBlock, Integer> blockSizeMap = new HashMap<AvatarBlock, Integer>();
+        Map<AvatarBlock, Integer> blockIncMap = new HashMap<AvatarBlock, Integer>();
+        int maxLevel=0;
+        for (AvatarBlock ab: avspec.getListOfBlocks()){
+            int level=0;
+            AvatarBlock block=ab;
+            while (block.getFather()!=null){
+                if (blockSizeMap.containsKey(block.getFather())){
+                    blockSizeMap.put(block.getFather(), blockSizeMap.get(block.getFather())+1);
+                }
+                else {
+                    blockSizeMap.put(block.getFather(),1);
+                    blockIncMap.put(block.getFather(), 10);
+                }
+                level++;
+                block=block.getFather();
+            }
+            if (level>maxLevel){
+                maxLevel=level;
+            }
+            if (!blockSizeMap.containsKey(block)){
+                blockSizeMap.put(block, 0);
+                blockIncMap.put(block,10);
+            }
+            blockLevelMap.put(ab, level);
+        }
+
+
+        for (int level=0; level<maxLevel+1; level++){
+            for (AvatarBlock ab:avspec.getListOfBlocks()){
+                if (blockLevelMap.get(ab)==level){
+                    if (level==0){
+                        AvatarBDBlock bl = new AvatarBDBlock(xpos, ypos, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, null, abd);
+                        abd.addComponent(bl, xpos, ypos, false, true);
+                        bl.resize(100*blockSizeMap.get(ab)+100, 100+(maxLevel-level)*50);
+                        drawBlockProperties(ab,bl);
+                        AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue());
+                        buildStateMachine(ab, bl, smp);
+                        blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length-1], bl);
+                        xpos+=100*blockSizeMap.get(ab)+200;
+                    }
+                    else {
+
+                        AvatarBDBlock father= blockMap.get(ab.getFather().getName().split("__")[ab.getFather().getName().split("__").length-1]);
+                        //System.out.println("blockmap " + blockMap);
+                        if (father==null){
+                            //System.out.println("Missing father block " + ab.getFather().getName());
+                            continue;
+                        }
+                        AvatarBDBlock bl = new AvatarBDBlock(father.getX()+blockIncMap.get(ab.getFather()), father.getY()+10, abd.getMinX(), abd.getMaxX(), abd.getMinY(), abd.getMaxY(), false, father, abd);
+                        abd.addComponent(bl, father.getX()+blockIncMap.get(ab.getFather()), father.getY()+10, false, true);
+                        int size=100;
+                        if (blockSizeMap.containsKey(ab)){
+                            size=100*blockSizeMap.get(ab)+50;
+                        }
+                        bl.resize(size, 100+(maxLevel-level)*50);
+                        drawBlockProperties(ab,bl);
+                        abd.attach(bl);
+                        AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue());
+                        buildStateMachine(ab, bl, smp);
+                        blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length-1], bl);
+                        blockIncMap.put(ab.getFather(), blockIncMap.get(ab.getFather())+size+10);
+                    }
+                }
+            }
+        }
+
+
+        for (AvatarRelation ar: avspec.getRelations()){
+            String bl1 = ar.block1.getName();
+            String bl2 = ar.block2.getName();
+            if (originDestMap.containsKey(bl1.split("__")[bl1.split("__").length-1])){
+                originDestMap.get(bl1.split("__")[bl1.split("__").length-1]).add(bl2.split("__")[bl2.split("__").length-1]);
+            } else if (originDestMap.containsKey(bl2.split("__")[bl2.split("__").length-1])){
+                originDestMap.get(bl2.split("__")[bl2.split("__").length-1]).add(bl1.split("__")[bl1.split("__").length-1]);
+            } else {
+                Set<String> hs= new HashSet<String>();
+                hs.add(bl2.split("__")[bl2.split("__").length-1]);
+                originDestMap.put(bl1.split("__")[bl1.split("__").length-1], hs);
+            }
+        }
+        //Add Relations
+
+        for (String bl1: originDestMap.keySet()){
+            for (String bl2:originDestMap.get(bl1)){
+                Vector<Point> points=new Vector<Point>();
+                //      System.out.println("Finding " + bl1 + " and bl2 "+ bl2);
+                if (blockMap.get(bl1)==null || blockMap.get(bl2)==null){
+                    continue;
+                }
+                TGConnectingPoint p1= blockMap.get(bl1).findFirstFreeTGConnectingPoint(true,true);
+                p1.setFree(false);
+
+                TGConnectingPoint p2= blockMap.get(bl2).findFirstFreeTGConnectingPoint(true,true);
+                p2.setFree(false);
+
+                if (bl2.equals(bl1)){
+                    //Add 2 point so the connection looks square
+                    Point p = new Point(p1.getX(), p1.getY()-10);
+                    points.add(p);
+                    p = new Point(p2.getX(), p2.getY()-10);
+                    points.add(p);
+                }
+                AvatarBDPortConnector conn = new AvatarBDPortConnector(0, 0, 0, 0, 0, 0, true, null, abd, p1, p2, points);
+                abd.addComponent(conn, 0,0,false,true);
+
+                //Add Relations to connector
+                for (AvatarRelation ar:avspec.getRelations()){
+                    if (ar.block1.getName().contains(bl1) && ar.block2.getName().contains(bl2) || ar.block1.getName().contains(bl2) && ar.block2.getName().contains(bl1)){
+
+                        //TGConnectingPoint p1= blockMap.get(bl1).getFreeTGConnectingPoint(blockMap.get(bl1).getX(), blockMap.get(bl1).getY());
+
+                        conn.setAsynchronous(ar.isAsynchronous());
+                        conn.setBlocking(ar.isBlocking());
+                        conn.setPrivate(ar.isPrivate());
+                        conn.setSizeOfFIFO(ar.getSizeOfFIFO());
+                        //System.out.println(bl1 +" "+ ar.block1.getName() + " "+ ar.block2.getName());
+                        for (int i =0; i< ar.nbOfSignals(); i++){
+                            //System.out.println("Adding relation " + ar.getSignal1(i).toString() + " " + ar.getSignal2(i).toBasicString());
+                            conn.addSignal(ar.getSignal1(i).toString(),ar.getSignal1(i).getInOut()==0,ar.block1.getName().contains(bl1));
+                            conn.addSignal(ar.getSignal2(i).toString(), ar.getSignal2(i).getInOut()==0,!ar.block1.getName().contains(bl1));
+                            //  System.out.println("adding signal " +ar.getSignal1(i).toBasicString());
+                        }
+                        //System.out.println("Added Signals");
+                        conn.updateAllSignals();
+
+
+                    }
+                    conn.updateAllSignals();
+                }
+
+                /*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);
+                  }
+                  }
+                  }*/
+            }
+        }
+        ypos+=100;
+        //Add Pragmas
+        AvatarBDPragma pragma=new AvatarBDPragma(xpos, ypos, xpos, xpos*2, ypos, ypos*2, false, null,abd);
+        //  String[] arr = new String[avspec.getPragmas().size()];
+        String s="";
+        // int i=0;
+        for (AvatarPragma p: avspec.getPragmas()){
+
+            //    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];
+                        t=t.concat(tmp.split("__")[tmp.split("__").length-1] + "." + tmp2.split("__")[tmp2.split("__").length-1] + " ");
+                    }
+                    else {
+                        t=t.concat(str+" ");
+                    }
+                }
+            }
+            else if (p.getName().contains("Authenticity")){
+                t=p.getName();
+            }
+            else if (p.getName().contains("Initial")){
+                t=p.getName();
+            }
+            else {
+                t=p.getName();
+            }
+            s=s.concat(t+"\n");
+            //  i++;
+        }
+        pragma.setValue(s);
+        pragma.makeValue();
+        abd.addComponent(pragma, xpos, ypos, false,true);
+        //Add message and key datatype if there is a cryptoblock
+
+        xpos=50;
+        ypos+=200;
+        if (hasCrypto){
+            AvatarBDDataType message = new AvatarBDDataType(xpos, ypos, xpos, xpos*2, ypos, ypos*2, false, null,abd);
+            message.setValue("Message");
+
+            abd.addComponent(message, xpos, ypos, false,true);
+            message.resize(200,100);
+            xpos+=400;
+
+            AvatarBDDataType key = new AvatarBDDataType(xpos, ypos, xpos, xpos*2, ypos, ypos*2, false, null,abd);
+            key.setValue("Key");
+            TAttribute attr = new TAttribute(2, "data", "0", 8);
+            message.addAttribute(attr);
+            key.addAttribute(attr);
+            key.resize(200,100);
+            abd.addComponent(key, xpos, ypos, false,true);
+        }
+    }
+
+    public void buildStateMachine(AvatarBlock ab, AvatarBDBlock bl, AvatarSMDPanel smp){
+        Map<AvatarTransition, TGComponent> tranSourceMap = new HashMap<AvatarTransition, TGComponent>();
+        Map<AvatarTransition, AvatarStateMachineElement> tranDestMap = new HashMap<AvatarTransition, AvatarStateMachineElement>();
+        Map<AvatarStateMachineElement, TGComponent> locMap = new HashMap<AvatarStateMachineElement, TGComponent>();
+        Map<AvatarStateMachineElement, TGComponent> SMDMap = new HashMap<AvatarStateMachineElement, TGComponent>();
+
+        //Build the state machine
+        int smx=400;
+        int smy=40;
+
+        if (smp==null){
+            System.out.println("can't find");
+            return;
+        }
+        smp.removeAll();
+        AvatarStateMachine asm = ab.getStateMachine();
+        //Remove the empty check states
+
+        AvatarStartState start= asm.getStartState();
+        addStates(start, smx, smy, smp, bl, SMDMap, locMap, tranDestMap, tranSourceMap);
+        //Add transitions
+        for (AvatarTransition t: tranSourceMap.keySet()){
+            if (tranSourceMap.get(t)==null || tranDestMap.get(t)==null){
+                continue;
+            }
+            int x=tranSourceMap.get(t).getX()+tranSourceMap.get(t).getWidth()/2;
+            int y=tranSourceMap.get(t).getY()+tranSourceMap.get(t).getHeight();
+
+            //    TGConnectingPoint p1 = tranSourceMap.get(t).findFirstFreeTGConnectingPoint(true,false);
+            TGConnectingPoint p1 = tranSourceMap.get(t).closerFreeTGConnectingPoint(x, y, true, false);
+            if (p1==null){
+                //  p1= tranSourceMap.get(t).findFirstFreeTGConnectingPoint(true,true);
+                p1=tranSourceMap.get(t).closerFreeTGConnectingPoint(x,y,true, true);
+            }
+            x= locMap.get(tranDestMap.get(t)).getX()+ locMap.get(tranDestMap.get(t)).getWidth()/2;
+            y = locMap.get(tranDestMap.get(t)).getY();
+            if (tranSourceMap.get(t).getY() > locMap.get(tranDestMap.get(t)).getY()){
+                y=locMap.get(tranDestMap.get(t)).getY()+locMap.get(tranDestMap.get(t)).getHeight()/2;
+                if (tranSourceMap.get(t).getX() < locMap.get(tranDestMap.get(t)).getX()){
+                    x = locMap.get(tranDestMap.get(t)).getX();
+                }
+                else {
+                    x= locMap.get(tranDestMap.get(t)).getX()+locMap.get(tranDestMap.get(t)).getWidth();
+                }
+            }
+            TGConnectingPoint p2 = locMap.get(tranDestMap.get(t)).closerFreeTGConnectingPoint(x,y,false, true);
+            if (p2==null){
+                p2=locMap.get(tranDestMap.get(t)).closerFreeTGConnectingPoint(x,y,true, true);
+            }
+            Vector<Point> points = new Vector<Point>();
+            if (p1==null || p2 ==null){
+                System.out.println(tranSourceMap.get(t)+" "+locMap.get(tranDestMap.get(t)));
+
+                System.out.println("Missing point "+ p1 + " "+p2);
+                return;
+            }
+            AvatarSMDConnector SMDcon = new AvatarSMDConnector((int) p1.getX(), (int) p1.getY(), (int) p1.getX(), (int) p1.getY(), (int) p1.getX(), (int) p1.getY(), true, null, smp, p1, p2, points);
+            //System.out.println(tranSourceMap.get(t)+" "+locMap.get(tranDestMap.get(t)));
+            ///System.out.println("FREE " +p1.isFree() + " "+ p2.isFree());
+            p1.setFree(false);
+            p2.setFree(false);
+            String action="";
+            if (t.getActions().size()==0){
+                action="";
+            }
+            else {
+                action=t.getActions().get(0).toString().replaceAll(" ","");
+            }
+            SMDcon.setTransitionInfo(t.getGuard().toString(), action);
+            for (int i=1; i<t.getActions().size(); i++){
+                SMDcon.setTransitionInfo("", t.getActions().get(i).toString().replaceAll(" ",""));
+            }
+            smp.addComponent(SMDcon, (int) p1.getX(), (int) p1.getY(), false, true);
+        }
+    }
+
+    // Generates for all observers, a TURTLE modeling for checking it
+    public boolean generateTMsForRequirementAnalysis(Vector<Requirement> reqs, RequirementDiagramPanel rdp) {
+        rm = new RequirementModeling(reqs, rdp, mgui);
+        checkingErrors = rm.getCheckingErrors();
+        warnings = rm.getWarnings();
+        if ((checkingErrors != null) && (checkingErrors.size() > 0)){
+            return false;
+        } else {
+            //mgui.setMode(mgui.GEN_DESIGN_OK);
+            languageID = MATRIX;
+            return true;
+        }
+    }
+
+    public RequirementModeling getRequirementModeling() {
+        return rm;
+    }
+
+    public void removeBreakpoint(Point p) {
+        if (listE == null) {
+            return;
+        }
+
+        listE.removeBreakpoint(p);
+    }
+
+    public void addBreakpoint(Point p) {
+        if (listE == null) {
+            return;
+        }
+
+        listE.addBreakpoint(p);
+    }
+
+    private void analyzeErrors() {
+        CheckingError ce;
+        TGComponent tgc;
+
+        for(int i=0; i<checkingErrors.size(); i++) {
+            ce = (CheckingError)(checkingErrors.get(i));
+            if (ce != null && ce instanceof UICheckingError) {
+                tgc = ((UICheckingError) ce).getTGComponent();
+                if (tgc != null) {
+                    analyzeErrorOnComponent(tgc);
+                }
+            }
+        }
+    }
+
+    private void analyzeErrorOnComponent(TGComponent _tgc) {
+        if (_tgc instanceof BasicErrorHighlight) {
+            ((BasicErrorHighlight)_tgc).setStateAction(ErrorHighlight.UNKNOWN);
+        } else if (_tgc instanceof ActionStateErrorHighlight) {
+            ((ActionStateErrorHighlight)_tgc).setStateAction(ErrorHighlight.UNKNOWN_AS);
+        }
+    }
+
+    public boolean makeEBRDD(EBRDDPanel tdp) {
+        EBRDDTranslator ebrddt = new EBRDDTranslator();
+        ebrdd = ebrddt.generateEBRDD(tdp, tdp.getName());
+        warnings = ebrddt.getWarnings();
+        checkingErrors = ebrddt.getErrors();
+        if (checkingErrors.size() > 0) {
+            return false;
+        }
+        TraceManager.addDev("the EBRDD:\n" + ebrdd.toString());
+        return true;
+    }
+
+    public void setElementsOfSearchTree(Vector<Object> elements) {
+        st.setElements(elements);
+    }
 
 }
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index 13530f50ce7792d885af1a33796cd339888a77d9..fe3d3aaf83e7a1fee3a3f44a7197718de0071ab1 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -2235,7 +2235,7 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
     }
 
     public void openProjectFromFile(File _f) {
-
+	file = _f;
         String s = null;
         if(checkFileForOpen(_f)) {
             try {
diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java
index 7ec1eaa399b3da4d3aa6e51dbb04d9de92ab84ab..2bc6732ee122559987043ce564e4f4026acbab74 100755
--- a/src/main/java/ui/TDiagramPanel.java
+++ b/src/main/java/ui/TDiagramPanel.java
@@ -226,6 +226,9 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
     public static boolean AVATAR_ANIMATE_ON;
 
 
+    public boolean drawable = true;
+    
+
 
     // Constructor
     public TDiagramPanel(MainGUI _mgui, TToolBar _ttb) {
@@ -393,6 +396,12 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
 
     private Font fontToUse = null;
     public void paintMycomponents(Graphics g, boolean b, double w, double h) {
+
+	if (!drawable) {
+	    return;
+	}
+
+	
         if (this.fontToUse == null)
             this.fontToUse = g.getFont ();
         else
diff --git a/src/main/java/ui/avatarbd/AvatarBDBlock.java b/src/main/java/ui/avatarbd/AvatarBDBlock.java
index e511df929950899e53a5a83603d062a3ce679301..edc2adc70ad6f9fd22a9d33cdbbde54fc320f13b 100644
--- a/src/main/java/ui/avatarbd/AvatarBDBlock.java
+++ b/src/main/java/ui/avatarbd/AvatarBDBlock.java
@@ -168,6 +168,9 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S
     }
     
     public void internalDrawingAux (Graphics graph) {
+
+	//TraceManager.addDev("Block drawing aux = " + this);
+	
         // Draw outer rectangle (for border)
         Color c = graph.getColor ();
         graph.drawRect (this.x, this.y, this.width, this.height);
@@ -826,6 +829,9 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S
             //System.out.println("Loading attributes");
             //System.out.println(nl.toString());
 
+	    //TraceManager.addDev("LEP Begin Block  = " + this + " trace=");
+	    //Thread.currentThread().dumpStack();
+
             for(int i=0; i<nl.getLength(); i++) {
                 n1 = nl.item(i);
                 //System.out.println(n1);
@@ -940,6 +946,9 @@ public class AvatarBDBlock extends TGCScalableWithInternalComponent implements S
         } else {
             globalCode = Conversion.wrapText(tmpGlobalCode);
         }
+	
+	//TraceManager.addDev("LEP End Block  = " + this);
+	
     }
 
     public String getBlockName() {
diff --git a/src/main/java/ui/networkmodelloader/JDialogLoadingNetworkModel.java b/src/main/java/ui/networkmodelloader/JDialogLoadingNetworkModel.java
index b138c35a94ea20d8006177dad919a829d6e42a2b..63c2115431edad09bac15eb844a9d13e819ad76b 100644
--- a/src/main/java/ui/networkmodelloader/JDialogLoadingNetworkModel.java
+++ b/src/main/java/ui/networkmodelloader/JDialogLoadingNetworkModel.java
@@ -370,5 +370,4 @@ public class JDialogLoadingNetworkModel extends javax.swing.JFrame implements Ac
         jta.append(s);
     }
 
-
 }