/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
 * 
 * ludovic.apvrille AT enst.fr
 * 
 * This software is a computer program whose purpose is to allow the
 * edition of TURTLE analysis, design and deployment diagrams, to
 * allow the generation of RT-LOTOS or Java code from this diagram,
 * and at last to allow the analysis of formal validation traces
 * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
 * from INRIA Rhone-Alpes.
 * 
 * This software is governed by the CeCILL  license under French law and
 * abiding by the rules of distribution of free software.  You can  use,
 * modify and/ or redistribute the software under the terms of the CeCILL
 * license as circulated by CEA, CNRS and INRIA at the following URL
 * "http://www.cecill.info".
 * 
 * As a counterpart to the access to the source code and  rights to copy,
 * modify and redistribute granted by the license, users are provided only
 * with a limited warranty  and the software's author,  the holder of the
 * economic rights,  and the successive licensors  have only  limited
 * liability.
 * 
 * In this respect, the user's attention is drawn to the risks associated
 * with loading,  using,  modifying and/or developing or reproducing the
 * software by the user in light of its specific status of free software,
 * that may mean  that it is complicated to manipulate,  and  that  also
 * therefore means  that it is reserved for developers  and  experienced
 * professionals having in-depth computer knowledge. Users are therefore
 * encouraged to load and test the software's suitability as regards their
 * requirements in conditions enabling the security of their systems and/or
 * data to be ensured and,  more generally, to use and operate it in the
 * same conditions as regards security.
 * 
 * The fact that you are presently reading this means that you have had
 * knowledge of the CeCILL license and that you accept its terms.
 */





package ui;

import fr.inria.oasis.vercors.cttool.model.*;
import translator.*;
import ui.procsd.*;
import ui.prosmd.*;
import ui.prosmd.util.CorrespondanceSMDManager;

import java.util.*;

/**
 * Class GProactiveDesign
 * Translation of graphical proactive designs into TURTLE modeling
 * Creation: 10/07/2006
 * @version 1.0 10/07/2006
 * @author Ludovic APVRILLE
 */
public class GProactiveDesign  {
    private TURTLEModeling tm;
    private ProactiveDesignPanel pdp;
    private List<ProCSDPort> portsList=new LinkedList<ProCSDPort>(); //list of ProCSDPort 
    private List<TGConnectorProCSD> connectorsList =new LinkedList<TGConnectorProCSD>(); //list of TGConnectorProCSD
    private List<TGConnectorPortInterface> connectorsPortInterfacesList=new LinkedList<TGConnectorPortInterface>();
    private List<ProCSDInterface> interfacesList =new LinkedList<ProCSDInterface>(); //list of ProCSDInterface
    private List<ProCSDComponent> proCSDComponentsList=new LinkedList<ProCSDComponent>();
    private List<CheckingError> checkingErrors=new LinkedList<CheckingError> (); 
  //  private CorrespondanceTGElement listE;
    private CorrespondanceSMDManager corespManager;
    private boolean buildErrors;
    //Added by Solange ...and removed by Emil ..
  //  private ProCSDPort puerto, puerto2;
    private Component mainModelComp;
    
