Skip to content
Snippets Groups Projects
MainGUI.java 307.02 KiB
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea Enrici
 * 
 * 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 avatartranslator.AvatarSpecification;
import common.ConfigurationTTool;
import common.SpecConfigTTool;
import ddtranslatorSoclib.AvatarddSpecification;
import ddtranslatorSoclib.toSoclib.TasksAndMainGenerator;
import launcher.RemoteExecutionThread;
import launcher.RshClient;
import myutil.*;
import proverifspec.ProVerifOutputAnalyzer;
import translator.CheckingError;
import translator.MasterGateManager;
import ui.ad.TActivityDiagramPanel;
import ui.atd.AttackTreeDiagramPanel;
import ui.avatarad.AvatarADPanel;
import ui.avatarbd.AvatarBDLibraryFunction;
import ui.avatarbd.AvatarBDPortConnector;
import ui.avatarbd.AvatarBDStateMachineOwner;
import ui.avatarcd.AvatarCDPanel;
import ui.avatardd.ADDDiagramPanel;
import ui.avatarinteractivesimulation.JFrameAvatarInteractiveSimulation;
import ui.avatarmad.AvatarMADPanel;
import ui.avatarpd.AvatarPDPanel;
import ui.avatarrd.AvatarRDPanel;
import ui.avatarsmd.AvatarSMDPanel;
import ui.cd.TClassDiagramPanel;
import ui.diplodocusmethodology.DiplodocusMethodologyDiagramPanel;
import ui.ebrdd.EBRDDPanel;
import ui.file.*;
import ui.graph.AUTGraph;
import ui.graph.RG;
import ui.interactivesimulation.JFrameInteractiveSimulation;
import ui.interactivesimulation.SimulationTransaction;
import ui.iod.InteractionOverviewDiagramPanel;
import ui.networkmodelloader.JDialogLoadingNetworkModel;
import ui.osad.TURTLEOSActivityDiagramPanel;
import ui.prosmd.ProactiveSMDPanel;
import ui.req.Requirement;
import ui.req.RequirementDiagramPanel;
import ui.tmlad.TMLActivityDiagramPanel;
import ui.tmlcd.TMLTaskDiagramPanel;
import ui.tmlcompd.TMLCCompositeComponent;
import ui.tmlcompd.TMLComponentTaskDiagramPanel;
import ui.tmlcp.TMLCPPanel;
import ui.tmldd.TMLArchiDiagramPanel;
import ui.tmldd.TMLArchiCAMSNode;
import ui.tmlsd.TMLSDPanel;
import ui.het.*;
import ui.tree.DiagramTreeModel;
import ui.tree.DiagramTreeRenderer;
import ui.tree.JDiagramTree;
import ui.ucd.UseCaseDiagramPanel;
import ui.util.DefaultText;
import ui.util.IconManager;
import ui.window.*;

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.*;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

// AVATAR

/**
 * Class MainGUI
 * Main window / Actions management / Mode management
 * Creation: 15/12/2003
 * Version: 1.1 21/12/2003
 * Version: 1.2 29/09/2004
 * 26/11/2015 D. Genius added DDD
 * @author Ludovic APVRILLE
 */
public  class MainGUI implements ActionListener, WindowListener, KeyListener, PeriodicBehavior {

    public static boolean systemcOn;
    public static boolean lotosOn;
    public static boolean proactiveOn;
    public static boolean tpnOn;
    public static boolean osOn;
    public static boolean uppaalOn;
    public static boolean ncOn;
    public static boolean avatarOn;
    public static boolean proverifOn;
    public static boolean experimentalOn;
    public static boolean avatarOnly;
    public static boolean turtleOn;
    
    public boolean isxml = false;
    public final static int LOTOS = 0;
    public final static int RT_LOTOS = 1;
    public final static int UPPAAL = 2;
    public final static int JAVA = 3;
    public final static int DESIGN = 4;

    public JFrame frame; //Main Frame
    public Container framePanel; //Main pane
    public Container panelForTab, panelForTree; //panelForAnalysisTab; //panelForDesignTab;
    public JSplitPane split;

    // Multi analysis / design / deployment
    public Vector<TURTLEPanel> tabs;
    /* This dummySelectedTab is used when loading a model from XML.
     * It enables to use standard getCurrentTURTLEPanel even though
     * the mainTabbedPane has not yet been created.
     */
    private TURTLEPanel dummySelectedTab;

    // JTree
    public JDiagramTree dtree;
    public DiagramTreeModel dtm;

    // Actions
    public      TGUIAction [] actions;
    public      MouseHandler mouseHandler;
    public  KeyListener keyHandler;

    // Validation
    public LinkedList<TClassInterface> tclassesToValidate = new LinkedList<TClassInterface> ();

    // Status bar
    private     JLabel status;

    //Menubar
    private JMenuBarTurtle jmenubarturtle;

    // Communication key
    private String sk;


    // Annex windows
    JFrameCode javaframe;
    JFrameBird birdframe;
    private boolean hasChanged = false;

    //@author: Huy TRUONG
    public JDialogSearchBox searchBox;


    public final static byte NOT_OPENED = 0;
    public final static byte OPENED = 1;
    public final static byte MODEL_OK = 2;
    public final static byte MODEL_CHANGED = 3;
    public final static byte MODEL_SAVED = 4;
    public final static byte RTLOTOS_OK = 5;
    public final static byte BACKWARD = 6;
    public final static byte NO_BACKWARD = 7;
    public final static byte FORWARD = 8;
    public final static byte NO_FORWARD = 9;
    public final static byte FORWARD_DIAG = 10;
    public final static byte BACKWARD_DIAG = 11;
    public final static byte NO_FORWARD_DIAG = 12;
    public final static byte NO_BACKWARD_DIAG = 13;
    public final static byte DTADOT_OK = 14;
    public final static byte DTADOT_KO = 15;
    public final static byte RGDOT_OK = 16;
    public final static byte RGDOT_KO = 17;
    public final static byte TLSADOT_OK = 31;
    public final static byte TLSADOT_KO = 32;
    public final static byte SIM_OK = 18;
    public final static byte SIM_KO = 19;
    public final static byte CUTCOPY_OK = 20;
    public final static byte CUTCOPY_KO = 21;
    public final static byte PASTE_OK = 22;
    public final static byte RGAUTDOT_OK = 23;
    public final static byte RGAUTDOT_KO = 24;
    public final static byte RGAUT_OK = 25;
    public final static byte RGAUT_KO = 26;
    public final static byte RGAUTPROJDOT_OK = 27;
    public final static byte RGAUTPROJDOT_KO = 28;
    public final static byte EXPORT_LIB_OK = 29;
    public final static byte EXPORT_LIB_KO = 30;
    public final static byte METHO_CHANGED = 33;
    public final static byte VIEW_SUGG_DESIGN_OK = 34;
    public final static byte VIEW_SUGG_DESIGN_KO = 35;
    public final static byte GEN_DESIGN_OK = 36;
    public final static byte GEN_DESIGN_KO = 37;
    public final static byte GEN_SYSTEMC_OK = 38;
    public final static byte GEN_SYSTEMC_KO = 39;
    public final static byte VIEW_WAVE_OK = 40;
    public final static byte REQ_OK = 41;
    public final static byte UPPAAL_OK = 42;
    public final static byte NC_OK = 43;
    public final static byte MODEL_UPPAAL_OK = 44;
    public final static byte EDIT_PROVERIF_OK = 46;
    public final static byte AVATAR_SYNTAXCHECKING_OK = 47;
    public final static byte PANEL_CHANGED = 48;
    public final static byte ATTACKTREE_SYNTAXCHECKING_OK = 49;
    public final static byte COMPONENT_SELECTED = 50;

    public final static int INCREMENT = 10;

    public static Object BACK_COLOR;
    //public static Object BACK_COLOR;

    public final static String REMOTE_RTL_LOTOS_FILE = "spec.lot";
    public final static String REMOTE_UPPAAL_FILE = "spec.xml";
    public final static String REMOTE_ALDEBARAN_AUT_FILE = "spec.aut";
    public final static String REMOTE_ALDEBARAN_BISIMU_FILE1 = "file1.aut";
    public final static String REMOTE_ALDEBARAN_BISIMU_FILE2 = "file2.aut";
    public final static String REMOTE_BISIMULATOR_FILE1 = "lts1bis";
    public final static String REMOTE_BISIMULATOR_FILE2 = "lts2bis";

    public final static byte METHO_ANALYSIS = 0;
    public final static byte METHO_DESIGN = 1;
    public final static byte METHO_DEPLOY = 2;

    public byte mode;
    public byte methoMode;

    // TURTLE Modeling
    public GTURTLEModeling gtm;


    //TURTLE modeling graphic components
    private JTabbedPane mainTabbedPane;
    private JToolBarMainTurtle mainBar;
    //private JPopupMenu menuTabbedPane;

    private TDiagramPanel activetdp;

    // Modified graphs
    private String modifiedaut;
    private String modifiedautdot;

    private RG lastDiploRG;


    // JBirdPanel
    private JBirdPanel jbp;

    private int typeButtonSelected;
    private int idButtonSelected;
    private Plugin pluginSelected;

    private File file;
    private File dir;
    private File config;
    private File lotosfile;
    private File simfile;
    private File dtafile;
    private File dtadotfile;
    private File rgfile;
    private File rgdotfile;
    private File tlsafile;
    private File tlsadotfile;
    private File rgautfile;
    private File fc2file;
    private File bcgfile;
    private File rgautdotfile;
    private File rgautprojfile;
    private File rgautprojdotfile;
    private JFileChooser jfc;
    private JFileChooser jfclib;
    private JFileChooser jfcimg;
    private JFileChooser jfcimgsvg;
    private JFileChooser jfcggraph;
    private JFileChooser jfctgraph;
    private JFileChooser jfclot;
    private JFileChooser jfctif;
    private JFileChooser jfcmsc;

    //private int selectedAction = -1;

    // Interaction with simulators
    private ArrayList<RunningInfo> runningIDs;
    private ArrayList<LoadInfo> loadIDs;
    private ConcurrentHashMap<Integer, ArrayList<SimulationTransaction>> transactionMap = new ConcurrentHashMap<Integer, ArrayList<SimulationTransaction>>();
	private ConcurrentHashMap<Integer, ConcurrentHashMap<String, String>> latencyMap = new ConcurrentHashMap<Integer, ConcurrentHashMap<String,String>>();
    private ConcurrentHashMap<String, String> statusMap = new ConcurrentHashMap<String, String>();
    private JFrameInteractiveSimulation jfis;
    private JFrameAvatarInteractiveSimulation jfais;

    // Invariants
    Invariant currentInvariant;

    // Thread for autosave
    PeriodicBehaviorThread pbt;

    private TMLArchiPanel tmlap;    // USed to retrieve the currently opened architecture panel

    // Plugin management
    //public static PluginManager pluginManager;


    public MainGUI(boolean _turtleOn, boolean _systemcOn, boolean _lotosOn, boolean _proactiveOn, boolean _tpnOn, boolean _osOn, boolean _uppaalOn, boolean _ncOn, boolean _avatarOn, boolean _proverifOn, boolean
                   _avatarOnly, boolean _experimental) {
        turtleOn = _turtleOn;
        systemcOn = _systemcOn;
        lotosOn = _lotosOn;
        proactiveOn = _proactiveOn;
        tpnOn = _tpnOn;
        osOn = _osOn;
        uppaalOn = _uppaalOn;
        ncOn = _ncOn;
        avatarOn = _avatarOn;
        proverifOn = _proverifOn;
        avatarOnly = _avatarOnly;
        experimentalOn = _experimental;

        currentInvariant = null;

        pbt = new PeriodicBehaviorThread(this, 120000); // save every two minutes

        //PluginManager.pluginManager = new PluginManager();

    }
    
    public void setKey(String _sk) {
        sk = _sk;
        RshClient.sk = sk;
    }

    public String getKey() {
        return sk;
    }
    
    public File getDir() {
    	return dir;
    }

    public boolean isAvatarOn() {
        return avatarOn;
    }


    public void build() {
        // Swing look and feel

        try {
            UIManager.setLookAndFeel(
                                     UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) { ErrorGUI.exit(ErrorGUI.GUI);}

        // Creating main container
        frame = new JFrame("TTool");

        frame.addWindowListener(this);
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE );
        frame.setIconImage(IconManager.img8);

        framePanel = frame.getContentPane();
        framePanel.setLayout(new BorderLayout());

        // file chooser
        if (ConfigurationTTool.FILEPath.length() > 0) {
            jfc = new JFileChooser(ConfigurationTTool.FILEPath);
        } else {
            jfc = new JFileChooser();
        }

        if (ConfigurationTTool.FILEPath.length() > 0) {
            jfctif = new JFileChooser(ConfigurationTTool.FILEPath);
        } else {
            jfctif = new JFileChooser();
        }

        if (ConfigurationTTool.FILEPath.length() > 0) {
            jfcmsc = new JFileChooser(ConfigurationTTool.FILEPath);
        } else {
            jfcmsc = new JFileChooser();
        }

        if (ConfigurationTTool.LIBPath.length() > 0) {
            jfclib = new JFileChooser(ConfigurationTTool.LIBPath);
        } else {
            jfclib = new JFileChooser();
        }
        if (ConfigurationTTool.IMGPath.length() > 0) {
            jfcimg = new JFileChooser(ConfigurationTTool.IMGPath);
        } else {
            jfcimg = new JFileChooser();
        }

        if (ConfigurationTTool.IMGPath.length() > 0) {
            jfcimgsvg = new JFileChooser(ConfigurationTTool.IMGPath);
        } else {
            jfcimgsvg = new JFileChooser();
        }

        if (ConfigurationTTool.LOTOSPath.length() > 0) {
            jfclot = new JFileChooser(ConfigurationTTool.LOTOSPath);
        } else {
            jfclot = new JFileChooser();
        }

        if (ConfigurationTTool.GGraphPath.length() > 0) {
            jfcggraph = new JFileChooser(ConfigurationTTool.GGraphPath);
        } else {
            jfcggraph = new JFileChooser();
        }

        if (ConfigurationTTool.TGraphPath.length() > 0) {
            jfctgraph = new JFileChooser(ConfigurationTTool.TGraphPath);
        } else {
            jfctgraph = new JFileChooser();
        }

        TFileFilter filter = new TFileFilter();
        jfc.setFileFilter(filter);
        jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

        TTIFFilter filtertif = new TTIFFilter();
        jfctif.setFileFilter(filtertif);

        MSCFilter filtermsc = new MSCFilter();
        jfcmsc.setFileFilter(filtermsc);

        TLibFilter filterLib = new TLibFilter();
        jfclib.setFileFilter(filterLib);

        TImgFilter filterImg = new TImgFilter();
        jfcimg.setFileFilter(filterImg);

        TSVGFilter filterSVG = new TSVGFilter();
        jfcimgsvg.setFileFilter(filterSVG);

        RTLFileFilter filterRTL = new RTLFileFilter();
        jfclot.setFileFilter(filterRTL);

        TDotFilter filterDot = new TDotFilter();
        jfcggraph.setFileFilter(filterDot);

        // Actions
        initActions();

        // mode
        setMode(NOT_OPENED);

        // statusBar
        status = createStatusBar();

        // Mouse handler
        mouseHandler = new MouseHandler(status);

        framePanel.add(status, BorderLayout.SOUTH);

        // toolbar
        mainBar = new JToolBarMainTurtle(this);
        framePanel.add(mainBar, BorderLayout.NORTH);

        // Panels
        panelForTab = new JPanel(); panelForTab.setLayout(new BorderLayout());
        //panelForTree = new JPanel(); panelForTree.setLayout(new BorderLayout());
        // Tree
        dtree = new JDiagramTree(this);
        dtree.setCellRenderer(new DiagramTreeRenderer());
        ToolTipManager.sharedInstance().registerComponent(dtree);
        JScrollPane scrollPane = new JScrollPane(dtree);
        scrollPane.setPreferredSize(new Dimension(200, 600));
        scrollPane.setMinimumSize(new Dimension(25, 200));
        jbp = new JBirdPanel(this);
        jbp.setPreferredSize(new Dimension(200, 200));
        JSplitPane split1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, scrollPane, jbp);

