Skip to content
Snippets Groups Projects
CorrespondanceTGElement.java 15.8 KiB
Newer Older
/* 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.
 */


import avatartranslator.AvatarAMSInterface;
import avatartranslator.AvatarLibraryFunction;
import req.ebrdd.EBRDDComponent;
import req.ebrdd.EBRDDGeneralComponent;
import sddescription.Evt;
import sddescription.HMSCElement;
import sddescription.HMSCNode;
import sddescription.MSC;
import tepe.TEPEComponent;
import tmltranslator.DIPLOElement;
import tmltranslator.HwNode;
import tmltranslator.TMLActivityElement;
import translator.ADComponent;
import translator.TClass;
import ui.cd.TCDTClass;
import ui.util.CorrespondanceElement;

import java.awt.*;
import java.util.ArrayList;
import java.util.Vector;

 * Class CorrespondanceTGElement
 * Correspondance between data of a Turtle modeling and graphical elements
 * Creation: 11/12/2003
 * @version 1.0 11/12/2003
 * @author Ludovic APVRILLE
public class CorrespondanceTGElement implements CorrespondanceElement<TGComponent> {
    private Vector<TGComponent> tg; //tgelement
    private Vector<String> names; //prename
    private Vector<Object> data; // turtle modeling elements
    private Vector<String> panelNames; //to look for an element only in it's panel
                               //It is more natural than using indexes and easyer to use in a recursive context  
    
    public CorrespondanceTGElement() {
        tg = new Vector<>();
        data = new Vector<Object>();
        names = new Vector<String>();
        panelNames=new Vector<String>();
    }
    
    public Vector<TGComponent> getTG() { return tg;}
    public Vector<String> getNames() { return names;}
    public Vector<Object> getData() { return data;}
    public Vector<String> getPanelNames() { return panelNames;}
    
    public void merge(CorrespondanceTGElement ce) {
           tg.addAll(ce.getTG());
           names.addAll(ce.getNames());
           data.addAll(ce.getData());
           panelNames.addAll(ce.getPanelNames());
    }

    @Override
    public void addCor(Object o, TGComponent tgc) {
        addCor(o, tgc, "");
        }
    
    public void addCor(Object o, TGComponent tgc, String preName) {
        data.addElement(o);
        tg.addElement(tgc);
        names.add(preName);
    }
    
    
    
    public TGComponent getTG(Object o) {
        int index = data.indexOf(o);
        if ((index != -1) && (tg.size() > index)) {
            return	tg.elementAt(index);
        }
        return null;
    }
	