    public GProactiveDesign(ProactiveDesignPanel _pdp) {
        pdp = _pdp;
        init();
     
        //System.out.println(mainModelComp.prettyPrint());
   }
    

    
    private void init()
    {   checkingErrors = new LinkedList<CheckingError> ();
      //  listE = new CorrespondanceTGElement();
    	portsList=new LinkedList<ProCSDPort>(); //list of ProCSDPort 
        connectorsList =new LinkedList<TGConnectorProCSD>(); //list of TGConnectorProCSD
        interfacesList =new LinkedList<ProCSDInterface>(); //list of ProCSDInterface
        proCSDComponentsList=new LinkedList<ProCSDComponent>();
    	ProactiveCSDPanel csd = (ProactiveCSDPanel)(pdp.panels.elementAt(0));
     	List<TGComponent> list = csd.getComponentList();
     	boolean cyclefound=false;
     	  for (int i=0;i<list.size();i++)
        {
        	TGComponent tmp= list.get(i);
//        	listElement(tmp);
          if  (!parseStructureAndFillUpLists(tmp)) cyclefound=true;
        }
        
    	  
     	  
     	  
        if (cyclefound)
        	addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"Cycle found in component diagrams structure."));
     	
        updatePortsInformation();
    
     	  
   //     updateAllMembranes(); 
     	  
     	  
    }
    
    
    public void updateAllMembranes()
    {
    	this.pdp.updateAllMembranes();    	
    }
    

    
    private Component createModelComp(ProCSDComponent comp)
    {
    	String modelCompName=comp.getValue();
    	
   	if (comp.getThisCompDesign()!=null)
    	 {comp=comp.getThisCompDesign();
   // 	  modelCompName+="_"+comp.getValue();
    	 }
   
    	
    	Component modelComp=new ComponentImpl(modelCompName,isPrimitive(comp));
    	    	
    	
    	
     //we add attributes
      List<TAttribute> attribs=comp.getMyAttributes();
	  for (int at=0;at<attribs.size();at++)
		{
			TAttribute a= attribs.get(at);
			Attribute attrib=new fr.inria.oasis.vercors.cttool.model.AttributeImpl(a.getId(),a.getType(),a.getAccess(),a.getInitialValue());		
			modelComp.addAttribute(attrib);			
		}
			  
	  
	  //we add ports
	  //we do not set the ports bindings at this time as all ports in the model
	  //are not already
	  //created
	  
	  Vector<ProCSDPort> portsList=comp.getPortsList();
	  for (int k=0;k<portsList.size();k++)
	  {
		  ProCSDPort p = portsList.get(k);
		  Port modelPort=null;
		  if (p instanceof ProCSDInPort)
		  {
			  modelPort=new InPort(p.getValue(),modelComp);
	  	  }
		  if (p instanceof ProCSDOutPort)
		  {
			  modelPort=new OutPort(p.getValue(),modelComp);
		  }		  
		  if (p.getMyInterface()!=null)
		  {
			  ProCSDInterface proI=p.getMyInterface();
			  Interface modelI=new InterfaceImpl(proI.getValue(),proI.isMandatory());
			  List<TAttribute> proMsgs=proI.getMyMessages();
			  
			  for(int i=0; i<proMsgs.size(); i++) 
			  {
	               TAttribute a = proMsgs.get(i);
	               Message m=new MessageImpl(a.getId());
	               modelI.addMessage(m);	            		   
			  }
			  modelPort.setInterface(modelI);
		  }
		  modelComp.addPort(modelPort);
	  }
  
	  //we add the behaviour Panel
	  modelComp.setBehaviour(comp.getMySMD());
	  
	  
    	Vector<ProCSDComponent> subComps=comp.getComponentList();
		for (int k=0;k<subComps.size();k++)
		{
			ProCSDComponent subComp= subComps.get(k);
			Component sc=createModelComp(subComp);
			
			
			modelComp.addSubComponent(sc);
			sc.setFather(modelComp);				
		}
		return modelComp;
    }

    
    
    
    
    private Component initModel(ProactiveCSDPanel mainCsd) throws Exception
    {
    	Component mainAppComp=new ComponentImpl("Application");
    	List<TGComponent> comps = mainCsd.getComponentList();
    	for (int k=0;k<comps.size();k++)
    	{
    		TGComponent t= comps.get(k);
    		if (t instanceof ProCSDComponent)
    		{
    			ProCSDComponent comp=(ProCSDComponent)t;
    			Component modelComp=createModelComp(comp);
    		    mainAppComp.addSubComponent(modelComp);
    		    modelComp.setFather(mainAppComp);
    		}
    	}
    	
    	mainAppComp=updatePortsBindingInModel(mainAppComp,mainCsd);
    	return mainAppComp;
    }
    
  /*
   * if the father of this port is designed in other diagram, 
   * it returns the port in that diagram corresponding to this port
   * if not it return this port
   */
    private ProCSDPort getRealPort(ProCSDPort p)
    {
    	if (p==null) return null;
    	ProCSDComponent father=(ProCSDComponent)p.getFather();
    	ProCSDComponent fatherDesign=father.getThisCompDesign();
    	if (fatherDesign!=null)
    	{
    		return fatherDesign.getPortByName(p.getValue());
    	}
    	else
    		return p;
     }
    
    
    private void updatePortsBindingInModel(Component modelComp, ProCSDComponent proComp) throws Exception
    {
    	//we consider pairs of  (model Out Port, ProCSDOutPort)
    	Vector<ProCSDPort> ports=proComp.getPortsList();
    	for (int k=0;k<ports.size();k++)
    	{
    		ProCSDPort p= ports.get(k);
    		if (p instanceof ProCSDOutPort)
    		{
    			ProCSDOutPort proPort=(ProCSDOutPort)p;
    			Port modelPort=modelComp.getPortByName(proPort.getValue());
    			
    			ProCSDPort proToPort=getRealPort(proPort.getToPort());
    			if (proToPort!=null)
    			{
    				Port modelToPort=null;
    				ProCSDComponent proToPortFather =(ProCSDComponent)proToPort.getFather();
    				Component modelToPortFather=null;
    				if (proToPortFather==proComp.getFather())
    				{
    					 modelToPortFather=modelComp.getFather();
    				}
    				else
    				{
    					String modelToPortFatherName=proPort.getToPort().getFather().getValue();
    				
    					
    					
    					//	if (proToPortFather.getThisCompDesign()!=null)
    				//		modelToPortFatherName+="_"+proToPortFather.getThisCompDesign().getValue();
    					
    					modelToPortFather=modelComp.getFather().getSubComponentByName(modelToPortFatherName); 
    				}
    				modelToPort=modelToPortFather.getPortByName(proToPort.getValue());
				    modelPort.setToPort(modelToPort);
				    modelToPort.setFromPort(modelPort);
    				
    			}//if proToPort!=null

    			ProCSDPort proFromPort=getRealPort(proPort.getFromPort());
    			if (proFromPort!=null)
    			{
    				Port modelFromPort=null;
    				//ProCSDComponent proFromPortFather =(ProCSDComponent)proFromPort.getFather();
    				
    				String modelFromPortFatherName=proPort.getFromPort().getFather().getValue();
					if (proFromPort!=proPort.getFromPort())
					{
						modelFromPortFatherName=proPort.getFromPort().getFather().getValue();
					}
    				
    				//if (proFromPortFather.getThisCompDesign()!=null)
					//	modelFromPortFatherName+="_"+proFromPortFather.getThisCompDesign().getValue();
    				
    				Component modelFromPortFather=modelComp.getSubComponentByName(modelFromPortFatherName);
    				modelFromPort=modelFromPortFather.getPortByName(proFromPort.getValue());
    				modelPort.setFromPort(modelFromPort);
    				modelFromPort.setToPort(modelPort);  
    				
    			}//if proFromPort!=null
    		}//if p is ProCSDOutPort
    		else
    			if (p instanceof ProCSDInPort)  
    		{
    				ProCSDInPort proPort=(ProCSDInPort)p;
        			Port modelPort=modelComp.getPortByName(proPort.getValue());
        			
        			ProCSDPort proFromPort=getRealPort(proPort.getFromPort());
        			if (proFromPort!=null)
        			{
        				if (proFromPort instanceof ProCSDInPort)
        				{
        					Port modelFromPort=null;
        					ProCSDComponent proFromPortFather=(ProCSDComponent)proFromPort.getFather();
        					Component modelFromPortFather=null;
        					if (proFromPortFather==proComp.getFather())
            				{
            					 modelFromPortFather=modelComp.getFather();
            				}
            				else
            				{
            	
            					String modelFromPortFatherName=proPort.getFromPort().getFather().getValue();
            					if (proFromPortFather.getThisCompDesign()!=null)
            						modelFromPortFatherName=proFromPortFather.getThisCompDesign().getValue();
                				modelFromPortFather=modelComp.getFather().getSubComponentByName(modelFromPortFatherName); 
            				}
        					
        				modelFromPort=modelFromPortFather.getPortByName(proFromPort.getValue());
        				modelPort.setFromPort(modelFromPort);
        				modelFromPort.setToPort(modelPort);        				
        			}//if fromport=ProCSDInPort
       			}//if proFromPort!=null
    		}//if p instanceof ProCSDInport
    	}//for all ports
    	
    	if (proComp.getThisCompDesign()!=null)
    		proComp=proComp.getThisCompDesign();
    	Vector<ProCSDComponent> v = proComp.getComponentList();
    	
    	for (int k=0;k<v.size();k++)
    	{
    		ProCSDComponent proSubComp= v.get(k);
    		String proSubCompName=proSubComp.getValue();
    		//if (proSubComp.getThisCompDesign()!=null)
    			//proSubCompName+="_"+proSubComp.getThisCompDesign().getValue();
    		
    		Component modelSubComp=modelComp.getSubComponentByName(proSubCompName);
            updatePortsBindingInModel(modelSubComp,proSubComp);
    	
    	}
    	
    	
    	
    }//method update ports bindings in model
    
    
   private Component updatePortsBindingInModel(Component mainComp, ProactiveCSDPanel mainCsd ) throws Exception
   {
	   //we consider pairs of components (Component c, ProCSDComponent pc) and update potrs bindings in 
	   
	   	List<TGComponent> comps = mainCsd.getComponentList();
   		for (int k=0;k<comps.size();k++)
   		{
   			TGComponent t= comps.get(k);
   			if (t instanceof ProCSDComponent)
   				{
   					ProCSDComponent proComp=(ProCSDComponent)t;
   					String proCompName=proComp.getValue();
   					//if (proComp.getThisCompDesign()!=null) 
   					// 	proCompName+="_"+proComp.getThisCompDesign().getValue();
   					Component modelComp=mainComp.getSubComponentByName(proCompName);
   					if (modelComp==null) {System.out.println("This is a fatal problem.");
   										  addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"Fatal error in the model translator. Please excuse us for this problem. "));	
   										}
   					
   					updatePortsBindingInModel(modelComp,proComp);
   				}
   		}
   		
   		
	   
	   return mainComp;
   }
    
    
    
    
    
    
    
    public TURTLEModeling generateTURTLEModeling() {
        tm = new TURTLEModeling();
        init();
   	 if (checkingErrors.size()==0)
       try{
        mainModelComp=initModel((ProactiveCSDPanel)(pdp.panels.elementAt(0)));
   	 }
   	  catch (Exception e)
   	  {
   		  System.out.println("This is probably just litle nice bug: Could not initializate model. Exception is: \n");
   		  e.printStackTrace();
   	  }
      if (checkingErrors.size()!=0) return null; 
        	addTClasses(tm,mainModelComp);
      if (checkingErrors.size()==0)	addSynchronisations(tm,mainModelComp);
        return tm;
    }
    
    
    
    public boolean checkSyntax() {

        return checkingErrors.size() <= 0;
    }
    
   
    
    
    /*
     * for each port :
     *  update the interface wich contains methods who pass through this port
     *  "push" the connection into the inside ports in order to have 
     *  the connections between the primitives 
     *  
     */
    
    private void updatePortsInformation()
    {
    	
    	for (int k=0;k<connectorsList.size();k++)
    	{
    		TGConnectorProCSD c= connectorsList.get(k);
    		c.doPostLoading();
    	}
    	
    	for (int k=0;k<connectorsPortInterfacesList.size();k++)
    	{
    		TGConnectorPortInterface c= connectorsPortInterfacesList.get(k);
    		c.doPostLoading();
    	}
    	
    	//ok 
    	//we need to update the toPort and fromPort for the ports 
    	//of the components who are designed in a diffrent diagram:
    	
/*    	for (int k=0;k<portsList.size();k++)
    	{
    		ProCSDPort p=(ProCSDPort)portsList.get(k);
    		ProCSDComponent portFather=(ProCSDComponent)p.getFather();
    		ProCSDPort pOkBindings=portFather.getThisCompDesign().getPort(p.getValue());
    	    if(pOkBindings!=null)
    	    {
    	    	p.setToPort(pOkBindings.getToPort());
    	    	p.setFromPort(pOkBindings.getFromPort());
    	    }
    	}
  */  	
    	
    	
    	
    	//all this code is just used for compatibility with old CTTool versions.
    	//normaly we shouldn't do this
    	//at least I think...
    	//needs to be verified
    	//and verry well improved before
    	//all this very-badly-designed-software will be well packed
    	//and nicelly put into a trash bin 
    	
    	
    	//Added by Solange
    	int isCompatible;  //0: OK
    					   //1: Port error
    					   //2: compatibility error
    	ProCSDInterface myInterface=null;
    	TGConnectorAttribute myInterfaceConnector;
    	
 	
    	//first we consider all out ports	
    	 for (int i=0;i<portsList.size();i++)
    	 {
    		 ProCSDPort op= portsList.get(i);
    		 if (op.getType()==TGComponentManager.PROCSD_OUT_PORT)
    		 {  
    			
    			 try {
    				 myInterface=op.getMyInterface(interfacesList);
    				 //Added by Solange
    				 op.setMyInterface(myInterface);
    				 // Added by Solange
    				 myInterfaceConnector=op.getTGConnectorInterface();
    				 // Added by Solange
    				 myInterface.setMyConnector(myInterfaceConnector);
        			 }
    			 catch (Exception e)
    			 {
    						 
    				 if (op.getFather()==null)
    				 {
    					 this.addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"Port "+op.getValue()+" doesn't belong to a component"));
    					 return;
    				 }
    				 if (((ProCSDComponent)op.getFather()).getThisCompDesign()==null) 
    				 {this.addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"No interface found corresponding to port "+op.getValue()));
    				 return;
    				 }
    			 
    			 }
    			 
    			 ProCSDPort toP=op.getToPort();
    			// if (toP==null) toP=getConnectedProCSDPort(op);
    			 //if(toP==null) toP=getDelegateConnectorProCSDPort(op);
    			 //Commented because is not always an error to be free, by Solange
    			 /* if (toP==null)
    			 {
    				addCheckingError(CheckingError.STRUCTURE_ERROR,"Error: out connection not found for "+op.toString()+" in component "+op.getFather().getValue());
    				//System.out.println("Error: no connection found for "+op.toString());
    				  return; 
    			 }*/
    			  
    			 if (toP!=null)
    			 {
    			  op.setToPort(toP);	 
    			  toP.setFromPort(op);
    			 }
    			 
    			 //Added by Solange
    			 if (myInterface!=null)
    			 { 
    			 isCompatible=op.Compatibility(op,myInterface,interfacesList);
				 //Added by Solange
				 switch(isCompatible)
				 {
					 case 0:// System.out.println("Compatibility test Out port... OK");
					 		 break;
					 case 1: this.addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"Port "+ op.toString() + " not connected"));
					 		 break;
					 case 2: this.addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"No Interface Compatibility"));
					 		 break;
				 }
    			 } 
                /* Delegate ports removed, by Solange
    			 ProCSDPort dp = getConnectedDelegatePort(op);
    			 if (dp!=null)
    			 {   dp.setMyInterface(myInterface);
    				 dp.setToPort(toP);
    				 toP.setFromPort(dp);
    				 
    				 ProCSDPort ddp=getFromInsideConnectedPort(dp);
    				 while (ddp!=null)
    				 {   ddp.setMyInterface(myInterface);
    					 ddp.setToPort(toP);
    					 toP.setFromPort(ddp);
    					 ddp=getFromInsideConnectedPort(ddp);
    				 }//while ddp!=null
    			 }//if dp!=null
    			*/
    		 }//if this port is an out port
    	 }//for all ports (out)
    
         //now we consider all in ports
    	 for (int i=0;i<portsList.size();i++)
    	 {
    		 ProCSDPort ip= portsList.get(i);
    		 if (ip.getType()==TGComponentManager.PROCSD_IN_PORT)
    		 {    myInterface=ip.getMyInterface(interfacesList);	
    		  if (myInterface!=null)
    		  {
    		  //Added by Solange
    		      ip.setMyInterface(myInterface);
    		      // Added by Solange
 				 myInterfaceConnector=ip.getTGConnectorInterface();
 				 // Added by Solange
 				 myInterface.setMyConnector(myInterfaceConnector);
    		      //
    		  }
 				 ProCSDPort fromPort=ip.getFromPort();
                  //Added by Solange 
			  //    if(fromPort==null) fromPort=getDelegateConnectorProCSDPort(ip);
			      
			      if (fromPort!=null)
	    			 {
	    			  ip.setFromPort(fromPort);	 
	    			  fromPort.setToPort(ip);
	    			 }
		    		 
                //Commented because is not always an error to be free, by Solange
                /*if (fromPort==null)
                {
                	addCheckingError(CheckingError.STRUCTURE_ERROR,"Error: in connection not found for "+ip.toString()+" in component "+ip.getFather().getValue());
                	return;
                }*/
                //Added by Solange
                isCompatible=ip.Compatibility(ip, myInterface, interfacesList);
				//Added by Solange
                switch(isCompatible)
				 {
					 case 0: //System.out.println("Compatibility test In port... OK");
					 		 break;
					 case 1: this.addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"Port "+ ip.toString() + " not connected"));
					 		 break;
					 case 2: this.addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"No Interface Compatibility"));
					 		 break;
				 }
                                
                /* Delegate ports removed, by Solange
    			ProCSDPort dp=getConnectedDelegatePort(ip);
    			if (dp!=null)
    			{   dp.setMyInterface(myInterface);
    				dp.setFromPort(fromPort);
    				fromPort.setToPort(dp);
                    ProCSDPort ddp=getToInsideConnectedPort(dp);
                    while (ddp!=null)
                    {   ddp.setMyInterface(myInterface);
                    	ddp.setFromPort(fromPort);
                    	fromPort.setToPort(ddp);
                    	ddp=getToInsideConnectedPort(ddp);
                    }//while ddp!=null
    			
    			}//dp!=null
    			*/
    		 }// ip is an input port
    	 } // for all ports in		 		 
    }
    
    private boolean isPrimitive(ProCSDComponent comp)
    {
    	List<TGComponent> l=getSubComponents(comp,TGComponentManager.PROCSD_COMPONENT);
    	if (l==null) return true;
        return l.size() == 0;
    }
    
    
    /*
     * get subcomponents of type given as parameter
     * @param type The type id from TGComponentManager
     * @param tgc A component
     * @return selectedSubComps A LinkedList of subcomponents of the type
     */
    private List<TGComponent> getSubComponents(TGComponent tgc, int type)
    {
    	if (!(tgc.getType()==TGComponentManager.PROCSD_COMPONENT)) return null;
    	List<TGComponent> subcompList=getSubComponents(tgc);
    	List<TGComponent> selectedSubComps=new LinkedList<TGComponent>();
        for (int i=0;i<subcompList.size();i++)
        {
        	TGComponent tmp=subcompList.get(i);
        	if (tmp.getType()==type)
        		selectedSubComps.add(tmp);
        	
        }
    	return selectedSubComps;
    	    	
    }
    
    
    
    /*
     * get subcomponents of all types
     * @param tgc A component
     * @return subcompList A LinkedList of subcomponents
     */
    private List<TGComponent> getSubComponents(TGComponent tgc)
    {
    	List<TGComponent> subcompList=new LinkedList<TGComponent>();
    	int nb=tgc.getNbInternalTGComponent();
    	for (int j=0;j<nb;j++)
		{
			TGComponent tmp=tgc.getInternalTGComponent(j);
			subcompList.add(tmp);

		}
    	return subcompList;
    }
    
    /*
     * returns all ports of this component
     * @param tgc A component
     * @return portsList A LinkedList with ports of the component
     */