        //split1.setLastDividerLocation(500);
        //panelForTree.add(scrollPane, BorderLayout.CENTER);

        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, split1, panelForTab);
        framePanel.add(split, BorderLayout.CENTER);
        //split1.resetToPreferredSizes();

        // Creating menus
        jmenubarturtle = new JMenuBarTurtle(this);
        frame.setJMenuBar(jmenubarturtle);

        //split1.setLastDividerLocation(split1.getHeight() * 4 / 5);
        //split1.setLastDividerLocation(900);

        // ToolBar
        //toolbarDesign = new Vector();
        //toolbarAnalysis       = new Vector();

        // Panels
        //analysisPanels = new Vector();
        //designPanels = new Vector();

    }

    public void initActions() {
        actions = new TGUIAction[TGUIAction.NB_ACTION];
        for(int i=0; i<TGUIAction.NB_ACTION; i++) {
            actions[i] = new TGUIAction(i);
            actions[i].addActionListener(this);
            //actions[i].addKeyListener(this);
        }
    }

    public String getTitle() {
        return frame.getTitle();
    }

    public boolean hasChanged() {
        return hasChanged;
    }

    public void resetChange() {
        hasChanged = false;
    }

    public void changeMade(TDiagramPanel tdp, int type) {
        hasChanged = true;
        if (tdp != null) {
            switch (type) {
            case -1:
                // Structural change
                break;
            case TDiagramPanel.NEW_COMPONENT:
                //TraceManager.addDev("New Component");
                tdp.structureChanged();
                break;
            case TDiagramPanel.NEW_CONNECTOR:
                //TraceManager.addDev("New Connector");
                tdp.structureChanged();
                break;
            case TDiagramPanel.REMOVE_COMPONENT:
                //TraceManager.addDev("Remove Component");
                tdp.structureChanged();
                break;
            case TDiagramPanel.MOVE_CONNECTOR:
                //TraceManager.addDev("Move Connector");
                tdp.structureChanged();
                break;
            case TDiagramPanel.CHANGE_VALUE_COMPONENT:
                //TraceManager.addDev("Value of component changed");
                tdp.valueChanged();
                break;
            case TDiagramPanel.MOVE_COMPONENT:
                //TraceManager.addDev("Component moved");
                break;
            default:

            }
        }
        setMode(MODEL_CHANGED);
        Point p;
        if (tdp == null) {
            p = getCurrentSelectedPoint();
        } else {
            p = getPoint(tdp);
        }
        //TraceManager.addDev("Change made!");
        gtm.saveOperation(p);
        dtree.toBeUpdated();
    }

    public void setMethodologicalMode(byte m) {
        methoMode = m;
        switch(methoMode) {
        case METHO_ANALYSIS:
            break;
        case METHO_DESIGN:
            break;
        default:
        }
    }

    public void setMode(byte m) {
        mode = m;
        ModeManager.setMode(mode, actions, mainBar, this);
    }


    //@author: Huy TRUONG
    public JToolBarMainTurtle getMainBar(){
        return this.mainBar;
    }
    //--

    public void activeActions(boolean b) {
        for(int i=0; i<TGUIAction.NB_ACTION; i++) {
            actions[i].setEnabled(b);
        }
    }

    public String getModelFileFullPath() {
        if (file == null) {
            return "./";
        }
        return file.getAbsolutePath();
    }

    public void periodicAction() {
        //TraceManager.addDev("Autosaving ");
        if (file == null) {
            return;
        }

        File fileSave = new File(file.getAbsolutePath() + "~");
        TraceManager.addDev("Autosaving in " + fileSave.getAbsolutePath());
        status.setText("Autosaving in " + fileSave.getAbsolutePath());

        if(checkFileForSave(fileSave)) {
            try {
                String s = gtm.makeXMLFromTurtleModeling(-1);
                FileOutputStream fos = new FileOutputStream(fileSave);
                fos.write(s.getBytes());
                fos.close();
            } catch (Exception e) {
                TraceManager.addDev("Error during autosave: " + e.getMessage());
                status.setText("Error during autosave: " + e.getMessage());
                return;
            }
        }

        status.setText("Autosave done in " + fileSave.getAbsolutePath());
    }

    public void search(String text) {

        Vector<Object> elements = new Vector<Object>();

        TURTLEPanel panel;
        for(int i=0; i<tabs.size(); i++) {
            panel = tabs.get(i);
            panel.searchForText(text.toLowerCase(), elements);
        }

        gtm.setElementsOfSearchTree(elements);
        //TraceManager.addDev("Found " + elements.size() + " elements");
        dtree.forceUpdate();
    }


    public List<Invariant> getInvariants() {
        return gtm.getInvariants();
    }

    public List<RG> getRGs() {
        return gtm.getRGs();
    }

    public void addRG(RG _newGraph) {
        gtm.addRG(_newGraph);
        dtree.toBeUpdated();
    }

    public void removeRG(RG _toBeRemoved) {
        gtm.removeRG(_toBeRemoved);
        dtree.toBeUpdated();
    }

    public void minimizeRG(RG toBeMinimized) {
        JFrameMinimize jfm = new JFrameMinimize(frame, this, "Graph minimization", toBeMinimized);
        //jfm.setSize(900, 700);
        GraphicLib.centerOnParent(jfm, 900, 700);
        jfm.setVisible(true);
    }

    public void makeRefusalGraph(RG inputGraph) {
        JFrameRefusalGraph jfm = new JFrameRefusalGraph(frame, this, "Test Sequences Construction", inputGraph);
        //jfm.setSize(900, 700);
        GraphicLib.centerOnParent(jfm, 900, 700);
        jfm.setVisible(true);
    }


    public void setCurrentInvariant(Invariant inv) {
        currentInvariant = inv;
    }

    public Invariant getCurrentInvariant() {
        return currentInvariant;
    }

    public TGComponent hasCheckableMasterMutex() {
        TURTLEPanel tp = getCurrentTURTLEPanel();

        if (tp instanceof AvatarDesignPanel) {
            return ((AvatarDesignPanel)tp).hasCheckableMasterMutex();
        }

        return null;
    }

    public void removeAllMutualExclusionWithMasterMutex() {
        TURTLEPanel tp = getCurrentTURTLEPanel();

        if (tp instanceof AvatarDesignPanel) {
            ((AvatarDesignPanel)tp).removeAllMutualExclusionWithMasterMutex();
        }

    }




    private int addAnalysisPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        AnalysisPanel ap = new AnalysisPanel(this);
        tabs.add(index, ap); // should look for the first
        //mainTabbedPane.addTab(name, IconManager.imgic17, ap.tabbedPane, "Opens analysis diagrams");
        mainTabbedPane.add(ap.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open analysis diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic17);
        ap.init();
        //TraceManager.addDev("Main analysis added");
        return index;
    }

    private int addTMLCPPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        TMLCommunicationPatternPanel tmlcpp = new TMLCommunicationPatternPanel(this);
        tabs.add( index, tmlcpp ); // should look for the first
        //mainTabbedPane.addTab(name, IconManager.imgic17, ap.tabbedPane, "Opens analysis diagrams");
        mainTabbedPane.add(tmlcpp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open CP diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic17);
        tmlcpp.init();
        //TraceManager.addDev("Main analysis added");
        return index;
    }

    private int addAvatarAnalysisPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        AvatarAnalysisPanel aap = new AvatarAnalysisPanel(this);
        tabs.add(index, aap); // should look for the first
        //mainTabbedPane.addTab(name, IconManager.imgic17, ap.tabbedPane, "Opens analysis diagrams");
        mainTabbedPane.add(aap.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open analysis diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic17);
        aap.init();
        //TraceManager.addDev("Main analysis added");
        return index;
    }

    private int addAttackTreePanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        AttackTreePanel atp = new AttackTreePanel(this);
        tabs.add(index, atp); // should look for the first
        mainTabbedPane.add(atp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open attack tree diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic1074);
        atp.init();
        return index;
    }

    private int addRequirementPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        RequirementPanel rp = new RequirementPanel(this);
        tabs.add(index, rp); // should look for the first
        mainTabbedPane.add(rp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open requirement diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic1000);
        rp.init();
        return index;
    }

    private int addAvatarDesignPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        AvatarDesignPanel adp = new AvatarDesignPanel(this);
        tabs.add(index, adp);
        mainTabbedPane.add(adp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open AVATAR design diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic80);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        adp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addAvatarRequirementPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        AvatarRequirementPanel arp = new AvatarRequirementPanel(this);
        tabs.add(index, arp);
        mainTabbedPane.add(arp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open AVATAR requirement diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic82);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        arp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addAvatarMADPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        AvatarMADsPanel amadsp = new AvatarMADsPanel(this);
        tabs.add(index, amadsp);
        mainTabbedPane.add(amadsp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open AVATAR Modeling Assumptions diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic82);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        amadsp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addDesignPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        DesignPanel dp = new DesignPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open design diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic14);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addTMLDesignPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        TMLDesignPanel dp = new TMLDesignPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open DIPLODOCUS design diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic62);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addDiplodocusMethodologyPanel(String name, int index, boolean addDefaultElements) {
        if (index == -1) {
            index = tabs.size();
        }
        DiplodocusMethodologyPanel dp = new DiplodocusMethodologyPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open DIPLODOCUS methodology");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic98);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init(name);
        if (addDefaultElements) {
            dp.initElements();
        }
        //ystem.out.println("Design added");
        return index;
    }

    private int addAvatarMethodologyPanel(String name, int index, boolean addDefaultElements) {
        if (index == -1) {
            index = tabs.size();
        }

        TraceManager.addDev("New avatar methodo panel");
        AvatarMethodologyPanel dp = new AvatarMethodologyPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open AVATAR methodology");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic99);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init(name);
        if (addDefaultElements) {
            dp.initElements();
        }
        //ystem.out.println("Design added");
        return index;
    }

    private int addSysmlsecMethodologyPanel(String name, int index, boolean addDefaultElements) {
        if (index == -1) {
            index = tabs.size();
        }
        TraceManager.addDev("New SysMLSec Methodopanel");
        SysmlsecMethodologyPanel dp = new SysmlsecMethodologyPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open SysML-Sec methodology");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic99);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init(name);
        if (addDefaultElements) {
            dp.initElements();
        }
        //ystem.out.println("Design added");
        return index;
    }


    private int addTMLComponentDesignPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        TMLComponentDesignPanel dp = new TMLComponentDesignPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open DIPLODOCUS component design diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic1208);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addADDPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        ADDPanel dp = new ADDPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open deployment diagram");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic60);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addTMLArchiPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        TMLArchiPanel dp = new TMLArchiPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open DIPLODOCUS architecture diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic60);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init();
        //ystem.out.println("Design added");
        return index;
    }
    
    public int addSystemCAMSPanel(String name, int index) { //ajout CD -----Mark
        if (index == -1) {
            index = tabs.size();
        }
	SystemCAMSPanel scp = new SystemCAMSPanel(this);
        tabs.add(index, scp);
        mainTabbedPane.add(scp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open System C-AMS diagrams ");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic60);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        scp.init();
        //ystem.out.println("Design added");
        return index;
    }
    
    public CAMSBlockDiagramPanel addSystemCAMSPanel(String name, int index, TMLArchiCAMSNode parent) {
        if (index == -1) {
            index = tabs.size();
        }
	SystemCAMSPanel scp = new SystemCAMSPanel(this);
        tabs.add(index, scp);
        mainTabbedPane.add(scp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open System C-AMS diagrams ");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic60);
        scp.init();
	return scp.getCAMSBlockDiagramPanel();
    }

    //Return the list of all the TMLArchiDiagramPanels
    public Vector<TMLArchiPanel> getTMLArchiDiagramPanels()     {

        Vector<TMLArchiPanel> panelsList = new Vector<TMLArchiPanel>();
        TURTLEPanel tp;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if ( tp instanceof TMLArchiPanel) {
                panelsList.add( (TMLArchiPanel) (tp) );
            }
        }
        return panelsList;
    }

    public Vector<String> getAllTMLTaskNames() {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLDesignPanel) {
                list.addAll(((TMLDesignPanel)tp).getAllTMLTaskNames(mainTabbedPane.getTitleAt(i)));
            }
        }
        return list;
    }
    public Vector<String> getTMLTasks(){
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLDesignPanel) {
                list.addAll(((TMLDesignPanel)tp).getAllTMLTaskNames(mainTabbedPane.getTitleAt(i)));
            }
            if (tp instanceof TMLComponentDesignPanel) {
                list.addAll(((TMLComponentDesignPanel)tp).getAllTMLTaskNames(mainTabbedPane.getTitleAt(i)));
            }
        }

        return list;
    }

    public Vector<String> getAllApplicationTMLTasksAttributes() {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();

        for( int i = 0; i < tabs.size(); i++ )  {
            tp = tabs.elementAt(i);
            if( tp instanceof TMLComponentDesignPanel ) {
                list.addAll( ((TMLComponentDesignPanel)tp).getAllTMLTasksAttributes() );
            }
        }

        return list;
    }

    public ArrayList<TMLCommunicationPatternPanel> getAllTMLCP() {
        TURTLEPanel tp;
        ArrayList<TMLCommunicationPatternPanel> list = new ArrayList<TMLCommunicationPatternPanel>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if( tp instanceof TMLCommunicationPatternPanel )    {
                list.add( (TMLCommunicationPatternPanel) tp );
            }
        }
        return list;
    }

    public void updateAllReferences() {
        TURTLEPanel tp;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                ((TMLComponentDesignPanel)tp).tmlctdp.delayedLoad();
                //((TMLComponentDesignPanel)tp).tmlctdp.updatePorts();
            }
        }
    }

    public void updateAllPorts() {
        TURTLEPanel tp;
        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                //((TMLComponentDesignPanel)tp).tmlctdp.delayedLoad();
                ((TMLComponentDesignPanel)tp).tmlctdp.updatePorts();
            }
        }
    }

    public Vector<String> getAllTMLCommunicationNames() {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLDesignPanel) {
                list.addAll(((TMLDesignPanel)tp).getAllTMLCommunicationNames(mainTabbedPane.getTitleAt(i)));
            } else if (tp instanceof TMLComponentDesignPanel) {
                list.addAll(((TMLComponentDesignPanel)tp).getAllTMLCommunicationNames(mainTabbedPane.getTitleAt(i)));
            }
        }
        return list;
    }

    public Vector<String> getAllTMLInputPorts() {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            /*if (tp instanceof TMLDesignPanel) {
              list.addAll(((TMLDesignPanel)tp).getAllTMLChannelNames( mainTabbedPane.getTitleAt(i)) );
              } else*/
            if( tp instanceof TMLComponentDesignPanel ) {
                list.addAll(((TMLComponentDesignPanel)tp).getAllTMLInputPorts( mainTabbedPane.getTitleAt(i)) );
            }
        }
        return list;
    }

    public Vector<String> getAllTMLEventNames() {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();

        for( int i = 0; i < tabs.size(); i++ ) {
            tp = tabs.elementAt(i);
            if ( tp instanceof TMLDesignPanel ) {
                list.addAll( ( (TMLDesignPanel)tp ).getAllTMLEventNames( mainTabbedPane.getTitleAt(i) ) );
            } else if ( tp instanceof TMLComponentDesignPanel ) {
                list.addAll( ( (TMLComponentDesignPanel)tp ).getAllTMLEventNames( mainTabbedPane.getTitleAt(i) ) );
            }
        }
        return list;
    }

    public Vector<String> getAllNonMappedTMLTaskNames(TMLArchiDiagramPanel tadp, String ref, String name) {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();
        boolean b;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLDesignPanel) {
                b = (mainTabbedPane.getTitleAt(i).compareTo(ref) == 0);
                list.addAll(((TMLDesignPanel)tp).getAllNonMappedTMLTaskNames(mainTabbedPane.getTitleAt(i), tadp, b, name));
            }
            if (tp instanceof TMLComponentDesignPanel) {
                b = (mainTabbedPane.getTitleAt(i).compareTo(ref) == 0);
                list.addAll(((TMLComponentDesignPanel)tp).getAllNonMappedTMLPrimitiveComponentNames(mainTabbedPane.getTitleAt(i), tadp, b, name));
            }
        }

        return list;
    }

    public Vector<String> getAllNonMappedAvatarBlockNames(ADDDiagramPanel tadp, String ref, String name) {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();
        boolean b;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof AvatarDesignPanel) {
                b = (mainTabbedPane.getTitleAt(i).compareTo(ref) == 0);
                list.addAll(((AvatarDesignPanel)tp).getAllNonMappedAvatarBlockNames(mainTabbedPane.getTitleAt(i), tadp, b, name));
            }
        }

        return list;
    }

    public Vector<String> getAllNonMappedAvatarChannelNames(ADDDiagramPanel tadp, String ref, String name) {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();
        boolean b;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof AvatarDesignPanel) {
                b = (mainTabbedPane.getTitleAt(i).compareTo(ref) == 0);
                list.addAll(((AvatarDesignPanel)tp).getAllNonMappedAvatarChannelNames(mainTabbedPane.getTitleAt(i), tadp, b, name));
            }
        }

        return list;
    }

    public Vector<String> getAllCompositeComponent(TMLComponentTaskDiagramPanel tcdp) {
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();
        // boolean b;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel)  {
                if (((TMLComponentDesignPanel)tp).tmlctdp != tcdp) {
                    list.addAll(((TMLComponentDesignPanel)tp).getAllCompositeComponent(mainTabbedPane.getTitleAt(i)));
                }
            }
        }

        return list;
    }

    private int addTURTLEOSDesignPanel(String name, int index) {

        if (index == -1) {
            index = tabs.size();
        }
        TURTLEOSDesignPanel dp = new TURTLEOSDesignPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open TURTLE-OS design diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic14);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init();
        TraceManager.addDev("TURTLE OS Design added index=" + index);
        return index;
    }

    private int addNCDesignPanel(String name, int index) {

        if (index == -1) {
            index = tabs.size();
        }
        NCPanel ncp = new NCPanel(this);
        tabs.add(index, ncp);
        mainTabbedPane.add(ncp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open network calculus diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic60);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        ncp.init();
        //TraceManager.addDev("TURTLE OS Design added index=" + index);
        return index;
    }

    /*private int addAvatarDesignPanel(String name, int index) {

      if (index == -1) {
      index = tabs.size();
      }
      AvatarDesignPanel avdp = new AvatarDesignPanel(this);
      tabs.add(index, avdp);
      mainTabbedPane.add(avdp.tabbedPane, index);
      mainTabbedPane.setToolTipTextAt(index, "Open AVATAR Design");
      mainTabbedPane.setTitleAt(index, name);
      mainTabbedPane.setIconAt(index, IconManager.imgic60);
      //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
      avdp.init();
      //TraceManager.addDev("TURTLE OS Design added index=" + index);
      return index;
      }*/

    /*private int addAvatarRequirementPanel(String name, int index) {

      if (index == -1) {
      index = tabs.size();
      }
      AvatarRequirementPanel arp = new AvatarRequirementPanel(this);
      tabs.add(index, arp);
      mainTabbedPane.add(arp.tabbedPane, index);
      mainTabbedPane.setToolTipTextAt(index, "Open AVATAR Requirement");
      mainTabbedPane.setTitleAt(index, name);
      mainTabbedPane.setIconAt(index, IconManager.imgic60);
      //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
      arp.init();
      //TraceManager.addDev("TURTLE OS Design added index=" + index);
      return index;
      }*/

    private int addProActiveDesignPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        ProactiveDesignPanel dp = new ProactiveDesignPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open ProActive design diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic14);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        dp.init();
        //ystem.out.println("Design added");
        return index;
    }

    private int addDeploymentPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        DeploymentPanel dp = new DeploymentPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open deployment diagram");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic60);
        dp.init();
        //ystem.out.println("Design added");
        return index;
    }

    public int createAvatarDesign(String name) {
        int index = addAvatarDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createAvatarRequirement(String name) {
        int index = addAvatarRequirementPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createAvatarMADs(String name) {
        int index = addAvatarMADPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createDesign(String name) {
        int index = addDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createDiplodocusMethodology(String name) {
        int index = addDiplodocusMethodologyPanel(name, -1, false);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createAvatarMethodology(String name) {
        int index = addAvatarMethodologyPanel(name, -1, false);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createSysmlsecMethodology(String name) {
        int index = addSysmlsecMethodologyPanel(name, -1, false);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createTMLDesign(String name) {
        int index = addTMLDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createTMLComponentDesign(String name) {
        int index = addTMLComponentDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createTMLCP(String name) {
        int index = addTMLCPPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createTMLArchitecture(String name) {
        int index = addTMLArchiPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createSystemCAMS(String name) { //ajout CD
        int index = addSystemCAMSPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
	}

    public int createADD(String name) {
        int index = addADDPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createTURTLEOSDesign(String name) {
        int index = addTURTLEOSDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createProActiveDesign(String name) {
        int index = addProActiveDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createAnalysis(String name) {
        int index = addAnalysisPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createAvatarAnalysis(String name) {
        int index = addAvatarAnalysisPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createDeployment(String name) {
        int index = addDeploymentPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createNC(String name) {
        int index = addNCDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createRequirement(String name) {
        int index = addRequirementPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createAttackTree(String name) {
        int index = addAttackTreePanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public void setIODName(int analysisIndex, String name) {
        AnalysisPanel ap = (AnalysisPanel)(tabs.elementAt(analysisIndex));
        ap.tabbedPane.setTitleAt(0, name);
    }

    public void setDeploymentName(int deploymentIndex, String name) {
        DeploymentPanel dp = (DeploymentPanel)(tabs.elementAt(deploymentIndex));
        dp.tabbedPane.setTitleAt(0, name);
    }

    public void setNCName(int ncIndex, String name) {
        NCPanel ncp = (NCPanel)(tabs.elementAt(ncIndex));
        ncp.tabbedPane.setTitleAt(0, name);
    }



    // add main panel for editing TURTLE diagrams
    private void addTURTLEPanel() {

        //TraceManager.addDev("New TURTLE Panels");
		// Issue #41 Ordering of tabbed panes 
        mainTabbedPane = GraphicLib.createTabbedPane();//new JTabbedPane();
        mainTabbedPane.setBackground(ColorManager.MainTabbedPane);
        mainTabbedPane.setForeground(Color.black);

        BACK_COLOR = UIManager.get("TabbedPane.selected");
        //UIManager.put("TabbedPane.tabAreaBackground", ColorManager.MainTabbedPaneBack);
        UIManager.put("TabbedPane.selected", ColorManager.MainTabbedPaneSelect);
        //UIManager.put("TabbedPane.darkShadow", Color.black);
        UIManager.put("TabbedPane.focus", Color.blue);
        /*UIManager.put("TabbedPane.highlight", Color.blue);
          UIManager.put("TabbedPane.lightHighlight", Color.red);
          UIManager.put("TabbedPane.shadow", Color.black);
          UIManager.put("TabbedPane.darkShadow", Color.magenta);
          UIManager.put("TabbedPane.focus", Color.green);*/
        SwingUtilities.updateComponentTreeUI(mainTabbedPane);
        mainTabbedPane.setOpaque(true);

        ChangeListener cl = new ChangeListener() {
        	@Override
            public void stateChanged(ChangeEvent e){
                paneAction(e);
            }
        };

        mainTabbedPane.addChangeListener(cl);
        panelForTab.add(mainTabbedPane, BorderLayout.CENTER);
        mainTabbedPane.addMouseListener(new PopupListener(this));

        tabs = new Vector<TURTLEPanel>();

        frame.setVisible(true);
    }

    public Vector<TURTLEPanel> getTabs() {
        return tabs;
    }

    public String getTitleOf(TDiagramPanel _tdp) {
        TURTLEPanel panel;
        for(int i=0; i<tabs.size(); i++) {
            panel = tabs.get(i);
            if (panel.hasTDiagramPanel(_tdp)) {
                return getTitleAt(panel);
            }
        }

        return "Unknown";

    }

    public String getTitleAt(TURTLEPanel tp) {
        int index = tabs.indexOf(tp);
        if (index == -1) {
            return "Unknown";
        }
        return mainTabbedPane.getTitleAt(index);

    }

    public TURTLEPanel getTURTLEPanel(String s) {
        for(int i=0; i<mainTabbedPane.getTabCount(); i++) {
            if (mainTabbedPane.getTitleAt(i).compareTo(s) == 0) {
                return tabs.elementAt(i);
            }
        }
        return null;
    }

    public void drawAvatarSpecification(AvatarSpecification av) {
        int index = createAvatarDesign("GeneratedDesign");
        AvatarDesignPanel adp = (AvatarDesignPanel)(tabs.elementAt(index));
        gtm.drawPanel(av, adp);
    }


    // Creates the status bar.
    private     JLabel createStatusBar()  {
        status = new JLabel("Ready...");
        status.setBorder(BorderFactory.createEtchedBorder());
        return status;
    }

    public void activate(JMenu jm, boolean b) {
        JMenuItem im;
        for(int i=0; i<jm.getItemCount(); i++) {
            im = jm.getItem(i);
            if (im != null)
                im.setEnabled(b);
        }
    }

    public void start() {
        // Main window is ready to be drawn on screen
        if (frame == null) {
            ErrorGUI.exit(ErrorGUI.GUI);
        }

        boolean positioned = false;

        if (ConfigurationTTool.configSizeAvailable()) {
            try {
                int x = Integer.decode(ConfigurationTTool.LastWindowAttributesX).intValue();
                int y = Integer.decode(ConfigurationTTool.LastWindowAttributesY).intValue();
                int width = Integer.decode(ConfigurationTTool.LastWindowAttributesWidth).intValue();
                int height = Integer.decode(ConfigurationTTool.LastWindowAttributesHeight).intValue();
                String max = ConfigurationTTool.LastWindowAttributesMax;
                if (max.compareTo("true") != 0) {
                    frame.setBounds(x, y, width, height);
                    positioned = true;
                }
                //TraceManager.addDev("Setting window attributes");
            } catch (Exception e) {
                //TraceManager.addDev("Window positioning has failed: " + e.getMessage());
            }
        }

        if (!positioned) {
            frame.setBounds(100, 100, 800, 600);
            // jdk 1.4 or more
            frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
            //TraceManager.addDev("No default window attributes");
        }

        frame.setVisible(true);
    }

    public void newTurtleModeling()     {
        setMode(OPENED);
        addTURTLEPanel();
        gtm = new GTURTLEModeling(this, tabs);
        dtm = new DiagramTreeModel(this);
        dtree.setModel(dtm);
    }

    public void closeTurtleModeling() {
        if (mode != NOT_OPENED) {
            // tabbed pane
            for(int i=0; i<tabs.size(); i++) {
                tabs.elementAt(i).tabbedPane.removeAll();
            }
            setMode(NOT_OPENED);
            tabs = null;
            mainTabbedPane = null;
            panelForTab.removeAll();
            activetdp = null;

            gtm = null;
            tclassesToValidate = new LinkedList<TClassInterface> ();
            MasterGateManager.reinitNameRestriction();

            typeButtonSelected = - 1;
            idButtonSelected = -1;
            pluginSelected = null;

            //activeDiagramToolBar = null;

            dtree.reinit();
            dtree.forceUpdate();
            frame.setTitle("TTool");
            frame.repaint();
        }
    }

    public void setStatusBarText(String s) {
        // captitalizeFirstLetter
        if (s == null)  {
            return;
        }

        if (s.length() == 0) {
            return;
        }

        if (s.length() > 1) {
            status.setText(s.substring(0, 1).toUpperCase() + s.substring(1, s.length()));
        } else {
            status.setText(s);
        }
    }

    public void reinitMainTabbedPane() {
        mainTabbedPane.removeAll();
        tabs.removeAllElements();
    }

    public void newDesign() {
        //TraceManager.addDev("NEW DESIGN");
        addDesignPanel("Design", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newDeployment() {
        //TraceManager.addDev("NEW DESIGN");
        addDeploymentPanel("Deployment", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newAnalysis() {
        //TraceManager.addDev("NEW ANALYSIS");
        addAnalysisPanel("Analysis", 0);
        tabs.elementAt(0).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
        //paneAction(null);
        //frame.repaint();
    }

    public void newAvatarAnalysis() {
        //TraceManager.addDev("NEW ANALYSIS");
        addAvatarAnalysisPanel("Analysis", 0);
        //((TURTLEPanel)tabs.elementAt(0)).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
        //paneAction(null);
        //frame.repaint();
    }


    public void newCommunicationPattern() {
        //TraceManager.addDev("NEW ANALYSIS");
        //addCommunicationPatternPanel("CP", 0);
        tabs.elementAt(0).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
        //paneAction(null);
        //frame.repaint();
    }

    public void newTMLDesign() {
        //TraceManager.addDev("NEW DESIGN");
        addTMLDesignPanel("DIPLODOCUS_Design", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newDiplodocusMethodology() {
        //TraceManager.addDev("NEW DESIGN");
        addDiplodocusMethodologyPanel("DIPLODOCUS_Methodology", -1, true);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newAvatarMethodology() {
        //TraceManager.addDev("NEW DESIGN");
        addAvatarMethodologyPanel("AVATAR_Methodology", -1, true);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }
    public void newSysmlsecMethodology() {
        //TraceManager.addDev("NEW DESIGN");
        addSysmlsecMethodologyPanel("SysMLSec_Methodology", -1, true);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newTMLComponentDesign() {
        //TraceManager.addDev("NEW DESIGN");
        addTMLComponentDesignPanel("DIPLODOCUS_C_Design", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newTMLCP() {
        //TraceManager.addDev("NEW ANALYSIS");
        addTMLCPPanel("CP", 0);
        tabs.elementAt(0).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
        //paneAction(null);
        //frame.repaint();
    }

    public void newTMLArchi() {
        //TraceManager.addDev("NEW DIPLO Architecture");
        addTMLArchiPanel("Architecture", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newSystemCAMS() {//ajout CD
        //TraceManager.addDev("NEW DIPLO Architecture");
        addSystemCAMSPanel("SystemC-AMS", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newADD() {
        //TraceManager.addDev("NEW Avatar deployment");
        addADDPanel("Deployment", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newTURTLEOSDesign() {
        //TraceManager.addDev("NEW DESIGN");
        addTURTLEOSDesignPanel("TURTLE-OS Design", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
    }

    public void newNCDesign() {
        //TraceManager.addDev("NEW NC DESIGN");
        addNCDesignPanel("NC Design", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
    }

    public void newAvatarBD() {
        //TraceManager.addDev("NEW AVATAR BD");
        addAvatarDesignPanel("Design", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
    }

    public void newAvatarRequirement() {
        //TraceManager.addDev("NEW AVATAR Requirement");
        addAvatarRequirementPanel("Requirements", 0);
        //((TURTLEPanel)tabs.elementAt(tabs.size()-1)).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
    }

    public void newAvatarMADs() {
        //TraceManager.addDev("NEW AVATAR MAD");
        addAvatarMADPanel("Assumptions", 0);
        //((TURTLEPanel)tabs.elementAt(tabs.size()-1)).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
    }

    public void newProactiveDesign() {
        //TraceManager.addDev("NEW DESIGN");
        /*int index = */addProActiveDesignPanel("ProActive Design", -1);
        tabs.elementAt(tabs.size()-1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size()-1);
        //paneAction(null);
        //frame.repaint();*/
    }

    public void newAttackTree() {
        //TraceManager.addDev("NEW ANALYSIS");
        addAttackTreePanel("Attack Trees", 0);
        //((TURTLEPanel)tabs.elementAt(0)).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
        //paneAction(null);
        //frame.repaint();
    }

    public void newRequirement() {
        //TraceManager.addDev("NEW ANALYSIS");
        addRequirementPanel("Requirements", 0);
        //((TURTLEPanel)tabs.elementAt(0)).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
        //paneAction(null);
        //frame.repaint();
    }

    // Action listeners
    public void newProject() {
        if (mode == NOT_OPENED) {
            //mode = ProjectManager.TM_OPENED;
            newTurtleModeling();
            //gtm.saveOperation(tcdp);
            file = null;
            dir = null;
            config = null;
            frame.setTitle("TTool: unsaved project");
        } else {
            //  check if previous modeling is saved
            boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
            if (b) {
                if (!saveBeforeAction("Save and Start New Modeling", "Start New modeling")) {
                    return;
                }
                /*int back = JOptionPane.showConfirmDialog(frame, "Modeling has not been saved\nDo you really want to open a new one ?", "Attention: current modeling not saved ?", JOptionPane.OK_CANCEL_OPTION);
                  if (back == JOptionPane.CANCEL_OPTION) {
                  return;       */
                /*}*/
            }
            // close current modeling
            closeTurtleModeling();

            // opens a new one
            newTurtleModeling();

            //gtm.saveOperation(tcdp);

            file = null;
            lotosfile = null;
            simfile = null;
            dtafile = null;
            dtadotfile = null;
            rgfile = null;
            tlsafile = null;
            rgdotfile = null;
            tlsadotfile = null;
            rgautfile = null;
            fc2file = null;
            bcgfile = null;
            rgautdotfile = null;
            rgautprojfile = null;
            rgautprojdotfile = null;

            frame.setTitle("TTool: unsaved project");
        }
    }
    
    public void newProjectDir() {
    	if (mode == NOT_OPENED) {
    		int val = createFileDialog();
    		if (val == JFileChooser.APPROVE_OPTION) 
    			createFile();      
        }
        else {
            //  check if previous modeling is saved
            boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
            if (b) {
                if (!saveBeforeAction("Save and Start New Modeling", "Start New modeling")) {
                    return;
                }
                /*int back = JOptionPane.showConfirmDialog(frame, "Modeling has not been saved\nDo you really want to open a new one ?", "Attention: current modeling not saved ?", JOptionPane.OK_CANCEL_OPTION);
                  if (back == JOptionPane.CANCEL_OPTION) {
                  return;       */
                /*}*/
            }
            int val = createFileDialog();
            if (val == JFileChooser.APPROVE_OPTION) {
            // close current modeling
            	closeTurtleModeling();
            	createFile();
            }
        }
    }
    
    public void saveConfig() {
        int i = 0;
        for (; i < tabs.size(); i++) {
        	if (tabs.get(i) == activetdp.tp)
        		break;
        }
        int j = tabs.get(i).getIndexOfChild(activetdp);
        SpecConfigTTool.lastTab = i;
        SpecConfigTTool.lastPanel = j;
        try {
			SpecConfigTTool.saveConfiguration(config);
		} catch (MalformedConfigurationException e) {
			System.err.println(e.getMessage() + " : Can't save config file.");
		}
    }
    
    public String loadFile(File f) {
        String s = null;

        if(checkFileForOpen(f)) {
            try {
                FileInputStream fis = new FileInputStream(f);
                int nb = fis.available();

                byte [] ba = new byte[nb];
                fis.read(ba);
                fis.close();
                s = new String(ba);
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be opened because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
            } catch (OutOfMemoryError er) {
                JOptionPane.showMessageDialog(frame, "File could not be opened because " + er.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        return s;
    }

    public void saveFile(File f, String data, String msg) {
        if(checkFileForSave(f)) {
            try {
                if (data == null) {
                    return;
                }
                FileOutputStream fos = new FileOutputStream(f);
                fos.write(data.getBytes());
                fos.close();
                JOptionPane.showMessageDialog(frame, msg + " " + f.getAbsolutePath(), "Saving", JOptionPane.INFORMATION_MESSAGE);
                return;
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be saved because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
        }
    }

    public String loadLibrary() {
        File libfile;

        int returnVal = jfclib.showDialog(frame, "Import library");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return null;
        }

        libfile = jfclib.getSelectedFile();
        libfile = FileUtils.addFileExtensionIfMissing(libfile, TLibFilter.getExtension());

        return loadFile(libfile);
    }

    public String[] loadLotosSpec() {
        File lotfile;

        int returnVal = jfclot.showDialog(frame, "Load RT-LOTOS specification");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return null;
        }

        lotfile = jfclot.getSelectedFile();
        lotfile = FileUtils.addFileExtensionIfMissing(lotfile, RTLFileFilter.getExtension());

        String spec = loadFile(lotfile);
        if (spec == null) {
            return null;
        }

        String [] ret = new String[2];
        ret[0] = lotfile.getName();
        ret[1] = spec;
        return ret;
    }

    public void saveLotosSpec(String data) {
        File lotfile;

        int returnVal = jfclot.showDialog(frame, "Save RT-LOTOS specification");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        lotfile = jfclot.getSelectedFile();
        lotfile = FileUtils.addFileExtensionIfMissing(lotfile, RTLFileFilter.getExtension());

        saveFile(lotfile, data, "LOTOS specification saved under");
    }

    public void saveDTA(String tdata, String gdata) {
        File dtafile;

        /* textual form */
        DTAFileFilter filter = new DTAFileFilter();
        jfctgraph.setFileFilter(filter);

        int returnVal = jfctgraph.showDialog(frame, "Save last DTA (textual form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        dtafile = jfctgraph.getSelectedFile();
        dtafile = FileUtils.addFileExtensionIfMissing(dtafile, DTAFileFilter.getExtension());

        saveFile(dtafile, tdata, "Textual DTA saved under");

        /* graphical form */
        returnVal = jfcggraph.showDialog(frame, "Save last DTA (graphical form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        dtafile = jfcggraph.getSelectedFile();
        dtafile = FileUtils.addFileExtensionIfMissing(dtafile, TDotFilter.getExtension());

        saveFile(dtafile, gdata, "Graphical DTA saved under");
    }

    public String saveTPNNDRFormat(String tpn) {
        String s = file.getAbsolutePath();
        int l = s.length();
        String myFile = s.substring(0, l-4) + ".ndr";
        try {
            FileUtils.saveFile(myFile, tpn);
        } catch (Exception e) {
            return "TPN could not be saved in myFile: " +e.getMessage();
        }
        return "TPN saved in " +myFile;
    }

    public void saveRG(String tdata, String gdata) {
        File rgfile;

        /* textual form */
        RGFileFilter filter = new RGFileFilter();
        jfctgraph.setFileFilter(filter);

        int returnVal = jfctgraph.showDialog(frame, "Save last RG (textual form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        rgfile = jfctgraph.getSelectedFile();
        rgfile = FileUtils.addFileExtensionIfMissing(rgfile, RGFileFilter.getExtension());

        saveFile(rgfile, tdata, "Textual RG saved under");

        /* graphical form */
        returnVal = jfcggraph.showDialog(frame, "Save last RG (graphical form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        rgfile = jfcggraph.getSelectedFile();
        rgfile = FileUtils.addFileExtensionIfMissing(rgfile, TDotFilter.getExtension());

        saveFile(rgfile, gdata, "Graphical RG saved under");
    }

    public void saveTLSA(String tdata, String gdata) {
        File tlsafile;

        /* textual form */
        TLSAFileFilter filter = new TLSAFileFilter();
        jfctgraph.setFileFilter(filter);

        int returnVal = jfctgraph.showDialog(frame, "Save last TLSA (textual form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        tlsafile = jfctgraph.getSelectedFile();
        tlsafile = FileUtils.addFileExtensionIfMissing(tlsafile, TLSAFileFilter.getExtension());

        saveFile(tlsafile, tdata, "Textual TLSA saved under");

        /* graphical form */
        returnVal = jfcggraph.showDialog(frame, "Save last TLSA (graphical form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        tlsafile = jfcggraph.getSelectedFile();
        tlsafile = FileUtils.addFileExtensionIfMissing(tlsafile, TDotFilter.getExtension());

        saveFile(tlsafile, gdata, "Graphical TLSA saved under");
    }

    public void saveRGAUT(String tdata, String gdata) {
        File rgfile;

        /* textual form */
        AUTFileFilter filter = new AUTFileFilter();
        jfctgraph.setFileFilter(filter);

        int returnVal = jfctgraph.showDialog(frame, "Save last RG/AUT (textual form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        rgfile = jfctgraph.getSelectedFile();
        rgfile = FileUtils.addFileExtensionIfMissing(rgfile, AUTFileFilter.getExtension());

        saveFile(rgfile, tdata, "Textual RG/AUTsaved under");

        /* graphical form */
        returnVal = jfcggraph.showDialog(frame, "Save last RG/AUT (graphical form)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }
        rgfile = jfcggraph.getSelectedFile();
        rgfile = FileUtils.addFileExtensionIfMissing(rgfile, TDotFilter.getExtension());

        saveFile(rgfile, gdata, "Graphical RG/AUT saved under");
    }



    public String[] loadGGraph() {
        File gfile;

        int returnVal = jfcggraph.showDialog(frame, "Load Graph (DOT format)");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return null;
        }

        gfile = jfcggraph.getSelectedFile();
        gfile = FileUtils.addFileExtensionIfMissing(gfile, TDotFilter.getExtension());

        String spec = loadFile(gfile);
        if (spec == null) {
            return null;
        }

        String [] ret = new String[2];
        ret[0] = gfile.getName();
        ret[1] = spec;
        return ret;
    }

    public String[] loadGGraph(String name) {
        try {
            String spec = FileUtils.loadFile(name);
            if (spec == null) {
                return null;
            }

            String [] ret = new String[2];
            ret[0] = name;
            ret[1] = spec;
            return ret;
        } catch (Exception e) {
            return null;
        }
    }

    public String[] loadAUTGraph() {
        File autfile;

        /* textual form */
        AUTFileFilter filter = new AUTFileFilter();
        jfctgraph.setFileFilter(filter);

        int returnVal = jfctgraph.showDialog(frame, "Load AUT graph");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return null;
        }

        autfile = jfctgraph.getSelectedFile();
        autfile = FileUtils.addFileExtensionIfMissing(autfile, AUTFileFilter.getExtension());

        String spec = loadFile(autfile);
        if (spec == null) {
            return null;
        }

        String [] ret = new String[2];
        ret[0] = autfile.getName();
        ret[1] = spec;
        return ret;
    }

    public void updateLastOpenFile(File file) {
        if (ConfigurationTTool.LastOpenFileDefined) {
            ConfigurationTTool.LastOpenFile = file.getPath();
            // Change name of action
            actions[TGUIAction.ACT_OPEN_LAST].setName(TGUIAction.ACT_OPEN_LAST, ConfigurationTTool.LastOpenFile);
        }
    }

    // Only if a project is already opened
    public void mergeProject() {
        //TraceManager.addDev("Merge");
        File filetmp = file;
        int returnVal = jfc.showOpenDialog(frame);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            filetmp = jfc.getSelectedFile();
        }

        String s = null;
        String oldmodeling = gtm.makeXMLFromTurtleModeling(-1);
        if(checkFileForOpen(filetmp)) {
            try {
                FileInputStream fis = new FileInputStream(filetmp);
                int nb = fis.available();

                byte [] ba = new byte[nb];
                fis.read(ba);
                fis.close();
                s = new String(ba);
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be opened because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            // close current modeling
            closeTurtleModeling();

            // open the new TURTLE modeling
            newTurtleModeling();

            //TraceManager.addDev("Loading");
            // load the new TURTLE modeling
            // Issue #41: Moved to common method
            loadModels( gtm.mergeTURTLEGModeling(oldmodeling, s),  "merged" );
//            try {
//                //TraceManager.addDev("Merging");
//                gtm.enableUndo(false);
//                gtm.loadModelingFromXML(gtm.mergeTURTLEGModeling(oldmodeling, s));
//                gtm.enableUndo(true);
//                gtm.saveOperation(getCurrentSelectedPoint());
//                //gtm.saveOperation(tcdp);
//                frame.setTitle("TTool: " + file.getAbsolutePath());
//                makeLotosFile();
//
//                if (gtm.getCheckingErrors().size() > 0) {
//                    JOptionPane.showMessageDialog(frame, "Modeling could not be correctly merged", "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
//                }
//
//            } catch (MalformedModelingException mme) {
//                JOptionPane.showMessageDialog(frame, "Modeling could not be correctly merged", "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
//            }
//            dtree.forceUpdate();
        }
    }

    public void openNetworkProject() {
        boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
        if (b) {
            if (!saveBeforeAction("Save and Open", "Open")) {
                return;
            }
            /*  int back = JOptionPane.showConfirmDialog(frame, "Current modeling has not been saved\nDo you really want to open a new one ?", "To quit, or not to quit ?", JOptionPane.OK_CANCEL_OPTION);
                if (back == JOptionPane.CANCEL_OPTION) {
                return;
                }*/
        }

        JDialogLoadingNetworkModel jdlnm = new JDialogLoadingNetworkModel(frame, this, "Opening a network model", ConfigurationTTool.URL_MODEL);
        GraphicLib.centerOnParent(jdlnm, 700, 800);
        jdlnm.setVisible(true); // blocked until dialog has been closed
    }


    public void openProject() {
        // check if a current modeling is opened
        boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
        
        if (b) {
            if (!saveBeforeAction("Save and Open", "Open")) {
                return;
            }
            /*  int back = JOptionPane.showConfirmDialog(frame, "Current modeling has not been saved\nDo you really want to open a new one ?", "To quit, or not to quit ?", JOptionPane.OK_CANCEL_OPTION);
                if (back == JOptionPane.CANCEL_OPTION) {
                return;
                }*/
        }

        //jfc.setApproveButtonText("Open");
        int returnVal = jfc.showOpenDialog(frame);

        if (returnVal == JFileChooser.CANCEL_OPTION) {
            return;
        }

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfc.getSelectedFile();
            openProjectFromFile(file);
        }

    }

    
    
    
    
    public void openProjectFromFile(File _f) {
    	if (FileUtils.getExtension(_f).equals("ttool")) {
    		dir = _f;
    		SpecConfigTTool.setDirConfig(dir);
    		String filename = dir.getAbsolutePath() + "/" + dir.getName().replaceAll(".ttool", ".xml");
    		file = new File(filename);
    		config = new File(dir.getAbsolutePath() + "/project_config.xml");
    		try {
				SpecConfigTTool.loadConfigFile(config);
			} catch (MalformedConfigurationException e) {
				System.err.println(e.getMessage() + " : Can't load config file.");
			}
    	}
    	else {
    		dir = null;
    		config = null;
    		SpecConfigTTool.setBasicConfig(systemcOn);
    		file = _f;
    	}
        
    	if(checkFileForOpen(file)) {
            String s = null;

            try {
                FileInputStream fis = new FileInputStream(file);
                int nb = fis.available();

                byte [] ba = new byte[nb];
                fis.read(ba);
                fis.close();
                s = new String(ba);
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be opened because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return;
            }

            // close current modeling
            closeTurtleModeling();

            // open the new TURTLE modeling
            newTurtleModeling();

//            gtm.enableUndo(false);

            // Update configuration
            updateLastOpenFile(file);

            // Issue #41: Moved to common method
            loadModels( s, "loaded" );
//            // load the new TURTLE modeling
//            try {
//                gtm.loadModelingFromXML(s);
//                //gtm.saveOperation(tcdp);
//                frame.setTitle("TTool: " + file.getAbsolutePath());
//                makeLotosFile();
//
//                if (gtm.getCheckingErrors().size() > 0) {
//                    JOptionPane.showMessageDialog(frame, "Modeling could not be correctly loaded", "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
//
//                }
//            } catch (MalformedModelingException mme) {
//                JOptionPane.showMessageDialog(frame, "Modeling could not be correctly loaded", "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
//                frame.setTitle("TToolt: unamed project");
//            }
//            
//            gtm.enableUndo(true);
//            gtm.saveOperation(getCurrentSelectedPoint());
//            dtree.forceUpdate();
            if (getCurrentTDiagramPanel() != null)
              getCurrentTDiagramPanel().repaint();
        }
    }

    public void openLastProject() {
        // Check if a current modeling is opened
        boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
        if (b) {
            if (!saveBeforeAction("Save and Open", "Open")) {
                return;
            }
        }

        file = new File(ConfigurationTTool.LastOpenFile);

        if(checkFileForOpen(file)) {
            String s = null;

            try {
                FileInputStream fis = new FileInputStream(file);
                int nb = fis.available();

                byte [] ba = new byte[nb];
                fis.read(ba);
                fis.close();
                s = new String(ba);
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be opened because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            
            if (ConfigurationTTool.LastOpenFile.contains(".ttool/")) {
            	int last = 0;
            	for (int i = 0;i < ConfigurationTTool.LastOpenFile.length(); i++) {
            		if (ConfigurationTTool.LastOpenFile.charAt(i) == '/')
            			last = i;
            	}
            	dir = new File(ConfigurationTTool.LastOpenFile.substring(0, last));
            	SpecConfigTTool.setDirConfig(dir);
            	config = new File(dir.getAbsolutePath() + "/project_config.xml");
            	try {
    				SpecConfigTTool.loadConfigFile(config);
    			} catch (MalformedConfigurationException e) {
    				System.err.println(e.getMessage() + " : Can't load config file.");
    			}
            }
            else {
            	dir = null;
            	config = null;
            	SpecConfigTTool.setBasicConfig(systemcOn);
            }
            // close current modeling
            closeTurtleModeling();

            // open the new TURTLE modeling
            newTurtleModeling();

            gtm.enableUndo(false);

            // Issue #41: Moved to common method
            loadModels( s, "loaded" );
            //TraceManager.addDev("Loading");
            // load the new TURTLE modeling
//            try {
//                gtm.loadModelingFromXML(s);
//                //gtm.saveOperation(tcdp);
//                frame.setTitle("TTool: " + file.getAbsolutePath());
//                makeLotosFile();
//
//                if (gtm.getCheckingErrors().size() > 0) {
//                    JOptionPane.showMessageDialog(frame, "Modeling could not be correctly loaded", "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
//                }
//            }
//            catch (MalformedModelingException mme) {
//                JOptionPane.showMessageDialog(frame, "Modeling could not be correctly loaded ", "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
//                frame.setTitle("TTool: unamed project");
//            }
//
//            dtree.forceUpdate();
//            gtm.enableUndo(true);
//            gtm.saveOperation(getCurrentSelectedPoint());
        }

        //Added by Solange
        //TURTLEPanel tp = getCurrentTURTLEPanel();
        //gtm.generateLists((ProactiveDesignPanel)tp);
        //
    }
    
    private void loadModels( 	final String xmlModel,
    							final String actionMessage ) {
        gtm.enableUndo(false);

        // load the new TURTLE modeling
        try {
            gtm.loadModelingFromXML( xmlModel );
            frame.setTitle("TTool: " + file.getAbsolutePath());
            makeLotosFile();
            
            // Issue #41: Reselect the last tab
            mainTabbedPane.setSelectedIndex( mainTabbedPane.getTabCount() - 1 );

            if (gtm.getCheckingErrors().size() > 0) {
                JOptionPane.showMessageDialog(frame, "Modeling could not be correctly " + actionMessage, "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);

            }
        }
        catch (MalformedModelingException mme) {
            JOptionPane.showMessageDialog(frame, "Modeling could not be correctly " + actionMessage, "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
            frame.setTitle("TToolt: unnamed project");
        }
        gtm.enableUndo(true);
        gtm.saveOperation(getCurrentSelectedPoint());
        dtree.forceUpdate();
    }

    public void saveAsLibrary(String data) {
        File libfile;

        int returnVal = jfclib.showDialog(frame, "Export library");
        if(returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        libfile = jfclib.getSelectedFile();
        libfile = FileUtils.addFileExtensionIfMissing(libfile, TLibFilter.getExtension());

        if(checkFileForSave(libfile)) {
            try {
                if (data == null) {
                    throw new Exception("Selected data corrupted");
                }
                FileOutputStream fos = new FileOutputStream(libfile);
                fos.write(data.getBytes());
                fos.close();
                JOptionPane.showMessageDialog(frame, "Modeling was correctly saved under a TURTLE library named " + libfile.getName(), "Saving", JOptionPane.INFORMATION_MESSAGE);
                return;
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be saved because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
        }
    }

    public void saveAsProject() {
        File old = file;
        if (file == null) {
            // project never saved
            saveProject();
        } else {
            file = null;
            if (!saveProject()) {
                file = old;
            }
        }
        if (file != old) {
            //frame.setTitle("TURTLE Toolkit: " + file.getAbsolutePath());
            makeLotosFile();
        }
    }

    public boolean saveTIF() {
        int returnVal = jfctif.showSaveDialog(frame);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfctif.getSelectedFile();
            file = FileUtils.addFileExtensionIfMissing(file, TTIFFilter.getExtension());
        }

        if(checkFileForSave(file)) {
            String s = gtm.saveTIF();
            try {

                if (s == null) {
                    throw new Exception("TIF specification is void");

                }
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(s.getBytes());
                fos.close();

                return true;
            } catch (Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be saved because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
        }
        return false;
    }

    public boolean openTIF() {
        //jfc.setApproveButtonText("Open");
        int returnVal = jfctif.showOpenDialog(frame);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfctif.getSelectedFile();
        }

        String s = null;
        if(checkFileForOpen(file)) {
            try {
                FileInputStream fis = new FileInputStream(file);
                int nb = fis.available();

                byte [] ba = new byte[nb];
                fis.read(ba);
                fis.close();
                s = new String(ba);
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be opened because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
        }
        if (s == null) {
            return false;
        }
        TraceManager.addDev("Open TIF =" + s);
        if (gtm == null) {
            newTurtleModeling();
        }
        return gtm.openTIF(s);

    }

    public boolean openSD() {
        //jfc.setApproveButtonText("Open");
        int returnVal = jfcmsc.showOpenDialog(frame);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfcmsc.getSelectedFile();
        }

        String s = null;
        if(checkFileForOpen(file)) {
            try {
                FileInputStream fis = new FileInputStream(file);
                int nb = fis.available();

                byte [] ba = new byte[nb];
                fis.read(ba);
                fis.close();
                s = new String(ba);
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be opened because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
        }
        if (s == null) {
            return false;
        }
        TraceManager.addDev("Open SD =" + s);
        if (gtm == null) {
            newTurtleModeling();
        }
        return gtm.openSD(s);

    }

    private int createFileDialog() {
    	int returnVal = jfc.showSaveDialog(frame);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
        	dir = jfc.getSelectedFile();
        	dir = FileUtils.addFileExtensionIfMissing(dir, "ttool");
        	dir.mkdir();
        	SpecConfigTTool.setDirConfig(dir);
        	config = SpecConfigTTool.createProjectConfig(dir);
        	try {
				SpecConfigTTool.loadConfigFile(config);
			} catch (MalformedConfigurationException e) {
				System.err.println(e.getMessage() + " : Can't load config file.");
			}
        	String newname = FileUtils.removeFileExtension(dir.getName());
            file = new File(dir, newname);
            file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension());
        }
        
        return returnVal;
    }
    
    private void createFile() {
        newTurtleModeling();
    	frame.setTitle(file.getName());
    	try {
    		if (gtm == null) {
    			throw new Exception("Internal model Error 1");
    		}
    		String s = gtm.makeXMLFromTurtleModeling(-1);
    		if (s == null) {
    			throw new Exception("Internal model Error 2");
    		}
    		FileOutputStream fos = new FileOutputStream(file);
    		fos.write(s.getBytes());
    		fos.close();
    		updateLastOpenFile(file);
    		setMode(MODEL_SAVED);
    		String title = "TTool: " + file.getAbsolutePath();
    		if (!frame.getTitle().equals(title)) {
    			frame.setTitle(title);
    		}
    		if (lotosfile == null) {
    			makeLotosFile();
    		}
    	}
        catch(Exception e) {
            JOptionPane.showMessageDialog(frame, "File could not be saved because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
        }
    }
    	
    protected boolean saveProject() {
        if (file == null) {
        	if (dir != null)
        		createFileDialog();
        	else {
        		int returnVal = jfc.showSaveDialog(frame);
                if(returnVal == JFileChooser.APPROVE_OPTION) {
                    file = jfc.getSelectedFile();
                    file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension());
                }
        	}
        }

        if( checkFileForSave(file)) {
            try {
                if (gtm == null) {
                    throw new Exception("Internal model Error 1");
                }
                String s = gtm.makeXMLFromTurtleModeling(-1);
                if (s == null) {
                    throw new Exception("Internal model Error 2");
                }
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(s.getBytes());
                fos.close();
                updateLastOpenFile(file);
                setMode(MODEL_SAVED);
                String title = "TTool: " + file.getAbsolutePath();
                if (!frame.getTitle().equals(title)) {
                    frame.setTitle(title);
                }
                if (lotosfile == null) {
                    makeLotosFile();
                }
                return true;
            } catch(Exception e) {
                JOptionPane.showMessageDialog(frame, "File could not be saved because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
        }
        return false;
    }

    public boolean checkFileForOpen(File file) {
        boolean ok = true;
        String pb = "";

        //TraceManager.addDev("File path=" + file.getPath() + " name=" + file.getName());

        if (file == null) {
            return false;
        }

        try {
            if (file != null) {
                if (!file.exists()) {
                    pb  = "File " + file + " doesn't exist";
                    ok = false;
                }
                if ((ok == true) && (!file.canRead())) {
                    pb  = "File is read protected";
                    ok = false;
                }
            }
        } catch (Exception e) {
            ok = false;
            pb = e.getMessage();
        }
        if (ok == false) {
            file = null;
            JOptionPane.showMessageDialog(frame, pb, "File Error", JOptionPane.INFORMATION_MESSAGE);
        }
        return ok;
    }

    public boolean checkFileForSave(File file) {
        boolean ok = true;
        String pb = "";

        if (file == null) {
            return false;
        }

        try {
            if (file != null) {
                if (!file.exists()) {
                    if (!file.createNewFile()) {
                        pb  = "File could not be created";
                        ok = false;
                    }
                    if (!file.canWrite()) {
                        pb  = "File is write protected";
                        ok = false;
                    }
                }
            }
        } catch (Exception e) {
            ok = false;
            pb = e.getMessage();
        }
        if (ok == false) {
            file = null;
            JOptionPane.showMessageDialog(frame, pb, "File Error", JOptionPane.INFORMATION_MESSAGE);
        }
        return ok;
    }

    public void saveLastLotos() {
        saveLotosSpec(gtm.getLastRTLOTOSSpecification());
    }

    public void saveLastDTA() {
        saveDTA(gtm.getLastTextualDTA(), gtm.getLastGraphicalDTA());
    }

    public void saveLastRG() {
        saveRG(gtm.getLastTextualRG(), gtm.getLastGraphicalRG());
    }

    public void saveLastTLSA() {
        saveTLSA(gtm.getLastTextualTLSA(), gtm.getLastGraphicalTLSA());
    }

    public void saveLastRGAUT() {
        saveRGAUT(gtm.getLastTextualRGAUT(), gtm.getLastGraphicalRGAUT());
    }

    public void saveLastRGAUTProj() {
        saveRGAUT(gtm.getLastTextualRGAUTProj(), gtm.getLastGraphicalRGAUTProj());
    }

    public void saveLastModifiedRG() {
        saveRGAUT(modifiedaut, modifiedautdot);
    }

    public void importLibrary() {
        //TDiagramPanel tdp1 = ((TDiagramPanel)(designPanels.elementAt(mainDesignTabbedPane.getSelectedIndex()));
        //tdp1.insertLibrary(tdp1.getMinX(), tdp1.getMinY());
        TDiagramPanel tdp1 = getCurrentTDiagramPanel();
        if (tdp1 != null) {
            tdp1.insertLibrary(tdp1.getMinX(), tdp1.getMinY());
        }
    }

    public void exportLibrary() {
        //TDiagramPanel tdp1 = (TDiagramPanel)(designPanels.elementAt(mainDesignTabbedPane.getSelectedIndex()));
        //tdp1.saveAsLibrary();
        getCurrentTDiagramPanel().saveAsLibrary();
    }

    public void makeLotosFile() {
        String s = file.getAbsolutePath();
        int l = s.length();
        String myFile = s.substring(0, l-4);
        lotosfile = new File(myFile + ".lot");
        simfile = new File(myFile + ".sim");
        dtafile = new File(myFile + ".dta");
        dtadotfile = new File(myFile + ".dta.dot");
        rgfile = new File(myFile + ".rg");
        rgdotfile = new File(myFile + ".rg.dot");
        tlsafile = new File(myFile + ".tlsa");
        tlsadotfile = new File(myFile + ".dot.tlsa");
        rgautfile = new File(myFile + ".aut");
        fc2file = new File(myFile + ".fc2");
        bcgfile = new File(myFile + ".bcg");
        rgautdotfile = new File(myFile + ".aut.dot");
        rgautprojfile = new File(myFile + "_proj.aut");
        rgautprojdotfile = new File(myFile + "_proj.aut.dot");
    }

    /**
     * Display "Modeling has not been saved" window
     * @author Fabien Tessier
     * @param str1 (text for the left button)
     * @param str2 (text for the right button)
     * @return boolean (false = cancel, true = perform action)
     */
    public boolean saveBeforeAction(String str1, String str2) {
    	Object[] options = { str1, str2, "CANCEL" }; //Texts for buttons
    	JOptionPane optionPane = new JOptionPane("Modeling has not been saved", JOptionPane.WARNING_MESSAGE, JOptionPane.YES_NO_CANCEL_OPTION, null, options, options[0]);
        JDialog dialog = optionPane.createDialog(activetdp, "Warning"); //Use JDialog to enable navigation with arrow keys
        dialog.setLocation((frame.getSize().width)/2 - dialog.getWidth()/2, (frame.getSize().height)/2 - dialog.getHeight()/2);
        UIManager.put("Button.defaultButtonFollowsFocus", Boolean.TRUE);
        
        Set<AWTKeyStroke> forwardTraversalKeys = new HashSet<AWTKeyStroke>(dialog.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
        forwardTraversalKeys.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.VK_UNDEFINED));
        dialog.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardTraversalKeys); //Navigation with right arrow

        Set<AWTKeyStroke> backwardTraversalKeys = new HashSet<AWTKeyStroke>(dialog.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
        backwardTraversalKeys.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_LEFT, KeyEvent.VK_UNDEFINED));
        dialog.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardTraversalKeys); //Navigation with left arrow
        
        dialog.setVisible(true);
        dialog.dispose();
        String ret = (String) optionPane.getValue(); //Get value of the pressed button
        if (ret == null || ret.equals("CANCEL")) {
            return false;
        }
        
        if (ret.equals(str1)) {
        	saveProject();
        }
        return true;
    }

    public void quitApplication() {
        boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
        if (b) {
            if (saveBeforeAction("SAVE and QUIT", "QUIT now") == false) {
                return;
            }

        }

        ConfigurationTTool.LastWindowAttributesX = "" + frame.getLocation().x;
        ConfigurationTTool.LastWindowAttributesY = "" + frame.getLocation().y;
        ConfigurationTTool.LastWindowAttributesWidth = "" + frame.getSize().width;
        ConfigurationTTool.LastWindowAttributesHeight = "" + frame.getSize().height;

        if (frame.getExtendedState() == Frame.MAXIMIZED_BOTH) {
            ConfigurationTTool.LastWindowAttributesMax = "true";
        } else {
            ConfigurationTTool.LastWindowAttributesMax = "false";
        }

        try {
            if (ConfigurationTTool.LastOpenFileDefined) {
            	if (dir != null)
            		saveConfig();
                ConfigurationTTool.saveConfiguration();
                //TraceManager.addDev("Configuration written to file");
            }
        } catch (Exception e) {}


        System.exit(0);
    }


    public void cut() {
        getCurrentTDiagramPanel().makeCut();
    }

    public void copy() {
        getCurrentTDiagramPanel().makeCopy();
    }

    public void paste() {
        int x = Math.min(Math.max(getCurrentTDiagramPanel().getMinX(), getCurrentTDiagramPanel().currentX), getCurrentTDiagramPanel().getMaxX());
        int y = Math.min(Math.max(getCurrentTDiagramPanel().getMinY(), getCurrentTDiagramPanel().currentY), getCurrentTDiagramPanel().getMaxY());
        getCurrentTDiagramPanel().makePaste(x, y);
    }

    public void delete() {
        getCurrentTDiagramPanel().makeDelete();
    }

    public void backward() {
        //TraceManager.addDev("backward");
        gtm.backward();
        setMode(MODEL_CHANGED);
        dtree.toBeUpdated();
    }

    public void forward() {
        //TraceManager.addDev("forward");
        gtm.forward();
        setMode(MODEL_CHANGED);
        dtree.toBeUpdated();
    }

    public void zoomMore() {
        zoom(1.25);
    }

    public void zoomLess() {
        zoom(0.8);
    }

    public void zoom(double multFactor) {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        tdp.setZoom(tdp.getZoom() * multFactor);
       // tdp.updateComponentsAfterZoom();
        updateZoomInfo();
    }

    public void updateZoomInfo() {
        String s = "";
        int zoom = (int)(getCurrentTDiagramPanel().getZoom()*100);
        if (zoom < 100) {
            s = "0" + zoom + "%";
        } else {
            s += zoom + "%";
        }
        //TraceManager.addDev("Seeting zoom in " + getCurrentTDiagramPanel());
        actions[TGUIAction.ACT_SHOW_ZOOM].setName(TGUIAction.ACT_SHOW_ZOOM, s);
    }

    public void firstDiag() {
        getCurrentJTabbedPane().setSelectedIndex(0);
    }

    public void backDiag() {
        getCurrentJTabbedPane().setSelectedIndex(Math.max(0, getCurrentJTabbedPane().getSelectedIndex() - 1));
    }

    public void nextDiag() {
        getCurrentJTabbedPane().setSelectedIndex(Math.min(getCurrentJTabbedPane().getTabCount(), getCurrentJTabbedPane().getSelectedIndex() + 1));
    }

    public void lastDiag() {
        getCurrentJTabbedPane().setSelectedIndex(getCurrentJTabbedPane().getTabCount() - 1);
    }

    //@author: Huy TRUONG
    //open a new External Search Dialog
    public void showExternalSearch(){
        String textSearchField = mainBar.search.getText();
        List<String> listSearch = new ArrayList<String>();

        if (null == this.searchBox) {
            if (getCurrentTDiagramPanel()!=null) {
                if (getCurrentTDiagramPanel().tdmm.getSelectComponents().size() == 0) {
                    listSearch.add(textSearchField);
                } else {
                    listSearch = getCurrentTDiagramPanel().tdmm.getSelectComponents();
                    listSearch.add(0, textSearchField);

                }
                this.searchBox = new JDialogSearchBox(frame, "External Search", listSearch, getCurrentTDiagramPanel().tdmm);
            }else
                this.searchBox = new JDialogSearchBox(frame, "External Search", new ArrayList<String>());

        }
        else {
            if (this.searchBox.isShowing()) {
                this.searchBox.setVisible( true );
            }
            else {
                this.searchBox = null;
                showExternalSearch();
            }
        }
    }

    public void doInternalSearch(){
        search(mainBar.search.getText());
    }

    public void aboutVersion() {
        JFrameBasicText jft = new JFrameBasicText("About TTool ...", DefaultText.getAboutText(), IconManager.imgic324);
        jft.setIconImage(IconManager.img8);
        GraphicLib.centerOnParent(jft, 740, 800 );
        jft.setVisible(true);

    }

    public void showTToolConfiguration() {
        JFrameBasicText jft = new JFrameBasicText("Your configuration of TTool ...", ConfigurationTTool.getConfiguration(systemcOn), IconManager.imgic76);
        jft.setIconImage(IconManager.img8);
        //jft.setSize(700, 800);
        GraphicLib.centerOnParent(jft, 700, 800 );
        jft.setVisible(true);

    }

    public void aboutTURTLE() {
        BrowserControl.startBrowerToURL("http://ttool.telecom-paristech.fr/");
    }

    public void helpTURTLE() {
        BrowserControl.startBrowerToURL("http://ttool.telecom-paristech.fr/avatar.html");
    }

    public void helpSysMLSec() {
        BrowserControl.startBrowerToURL("http://sysml-sec.telecom-paristech.fr/");
    }

    public void helpDIPLODOCUS() {
        BrowserControl.startBrowerToURL("http://ttool.telecom-paristech.fr/diplodocus.html");
    }

    public void oneClickLOTOSRG() {
        // boolean ret;
        if (!checkModelingSyntax(true)) {
            TraceManager.addDev("Syntax error");
            return;
        }

        if (!generateLOTOS(true)) {
            TraceManager.addDev("Generate LOTOS: error");
            return;
        }

        formalValidation(true);
    }

    public void oneClickRTLOTOSRG() {
        // boolean ret;
        if (!checkModelingSyntax(true)) {
            TraceManager.addDev("Syntax error");
            return;
        }

        if (!generateRTLOTOS(true)) {
            TraceManager.addDev("Generate RT-LOTOS: error");
            return;
        }

        formalValidation(true);
    }

    public void modelChecking() {
        checkModelingSyntax(false);
    }

    public boolean checkModelingSyntax(String panelName, boolean automatic) {
        TURTLEPanel tp = getTURTLEPanel(panelName);
        if (tp != null) {
            return checkModelingSyntax(tp, automatic);
        }

        return false;
    }

    public boolean checkModelingSyntax(boolean automatic) {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp != null) {
            return checkModelingSyntax(tp, automatic);
        }

        return false;
    }

    public boolean checkModelingSyntax(TURTLEPanel tp, boolean automatic) {
        //String msg = "";
        boolean b = false;
        boolean ret = false;

        if (file == null) {
            JOptionPane.showMessageDialog(frame,
                                          "The project must be saved before any simulation or formal verification can be performed",
                                          "Syntax analysis failed",
                                          JOptionPane.INFORMATION_MESSAGE);
            return false;
        }


        if (tp instanceof AnalysisPanel) {
            try {
                b = gtm.buildTURTLEModelingFromAnalysis((AnalysisPanel)tp);
            } catch (AnalysisSyntaxException ae) {
                //TraceManager.addDev("Exception AnalysisSyntaxException");
                //msg = ae.getMessage();
                b = false;
            }
            if (b) {
                setMode(MainGUI.MODEL_OK);
                setMode(MainGUI.GEN_DESIGN_OK);
                ret = true;
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "0 error, " + getCheckingWarnings().size() + " warning(s). You can now generate a corresponding formal (RT-LOTOS) specification or executable code (Java)",
                                                  "Syntax analysis successful on analysis diagrams",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            } else {
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "The TURTLE Analysis contains several errors",
                                                  "Syntax analysis failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
                setMode(MainGUI.GEN_DESIGN_OK);
                //setMode(MainGUI.MODEL_OK);
            }



        } else if (tp instanceof DesignPanel) {
            //Design
            DesignPanel dp = (DesignPanel)tp;
            JDialogModelChecking.validated = dp.validated;
            JDialogModelChecking.ignored = dp.ignored;
            LinkedList<TClassInterface> tclassesToValidate = new LinkedList<TClassInterface> ();
            JDialogModelChecking jdmc = new JDialogModelChecking(frame, tclassesToValidate,dp.tcdp.getComponentList(), "Choosing Tclasses to validate");
            if (!automatic) {
                GraphicLib.centerOnParent(jdmc);
                jdmc.setVisible(true); // blocked until dialog has been closed
            } else {
                jdmc.closeDialog();
            }
            boolean overideTifChecking = jdmc.getOverideSyntaxChecking();
            if (tclassesToValidate.size() > 0) {
                dp.validated = JDialogModelChecking.validated;
                dp.ignored = JDialogModelChecking.ignored;
                b = gtm.checkTURTLEModeling(tclassesToValidate, dp, overideTifChecking);
                if (b) {
                    ret = true;
                    setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_DESIGN_OK);
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "0 error, " + getCheckingWarnings().size() + " warning(s). You can now generate a corresponding formal (RT-LOTOS) specification or executable code (Java)",
                                                      "Syntax analysis successful on design diagrams",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "The TURTLE Modeling contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }

        } else if (tp instanceof DeploymentPanel) {
            DeploymentPanel dp = (DeploymentPanel) tp;
            b = gtm.translateDeployment(dp);
            if (b) {
                setMode(MainGUI.MODEL_OK);
                ret = true;
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "0 error, " + getCheckingWarnings().size() + " warning(s). You can now generate a corresponding formal (RT-LOTOS) specification or executable code (Java)",
                                                  "Syntax analysis successful on deployment diagrams",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            } else {
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "The TURTLE deployment contains several errors",
                                                  "Syntax analysis failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            }

            // AttackTree
        } else if (tp instanceof AttackTreePanel) {
            AttackTreePanel atp = (AttackTreePanel) tp;
            b = gtm.translateAttackTreePanel(atp);
            if (b) {
                setMode(MainGUI.ATTACKTREE_SYNTAXCHECKING_OK);
                ret = true;
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "0 error, " + getCheckingWarnings().size() + " warning(s)",
                                                  "Syntax analysis successful on attack tree",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            } else {
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "The Attack tree contains several errors",
                                                  "Syntax analysis failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            }


            // AVATAR
        } else if (tp instanceof AvatarDesignPanel) {
            //Design
            AvatarDesignPanel adp = (AvatarDesignPanel)tp;
            //JDialogModelChecking.validated = adp.validated;
            //JDialogModelChecking.ignored = adp.ignored;
            LinkedList<AvatarBDStateMachineOwner> blocksToValidate = new LinkedList<AvatarBDStateMachineOwner> ();
            JDialogSelectAvatarBlock jdmc = new JDialogSelectAvatarBlock(frame, blocksToValidate, adp.getAvatarBDPanel().getFullStateMachineOwnerList(), "Choosing blocks to validate", adp.getValidated(), adp.getIgnored(), adp.getOptimized());
            if (!automatic) {
                GraphicLib.centerOnParent(jdmc);
                jdmc.setVisible(true); // blocked until dialog has been closed
            } else {
                jdmc.closeDialog();
            }

            if (jdmc.hasBeenCancelled()) {
                return false;
            }

            adp.resetModelBacktracingProVerif();

            adp.setValidated(jdmc.getValidated());
            adp.setIgnored(jdmc.getIgnored());
            adp.setOptimized(jdmc.getOptimized());


            boolean optimize = jdmc.getOptimized();
            if (blocksToValidate.size() > 0) {
                /*adp.validated = JDialogModelChecking.validated;
                  adp.ignored = JDialogModelChecking.ignored;*/
                b = gtm.checkAvatarDesign(blocksToValidate, adp, optimize);
                if (b) {
                    ret = true;
                    setMode(MainGUI.AVATAR_SYNTAXCHECKING_OK);
                    //setMode(MainGUI.GEN_DESIGN_OK);
                    /*
                      if (!automatic) {
                      JOptionPane.showMessageDialog(frame,
                      "0 error, " + getCheckingWarnings().size() + " warning(s). You can now perform simulations or formal proofs (UPPAAL)",
                      "Syntax analysis successful on avatar design diagrams",
                      JOptionPane.INFORMATION_MESSAGE);
                      }
                    */
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "The Avatar modeling contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.ERROR_MESSAGE);
                    }
                }
            }


            // NC
        }
        //DG 6.2. 2017

        else if (tp instanceof ADDPanel) {
            //Design
            AvatarDesignPanel adp = getFirstAvatarDesignPanelFound();

            //JDialogModelChecking.validated = adp.validated;
            //JDialogModelChecking.ignored = adp.ignored;
            LinkedList<AvatarBDStateMachineOwner> blocksToValidate = new LinkedList<AvatarBDStateMachineOwner> ();
            JDialogSelectAvatarBlock jdmc = new JDialogSelectAvatarBlock(frame, blocksToValidate, adp.getAvatarBDPanel().getFullStateMachineOwnerList(), "Choosing blocks to validate", adp.getValidated(), adp.getIgnored(), adp.getOptimized());
            if (!automatic) {
                GraphicLib.centerOnParent(jdmc);
                jdmc.setVisible(true); // blocked until dialog has been closed
            } else {
                jdmc.closeDialog();
            }

            if (jdmc.hasBeenCancelled()) {
                return false;
            }

            adp.resetModelBacktracingProVerif();

            adp.setValidated(jdmc.getValidated());
            adp.setIgnored(jdmc.getIgnored());
            adp.setOptimized(jdmc.getOptimized());


            boolean optimize = jdmc.getOptimized();
            if (blocksToValidate.size() > 0) {
                /*adp.validated = JDialogModelChecking.validated;
                  adp.ignored = JDialogModelChecking.ignored;*/
                b = gtm.checkAvatarDesign(blocksToValidate, adp, optimize);
                if (b) {
                    ret = true;
                    setMode(MainGUI.AVATAR_SYNTAXCHECKING_OK);
                    //setMode(MainGUI.GEN_DESIGN_OK);
                    /*
                      if (!automatic) {
                      JOptionPane.showMessageDialog(frame,
                      "0 error, " + getCheckingWarnings().size() + " warning(s). You can now perform simulations or formal proofs (UPPAAL)",
                      "Syntax analysis successful on avatar design diagrams",
                      JOptionPane.INFORMATION_MESSAGE);
                      }
                    */
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "The Avatar modeling contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.ERROR_MESSAGE);
                    }
                }
            }


            // NC
        }


        //fin DG
        else if (tp instanceof NCPanel) {
            NCPanel ncp = (NCPanel) tp;
            b = gtm.translateNC(ncp);
            if (b) {
                //setMode(MainGUI.MODEL_OK_NC);
                ret = true;
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "0 error, " + getCheckingWarnings().size() + " warning(s)",
                                                  "Syntax analysis successful on NC diagram",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            } else {
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "The NC diagram contains several errors",
                                                  "Syntax analysis failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            }


        } else if (tp instanceof TMLDesignPanel) {
            TMLDesignPanel tmldp = (TMLDesignPanel)tp;
            JDialogSelectTMLTask.validated = tmldp.validated;
            JDialogSelectTMLTask.ignored = tmldp.ignored;
            Vector<TGComponent> tmlTasksToValidate = new Vector<TGComponent>();
            JDialogSelectTMLTask jdstmlt = new JDialogSelectTMLTask(frame, tmlTasksToValidate, tmldp.tmltdp.getComponentList(), "Choosing TML tasks to validate");
            if (!automatic) {
                GraphicLib.centerOnParent(jdstmlt);
                jdstmlt.setVisible(true); // Blocked until dialog has been closed
            } else {
                jdstmlt.closeDialog();
            }
            if (tmlTasksToValidate.size() > 0) {
                tmldp.validated = JDialogSelectTMLTask.validated;
                tmldp.ignored = JDialogSelectTMLTask.ignored;
                b = gtm.translateTMLDesign(tmlTasksToValidate, tmldp, jdstmlt.getOptimize());
                if (b) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "0 error, " + getCheckingWarnings().size() + " warning(s). You can now generate make proofs (safety, security and performance) or generate executable code",
                                                      "Syntax analysis successful on TML designs",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "The TML design contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        } else if (tp instanceof TMLComponentDesignPanel) {
            TMLComponentDesignPanel tmlcdp = (TMLComponentDesignPanel)tp;
            JDialogSelectTMLComponent.validated = tmlcdp.validated;
            JDialogSelectTMLComponent.ignored = tmlcdp.ignored;
            Vector<TGComponent> tmlComponentsToValidate = new Vector<TGComponent>();
            JDialogSelectTMLComponent jdstmlc = new JDialogSelectTMLComponent(frame, tmlComponentsToValidate, tmlcdp.tmlctdp.getComponentList(), "Choosing TML components to validate");
            if (!automatic) {
                GraphicLib.centerOnParent(jdstmlc);
                jdstmlc.setVisible(true); // Blocked until dialog has been closed
            } else {
                jdstmlc.closeDialog();
            }
            if (tmlComponentsToValidate.size() > 0) {
                tmlcdp.validated = JDialogSelectTMLComponent.validated;
                tmlcdp.ignored = JDialogSelectTMLComponent.ignored;
                b = gtm.translateTMLComponentDesign(tmlComponentsToValidate, tmlcdp, jdstmlc.getOptimize());
                if (b) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "0 error, " + getCheckingWarnings().size() + " warning(s). You can now generate make proofs (safety, security and performance) or generate executable code",
                                                      "Syntax analysis successful on TML designs",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "The TML design contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
	}  else if (tp instanceof SystemCAMSPanel) { //Ajout CD
	    
	    SystemCAMSPanel camsp = (SystemCAMSPanel)tp;
            JDialogSelectSystemCAMSBlock.validated = camsp.validated;
            JDialogSelectSystemCAMSBlock.ignored = camsp.ignored;
	    Vector<TGComponent> camsBlocksToValidate = new Vector<TGComponent>();
	    JDialogSelectSystemCAMSBlock jdsscb = new JDialogSelectSystemCAMSBlock(frame, camsBlocksToValidate, camsp.camsbdp.getComponentList(),"Block Parameter");
            if (!automatic) {
                GraphicLib.centerOnParent(jdsscb);
                jdsscb.setVisible(true);
            } else {
                jdsscb.closeDialog();
	    }

	    if (camsBlocksToValidate.size() > 0) {
                camsp.validated = JDialogSelectSystemCAMSBlock.validated;
                camsp.ignored = JDialogSelectSystemCAMSBlock.ignored;
                if (b) {
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "0 error, " + getCheckingWarnings().size() + " warning(s). You can now perform verifications (safety, security, performance) or generate executable code",
                                                      "Syntax analysis successful on SystemC-AMS",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "The SystemC-AMS contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                }
	    }

	} else if (tp instanceof TMLArchiPanel) {
            tmlap = (TMLArchiPanel)tp;
            JDialogSelectTMLNodes.validated = tmlap.validated;
            JDialogSelectTMLNodes.ignored = tmlap.ignored;
            Vector<TGComponent> tmlNodesToValidate = new Vector<TGComponent>();
            JDialogSelectTMLNodes jdstmln = new JDialogSelectTMLNodes(frame, tmlNodesToValidate, tmlap.tmlap.getComponentList(), "Choosing Nodes to validate", tmlap.tmlap.getMasterClockFrequency());
            if (!automatic) {
                GraphicLib.centerOnParent(jdstmln);
                jdstmln.setVisible(true); // Blocked until dialog has been closed
            } else {
                jdstmln.closeDialog();
            }
            tmlap.tmlap.setMasterClockFrequency(jdstmln.getClock());

            if (tmlNodesToValidate.size() > 0) {
                tmlap.validated = JDialogSelectTMLNodes.validated;
                tmlap.ignored = JDialogSelectTMLNodes.ignored;
                //TraceManager.addDev("Ready to generate TML mapping!");
                b = gtm.checkSyntaxTMLMapping(tmlNodesToValidate, tmlap, jdstmln.getOptimize());
                if (b) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "0 error, " + getCheckingWarnings().size() + " warning(s). You can now perform verifications (safety, security, performance) or generate executable code",
                                                      "Syntax analysis successful on TML mapping",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                                      "The TML mapping contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        }
        else if( tp instanceof TMLCommunicationPatternPanel ) {
            TMLCommunicationPatternPanel tmlcpp = (TMLCommunicationPatternPanel) tp;
            JDialogSelectCPDiagrams.validated =  tmlcpp.validated;
            JDialogSelectCPDiagrams.ignored =  tmlcpp.ignored;
            Vector<TGComponent> tmlDiagramsToValidate = new Vector<TGComponent>();
            JDialogSelectCPDiagrams jdscpd = new JDialogSelectCPDiagrams( frame, tmlDiagramsToValidate, tmlcpp.tmlcpp.getComponentList(),
                                                                          "Choosing Diagrams to validate" );
            if( !automatic ) {
                GraphicLib.centerOnParent( jdscpd );
                jdscpd.setVisible( true ); // Blocked until dialog has been closed
            }
            else {
                jdscpd.closeDialog();
            }
            if( tmlDiagramsToValidate.size() > 0 ) {
                tmlcpp.validated = JDialogSelectCPDiagrams.validated;
                tmlcpp.ignored = JDialogSelectCPDiagrams.ignored;
                TraceManager.addDev("Ready to generate TML code for Communication Patterns!");
                b = gtm.checkSyntaxTMLCP( tmlDiagramsToValidate, tmlcpp, jdscpd.getOptimize() );    //Fills a data structure
                //translateTMLComponentDesign
                //and should say if it is correct or contains error in the return variable b
                if( b ) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode( MainGUI.GEN_SYSTEMC_OK );
                    setMode( MainGUI.MODEL_OK );
                    ret = true;
                    if( !automatic ) {
                        JOptionPane.showMessageDialog( frame, "0 error, " + getCheckingWarnings().size() +
                                                       " warning(s). You can now perform verifications (safety, security, performance) or generate executable code",
                                                       "Syntax analysis successful on TML mapping",
                                                       JOptionPane.INFORMATION_MESSAGE );
                    }
                }
                else {
                    if( !automatic ) {
                        JOptionPane.showMessageDialog( frame, "The Communication Patterns design contains several errors", "Syntax analysis failed",
                                                       JOptionPane.INFORMATION_MESSAGE );
                    }
                }
            }
        }
        else if( tp instanceof RequirementPanel ) {
            TDiagramPanel tdp = getCurrentTDiagramPanel();
            if (!(tdp instanceof RequirementDiagramPanel)) {
                if (tdp instanceof EBRDDPanel) {

                    b = gtm.makeEBRDD((EBRDDPanel)tdp);
                    if (b) {
                        JOptionPane.showMessageDialog(frame,
                                                      "0 error, " + getCheckingWarnings().size() + " warning(s).",
                                                      "Syntax analysis successful on EBRDD",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(frame,
                                                      "The EBRDD contains several errors",
                                                      "Syntax analysis failed",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    return ret;
                }
                //TraceManager.addDev("No syntax checking for EBRDD: not yet implemented");
            } else {
                RequirementDiagramPanel rdp= (RequirementDiagramPanel)tdp;
                JDialogSelectRequirements.validated = rdp.validated;
                JDialogSelectRequirements.ignored = rdp.ignored;
                Vector<Requirement> reqsToValidate = new Vector<Requirement>();
                JDialogSelectRequirements jdsreq = new JDialogSelectRequirements(frame, reqsToValidate, rdp.getComponentList(), "Choosing requirements to verify");

                if (!automatic) {
                    GraphicLib.centerOnParent(jdsreq);
                    jdsreq.setVisible(true); // Blocked until dialog has been closed
                }

                if (reqsToValidate.size() > 0) {
                    rdp.validated = JDialogSelectRequirements.validated;
                    rdp.ignored = JDialogSelectRequirements.ignored;
                    b = gtm.generateTMsForRequirementAnalysis(reqsToValidate, rdp);
                    if (b) {
                        //setMode(MainGUI.GEN_SYSTEMC_OK);
                        setMode(MainGUI.REQ_OK);
                        ret = true;
                        if (!automatic) {
                            JOptionPane.showMessageDialog(frame,
                                                          "0 error, " + getCheckingWarnings().size() + " warning(s). You can now verify requirements' satisfiability",
                                                          "Syntax analysis successful on requirements",
                                                          JOptionPane.INFORMATION_MESSAGE);
                        }

                    } else {
                        if (!automatic) {
                            JOptionPane.showMessageDialog(frame,
                                                          "The requirement diagram contains several errors",
                                                          "Syntax analysis failed",
                                                          JOptionPane.INFORMATION_MESSAGE);
                        }
                    }
                }
            }
        } else if (tp instanceof ProactiveDesignPanel) {
            // TraceManager.addDev("!!!!!!!!!!!!1");
            //newTurtleModeling();
            b = gtm.translateProactiveDesign((ProactiveDesignPanel)tp);
            if (b) {
                //setMode(MainGUI.MODEL_OK);
                //setMode(MainGUI.GEN_SYSTEMC_OK);
                setMode(MainGUI.MODEL_OK);
                ret = true;
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "0 error, " + getCheckingWarnings().size() + " warning(s). You can now generate a LOTOS,specification",
                                                  "Syntax analysis successful on Proactive design",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }

            } else {
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "The Proactive design contains several errors",
                                                  "Syntax analysis failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }

            }
        } else if (tp instanceof TURTLEOSDesignPanel) {
            TraceManager.addDev("TURTLEOS Design Panel");
            //TURTLEOSDesignPanel tosdp = (TURTLEOSDesignPanel) tp;
            b = gtm.translateTURTLEOSDesign((TURTLEOSDesignPanel)tp);
            if (b) {
                setMode(MainGUI.MODEL_OK);
                ret = true;
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "0 error, " + getCheckingWarnings().size() + " warning(s). You can now generate a corresponding formal specification or executable code (Java)",
                                                  "Syntax analysis successful on deployment diagrams",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            } else {
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                                                  "The TURTLE deployment contains several errors",
                                                  "Syntax analysis failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                }
            }
        }
        //dtree.toBeUpdated();
        dtree.forceUpdate();
        return ret;
    }

    public LinkedList<TAttribute> getAllAttributes() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        String name =  getCurrentTDiagramPanel().getName();

        return this.getAllAttributes (tp, name);
    }

    public LinkedList<TAttribute> getAllAttributes(TURTLEPanel tp, String name) {
        if (tp == null) {
            return null;
        }

        if (!(tp instanceof AvatarDesignPanel)) {
            return null;
        }
        AvatarDesignPanel adp = (AvatarDesignPanel)tp;

        return adp.getAllAttributes(name);
    }


    public LinkedList<AvatarMethod> getAllMethods() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {
            return null;
        }

        if (!(tp instanceof AvatarDesignPanel)) {
            return null;
        }
        AvatarDesignPanel adp = (AvatarDesignPanel)tp;

        String name =  getCurrentTDiagramPanel().getName();

        return adp.getAllMethods(name);
    }

    public LinkedList<AvatarSignal> getAllSignals() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        String name =  getCurrentTDiagramPanel().getName();
        return this.getAllSignals (tp, name);
    }

    public LinkedList<AvatarSignal> getAllSignals(TURTLEPanel tp, String name) {
        if (tp == null) {
            return null;
        }
        if (!(tp instanceof AvatarDesignPanel)) {
            return null;
        }
        AvatarDesignPanel adp = (AvatarDesignPanel)tp;

        return adp.getAllSignals(name);
    }


    public List<AvatarBDLibraryFunction> getAllLibraryFunctions () {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        return this.getAllLibraryFunctions (tp);
    }

    public List<AvatarBDLibraryFunction> getAllLibraryFunctions (TURTLEPanel tp) {
        String name =  getCurrentTDiagramPanel().getName();
        return this.getAllLibraryFunctions (tp, name);
    }

    /* Note that this is here for historical purpose : Now, any block can access library functions of any
     * other block.
     */
    public List<AvatarBDLibraryFunction> getAllLibraryFunctions (TURTLEPanel tp, String name) {
        if (tp == null) {
            return null;
        }

        if (!(tp instanceof AvatarDesignPanel)) {
            return null;
        }
        AvatarDesignPanel adp = (AvatarDesignPanel)tp;

        return adp.getAllLibraryFunctions(name);
    }

    public String[] getAllOutEvents() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {
            return null;
        }

        if (!(tp instanceof TMLComponentDesignPanel)) {
            return null;
        }
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;

        String name =  getCurrentTDiagramPanel().getName();

        return tmlcomp.getAllOutEvents(name);
    }

	public ArrayList<TGComponent> getAllLatencyChecks(){
		TURTLEPanel tp;
        ArrayList<TGComponent> list = new ArrayList<TGComponent>();
        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            tp.getAllLatencyChecks(list);
        }
        return list;
	}

    public String[] getAllInEvents() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) {return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
        String name =  getCurrentTDiagramPanel().getName();
        return tmlcomp.getAllInEvents(name);
    }
    public String[] getAllOutChannels() {   //this routine can be called only from a TMLComponentDesignPanel
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) { return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) { return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
        String name =  getCurrentTDiagramPanel().getName();
		System.out.println("Name " + name);
        return tmlcomp.getAllOutChannels(name);
    }


    public String[] getAllCompOutChannels() {   //this routine can be called only from a TMLComponentDesignPanel
		//List<String> chans = new ArrayList<String>();
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) { return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) { return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
		return tmlcomp.getCompOutChannels();
    }

    public String[] getAllCompInChannels() {   //this routine can be called only from a TMLComponentDesignPanel
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) { return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) { return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
		return tmlcomp.getCompInChannels();		
    }


    public String[] getAllInChannels() {    //this routine can be called only from a TMLComponentDesignPanel
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) {return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
        String name =  getCurrentTDiagramPanel().getName();
        return tmlcomp.getAllInChannels(name);
    }

    public Vector<String> getAllCryptoConfig(){
        TURTLEPanel tp;
        Vector<String> list = new Vector<String>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                for (String s: ((TMLComponentDesignPanel)tp).getAllCryptoConfig()){
                    list.add(mainTabbedPane.getTitleAt(i)+"::"+s);
                }
            }
        }
        return list;
    }
    public String[] getCurrentCryptoConfig() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) {return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
        List<String> strlist = tmlcomp.getAllCryptoConfig();
        String[] strarray = new String[strlist.size()];
        strlist.toArray(strarray);
        return strarray;
    }
    public String[] getAllNonce(){
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) {return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
        List<String> strlist = tmlcomp.getAllNonce();
        String[] strarray = new String[strlist.size()];
        strlist.toArray(strarray);
        return strarray;
    }

    public ArrayList<String> getAllKeys(){
        TURTLEPanel tp;
        ArrayList<String> list = new ArrayList<String>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                for (String s:((TMLComponentDesignPanel)tp).getAllKeys()){
                    list.add(s);
                }
            }
        }
        return list;
    }

	public ArrayList<TGComponent> getAllAttacks(){
		TURTLEPanel tp;
        ArrayList<TGComponent> list = new ArrayList<TGComponent>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof AttackTreePanel) {
                for (TGComponent s:((AttackTreePanel)tp).getAllAttacks()){
                    list.add(s);
                }
            }
        }
        return list;

	}

	public ArrayList<TGComponent> getAllRequirements(){
		TURTLEPanel tp;
        ArrayList<TGComponent> list = new ArrayList<TGComponent>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof AvatarRequirementPanel) {
                for (TGComponent s:((AvatarRequirementPanel)tp).getAllRequirements()){
                    list.add(s);
                }
            }
        }
        return list;

	}
    public String[] getAllOutRequests() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {return null;}
        if (!(tp instanceof TMLComponentDesignPanel)) {return null;}
        TMLComponentDesignPanel tmlcomp = (TMLComponentDesignPanel)tp;
        String name =  getCurrentTDiagramPanel().getName();
        return tmlcomp.getAllOutRequests(name);
    }

    public LinkedList<String> getAllTimers() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {
            return null;
        }

        if (!(tp instanceof AvatarDesignPanel)) {
            return null;
        }
        AvatarDesignPanel adp = (AvatarDesignPanel)tp;

        String name =  getCurrentTDiagramPanel().getName();

        return adp.getAllTimers(name);
    }

    public List<CheckingError> getCheckingErrors() {
        return gtm.getCheckingErrors();
    }

    public List<CheckingError> getCheckingWarnings() {
        return gtm.getCheckingWarnings();
    }

    public void modelBacktracingProVerif(ProVerifOutputAnalyzer pvoa) {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {
            return;
        }

        if (tp instanceof AvatarDesignPanel) {
            AvatarDesignPanel adp = (AvatarDesignPanel)tp;
            adp.modelBacktracingProVerif(pvoa);
            getCurrentTDiagramPanel().repaint();
        }
        else if (tp instanceof TMLArchiPanel) {
            /*  for (int i=0; i<tabs.size(); i++){
                tp = (TURTLEPanel)(tabs.elementAt(i));
                if (tp instanceof TMLComponentDesignPanel) {
                ((TMLComponentDesignPanel)tp).modelBacktracingProVerif(pvoa);
                }
                }*/
            gtm.getTMLMapping().getTMLModeling().clearBacktracing();
            gtm.getTMLMapping().getTMLModeling().backtrace(pvoa, getTabName(tp));
            gtm.getTML2Avatar().backtraceReachability(pvoa.getReachabilityResults());
            gtm.getTMLMapping().getTMLModeling().backtraceAuthenticity(pvoa.getAuthenticityResults(), getTabName(tp));
        }
        else if (tp instanceof TMLComponentDesignPanel){
            gtm.getTMLMapping().getTMLModeling().clearBacktracing();
            gtm.getTMLMapping().getTMLModeling().backtrace(pvoa, "Default Mapping");
            gtm.getTML2Avatar().backtraceReachability(pvoa.getReachabilityResults());
            gtm.getTMLMapping().getTMLModeling().backtraceAuthenticity(pvoa.getAuthenticityResults(), "Default Mapping");
        }
        return;
    }

    public void modelBacktracingUPPAAL( Map<String, Integer> verifMap) {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {
            return;
        }

        if (!(tp instanceof AvatarDesignPanel)) {
            return;
        }

        AvatarDesignPanel adp = (AvatarDesignPanel)tp;
        adp.modelBacktracingUppaal(verifMap);
        getCurrentTDiagramPanel().repaint();
    }

    public void generateRTLOTOS() {
        generateRTLOTOS(false);
    }


    public boolean generateRTLOTOS(boolean automatic) {
        int ret = 0;
        if (gtm.getTURTLEModelingState() > 0) {
            if ((ret = generateTURTLEModelingFromState(gtm.getTURTLEModelingState(), automatic, RT_LOTOS)) == -1) {
                return false;
            }
        }

        gtm.reinitSIM();
        gtm.reinitDTA();
        gtm.reinitRG();
        gtm.reinitRGAUT();
        gtm.reinitRGAUTPROJDOT();
        if (ret == 0) {
            gtm.generateRTLOTOS(lotosfile);
        }
        if (!automatic) {
            JOptionPane.showMessageDialog(frame,
                                          "RT-LOTOS specification generated",
                                          "RT-LOTOS specification",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
        dtree.toBeUpdated();
        return true;
    }

    public void generateLOTOS() {
        generateLOTOS(false);
    }


    public boolean generateLOTOS(boolean automatic) {
        int ret = 0;
        if (gtm.getTURTLEModelingState() > 0) {
            ret = generateTURTLEModelingFromState(gtm.getTURTLEModelingState(), automatic, LOTOS);
            if (ret == -1) {
                dtree.toBeUpdated();
                TraceManager.addDev("Generate from state failed");
                return false;
            }
            /*if (!automatic && (gtm.getTURTLEModelingState() == 1)) {
              return true;
              }*/
        }

        //TraceManager.addDev("generate LOTOS");
        if (ret == 0) {
            gtm.generateFullLOTOS(lotosfile);
            //TraceManager.addDev("LOTOS generated");
            if (!automatic) {
                JOptionPane.showMessageDialog(frame,
                                              "LOTOS specification generated (" + getCheckingWarnings().size() + " warning(s))",
                                              "LOTOS specification",
                                              JOptionPane.INFORMATION_MESSAGE);
            }
        }
        setMode(MainGUI.RTLOTOS_OK);
        dtree.toBeUpdated();
        return true;
    }

    public void generateFullLOTOS() {
        gtm.generateFullLOTOS(lotosfile);
        dtree.toBeUpdated();
    }

    // -1 : error
    // 0: ok
    // 1: ok, code already generated
    public int generateTURTLEModelingFromState(int state, boolean automatic, int generator) {
        if (state == 1) {
            TraceManager.addDev("Generating from state 1");
            if (generateTIFFromMapping(automatic, generator)) {
                return 1;
            }
            return -1;
        }
        if (state == 2) {
            TraceManager.addDev("Generating from state 2");
            if (generateTIFFromTMLModeling(automatic, generator)) {
                return 0;
            }
            return -1;
        }
        if (state == 3) {
            TraceManager.addDev("Generating from state 3 (Avatar)");
            if (generateTIFFromAvatarSpecification(automatic, generator)) {
                return 0;
            }
            return -1;
        }
        return -1;
    }

    public boolean generateTIFFromAvatarSpecification(boolean automatic, int generator) {
        boolean b = gtm.translateAvatarSpecificationToTIF();
        if (b) {
            setMode(MainGUI.MODEL_OK);
            return true;
        }
        return false;
    }

    public boolean generateTIFFromMapping(boolean automatic, int generator) {
        boolean b;

        // Scheduling options
        JDialogScheduling jds = new JDialogScheduling(frame, this, "Mapping options", generator);
        if (!automatic) {
            GraphicLib.centerOnParent(jds);
            jds.setVisible(true); // Blocked until dialog has been closed
        } else {
            jds.closeDialog();
            b = gtm.translateTMLMapping(jds.getSample(), jds.getChannel(), jds.getEvent(), jds.getRequest(), jds.getExec(), jds.getBusTransfer(), jds.getScheduling(), jds.getTaskState(), jds.getChannelState(), jds.getBranching(), jds.getTerminateCPU(), jds.getTerminateCPUs(), jds.getClocked(), jds.getTickIntervalValue(), jds.getEndClocked(), jds.getCountTick(), jds.getMaxCountTick(), jds.getMaxCountTickValue(), jds.getRandomTask());
            if (b) {
                setMode(MainGUI.GEN_SYSTEMC_OK);
                setMode(MainGUI.MODEL_OK);
                return true;
            }
            return false;
        }

        if (!jds.isCancelled()) {
            b = jds.hasError();
            //gtm.translateTMLMapping(jds.getChannel(), jds.getEvent(), jds.getRequest(), jds.getExec(), jds.getBusTransfer(), jds.getScheduling(), jds.getTaskState(), jds.getChannelState(), jds.getBranching(), jds.getTerminateCPU(), jds.getTerminateCPUs(), jds.getClocked(), jds.getTickIntervalValue(), jds.getEndClocked(), jds.getCountTick(), jds.getMaxCountTick(), jds.getMaxCountTickValue(), jds.getRandomTask());
            if (!b) {
                //setMode(MainGUI.MODEL_OK);
                setMode(MainGUI.GEN_SYSTEMC_OK);
                setMode(MainGUI.MODEL_OK);
                return true;
                /*if (!automatic) {
                  JOptionPane.showMessageDialog(frame,
                  "0 error, " + getCheckingWarnings().size() + " warning(s). Formal specification can be generated",
                  "Successful translation from the TML mapping to a formal specification",
                  JOptionPane.INFORMATION_MESSAGE);
                  }*/
            } else {
                /*if (!automatic) {
                  JOptionPane.showMessageDialog(frame,
                  "Formal specification generation failed: the TML mapping contains several errors",
                  "Syntax analysis failed",
                  JOptionPane.INFORMATION_MESSAGE);
                  }*/
                return false;
            }
        }

        return false;
    }

    public boolean generateTIFFromTMLModeling(boolean automatic, int generator) {
        return gtm.translateTMLModeling();
    }

    public void generateAUT() {
        JDialogGenAUT jdgaut = new JDialogGenAUT(frame, this, "Generation of automata", ConfigurationTTool.BcgioPath, ConfigurationTTool.AldebaranHost, ConfigurationTTool.TGraphPath);
        //  jdgaut.setSize(450, 600);
        GraphicLib.centerOnParent(jdgaut, 450, 600);
        jdgaut.setVisible(true);

        //Update menu
        Vector<String> v = jdgaut.getFiles();
        JMenu menu = jmenubarturtle.getJMenuGraph();
        menu.removeAll();
        String s;
        for(int i=0; i<v.size(); i++) {
            s = v.elementAt(i);
            jmenubarturtle.addMenuItem(menu, s, this);
        }

    }

    public void generateAUTS() {
        JDialogGenAUTS jdgauts = new JDialogGenAUTS(frame, this, "Generation of automata via LOTOS", gtm.getPathCaesar(),
                                                    GTURTLEModeling.getPathBcgio(),
                                                    REMOTE_RTL_LOTOS_FILE,
                                                    GTURTLEModeling.getCaesarHost(), ConfigurationTTool.TGraphPath);
        //  jdgauts.setSize(450, 600);
        GraphicLib.centerOnParent(jdgauts, 450, 600);
        jdgauts.setVisible(true);

        //Update menu
        /*Vector v = jdgauts.getFiles();
          JMenu menu = jmenubarturtle.getJMenuGraph();
          menu.removeAll();
          String s;
          for(int i=0; i<v.size(); i++) {
          s = (String)(v.elementAt(i));
          jmenubarturtle.addMenuItem(menu, s, this);
          }*/

    }

    public void avatarSimulation() {
        TraceManager.addDev("Avatar simulation");
        jfais = new JFrameAvatarInteractiveSimulation( /*frame,*/ this, "Interactive simulation", gtm.getAvatarSpecification());
        jfais.setIconImage(IconManager.img9);
        // jfais.setSize(900, 600);
        GraphicLib.centerOnParent(jfais, 900, 600);
        jfais.setVisible(true);
    }

    public void avatarUPPAALVerification() {
        TraceManager.addDev("Avatar uppaal fv");
        boolean result = gtm.generateUPPAALFromAVATAR(ConfigurationTTool.UPPAALCodeDirectory);
        if (result) {
            formalValidation(true);
        } else {
            JOptionPane.showMessageDialog(frame,
                                          "" + getCheckingErrors().size() + " errors, " +getCheckingWarnings().size() + " warning(s). UPPAAL specification could NOT be generated",
                                          "Translation to UPPAAL failed",
                                          JOptionPane.INFORMATION_MESSAGE);
            return;
        }
    }
    public void avatarProVerifVerification() {
		boolean limit=true;
        TraceManager.addDev("Avatar proverif fv");
        TURTLEPanel tp = this.getCurrentTURTLEPanel();
        AvatarDesignPanel adp = null;
        if (tp instanceof AvatarDesignPanel){
            adp = (AvatarDesignPanel) tp;
			limit=false;
		}
        JDialogProverifVerification jgen = new JDialogProverifVerification(frame, this, "Security verification with ProVerif", ConfigurationTTool.ProVerifVerifierHost, SpecConfigTTool.ProVerifCodeDirectory, ConfigurationTTool.ProVerifVerifierPath, adp,limit);
        // jgen.setSize(500, 450);
        GraphicLib.centerOnParent(jgen, 500, 450);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    public void dse(){
        TraceManager.addDev("Design space exploration");
        JDialogDSE jdse= new JDialogDSE(frame, this, "Design Space Exploration", ConfigurationTTool.SystemCCodeDirectory, ConfigurationTTool.TMLCodeDirectory, gtm.getCPUTaskMap());
        //   jdse.setSize(600,800);
        GraphicLib.centerOnParent(jdse, 600,800);
        jdse.setVisible(true);
        dtree.toBeUpdated();
    }

    public void avatarStaticAnalysis() {
        TraceManager.addDev("Avatar static analysis invariants");
        JDialogInvariantAnalysis jgen = new JDialogInvariantAnalysis(frame, this, "Static analysis: invariants computation");
        //   jgen.setSize(500, 450);
        GraphicLib.centerOnParent(jgen, 500, 450);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    public void avatarExecutableCodeGeneration() {
        TraceManager.addDev("Avatar code generation");
        JDialogAvatarExecutableCodeGeneration jgen = new JDialogAvatarExecutableCodeGeneration(frame, this, "Executable Code generation, compilation and execution", ConfigurationTTool.AVATARExecutableCodeHost, SpecConfigTTool.AVATARExecutableCodeDirectory,  SpecConfigTTool.AVATARExecutableCodeCompileCommand, SpecConfigTTool.AVATARExecutableCodeExecuteCommand, ConfigurationTTool.AVATARExecutableSoclibCodeCompileCommand, ConfigurationTTool.AVATARExecutableSoclibCodeExecuteCommand,  ConfigurationTTool.AVATARExecutableSoclibTraceFile);
        //   jgen.setSize(500, 450);
        GraphicLib.centerOnParent(jgen, 500, 450);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    // DG
    public void avatarddExecutableCodeGeneration(){
        TraceManager.addDev("Avatar code generation");
        JDialogAvatarddExecutableCodeGeneration jgen = new JDialogAvatarddExecutableCodeGeneration(frame, this, "Executable Code generation, compilation and execution",
                                                                                                   ConfigurationTTool.AVATARExecutableCodeHost,
                                                                                                   ConfigurationTTool.AVATARMPSoCCodeDirectory,
                                                                                                   ConfigurationTTool.AVATARMPSoCCompileCommand,
                                                                                                   ConfigurationTTool.AVATARExecutableSoclibCodeExecuteCommand);
        // jgen.setSize(500, 450);
        GraphicLib.centerOnParent(jgen, 500, 450 );
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    // ---------------------------------------------------------------------

    public void generateUPPAAL() {
        generateUPPAAL(true);
    }

    public void generateUPPAAL(boolean showWindow) {
        TraceManager.addDev("Generate UPPAAL! showwindow=" + showWindow);
        //gtm.mergeChoices(true);
        if (gtm.getTURTLEModelingState() > 0) {
            //TraceManager.addDev("4173");
            if (gtm.getTURTLEModelingState() == 3) {
                //AVATAR
                boolean result = gtm.generateUPPAALFromAVATAR(ConfigurationTTool.UPPAALCodeDirectory);
                TraceManager.addDev("4177");
                if (showWindow) {
                    TraceManager.addDev("4178");
                    if (result) {
                        JOptionPane.showMessageDialog(frame,
                                                      "0 error, " + getCheckingWarnings().size() + " warning(s). UPPAAL specification generated",
                                                      "Successful translation to UPPAAL",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                    else {
                        JOptionPane.showMessageDialog(frame,
                                                      "" + getCheckingErrors().size() + " errors, " +getCheckingWarnings().size() + " warning(s). UPPAAL specification could NOT be generated",
                                                      "Translation to UPPAAL failed",
                                                      JOptionPane.INFORMATION_MESSAGE);


                    }
                }
                TraceManager.addDev("4196");
                if (!result) {
                    return;
                }
            }
            else {
                /*if (generateTURTLEModelingFromState(gtm.getTURTLEModelingState(), false, UPPAAL) == -1) {
                  TraceManager.addDev("4202 - UPPAAL generation failed");
                  return;
                  }*/
                TraceManager.addDev( "About to open the window at line 4198" );
                if (showWindow) {
                    TURTLEPanel tp = getCurrentTURTLEPanel();
                    boolean result = false;

                    if ((tp instanceof TMLDesignPanel) || (tp instanceof TMLComponentDesignPanel)) {
                        result = gtm.generateUPPAALFromTML(ConfigurationTTool.UPPAALCodeDirectory, false, 1024, true);
                    }
                    if (result != false) {
                        formalValidation();
                    }
                    /*JDialogUPPAALGeneration jgen = new JDialogUPPAALGeneration(frame, this, "UPPAAL code generation", ConfigurationTTool.UPPAALCodeDirectory, JDialogUPPAALGeneration.DIPLODOCUS_MODE);
                    //  jgen.setSize(450, 500);
                    GraphicLib.centerOnParent(jgen, 450, 500);
                    jgen.setVisible(true);*/

                }
                return;
            }
        }

        TraceManager.addDev( "gtm.getTURTLEModelingState() <= 0)" );
        //TraceManager.addDev("After UPPAAL");
        if (showWindow) {
            JDialogUPPAALGeneration jgen = new JDialogUPPAALGeneration(frame, this, "UPPAAL code generation", ConfigurationTTool.UPPAALCodeDirectory, JDialogUPPAALGeneration.TURTLE_MODE);
            //jgen.setSize(450, 600);
            GraphicLib.centerOnParent(jgen, 450, 600);
            jgen.setVisible(true);
            //dtree.toBeUpdated();
        }
    }

    public void avatarModelChecker() {
        TraceManager.addDev("Execute avatar model checker");
        gtm.generateAvatarFromTML(true,false);
        if (gtm.getAvatarSpecification()==null){
            TraceManager.addDev("Null avatar spec");
            return;
        }
        JDialogAvatarModelChecker jmc = new JDialogAvatarModelChecker(frame, this, "Avatar: Model Checking", gtm.getAvatarSpecification(), ConfigurationTTool.TGraphPath, experimentalOn);
        // jmc.setSize(550, 600);
        GraphicLib.centerOnParent(jmc, 550, 600);
        jmc.setVisible(true);
    }


    public List<String> generateAllAUT(String path) {
        return gtm.generateAUT(path);
    }

    public List<String> generateAllLOTOS(String path) {
        return gtm.generateLOTOSAUT(path);
    }

    public void generateJava() {

        if (gtm.getTURTLEModelingState() == 1) {
            if (generateTURTLEModelingFromState(gtm.getTURTLEModelingState(), false, JAVA) == -1) {
                return;
            }
        }

        JDialogJavaGeneration jgen = new JDialogJavaGeneration(frame, this, "Java code generation and compilation", ConfigurationTTool.JavaCodeDirectory, ConfigurationTTool.JavaCompilerPath, ConfigurationTTool.TToolClassPath, ConfigurationTTool.JavaExecutePath, ConfigurationTTool.JavaHeader);
        //  jgen.setSize(450, 600);
        GraphicLib.centerOnParent(jgen, 450, 600);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    public void simuJava() {
        /*TraceManager.addDev("Generate Java");
          gtm.generateJava("");
          JOptionPane.showMessageDialog(frame,
          "Java code generated",
          "Java generator",
          JOptionPane.INFORMATION_MESSAGE);
          dtree.toBeUpdated();*/

        JDialogJavaSimulation jgen = new JDialogJavaSimulation(frame, this, "Java simulation", ConfigurationTTool.SimuJavaCodeDirectory, ConfigurationTTool.JavaCompilerPath, ConfigurationTTool.TToolSimuClassPath, ConfigurationTTool.JavaExecutePath);
        // jgen.setSize(450, 600);
        GraphicLib.centerOnParent(jgen, 450, 600);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    public void generateSystemC() {
        generateSystemC(0);
    }

    // Modes are defined in JDialogSystemCGeneration "automatic modes"
    public void generateSystemC(int _mode) {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp instanceof AvatarDesignPanel) {
            avatarSimulation();
        } else if ((tp instanceof TMLDesignPanel) || (tp instanceof TMLComponentDesignPanel) || (tp instanceof TMLArchiPanel))  {
            JDialogSystemCGeneration jgen = new JDialogSystemCGeneration(frame, this, "Simulation Code Generation and Compilation",
                                                                         ConfigurationTTool.SystemCHost, SpecConfigTTool.SystemCCodeDirectory, SpecConfigTTool.SystemCCodeCompileCommand,
                                                                         SpecConfigTTool.SystemCCodeExecuteCommand, SpecConfigTTool.SystemCCodeInteractiveExecuteCommand, ConfigurationTTool.GGraphPath, _mode);
            //jgen.setSize(500, 750);
            GraphicLib.centerOnParent( jgen, 700, 750 );
            jgen.setVisible(true);
            dtree.toBeUpdated();

            /*if (jgen.isInteractiveSimulationSelected() && (mode == 0)) {
              interactiveSimulationSystemC(jgen.getPathInteractiveExecute());
              }*/
        }
    }

    public void interactiveSimulationSystemC() {
        interactiveSimulationSystemC(ConfigurationTTool.SystemCCodeInteractiveExecuteCommand + " -gpath " + ConfigurationTTool.GGraphPath);
    }

    public void interactiveSimulationSystemC(String executePath) {
        TraceManager.addDev("MainGUI / Execute path=" + executePath);
        List<Point> points = getListOfBreakPoints();
        
        if (gtm == null) {
            jfis = new JFrameInteractiveSimulation(frame, this, "Interactive simulation", ConfigurationTTool.SystemCHost, executePath, null, points);
        } else {
            //TraceManager.addDev("toto1");
            if (gtm.getTMLMapping() != null) {
                jfis = new JFrameInteractiveSimulation(frame, this, "Interactive simulation", ConfigurationTTool.SystemCHost, executePath, gtm.getTMLMapping(), points);
            } else {
                //TraceManager.addDev("toto2");
                if (gtm.getArtificialTMLMapping() != null) {
                    jfis = new JFrameInteractiveSimulation(frame, this, "Interactive simulation", ConfigurationTTool.SystemCHost, executePath, gtm.getArtificialTMLMapping(), points);
                } else {
                    //TraceManager.addDev("toto3");
                    jfis = new JFrameInteractiveSimulation(frame, this, "Interactive simulation", ConfigurationTTool.SystemCHost, executePath, null, points);
                }
            }
        }
        
        jfis.setIconImage(IconManager.img9);
        //jfis.setSize(1024, 900);
        GraphicLib.centerOnParent( jfis, 1024, 900 );
        jfis.setVisible(true);
    }

    public void addBreakPoint(int commandId) {
        if (jfis != null) {
            jfis.addBreakPoint(commandId);
        }
    }

    public void removeBreakPoint(int commandId) {
        if (jfis != null) {
            jfis.removeBreakPoint(commandId);
        }
    }

    // Sent by simulation interface
    public void removeBreakpoint(Point p) {
        if (gtm != null) {
            gtm.removeBreakpoint(p);
            getCurrentTDiagramPanel().repaint();
        }
    }

    // Sent by simulation interface
    public void addBreakpoint(Point p) {
        if (gtm != null) {
            gtm.addBreakpoint(p);
            getCurrentTDiagramPanel().repaint();
        }
    }

    public ArrayList<Point> getListOfBreakPoints() {
        ArrayList<Point> points = new ArrayList<Point>();
        TURTLEPanel tp;

        if (tabs != null) {
            for(int i=0; i<tabs.size(); i++) {
                tp = tabs.elementAt(i);
                if (tp instanceof TMLDesignPanel) {
                    ((TMLDesignPanel)tp).getListOfBreakPoints(points);
                }
                if (tp instanceof TMLComponentDesignPanel) {
                    ((TMLComponentDesignPanel)tp).getListOfBreakPoints(points);
                }
            }
        }
        return points;
    }

    // Returns null if failed
    // Otherwise the path of the generated file
    public String generateTMLTxt() {
        String path = ConfigurationTTool.FILEPath;
        if (file != null) {
            path = file.getAbsolutePath();
        }
        //TraceManager.addDev("Generating TML code: "+file.getAbsolutePath());
        if (gtm.generateTMLTxt(path)) {
            return ConfigurationTTool.TMLCodeDirectory;
        }

        return null;
        //TraceManager.addDev("Done");
    }

    public String generateCCode() {

        //        String path = ConfigurationTTool.FILEPath;
        //        if( file != null ) {
        //            path = file.getAbsolutePath();
        //        }
        JDialogCCodeGeneration jgen = new JDialogCCodeGeneration( frame, this, "Application code generation and compilation",
                                                                  SpecConfigTTool.CCodeDirectory,
                                                                  "make -C " + SpecConfigTTool.CCodeDirectory,
                                                                  gtm );
        //   jgen.setSize(500, 750);
        GraphicLib.centerOnParent(jgen, 500, 750);
        jgen.setVisible(true);
        //dtree.toBeUpdated();
        //gtm.generateCCode( path );
        return null;
    }

    public void generateDesign() {
        if (gtm.getTURTLEModelingState() == 1) {
            if (generateTURTLEModelingFromState(gtm.getTURTLEModelingState(), false, DESIGN) == -1) {
                return;
            }
        }

        //TraceManager.addDev("Generate design");
        gtm.generateDesign();
    }

    public void saveSIM() {
        gtm.saveSIM(simfile);
    }

    public void saveDTA() {
        gtm.saveDTA(dtafile);
    }

    public void saveDTADOT() {
        gtm.saveDTADOT(dtadotfile);
    }

    public void saveRG() {
        gtm.saveRG(rgfile);
    }

    public void saveTLSA() {
        gtm.saveTLSA(tlsafile);
    }
    public String saveRGAut() {
        gtm.saveRGAut(rgautfile);
        return rgautfile.getAbsolutePath();
    }

    public String saveFC2(String data) {
        gtm.saveInFile(fc2file, data);
        return fc2file.getAbsolutePath();
    }

    public String saveBCG(String data) {
        gtm.saveInFile(bcgfile, data);
        return bcgfile.getAbsolutePath();
    }

    public void saveRGDOT() {
        gtm.saveRGDOT(rgdotfile);
    }

    public void saveTLSADOT() {
        gtm.saveTLSADOT(tlsadotfile);
    }

    public String saveRGAutDOT() {
        gtm.saveRGAutDOT(rgautdotfile);
        return rgautdotfile.getAbsolutePath();
    }

    public void saveRGAutProj() {
        gtm.saveRGAutProj(rgautprojfile);
    }

    public void saveRGAutProjDOT() {
        gtm.saveRGAutProjDOT(rgautprojdotfile);
    }

    public void checkCode() {
        if (gtm.getLanguageID() == GTURTLEModeling.RT_LOTOS) {
            JDialogTextProcess jdtp = new JDialogTextProcess(frame,
                                                             "Checking RT-LOTOS specification with RTL",
                                                             gtm.getPathRTL() + " __FILENAME -max-spec-t-1",
                                                             REMOTE_RTL_LOTOS_FILE,
                                                             gtm.getLastRTLOTOSSpecification(),
                                                             gtm.getHost());
            //jdtp.setSize(450, 600);
            GraphicLib.centerOnParent(jdtp, 450, 600);
            jdtp.setVisible(true);
            dtree.toBeUpdated();
        } else if (gtm.getLanguageID() == GTURTLEModeling.LOTOS) {
            JDialogLOTOSAnalysis jdla = new JDialogLOTOSAnalysis(frame,
                                                                 this, "Checking LOTOS specification with CAESAR",
                                                                 gtm.getPathCaesar(),
                                                                 REMOTE_RTL_LOTOS_FILE,
                                                                 gtm.getLastRTLOTOSSpecification(),
                                                                 GTURTLEModeling.getCaesarHost());
            //  jdla.setSize(450, 600);
            GraphicLib.centerOnParent(jdla, 450, 600);
            jdla.setVisible(true);
            dtree.toBeUpdated();
        }
    }


    public void simulation() {
        if (gtm.getLanguageID() == GTURTLEModeling.RT_LOTOS) {
            JDialogSimulation jds = new JDialogSimulation(frame,
                                                          this,
                                                          "Intensive simulation with RTL",
                                                          gtm.getPathRTL(),
                                                          REMOTE_RTL_LOTOS_FILE,
                                                          gtm.getLastRTLOTOSSpecification(),
                                                          gtm.getHost());
            //jds.setSize(450, 600);
            GraphicLib.centerOnParent(jds, 450, 600);
            jds.setVisible(true);
            dtree.toBeUpdated();
        } else if (gtm.getLanguageID() == GTURTLEModeling.LOTOS) {

        }
    }

    public void formalValidation() {
        formalValidation(false);
    }

    public void formalValidation(boolean automatic) {
        formalValidation(automatic, getCurrentTURTLEPanel());
    }

    public boolean formalValidation(boolean automatic, String diagramName) {
        TURTLEPanel tp = getTURTLEPanel(diagramName);
        if (tp != null) {
            formalValidation(automatic, tp);
            return true;
        }
        return false;
    }


    public void formalValidation(boolean automatic, TURTLEPanel _tp) {
        if (gtm.getLanguageID() == GTURTLEModeling.RT_LOTOS) {
            JDialogFormalValidation jdfv = new JDialogFormalValidation(frame,
                                                                       this,
                                                                       "Formal Validation with RTL",
                                                                       gtm.getPathRTL(),
                                                                       gtm.getPathDTA2DOT(),
                                                                       gtm.getPathRGSTRAP(),
                                                                       gtm.getPathRG2TLSA(),
                                                                       REMOTE_RTL_LOTOS_FILE,
                                                                       gtm.getLastRTLOTOSSpecification(),
                                                                       gtm.getHost(),
                                                                       GTURTLEModeling.getHostAldebaran(),
                                                                       GTURTLEModeling.getPathBcgio());
            jdfv.setAutomatic(automatic);
            //   jdfv.setSize(450, 600);
            GraphicLib.centerOnParent(jdfv, 450, 600);
            jdfv.setVisible(true);
            dtree.toBeUpdated();
        } else if (gtm.getLanguageID() == GTURTLEModeling.LOTOS) {
            JDialogLOTOSValidation jdla = new JDialogLOTOSValidation(frame,
                                                                     this, "Generating RG with CAESAR",
                                                                     gtm.getPathCaesar(),
                                                                     gtm.getPathCaesarOpen(),
                                                                     GTURTLEModeling.getPathBcgio(),
                                                                     gtm.getPathBcgmerge(),
                                                                     REMOTE_RTL_LOTOS_FILE,
                                                                     gtm.getLastRTLOTOSSpecification(),
                                                                     GTURTLEModeling.getCaesarHost());
            jdla.setAutomatic(automatic);
            // jdla.setSize(450, 600);
            GraphicLib.centerOnParent(jdla, 450, 600);
            jdla.setVisible(true);
            dtree.toBeUpdated();
        } else if (gtm.getLanguageID() == GTURTLEModeling.UPPAAL) {
            JDialogUPPAALValidation jduv = new JDialogUPPAALValidation(frame,
                                                                       this, "Formal Verification with UPPAAL",
                                                                       gtm.getPathUPPAALVerifier(),
                                                                       gtm.getPathUPPAALFile(),
                                                                       REMOTE_UPPAAL_FILE,
                                                                       gtm.getLastUPPAALSpecification().getStringSpec(),
                                                                       gtm.getUPPAALVerifierHost(),
                                                                       _tp);
            // jduv.setSize(450, 600);
            GraphicLib.centerOnParent(jduv, 650, 600);
            jduv.setVisible(true);
            dtree.toBeUpdated();
        } else if (gtm.getLanguageID() == GTURTLEModeling.MATRIX) {
            JDialogTMatrixManagement jdfv = new JDialogTMatrixManagement(frame,
                                                                         this,
                                                                         "Observers's Based Formal Verification",
                                                                         gtm.getRequirementModeling(),
                                                                         gtm.getPathRTL(),
                                                                         gtm.getPathDTA2DOT(),
                                                                         gtm.getPathRGSTRAP(),
                                                                         gtm.getPathRG2TLSA(),
                                                                         REMOTE_RTL_LOTOS_FILE,
                                                                         gtm.getHost(),
                                                                         GTURTLEModeling.getHostAldebaran(),
                                                                         GTURTLEModeling.getPathBcgio());
            // jdfv.setSize(550, 600);
            jdfv.setIconImage(IconManager.img8);
            GraphicLib.centerOnParent(jdfv, 550, 600);
            jdfv.setVisible(true);
            dtree.toBeUpdated();
        }
    }

    public void projection() {
        TClassDiagramPanel tcdp = null;
        if (getCurrentTURTLEPanel() instanceof DesignPanel) {
            tcdp = ((DesignPanel)(getCurrentTURTLEPanel())).tcdp;
        }
        JDialogProjection jdfv = new JDialogProjection(frame,
                                                       this,
                                                       tcdp,
                                                       gtm.getTURTLEModeling(),
                                                       GTURTLEModeling.getHostAldebaran(),
                                                       GTURTLEModeling.getPathAldebaran(),
                                                       gtm.getPathBcgmin(),
                                                       GTURTLEModeling.getPathBcgio(),
                                                       gtm.getLastRGAUT(),
                                                       REMOTE_ALDEBARAN_AUT_FILE,
                                                       "Minimization using Aldebaran");
        // jdfv.setSize(900, 700);
        GraphicLib.centerOnParent(jdfv, 900, 700);
        jdfv.setVisible(true);
    }

    public void modifyGraph() {
        JDialogGraphModification jdgm;
        if (gtm == null ){
            jdgm = new JDialogGraphModification(frame,
                                                GTURTLEModeling.getHostAldebaran(),
                                                GTURTLEModeling.getPathBcgio(),
                                                "graph",
                                                "Minimization using Aldebaran",
                                                null, null);
        } else {
            jdgm = new JDialogGraphModification(frame,
                                                GTURTLEModeling.getHostAldebaran(),
                                                GTURTLEModeling.getPathBcgio(),
                                                "graph",
                                                "Minimization using Aldebaran",
                                                gtm.getLastRGAUT(),
                                                gtm.getLastTextualRGAUTProj());
        }
        //jdgm.setSize(600, 500);
        GraphicLib.centerOnParent(jdgm, 600, 500);
        jdgm.setVisible(true);
        modifiedaut = jdgm.getGraphAUT();
        modifiedautdot = jdgm.getGraphDOT();
        if (modifiedautdot != null) {
            actions[TGUIAction.ACT_VIEW_MODIFIEDAUTDOT].setEnabled(true);
            actions[TGUIAction.ACT_SAVE_AUTMODIFIED].setEnabled(true);
        }
        //gtm.modifyMinimizedGraph();
    }

    public void bisimulation() {
        JDialogBisimulation jdb = new JDialogBisimulation(frame,
                                                          GTURTLEModeling.getHostAldebaran(),
                                                          GTURTLEModeling.getPathAldebaran(),
                                                          REMOTE_ALDEBARAN_BISIMU_FILE1,
                                                          REMOTE_ALDEBARAN_BISIMU_FILE2,
                                                          "Bisimulation using Aldebaran");
        //  jdb.setSize(650, 800);
        GraphicLib.centerOnParent(jdb, 650, 800);
        jdb.setVisible(true);
        //TraceManager.addDev("Bisimulation");
    }

    public void bisimulationCADP() {
        JDialogBisimulationBisimulator jdb = new JDialogBisimulationBisimulator(frame,
                                                                                GTURTLEModeling.getCaesarHost(),
                                                                                GTURTLEModeling.getPathBisimulator(),
                                                                                GTURTLEModeling.getPathBcgio(),
                                                                                REMOTE_BISIMULATOR_FILE1,
                                                                                REMOTE_BISIMULATOR_FILE2,
                                                                                "Bisimulation using BISIMULATOR");
        //   jdb.setSize(650, 800);
        GraphicLib.centerOnParent(jdb, 650, 800);
        jdb.setVisible(true);
        //TraceManager.addDev("Bisimulation");
    }

    public void seekDeadlockAUT() {
        String dataAUT = gtm.getLastTextualRGAUT();

        JFrameDeadlock jfd = new JFrameDeadlock("Potential deadlocks", dataAUT);
        jfd.setIconImage(IconManager.img8);
        //jfd.setSize(600, 600);
        GraphicLib.centerOnParent(jfd, 600, 600);
        jfd.setVisible(true);
    }

    public void seekDeadlockSavedAUT() {
        String graph[] = loadAUTGraph();
        if (graph != null) {
            JFrameDeadlock jfd = new JFrameDeadlock("Potential deadlocks on " + graph[0], graph[1]);
            jfd.setIconImage(IconManager.img8);
            // jfd.setSize(600, 600);
            GraphicLib.centerOnParent(jfd, 600, 600);
            jfd.setVisible(true);
        }
    }

    public void showAUTFromString(String title, String data) {
        /*JFrameStatistics jfs = new JFrameStatistics(title, data);
          jfs.setIconImage(IconManager.img8);
          jfs.setSize(600, 600);
          GraphicLib.centerOnParent(jfs);
          jfs.setVisible(true);*/
        ThreadGUIElement t = new ThreadGUIElement(frame, 0, title, data, "Analyzing graph... Please wait", null, null, true);
        t.go();
    }

    public void showAUTFromGraph(String title, AUTGraph graph) {
        /*JFrameStatistics jfs = new JFrameStatistics(title, data);
          jfs.setIconImage(IconManager.img8);
          jfs.setSize(600, 600);
          GraphicLib.centerOnParent(jfs);
          jfs.setVisible(true);*/
        ThreadGUIElement t = new ThreadGUIElement(frame, 0, title, null, "Analyzing graph... Please wait", graph, null, true);
        t.go();
    }

    public void  showAUT(String title, String data, AUTGraph graph) {
        ThreadGUIElement t = new ThreadGUIElement(frame, 0, title, data, "Analyzing graph... Please wait", graph, null, true);
        t.go();
    }

    public void  showAUTFromRG(String title, RG rg) {
        ThreadGUIElement t = new ThreadGUIElement(frame, 0, title, rg.data, "Analyzing graph... Please wait", rg.graph, rg, true);
        t.go();
    }

    public void  displayAUTFromRG(String title, RG rg) {
        ThreadGUIElement t = new ThreadGUIElement(frame, 0, title, rg.data, "Analyzing graph... Please wait", rg.graph, rg, false);
        t.go();
    }

    public void showPMAUT(String title, String data) {
        TraceManager.addDev("Power management analysis");
        JFramePowerManagementAnalysis jfpma = new JFramePowerManagementAnalysis(title, data);
        jfpma.setIconImage(IconManager.img8);
        //  jfpma.setSize(600, 600);
        GraphicLib.centerOnParent(jfpma, 600, 600);
        jfpma.setVisible(true);
    }

    public void NC() {
        TraceManager.addDev("NC");
        JFrameNC jfnc = new JFrameNC("Network calculus", gtm.getNCS());
        jfnc.setIconImage(IconManager.img8);
        //   jfnc.setSize(600, 600);
        GraphicLib.centerOnParent(jfnc, 600, 600);
        jfnc.setVisible(true);
        TraceManager.addDev("Done");

        /*JFrameStatistics jfs = new JFrameStatistics(title, data);
          jfs.setIconImage(IconManager.img8);
          jfs.setSize(600, 600);
          GraphicLib.centerOnParent(jfs);
          jfs.setVisible(true);*/
    }

    public void statAUT() {
        showAUTFromString("Analysis on the last RG (AUT format)", gtm.getLastTextualRGAUT());
    }

    public RG setLastRGDiplodocus(String graphName) {
        TraceManager.addDev("setting last RG diplodocus");
        //lastDiploRG = graphName;
        // Loadng the graph
        // Adding RG to the tree on the left
        try {
            String fileName = ConfigurationTTool.TGraphPath + "/" + graphName + ".aut";
            File f = new File(fileName);
            String spec = loadFile(f);
            RG rg = new RG(graphName);
            rg.data = spec;
            //rg.nbOfStates = amc.getNbOfStates();
            //rg.nbOfTransitions = amc.getNbOfLinks();
            addRG(rg);
            lastDiploRG = rg;
            return rg;
        } catch (Exception e) {
            TraceManager.addDev("RG creation in the left tree failed");
            return null;
        }
    }

    public void statAUTDiplodocus() {
        if (lastDiploRG == null) {
            JOptionPane.showMessageDialog(frame,
                                          "The file could not be loaded:",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return;
        }
        showAUTFromRG(lastDiploRG.name, lastDiploRG);
        //String spec = loadFile(new File(ConfigurationTTool.TGraphPath + "/" + lastDiploRG + ".aut"));

        //showAUTFromString("Analysis on the last DIPLODOCUS RG", spec);
    }

    public void statAUTProj() {
        showAUTFromString("Analysis on the last minimized RG (A>UT format)", gtm.getLastTextualRGAUTProj());
    }

    public void statSavedAUT() {
        //TraceManager.addDev("toto");
        String graph[] = loadAUTGraph();
        if (graph != null) {
            showAUTFromString("Analysis on " + graph[0], graph[1]);
        }
    }

    public void pmAUT() {
        showPMAUT("Power Management Analysis on the last RG (AUT format)", gtm.getLastTextualRGAUT());
    }

    public void pmAUTProj() {
        showPMAUT("Power Management Analysis on the last minimized RG (AUT format)", gtm.getLastTextualRGAUTProj());
    }

    public void pmSavedAUT() {
        //TraceManager.addDev("toto");
        String graph[] = loadAUTGraph();
        if (graph != null) {
            showPMAUT("Power Management Analysis on " + graph[0], graph[1]);
        }
    }

    public void showFormalSpecification() {
        if (gtm.getLanguageID() == GTURTLEModeling.RT_LOTOS) {
            showFormalSpecification("RT-LOTOS Specification #" + gtm.getNbRTLOTOS(), gtm.getLastRTLOTOSSpecification());
        } else if (gtm.getLanguageID() == GTURTLEModeling.LOTOS) {
            showFormalSpecification("LOTOS Specification #" + gtm.getNbRTLOTOS(), gtm.getLastRTLOTOSSpecification());
        } else if (gtm.getLanguageID() == GTURTLEModeling.PROVERIF) {
            showFormalSpecification("Last ProVerif Specification", gtm.getLastProVerifSpecification());
        }
    }

    public void showFormalSpecification(String title, String data) {
        JFrameText jft = new JFrameText(title, data);
        jft.setIconImage(IconManager.img8);
        //    jft.setSize(600, 600);
        GraphicLib.centerOnParent(jft, 600, 600);
        jft.setVisible(true);
    }

    public void showJavaCode() {
        if (javaframe == null) {
            javaframe = new JFrameCode("JavaCode", "", "");
            javaframe.setIconImage(IconManager.img8);
            // javaframe.setSize(350, 350);
            GraphicLib.centerOnParent(javaframe, 350, 350);
            javaframe.setVisible(true);
        } else {
            javaframe.setVisible(true);
        }
    }

    public void showBirdEyesView() {
        if (birdframe == null) {
            birdframe = new JFrameBird(this);
            birdframe.setIconImage(IconManager.img8);
            //   birdframe.setSize(150, 100);
            GraphicLib.centerOnParent(birdframe, 150, 100);
            birdframe.setVisible(true);
        } else {
            birdframe.setVisible(true);
        }
    }

    public void showEmbeddedBirdEyesView() {
        //TraceManager.addDev("Embedded!");
        if (jbp.getGo()) {
            jbp.setGo(false);
        } else {
            jbp.startProcess();
        }
    }

    public void drawBird() {
        if (jbp.getGo()) {
            jbp.repaint();
        }

        if (birdframe != null) {
            birdframe.updatePanel();
        }
    }

    public void unsetBirdFrame() {
        birdframe = null;
    }

    public void setJavaPreCode(TGComponent tgc) {
        if (javaframe != null) {
            if (tgc == null) {
                javaframe.setPreCode("");
                return;
            }
            if (tgc.hasPreJavaCode()) {
                javaframe.setPreCode(tgc.getPreJavaCode());
            } else {
                javaframe.setPreCode("");
            }
        }
    }

    public void setJavaPostCode(TGComponent tgc) {
        if (javaframe != null) {
            if (tgc == null) {
                javaframe.setPostCode("");
                return;
            }
            if (tgc.hasPostJavaCode()) {
                javaframe.setPostCode(tgc.getPostJavaCode());
            } else {
                javaframe.setPostCode("");
            }
        }
    }

    public void showSuggestedDesign() {
        JFrameText jft = new JFrameText("Suggested Design #" + gtm.getNbSuggestedDesign(), gtm.getLastTextualDesign());
        jft.setIconImage(IconManager.img8);
        //  jft.setSize(600, 600);
        GraphicLib.centerOnParent(jft, 600, 600);
        jft.setVisible(true);
    }

    public void showSavedRTLOTOS() {
        String spec[] = loadLotosSpec();
        if ((spec != null) && (spec[0] != null) && (spec[1] != null)) {
            JFrameText jft = new JFrameText("RT-LOTOS Specification: " + spec[0], spec[1]);
            jft.setIconImage(IconManager.img8);
            // jft.setSize(600, 600);
            GraphicLib.centerOnParent(jft, 600, 600);
            jft.setVisible(true);
        }
    }

    public void showSimulationTrace() {
        gtm.showSIM(1);
    }

    public void showSimulationTraceChrono() {
        gtm.showSIM(2);
    }

    public void showDTA() {
        String s = gtm.showDTA();
        if (s != null) {
            JOptionPane.showMessageDialog(frame,
                                          "The DTA could not be displayed: " + s,
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void showWave() {
        RemoteExecutionThread ret = new RemoteExecutionThread(ConfigurationTTool.SystemCHost, null, null, ConfigurationTTool.GTKWavePath  + " vcddump.vcd");
        ret.start();
    }

    public void showRG() {
        String s = gtm.showRG();
        if (s != null) {
            JOptionPane.showMessageDialog(frame,
                                          "The RG could not be displayed: " + s,
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void showTLSA() {
        String s = gtm.showTLSA();
        if (s != null) {
            JOptionPane.showMessageDialog(frame,
                                          "The TLSA could not be displayed: " + s,
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void showRGAut() {
        String s = gtm.showRGAut();
        if (s != null) {
            JOptionPane.showMessageDialog(frame,
                                          "The RG could not be displayed: " + s,
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void showRGAutProj() {
        String s = gtm.showRGAutProj();
        if (s != null) {
            JOptionPane.showMessageDialog(frame,
                                          "The RG could not be displayed: " + s,
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void showRGDiplodocus() {
        if (lastDiploRG == null) {
            JOptionPane.showMessageDialog(frame,
                                          "The RG was not yet generated",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return ;
        }
        TraceManager.addDev("Showing diplo RG");
        displayAUTFromRG(lastDiploRG.name, lastDiploRG);

    }

    public void showModifiedAUTDOT() {
        String s = GTURTLEModeling.runDOTTY(modifiedautdot);
        if (s != null) {
            JOptionPane.showMessageDialog(frame,
                                          "The RG could not be displayed: " + s,
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void showGGraph() {
        String graph[] = loadGGraph();
        if (graph != null) {
            String s = GTURTLEModeling.showGGraph(graph[1]);
            if (s != null) {
                JOptionPane.showMessageDialog(frame,
                                              "The graph could not be displayed: " + s,
                                              "Error",
                                              JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }

    public void viewAutomata(String file) {
        //TraceManager.addDev("viewing: " + file);
        String graph[] = loadGGraph(file);
        if (graph != null) {
            String s = GTURTLEModeling.showGGraph(graph[1]);
            if (s != null) {
                JOptionPane.showMessageDialog(frame,
                                              "The graph could not be displayed: " + s,
                                              "Error",
                                              JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }

    public void executeUserCommand(String host, String command) {
        RemoteExecutionThread ret = new RemoteExecutionThread(host, null, null, command);
        ret.start();
        TraceManager.addDev("User command ->" + command + "<- started on host " + host);
    }


    public void screenCapture() {
        //Select file
        File file = selectFileForCapture();
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension screenSize = toolkit.getScreenSize();
        Rectangle screenRect = new Rectangle(screenSize);
        performScreenCapture(screenRect, file);
    }

    public void windowCapture() {
        //Select file
        File file = selectFileForCapture();
        if (file == null)
            return;

        Rectangle screenRect = new Rectangle(frame.getLocation().x, frame.getLocation().y, frame.getWidth(), frame.getHeight());
        performScreenCapture(screenRect, file);
    }

    public void diagramCapture() {
        if (tabs.size() < 1) {
            JOptionPane.showMessageDialog(frame,
                                          "No diagram is under edition",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return;
        }

        File file = selectFileForCapture();
        if (file == null)
            return;

        TDiagramPanel tdp1 = getCurrentTDiagramPanel();
        if (tdp1 != null) {
            BufferedImage image = tdp1.performMinimalCapture();
            writeImageCapture(image, file, true);
        }
    }

    public void svgDiagramCapture() {

        TraceManager.addDev("SVG capture ");

        if (tabs.size() < 1) {
            JOptionPane.showMessageDialog(frame,
                                          "No diagram is under edition",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return;
        }

        File file = selectSVGFileForCapture();

        if (file == null)
            return;

        TDiagramPanel tdp1 = getCurrentTDiagramPanel();
        if (tdp1 != null) {
            String s = tdp1.svgCapture();
            try {
                FileUtils.saveFile(file.getAbsolutePath(), s);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(frame,
                                              "File could not be saved: " + e.getMessage(),
                                              "Error",
                                              JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            JOptionPane.showMessageDialog(frame,
                                          "The capture was correctly performed and saved in " + file.getAbsolutePath(),
                                          "Save in svg format ok",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void allDiagramCapture() {
        if (tabs.size() < 1) {
            JOptionPane.showMessageDialog(frame,
                                          "No diagram is under edition",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return;
        }

        File file = selectFileForCapture();
        if (file == null)
            return;

        TURTLEPanel tp = getCurrentTURTLEPanel();
        TDiagramPanel tdp1;
        BufferedImage image;
        File file1;
        String name = file.getAbsolutePath();
        name = name.substring(0, name.length() - 4);

        //boolean actions;
        for(int i=0; i<tp.panels.size(); i++) {
            tdp1 = tp.panels.elementAt(i);
            tdp1.repaint();
            image = tdp1.performMinimalCapture();
            if (i < 10) {
                file1 = new File(name + "0" + i);
            } else {
                file1 = new File(name + i);
            }
            file1 = FileUtils.addFileExtensionIfMissing(file1, TImgFilter.getExtension());
            if (!writeImageCapture(image, file1, false)) {
                JOptionPane.showMessageDialog(frame,
                                              "Diagrams could NOT be captured in png format",
                                              "Capture failed",
                                              JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            if (i ==0) {
                if (!writeImageCapture(image, file, false)) {
                    JOptionPane.showMessageDialog(frame,
                                                  "Diagrams could NOT be captured in png format",
                                                  "Capture failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                    return;
                }
            }
        }

        JOptionPane.showMessageDialog(frame,
                                      "All diagrams were sucessfully captured in png format",
                                      "Capture ok",
                                      JOptionPane.INFORMATION_MESSAGE);
    }

    public void allDiagramCaptureSvg() {
        if (tabs.size() < 1) {
            JOptionPane.showMessageDialog(frame,
                                          "No diagram is under edition",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return;
        }

        File file = selectSVGFileForCapture();
        if (file == null)
            return;

        TURTLEPanel tp;// = getCurrentTURTLEPanel();
        TDiagramPanel tdp1;
        //  BufferedImage image;
        File file1;
        String name = file.getAbsolutePath();
        name = name.substring(0, name.length() - 4);

        //boolean actions;
        for(int j=0; j<tabs.size(); j++) {
            tp = tabs.get(j);
            for(int i=0; i<tp.panels.size(); i++) {
                tdp1 = tp.panels.elementAt(i);
                tdp1.repaint();

                tdp1.performMinimalCapture();
                String svgImg = tdp1.svgCapture();

                if (i < 10) {
                    file1 = new File(name + j + "_" + "0" + i);
                } else {
                    file1 = new File(name + j + "_" + i);
                }
                file1 = FileUtils.addFileExtensionIfMissing(file1, TSVGFilter.getExtension());
                try {
                    FileUtils.saveFile(file1, svgImg);
                } catch(Exception e) {
                    JOptionPane.showMessageDialog(frame,
                                                  "Diagrams could NOT be captured in svg format",
                                                  "Capture failed",
                                                  JOptionPane.INFORMATION_MESSAGE);
                    return;
                }

            }
        }

        JOptionPane.showMessageDialog(frame,
                                      "All diagrams were sucessfully captured in svg format",
                                      "Capture ok",
                                      JOptionPane.INFORMATION_MESSAGE);
    }

    public void selectedCapture() {
        File file = selectFileForCapture();
        if (file == null)
            return;
        BufferedImage image = getCurrentTDiagramPanel().performSelectedCapture();
        writeImageCapture(image, file, true);
    }

    public File selectFileForCapture() {
        File file = null;
        int returnVal = jfcimg.showSaveDialog(frame);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfcimg.getSelectedFile();
            file = FileUtils.addFileExtensionIfMissing(file, TImgFilter.getExtension());

        }
        if(!checkFileForSave(file)) {
            JOptionPane.showMessageDialog(frame,
                                          "The capture could not be performed: invalid file",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return null;
        }
        return file;
    }

    public File selectSVGFileForCapture() {
        File file = null;
        int returnVal = jfcimgsvg.showSaveDialog(frame);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfcimgsvg.getSelectedFile();
            file = FileUtils.addFileExtensionIfMissing(file, TSVGFilter.getExtension());

        }
        if(!checkFileForSave(file)) {
            JOptionPane.showMessageDialog(frame,
                                          "The capture could not be performed: invalid file",
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return null;
        }
        return file;
    }

    public void performScreenCapture(Rectangle rect, File file) {
        frame.paint(frame.getGraphics());
        try {
            Robot robot = new Robot();
            BufferedImage image = robot.createScreenCapture(rect);
            // save captured image to PNG file
            ImageIO.write(image, "png", file);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(frame,
                                          "The capture could not be performed:" + e.getMessage(),
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return;
        }
        JOptionPane.showMessageDialog(frame,
                                      "The capture was correctly performed",
                                      "Screen capture ok",
                                      JOptionPane.INFORMATION_MESSAGE);
        return;
    }

    public boolean writeImageCapture(BufferedImage image, File file, boolean info) {
        frame.paint(frame.getGraphics());
        try {
            // save captured image to PNG file
            ImageIO.write(image, "png", file);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(frame,
                                          "The capture could not be performed:" + e.getMessage(),
                                          "Error",
                                          JOptionPane.INFORMATION_MESSAGE);
            return false;
        }
        if (info) {
            JOptionPane.showMessageDialog(frame,
                                          "The capture was correctly performed and saved in " + file.getAbsolutePath(),
                                          "Screen capture ok",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
        return true;
    }

    public void generateDocumentation() {
        //TraceManager.addDev("Documentation");
        ThreadGUIElement t = new ThreadGUIElement(frame, 1, tabs, mainTabbedPane, ConfigurationTTool.DocGenPath, file.getName(),"Documentation", "Generating documentation ... Please wait");
        t.go();
        /*DocumentationGenerator docgen = new DocumentationGenerator(tabs, mainTabbedPane, ConfigurationTTool.IMGPath, file.getName());
          docgen.setFirstHeadingNumber(2);
          if (docgen.generateDocumentation()) {
          JOptionPane.showMessageDialog(frame,
          "All done!",
          "Documentation generation",
          JOptionPane.INFORMATION_MESSAGE);
          } else {
          JOptionPane.showMessageDialog(frame,
          "The documentation generation could not be performed",
          "Error",
          JOptionPane.INFORMATION_MESSAGE);
          }*/
        //TraceManager.addDev("Documentation=" + docgen.getDocumentation());
    }

    public void generateDocumentationReq() {
        TraceManager.addDev("Frame Req");
        JDialogRequirementTable jdrt = new JDialogRequirementTable(frame, "Selecting table columns");
        GraphicLib.centerOnParent(jdrt);
        jdrt.setVisible(true);
        if (!jdrt.hasBeenCancelled()) {
            Point [] pts = jdrt.getColumnsInfo();
            if (pts != null) {
                for(int i=0; i<pts.length; i++) {
                    TraceManager.addDev("" + i + ": (" + pts[i].x + ", " + pts[i].y + ")");
                }

                JFrameRequirementTable jfrt = new JFrameRequirementTable("Requirement table", tabs, mainTabbedPane, pts);
                jfrt.setIconImage(IconManager.img8);
                //jfrt.setSize(1024, 768);
                GraphicLib.centerOnParent(jfrt, 1024, 768);
                jfrt.setVisible(true);
            } else {
                TraceManager.addDev("No column to print");
            }
        }
        TraceManager.addDev("Done");
    }

    public int getTypeButtonSelected() {
        return typeButtonSelected;
    }

    public Plugin getPluginSelected() {
	return pluginSelected;
    }

    public void actionOnButton(int type, int id) {
        typeButtonSelected = type;
        idButtonSelected = id;
	pluginSelected = null;
        //TDiagramPanel tdp1 = ((TURTLEPanel)(tabs.elementAt(mainTabbedPane.getSelectedIndex()))).tdp;
        TDiagramPanel tdp1 = getCurrentTDiagramPanel();
        //TraceManager.addDev("Selected TDiagramPanel=" + tdp1.getName());
        tdp1.repaint();
    }

    public void actionOnButton(int type, Plugin _p) {
        typeButtonSelected = type;
        idButtonSelected = TGComponentManager.COMPONENT_PLUGIN;
	pluginSelected = _p;
        //TDiagramPanel tdp1 = ((TURTLEPanel)(tabs.elementAt(mainTabbedPane.getSelectedIndex()))).tdp;
        TDiagramPanel tdp1 = getCurrentTDiagramPanel();
        //TraceManager.addDev("Selected TDiagramPanel=" + tdp1.getName());
        tdp1.repaint();
    }

    public int getIdButtonSelected() {
        return idButtonSelected;
    }

    public void addTClass(TURTLEPanel tp, String s)     {
        if (!(tp instanceof DesignPanel)) {
            return;
        }

        ((DesignPanel)tp).addTActivityDiagram(s);
        setPanelMode();
    }

    public void addTOSClass(TURTLEPanel tp, String s)   {
        if (!(tp instanceof TURTLEOSDesignPanel)) {
            return;
        }

        ((TURTLEOSDesignPanel)tp).addTURTLEOSActivityDiagram(s);
        setPanelMode();
    }

    public void addTMLTask(TURTLEPanel tp, String s)    {
        //TraceManager.addDev("ADD TML Task=" + s);
        if (!(tp instanceof TMLDesignPanel)) {
            return;
        }

        ((TMLDesignPanel)tp).addTMLActivityDiagram(s);
        setPanelMode();
    }

    public void addTMLCPrimitiveComponent(TURTLEPanel tp, String s)     {
        //TraceManager.addDev("ADD C Primitive Component=" + s);
        if (!(tp instanceof TMLComponentDesignPanel)) {
            return;
        }

        ((TMLComponentDesignPanel)tp).addTMLActivityDiagram(s);
        setPanelMode();
    }

    public TMLActivityDiagramPanel getReferencedTMLActivityDiagramPanel(TDiagramPanel _tdp, String name) {
        TURTLEPanel tp;
        TMLActivityDiagramPanel tmladp;
        //TraceManager.addDev("global search for: " + name);
        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                if (tp.hasTDiagramPanel(_tdp)) {
                    tmladp = ((TMLComponentDesignPanel)tp).getTMLActivityDiagramPanel(name);
                    if (tmladp != null) {
                        //TraceManager.addDev("Found");
                        return tmladp;
                    }
                }
            }
        }

        TraceManager.addDev("Not found");
        return null;
    }

    public TURTLEPanel getTURTLEPanelOfTDiagramPanel(TDiagramPanel _tdp) {
        TURTLEPanel tp;
        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                if (tp.hasTDiagramPanel(_tdp)) {
                    return tp;

                }
            }
        }
        return null;
    }

    public ArrayList<EBRDDPanel> getAllEBRDDPanels() {
        TURTLEPanel tp;
        ArrayList<EBRDDPanel> al = new ArrayList<EBRDDPanel>();
        //TraceManager.addDev("global search for: " + name);
        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof RequirementPanel) {
                ((RequirementPanel)tp).addAllEBRDDPanels(al);
            }
        }

        return al;
    }

    public ArrayList<AvatarPDPanel> getAllAvatarPDPanels() {
        TURTLEPanel tp;
        ArrayList<AvatarPDPanel> al = new ArrayList<AvatarPDPanel>();
        //TraceManager.addDev("global search for: " + name);
        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof AvatarRequirementPanel) {
                ((AvatarRequirementPanel)tp).addAllAvatarPDPanels(al);
            }
        }

        return al;
    }

    public List<TGComponent> getAllTMLComponents() {
        TURTLEPanel tp;
        List<TGComponent> ll = new LinkedList<TGComponent>();

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);

            if (tp instanceof TMLComponentDesignPanel) {
                ll.addAll(((TMLComponentDesignPanel)tp).tmlctdp.getComponentList());
            }
        }

        return ll;
    }

    public void removeTClass(TURTLEPanel tp, String s)  {
        if (!(tp instanceof DesignPanel)) {
            return;
        }

        for(int i = 0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                tp.tabbedPane.removeTabAt(i);
                tp.panels.removeElementAt(i);
                setPanelMode();
                return;
            }
        }
    }

    public void removeTOSClass(TURTLEPanel tp, String s)        {
        if (!(tp instanceof TURTLEOSDesignPanel)) {
            return;
        }

        TraceManager.addDev("Removing tab ...");
        for(int i = 0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                tp.tabbedPane.removeTabAt(i);
                tp.panels.removeElementAt(i);
                setPanelMode();
                return;
            }
        }
    }
    public void removeTMLTask(TURTLEPanel tp, String s) {
        if (!(tp instanceof TMLDesignPanel)) {
            return;
        }

        for(int i = 0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                tp.tabbedPane.removeTabAt(i);
                tp.panels.removeElementAt(i);
                setPanelMode();
                return;
            }
        }
    }

    public void removeAvatarBlock (TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarDesignPanel))
            return;

        for (int i=0; i<tp.tabbedPane.getTabCount(); i++)
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                tp.tabbedPane.removeTabAt(i);
                tp.panels.removeElementAt(i);
                this.setPanelMode();
                return;
            }
    }

    public void removeTMLCPrimitiveComponent(TURTLEPanel tp, String s)  {
        //TraceManager.addDev("Removing panel 0:" + s);
        if (!(tp instanceof TMLComponentDesignPanel)) {
            return;
        }

        //TraceManager.addDev("Removing panel 1:" + s);
        for(int i = 0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                tp.tabbedPane.removeTabAt(i);
                tp.panels.removeElementAt(i);
                setPanelMode();
                return;
            }
        }
    }

    // for diagrams
    public void setEditMode() {
        typeButtonSelected = TGComponentManager.EDIT;
        idButtonSelected = -1;
    }

    public String getTabName(TURTLEPanel p) {
        int index = tabs.indexOf(p);
        if (index<0) {
            return "";
        }
        return mainTabbedPane.getTitleAt(index);
    }

    public int getMajorIndexOf(TDiagramPanel tdp) {
        TURTLEPanel tp;

        for(int i=0; i<tabs.size();i++) {
            tp = tabs.elementAt(i);
            if (tp.panels.contains(tdp)) {
                return i;
            }
        }

        return -1;
    }

    public String getMajorTitle(TDiagramPanel tdp) {
        int index = getMajorIndexOf(tdp);

        if (index == -1) {
            return "unknown";
        }

        return mainTabbedPane.getTitleAt(index);
    }

    public ArrayList<TMLComponentTaskDiagramPanel> getAllPanelsReferencingTMLCCompositeComponent(TMLCCompositeComponent tmlcc) {
        TURTLEPanel tp;
        ArrayList<TMLComponentTaskDiagramPanel> foundPanels = new ArrayList<TMLComponentTaskDiagramPanel>();

        for(int i=0; i<tabs.size();i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                ((TMLComponentDesignPanel)tp).tmlctdp.getPanelsUsingAComponent(tmlcc, foundPanels);
            }
        }

        return foundPanels;
    }

    public void updateReferenceToTMLCCompositeComponent(TMLCCompositeComponent tmlcc) {
        TURTLEPanel tp;

        for(int i=0; i<tabs.size();i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLComponentDesignPanel) {
                ((TMLComponentDesignPanel)tp).tmlctdp.updateReferenceToTMLCCompositeComponent(tmlcc);
            }
        }
    }

    public TMLCCompositeComponent getCompositeComponent(String name) {
        int index = name.indexOf("::");
        if (index == -1) {
            return null;
        }

        String panelName = name.substring(0, index);
        String componentName = name.substring(index+2, name.length());

        TURTLEPanel tp = getTURTLEPanel(panelName);

        if ((tp == null) || (!(tp instanceof TMLComponentDesignPanel))) {
            return null;
        }


        return ((TMLComponentDesignPanel)(tp)).tmlctdp.getCompositeComponentByName(componentName);
    }

    public AvatarSMDPanel getAvatarSMDPanel(int indexDesign, String name) {

        TURTLEPanel tp = tabs.elementAt(indexDesign);
        if (tp == null) {
            TraceManager.addDev("null TP");
            return null;
        }
        if (tp instanceof AvatarDesignPanel) {
            return ((AvatarDesignPanel)tp).getAvatarSMDPanel(name);
        }
        TraceManager.addDev("null ADP :" + name);
        return null;
    }
    public TActivityDiagramPanel getActivityDiagramPanel(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        if (tp == null) {
            return null;
        }
        if (tp instanceof DesignPanel) {
            return ((DesignPanel)tp).getActivityDiagramPanel(name);
        }
        return null;
    }

    public TURTLEOSActivityDiagramPanel getTURTLEOSActivityDiagramPanel(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        if (tp == null) {
            return null;
        }
        if (tp instanceof TURTLEOSDesignPanel) {
            return ((TURTLEOSDesignPanel)tp).getTURTLEOSActivityDiagramPanel(name);
        }
        return null;
    }

    public TMLActivityDiagramPanel getTMLActivityDiagramPanel(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        if (tp == null) {
            return null;
        }
        if (tp instanceof TMLDesignPanel) {
            return ((TMLDesignPanel)tp).getTMLActivityDiagramPanel(name);
        }
        if (tp instanceof TMLComponentDesignPanel) {
            return ((TMLComponentDesignPanel)tp).getTMLActivityDiagramPanel(name);
        }
        return null;
    }

    public ProactiveSMDPanel getSMDPanel(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        if (tp == null) {
            return null;
        }
        if (tp instanceof ProactiveDesignPanel) {
            return ((ProactiveDesignPanel)tp).getSMDPanel(name);
        }
        return null;
    }

    public int getNbActivityDiagram() {
        TDiagramPanel tdp;
        int cpt = 0;

        for(int i = 0; i<getCurrentJTabbedPane().getTabCount(); i++) {
            tdp = getCurrentTURTLEPanel().panels.elementAt(i);
            if (tdp instanceof TActivityDiagramPanel) {
                cpt ++;
            }
        }
        return cpt;
    }

    public void setAvatarBDName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setClassDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }
    public void setDiplodocusMethodologyDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setAvatarMethodologyDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setSystemCAMSDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setSysmlsecMethodologyDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setTMLTaskDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setTMLComponentTaskDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setTMLArchitectureDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setAADName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setProacticeCSDName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public TDiagramPanel getMainTDiagramPanel(int indexPanel) {
        if (tabs.size() > indexPanel) {
            TURTLEPanel tp = tabs.elementAt(indexPanel);
            return tp.tdp;
        } else {
            return null;
        }

    }

    // TMLCP
    public boolean isTMLCPSDCreated(int index, String s) {
        return isTMLCPSDCreated(tabs.elementAt(index), s);
    }

    public boolean isTMLCPSDCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof TMLSDPanel);
    }

    public boolean isTMLCPCreated(int index, String s) {
        return isTMLCPCreated(tabs.elementAt(index), s);
    }

    public boolean isTMLCPCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof TMLCPPanel);
    }




    // IOD, SD

    public boolean isSDCreated(int index, String s) {
        return isSDCreated(tabs.elementAt(index), s);
    }

    public boolean isIODCreated(int index, String s) {
        return isIODCreated(tabs.elementAt(index), s);
    }

    public boolean isProActiveSMDCreated(int index, String s) {
        return isProActiveSMDCreated(tabs.elementAt(index), s);
    }

    public boolean isSDCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof ui.sd.SequenceDiagramPanel);
    }

    public boolean isSDZVCreated(int index, String s) {
        return isSDZVCreated(tabs.elementAt(index), s);
    }

    public boolean isSDZVCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof ui.sd2.SequenceDiagramPanel);
    }

    public boolean isUseCaseDiagramCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof UseCaseDiagramPanel);
    }

    public boolean isAvatarCDCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof AvatarCDPanel);
    }

    public boolean isAvatarADCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof AvatarADPanel);
    }

    public boolean isIODCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof InteractionOverviewDiagramPanel);
    }

    public boolean isProActiveSMDCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof ProactiveSMDPanel);
    }

    public boolean openSequenceDiagram(String s) {
        int index = getCurrentJTabbedPane().indexOfTab(s);
        if (index > -1) {
            getCurrentJTabbedPane().setSelectedIndex(index);
            return true;
        }
        return false;
    }

    public boolean openSequenceDiagramZV(String s) {
        int index = getCurrentJTabbedPane().indexOfTab(s);
        if (index > -1) {
            getCurrentJTabbedPane().setSelectedIndex(index);
            return true;
        }
        return false;
    }

    public boolean openIODiagram(String s) {
        int index = getCurrentJTabbedPane().indexOfTab(s);
        if (index > -1) {
            getCurrentJTabbedPane().setSelectedIndex(index);
            return true;
        }
        return false;
    }

    // TMLCP
    public boolean openTMLCPSequenceDiagram(String s) {
        int index = getCurrentJTabbedPane().indexOfTab(s);
        if (index > -1) {
            getCurrentJTabbedPane().setSelectedIndex(index);
            return true;
        }
        return false;
    }

    public boolean openTMLCPDiagram(String s) {
        int index = getCurrentJTabbedPane().indexOfTab(s);
        if (index > -1) {
            getCurrentJTabbedPane().setSelectedIndex(index);
            return true;
        }
        return false;
    }


    public boolean createTMLCPSequenceDiagram(int index, String s) {
        return createTMLCPSequenceDiagram(tabs.elementAt(index), s);
    }

    public boolean createTMLCPSequenceDiagram(TURTLEPanel tp, String s) {
        if(isSDCreated(tp, s)) {
            return false;
        }

        if (!(tp instanceof TMLCommunicationPatternPanel) ) {
            return false;
        }


        ((TMLCommunicationPatternPanel)tp).addCPSequenceDiagram(s);

        setPanelMode();
        return true;
    }

    public boolean createUniqueTMLCPSequenceDiagram(TURTLEPanel tp, String s) {
        int i;
        for(i=0; i<1000; i++) {
            if(!isTMLCPSDCreated(tp, s+i)) {
                break;
            }
        }

        ((TMLCommunicationPatternPanel)tp).addCPSequenceDiagram(s+i);

        setPanelMode();
        return true;
    }

    public boolean createTMLCPDiagram(int index, String s) {
        return createTMLCPDiagram(tabs.elementAt(index), s);
    }

    public boolean createTMLCPDiagram(TURTLEPanel tp, String s) {
        if(isTMLCPCreated(tp, s)) {
            return false;
        }

        if (!(tp instanceof TMLCommunicationPatternPanel)) {
            return false;
        }

        ((TMLCommunicationPatternPanel)tp).addCPDiagram(s);
        setPanelMode();
        return true;
    }

    // End of TMLCP


    public ui.sd.SequenceDiagramPanel getSequenceDiagramPanel(int index, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getSequenceDiagramPanel(tp, s);
    }


    public ui.sd2.SequenceDiagramPanel getSequenceDiagramPanelZV(int index, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getSequenceDiagramPanelZV(tp, s);
    }


    public AttackTreeDiagramPanel getAttackTreeDiagramPanel(int index, int indexTab, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getAttackTreeDiagramPanel(tp, indexTab, s);
    }

    public AttackTreeDiagramPanel getAttackTreeDiagramPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (AttackTreeDiagramPanel)(tp.panelAt(indexTab));
        }
        return null;
        /*for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
          if (tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
          if (tp.panelAt(i) instanceof AttackTreeDiagramPanel)
          return  (AttackTreeDiagramPanel)(tp.panelAt(i));
          }
          }
          return null;*/
    }


    public TMLCPPanel getTMLCPDiagramPanel(int index, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getTMLCPDiagramPanel(tp, s);
    }

    public TMLCPPanel getTMLCPDiagramPanel(TURTLEPanel tp, String s) {
        for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                if (tp.panelAt(i) instanceof TMLCPPanel)
                    return  (TMLCPPanel)(tp.panelAt(i));
            }
        }
        return null;
    }

    public TMLSDPanel getTMLCPSDDiagramPanel(int index, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getTMLCPSDDiagramPanel(tp, s);
    }

    public TMLSDPanel getTMLCPSDDiagramPanel(TURTLEPanel tp, String s) {
        for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                if (tp.panelAt(i) instanceof TMLSDPanel)
                    return  (TMLSDPanel)(tp.panelAt(i));
            }
        }
        return null;
    }

    public InteractionOverviewDiagramPanel getIODiagramPanel(int index, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getIODiagramPanel(tp, s);
    }

    public ui.sd.SequenceDiagramPanel getSequenceDiagramPanel(TURTLEPanel tp, String s) {
        for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                if (tp.panelAt(i) instanceof ui.sd.SequenceDiagramPanel)
                    return  (ui.sd.SequenceDiagramPanel)(tp.panelAt(i));
            }
        }
        return null;
    }

    public ui.sd2.SequenceDiagramPanel getSequenceDiagramPanelZV(TURTLEPanel tp, String s) {
        for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                if (tp.panelAt(i) instanceof ui.sd2.SequenceDiagramPanel)
                    return  (ui.sd2.SequenceDiagramPanel)(tp.panelAt(i));
            }
        }
        return null;
    }

    public InteractionOverviewDiagramPanel getIODiagramPanel(TURTLEPanel tp, String s) {
        for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                if (tp.panelAt(i) instanceof InteractionOverviewDiagramPanel)
                    return  (InteractionOverviewDiagramPanel)(tp.panelAt(i));
            }
        }
        return null;
    }

    public UseCaseDiagramPanel getUseCaseDiagramPanel(int index, int indexTab, String s) {
        //TraceManager.addDev("Searching for " + s + " at index =" + index);
        TURTLEPanel tp = tabs.elementAt(index);
        return getUseCaseDiagramPanel(tp, indexTab, s);
    }

    public UseCaseDiagramPanel getUseCaseDiagramPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (UseCaseDiagramPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public boolean createSequenceDiagram(int index, String s) {
        return createSequenceDiagram(tabs.elementAt(index), s);
    }

    public boolean createSequenceDiagram(TURTLEPanel tp, String s) {
        if(isSDCreated(tp, s)) {
            return false;
        }

        if (!((tp instanceof AnalysisPanel) || (tp instanceof AvatarAnalysisPanel))) {
            return false;
        }

        if (tp instanceof AnalysisPanel) {
            ((AnalysisPanel)tp).addSequenceDiagram(s);
        } else if (tp instanceof AvatarAnalysisPanel) {
            ((AvatarAnalysisPanel)tp).addSequenceDiagram(s);
        }
        setPanelMode();
        return true;
    }
    public boolean createSequenceDiagramZV(int index, String s) {
        return createSequenceDiagramZV(tabs.elementAt(index), s);
    }

    public boolean createSequenceDiagramZV(TURTLEPanel tp, String s) {
        if(isSDCreated(tp, s)) {
            return false;
        }

        if (!((tp instanceof AnalysisPanel) || (tp instanceof AvatarAnalysisPanel))) {
            return false;
        }

        if (tp instanceof AnalysisPanel) {
            ((AnalysisPanel)tp).addSequenceDiagramZV(s);
        } else if (tp instanceof AvatarAnalysisPanel) {
            ((AvatarAnalysisPanel)tp).addSequenceDiagramZV(s);
        }
        setPanelMode();
        return true;
    }

    public boolean createUniqueSequenceDiagram(TURTLEPanel tp, String s) {
        int i;
        for(i=0; i<1000; i++) {
            if(!isSDCreated(tp, s+i)) {
                break;
            }
        }

        if (tp instanceof AnalysisPanel) {
            ((AnalysisPanel)tp).addSequenceDiagram(s+i);
        } else if (tp instanceof AvatarAnalysisPanel) {
            ((AvatarAnalysisPanel)tp).addSequenceDiagram(s+i);
        }

        setPanelMode();
        return true;
    }


    public boolean createUniqueSequenceDiagramZV(TURTLEPanel tp, String s) {
        int i;
        for(i=0; i<1000; i++) {
            if(!isSDCreated(tp, s+i)) {
                break;
            }
        }

        if (tp instanceof AnalysisPanel) {
            ((AnalysisPanel)tp).addSequenceDiagramZV(s+i);
        } else if (tp instanceof AvatarAnalysisPanel) {
            ((AvatarAnalysisPanel)tp).addSequenceDiagramZV(s+i);
        }

        setPanelMode();
        return true;
    }

    public boolean createSequenceDiagramFromUCD(TURTLEPanel tp, String s, UseCaseDiagramPanel _ucdp) {
        if (!createUniqueSequenceDiagramZV(tp, s)) {
            return false;
        }

        if (! ((tp instanceof AnalysisPanel) || (tp instanceof AvatarAnalysisPanel))) {
            return false;
        }

        if (tp instanceof AnalysisPanel) {
            ((AnalysisPanel)tp).addInstancesToLastSD(_ucdp);
        } else if (tp instanceof AvatarAnalysisPanel) {
            ((AvatarAnalysisPanel)tp).addInstancesToLastSD(_ucdp);
        }

        return true;
    }



    public boolean createIODiagram(int index, String s) {
        return createIODiagram(tabs.elementAt(index), s);
    }

    public boolean createIODiagram(TURTLEPanel tp, String s) {
        if(isIODCreated(tp, s)) {
            return false;
        }

        if (!(tp instanceof AnalysisPanel)) {
            return false;
        }

        ((AnalysisPanel)tp).addIODiagram(s);
        setPanelMode();
        return true;
    }

    public boolean createUseCaseDiagram(int index, String s) {
        return createUseCaseDiagram(tabs.elementAt(index), s);
    }

    public boolean createUniqueUseCaseDiagram(TURTLEPanel tp, String s) {
        if (!((tp instanceof AnalysisPanel) || (tp instanceof AvatarAnalysisPanel)))  {
            return false;
        }

        int i;
        for(i=0; i<1000; i++) {
            if(!isUseCaseDiagramCreated(tp, s + " " + i)) {
                break;
            }
        }

        if (tp instanceof AnalysisPanel) {
            ((AnalysisPanel)tp).addUseCaseDiagram(s + " " + i);
        } else {
            ((AvatarAnalysisPanel)tp).addUseCaseDiagram(s + " " + i);
        }
        setPanelMode();
        return true;
    }

    public boolean createUseCaseDiagram(TURTLEPanel tp, String s) {
        if (!((tp instanceof AnalysisPanel) || (tp instanceof AvatarAnalysisPanel)))  {
            return false;
        }

        if (tp instanceof AnalysisPanel) {
            ((AnalysisPanel)tp).addUseCaseDiagram(s);
        } else {
            ((AvatarAnalysisPanel)tp).addUseCaseDiagram(s);
        }
        setPanelMode();
        return true;
    }

    public boolean createAvatarCD(int index, String s) {
        return createAvatarCD(tabs.elementAt(index), s);
    }

    public boolean createUniqueAvatarCD(TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarAnalysisPanel))  {
            return false;
        }

        int i;
        for(i=0; i<1000; i++) {
            if(!isAvatarCDCreated(tp, s + " " + i)) {
                break;
            }
        }

        ((AvatarAnalysisPanel)tp).addAvatarContextDiagram(s + " " + i);


        setPanelMode();
        return true;
    }

    public boolean createAvatarCD(TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarAnalysisPanel))  {
            return false;
        }

        ((AvatarAnalysisPanel)tp).addAvatarContextDiagram(s);


        setPanelMode();
        return true;
    }

    public boolean createAvatarAD(int index, String s) {
        return createAvatarAD(tabs.elementAt(index), s);
    }

    public boolean createUniqueAvatarAD(TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarAnalysisPanel)) {
            return false;
        }

        int i;
        for(i=0; i<1000; i++) {
            if(!isAvatarADCreated(tp, s + " " + i)) {
                break;
            }
        }

        ((AvatarAnalysisPanel)tp).addAvatarActivityDiagram(s + " " + i);
        setPanelMode();
        return true;
    }

    public boolean createAvatarAD(TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarAnalysisPanel)) {
            return false;
        }


        ((AvatarAnalysisPanel)tp).addAvatarActivityDiagram(s);

        setPanelMode();
        return true;
    }

    //Changed by Solange from public boolean...
    public String createProActiveSMD(int index, String s) {
        //Adde by Solange String name at  the beginning
        String name=createProActiveSMD(tabs.elementAt(index), s);
        return(name); //changed from return true
    }

    //Return changed by Solange from boolean to String
    public String createProActiveSMD(TURTLEPanel tp, String s) {

        //Added by Solange. It fills the lists of components, interfaces, etc
        TURTLEPanel tp2 = getCurrentTURTLEPanel();
        gtm.generateLists((ProactiveDesignPanel)tp2);
        //

        if (!(tp instanceof ProactiveDesignPanel)) {
            return null; //Changed by Solange from return false
        }

        s=((ProactiveDesignPanel)tp).addSMD(s);
        //Added by Solange
        //  ProactiveSMDPanel temp=((ProactiveDesignPanel)tp).getSMDPanel(s);
        //Added by Solange
        //And removed by Emil

        /*
          LinkedList cmps=gtm.gpdtemp.getProCSDComponentsList();
          for (int i=0;i<cmps.size();i++)
          {
          ProCSDComponent c = (ProCSDComponent)cmps.get(i);

          if (c.getType()== TGComponentManager.PROCSD_COMPONENT)
          {
          if(c.getComponentID().equals(temp.getName()))
          {
          c.mySMD=temp;
          i=cmps.size();
          }
          }
          }
        */
        //
        setPanelMode();
        return(s); //Changes by Solange from return true
    }

    public boolean createAvatarRD(int index, String s) {
        return createAvatarRD(tabs.elementAt(index), s);
    }

    public boolean createAvatarRD(TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarRequirementPanel)) {
            return false;
        }

        ((AvatarRequirementPanel)tp).addAvatarRD(s);
        setPanelMode();
        return true;
    }

    public boolean createAvatarMAD(int index, String s) {
        return createAvatarMAD(tabs.elementAt(index), s);
    }

    public boolean createAvatarMAD(TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarMADsPanel)) {
            return false;
        }

        ((AvatarMADsPanel)tp).addAvatarMADPanel(s);
        setPanelMode();
        return true;
    }

    public boolean createAvatarPD(int index, String s) {
        return createAvatarPD(tabs.elementAt(index), s);
    }

    public boolean createAvatarPD(TURTLEPanel tp, String s) {
        if (!(tp instanceof AvatarRequirementPanel)) {
            return false;
        }

        ((AvatarRequirementPanel)tp).addAvatarPD(s);
        setPanelMode();
        return true;
    }

    public boolean createADDDiagram(int index, String s) {
        return createADDDiagram(tabs.elementAt(index), s);
    }

    public boolean createADDDiagram(TURTLEPanel tp, String s) {
        if (!(tp instanceof ADDPanel)) {
            return false;
        }

        ((ADDPanel)tp).addDeploymentPanelDiagram(s);
        setPanelMode();
        return true;
    }


    public boolean isRequirementCreated(int index, String s) {
        return isRequirementCreated(tabs.elementAt(index), s);
    }

    public boolean isRequirementCreated(TURTLEPanel tp, String s) {
        int index = tp.tabbedPane.indexOfTab(s);
        if (index == -1) {
            return false;
        }
        return (tp.panelAt(index) instanceof RequirementDiagramPanel);
    }

    public boolean createRequirementDiagram(int index, String s) {
        return createRequirementDiagram(tabs.elementAt(index), s);
    }

    public boolean createRequirementDiagram(TURTLEPanel tp, String s) {
        if (!(tp instanceof RequirementPanel)) {
            return false;
        }

        ((RequirementPanel)tp).addRequirementDiagram(s);
        setPanelMode();
        return true;
    }

    public boolean createAttackTreeDiagram(int index, String s) {
        return createAttackTreeDiagram(tabs.elementAt(index), s);
    }

    public boolean createAttackTreeDiagram(TURTLEPanel tp, String s) {
        if (!(tp instanceof AttackTreePanel)) {
            return false;
        }

        ((AttackTreePanel)tp).addAttackTreeDiagram(s);
        setPanelMode();
        return true;
    }

    public boolean createEBRDD(int index, String s) {
        return createEBRDD(tabs.elementAt(index), s);
    }

    public boolean createEBRDD(TURTLEPanel tp, String s) {
        if (!(tp instanceof RequirementPanel)) {
            return false;
        }

        ((RequirementPanel)tp).addEBRDD(s);
        setPanelMode();
        return true;
    }

    public void generateOntologyForCurrentDiagram() {
        TraceManager.addDev("Ontology for current diagram");
        try {
            TURTLEPanel tp = getCurrentTURTLEPanel();
            String modeling = gtm.makeOneDiagramXMLFromGraphicalModel(tp, tp.tabbedPane.getSelectedIndex());
            TraceManager.addDev("Model made: " + modeling);
        } catch (Exception e) {
        }

    }

    public void generateOntologyForCurrentSetOfDiagrams() {
        TraceManager.addDev("Ontology for current set of diagrams");
        try {
            String modeling = gtm.makeXMLFromTurtleModeling(mainTabbedPane.getSelectedIndex());
            TraceManager.addDev("Model made: " + modeling);
        } catch (Exception e) {
        }

    }

    public void generateOntologyForAllDiagrams() {
        TraceManager.addDev("Ontology for all diagrams");
        try {
            /*String modeling =*/ gtm.makeXMLFromTurtleModeling(-1);
            TraceManager.addDev("Model made");
        } catch (Exception e) {
        }

    }



    public AvatarRDPanel getAvatarRDPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getAvatarRDPanel(tp, indexTab, s);
    }

    public AvatarRDPanel getAvatarRDPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (AvatarRDPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public AvatarMADPanel getAvatarMADPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getAvatarMADPanel(tp, indexTab, s);
    }

    public AvatarMADPanel getAvatarMADPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (AvatarMADPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public AvatarPDPanel getAvatarPDPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getAvatarPDPanel(tp, indexTab, s);
    }

    public ADDDiagramPanel getAvatarADDPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getAvatarADDPanel(tp, indexTab, s);
    }

    public ADDDiagramPanel getAvatarADDPanelByIndex(int index, int indexTab) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getAvatarADDPanelByIndex(tp, indexTab);
    }


    public AvatarPDPanel getAvatarPDPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (AvatarPDPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public ADDDiagramPanel getAvatarADDPanel(TURTLEPanel tp, int indexTab, String s) {
        TraceManager.addDev("index=" + indexTab + " s=" + s + "title=" +tp.tabbedPane.getTitleAt(indexTab));

        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (ADDDiagramPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public ADDDiagramPanel getAvatarADDPanelByIndex(TURTLEPanel tp, int indexTab) {
        //TraceManager.addDev("index=" + indexTab + " s=" + s + "title=" +tp.tabbedPane.getTitleAt(indexTab));

        //if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
        return (ADDDiagramPanel)(tp.panelAt(indexTab));
        //}

    }

    public AvatarCDPanel getAvatarCDPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getAvatarCDPanel(tp, indexTab, s);
    }


    public AvatarCDPanel getAvatarCDPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (AvatarCDPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public AvatarADPanel getAvatarADPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getAvatarADPanel(tp, indexTab, s);
    }


    public AvatarADPanel getAvatarADPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (AvatarADPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public RequirementDiagramPanel getRequirementDiagramPanel(int index, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getRequirementDiagramPanel(tp, s);
    }

    public RequirementDiagramPanel getRequirementDiagramPanel(TURTLEPanel tp, String s) {
        for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                if (tp.panelAt(i) instanceof RequirementDiagramPanel)
                    return  (RequirementDiagramPanel)(tp.panelAt(i));
            }
        }
        return null;
    }

    public RequirementDiagramPanel getRequirementDiagramPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getRequirementDiagramPanel(tp, indexTab, s);
    }


    public RequirementDiagramPanel getRequirementDiagramPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (RequirementDiagramPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public EBRDDPanel getEBRDDPanel(int index, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getEBRDDPanel(tp, s);
    }

    public EBRDDPanel getEBRDDPanel(TURTLEPanel tp, String s) {
        for(int i=0; i<tp.tabbedPane.getTabCount(); i++) {
            if (tp.tabbedPane.getTitleAt(i).equals(s)) {
                if (tp.panelAt(i) instanceof EBRDDPanel)
                    return  (EBRDDPanel)(tp.panelAt(i));
            }
        }
        return null;
    }

    public EBRDDPanel getEBRDDPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getEBRDDPanel(tp, indexTab, s);
    }


    public EBRDDPanel getEBRDDPanel(TURTLEPanel tp, int indexTab, String s) {
        if(tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (EBRDDPanel)(tp.panelAt(indexTab));
        }
        return null;
    }

    public void alignInstances() {
        //TraceManager.addDev("Align instances");
        if (getCurrentTDiagramPanel() instanceof ui.sd.SequenceDiagramPanel) {
            ((ui.sd.SequenceDiagramPanel)(getCurrentTDiagramPanel())).alignInstances();
            changeMade(getCurrentTDiagramPanel(), TDiagramPanel.MOVE_COMPONENT);
            getCurrentTDiagramPanel().repaint();
        }

        if (getCurrentTDiagramPanel() instanceof ui.sd2.SequenceDiagramPanel) {
            ((ui.sd2.SequenceDiagramPanel)(getCurrentTDiagramPanel())).alignInstances();
            changeMade(getCurrentTDiagramPanel(), TDiagramPanel.MOVE_COMPONENT);
            getCurrentTDiagramPanel().repaint();
        }

        if (getCurrentTDiagramPanel() instanceof TMLSDPanel) {
            ((TMLSDPanel)(getCurrentTDiagramPanel())).alignInstances();
            changeMade(getCurrentTDiagramPanel(), TDiagramPanel.MOVE_COMPONENT);
            getCurrentTDiagramPanel().repaint();
        }
    }

    public void alignPartitions() {
        //TraceManager.addDev("Align instances");
        if (getCurrentTDiagramPanel() instanceof AvatarADPanel) {
            ((AvatarADPanel)(getCurrentTDiagramPanel())).alignPartitions();
            changeMade(getCurrentTDiagramPanel(), TDiagramPanel.MOVE_COMPONENT);
            getCurrentTDiagramPanel().repaint();
        }
    }

    public void enhanceDiagram() {
        getCurrentTDiagramPanel().enhance();
    }

    public JTabbedPane getCurrentJTabbedPane() {
        return tabs.elementAt(mainTabbedPane.getSelectedIndex()).tabbedPane;
    }

    public int getCurrentSelectedIndex() {
        return mainTabbedPane.getSelectedIndex();
    }


    public TDiagramPanel getCurrentTDiagramPanel() {
        try {
            TURTLEPanel tp = tabs.elementAt(mainTabbedPane.getSelectedIndex());
            return tp.panels.elementAt(tp.tabbedPane.getSelectedIndex());
        } catch (Exception e) {
            return null;
        }
    }

    public TDiagramPanel getCurrentMainTDiagramPanel() {
        return tabs.elementAt(mainTabbedPane.getSelectedIndex()).tdp;
    }

    public void selectDummyTab (int index) {
        if (this.tabs.size () < index+1)
            return;
        this.dummySelectedTab = this.tabs.elementAt (index);
    }

    public void forgetDummyTab () {
        this.dummySelectedTab = null;
    }

    public TURTLEPanel getCurrentTURTLEPanel() {
        if (this.dummySelectedTab != null)
            return this.dummySelectedTab;

        if (tabs.size() == 0) {
            return null;
        } else {
            return tabs.elementAt(mainTabbedPane.getSelectedIndex());
        }
    }


    public void reinitCountOfPanels() {
        int i, j;
        TURTLEPanel tp;
        for(i = 0; i<mainTabbedPane.getTabCount(); i++) {
            tp = tabs.elementAt(i);
            for(j=0; j<tp.tabbedPane.getTabCount(); j++) {
                tp.panels.elementAt(j).count = 0;
            }
        }
    }

    public void setPanelMode() {
        int index;
        TURTLEPanel tp = getCurrentTURTLEPanel();
		if (tp==null){
			return;
		}
        index = tp.tabbedPane.getSelectedIndex();

        if (index < tp.panels.size() -1) {
            setMode(FORWARD_DIAG);
        } else {
            setMode(NO_FORWARD_DIAG);
        }

        if (index > 0) {
            setMode(BACKWARD_DIAG);
        } else {
            setMode(NO_BACKWARD_DIAG);
        }

        setMode(METHO_CHANGED);

    }

    public void paneMADAction(ChangeEvent e) {
        //TraceManager.addDev("Pane design action size=" + tabs.size());
        try {

            TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex());
            //TraceManager.addDev("Pane design action 1");
            if (activetdp != null) {
                activetdp.activateActions(false);
                unactivateDrawing();
                activetdp.stopAddingConnector();
            }
            //TraceManager.addDev("Pane design action 1 on "+ tdp1.getName());
            tdp1.activateActions(true);
            activetdp = tdp1;

            setEditMode();
            setPanelMode();
            //TraceManager.addDev("Pane design action 3");

            // activate the   drawing   of the right pane
            basicActivateDrawing();

        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane design action");
        }
    }

    public void paneDesignAction(ChangeEvent e) {
        //TraceManager.addDev("Pane design action size=" + tabs.size());
        try {

            TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex());
            //TraceManager.addDev("Pane design action 1");
            if (activetdp != null) {
                activetdp.activateActions(false);
                unactivateDrawing();
                activetdp.stopAddingConnector();
            }
            //TraceManager.addDev("Pane design action 1 on "+ tdp1.getName());
            tdp1.activateActions(true);
            activetdp = tdp1;

            setEditMode();
            setPanelMode();
            //TraceManager.addDev("Pane design action 3");

            // activate the   drawing   of the right pane
            basicActivateDrawing();

        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane design action");
        }
    }

    public void paneDiplodocusMethodologyAction(ChangeEvent e) {
        //TraceManager.addDev("Pane design action size=" + tabs.size());
        try {
        	TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex());
            //TraceManager.addDev("Pane design action 1");
            if (activetdp != null) {

                activetdp.activateActions(false);
                unactivateDrawing();
                activetdp.stopAddingConnector();
            }
            //TraceManager.addDev("Pane design action 1 on "+ tdp1.getName());
            tdp1.activateActions(true);
            activetdp = tdp1;

            setEditMode();
            setPanelMode();
            //TraceManager.addDev("Pane design action 3");

            // activate the   drawing   of the right pane
            basicActivateDrawing();

        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane design action");
        }
    }

    public void paneAvatarMethodologyAction(ChangeEvent e) {
        //TraceManager.addDev("Pane design action size=" + tabs.size());
        try {

            TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex());
            //TraceManager.addDev("Pane design action 1");
            if (activetdp != null) {

                activetdp.activateActions(false);
                unactivateDrawing();
                activetdp.stopAddingConnector();
            }
            //TraceManager.addDev("Pane design action 1 on "+ tdp1.getName());
            tdp1.activateActions(true);
            activetdp = tdp1;

            setEditMode();
            setPanelMode();
            //TraceManager.addDev("Pane design action 3");

            // activate the   drawing   of the right pane
            basicActivateDrawing();

        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane design action");
        }
    }

    public void paneAnalysisAction(ChangeEvent e) {
        //TraceManager.addDev("Pane analysis action size=" + tabs.size());
        try {

            TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex());
            //TraceManager.addDev("Pane analysis action 1 on " + tdp1.getName());
            if (activetdp != null) {
                activetdp.activateActions(false);
                unactivateDrawing();
                activetdp.stopAddingConnector();
            }
            //TraceManager.addDev("Pane analysis action 2");
            tdp1.activateActions(true);
            activetdp = tdp1;

            setEditMode();
            setPanelMode();
            //TraceManager.addDev("Pane analysis action 3");

            // activate the   drawing   of the right pane
            basicActivateDrawing();

        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane analysis action");
        }
    }

    public void paneDeployAction(ChangeEvent e) {
        //TraceManager.addDev("Pane design action size=" + tabs.size());
        try {

            TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex());
            //TraceManager.addDev("Pane design action 1");
            if (activetdp != null) {
                activetdp.activateActions(false);
                unactivateDrawing();
                activetdp.stopAddingConnector();
            }
            //TraceManager.addDev("Pane design action 1 on "+ tdp1.getName());
            tdp1.activateActions(true);
            activetdp = tdp1;

            setEditMode();
            setPanelMode();
            //TraceManager.addDev("Pane design action 3");

            // activate the   drawing   of the right pane
            basicActivateDrawing();

        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane design action");
        }
    }

    public void paneRequirementAction(ChangeEvent e) {
        try {

            TDiagramPanel tdp1 = getCurrentTURTLEPanel().panels.elementAt(getCurrentJTabbedPane().getSelectedIndex());
            //TraceManager.addDev("Pane design action 1");
            if (activetdp != null) {
                activetdp.activateActions(false);
                unactivateDrawing();
                activetdp.stopAddingConnector();
            }
            //TraceManager.addDev("Pane design action 1 on "+ tdp1.getName());
            tdp1.activateActions(true);
            activetdp = tdp1;

            setEditMode();
            setPanelMode();

            // activate the   drawing   of the right pane
            basicActivateDrawing();

        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane design action");
        }
    }

    // nameTab : array of strings not to be removed
    public void removeAnalysisDiagrams(String [] nameTab) {
        int i, j;
        String value;
        boolean found;

        for(i=1; i<getCurrentJTabbedPane().getTabCount(); i++) {
            value = getCurrentJTabbedPane().getTitleAt(i);
            found = false;
            for(j=0; j<nameTab.length; j++) {
                if (nameTab[j] != null) {
                    if (nameTab[j].compareTo(value) ==0) {
                        found = true;
                        break;
                    }

                }
            }
            if (!found) {
                TraceManager.addDev("Removing" + getCurrentJTabbedPane().getTitleAt(i));
                getCurrentJTabbedPane().remove(i);
                getCurrentTURTLEPanel().removeElementAt(i);
                i--;
            }
        }
    }

    public void renameTab(TDiagramPanel tdp) {
        String value;
        int index, index1;

        index = getCurrentJTabbedPane().getSelectedIndex();
        value = getCurrentJTabbedPane().getTitleAt(index);

        //String s = (String)JOptionPane.showInputDialog(this, "Name of the diagram:", JOptionPane.QUESTION_MESSAGE);
        String s = (String)JOptionPane.showInputDialog(frame, "Name of the diagram:", "setting value", JOptionPane.PLAIN_MESSAGE, IconManager.imgic101, null, value);

        if ((s != null) && (s.length() > 0)){
            // name already in use?
            index1 = getCurrentJTabbedPane().indexOfTab(s);
            /*if (methoMode == METHO_ANALYSIS) {
              index1 = mainAnalysisTabbedPane.indexOfTab(s);

              } else {
              index1 = getCurrentJTabbedPane.indexOfTab(s);

              }*/
            if (index1 > -1) {
                JOptionPane.showMessageDialog(frame, "Name is already in use", "Error", JOptionPane.INFORMATION_MESSAGE);
            } else {
                /*if (methoMode == METHO_ANALYSIS) {
                  mainAnalysisTabbedPane.setTitleAt(index, s);
                  } else {
                  mainDesignTabbedPane.setTitleAt(index, s);
                  }*/
                if (isAValidTabName(s)) {
                    JOptionPane.showMessageDialog(frame, "Invalid name", "Error", JOptionPane.INFORMATION_MESSAGE);
                } else {
                    getCurrentJTabbedPane().setTitleAt(index, s);
                    tdp.setName(s);
                    changeMade(tdp, TDiagramPanel.NEW_COMPONENT);
                }
            }
        }
    }

    public void deleteTab(TDiagramPanel tdp) {
        //TraceManager.addDev("Delete");

        // We know the selected tab -> remove this tab

        int index;
        JTabbedPane jtp = getCurrentJTabbedPane();
        index = jtp.getSelectedIndex();
        getCurrentTURTLEPanel().panels.removeElementAt(index);
        jtp.remove(index);

        // Signal the change
        changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);

    }

    private void basicActivateDrawing() {
        activetdp.setDraw(true);
        if (activetdp.mode == TDiagramPanel.SELECTED_COMPONENTS) {
            setMode(MainGUI.CUTCOPY_OK);
            setMode(MainGUI.EXPORT_LIB_OK);
        } else {
            setMode(MainGUI.CUTCOPY_KO);
            setMode(MainGUI.EXPORT_LIB_KO);
        }
    }

    private void unactivateDrawing() {
        activetdp.setDraw(false);
    }

    public void paneAction(ChangeEvent e) {
        //TraceManager.addDev("Pane action");
        TDiagramPanel tdp1 = getCurrentTDiagramPanel();
        if (tdp1 != null) {
            //TraceManager.addDev("Stop Adding connector in maingui");
            tdp1.stopAddingConnector();
        }

        try {
            if (getCurrentTURTLEPanel() instanceof DesignPanel) {
                setMethodologicalMode(METHO_DESIGN);
                paneDesignAction(e);
            } else if (getCurrentTURTLEPanel() instanceof AnalysisPanel) {
                setMethodologicalMode(METHO_ANALYSIS);
                paneAnalysisAction(e);
            } else {
                setMethodologicalMode(METHO_DEPLOY);
                paneDeployAction(e);
            }

            if ((getCurrentTURTLEPanel() instanceof AvatarDesignPanel) || (getCurrentTURTLEPanel() instanceof AvatarRequirementPanel) || (getCurrentTURTLEPanel() instanceof AttackTreePanel) || (getCurrentTURTLEPanel() instanceof ADDPanel)) {
                mainBar.showAvatarActions(true);
            } else if ((getCurrentTURTLEPanel() instanceof TMLDesignPanel) || (getCurrentTURTLEPanel() instanceof TMLComponentDesignPanel) || (getCurrentTURTLEPanel() instanceof TMLArchiPanel)){
                mainBar.showDiplodocusActions(true);
            }  else {
                mainBar.showAvatarActions(false);
            }

            setMode(PANEL_CHANGED);

            setEditMode();
            setPanelMode();


        } catch (Exception ex) {
            //TraceManager.addDev("Exception pane action: " + ex.getMessage());
        }
    }

    public JFrame getFrame() {
        return frame;
    }

    public boolean newTClassName(TURTLEPanel tp, String old, String niou) {
        JTabbedPane jtp = tp.tabbedPane;
        for(int i = 0; i<jtp.getTabCount(); i++) {
            if (jtp.getTitleAt(i).equals(niou)) {
                return false;
            }
        }
        //TraceManager.addDev("old " + old + " niou " + niou);
        for(int i = 0; i<jtp.getTabCount(); i++) {
            //TraceManager.addDev("Tab " + i + " = " + mainTabbedPane.getTitleAt(i));
            if (jtp.getTitleAt(i).equals(old)) {
                jtp.setTitleAt(i, niou);
                jtp.setToolTipTextAt(i, "Opens the activity diagram of " + niou);
                TDiagramPanel tdp;
                //change panel name
                for(int j=0; j<tp.panels.size(); j++) {
                    tdp = tp.panels.elementAt(j);
                    if (tdp.getName().equals(old)) {
                        tdp.setName(niou);
                    }
                }

                return true;
            }
        }
        // internal error
        ErrorGUI.exit(ErrorGUI.ERROR_TAB);
        return false;
    }

    public boolean newTOSClassName(TURTLEPanel tp, String old, String niou) {
        JTabbedPane jtp = tp.tabbedPane;
        for(int i = 0; i<jtp.getTabCount(); i++) {
            if (jtp.getTitleAt(i).equals(niou)) {
                return false;
            }
        }
        //TraceManager.addDev("old " + old + " niou " + niou);
        for(int i = 0; i<jtp.getTabCount(); i++) {
            //TraceManager.addDev("Tab " + i + " = " + mainTabbedPane.getTitleAt(i));
            if (jtp.getTitleAt(i).equals(old)) {
                jtp.setTitleAt(i, niou);
                jtp.setToolTipTextAt(i, "Opens the TURTLE-OS activity diagram of " + niou);
                TDiagramPanel tdp;
                //change panel name
                for(int j=0; j<tp.panels.size(); j++) {
                    tdp = tp.panels.elementAt(j);
                    if (tdp.getName().equals(old)) {
                        tdp.setName(niou);
                    }
                }

                return true;
            }
        }
        // internal error
        ErrorGUI.exit(ErrorGUI.ERROR_TAB);
        return false;
    }

    public boolean newTMLTaskName(TURTLEPanel tp, String old, String niou) {
        //TraceManager.addDev("Panel=" + tp + " Old  task name = " + old + " New task name=" + niou);
        JTabbedPane jtp = tp.tabbedPane;
        for(int i = 0; i<jtp.getTabCount(); i++) {
            //TraceManager.addDev("jtp  = " + jtp.getTitleAt(i));
            if (jtp.getTitleAt(i).equals(niou)) {
                return false;
            }
        }
        //TraceManager.addDev("old " + old + " niou " + niou);
        for(int i = 0; i<jtp.getTabCount(); i++) {
            //TraceManager.addDev("Tab " + i + " = " + mainTabbedPane.getTitleAt(i));
            //TraceManager.addDev("jtp  = " + jtp.getTitleAt(i));
            if (jtp.getTitleAt(i).equals(old)) {
                jtp.setTitleAt(i, niou);
                jtp.setToolTipTextAt(i, "Opens the TML activity diagram of " + niou);
                TDiagramPanel tdp;
                //change panel name
                for(int j=0; j<tp.panels.size(); j++) {
                    tdp = tp.panels.elementAt(j);
                    if (tdp.getName().equals(old)) {
                        tdp.setName(niou);
                        //TraceManager.addDev("Renamed to " + niou);
                    }
                }

                return true;
            }
        }
        // internal error
        ErrorGUI.exit(ErrorGUI.ERROR_TAB);
        return false;
    }

    public boolean nameComponentInUse(TURTLEPanel tp, String old, String niou) {
        JTabbedPane jtp = tp.tabbedPane;
        for(int i = 0; i<jtp.getTabCount(); i++) {
            if (jtp.getTitleAt(i).equals(niou)) {
                return true;
            }
        }
        return false;
    }

    public boolean newTMLComponentTaskName(TURTLEPanel tp, String old, String niou) {
        JTabbedPane jtp = tp.tabbedPane;
        for(int i = 0; i<jtp.getTabCount(); i++) {
            if (jtp.getTitleAt(i).equals(niou)) {
                return false;
            }
        }
        TraceManager.addDev("old " + old + " niou " + niou);
        for(int i = 0; i<jtp.getTabCount(); i++) {
            TraceManager.addDev("Tab " + i + " = " + mainTabbedPane.getTitleAt(i));
            if (jtp.getTitleAt(i).equals(old)) {
                jtp.setTitleAt(i, niou);
                jtp.setToolTipTextAt(i, "Opens the TML activity diagram of " + niou);
                TDiagramPanel tdp;
                //change panel name
                for(int j=0; j<tp.panels.size(); j++) {
                    tdp = tp.panels.elementAt(j);
                    if (tdp.getName().equals(old)) {
                        tdp.setName(niou);
                    }
                }

                return true;
            }
        }
        // internal error
        ErrorGUI.exit(ErrorGUI.ERROR_TAB);
        return false;
    }

    public void cloneTab(int index) {
        String s = gtm.makeXMLFromTurtleModeling(index, "_cloned");
        try {
            gtm.loadModelingFromXML(s);
            changeMade(null, -1);
        } catch (MalformedModelingException mme) {
            JOptionPane.showMessageDialog(frame, "Modeling could not be loaded (unsupported file) ", "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
            frame.setTitle("TTool: unamed project");
        }

    }
    public void cloneRenameTab(int index, String s){
        cloneTab(index);
        mainTabbedPane.setTitleAt(tabs.size()-1, mainTabbedPane.getTitleAt(index)+"_"+s);
    }
    public void requestRemoveTab(int index) {
        if (index >= tabs.size()) {
            return;
        }

        tabs.removeElementAt(index);
        mainTabbedPane.remove(index);
        changeMade(null, -1);
    }
    public void requestMoveRightTab(int index) {
        //TraceManager.addDev("Move right");
        if (index > tabs.size()-2) {
            return;
        }
        requestMoveTabFromTo(index, index + 1);
        changeMade(null, -1);
    }

    public void requestMoveLeftTab(int index) {
        //TraceManager.addDev("Move left");
        if (index < 1) {
            return;
        }
        requestMoveTabFromTo(index, index-1);
        changeMade(null, -1);
    }

    public void requestMoveTabFromTo(int src, int dst) {

        // Get all the properties
        Component comp = mainTabbedPane.getComponentAt(src);
        String label = mainTabbedPane.getTitleAt(src);
        Icon icon = mainTabbedPane.getIconAt(src);
        Icon iconDis = mainTabbedPane.getDisabledIconAt(src);
        String tooltip = mainTabbedPane.getToolTipTextAt(src);
        boolean enabled = mainTabbedPane.isEnabledAt(src);
        int keycode = mainTabbedPane.getMnemonicAt(src);
        int mnemonicLoc = mainTabbedPane.getDisplayedMnemonicIndexAt(src);
        Color fg = mainTabbedPane.getForegroundAt(src);
        Color bg = mainTabbedPane.getBackgroundAt(src);

        // Remove the tab
        mainTabbedPane.remove(src);

        // Add a new tab
        mainTabbedPane.insertTab(label, icon, comp, tooltip, dst);

        // Restore all properties
        mainTabbedPane.setDisabledIconAt(dst, iconDis);
        mainTabbedPane.setEnabledAt(dst, enabled);
        mainTabbedPane.setMnemonicAt(dst, keycode);
        mainTabbedPane.setDisplayedMnemonicIndexAt(dst, mnemonicLoc);
        mainTabbedPane.setForegroundAt(dst, fg);
        mainTabbedPane.setBackgroundAt(dst, bg);

        TURTLEPanel o = tabs.elementAt(src);
        tabs.removeElementAt(src);
        tabs.insertElementAt(o, dst);

        mainTabbedPane.setSelectedIndex(dst);
    }

    public void requestRenameTab(int index) {
        String oldName = mainTabbedPane.getTitleAt(index);
        String s = (String)JOptionPane.showInputDialog(frame, "Name: ", "Renaming a tab", JOptionPane.PLAIN_MESSAGE, IconManager.imgic101, null, mainTabbedPane.getTitleAt(index));
        if ((s != null) && (s.length() > 0)){
            // name already in use?
            if (s.compareTo(oldName) != 0) {
                if (isAValidTabName(s) && (!isTabNameUsed(s))) {
                	renameInMethodo(mainTabbedPane.getTitleAt(index), s);
                    mainTabbedPane.setTitleAt(index, s);
                    changeMade(getCurrentTDiagramPanel(), /*((TURTLEPanel)(tabs.elementAt(index))).tdp*/TDiagramPanel.MOVE_COMPONENT);

                    TURTLEPanel tp = tabs.elementAt(index);
                    if ((tp instanceof TMLDesignPanel) || (tp instanceof TMLComponentDesignPanel)) {
                        renameMapping(oldName, s);
                    }
                } else {
                    JOptionPane.showMessageDialog(frame, "Invalid name", "Error", JOptionPane.INFORMATION_MESSAGE);
                }

            }
        }
        changeMade(null, -1);
    }
    
    /**
     * Check if a name is already used by another TURTLEPanel tab
     * @author Fabien Tessier
     * @param name
     * @return true if the name matches another tab name
     */
    public boolean isTabNameUsed(String name) {
    	for (int i = 0; i < mainTabbedPane.getTabCount(); i++) {
    		if (mainTabbedPane.getTitleAt(i).equals(name))
    			return true;
    	}
    	return false;
    }
    
    /**
     * Rename reference to the tab in Diplodocus Methodology
     * @author Fabien Tessier
     * @param oldname
     * @param newname
     */
    public void renameInMethodo(String oldname, String newname) {
    	for (TURTLEPanel tp: tabs) {
    		if (tp instanceof DiplodocusMethodologyPanel) {
    			DiplodocusMethodologyDiagramPanel dmdp = (DiplodocusMethodologyDiagramPanel) tp.tdp;
    			for (TGComponent tgc: dmdp.componentList)
    				for (TGComponent tgc2: tgc.tgcomponent) {
    					if (tgc2.getValue().equals(oldname))
    						tgc2.setValue(newname);
    				}
    		}
    	}
    }

    public void renameMapping(String oldName, String newName) {
        TURTLEPanel tp;

        for(int i = 0; i<mainTabbedPane.getTabCount(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof TMLArchiPanel) {
                ((TMLArchiPanel)tp).renameMapping(oldName, newName);
            }
        }

    }

    public void renameDeployment(String oldName, String newName) {
        TURTLEPanel tp;

        for(int i = 0; i<mainTabbedPane.getTabCount(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof ADDPanel) {
                ((ADDPanel)tp).renameDeployment(oldName, newName);
            }
        }

    }

    public boolean selectTDiagramPanel(TDiagramPanel tdp) {
        return (selectTab(getPoint(tdp)) == tdp);
    }

    public boolean selectTab(TURTLEPanel tp, String s) {
        int j;
        int index1 = tabs.indexOf(tp);

        if (mainTabbedPane.getSelectedIndex() != index1) {
            mainTabbedPane.setSelectedIndex(index1);
        }

        for(j=0; j<tp.tabbedPane.getTabCount(); j++) {
            if (tp.tabbedPane.getTitleAt(j).equals(s)) {
                tp.tabbedPane.setSelectedIndex(j);
                return true;
            }
        }

        return false;
    }

    public boolean selectTab(String s) {
        return selectTab(getCurrentTURTLEPanel(), s);
    }

    public void openTMLTaskActivityDiagram(String panel, String tab) {
        int index = mainTabbedPane.indexOfTab(panel);
        if (index != -1) {
            mainTabbedPane.setSelectedIndex(index);
        }
        openTMLTaskActivityDiagram(tab);
    }

    public void openTMLTaskActivityDiagram(String tab) {
        selectTab(getCurrentTURTLEPanel(), tab);
    }

    public void refreshCurrentPanel() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public void openAVATARSMD(String tab) {
        TDiagramPanel cur = getCurrentTDiagramPanel();
        selectTab(getCurrentTURTLEPanel(), tab);
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp == cur) {
            tdp.repaint();
        }
    }

    public boolean selectHighLevelTab(String s) {
        TURTLEPanel tp = getTURTLEPanel(s);
        if (s != null) {
            selectTab(tp);
            return true;
        }
        return false;
    }

    public TDiagramPanel selectTab(Point p) {
        mainTabbedPane.setSelectedIndex(p.x);
        TURTLEPanel tp = tabs.elementAt(p.x);
        tp.tabbedPane.setSelectedIndex(p.y);
        return tp.panels.elementAt(p.y);

    }

    public Point getCurrentSelectedPoint() {
        Point p = new Point();

        p.x = mainTabbedPane.getSelectedIndex();
        if (getCurrentTURTLEPanel() == null) {
            p.y = -1;
        } else {
            p.y = getCurrentTURTLEPanel().tabbedPane.getSelectedIndex();
        }

        return p;
    }

    public Point getPoint(TDiagramPanel tdp) {
        Point p = new Point();

        int index;
        TURTLEPanel tp;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            index = tp.panels.indexOf(tdp);
            if (index > -1) {
                p.x = i;
                p.y = index;
                return p;
            }
        }
        p.x = 0;
        p.y = 0;

        return p;
    }

    public DesignPanel getDesignPanel(String name) {
        int index = mainTabbedPane.indexOfTab(name);
        try {
            TURTLEPanel tp = tabs.elementAt(index);

            if (tp instanceof DesignPanel) {
                return (DesignPanel)tp;
            } else {
                return null;
            }
        } catch (Exception e) {
            return null;
        }
    }
    //---------------------------------- DDD ------------------------------------
    // return current deployment panel

    public ADDDiagramPanel getDeploymentPanel() {
        ADDDiagramPanel deploymentDiagram =  null ; //(ADDDiagramPanel)activetdp;
        TURTLEPanel tp = getCurrentTURTLEPanel();
        Vector<TDiagramPanel> ps = tp.panels;
        for(TDiagramPanel panel : ps ){
            if (panel instanceof ADDDiagramPanel){
                deploymentDiagram = (ADDDiagramPanel)panel;
            }
        }
        if(deploymentDiagram == null)
            System.err.println("No ADDDiagramPanel found : MainGUI.getDeploymentPanel()");
        return deploymentDiagram;
    }


    public ADDDiagramPanel getFirstAvatarDeploymentPanelFound(){
        ADDDiagramPanel adp = null;
        for(int i =0 ; i<tabs.size();i++)
            if(tabs.get(i) instanceof ADDPanel){
                adp = ((ADDPanel)tabs.get(i)).tmladd;
            }
        if (adp == null)
            System.err.println("No AvatarDeployment Panel Found : MainGUI.getFirstAvatarDeploymentPanelFound()");
        return adp;
    }


    // find the first Design Panel in MainGUI.tabs

    public AvatarDesignPanel getFirstAvatarDesignPanelFound(){
        AvatarDesignPanel adp = null;
        for(int i =0 ; i<tabs.size();i++)
            if(tabs.get(i) instanceof AvatarDesignPanel){
                adp = (AvatarDesignPanel)tabs.get(i);
            }
        if (adp == null)
            System.err.println("No AvatarDesign Panel Found : MainGUI.getFirstAvatarDesignPanel()");
        return adp;
    }


    public void extracDeploymentDiagramToFile(){

        ADDDiagramPanel deploymentDiagramPanel = getDeploymentPanel();
        AvatarDesignPanel designDiagramPanel = getFirstAvatarDesignPanelFound();

        AvatarDeploymentPanelTranslator avdeploymenttranslator = new AvatarDeploymentPanelTranslator(deploymentDiagramPanel);
        /*AvatarddSpecification avddspec =*/ avdeploymenttranslator.getAvatarddSpecification();


        AvatarDesignPanelTranslator avdesigntranslator = new AvatarDesignPanelTranslator( designDiagramPanel);
        List<AvatarBDStateMachineOwner> adp =  designDiagramPanel.getAvatarBDPanel().getFullStateMachineOwnerList();
        /*AvatarSpecification avaspec =*/ avdesigntranslator.generateAvatarSpecification(adp);

        //DG
        //LinkedList<AvatarComponent> components = AvatarddSpecification.getComponents();
        //AvatarToFile tofile;
        //tofile =  new AvatarToFile(components,avaspec);
        //tofile.extracParamToFile();
    }

    public void avatarToSoclib(){
        //DG 6.2. appelee nulle part?

        ADDDiagramPanel deploymentDiagramPanel = getDeploymentPanel();
        AvatarDesignPanel designDiagramPanel = getFirstAvatarDesignPanelFound();

        AvatarDeploymentPanelTranslator avdeploymenttranslator = new AvatarDeploymentPanelTranslator(deploymentDiagramPanel);
        AvatarddSpecification avddspec = avdeploymenttranslator.getAvatarddSpecification();


        AvatarDesignPanelTranslator avdesigntranslator = new AvatarDesignPanelTranslator( designDiagramPanel);

        LinkedList<AvatarBDStateMachineOwner> adp =  designDiagramPanel.getAvatarBDPanel().getFullStateMachineOwnerList();
        AvatarSpecification avaspec = avdesigntranslator.generateAvatarSpecification(adp);

        // Generator for block tasks and application main file

        TasksAndMainGenerator gene = new TasksAndMainGenerator(avddspec,avaspec);
        gene.generateSoclib(false,false);
        try{
            //System.err.println("ok");
            gene.saveInFiles(TasksAndMainGenerator.getGeneratedPath());
        }catch(FileException e){
            System.err.println("FileException : MainGUI.avatarToSoclib()");
        }

    }
    //--------------------end DDD------------------------------------------------

    public boolean selectMainTab(String id) {
        TURTLEPanel tp;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (getTabName(tp).compareTo(id) == 0) {
                selectTab(tp);
                return true;
            }
        }

        return false;
    }

    public void selectTab(TURTLEPanel tp) {
        int index1 = tabs.indexOf(tp);
        mainTabbedPane.setSelectedIndex(index1);
    }

    public void selectTab(TDiagramPanel tdp) {
        int index;
        TURTLEPanel tp;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            index = tp.panels.indexOf(tdp);
            if (index > -1) {
                selectTab(tp);
                tp.tabbedPane.setSelectedIndex(index);
            }
        }
    }

    public void toggleAttributes() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if ((tdp != null) && (tdp instanceof TClassDiagramPanel)){
            //TraceManager.addDev("Toggle attributes");
            TClassDiagramPanel tdcp = (TClassDiagramPanel)tdp;
            tdcp.setAttributesVisible(!tdcp.areAttributesVisible());
            tdcp.checkAllMySize();
            tdcp.repaint();
            changeMade(tdcp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    // AVATAR Simulation
    public void setAVATARIDs(boolean b) {
        TDiagramPanel.AVATAR_ID_ON = b;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public void toggleAVATARIDs() {
        setAVATARIDs(!TDiagramPanel.AVATAR_ID_ON);
        TraceManager.addDev("AVATAR id: " + TDiagramPanel.AVATAR_ID_ON);
    }

    // For simulation purpose
    public void resetAllDIPLOIDs() {
        TURTLEPanel tp;

        for(int i=0; i<tabs.size(); i++) {
            tp = tabs.elementAt(i);
            tp.resetAllDIPLOIDs();
        }
    }

    public void toggleDiploIDs() {
        setDiploIDs(!TDiagramPanel.DIPLO_ID_ON);
    }

    public void toggleTEPEIDs() {
        setTEPEIDs(!TDiagramPanel.TEPE_ID_ON);
    }

    public void toggleDiploAnimate() {
        setDiploAnimate(!TDiagramPanel.DIPLO_ANIMATE_ON);
    }

    public int isRunningAvatarComponent(TGComponent _tgc) {
        if(jfais.isVisible()) {
            if (jfais.isRunningComponent(_tgc)) {
                return 1;
            }
            if (jfais.isSelectedComponentFromTransaction(_tgc)) {
                return 2;
            }
        }
        return 0;
    }

    public String[] hasMessageInformationForAvatarConnector(AvatarBDPortConnector _conn) {
        if(jfais.isVisible()) {
            return jfais.getFirstMessagesOnEachConnectorSide(_conn);
        }
        return null;
    }

    public void setDiploAnimate(boolean b) {
        TDiagramPanel.DIPLO_ANIMATE_ON = b;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public void setAvatarAnimate(boolean b) {
        TDiagramPanel.AVATAR_ANIMATE_ON = b;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public void setDiploIDs(boolean b) {
        TDiagramPanel.DIPLO_ID_ON = b;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public void setTEPEIDs(boolean b) {
        TDiagramPanel.TEPE_ID_ON = b;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public void setTransationProgression(boolean b) {
        TDiagramPanel.DIPLO_TRANSACTION_PROGRESSION_ON = b;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public synchronized RunningInfo isRunningID(int id) {
        if (runningIDs == null) {
            return null;
        }

        for(RunningInfo ri: runningIDs) {
            if (ri.id == id) {
                return ri;
            }
        }

        return null;
    }
    public synchronized ArrayList<SimulationTransaction> getTransactions(int id){
        if (transactionMap == null) {
            return null;
        }

        return transactionMap.get(id);
    }

	public synchronized void addLatencyVals(int id, String[] latency){
		if (latencyMap!=null){
			//System.out.println("Adding latency...");
			if (!latencyMap.containsKey(id)){
				ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
				latencyMap.put(id, map);
			}
			latencyMap.get(id).put(latency[0], latency[1]);
			//System.out.println(latencyMap);
		}
	//	System.out.println(latencyMap);
	}

	public synchronized ConcurrentHashMap<String, String> getLatencyVals(int id){
	//	System.out.println(id + " " + latencyMap);
		if (latencyMap!=null){
			return latencyMap.get(id);
		}
		return null;
	}
    public synchronized ConcurrentHashMap<String,String> getStatus(int id){
        if (statusMap == null) {
            return null;
        }

        return statusMap;
    }

    public String getStatus(String s){
        if (statusMap==null){
            return null;
        }
        return statusMap.get(s);
    }
    public synchronized LoadInfo isLoadID(int id) {
        if (loadIDs == null) {
            return null;
        }

        for(LoadInfo li: loadIDs) {
            if (li.id == id) {
                return li;
            }
        }

        return null;
    }

    public synchronized void resetRunningID() {
        if (runningIDs != null) {
            runningIDs.clear();
        }
        runningIDs = null;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public synchronized void resetLoadID() {
        if (loadIDs != null) {
            loadIDs.clear();
        }
        loadIDs = null;
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }
    public synchronized void resetTransactions() {
        transactionMap.clear();
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }
    public synchronized void resetStatus() {
        statusMap.clear();
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public synchronized void addRunningIDTaskState(int _id, String _state) {
        if (runningIDs == null) {
            return;
        }

        if (_state == null) {
            _state = "unknown";
        }

        for(RunningInfo ri: runningIDs) {
            if (ri.id == _id) {
                ri.state = _state.toLowerCase();
                //TraceManager.addDev("Updated state on UML diagram");
                TDiagramPanel tdp = getCurrentTDiagramPanel();
                if (tdp != null) {
                    tdp.repaint();
                }
                return;
            }
        }

    }

    public synchronized void addRunningID(int _id, int _nextCommand, String _progression, String _startTime, String _finishTime, String _transStartTime, String _transFinishTime, String _state) {
        if (runningIDs == null) {
            runningIDs = new ArrayList<RunningInfo>();
        }
        RunningInfo ri = new RunningInfo();
        if (_state == null) {
            _state = "unknown";
        }
        ri.id = _id;
        ri.nextCommand = _nextCommand;
        ri.progression = _progression;
        ri.startTime = _startTime;
        ri.finishTime = _finishTime;
        ri.transStartTime = _transStartTime;
        ri.transFinishTime = _transFinishTime;
        ri.state = _state.toLowerCase();
        runningIDs.add(ri);
        //TraceManager.addDev("Running id " + id +  " added");
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }
    public synchronized void addTransaction(int _id, SimulationTransaction st){
        if (transactionMap.containsKey(_id)){
            if (!transactionMap.get(_id).contains(st)){
                transactionMap.get(_id).add(st);
            }
        }
        else {
            ArrayList<SimulationTransaction> ts = new ArrayList<SimulationTransaction>();
            ts.add(st);
            transactionMap.put(_id, ts);
        }
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public synchronized void addStatus(String task, String stat){
        statusMap.put(task, stat);
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public synchronized void addLoadInfo(int _id, double _load, long _energy) {
        if (loadIDs == null) {
            loadIDs = new ArrayList<LoadInfo>();
        }

        removeLoadId(_id);
        LoadInfo li = new LoadInfo();
        li.id = _id;
        li.load = _load;
        li.energy = _energy;
        loadIDs.add(li);
        //TraceManager.addDev("Running id " + _id +  " added load=" + _load);
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.repaint();
        }
    }

    public synchronized void removeRunningId(Integer id) {
        if (runningIDs == null) {
            return ;
        }

        for(RunningInfo ri: runningIDs) {
            if (ri.id == id.intValue()) {
                runningIDs.remove(ri);
                //TraceManager.addDev("Running id " + i +  " removed");
                return;
            }
        }
        getCurrentTDiagramPanel().repaint();
    }

    public synchronized void removeLoadId(int _id) {
        if (loadIDs == null) {
            return ;
        }
        for(LoadInfo li: loadIDs) {
            if (li.id == _id) {
                loadIDs.remove(li);
                //TraceManager.addDev("Running id " + i +  " removed");
                return;
            }
        }
        getCurrentTDiagramPanel().repaint();
    }

    public void toggleGates() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if ((tdp != null) && (tdp instanceof TClassDiagramPanel)){
            //TraceManager.addDev("Toggle gates");
            TClassDiagramPanel tdcp = (TClassDiagramPanel)tdp;
            tdcp.setGatesVisible(!tdcp.areGatesVisible());
            tdcp.checkAllMySize();
            tdcp.repaint();
            changeMade(tdcp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public void toggleSynchro() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if ((tdp != null) && (tdp instanceof TClassDiagramPanel)){
            //TraceManager.addDev("Toggle synchro");
            TClassDiagramPanel tdcp = (TClassDiagramPanel)tdp;
            tdcp.setSynchroVisible(!tdcp.areSynchroVisible());
            tdcp.checkAllMySize();
            tdcp.repaint();
            changeMade(tdcp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public void toggleJava() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if ((tdp != null) && (tdp instanceof TActivityDiagramPanel)){
            //TraceManager.addDev("Toggle synchro");
            TActivityDiagramPanel tadp = (TActivityDiagramPanel)tdp;
            tadp.setJavaVisible(!tadp.isJavaVisible());
            tadp.checkAllMySize();
            tadp.repaint();
            changeMade(tadp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public void toggleInternalComment() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null) {
            tdp.setInternalCommentVisible((tdp.getInternalCommentVisible() + 1) % 3);
            tdp.checkAllMySize();
            tdp.repaint();
            changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public void toggleAttr() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if (tdp != null){
            //TraceManager.addDev("Toggle attributes");
            tdp.setAttributes((tdp.getAttributeState() + 1) % 3);
            tdp.checkAllMySize();
            tdp.repaint();
            changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public void toggleChannels() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if ((tdp != null) && (tdp instanceof TMLTaskDiagramPanel)){
            //TraceManager.addDev("Toggle attributes");
            TMLTaskDiagramPanel tmltdp = (TMLTaskDiagramPanel)tdp;
            tmltdp.setChannelsVisible(!tmltdp.areChannelsVisible());
            tmltdp.checkAllMySize();
            tmltdp.repaint();
            changeMade(tmltdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public void toggleEvents() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if ((tdp != null) && (tdp instanceof TMLTaskDiagramPanel)){
            //TraceManager.addDev("Toggle attributes");
            TMLTaskDiagramPanel tmltdp = (TMLTaskDiagramPanel)tdp;
            tmltdp.setEventsVisible(!tmltdp.areEventsVisible());
            tmltdp.checkAllMySize();
            tmltdp.repaint();
            changeMade(tmltdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public void toggleRequests() {
        TDiagramPanel tdp = getCurrentTDiagramPanel();
        if ((tdp != null) && (tdp instanceof TMLTaskDiagramPanel)){
            //TraceManager.addDev("Toggle attributes");
            TMLTaskDiagramPanel tmltdp = (TMLTaskDiagramPanel)tdp;
            tmltdp.setRequestsVisible(!tmltdp.areRequestsVisible());
            tmltdp.checkAllMySize();
            tmltdp.repaint();
            changeMade(tmltdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
        }
    }

    public boolean isAValidTabName(String name) {
        return name.matches("((\\w)*(\\s)*)*");
    }



    public void windowClosing(WindowEvent e) {
        //frame.setVisible(false);
        quitApplication();
    }

    public void windowClosed(WindowEvent e) {
    }

    public void windowOpened(WindowEvent e) {
    }

    public void windowIconified(WindowEvent e) {
    }

    public void windowDeiconified(WindowEvent e) {
    }

    public void windowActivated(WindowEvent e) {
    }

    public void windowDeactivated(WindowEvent e) {
    }


    // TGUIACtions Event listener

    public void keyTyped(KeyEvent e) {
        TraceManager.addDev("KEY TYPED");
    }

    public void keyPressed(KeyEvent e) {
        TraceManager.addDev("KEY PRESSED: ");
    }

    public void keyReleased(KeyEvent e) {
        TraceManager.addDev("KEY RELEASED: ");
    }

    public void actionPerformed(ActionEvent evt)  {
        String command = evt.getActionCommand();
        //TraceManager.addDev("Command:" + command);
        TDiagramPanel tdp1 = getCurrentTDiagramPanel();
        if (tdp1 != null) {
            //TraceManager.addDev("Stop Adding connector in maingui");
            tdp1.stopAddingConnector();
        }

        ActionPerformer.actionPerformed(this, evt, command, tdp1);


    }

    private  class PopupListener extends MouseAdapter /* popup menus onto tabs */ {
        private MainGUI mgui;
        private JPopupMenu menu;

        private JMenuItem rename, remove, moveRight, moveLeft, newDesign, newAnalysis, newDeployment, newRequirement/*, newTMLDesign*/, newTMLComponentDesign, newTMLArchi, newProactiveDesign, newTURTLEOSDesign,
            newNCDesign, sort, clone, newAttackTree, newAVATARBD, newAVATARRequirement, newMAD, newTMLCP, newTMLMethodo, newAvatarMethodo, newAVATARDD, newSysmlsecMethodo, newSystemCAMS;
        private JMenuItem newAVATARAnalysis;

        public PopupListener(MainGUI _mgui) {
            mgui = _mgui;
            createMenu();
        }

        public void mousePressed(MouseEvent e) {
        	if (activetdp != null)
        		activetdp.tdmm.setSelection(-1, -1);
            checkForPopup(e);
        }
        public void mouseReleased(MouseEvent e) {
        	if (activetdp != null)
        		activetdp.tdmm.setSelection(-1, -1);
            checkForPopup(e);
        }
        public void mouseClicked(MouseEvent e) {
        	if (activetdp != null)
        		activetdp.tdmm.setSelection(-1, -1);
            checkForPopup(e);
        }

        private void checkForPopup(MouseEvent e) {
            if(e.isPopupTrigger()) {
                Component c = e.getComponent();
                //TraceManager.addDev("e =" + e + " Component=" + c);
                updateMenu(mgui.getCurrentSelectedIndex());
                menu.show(c, e.getX(), e.getY());
            }
        }

        private void createMenu() {
            rename = createMenuItem("Rename");
            remove = createMenuItem("Remove");
            moveLeft = createMenuItem("Move to the left");
            moveRight = createMenuItem("Move to the right");
            sort = createMenuItem("Sort");
            clone = createMenuItem("Clone");
            newAnalysis = createMenuItem("New TURTLE Analysis");
            newDesign = createMenuItem("New TURTLE Design");
            newDeployment = createMenuItem("New TURTLE Deployment");
            newAttackTree = createMenuItem("New Attack Tree");
            newRequirement = createMenuItem("New TURTLE Requirement Diagram");

            newTMLMethodo = createMenuItem("New DIPLODOCUS Methodology");

            /*newTMLDesign =*/ createMenuItem("New Partitioning - Design");
            newTMLComponentDesign = createMenuItem("New Partitioning - Functional view");
            newTMLArchi = createMenuItem("New Partitioning - Architecture and Mapping");
            newTMLCP = createMenuItem("New Partitioning - Communication Pattern");
	    newSystemCAMS = createMenuItem("New SystemC-AMS Block Diagram"); //ajout CD
            newProactiveDesign = createMenuItem("New Proactive Design");
            newTURTLEOSDesign = createMenuItem("New TURTLE-OS Design");
            newNCDesign = createMenuItem("New Network Calculus Design");
            newMAD = createMenuItem("New Modeling Assumptions Diagram");
            newAVATARRequirement = createMenuItem("New Requirement Diagrams");
            newAVATARAnalysis = createMenuItem("New Analysis");
            newAVATARBD = createMenuItem("New Design");
            newAVATARDD = createMenuItem("New Deployment Diagram");
            newAvatarMethodo = createMenuItem("New AVATAR Methodology");
            newSysmlsecMethodo = createMenuItem("New SysML-Sec Methodology");

            menu = new JPopupMenu("Views");
            menu.add(moveLeft);
            menu.add(moveRight);

            menu.addSeparator();

            menu.add(rename);
            menu.add(remove);

            menu.addSeparator();

            menu.add(sort);

            menu.addSeparator();

            menu.add(clone);

            menu.addSeparator();

            // TURTLE first and other old profiles. Old way
            if (!avatarOnly) {
                if (turtleOn) {
                    menu.add(newRequirement);
                    menu.add(newAnalysis);
                    menu.add(newDesign);
                    menu.add(newDeployment);
                    menu.addSeparator();
                }

                if (osOn) {
                    menu.add(newTURTLEOSDesign);
                    menu.addSeparator();
                    //TraceManager.addDev("OS is on");
                } else {
                    //TraceManager.addDev("OS is off");
                }

                if (proactiveOn) {
                    menu.add(newProactiveDesign);
                    menu.addSeparator();
                }

                if (ncOn) {
                    menu.add(newNCDesign);
                    menu.addSeparator();
                }

            }


            // Methodologies
            if (!avatarOnly) {
                if (systemcOn) {
                    menu.add(newTMLMethodo);
                }

            }

            if (avatarOn) {
                menu.add(newAvatarMethodo);
                menu.add(newSysmlsecMethodo);
            }
            menu.addSeparator();


            //diagrams
            if (!avatarOnly) {
                if (systemcOn) {

                    //menu.add(newTMLMethodo);
                    //menu.add(newTMLDesign);
                    menu.add(newTMLComponentDesign);
                    menu.add(newTMLCP);
                    menu.add(newTMLArchi);
                    menu.addSeparator();
		    menu.add(newSystemCAMS);//ajout CD
                    menu.addSeparator();
                }
            }

            if (avatarOn) {
                //               menu.addSeparator();
                //menu.add(newAvatarMethodo);

                menu.add(newMAD);
                menu.add(newAVATARRequirement);
                menu.add(newAttackTree);
                menu.add(newAVATARAnalysis);
                menu.add(newAVATARBD);
                if (experimentalOn) {
                    menu.add(newAVATARDD);
                }
            }

        }



        private JMenuItem createMenuItem(String s) {
            JMenuItem item = new JMenuItem(s);
            item.setActionCommand(s);
            item.addActionListener(listener);
            return item;
        }

        private void updateMenu(int index) {
            //TraceManager.addDev("UpdateMenu index=" + index);
            if (index < 1) {
                moveLeft.setEnabled(false);
            } else {
                moveLeft.setEnabled(true);
            }

            if (index + 1 < mgui.tabs.size()) {
                moveRight.setEnabled(true);
            } else {
                moveRight.setEnabled(false);
            }

            if (index < 0) {
                rename.setEnabled(false);
                remove.setEnabled(false);
                clone.setEnabled(false);
            } else {
                rename.setEnabled(true);
                remove.setEnabled(true);
                clone.setEnabled(true);
            }

            if (mgui.mainTabbedPane.getTabCount() < 2) {
                sort.setEnabled(false);
            } else {
                sort.setEnabled(true);
            }
        }

        private Action listener = new AbstractAction() {

                /**
                 *
                 */
                private static final long serialVersionUID = -3632935027104753332L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    JMenuItem item = (JMenuItem)e.getSource();
                    String ac = item.getActionCommand();
                    if(ac.equals("Rename")) {
                        mgui.requestRenameTab(mainTabbedPane.getSelectedIndex());
                    } else if (ac.equals("Remove")) {
                        mgui.requestRemoveTab(mainTabbedPane.getSelectedIndex());
                    } else if (ac.equals("Move to the left")) {
                        mgui.requestMoveLeftTab(mainTabbedPane.getSelectedIndex());
                    } else if (ac.equals("Move to the right")) {
                        mgui.requestMoveRightTab(mainTabbedPane.getSelectedIndex());
                    } else if (ac.equals("Sort")) {
                        GraphicLib.sortJTabbedPane(mgui.mainTabbedPane, mgui.tabs, 0, mgui.mainTabbedPane.getTabCount());
                        mgui.changeMade(null, -1);
                    } else if (ac.equals("Clone")) {
                        mgui.cloneTab(mainTabbedPane.getSelectedIndex());
                    } else if (ac.equals("New TURTLE Analysis")) {
                        mgui.newAnalysis();
                    } else if (ac.equals("New TURTLE Design")) {
                        mgui.newDesign();
                    } else if (ac.equals("New TURTLE Deployment")) {
                        mgui.newDeployment();
                    } else if (e.getSource() == newAttackTree) {
                        mgui.newAttackTree();
                    } else if (ac.equals("New TURTLE Requirement Diagram")) {
                        mgui.newRequirement();
                    }    else if (e.getSource() == newTMLMethodo) {
                        mgui.newDiplodocusMethodology();
                    }    else if (e.getSource() == newAvatarMethodo) {
                        mgui.newAvatarMethodology();
                    }    else if (e.getSource() == newSysmlsecMethodo) {
                        mgui.newSysmlsecMethodology();
                    } else if (ac.equals("New DIPLODOCUS Design")) {
                        mgui.newTMLDesign();
                    } else if (e.getSource() == newTMLComponentDesign) {
                        mgui.newTMLComponentDesign();
                    } else if (e.getSource() == newTMLCP) {
                        mgui.newTMLCP();
                    } else if (e.getSource() == newTMLArchi) {
                        mgui.newTMLArchi();
                    } else if (ac.equals("New Proactive Design")) {
                        mgui.newProactiveDesign();
                    } else if (ac.equals("New TURTLE-OS Design")) {
                        mgui.newTURTLEOSDesign();
                    } else if (e.getSource() == newNCDesign) {
                        mgui.newNCDesign();
                    } else if (e.getSource() == newAVATARBD) {
                        mgui.newAvatarBD();
                    } else if (e.getSource() == newAVATARDD) {
                        mgui.newADD();
                    } else if (e.getSource() == newAVATARRequirement) {
                        mgui.newAvatarRequirement();
                    } else if (e.getSource() == newMAD) {
                        mgui.newAvatarMADs();
                    } else if (e.getSource() == newAVATARAnalysis) {
                        mgui.newAvatarAnalysis();
                    }  else if (e.getSource() == newSystemCAMS) { //ajout CD
			mgui.newSystemCAMS();
		    }
                }
            };
    }


    /**
     * This adapter is constructed to handle mouse over component events.
     */
    private class MouseHandler extends MouseAdapter  {

        private JLabel label;

        /**
         * ctor for the adapter.
         * @param label the JLabel which will recieve value of the
         *              Action.LONG_DESCRIPTION key.
         */
        public MouseHandler(JLabel label)  {
            setLabel(label);
        }

        public void setLabel(JLabel label)  {
            this.label = label;
        }

        @Override
        public void mouseEntered(MouseEvent evt)  {
            if (evt.getSource() instanceof AbstractButton)  {
                AbstractButton button = (AbstractButton)evt.getSource();
                Action action = button.getAction();
                if (action != null)  {
                    String message = (String)action.getValue(Action.LONG_DESCRIPTION);
                    label.setText(message);
                }
            }
        }
    }

    // Get the currently opened architecture panel
    public TMLArchiPanel getCurrentArchiPanel() {
        return tmlap;
    }
} // Class MainGUI