	public Object getObject(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (tg.size() > index)) {
            return	data.elementAt(index);
        }
        return null;
    }
    
    
    public void addCorInPanel(Object o, TGComponent tgc, String panelName)
    {
    	data.addElement(o);
        tg.addElement(tgc);
        panelNames.addElement(panelName);    	
    }
    
    
    /*
     * Returns the ADComponent coresponding to the first TGComponent founded named "name"
     *  @author Emil Salageanu
     */
    public ADComponent getADComponentByName(String name, String panelName)
    {
    	for (int i=0;i<tg.size();i++)
    	{
    		
    		TGComponent tgc = tg.get(i);
    		String tgcPanelName = panelNames.get(i);
           
    		if (tgc.getValue()!=null)
    		if (tgc.getValue().equals(name)&& tgcPanelName.equals(panelName)) 
    			{ Object o =data.elementAt(i);
    			  if (o instanceof ADComponent) return (ADComponent)o;
    			}
    	}
     return null;
    }
    
    public ADComponent getADComponentInPanel(TGComponent t, String panelName)
    {
    	for (int i=0;i<tg.size();i++)
    	{
    		TGComponent tgc = tg.get(i);
    		String tgcPanelName = panelNames.get(i);
    		if (tgc.equals(t)&& tgcPanelName.equals(panelName)) 
    			{ Object o =data.elementAt(i);
    			  if (o instanceof ADComponent) return (ADComponent)o;
    			}
    	}
     return null;
    }
    
    public TClass getTClass(Object o) {
        int index = tg.indexOf(o);
        if ((index != -1) && (data.size() > index)) {
            return	(TClass)(data.elementAt(index));
        }
        return null;
    }
	
	 public TGComponent getTGFromObject(Object o) {
        int index = tg.indexOf(o);
        if ((index != -1) && (data.size() > index)) {
            return	(TGComponent)(data.elementAt(index));
        }
        return null;
    }
    
     public TGComponent getTGAt(int index) {
        if ((index != -1) && (tg.size() > index)) {
            return tg.elementAt(index);
        }
        return null;
    }
    
    public TClass getTClass(TCDTClass t) {
        int index = tg.indexOf(t);
         if ((index != -1) && (tg.size() > index)) {
             Object o = data.elementAt(index);
             if (o instanceof TClass) {
                return (TClass)o;
             }
            return null;
        }
        return null;
    }
	
	public AvatarBlock getAvatarBlock(TGComponent _tgc) {
        int index = tg.indexOf(_tgc);
         if ((index != -1) && (tg.size() > index)) {
             Object o = data.elementAt(index);
             if (o instanceof AvatarBlock) {
                return (AvatarBlock)o;
             }
            return null;
        }
        return null;
    }

    	public AvatarAMSInterface getAvatarAMSInterface(TGComponent _tgc) {
        int index = tg.indexOf(_tgc);
         if ((index != -1) && (tg.size() > index)) {
             Object o = data.elementAt(index);
             if (o instanceof AvatarAMSInterface) {
                return (AvatarAMSInterface)o;
             }
            return null;
        }
        return null;
    }

    public AvatarLibraryFunction getAvatarLibraryFunction (TGComponent _tgc) {
        int index = tg.indexOf (_tgc);
        if (index == -1)
            return null;

        Object o = data.elementAt (index);
        if (o instanceof AvatarLibraryFunction)
            return (AvatarLibraryFunction) o;

        return null;
    }
    
    public HMSCNode getNodeAt(int index) {
        if ((index != -1) && (data.size() > index)) {
            return	(HMSCNode)(data.elementAt(index));
        }
        return null;
    }
    
    public int getSize() {
        return tg.size();
    }
    
	public ArrayList<ADComponent> getADComponentCorrespondance(ArrayList<TGComponent> _list) {
		if (_list == null) {
			return null;
		}
		
		ArrayList<ADComponent> listAD = new ArrayList<ADComponent>();
		ArrayList<ADComponent> listADs;
		
		for(TGComponent tgc:_list) {
			listADs = getADComponents(tgc);
			if (listADs.size() > 0) {
				listAD.addAll(listADs);
			}
		}
		
		return listAD;
	}
	
	public ArrayList<TMLActivityElement> getTMLActivityElementCorrespondance(ArrayList<TGComponent> _list) {
		if (_list == null) {
			return null;
		}
		
		ArrayList<TMLActivityElement> listED = new ArrayList<TMLActivityElement>();
		TMLActivityElement elt;
		for(TGComponent tgc:_list) {
			elt = getTMLActivityElement(tgc);
			if (elt != null) {
				listED.add(elt);
			}
		}
		
		return listED;
	}
	
	
    public ADComponent getADComponent(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof ADComponent) {
                return (ADComponent)o;
            }
        }
        return null;
    }
	
	public EBRDDGeneralComponent getEBRDDGeneralComponent(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof EBRDDGeneralComponent) {
                return (EBRDDGeneralComponent)o;
            }
        }
        return null;
    }
	
	public EBRDDComponent getEBRDDComponent(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof EBRDDComponent) {
                return (EBRDDComponent)o;
            }
        }
        return null;
    }
	
	public ArrayList<ADComponent> getADComponents(TGComponent tgc) {
		ArrayList<ADComponent>  list = new ArrayList<ADComponent>();
		TGComponent tmptgc;
		Object o;
		
        int index = tg.indexOf(tgc);
		if (index == -1) {
			return list;
		}
		
		for(int i=0; i<tg.size(); i++) {
			tmptgc = tg.elementAt(i);
			if (tmptgc == tgc) {
				o = data.elementAt(i);
				list.add((ADComponent)o);
			}
		}
       
        return list;
    }
	
	public HwNode getHwNode(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof HwNode) {
                return (HwNode)o;
            }
        }
        return null;
    }
	
	public TMLActivityElement getTMLActivityElement(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof TMLActivityElement) {
                return (TMLActivityElement)o;
            }
        }
        return null;
    }
    
    public Evt getEvt(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof Evt) {
                return (Evt)o;
            }
        }
        return null;
    }
    
    public Evt getSendingMsgEvt(TGComponent tgc) {
        int index = 0;
        Evt evt;
        Object o;
        
        while((index = tg.indexOf(tgc, index)) > -1) {
            o = data.elementAt(index);
            if (o instanceof Evt) {
                evt = (Evt)o;
                if (evt.isSendingEvt()) {
                    return evt;
                } else {
                    index ++;
                }
            }
        }
        
        return null;
    }
    
     public Evt getReceivingMsgEvt(TGComponent tgc) {
        int index = 0;
        Evt evt;
        Object o;
        
        while((index = tg.indexOf(tgc, index)) > -1) {
            o = data.elementAt(index);
            if (o instanceof Evt) {
                evt = (Evt)o;
                if (evt.isReceivingEvt()) {
                    return evt;
                } else {
                    index++;
                }
            }
        }
        
        return null;
    }
    
    public HMSCNode getHMSCNode(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof HMSCNode) {
                return (HMSCNode)o;
            }
        }
        return null;
    }
    
    public MSC getMSCNode(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof MSC) {
                return (MSC)o;
            }
        }
        return null;
    }
    
    public HMSCElement getHMSCElement(TGComponent tgc) {
        int index = tg.indexOf(tgc);
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof HMSCElement) {
                return (HMSCElement)o;
            }
        }
        return null;
    }
	
    
    
    public ADComponent getADComponentByIndex(TGComponent tgc, int indexFound) {
        int index = tg.indexOf(tgc);
        while(indexFound > 0) {
            index = tg.indexOf(tgc, index + 1);
            if (index == -1) {
                return null;
            }
            indexFound --;
        }
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof ADComponent) {
                return (ADComponent)o;
            }
        }
        return null;
    }
    
    
     public HMSCElement getHMSCElementByIndex(TGComponent tgc, int indexFound) {
        int index = tg.indexOf(tgc);
        while(indexFound > 0) {
            index = tg.indexOf(tgc, index + 1);
            if (index == -1) {
                return null;
            }
            indexFound --;
        }
        if ((index != -1) && (data.size() > index)) {
            Object o = data.elementAt(index);
            if (o instanceof HMSCElement) {
                return (HMSCElement)o;
            }
        }
        return null;
    }
	
	@Override
    public void useDIPLOIDs() {
		ArrayList<TGComponent> list = new ArrayList<TGComponent>();
		Object o0, o1;
		DIPLOElement de;
		TGComponent tgc;
		for (int i=0; i<data.size(); i++) {
			o0 = data.get(i);
			if (o0 instanceof DIPLOElement) {
				o1 = tg.get(i);
				if ((o1 != null) && !(list.contains(o1))){
					de = (DIPLOElement)(o0);
					tgc = (TGComponent)(o1);
					tgc.setDIPLOID(de.getID());
					list.add(tgc);
				}
			}
		}
	}
	
	public void makeTEPEIDs() {
		ArrayList<TGComponent> list = new ArrayList<TGComponent>();
		Object o0, o1;
		TEPEComponent te;
		TGComponent tgc;
		for (int i=0; i<data.size(); i++) {
			o0 = data.get(i);
			if (o0 instanceof TEPEComponent) {
				o1 = tg.get(i);
				if ((o1 != null) && !(list.contains(o1))){
					te = (TEPEComponent)(o0);
					tgc = (TGComponent)(o1);
					tgc.setTEPEID(te.getID());
					list.add(tgc);
				}
			}
		}
	}
	
	public void removeBreakpoint(Point p) {
		Object o0, o1;
		TGComponent tgc;
		DIPLOElement de;
		
		for (int i=0; i<data.size(); i++) {
			o0 = data.get(i);
			if (o0 instanceof DIPLOElement) {
				de = (DIPLOElement)o0;
				if (de.getID() == p.y) {
					o1 = tg.get(i);
					if (o1 != null) {
						tgc = (TGComponent)(o1);
						tgc.setBreakpoint(false);
						return;
					}
				}
			}
		}
	}
	
	public void addBreakpoint(Point p) {
		Object o0, o1;
		TGComponent tgc;
		DIPLOElement de;
		
		for (int i=0; i<data.size(); i++) {
			o0 = data.get(i);
			if (o0 instanceof DIPLOElement) {
				de = (DIPLOElement)o0;
				if (de.getID() == p.y) {
					o1 = tg.get(i);
					if (o1 != null) {
						tgc = (TGComponent)(o1);
						tgc.setBreakpoint(true);
						return;
					}
				}
			}
		}
	}
    
}