//    private List<ProCSDPort> getPorts(TGComponent tgc)
//    {
//    	if (!(tgc.getType()==TGComponentManager.PROCSD_COMPONENT)) return null;
//    	List<TGComponent> subcompList=getSubComponents(tgc);
//    	List<ProCSDPort> portsList=new LinkedList<ProCSDPort>();
//        for (int i=0;i<subcompList.size();i++)
//        {
//        	TGComponent tmp=subcompList.get(i);
//            //Remove option delegate ports, by Solange
//        	if ((tmp.getType()==TGComponentManager.PROCSD_IN_PORT) || (tmp.getType()==TGComponentManager.PROCSD_OUT_PORT))// || ( tmp.getType()==TGComponentManager.PROCSD_DELEGATE_PORT))
//        		portsList.add( (ProCSDPort) tmp);
//        }
//    	return portsList;
//    }
    
    /*
	 * gets the port connected to the port in parameter via a TGConnector ProCSD if there is one, null if not
	 * @param port A port
	 * @return p1 (or p2) The connected port, or null if not connected 
	 */
//    private ProCSDPort getConnectedProCSDPort(ProCSDPort port)
//    {
//         //Remove option delegate ports, by Solange
//    	//if (port.getType()==TGComponentManager.PROCSD_DELEGATE_PORT) return null;
//    	
//    	 //System.out.println("cherche un port pour le port " +port.getValue()); comented by Emil 
//    	
//    		TGConnectorProCSD myConnector=port.getTGConnector();
//    		
//    		if (myConnector==null)
//    		{
//                //Commented because is not always an error to be free, by Solange 
//    			//addCheckingError(CheckingError.STRUCTURE_ERROR,"We didn't find any connector for the port " +port.getValue());
//    			return null;
//    		}
//    		
//   // 		System.out.println("...... (ProCSDPort).. my connector is "+myConnector.toString());
//    	
//    		//ProCSDPort p1=myConnector.getMyPort1(portsList);
//    		ProCSDPort p1=myConnector.getMyPort1();
//            
//   /* 		if (p1!=null) System.out.println(p1.toString());
//    		else 
//    			System.out.println("NULL!!!!!!!!!");
//    */
//    		
//    		//System.out.println("......... my connector's Port1 is "+p1.toString());
//    		
//    				if ((p1!=null) && (!p1.equals(port))) return p1;
//    		 
//    		 ProCSDPort p2=myConnector.getMyPort2();
//    			
//    		 if ((p2!=null) && (!p2.equals(port))) return p2;
//    			
//    		return null;	
//    }
    
    //Added by Solange for the subcomponents
    /*
     * Method to find the port connected to a port when there are subcomponents involved
     * @param port The port to be analyzed
     * @return p1 (or p2) The port connected or null if not connected
     */
    /*
    public ProCSDPort getDelegateConnectorProCSDPort(ProCSDPort port)
    {
    	TGConnectorDelegateProCSD myDelegateConnector=port.getTGConnectorDelegateIn();
		if (myDelegateConnector==null)
			myDelegateConnector=port.getTGConnectorDelegateOut();
		
		if (myDelegateConnector==null)
		{
		//	System.out.println("We didn't find any delegate connector for the port " +port.getValue());
			return null;
		}

		ProCSDPort p1=myDelegateConnector.getMyPort1(portsList);
		 if ((p1!=null) && (!p1.equals(port))) return p1;
		 ProCSDPort p2=myDelegateConnector.getMyPort2(portsList);
		 if ((p2!=null) && (!p2.equals(port))) return p2;
		return null;	
    }
    */
    /*
	 * gets the delegate port connected to the port in parameter via a TGConnectorDelegateProCSD if there is one, null if not
	 * returns null for delegate ports
	 * 
	 */
    
    //Delegate ports removes. Method is no t needed. By Solange
    /*
    private ProCSDPort getConnectedDelegatePort(ProCSDPort port)
    {
    	if (port.getType()==TGComponentManager.PROCSD_DELEGATE_PORT) return null;
    	 //System.out.println("cherche un port pour le port " +port.getValue()); 
    	
    		TGConnectorDelegateProCSD myDelegateConnector=port.getTGConnectorDelegateIn();
    		if (myDelegateConnector==null)
    			myDelegateConnector=port.getTGConnectorDelegateOut();
    		
    		if (myDelegateConnector==null)
    		{
    			 //System.out.println("We didn't find any connector for the port " +port.getValue());
    			return null;
    		}
    		
   // 		System.out.println("...... (ProCSDPort).. my connector is "+myConnector.toString());
    
    		ProCSDPort p1=myDelegateConnector.getMyPort1(portsList);

    		//if (p1!=null) System.out.println(p1.toString());
    		//else 
    		//	System.out.println("NULL!!!!!!!!!");
    
    		
    		//System.out.println("......... my connector's Port1 is "+p1.toString());
    		
    				if ((p1!=null) && (!p1.equals(port))) return p1;
    		 
    		 ProCSDPort p2=myDelegateConnector.getMyPort2(portsList);
    			
    		 if ((p2!=null) && (!p2.equals(port))) return p2;
    			
    		return null;	
    	
    	
    	
    }
    */
    
  /* private ProCSDPort getToOutsideConnectedPort(ProCSDPort dp)
    {
    	TGComponent father=dp.getFather().getFather();
    	if (father==null)
    	{
    		addCheckingError(CheckingError.STRUCTURE_ERROR,"Error: forbiden delegate port at this level "+dp.getValue());
    		return null;
    	}
    	
    	LinkedList fatherPorts=getPorts(father);
    	
    	
    	TGConnectorDelegateProCSD myDelegateConnectorOut=dp.getTGConnectorDelegateOut();
    	if (myDelegateConnectorOut==null) return null;
    	ProCSDPort p2=myDelegateConnectorOut.getMyPort2(fatherPorts);
			
		 if ((p2!=null) && (!p2.equals(dp))) return p2;
    	
    	return null;
    }
    */
    
