/* 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 graph.AUTGraph;
import graph.RG;
import help.HelpEntry;
import help.HelpManager;
import launcher.RemoteExecutionThread;
import launcher.RshClient;
import myutil.*;
import proverifspec.ProVerifOutputAnalyzer;
import tmltranslator.TMLMapping;
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.eln.ELNDiagramPanel;
import ui.file.*;
import ui.ftd.FaultTreeDiagramPanel;
import ui.interactivesimulation.JFrameCompareSimulationTraces;
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.syscams.SysCAMSComponentTaskDiagramPanel;
import ui.syscams.SysCAMSCompositeComponent;
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.tmlsd.TMLSDPanel;
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 javax.swing.filechooser.FileNameExtensionFilter;
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.io.UnsupportedEncodingException;
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, DraggableTabbedPaneCallbackInterface {

    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 static boolean openLast;

    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, split1;

    // 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 TGUIAction[] actionsLast;
    public MouseHandler mouseHandler;
    public KeyListener keyHandler;

    // Validation
    public List<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 FAULTTREE_SYNTAXCHECKING_OK = 51;
    public final static byte COMPONENT_SELECTED = 50;
    public final static byte CREATE_NEW_PANEL = 52;

    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 myutil.DraggableEnhancedTabbedPane 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;
    private JFrameCompareSimulationTraces cSimTrace;

    // Help
    private HelpManager helpManager;
    private JFrameHelp helpFrame;

    // Invariants
    private Invariant currentInvariant;

    // Thread for autosave
    private PeriodicBehaviorThread pbt;

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

    // Plugin management
    //public static PluginManager pluginManager;

    private boolean hidden = false;

    public MainGUI(boolean _openLast, boolean _turtleOn, boolean _systemcOn, boolean _lotosOn, boolean _proactiveOn, boolean _tpnOn, boolean _osOn,
                   boolean
                           _uppaalOn, boolean _ncOn, boolean _avatarOn, boolean _proverifOn, boolean
                           _avatarOnly, boolean _experimental) {
        openLast = _openLast;
        TraceManager.addDev("openLast=" + openLast);
        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 boolean isSystemcOn() {
        return systemcOn;
    }

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

        //try {
        try {
            UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException e) {
            ErrorGUI.exit(ErrorGUI.GUI);
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            ErrorGUI.exit(ErrorGUI.GUI);
            e.printStackTrace();
        }
        //} 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 (SpecConfigTTool.IMGPath.length() > 0) {
            jfcimg = new JFileChooser(SpecConfigTTool.IMGPath);
        } else {
            jfcimg = new JFileChooser();
        }

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

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

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

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

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

        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));
        split1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, scrollPane, jbp);

        //split1.setDividerLocation(700);
        split1.setResizeWeight(0.1);
        //split1.setOneTouchExpandable(true);
        //panelForTree.add(scrollPane, BorderLayout.CENTER);

        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, split1, panelForTab);
        framePanel.add(split, BorderLayout.CENTER);
        split.setDividerLocation(250);
        split1.setResizeWeight(0.9);
        split.setOneTouchExpandable(true);
        //split1.resetToPreferredSizes();

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

        // if openLast, must open the latest specification (if it exists)
        if ((ConfigurationTTool.LastOpenFileDefined) && (openLast)) {
            openLastProject();
            dtree.update();
            //split1.setDividerLocation(600);
            //split.setDividerLocation(220);
        }

        // Help
        helpManager = new HelpManager();
        //TraceManager.addDev("Resources:");
        //helpManager.listFiles("/help");
        if (!helpManager.loadEntries()) {
            TraceManager.addDev("Failed to load help");
        } else {
            TraceManager.addDev(helpManager.printHierarchy());
        }

        //

        // 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);
        }
        actionsLast = new TGUIAction[ConfigurationTTool.NB_LAST_OPEN_FILE];
        for (int j = 0; j < actionsLast.length; j++) {
            actionsLast[j] = new TGUIAction(TGUIAction.ACT_OPEN_LAST, "Open recent: " + ConfigurationTTool.LastOpenFiles[j]);
            actionsLast[j].addActionListener(this);
            //actions[i].addKeyListener(this);
        }
        if (jmenubarturtle != null) {
            jmenubarturtle.makeFileMenu(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!");

        // Issue #81: For tests when gtm could be null
        if (gtm != null &&
                type != TDiagramPanel.SELECT_COMPONENT) { // Issue #105
            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) {
        //TraceManager.addDev("Action actions:" + 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 boolean isExperimentalOn() {
        return experimentalOn;
    }


    public HelpManager getHelpManager() {
        return helpManager;
    }

    public void setHelpManager(HelpManager hm) {
        helpManager = hm;
    }

    public void showIntegratedHelp() {
        if (helpManager != null) {
            openHelpFrame(helpManager);
        }
    }

    public void openHelpFrame(HelpEntry he) {
        if (helpFrame == null) {
            helpFrame = new JFrameHelp("Help", helpManager, he);
            helpFrame.setVisible(true);
            GraphicLib.centerOnParent(helpFrame, 800, 700);
            return;
        }
        helpFrame.setHelpEntry(he);
    }


    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);
        }

        elements.addAll(helpManager.getEntriesWithKeyword(text.split( " ")));

        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);
        expandToGraphs();
        dtree.toBeUpdated();
    }

    public void removeRG(RG _toBeRemoved) {
        gtm.removeRG(_toBeRemoved);
        if (_toBeRemoved.fileName != null) {
            TraceManager.addDev("Filename=" + _toBeRemoved.fileName);
            File toBeDeleted = new File(_toBeRemoved.fileName);
            try {
                toBeDeleted.delete();
                TraceManager.addDev("File of RG was deleted on disk");
            } catch (Exception e) {

            }
        }
        dtree.toBeUpdated();
    }

    public void minimizeRG(RG toBeMinimized) {
        JFrameMinimize jfm = new JFrameMinimize(frame, this, "Graph minimization", toBeMinimized, SpecConfigTTool.TGraphPath);
        //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, SpecConfigTTool.TGraphPath);
        //jfm.setSize(900, 700);
        GraphicLib.centerOnParent(jfm, 900, 700);
        jfm.setVisible(true);
    }


    // Simulation traces
    public List<SimulationTrace> getSimulationTraces() {
        return gtm.getSimulationTraces();
    }

    public void addSimulationTrace(SimulationTrace _newSimulationTrace) {
        gtm.addSimulationTrace(_newSimulationTrace);
        expandToSimulationTraces();
        dtree.toBeUpdated();
    }

    public void removeSimulationTrace(SimulationTrace _toBeRemoved) {
        gtm.removeSimulationTrace(_toBeRemoved);
        /*if (_toBeRemoved.fileName != null) {
            TraceManager.addDev("Filename=" + _toBeRemoved.fileName);
            File toBeDeleted = new File(_toBeRemoved.fileName);
            try {
                toBeDeleted.delete();
                TraceManager.addDev("File of RG was deleted on disk");
            } catch (Exception e) {

            }
        }*/
        dtree.toBeUpdated();
    }


    public void showInFinder(RG inputGraph) {
        TraceManager.addDev("in show in finder");
        if (inputGraph.fileName == null) {
            return;
        }
        if (!Desktop.isDesktopSupported()) {
            return;
        }
        File file = new File(SpecConfigTTool.TGraphPath);
        TraceManager.addDev("Getting desktop");
        Desktop desktop = Desktop.getDesktop();
        try {
            TraceManager.addDev("opening in desktop");
            desktop.open(file);
        } catch (Exception e) {
            TraceManager.addDev("Exception in opening explorer: " + e.getMessage());
        }
    }


    // Can open directory or file
    public void showInFinder(SimulationTrace trace, boolean openDirectory) {
        TraceManager.addDev("in show in finder");
        if (!trace.hasFile()) {
            return;
        }
        if (!Desktop.isDesktopSupported()) {
            return;
        }
        File file = new File(trace.getFullPath());
        if (openDirectory) {
            if (!file.isDirectory()) {
                file = file.getParentFile();
            }
        }
        TraceManager.addDev("Getting desktop");
        Desktop desktop = Desktop.getDesktop();
        try {
            TraceManager.addDev("Opening in desktop");
            desktop.open(file);
        } catch (Exception e) {
            TraceManager.addDev("Exception in opening explorer: " + e.getMessage());
        }
    }


    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 addFaultTreePanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        FaultTreePanel ftp = new FaultTreePanel(this);
        tabs.add(index, ftp); // should look for the first
        mainTabbedPane.add(ftp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open fault tree diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic1074);
        ftp.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 addVerificationPropertyPanel(String name, int index, boolean addDefaultElements) {
        if (index == -1) {
            index = tabs.size();
        }
        //TraceManager.addDev("New SysMLSec Methodopanel");
        VerificationPanel dp = new VerificationPanel(this);
        tabs.add(index, dp);
        mainTabbedPane.add(dp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open Verification Tracking");
        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 addSysCAMSComponentDesignPanel(String name, int index) {
        if (index == -1) {
            index = tabs.size();
        }
        SysCAMSComponentDesignPanel sccdp = new SysCAMSComponentDesignPanel(this);
        tabs.add(index, sccdp);
        mainTabbedPane.add(sccdp.tabbedPane, index);
        mainTabbedPane.setToolTipTextAt(index, "Open SystemC-AMS design diagrams");
        mainTabbedPane.setTitleAt(index, name);
        mainTabbedPane.setIconAt(index, IconManager.imgic1208);
        //mainTabbedPane.addTab(name, IconManager.imgic14, dp.tabbedPane, "Opens design diagrams");
        sccdp.init();
        //ystem.out.println("Design added");
        return index;
    }

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

    //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 void expandToErrors() {
        if (gtm != null) {
            gtm.expandToErrors();
        }
    }

    public void expandToWarnings() {
        if (gtm != null) {
            gtm.expandToWarnings();
        }
    }

    public void expandToGraphs() {
        if (gtm != null) {
            gtm.expandToGraphs();
        }
    }

    public void expandToSimulationTraces() {
        if (gtm != null) {
            gtm.expandToSimulationTraces();
        }
    }

    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 createVerificationProperty(String name) {
        int index = addVerificationPropertyPanel(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 createSysCAMSComponentDesign(String name) {
        int index = addSysCAMSComponentDesignPanel(name, -1);
        mainTabbedPane.setSelectedIndex(index);
        return index;
    }

    public int createELN(String name) {
        int index = addELNDesignPanel(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 int createFaultTree(String name) {
        int index = addFaultTreePanel(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.createDraggableEnhancedTabbedPane(this);//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) {
                //TraceManager.addDev("State Changed in main tabbed pane");
                ModelParameters.setValueForID("LAST_SELECTED_MAIN_TAB", ""+mainTabbedPane.getSelectedIndex());
                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 void firstDiag() {

        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp == null) {
            return;
        }
        tp.tabbedPane.setSelectedIndex(0);
    }

    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 TURTLEPanel getTURTLEPanel(int index) {
        if (index >= tabs.size()) {
            return null;
        }
        return tabs.get(index);
    }

    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() {
        start(true);
    }

    public void start(boolean show) {
        // 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(show);

        //split1.setDividerLocation(0.90);
        //split.setDividerLocation(0.2);


    }

    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) {
            setMode(NOT_OPENED);

            // tabbed pane
            for (int i = 0; i < tabs.size(); i++) {
                tabs.elementAt(i).tabbedPane.removeAll();
            }

            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", -1);
        tabs.elementAt(0).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(0);
        //paneAction(null);
        //frame.repaint();
    }

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


    public void newCommunicationPattern() {
        //TraceManager.addDev("NEW ANALYSIS");
        //addCommunicationPatternPanel("CP", 0);
        tabs.elementAt(0).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size() - 1);
        //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 newVerificationPropertyPanel() {
        //TraceManager.addDev("NEW DESIGN");
        addVerificationPropertyPanel("Verification Tracking", -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("Application", -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", -1);
        tabs.elementAt(0).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size() - 1);
        //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 newSysCAMS() {
        //TraceManager.addDev("NEW DESIGN");
        addSysCAMSComponentDesignPanel("SystemC_AMS", -1);
        //tabs.elementAt(tabs.size() - 1).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size() - 1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newELN() {
        //TraceManager.addDev("NEW DESIGN");
        addELNDesignPanel("ELN", -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", -1);
        //((TURTLEPanel)tabs.elementAt(tabs.size()-1)).tabbedPane.setSelectedIndex(0);
        //mainTabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size() - 1);
    }

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

    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", -1);
        //((TURTLEPanel)tabs.elementAt(0)).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size() - 1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newFaultTree() {
        //TraceManager.addDev("NEW ANALYSIS");
        addFaultTreePanel("Fault Trees", -1);
        //((TURTLEPanel)tabs.elementAt(0)).tabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size() - 1);
        //paneAction(null);
        //frame.repaint();
    }

    public void newRequirement() {
        //TraceManager.addDev("NEW ANALYSIS");
        addRequirementPanel("Requirements", -1);
        //((TURTLEPanel)tabs.elementAt(0)).tabbedPane.setSelectedIndex(0);
        //mainTabbedPane.setSelectedIndex(0);
        mainTabbedPane.setSelectedIndex(tabs.size() - 1);
        //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);
            SpecConfigTTool.lastPanel = -1;
            SpecConfigTTool.lastTab = -1;
        } 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);
        jfctgraph.setCurrentDirectory(new File(SpecConfigTTool.TGraphPath));

        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);
        jfctgraph.setCurrentDirectory(new File(SpecConfigTTool.TGraphPath));

        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);
        jfctgraph.setCurrentDirectory(new File(SpecConfigTTool.TGraphPath));

        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 loadAUTGraphsDir() {
        File dir = new File(SpecConfigTTool.TGraphPath);
        if (!dir.exists()) {
            System.err.println("Graphs directory doesn't exists !");
            return;
        }

        for (File autfile : dir.listFiles()) {
            if (!FileUtils.getExtension(autfile).equals("aut"))
                continue;

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

            RG rg = new RG(autfile.getName());
            rg.fileName = autfile.getAbsolutePath();
            rg.data = spec;
            addRG(rg);
        }

    }

    public void updateLastOpenFile(File file) {
        if (ConfigurationTTool.LastOpenFileDefined) {

            ConfigurationTTool.LastOpenFile = file.getPath();
            if (ConfigurationTTool.LastOpenFile.contains(".ttool" + File.separator)) {
                int last = 0;
                for (int i = 0; i < ConfigurationTTool.LastOpenFile.length(); i++) {
                    if (ConfigurationTTool.LastOpenFile.charAt(i) == '/')
                        last = i;
                }
                ConfigurationTTool.LastOpenFile = ConfigurationTTool.LastOpenFile.substring(0, last);
            }
            // Change name of action
            actions[TGUIAction.ACT_OPEN_LAST].setName(TGUIAction.ACT_OPEN_LAST, ConfigurationTTool.LastOpenFile);

            // is the new name already in the list of opened files?
            for (int i = 0; i < ConfigurationTTool.LastOpenFiles.length; i++) {
                if (ConfigurationTTool.LastOpenFiles[i].compareTo(ConfigurationTTool.LastOpenFile) == 0) {
                    ConfigurationTTool.LastOpenFiles[i] = "";
                }
            }

            // Dec all files
            ConfigurationTTool.decLastFiles();
            ConfigurationTTool.LastOpenFiles[0] = ConfigurationTTool.LastOpenFile;

            // We need to update the actions
            for (int j = 0; j < actionsLast.length; j++) {
                actionsLast[j] = new TGUIAction(TGUIAction.ACT_OPEN_LAST, "Open recent: " + ConfigurationTTool.LastOpenFiles[j]);
                actionsLast[j].addActionListener(this);
                //actions[i].addKeyListener(this);
            }

            if (jmenubarturtle != null) {
                jmenubarturtle.makeFileMenu(this);
            }

        }
    }

    // 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, "UTF-8");

            } 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();

            loadModels(gtm.mergeTURTLEGModeling(oldmodeling, s), "merged");

        }
    }

    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(boolean isProject) {
        if (config != null && activetdp != null)
            saveConfig();
        // 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");
        if (isProject) {
            jfc.resetChoosableFileFilters();
            jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            jfc.setAcceptAllFileFilterUsed(false);
            FileNameExtensionFilter filter = new FileNameExtensionFilter("TTool project", "ttool");
            jfc.setFileFilter(filter);
        } else {
            jfc.resetChoosableFileFilters();
            jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            jfc.setAcceptAllFileFilterUsed(false);
            FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files", "xml");
            jfc.setFileFilter(filter);
        }
        int returnVal = jfc.showOpenDialog(frame);

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

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

    }
    public void openProjectFromFile(File _f) {
        String data = null;
        File tmpFile;

        if (FileUtils.getExtension(_f).equals("ttool")) {
            File tmpDir = _f;
            //SpecConfigTTool.setDirConfig(dir);
            String filename = tmpDir.getAbsolutePath() + "/" + tmpDir.getName().replaceAll(".ttool", ".xml");
            tmpFile = new File(filename);
        } else {
            tmpFile = _f;
        }

        if (!checkFileForOpen(tmpFile)) {
            JOptionPane.showMessageDialog(frame, "File " + tmpFile.getAbsolutePath() + " could not be opened ", "File Error", JOptionPane
                    .INFORMATION_MESSAGE);
            return;
        }
        try {
            FileInputStream fis = new FileInputStream(tmpFile);
            int nb = fis.available();

            byte[] ba = new byte[nb];
            fis.read(ba);
            fis.close();
            data = new String(ba, "UTF-8");
            //TraceManager.addDev("Mode:" + s);
        } catch (Exception e) {
            //TraceManager.addDev("Open file error");
            JOptionPane.showMessageDialog(frame, "File " + tmpFile.getAbsolutePath() + " could not be opened", "File Error",
                    JOptionPane.INFORMATION_MESSAGE);
            return;
        }


        if (FileUtils.getExtension(_f).equals("ttool")) {
            File tmpDir = _f;
            config = new File(tmpDir.getAbsolutePath() + "/project_config.xml");
            try {
                SpecConfigTTool.loadConfigFile(config);
            } catch (MalformedConfigurationException e) {
                System.err.println(e.getMessage() + " : Can't load config file.");
            }
            SpecConfigTTool.setDirConfig(tmpDir);
        } else {
            SpecConfigTTool.setBasicConfig(systemcOn);
        }

        file = tmpFile;

        // close current modeling
        closeTurtleModeling();

        // open the new TURTLE modeling
        newTurtleModeling();

        //            gtm.enableUndo(false);

        // Update configuration
        updateLastOpenFile(file);

        // Issue #41: Moved to common method
        loadModels(data, "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() {
        openLastProject(0);
    }

    public void openLastProject(int id) {

        // 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.LastOpenFiles[id]);
        //TraceManager.addDev("Opening project #" + id + " for file=" + file.getAbsolutePath());

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

            if (FileUtils.getExtension(file).equals("ttool")) {
                openProjectFromFile(file);
                return;
                /*TraceManager.addDev("this is a ttool project");
                int last = 0;
                for (int i = 0; i < ConfigurationTTool.LastOpenFile.length(); i++) {
                    if (ConfigurationTTool.LastOpenFile.charAt(i) == '/')
                        last = i;
                }
                dir = file;
                String xml = ConfigurationTTool.LastOpenFile.substring(last, ConfigurationTTool.LastOpenFile.length()).replaceAll(".ttool", ".xml");
                file = new File(dir.getAbsolutePath() + File.separator + xml);
                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);
                try {
                    FileInputStream fis = new FileInputStream(file);
                    int nb = fis.available();

                    byte[] ba = new byte[nb];
                    fis.read(ba);
                    fis.close();
                    s = new String(ba, "UTF-8");
                    //TraceManager.addDev("Model:" + s);
                } 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);

            // Issue #41: Moved to common method
            updateLastOpenFile(file);
            loadModels(s, "loaded");

        }

    }

    private void loadModels(final String xmlModel,
                            final String actionMessage) {
        gtm.enableUndo(false);

        TraceManager.addDev("Loading model");

        // load the new TTool 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, "Model " + file.getAbsolutePath() + " could not be correctly " + actionMessage,
                        "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);

            }
        } catch (Exception mme) {
            JOptionPane.showMessageDialog(frame, "Model " + file.getAbsolutePath() + " could not be correctly " + actionMessage,
                    "Error when loading modeling", JOptionPane.INFORMATION_MESSAGE);
            frame.setTitle("TTool: unnamed project");
        }

        gtm.enableUndo(true);
        gtm.saveOperation(getCurrentSelectedPoint());
        dtree.forceUpdate();
        if (SpecConfigTTool.lastTab > -1 && SpecConfigTTool.lastPanel > -1 && mainTabbedPane.getTabCount() > 0) {
            if (SpecConfigTTool.lastTab < mainTabbedPane.getTabCount()) {
                mainTabbedPane.setSelectedIndex(SpecConfigTTool.lastTab);
                activetdp = tabs.get(SpecConfigTTool.lastTab).getPanels().elementAt(SpecConfigTTool.lastPanel);
                activetdp.selectTab(activetdp.name);
                basicActivateDrawing();
            }
        }

        if (dir != null)
            loadAUTGraphsDir();
    }

    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 TTool 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 saveAsNewProject() {
        jfc.resetChoosableFileFilters();
        jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        jfc.setAcceptAllFileFilterUsed(false);
        FileNameExtensionFilter filter = new FileNameExtensionFilter("TTool project", "ttool");
        jfc.setFileFilter(filter);

        createFileDialog();

        boolean b = mainSave();

        if (b) {
            updateLastOpenFile(file);
        }

        return b;

    }

    protected boolean saveAsNewModel() {
        jfc.resetChoosableFileFilters();
        jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
        jfc.setAcceptAllFileFilterUsed(false);
        FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files", "xml");
        jfc.setFileFilter(filter);
        int returnVal = jfc.showSaveDialog(frame);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfc.getSelectedFile();
            file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension());
        }

        boolean b = mainSave();
        if (b) {
            dir = null;
            config = null;
            SpecConfigTTool.setBasicConfig(systemcOn);
            updateLastOpenFile(file);
        }
        return b;
    }

    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());
                }
            }
        }

        return mainSave();
    }

    public boolean mainSave() {
        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
     *
     * @param str1 (text for the left button)
     * @param str2 (text for the right button)
     * @return boolean (false = cancel, true = perform action)
     * @author Fabien Tessier
     */
    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() {
        quitApplication(true, true);
    }

    public void quitApplication(boolean askUser, boolean mustExit) {
        boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
        if (b && askUser) {
            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) {
        }


        if (mustExit) {
            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 oldFirstDiag() {
        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.getSearchText();
        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.getSearchText());
    }

    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 ...",
                "Default configuration:\n-----------------------\n" + ConfigurationTTool.getConfiguration(systemcOn)
                        + "\nProject configuration:\n-----------------------\n" + SpecConfigTTool.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 void issueError(String error, String title) {
        JOptionPane.showMessageDialog(frame,
                error,
                title,
                JOptionPane.INFORMATION_MESSAGE);
    }

    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;
            }
            expandToWarnings();
            expandToErrors();
            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;
            List<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);
                expandToWarnings();
                expandToErrors();
                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);
            expandToWarnings();
            expandToErrors();
            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);
                }
            }

            // FaultTree
        } else if (tp instanceof FaultTreePanel) {
            FaultTreePanel atp = (FaultTreePanel) tp;
            b = gtm.translateFaultTreePanel(atp);
            expandToWarnings();
            expandToErrors();
            if (b) {
                setMode(MainGUI.FAULTTREE_SYNTAXCHECKING_OK);
                ret = true;
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                            "0 error, " + getCheckingWarnings().size() + " warning(s)",
                            "Syntax analysis successful on fault tree",
                            JOptionPane.INFORMATION_MESSAGE);
                }
            } else {
                if (!automatic) {
                    JOptionPane.showMessageDialog(frame,
                            "The fault tree contains several errors",
                            "Syntax analysis failed",
                            JOptionPane.INFORMATION_MESSAGE);
                }
            }

        } else if (tp instanceof AttackTreePanel) {
            AttackTreePanel atp = (AttackTreePanel) tp;
            b = gtm.translateAttackTreePanel(atp);
            expandToWarnings();
            expandToErrors();
            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;
            List<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);
                expandToWarnings();
                expandToErrors();
                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;
            List<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);
                expandToWarnings();
                expandToErrors();
                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());
                expandToWarnings();
                expandToErrors();
                if (b) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if ((!automatic) && (getCheckingWarnings().size() > 0)) {
                        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());
                expandToWarnings();
                expandToErrors();
                if (b) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if ((!automatic) && (getCheckingWarnings().size() > 0)) {
                        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 SysCAMSComponentDesignPanel) {
            SysCAMSComponentDesignPanel syscamscdp = (SysCAMSComponentDesignPanel) tp;
            JDialogSelectSysCAMSComponent.validated = syscamscdp.validated;
            JDialogSelectSysCAMSComponent.ignored = syscamscdp.ignored;
            Vector<TGComponent> syscamsComponentsToValidate = new Vector<TGComponent>();
            JDialogSelectSysCAMSComponent jdssyscamsc = new JDialogSelectSysCAMSComponent(frame, syscamsComponentsToValidate, syscamscdp.syscamsctdp.getComponentList(), "Choosing SystemC-AMS components to validate");
            if (!automatic) {
                GraphicLib.centerOnParent(jdssyscamsc);
                jdssyscamsc.setVisible(true); // Blocked until dialog has been closed
            } else {
                jdssyscamsc.closeDialog();
            }
            if (syscamsComponentsToValidate.size() > 0) {
                syscamscdp.validated = JDialogSelectSysCAMSComponent.validated;
                syscamscdp.ignored = JDialogSelectSysCAMSComponent.ignored;
//        		b = gtm.translateSysCAMSComponentDesign(syscamsComponentsToValidate, syscamscdp, jdssyscamsc.getOptimize());
                expandToWarnings();
                expandToErrors();
                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 SystemC-AMS designs",
                                JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
						      //     "The SystemC-AMS design contains several errors",
						      //"Syntax analysis failed",
				"Syntax analysis not executed",
				"Not available for SystemC-AMS panel",		      
                                JOptionPane.INFORMATION_MESSAGE);
                    }
                }
            }
        } else if (tp instanceof ELNDesignPanel) {
            ELNDesignPanel elndp = (ELNDesignPanel) tp;
            JDialogSelectELNComponent.validated = elndp.validated;
            JDialogSelectELNComponent.ignored = elndp.ignored;
            Vector<TGComponent> ELNComponentsToValidate = new Vector<TGComponent>();
            JDialogSelectELNComponent jdselnc = new JDialogSelectELNComponent(frame, ELNComponentsToValidate, elndp.elndp.getComponentList(), "Choosing ELN components to validate");
            if (!automatic) {
                GraphicLib.centerOnParent(jdselnc);
                jdselnc.setVisible(true); // Blocked until dialog has been closed
            } else {
                jdselnc.closeDialog();
            }
            if (ELNComponentsToValidate.size() > 0) {
                elndp.validated = JDialogSelectELNComponent.validated;
                elndp.ignored = JDialogSelectELNComponent.ignored;
//        		b = gtm.translateSysCAMSComponentDesign(syscamsComponentsToValidate, syscamscdp, jdssyscamsc.getOptimize());
                expandToWarnings();
                expandToErrors();
                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 ELN designs",
                                JOptionPane.INFORMATION_MESSAGE);
                    }
                } else {
                    if (!automatic) {
                        JOptionPane.showMessageDialog(frame,
                                "The ELN design 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());
                expandToWarnings();
                expandToErrors();
                if (b) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if ((!automatic) && (getCheckingWarnings().size() > 0)) {
                        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
                expandToWarnings();
                expandToErrors();
                if (b) {
                    //setMode(MainGUI.MODEL_OK);
                    setMode(MainGUI.GEN_SYSTEMC_OK);
                    setMode(MainGUI.MODEL_OK);
                    ret = true;
                    if ((!automatic) && (getCheckingWarnings().size() > 0)) {
                        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);
                    expandToWarnings();
                    expandToErrors();
                    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);
            expandToWarnings();
            expandToErrors();
            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);
            expandToWarnings();
            expandToErrors();
            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 List<TAttribute> getAllAttributes() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        String name = getCurrentTDiagramPanel().getName();

        return this.getAllAttributes(tp, name);
    }

    public List<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 List<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 List<AvatarSignal> getAllSignals() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        String name = getCurrentTDiagramPanel().getName();
        return this.getAllSignals(tp, name);
    }

    public List<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();

        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> getAllFaults() {
        TURTLEPanel tp;
        ArrayList<TGComponent> list = new ArrayList<TGComponent>();

        for (int i = 0; i < tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof FaultTreePanel) {
                for (TGComponent s : ((FaultTreePanel) tp).getAllFaults()) {
                    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 List<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, 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, "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, SpecConfigTTool.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(), SpecConfigTTool.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(SpecConfigTTool.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, gtm.getCPUTaskMap());
        // jgen.setSize(500, 450);
        GraphicLib.centerOnParent(jgen, 600, 800);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

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

    public void dseZ3() {
        //TraceManager.addDev("Design space exploration with Z3");
        if (gtm == null) {
            return;
        }

        TMLMapping<TGComponent> map = gtm.getTMLMapping();

        if (map == null) {
            return;
        }

        JDialogDSEZ3 jdsez3 = new JDialogDSEZ3(frame, this, "Design Space Exploration with Z3", map, SpecConfigTTool.TMLCodeDirectory);
        //   jdsez3.setSize(600,800);
        GraphicLib.centerOnParent(jdsez3, 700, 800);
        jdsez3.setVisible(true);
        dtree.toBeUpdated();
    }

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

    public void removeNoC(boolean automatic) {
        //TraceManager.addDev("Design space exploration with Z3");
        if (gtm == null) {
            return;
        }

        TMLMapping map = gtm.getTMLMapping();

        if (map == null) {
            return;
        }

        JDialogNoCManagement jdsenm = new JDialogNoCManagement(frame, this, "Removing NoC", map);
        //   jdsez3.setSize(600,800);
        GraphicLib.centerOnParent(jdsenm, 700, 800);
        if (!automatic) {
            jdsenm.setVisible(true);
        } else {
            jdsenm.startProcess();
        }
        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, 700, 600);
        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(SpecConfigTTool.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(SpecConfigTTool.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", SpecConfigTTool.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(), SpecConfigTTool.TGraphPath, experimentalOn);
        // jmc.setSize(550, 600);
        GraphicLib.centerOnParent(jmc, 650, 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.SystemCCodeExecuteXCycle, SpecConfigTTool
                    .SystemCCodeInteractiveExecuteCommand, SpecConfigTTool.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(SpecConfigTTool.SystemCCodeInteractiveExecuteCommand + " -gpath " + SpecConfigTTool.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)) {
            TraceManager.addDev("Done TML generation");
            return ConfigurationTTool.TMLCodeDirectory;
        }

        return null;
    }



    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, 800, 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 = SpecConfigTTool.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 runGTKWave(String pathToFile) {
        executeUserCommand("localhost", ConfigurationTTool.GTKWavePath + " " + pathToFile);
    }

    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();
        if (file == null)
            return;

        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(true);

        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 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();
                image = tdp1.performMinimalCapture();
                if (i < 10) {
                    file1 = new File(name + "0" + i + "__" + tdp1.getName());
                } else {
                    file1 = new File(name + i + "__" + tdp1.getName());
                }
                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(false);
        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 + "__" + tdp1.getName());
                } else {
                    file1 = new File(name + j + "_" + i + "__" + tdp1.getName());
                }
                file1 = FileUtils.addFileExtensionIfMissing(file1, TSVGFilter.getExtension());
                try {
                    TraceManager.addDev("Saving in file:" + file1.getAbsolutePath());
                    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;
        jfcimg.setCurrentDirectory(new File(SpecConfigTTool.IMGPath));
        int returnVal = jfcimg.showSaveDialog(frame);
        if (returnVal == JFileChooser.CANCEL_OPTION)
            return null;

        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(boolean checkForSave) {
        File file = null;
        jfcimgsvg.setCurrentDirectory(new File(SpecConfigTTool.IMGPath));
        int returnVal = jfcimgsvg.showSaveDialog(frame);
        if (returnVal == JFileChooser.CANCEL_OPTION)
            return null;

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = jfcimgsvg.getSelectedFile();
            file = FileUtils.addFileExtensionIfMissing(file, TSVGFilter.getExtension());

        }
        if (checkForSave) {
            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, SpecConfigTTool.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");

        // Repaint all requirement diags
        TURTLEPanel tp;
        for (int i = 0; i < tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof AvatarRequirementPanel) {
                ((AvatarRequirementPanel) (tp)).updateReferences();
            }
        }

        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 List<TGComponent> getAllSysCAMSComponents() {
        TURTLEPanel tp;
        List<TGComponent> ll = new LinkedList<TGComponent>();

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

            if (tp instanceof SysCAMSComponentDesignPanel) {
                ll.addAll(((SysCAMSComponentDesignPanel) tp).syscamsctdp.getComponentList());
            }
        }

        return ll;
    }

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

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

            if (tp instanceof ELNDesignPanel) {
                ll.addAll(((ELNDesignPanel) tp).elndp.getComponentList());
            }
        }

        return ll;
    }

    public ArrayList<SysCAMSComponentTaskDiagramPanel> getAllPanelsReferencingSysCAMSCompositeComponent(SysCAMSCompositeComponent syscamscc) {
        TURTLEPanel tp;
        ArrayList<SysCAMSComponentTaskDiagramPanel> foundPanels = new ArrayList<SysCAMSComponentTaskDiagramPanel>();

        for (int i = 0; i < tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof SysCAMSComponentDesignPanel) {
                ((SysCAMSComponentDesignPanel) tp).syscamsctdp.getPanelsUsingAComponent(syscamscc, foundPanels);
            }
        }
        return foundPanels;
    }

    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 void updateReferenceToSysCAMSCompositeComponent(SysCAMSCompositeComponent tmlcc) {
        TURTLEPanel tp;

        for (int i = 0; i < tabs.size(); i++) {
            tp = tabs.elementAt(i);
            if (tp instanceof SysCAMSComponentDesignPanel) {
                ((SysCAMSComponentDesignPanel) tp).syscamsctdp.updateReferenceToSysCAMSCompositeComponent(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) {
            //TraceManager.addDev("Returning 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 setVerificationPropertyDiagramName(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 setSysCAMSComponentTaskDiagramName(int indexDesign, String name) {
        TURTLEPanel tp = tabs.elementAt(indexDesign);
        tp.tabbedPane.setTitleAt(0, name);
    }

    public void setELNDiagramName(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 isSDCreatedZV(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 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 FaultTreeDiagramPanel getFaultTreeDiagramPanel(int index, int indexTab, String s) {
        //TraceManager.addDev("Searching for " + s);
        TURTLEPanel tp = tabs.elementAt(index);
        return getFaultTreeDiagramPanel(tp, indexTab, s);
    }

    public FaultTreeDiagramPanel getFaultTreeDiagramPanel(TURTLEPanel tp, int indexTab, String s) {
        if (tp.tabbedPane.getTitleAt(indexTab).equals(s)) {
            return (FaultTreeDiagramPanel) (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 (!isSDCreatedZV(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 createSysCAMS(int index, String s) {
        return createSysCAMS(tabs.elementAt(index), s);
    }

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

        ((SysCAMSComponentDesignPanel) tp).addSysCAMS(s);
        setPanelMode();
        return true;
    }

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

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

        ((ELNDesignPanel) tp).addELN(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 createFaultTreeDiagram(int index, String s) {
        return createFaultTreeDiagram(tabs.elementAt(index), s);
    }

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

        ((FaultTreePanel) tp).addFaultTreeDiagram(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 SysCAMSComponentTaskDiagramPanel getSysCAMSPanel(int index, int indexTab, String s) {
        TURTLEPanel tp = tabs.elementAt(index);
        return getSysCAMSPanel(tp, indexTab, s);
    }

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

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

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

    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) {
            TraceManager.addDev("null TP Panel");
            return;
        }
        index = tp.tabbedPane.getSelectedIndex();

        //TraceManager.addDev("TP Panel: " + tp + " index=" + index);

        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);
        }

        // If no edition panel, we need to deactivate previous diagram and model checking

        if (index == -1) {
            setMode(MainGUI.CREATE_NEW_PANEL);
        }

        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 FaultTreePanel) || (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 boolean newSysCAMSComponentTaskName(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 SystemC-AMS 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 xml format) ", "Error when loading modeling",
                    JOptionPane
                            .INFORMATION_MESSAGE);
            frame.setTitle("TTool: unamed project");
        } catch (UnsupportedEncodingException mme) {
            JOptionPane.showMessageDialog(frame, "Modeling could not be loaded (unsupported encoding format) ", "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 selectPanelOnTheLeft() {
        if (mainTabbedPane != null) {
            mainTabbedPane.setSelectedIndex(Math.max(0, mainTabbedPane.getSelectedIndex() - 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
     *
     * @param name the name to be checked
     * @return true if the name matches another tab name
     * @author Fabien Tessier
     */
    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
     *
     * @param oldname : old name
     * @param newname : new name
     * @author Fabien Tessier
     */
    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) {
        if (p.x < 0) {
            return null;
        }
        if (p.y < 0){
            return null;
        }

        if (mainTabbedPane.getTabCount() > 0 ) {
            mainTabbedPane.setSelectedIndex(p.x);
            TURTLEPanel tp = tabs.elementAt(p.x);
            TraceManager.addDev("Got TP");
            if (tp != null) {
                if (tp.tabbedPane.getTabCount() > 0) {
                    tp.tabbedPane.setSelectedIndex(p.y);
                    return tp.panels.elementAt(p.y);
                }
            }
        }
        return null;

    }

    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;

        // Issue #81: For tests
        if (tabs != null) {
            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);
//
//        List<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 Vector<SysCAMSComponentTaskDiagramPanel> getListSysCAMSPanel() {
        Vector<SysCAMSComponentTaskDiagramPanel> syscamsDiagram = new Vector<SysCAMSComponentTaskDiagramPanel>();
        TURTLEPanel tp = getTURTLEPanel("SystemC_AMS");
        if (tp != null) {
            Vector<TDiagramPanel> ps = tp.panels;
            for (TDiagramPanel panel : ps) {
                if (panel instanceof SysCAMSComponentTaskDiagramPanel) {
                    syscamsDiagram.add((SysCAMSComponentTaskDiagramPanel) panel);
                }
            }
            if (syscamsDiagram.size() == 0)
                System.err.println("No SysCAMS Panel found : MainGUI.getListSysCAMSPanel()");
            return syscamsDiagram;
        } else {
            JDialog msg = new JDialog();
            msg.setLocationRelativeTo(null);
            JOptionPane.showMessageDialog(msg, "There is no SystemC-AMS panel. Please add one.", "Warning !",
                    JOptionPane.WARNING_MESSAGE);
            return null;
        }
    }

    public void syscamsExecutableCodeGeneration() {
        JDialogSysCAMSExecutableCodeGeneration jgen = new JDialogSysCAMSExecutableCodeGeneration(frame, this, "Executable Code generation, compilation and execution",
                "../SysCAMSGenerationCode/");

        GraphicLib.centerOnParent(jgen, 500, 450);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    public Vector<ELNDiagramPanel> getListELNPanel() {
        Vector<ELNDiagramPanel> elnDiagram = new Vector<ELNDiagramPanel>();
        TURTLEPanel tp = getTURTLEPanel("ELN");
        if (tp != null) {
            Vector<TDiagramPanel> ps = tp.panels;
            for (TDiagramPanel panel : ps) {
                if (panel instanceof ELNDiagramPanel) {
                    elnDiagram.add((ELNDiagramPanel) panel);
                }
            }
            if (elnDiagram.size() == 0)
                System.err.println("No ELN Panel found : MainGUI.getListELNPanel()");
            return elnDiagram;
        } else {
            JDialog msg = new JDialog();
            msg.setLocationRelativeTo(null);
            JOptionPane.showMessageDialog(msg, "There is no ELN panel. Please add one.", "Warning !",
                    JOptionPane.WARNING_MESSAGE);
            return null;
        }
    }

    public void elnExecutableCodeGeneration() {
        JDialogELNExecutableCodeGeneration jgen = new JDialogELNExecutableCodeGeneration(frame, this, "Executable Code generation, compilation and execution",
                "../ELNGenerationCode/");

        GraphicLib.centerOnParent(jgen, 500, 450);
        jgen.setVisible(true);
        dtree.toBeUpdated();
    }

    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) {
            TraceManager.addDev("Null map");
            return null;
        }

        return transactionMap.get(id);
    }

    public synchronized void addLatencyVals(int id, String[] latency) {
        if (latencyMap != null) {
            //
            if (!latencyMap.containsKey(id)) {
                ConcurrentHashMap<String, String> map = new ConcurrentHashMap<String, String>();
                latencyMap.put(id, map);
            }
            latencyMap.get(id).put(latency[0], latency[1]);
            //
        }
        //      
    }

    public synchronized ConcurrentHashMap<String, String> getLatencyVals(int id) {
        //      
        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 void resetReachability() {
        //TraceManager.addDev("Reset reachability");
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp != null) {
            tp.resetReachability();
        }
    }

    public void resetLiveness() {
        TURTLEPanel tp = getCurrentTURTLEPanel();
        if (tp != null) {
            tp.resetLiveness();
        }
    }


    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 void toggleELN() {
        if (hidden == false) {
            hidden = true;
        } else {
            hidden = false;
        }
    }

    public boolean getHidden() {
        return hidden;
    }

    public boolean isAValidTabName(String name) {
        boolean b1, b2;//, b3, b4, b5, b6, b7;
        b1 = (name.substring(0, 1)).matches("[a-zA-Z]");
        b2 = name.matches("\\w*");
        return b1 && b2;
        //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, newFaultTree, newAVATARBD, newAVATARRequirement, newMAD, newTMLCP, newTMLMethodo,
                newAvatarMethodo, newAVATARDD, newSysmlsecMethodo, newSysCAMS, newELN, newVerificationProperty;
        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");
            newFaultTree = createMenuItem("New Fault 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");
            newSysCAMS = createMenuItem("New SystemC-AMS Block Diagram");
            newELN = createMenuItem("New ELN Diagram");
            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");
            newVerificationProperty = createMenuItem("New Verification Tracking");


            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(newSysCAMS);
                    menu.add(newELN);
                    menu.addSeparator();
                }
            }

            if (avatarOn) {
                //               menu.addSeparator();
                //menu.add(newAvatarMethodo);

                menu.add(newMAD);
                menu.add(newAVATARRequirement);
                menu.add(newAttackTree);
                menu.add(newFaultTree);
                menu.add(newAVATARAnalysis);
                menu.add(newAVATARBD);
                if (experimentalOn) {
                    menu.add(newAVATARDD);
                }
            }

            if (experimentalOn) {
                menu.addSeparator();
                menu.add(newVerificationProperty);
            }


        }


        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")) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newAnalysis();
                } else if (ac.equals("New TURTLE Design")) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newDesign();
                } else if (ac.equals("New TURTLE Deployment")) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newDeployment();
                } else if (e.getSource() == newAttackTree) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newAttackTree();
                } else if (e.getSource() == newFaultTree) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newFaultTree();
                } else if (ac.equals("New TURTLE Requirement Diagram")) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newRequirement();
                } else if (e.getSource() == newTMLMethodo) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newDiplodocusMethodology();
                } else if (e.getSource() == newAvatarMethodo) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newAvatarMethodology();
                } else if (e.getSource() == newSysmlsecMethodo) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newSysmlsecMethodology();
                } else if (ac.equals("New DIPLODOCUS Design")) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newTMLDesign();
                } else if (e.getSource() == newTMLComponentDesign) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newTMLComponentDesign();
                } else if (e.getSource() == newTMLCP) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newTMLCP();
                } else if (e.getSource() == newTMLArchi) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newTMLArchi();
                } else if (ac.equals("New Proactive Design")) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newProactiveDesign();
                } else if (ac.equals("New TURTLE-OS Design")) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newTURTLEOSDesign();
                } else if (e.getSource() == newNCDesign) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newNCDesign();
                } else if (e.getSource() == newAVATARBD) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newAvatarBD();
                } else if (e.getSource() == newAVATARDD) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newADD();
                } else if (e.getSource() == newAVATARRequirement) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newAvatarRequirement();
                } else if (e.getSource() == newMAD) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newAvatarMADs();
                } else if (e.getSource() == newAVATARAnalysis) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newAvatarAnalysis();
                } else if (e.getSource() == newSysCAMS) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newSysCAMS();
                } else if (e.getSource() == newELN) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newELN();
                } else if (e.getSource() == newVerificationProperty) {
                    ModeManager.setMode(CREATE_NEW_PANEL, actions, mainBar, mgui);
                    mgui.newVerificationPropertyPanel();
                }
            }
        };
    }


    /**
     * 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;
    }


    //DraggableTabbedPaneCallbackInterface
    public void hasBeenDragged(int initialPosition, int destinationPosition) {

        TURTLEPanel p = tabs.get(initialPosition);
        TraceManager.addDev("Has been dragged: " + mainTabbedPane.getTitleAt(initialPosition));
        tabs.removeElementAt(initialPosition);
        tabs.insertElementAt(p, destinationPosition);
        mainTabbedPane.setSelectedIndex(destinationPosition);

        changeMade(null, -1);
        //frame.repaint();

    }

    public void compareSimulationTraces(SimulationTrace selectedST, boolean b) {
		cSimTrace = new JFrameCompareSimulationTraces( this, "Compare Simulation simulation",selectedST);
	       
		cSimTrace.setIconImage(IconManager.img9);
        
        GraphicLib.centerOnParent(cSimTrace, 900, 600);
        cSimTrace.setVisible(true);
        
        
        
        
	}


} // Class MainGUI