/*   
    private ProCSDPort getFromOutsideConnectedPort(ProCSDPort dp)
    {
    	TGComponent father=dp.getFather().getFather();
    	if (father==null)
    	{
    		addCheckingError(CheckingError.STRUCTURE_ERROR,"Error: forbiden delegate port at this level "+dp.getValue());
    		return null;
    	}
    
    	LinkedList fatherPorts=getPorts(father);
    	TGConnectorDelegateProCSD myDelegateConnectorIn=dp.getTGConnectorDelegateIn();
    	if (myDelegateConnectorIn==null) return null;
    	ProCSDPort p2=myDelegateConnectorIn.getMyPort1(fatherPorts);
			
		 if ((p2!=null) && (!p2.equals(dp))) return p2;
    	
    	return null;
    }
    
  */  

//    private ProCSDPort getToInsideConnectedPort(ProCSDPort dp)
//    {
//    	//we're looking for a port who's not a father port
//    	TGComponent father=dp.getFather().getFather();
//    	if (father==null)
//    	{
//    		addCheckingError(CheckingError.STRUCTURE_ERROR,"Error: forbiden delegate port at this level "+dp.getValue());
//    		return null;
//    	}
//    	LinkedList fatherPorts=getPorts(father);
//    	
//    	TGConnectorDelegateProCSD myDelegateConnectorOut=dp.getTGConnectorDelegateOut();
//    	if (myDelegateConnectorOut==null) return null;
//    	ProCSDPort p2=myDelegateConnectorOut.getMyPort2(portsList);
//			
//		 if ((p2!=null) && (!p2.equals(dp)) && !fatherPorts.contains(p2)) return p2;
//    	
//    	return null;
//    	
//   	
//    
//    }
    
//    private ProCSDPort getFromInsideConnectedPort(ProCSDPort dp)
//    {
//    	
////    	we're looking for a port who's not a father's port
//    	TGComponent father=dp.getFather().getFather();
//    	if (father==null)
//    	{
//    		addCheckingError(CheckingError.STRUCTURE_ERROR,"Error: forbiden delegate port at this level "+dp.getValue());
//    	
//    		return null;
//    	}
//    	LinkedList fatherPorts=getPorts(father);
//    	
//    	TGConnectorDelegateProCSD myDelegateConnectorIn=dp.getTGConnectorDelegateIn();
//    	if (myDelegateConnectorIn==null) return null;
//    	ProCSDPort p1=myDelegateConnectorIn.getMyPort1(portsList);
//			
//		 if ((p1!=null) && (!p1.equals(dp)) && !fatherPorts.contains(p1)) return p1;
//    	
//    	return null;
//    	
//    }
    
   
   /*
    * we are dealing with a comp specification within a 
    * ProActiveCompSpecificationCSDPanel
    * 
    */
   private boolean parseStructureAndFillUpListsForCompDefinition(TGComponent t)
   {  
   	
   	if (t.getType()==TGComponentManager.PROCSD_INTERFACE) 
   		{
   		  interfacesList.add( (ProCSDInterface) t);
   		}
   
   	if (t.getType()==TGComponentManager.CONNECTOR_PROCSD) 
   	  {
   		connectorsList.add( (TGConnectorProCSD) t);
   	  }
   	
   	if (t.getType()==TGComponentManager.CONNECTOR_PROCSD_PORT_INTERFACE) 
 	  {
 		connectorsPortInterfacesList.add( (TGConnectorPortInterface) t);
 	  }
 	 	
   /*	
   	//Delegate ports removed, by Solange
   	if ( (t.getType()==TGComponentManager.PROCSD_IN_PORT) || (t.getType()==TGComponentManager.PROCSD_OUT_PORT))// || (t.getType()==TGComponentManager.PROCSD_DELEGATE_PORT))
     		 portsList.add(t);      	    	
 
   */
   	
   	if ((t.getType()==TGComponentManager.PROCSD_COMPONENT) )
//   	if (ProCSDComponentsList.contains(t))
//   		return false;
//   		else
   	{
   		proCSDComponentsList.add( (ProCSDComponent) t);
	
	
   		int nb=t.getNbInternalTGComponent();
   	
   		for (int j=0;j<nb;j++)
   		{
   				TGComponent tgc=t.getInternalTGComponent(j);
   				if (!parseStructureAndFillUpListsForCompDefinition(tgc)) return false;  				
   	    }
   	
   	
   		if (((ProCSDComponent)t).getMyDesignPanel()!=null)
		{
			ProActiveCompSpecificationCSDPanel specPanel=((ProCSDComponent)t).getMyDesignPanel();
			
			
		    for (int q=0;q<specPanel.componentList.size();q++)
		    {
		    	TGComponent component= specPanel.componentList.get(q);
		    	if (!parseStructureAndFillUpListsForCompDefinition(component)) return false;
		    }
		    }
	}
   	
   	return true;
   	
   	}
  
   
    
   /*
    * Add a component to the corresponding list according to his type (interface, connector, port, component)
    * @param t The component
    */ 
    private boolean parseStructureAndFillUpLists(TGComponent t)
    {  
    	
    	if (t.getType()==TGComponentManager.PROCSD_INTERFACE) 
    		{
    		  interfacesList.add((ProCSDInterface) t);
    		}
    
    	if (t.getType()==TGComponentManager.CONNECTOR_PROCSD) 
    	  {
    		connectorsList.add( (TGConnectorProCSD) t);
    	  }
    	
    	if (t.getType()==TGComponentManager.CONNECTOR_PROCSD_PORT_INTERFACE) 
  	  {
  		connectorsPortInterfacesList.add( (TGConnectorPortInterface) t );
  	  }
  	 	
    	
    	//Delegate ports removed, by Solange
    	if ( (t.getType()==TGComponentManager.PROCSD_IN_PORT) || (t.getType()==TGComponentManager.PROCSD_OUT_PORT))// || (t.getType()==TGComponentManager.PROCSD_DELEGATE_PORT))
      		 portsList.add( (ProCSDPort) t);      	    	
  
    
    	if ((t.getType()==TGComponentManager.PROCSD_COMPONENT) )
    	{
//    		if (ProCSDComponentsList.contains(t))
//    		{
//    			System.out.println("Cycle found.");
//    			return false;
//    		}
    	
    		proCSDComponentsList.add( (ProCSDComponent) t);
	
	
    		int nb=t.getNbInternalTGComponent();
    	
    		for (int j=0;j<nb;j++)
    		{
    				TGComponent tgc=t.getInternalTGComponent(j);
    				parseStructureAndFillUpLists(tgc);  
    	    }
    		
    		if (((ProCSDComponent)t).getMyDesignPanel()!=null)
    		{
    			ProActiveCompSpecificationCSDPanel specPanel=((ProCSDComponent)t).getMyDesignPanel();
    			
    			
    		    for (int q=0;q<specPanel.componentList.size();q++)
    		    {
    		    	TGComponent component= specPanel.componentList.get(q);
    		    	if (!parseStructureAndFillUpListsForCompDefinition(component))
    		    		return false;
    		    }
    		    }
    	}
    return true;
    }
 /*   
    private void listElement(TGComponent t)
    {
    	System.out.println(t.toString());
    	    	
        	
    	if (t.getType()==TGComponentManager.PROCSD_COMPONENT)
        	{
    		System.out.println("ports : ");
    		LinkedList ports=getPorts(t);
    		for(int k=0;k<ports.size();k++)
    			{ ProCSDPort myPort=(ProCSDPort)ports.get(k);
    			  System.out.print(myPort.toString());
    			  ProCSDPort cp=getConnectedProCSDPort(myPort);
    			  if (cp==null)
    				  System.out.println(" no connected port has been found for the port "+myPort.getValue());
    			  else 
    				  System.out.println(" connected to "+getConnectedProCSDPort(myPort).toString());
    			}
  
    		System.out.println("inner interfaces : ");
    		LinkedList innerInterfaces=getSubComponents(t,TGComponentManager.PROCSD_INTERFACE);
    		for(int k=0;k<innerInterfaces.size();k++)
    			System.out.println(((TGComponent)innerInterfaces.get(k)).toString()+" ");
  
    		
    		System.out.println("< subcomponents of "+t.getValue()+" >");
    		  int nb=t.getNbInternalTGComponent();
        		//LinkedList list1=new LinkedList();
        		for (int j=0;j<nb;j++)
        			{
        				TGComponent tgc=t.getInternalTGComponent(j);
        				listElement(tgc);
        			
        	     				
        	}	
        		System.out.println("<\\subcomponents of "+t.getValue()+">");
        	}
    }
   
    */
    
    /*
    
    private void listPorts()
    {
    	System.out.println("\n\n Ports :");
    	 for (int i=0;i<portsList.size();i++)
    	 {
    	ProCSDPort p=(ProCSDPort)portsList.get(i);
    	     		 
    	 if ((p.getType()==TGComponentManager.PROCSD_IN_PORT)||(p.getType()==TGComponentManager.PROCSD_OUT_PORT))
    	  { System.out.print(p.toString());
    	    ProCSDPort cp=getConnectedProCSDPort(p);
    	    if (cp!=null)      
    		  System.out.println(" connected to "+cp.toString());
    	    
    	    //Delegate ports removed, by Solange
    	    //ProCSDPort dp=getConnectedDelegatePort(p);
    	    //if (dp!=null)      
     		  //System.out.println("    ........ delegates "+dp.toString());
    	  
    	   ProCSDInterface pi=p.getMyInterface(interfacesList);
    	   if (pi!=null)
    		   System.out.println("my interface : "+pi.getValue());
    	  }
    	
    	
    	ProCSDPort toPort=p.getToPort();
	      if (toPort!=null)
	          System.out.println("-----toPort--------> : "+toPort.getValue());
	 
	      ProCSDPort fromPort=p.getFromPort();
	      if (fromPort!=null)
	          System.out.println("<-----fromPort-------- : "+fromPort.getValue());
    	 
    	 }	
    }
    
    */
    
    
    
    /*
     * Prints the information of primitive components
     */
    
    
    /*
     private void listPrimitives()
     {
    	  for (int i=0;i<ProCSDComponentsList.size();i++)
          {
          	ProCSDComponent comp=(ProCSDComponent)ProCSDComponentsList.get(i);
          	
          	  if (isPrimitive(comp))
          	   {   
          		  System.out.println(comp.toString());
          	  LinkedList ports=getPorts(comp);
          	    for (int j=0;j<ports.size();j++)
          	    {
          	    	ProCSDPort p=(ProCSDPort)ports.get(j);
          	        ProCSDPort toP=p.getToPort();
          	        ProCSDPort fromP=p.getFromPort();
          	    
          	       if (toP!=null)
          	       {//this port is an out one
          	    	  System.out.println("Synchronisation with ->  "+toP.getFather().toString());
          	    	  System.out.println("Synchro gates :");
          	    	  ProCSDInterface myInterface=p.getMyInterface(interfacesList);
          	    	  LinkedList gates=myInterface.getMyMessages();
          	    	  for (int k=0;k<gates.size();k++)
          	    	  {
          	    		TAttribute a = (TAttribute)(gates.get(k));
          	    		System.out.println(a.toString());		
          	    	  }
          	    	   
          	       } else if (fromP!=null)
          	     {//this port is an out one
           	    	  System.out.println("Synchronisation with <-  "+fromP.getFather().toString());
           	    	  System.out.println("Synchro gates :");
           	    	  ProCSDInterface myInterface=p.getMyInterface(interfacesList);
           	    	  LinkedList gates=myInterface.getMyMessages();
           	    	  for (int k=0;k<gates.size();k++)
           	    	  {
           	    		TAttribute a = (TAttribute)(gates.get(k));
           	    		System.out.println(a.toString());		
           	    	  }
           	    	   
           	       }   
          	    }
          	   }//if is primitive
          }//for all components
        	
     }
   */  
    /*
     * Fill the primitive LinkedList
     * @return primitives The List of primitive components
     */
//     private List<ProCSDComponent> getPrimitives()
//     {
//       List<ProCSDComponent> primitives=new LinkedList<ProCSDComponent>();	 
//     
//    	 for (int i=0;i< proCSDComponentsList.size();i++)
//         {
//         	ProCSDComponent comp= proCSDComponentsList.get(i);
//        	  if (isPrimitive(comp)) primitives.add(comp);
//         }       
//      return primitives;
//     }
     
     
     /*
      * Method implementing the algorithm used to create TClasses from a CTTool Component Model
      * @param tm TurtleModeling to be updated with TClasses
      * @param the main coponent of the aplication - the container of all components
      */
     private void addTClasses(TURTLEModeling tm, Component appComp)
     {
    	Collection<Component> primitives=appComp.getAllPrimitives();
    	
    	Iterator<Component> primitivesIterator=primitives.iterator();
    	while (primitivesIterator.hasNext())
    	{
    		Component comp=primitivesIterator.next();
    		TClass tclass =new TClass(comp.getPath().replaceAll("[.]","_"),true);
    		 // System.out.println("tClass created: "+comp.getValue());  
    		Collection<Attribute> attribs=comp.getAttributes();
    		
    		Iterator<Attribute> attribsIterator=attribs.iterator();
    		while (attribsIterator.hasNext())
    		{
    			Attribute modelAt=attribsIterator.next();
    			TAttribute a=new TAttribute(modelAt.getAccess(),modelAt.getName(),modelAt.getInitialValue(),modelAt.getType());
    			 //if (a.getType() == TAttribute.NATURAL) 
    			   {
    	                Param p = new Param(a.getId(), Param.NAT, a.getInitialValue());
    	                p.setAccess(a.getAccessString());
    	                tclass.addParameter(p);
    	            }
                
    		}
    		
    		Collection<Port> ports=comp.getPorts();    		
    		Iterator<Port> portsIterator=ports.iterator();
    		
     	    	while (portsIterator.hasNext())
     	             {
     	            	Port p = portsIterator.next();
     	            	Interface myInterface=p.getInterface();
     	            	if (myInterface==null)
     	            	   {
     	            		 addCheckingError(CheckingError.STRUCTURE_ERROR,"No interface found for the port " +p.getName()+" in component "+p.getFather().getPath());
     	            		 return;
     	            	 }


     	            	Collection<Message> messages= myInterface.getMessages();
     	            	//LinkedList gates=myInterface.getMyMessages();
           	    	  
     	            	Iterator<Message> msgsIterator =messages.iterator();
     	            	
           	    	  while (msgsIterator.hasNext())
           	    	  {
           	    		  Message msg=msgsIterator.next();
           	    		   //!!!! to see:
           	    		 // the gate type
           	    		  // internal gates           	    		
           	    		  Gate gt=new Gate(p.getName()+"_"+msg.getName(),Gate.GATE,false);	  
           	    	      tclass.addGate(gt);
           	    	  }           	    	 
     	             }//for ports
    	  tm.addTClass(tclass);
    	  
    	  ProactiveSMDPanel psmdp=(ProactiveSMDPanel)comp.getBehaviour();
    	  buildErrors=false;
    	  buildActivityDiagram(tclass,psmdp,false,comp.getName()+"_SMD");    	  
    	}//for all primitives
     }
     
     
     
     
     
     /*
      * Method implementing the algorithm used to create TClasses from a ProCSDComponent
      * @param tm TurtleModeling to be updated with TClasses
      */
//     private void addTClasses(TURTLEModeling tm)
//     {
//    	List<ProCSDComponent> primitives=getPrimitives();
//    	for (int i=0;i<primitives.size();i++)
//    	{
//    		ProCSDComponent comp= primitives.get(i);
//    		 TClass tclass =new TClass(comp.getValue(),true);
//    		 // System.out.println("tClass created: "+comp.getValue());  
//    		List<TAttribute> attribs=comp.getMyAttributes();
//    		
//    		for (int at=0;at<attribs.size();at++)
//    		{
//    			TAttribute a= attribs.get(at);
//    			 //if (a.getType() == TAttribute.NATURAL) 
//    			   {
//    	                Param p = new Param(a.getId(), Param.NAT, a.getInitialValue());
//    	                p.setAccess(a.getAccessString());
//    	                tclass.addParameter(p);
//    	            }
//                
//    		}
//    		List<ProCSDPort> ports=getPorts(comp);
//     	             for (int j=0;j<ports.size();j++)
//     	             {
//     	            	ProCSDPort p= ports.get(j);
//     	            	 ProCSDInterface myInterface=p.getMyInterface(interfacesList);
//     	            	 if (myInterface==null)
//     	            	 {
//     	            		 addCheckingError(CheckingError.STRUCTURE_ERROR,"No interface found for the port " +p.getValue()+" in component "+p.getFather().getValue());
//     	            		 return;
//     	            		 
//     	            	 }
//           	    	  List<TAttribute> gates=myInterface.getMyMessages();
//           	    	  
//           	    	  for (int g=0;g<gates.size();g++)
//           	    	  {
//           	    		  TAttribute ta= gates.get(g);
//           	    		 //!!!! to see:
//           	    		 // the gate type
//           	    		  // internal gates           	    		
//           	    		  Gate gt=new Gate(p.getValue()+"_"+ta.getId(),Gate.GATE,false);	  
//           	    	      tclass.addGate(gt);
//           	    	  }
//           	    	 
//     	             }//for ports
//    	  tm.addTClass(tclass);
//    	  ProactiveSMDPanel psmdp=pdp.getSMDPanel(tclass.getName());
//    	  buildErrors=false;
//    	  buildActivityDiagram(tclass,psmdp,false,comp.getName()+"_SMD");    	  
//    	}//for all primitives
//     }
    
     
     
     private boolean verifyAllParamsDefined(TClass t,String action, String machineName)
     {
    	
    	 String msgDescription=action;
    	 int iSend=action.indexOf("!");
    	 int iReceived=action.indexOf("?");
    	 int end=action.length();
    	// boolean finished=false;
    	
    	if (iSend==-1) iSend=end;
 		if(iReceived==-1) iReceived=end;
 		int i1=Math.min(iSend,iReceived);
    	 
 		if (iSend==iReceived) return true;
    	 
    	 while (!action.equals(""))
    	 {
    		
    	//	if (current==end) break;
    		//action=action.substring(current+1);
    		 
    		action=action.substring(i1+1);
    		//if (action.equals("")) return true;
    		end=action.length();
    		iSend=action.indexOf("!");
       	    iReceived=action.indexOf("?");
       	    if (iSend==-1) iSend=end;
       	    if(iReceived==-1) iReceived=end;
    		
    		int i2=Math.min(iSend,iReceived);
    		String paramName=action.substring(0,i2);
    	//check if the param is a number. if not, check if it is defined as an attribute
    		try{ Integer.parseInt(paramName);
    			}
    		 catch(NumberFormatException ex)
    		 {
    			 if (t.getParamByName(paramName)==null)
    			 {
    				 this.addCheckingError(new CheckingError(CheckingError.BEHAVIOR_ERROR,"Error in state machine "+machineName+". In message ("+msgDescription+") parameter "+paramName+" not known."));
    				 return false;
    			 }
    		 }
    		 
    		if (i2==end) return true;
    		i1=i2;
    		
    		 
    	 }
    	 
    	 
    	 
    	 return false;
     }
     
     
     /*
      * Big and ugly Method implementing the algorithm used to create Activity Diagram from a State Machine Diagram
      * @param t TClass that owns the Activity Diagram
      * @param psmdp Proactive State Machine Diagram to be converted
      * @param isSubmachine Boolean value to see if it is a submachine
      */
     private void buildActivityDiagram(TClass t, ProactiveSMDPanel psmdp, boolean isSubmachine, String machineCode)
     {  
    	 int subMachineIndex=0;  
    	 
    	 if (!isSubmachine)
    		 //listE=new CorrespondanceTGElement();
    	  corespManager = new CorrespondanceSMDManager();
    		 
    	 if (psmdp==null)
    	 {
    	   
    		 CheckingError ce = new CheckingError(CheckingError.STRUCTURE_ERROR, "No state machine diagram found for primitive " +t.getName());
    	     addCheckingError(ce);
    	     return;
    	 }
    	 
    	 ActivityDiagram ad;
    	// System.out.println("building activity diagram for "+t.getName() + " from panel "+psmdp.getName());
    	 String name=t.getName();
         
         // DB Issue #17 Dead code
//         if (psmdp == null) {
//             return;
//         }
   
         List<TGComponent> list = psmdp.getComponentList();
         Iterator<TGComponent> iterator = list.listIterator();
         TGComponent tgc;
         ProSMDStartState proStart = null;
         int cptStart = 0;
        // System.out.println(t.getName()+" smd elements: ");
         while(iterator.hasNext()) {
             tgc = iterator.next();
             //System.out.println(tgc.getName()+":"+tgc.getValue());
             if (tgc instanceof ProSMDStartState) {
                 proStart = (ProSMDStartState) tgc;
                 cptStart ++;
             }
        
           //generating a unique code for each subMachine:  
           if (tgc instanceof ProSMDSubmachine) {
                 ProSMDSubmachine psm = (ProSMDSubmachine) tgc;
                // psm.setCode(psmdp.getName()+subMachineIndex+psm.getValue());
               psm.setCode(machineCode+subMachineIndex+psm.getValue());
                 subMachineIndex++;
             }
         
         
         }
    	 
         if (proStart == null) {
             UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "No start state in the state machine diagram of " + name);
             ce.setTClass(t);
             ce.setTDiagramPanel(psmdp);
             addCheckingError(ce);
             return;
         }
         
         if (cptStart > 1) {
             UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "More than one start state in the activity diagram of " + name);
             ce.setTClass(t);
             ce.setTDiagramPanel(psmdp);
             addCheckingError(ce);
             return;
         }
         
         //we treat differently the start state if it's a sub machine:
         //we put a junction for this start state and connect the connector to the submachine to this junction
         if (!isSubmachine)
         {
          ADStart ads = new ADStart();
          
          //listE.addCorInPanel(ads, proStart,psmdp.name);
          corespManager.addCorrespondance(ads,proStart,psmdp.getName(),machineCode);
          
          ad = new ActivityDiagram(ads);
          t.setActivityDiagram(ad);
         }

         else
        	 //we treat differently the start state if it's a sub machine:
             //we put a junction for this start state and connect the connector to the submachine to this junction
             
         {
        	 ad=t.getActivityDiagram();
        	 ADJunction adj=new ADJunction();
        	 proStart.setValue(psmdp.getName()+"_start");
        	 ad.addElement(adj);
        	 //listE.addCorInPanel(adj, proStart,psmdp.name);
        	 corespManager.addCorrespondance(adj,proStart,psmdp.getName(),machineCode);
         }
          
         iterator = list.listIterator();
         while(iterator.hasNext()) {
             tgc = iterator.next();
           
             if (tgc instanceof ProSMDGetMsg) {
               ProSMDGetMsg getMsg= (ProSMDGetMsg) tgc;
               String action=getMsg.getAction();
               
               
               
               
               //t.getParamFromActionState("");
               
               String viaPort=getMsg.getViaPort();
               Gate g=t.getGateFromActionState(viaPort+"_"+action);
           
               
               //   System.out.println("looking for gate "+viaPort+"_"+action+" in class" +t.getName());
               if (g==null) 
               {
            	   CheckingError ce=new CheckingError(CheckingError.BEHAVIOR_ERROR,psmdp.getName()+" smd :"+action+" via port "+viaPort+" not found. Verify method name and port.");
              	 //System.out.println("!!!!!!!!!!!!!!!!!1Error! no gate found");
                  addCheckingError(ce); 
            	    buildErrors=true;
                  return;
               }
             
              verifyAllParamsDefined(t,action,psmdp.getName());
               
               //  System.out.println("gate created: "+g.getName());
               ADActionStateWithGate adag = new ADActionStateWithGate(g);
               ad.addElement(adag);
               String params = t.getActionValueFromActionState(action);
               params = TURTLEModeling.manageGateDataStructures(t, params);
               params = TURTLEModeling.addTypeToDataReceiving(t, params);
               
               adag.setActionValue(params);
             
               //listE.addCorInPanel(adag, tgc,psmdp.name);
               corespManager.addCorrespondance(adag, tgc,psmdp.getName(),machineCode);
               
               
             }//if prosmdGetMessage 
             else
            	 if (tgc instanceof ProSMDSendMsg) {
                     ProSMDSendMsg sendMsg= (ProSMDSendMsg) tgc;
                     String action=sendMsg.getAction();
                     String viaPort=sendMsg.getViaPort();
                     Gate g=t.getGateFromActionState(viaPort+"_"+action);
               //     System.out.println("looking for gate "+viaPort+"_"+action+" in class" +t.getName());
                     if (g==null) 
                     {
                  	    CheckingError ce=new CheckingError(CheckingError.BEHAVIOR_ERROR,psmdp.getName()+" smd :"+action+" via port "+viaPort+" not found. Verify method name and port.");
                    	 //System.out.println("!!!!!!!!!!!!!!!!!1Error! no gate found");
                        addCheckingError(ce); 
                  	    buildErrors=true;
                        return;
                     }
              
                     verifyAllParamsDefined(t,action,psmdp.getName());
                     
                     //   System.out.println("gate created: "+g.getName());
                     ADActionStateWithGate adag = new ADActionStateWithGate(g);
                     ad.addElement(adag);
                     String params = t.getActionValueFromActionState(action);
                     params = TURTLEModeling.manageGateDataStructures(t, params);
                     params = TURTLEModeling.addTypeToDataReceiving(t, params);
                     
                     adag.setActionValue(params);
                  //   listE.addCorInPanel(adag, tgc,psmdp.name);
                     corespManager.addCorrespondance(adag, tgc,psmdp.getName(),machineCode);
                   }//if prosmdGetMessage 
                  
            	 else if (tgc instanceof ProSMDAction)
            	 {
            		String s = ((ProSMDAction)tgc).getAction();
            		 s = s.trim();
            		 s = TURTLEModeling.manageDataStructures(t, s);
            		 Param p = t.getParamFromActionState(s);
            		 if (p == null) 
            		  {
            			 CheckingError ce=new CheckingError(CheckingError.BEHAVIOR_ERROR,psmdp.getName()+" smd : Error in action "+tgc.getValue());
                    	 //System.out.println("!!!!!!!!!!!!!!!!!1Error! no gate found");
                        addCheckingError(ce); 
                  	    buildErrors=true;
                        return;
            	     }
            		
            		// System.out.println("Action state with param found " + p.getName() + " value:" + t.getExprValueFromActionState(s));
            		 ADActionStateWithParam adap = new ADActionStateWithParam(p);
            		ad.addElement(adap);
            		adap.setActionValue(TURTLEModeling.manageDataStructures(t, t.getExprValueFromActionState(s)));
            		// System.out.println("action:"+adap.getParam()+"="+adap.getActionValue());
            		//listE.addCorInPanel(adap, tgc,psmdp.name);
            		corespManager.addCorrespondance(adap, tgc,psmdp.getName(),machineCode);
            	 }
             else if (tgc instanceof ProSMDChoice) {
                 ADChoice adch = new ADChoice();
                 ad.addElement(adch);
                 //listE.addCorInPanel(adch, tgc,psmdp.name);
                 corespManager.addCorrespondance(adch, tgc,psmdp.getName(),machineCode);
             } 
             else if (tgc instanceof ProSMDJunction) {
                ADJunction adj = new ADJunction();
                 ad.addElement(adj);
               //  listE.addCorInPanel(adj, tgc,psmdp.name);
                 corespManager.addCorrespondance(adj, tgc,psmdp.getName(),machineCode);
             }
             else if (tgc instanceof ProSMDState) {
              //   System.out.println("state found :" +tgc.getValue());

                // ADComponent adc=listE.getADComponentByName(tgc.getValue(),psmdp.name);
                 ADComponent adc = corespManager.getADComp((ProSMDState)tgc,psmdp.getName(),machineCode);
                 
                 if (adc==null)
                  { ADJunction adj = new ADJunction();
                    ad.addElement(adj);                    
                 
                    //listE.addCorInPanel(adj, tgc,psmdp.name);                 
                    corespManager.addCorrespondance(adj, tgc,psmdp.getName(),machineCode);
                   // System.out.println("first instance of  :" +tgc.getValue());
                  }
                  else
                  {
                	  if (!(adc instanceof ADJunction)) 
                	  {
                		  
                   //   	System.out.println("Error (bug): to the state "+tgc.getValue()+" no coresponding junction founded. Please send your xml file to the producer of this software." );
                        addCheckingError(new CheckingError(CheckingError.BEHAVIOR_ERROR,"This error should never happen. This is a bug. Please send your model to the producer. Thank you"));
                      	buildErrors=true;
                      	return;
                	  }
                        //listE.addCorInPanel((ADJunction)adc,tgc,psmdp.name);
                	   corespManager.addCorrespondance(adc,tgc,psmdp.getName(),machineCode);
                       // System.out.println("other instance of  :" +tgc.getValue());
                  }
             }
            //else if (tgc instanceof ProSMDParallel) 
             else if (tgc.getType()==TGComponentManager.TAD_PARALLEL)
              //we translate a paralel operator as a non deterministic choice: 
            	 
            	 /* {
                System.out.println("!!!!!!!!!!!!!!!!1Parallel found ");
            	 ADParallel adp = new ADParallel();
                 ad.addElement(adp);
                 adp.setValueGate(((TADParallel)tgc).getValueGate());
                 listE.addCorInPanel(adp, tgc,psmdp.name);
             } */
             {
                 ADChoice adch = new ADChoice();
                 ad.addElement(adch);
                 //listE.addCorInPanel(adch, tgc,psmdp.name);
                 corespManager.addCorrespondance(adch, tgc,psmdp.getName(),machineCode);
             } 
             else if (tgc instanceof ProSMDStopState) {
               if(!isSubmachine)
               {
            	 ADStop adst = new ADStop();
                 ad.addElement(adst);
                 //listE.addCorInPanel(adst, tgc,psmdp.name);
                 corespManager.addCorrespondance(adst, tgc,psmdp.getName(),machineCode);
               }
               else
               {
            	   //for a submachine we put a junction for it's stop state
            	   ADJunction adj=new ADJunction();
            	   tgc.setValue(psmdp.getName()+"_stop");
            	   ad.addElement(adj);
            	 //  listE.addCorInPanel(adj,tgc,psmdp.name);
            	   corespManager.addCorrespondance(adj,tgc,psmdp.getName(),machineCode);            	   
               }
              }       
             
             else if (tgc instanceof ProSMDSubmachine) {
                 //System.out.println("Submachine found: " +tgc.getValue());
                 ProactiveSMDPanel subMachinePanel=pdp.getSMDPanel(tgc.getValue());
                 //System.out.println("Panel found: " +subMachinePanel.getName());
                //recursive:
              if (subMachinePanel==null)
              {
        		 CheckingError ce = new CheckingError(CheckingError.STRUCTURE_ERROR, "StateMachine "+t.getName()+": No state machine diagram found for submachine " +tgc.getValue());
        	     addCheckingError(ce);
                 return;
              }
        	     buildActivityDiagram(t,subMachinePanel,true,((ProSMDSubmachine)tgc).getCode());
        	     if (buildErrors) return;
             }       
             
         }//while hasnext - creating elements
         
         // Connecting elements
         iterator = list.listIterator();
         while(iterator.hasNext()) {
             tgc = iterator.next();
             if (tgc instanceof TGConnectorProSMD) {
                 TGConnectorProSMD con=(TGConnectorProSMD) tgc;
                 TGConnectingPoint p1 = con.getTGConnectingPointP1();
                 TGConnectingPoint p2 = con.getTGConnectingPointP2();
                 
                 // identification of connected components
                 TGComponent tgc1 = null; 
                 TGComponent tgc2 = null;
                 
                 for(int j=0; j<list.size(); j++) {
                     TGComponent tmp = list.get(j);
                     if (tmp.belongsToMe(p1)) {
                         tgc1 = tmp;
                     }
                     if (tmp.belongsToMe(p2)) {
                         tgc2 = tmp;
                     }
                 }//for
                 
                 // connecting turtle modeling components
                 if ((tgc1 != null) && (tgc2 != null)) {
                     //ADComponent ad1, ad2;
                    
                	// System.out.println("tgc1: "+tgc1.toString()+"-----tgc2: "+tgc2.toString());
                	 //ADComponent ad1 = listE.getADComponentInPanel(tgc1, psmdp.name);
                    // ADComponent ad2 = listE.getADComponentInPanel(tgc2, psmdp.name);
                     
                	 ADComponent ad1 = corespManager.getADComp(tgc1, psmdp.getName(),machineCode);
                	 ADComponent ad2 = corespManager.getADComp(tgc2, psmdp.getName(),machineCode);
                     
                     if (tgc2 instanceof ProSMDSubmachine)
                     {
                   	//   System.out.println("connetor to a submachine. Looking for "+ tgc2.getValue()+"_start");
                    	 //ad2=listE.getADComponentByName(tgc2.getValue()+"_start",tgc2.getValue()); 
                    	//should look for the start of the subMachine
                    	 TGComponent startTGComp=getStartComp((ProSMDSubmachine) tgc2);
                    	 if (startTGComp==null)
                    	 { addCheckingError(CheckingError.BEHAVIOR_ERROR,"No start state found in state machine "+tgc2.getValue());
                    	  return;
                    	 }
                    	 ad2=corespManager.getADComp(startTGComp,tgc2.getValue(),((ProSMDSubmachine)tgc2).getCode());
                     }                     
                     
                     if (tgc1 instanceof ProSMDSubmachine)
                     {  //System.out.println("connetor from a submachine. Looking for "+ tgc2.getValue()+"_stop");
                   	   //ad1=listE.getADComponentByName(tgc1.getValue()+"_stop",tgc1.getValue()); 
                         TGComponent stopTGComp=getStopComp((ProSMDSubmachine)tgc1); 
                    	 
                         if (stopTGComp==null)
                    	 { addCheckingError(CheckingError.BEHAVIOR_ERROR,"No stop state found in state machine "+tgc1.getValue()+". "+tgc2.toString()+" in panel "+psmdp.getName()+" is not reachable.");
                    	  return;
                    	 }
                         
                         ad1=corespManager.getADComp(stopTGComp,tgc1.getValue(),((ProSMDSubmachine)tgc1).getCode());
                     }                     
                     
                     if ((ad1 == null) || (ad2 == null)) {
                         System.out.println("Correspondance issue");
                     }
                     
                     int index = 0; 
                      if (tgc1 instanceof ProSMDChoice) {
                         ProSMDChoice tadch = (ProSMDChoice)tgc1;
                         index = tgc1.indexOf(p1) - 1;
                         ((ADChoice)ad1).addGuard(TURTLEModeling.manageGateDataStructures(t, tadch.getGuard(index)));
                         ad1.addNext(ad2);
                      }
                      
                        else 
                             ad1.addNextAtIndex(ad2, index);
                  }//if ((tgc1 != null) && (tgc2 != null)) 
             }//if TGConnector
         }//while - connecting elements
         
     psmdp.count++;
     }
     
     
     private TGComponent getStartComp(ProSMDSubmachine subMachine)
     {
    	   ProactiveSMDPanel subMachinePanel=pdp.getSMDPanel(subMachine.getValue());
    	   List<TGComponent> list = subMachinePanel.getComponentList();
           Iterator<TGComponent> iterator = list.listIterator();
           TGComponent tgc;
           ProSMDStartState proStart = null;
            while(iterator.hasNext()) {
               tgc = iterator.next();
                 if (tgc instanceof ProSMDStartState) {
                   proStart = (ProSMDStartState) tgc;
                  return proStart;  
                 }//if
            }//while
            	
         return null; 
    	   
    	   
     }
     
    
     

     private TGComponent getStopComp(ProSMDSubmachine subMachine) {
    	 ProactiveSMDPanel subMachinePanel=pdp.getSMDPanel(subMachine.getValue());
    	 List<TGComponent> list = subMachinePanel.getComponentList();
    	 Iterator<TGComponent> iterator = list.listIterator();
    	 TGComponent tgc;
    	 ProSMDStopState proStop = null;
    	 while(iterator.hasNext()) {
    		 tgc = iterator.next();
    		 if (tgc instanceof ProSMDStopState) {
    			 proStop = (ProSMDStopState) tgc;
    			 return proStop;  
    		 }//if
    	 }//while

    	 return null; 
     }
     
     /*
      * Method used when converting from ProactiveDesign to TurtleModeling
      * that implements the algorithm to see if creates a Synchronisation between
      * Tclasses.
      * @param tm TurtleModeling to be updated
      */
 
    /*
	private void addSynchronisationsOld(TURTLEModeling tm)
     {
    	 String gname1="", gname2="";
    	 LinkedList primitives=getPrimitives();
     	for (int i=0;i<primitives.size();i++)
     	{
     		ProCSDComponent comp=(ProCSDComponent)primitives.get(i);
         	      LinkedList ports=getPorts(comp);
         	      
         	       for (int j=0;j<ports.size();j++)
         	    {
         	    	ProCSDPort p=(ProCSDPort)ports.get(j);
         	        ProCSDPort toP=p.getToPort();
         	        ProCSDPort fromP=p.getFromPort();
         	        //Added by Solange
         	        TClass t1=tm.getTClassWithName(p.getFather().getValue());
         	        //Added by Solange
         	        puerto=p;
         	        //Added by Solange
         	        if (t1==null)
      	    	    {
         	        t1=searchInport(fromP);
             	    //flag=1;
      	    	    }
         	        
         	       if (t1==null)
     	    	    {
        	        t1=searchOutport(toP);
            	    //flag=2;
     	    	    }
         	       puerto2=puerto; //Added by Solange to save this value    	    
      	    	   // until here
         	       ProCSDPort tmpP; 
         	        if (toP!=null) tmpP=toP;
         	        else{
         	        	if(fromP!=null)
         	        	 tmpP=fromP;
         	        	else
         	        	{
         	        	 System.out.println("Port " + p.toString() + " is not connected");
         	        	 break;
         	        	}
         	        }
         	        
         	        {//this port is an out one
         	    	  //System.out.println("Synchronisation with ->  "+toP.getFather().toString());
         	    	  //System.out.println("Synchro gates :");
         	          puerto=tmpP; //Added by Solange
         	          TClass t2=tm.getTClassWithName(tmpP.getFather().getValue());
         	    	 //Added by Solange this two if 
         	    	 if (t2==null)
      	    	     {
         	          t2=searchOutport(puerto.getToPort());
      	    	     }
         	    	 if (t2==null)
       	    	     {
          	          t2=searchInport(puerto.getFromPort());
       	    	     }
          	           	   //
         	          ProCSDInterface myInterface=p.getMyInterface(interfacesList);
         	    	  LinkedList gates=myInterface.getMyMessages();
         	    	  for (int k=0;k<gates.size();k++)
         	    	  {
         	    		TAttribute a = (TAttribute)(gates.get(k));
         	    		gname1=puerto2.getValue()+"_"+a.getId();
         	    		gname2=puerto.getValue()+"_"+a.getId();
         	    		//i want to see the value, by Solange
                        // Added by Solange to handle messages not received
         	    		if((t1!=null)&&(t2!=null))
         	    		{
         	    		Gate h=t1.getGateByName(gname1);
         	    		Gate y=t2.getGateByName(gname2);
         	    		tm.addSynchroRelation(t1,h,t2,y);
         	    		}
         	    	  }
          	       }
         	    }
         }//for all components
     }
    
	*/
	
     
     
     /*
      * Method used when converting from ProactiveDesign to TurtleModeling
      * that implements the algorithm to see if creates a Synchronisation between
      * Tclasses.
      * @param tm TurtleModeling to be updated
      */
     private void addSynchronisations(TURTLEModeling tm, Component appComp)
     {
    	 String gname1="", gname2="";
    
    	 Collection<Component> primitives=appComp.getAllPrimitives();
     	
     	Iterator<Component> primitivesIterator=primitives.iterator();
     	while (primitivesIterator.hasNext())
     	{
     		Component comp=primitivesIterator.next();
     	    
     		Collection<Port> ports=comp.getPorts();    		
    		Iterator<Port> portsIterator=ports.iterator();
    		
     	    	while (portsIterator.hasNext())
     	             {
     	            	Port p = portsIterator.next();
     	                Port toP=p.getLastToPort();
         	            Port fromP=p.getLastFromPort();
         	            TClass t1=tm.getTClassWithName(p.getFather().getPath().replaceAll("[.]","_"));
         	        
         	            TClass t2=null;
         	            Port connectedPort=null; 
         	       
         	            if (toP!=null)
         	                	connectedPort=toP;
         	    	       else if (fromP!=null)
         	       	        	connectedPort=fromP;
         	           if (connectedPort==null)
         	        {
         	        	
         	           System.out.println("Problem in finding conection for "+p.toString());
         	           //TODO add an error here
         	          Interface myInterface=p.getInterface();
         	          
         	          if ( (myInterface!=null) && (myInterface.isMandatory())) 
         	           {this.addCheckingError(CheckingError.STRUCTURE_ERROR,"No connection found for mandatory port "+p.getFather().getPath()+"->"+p.getName());
         	            return;		   
         	           }//if is mandatory
         	          }//if connectedPort!=null
         	           else
         	           {
         	         
         	          
         	        	   
         	          t2=tm.getTClassWithName(connectedPort.getFather().getPath().replaceAll("[.]","_"));     	        
         	    	  Interface myInterface=p.getInterface();
         	    	  Interface theOtherInterface=connectedPort.getInterface();
         	    	  
         	    	  Iterator<Message> msgIt = myInterface.getMessages().iterator();
         	    	 while (msgIt.hasNext())
         	    	  {
         	    		Message m=msgIt.next();
         	    		if (theOtherInterface.getMessageByName(m.getName())==null)
         	    		{
         	    			addCheckingError(new CheckingError(CheckingError.STRUCTURE_ERROR,"Interfaces incompatible. Interface1:"+p.getFather().getPath()+"_"+p.getName()+"->"+myInterface.getName()+". Interface2: "+connectedPort.getFather().getPath()+"_"+connectedPort.getName()+"->"+theOtherInterface.getName()));
         	    		}
         	    		gname1=p.getName()+"_"+m.getName();
         	    		gname2=connectedPort.getName()+"_"+m.getName();
         	    		//i want to see the value, by Solange
                        // Added by Solange to handle messages not received
         	    		if((t1!=null)&&(t2!=null))
         	    		{
         	    		Gate h=t1.getGateByName(gname1);
         	    		Gate y=t2.getGateByName(gname2);
         	    		tm.addSynchroRelation(t1,h,t2,y);
         	    		}
         	    	  }
         	         }//connectedPort!=null
         	        }

         }//for all components
     }
     
     
     
     
     /*
      * Method used when converting from ProactiveDesign to TurtleModeling
      * that implements the algorithm to see if creates a Synchronisation between
      * Tclasses.
      * @param tm TurtleModeling to be updated
      */
//     private void addSynchronisations(TURTLEModeling tm)    {
//    	 String gname1="", gname2="";
//    	 List<ProCSDComponent> primitives=getPrimitives();
//     	for (int i=0;i<primitives.size();i++)
//     	{
//     		ProCSDComponent comp= primitives.get(i);
//         	      List<ProCSDPort> ports=getPorts(comp);
//         	      
//         	       for (int j=0;j<ports.size();j++)
//         	    {
//         	    	ProCSDPort p=ports.get(j);
//         	        ProCSDPort toP=p.getToFinalPort();
//         	        ProCSDPort fromP=p.getFromFinalPort();
//         	        
//         	        //Added by Solange
//         	        TClass t1=tm.getTClassWithName(p.getFather().getValue());
//         	        //Added by Solange
//         	       TClass t2=null;
//         	       ProCSDPort connectedPort=null; 
//         	       
//         	       if (toP!=null)
//         	        {
//         	        	connectedPort=toP;
//         	    	    }
//         	        else if (fromP!=null)
//         	       {
//         	        	connectedPort=fromP;
//         	        	         	        }	
//         	        else
//         	        {
//         	      //  	System.out.println("Problem in finding conection for "+p.toString());
//         	      addCheckingError(CheckingError.STRUCTURE_ERROR,"Problem in finding conection for "+p.toString()+" in component "+p.getFather().toString());
//         	        	//TODO add an error here
//         	        }
//         	         t2=tm.getTClassWithName(connectedPort.getFather().getValue());     	        
//         	    	 ProCSDInterface myInterface=p.getMyInterface();
//         	    	  LinkedList gates=myInterface.getMyMessages();
//         	    	  for (int k=0;k<gates.size();k++)
//         	    	  {
//         	    		TAttribute a = (TAttribute)(gates.get(k));
//         	    		gname1=p.getValue()+"_"+a.getId();
//         	    		gname2=connectedPort.getValue()+"_"+a.getId();
//         	    		//i want to see the value, by Solange
//                        // Added by Solange to handle messages not received
//         	    		if((t1!=null)&&(t2!=null))
//         	    		{
//         	    		Gate h=t1.getGateByName(gname1);
//         	    		Gate y=t2.getGateByName(gname2);
//         	    		tm.addSynchroRelation(t1,h,t2,y);
//         	    		}
//         	    	  }
//          	       }
//
//         }//for all components
//     }
   
  //Method created by Solange
//   and removed by emil 
       /*
  public TClass searchOutport(ProCSDPort p)
  {
	  puerto=p; //Added by Solange
	  TClass t1=tm.getTClassWithName(p.getFather().getValue());
	  if(t1==null)
	  {
		puerto=p.getToPort();  
	    t1=searchOutport(puerto);
	  }
	  return(t1);
  }
 */
  
  //Method created by Solange
  //and removed by emil 
  
  /*
  public TClass searchInport(ProCSDPort p)
  {
	  puerto=p;
	  TClass t1=tm.getTClassWithName(p.getFather().getValue());
	  if(t1==null)
	  {
		puerto=p.getFromPort();
	    t1=searchInport(puerto);
	  }
	  return(t1);
  }
 */
  
  // 
     /*
     private void listClasses(TURTLEModeling tm )     
     {
    	 int nb=tm.classNb();
    	 for (int i=0;i<nb;i++)
    	 {
    		 TClass t=tm.getTClassAtIndex(i);
    		 System.out.println("TClass:"+ t.getName());
    		 System.out.println("gates: ");
    		 Vector gates=t.getGateList(); 
    		 for (int j=0;j<gates.size();j++)
    		 {
    			 Gate g=(Gate)gates.elementAt(j);
    		     System.out.println(g.toString());
    		 }
    	      
    	 }
    	 System.out.println("--------Relations : ---------");
    	for (int r=0;r<tm.relationNb();r++)
    	{
    		Relation rel=tm.getRelationAtIndex(r);
    		rel.print();
    		
    	}
    	
     }
    */ 
   
    
    public List<CheckingError> getCheckingWarnings() {
        return null;
    }
    
    public List<CheckingError> getCheckingErrors() {
    	return checkingErrors;
    }
    
    private void addCheckingError(CheckingError ce) {
       checkingErrors.add(ce);
    }
    private void addCheckingError(int t,String s)
    {
    	checkingErrors.add(new CheckingError(t,s));
    }
}