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

package ui.window;

import elntranslator.toELN.MakefileCode;
import elntranslator.toELN.TopCellGenerator;
import launcher.LauncherException;
import launcher.RshClient;
import myutil.*;
import elntranslator.ELNSpecification;
import elntranslator.ELNTCluster;
import ui.util.IconManager;
import ui.MainGUI;
import ui.ELNPanelTranslator;
import ui.eln.ELNDiagramPanel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.LinkedList;
import java.util.Vector;

/**
 * Class JDialogELNExecutableCodeGeneration
 * Dialog for managing the generation and compilation of ELN executable code
 * Creation: 31/07/2018
 * @version 1.0 31/07/2018
 * @author Irina Kit Yan LEE
 */

@SuppressWarnings("serial")

public class JDialogELNExecutableCodeGeneration extends javax.swing.JFrame implements ActionListener, Runnable, MasterProcessInterface {

    protected Frame f;
    protected MainGUI mgui;

    private String textSysC1 = "Base directory of code generation:";
    private String textSysC7 = "Base directory of topcell generation:";
    private String textSysC8 = "Base directory of Makefile:";
//    private String textSysC2 = "Compile SystemC-AMS executable with"; // compile
//    private String textSysC4 = "Run code in soclib / mutekh:";
//    private String textSysC5 = "Show AVATAR trace from file w/o hardware:";
//    private String textSysC6 = "Show cycle accurate trace from MPSoC file:";

//    private static String[] codes = {"AVATAR SOCLIB"};

//    private static int selectedRun = 1;
//    private static int selectedCompile = 0;
//    private static int selectedViewTrace = 0;
//    private static boolean static_putUserCode = true;

    protected static String pathCode;
    protected static String pathSoclibTraceFile;
    protected static String pathCompileMPSoC;
    protected static String pathExecuteMPSoC;
    protected static boolean optimizeModeSelected = true;

    protected final static int NOT_STARTED = 1;
    protected final static int STARTED = 2;
    protected final static int STOPPED = 3;

    private static

    int mode;

    //components
    protected JTextArea jta;
    protected JButton start;
    protected JButton stop;
    protected JButton close;

    protected JRadioButton exe, exeint, exetrace, exesoclib, compile, compilesoclib, viewtrace, viewtracesoclib;
    protected ButtonGroup compilegroup, exegroup, viewgroup;
    protected JLabel gen;
    protected JTextField code1, code2, code3, compiler, exe1, exe2, exe3, exe4, exe2int, simulationTraceFile, simulationsoclibTraceFile;
    protected JTabbedPane jp1;
    protected JScrollPane jsp;
    protected JCheckBox removeCFiles, removeXFiles, debugmode, tracemode, optimizemode, putUserCode;
    protected JComboBox<String> versionCodeGenerator, units;
    protected JButton showSimulationTrace, showOverflowStatus;

//    private static int selectedUnit = 2;
//    private static boolean removeCFilesValue = true;
//    private static boolean removeXFilesValue = true;
//    private static boolean debugValue = false;
//    private static boolean tracingValue = false;
//    private static boolean optimizeValue = true;

    private Thread t;
    private boolean go = false;
//    private boolean hasError = false;
    protected boolean startProcess = false;

//    private String hostExecute;

    protected RshClient rshc;

    public JDialogELNExecutableCodeGeneration(Frame _f, MainGUI _mgui, String title, String _pathCode) {
        super(title);
        f = _f;
        mgui = _mgui;

        if (pathCode == null) {
            pathCode = _pathCode;
        }

//        if (pathCompileMPSoC == null) {
//            pathCompileMPSoC = _pathCompileMPSoC;
//        }
//
//        if (pathExecuteMPSoC == null) {
//            pathExecuteMPSoC = _pathExecuteMPSoC;
//        }
//
//        hostExecute = _hostExecute;

        initComponents();
        myInitComponents();
        pack();

        getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
    }

    protected void myInitComponents() {
        mode = NOT_STARTED;
        setButtons();
//        makeSelectionCompile();
//        makeSelectionExecute();
//        makeSelectionViewTrace();
    }

    protected void initComponents() {
        Container c = getContentPane();
        setFont(new Font("Helvetica", Font.PLAIN, 14));
        c.setLayout(new BorderLayout());

        // Issue #41 Ordering of tabbed panes 
        jp1 = GraphicLib.createTabbedPane();//new JTabbedPane();

        JPanel jp01 = new JPanel();
        GridBagLayout gridbag01 = new GridBagLayout();
        GridBagConstraints c01 = new GridBagConstraints();
        jp01.setLayout(gridbag01);
        jp01.setBorder(new javax.swing.border.TitledBorder("Code generation"));

//        JPanel jp02 = new JPanel();
//        GridBagLayout gridbag02 = new GridBagLayout();
//        GridBagConstraints c02 = new GridBagConstraints();
//        jp02.setLayout(gridbag02);
//        jp02.setBorder(new javax.swing.border.TitledBorder("Compilation"));
//
//        JPanel jp03 = new JPanel();
//        GridBagLayout gridbag03 = new GridBagLayout();
//        GridBagConstraints c03 = new GridBagConstraints();
//        jp03.setLayout(gridbag03);
//        jp03.setBorder(new javax.swing.border.TitledBorder("Execution"));
//
//        JPanel jp04 = new JPanel();
//        GridBagLayout gridbag04 = new GridBagLayout();
//        GridBagConstraints c04 = new GridBagConstraints();
//        jp04.setLayout(gridbag04);
//        jp04.setBorder(new javax.swing.border.TitledBorder("Simulation trace"));

        c01.gridheight = 1;
        c01.weighty = 1.0;
        c01.weightx = 1.0;
        c01.gridwidth = GridBagConstraints.REMAINDER; //end row
        c01.fill = GridBagConstraints.BOTH;
        c01.gridheight = 1;

        gen = new JLabel(textSysC1);
        jp01.add(gen, c01);

        code1 = new JTextField(pathCode, 100);
        jp01.add(code1, c01);

        gen = new JLabel(textSysC7);
        jp01.add(gen, c01);

        code2 = new JTextField(pathCode, 100);
        jp01.add(code2, c01);
        
        gen = new JLabel(textSysC8);
        jp01.add(gen, c01);
        
        code3 = new JTextField(pathCode, 100);
        jp01.add(code3, c01);

        jp01.add(new JLabel(" "), c01);
        c01.gridwidth = GridBagConstraints.REMAINDER; //end row

//        removeCFiles = new JCheckBox("Remove .c / .h files");
//        removeCFiles.setSelected(removeCFilesValue);
//        jp01.add(removeCFiles, c01);

//        removeXFiles = new JCheckBox("Remove .x files");
//        removeXFiles.setSelected(removeXFilesValue);
//        jp01.add(removeXFiles, c01);

//        debugmode = new JCheckBox("Put debug information in generated code");
//        debugmode.setSelected(debugValue);
//        jp01.add(debugmode, c01);
//
//        tracemode = new JCheckBox("Put tracing capabilities in generated code");
//        tracemode.setSelected(tracingValue);
//        jp01.add(tracemode, c01);
//
//        optimizemode = new JCheckBox("Optimize code");
//        optimizemode.setSelected(optimizeModeSelected);
//        jp01.add(optimizemode, c01);
//
//        putUserCode = new JCheckBox("Include user code");
//        putUserCode.setSelected(static_putUserCode);
//        jp01.add(putUserCode, c01);

//        jp01.add(new JLabel("1 time unit ="), c01);
//
//        units = new JComboBox<String>(unitTab);
//        units.setSelectedIndex(selectedUnit);
//        units.addActionListener(this);
//        jp01.add(units, c01);

//        jp01.add(new JLabel("Code generator used:"), c01);

//        versionCodeGenerator = new JComboBox<String>(codes);
        // versionCodeGenerator.setSelectedIndex(selectedItem);
//        versionCodeGenerator.addActionListener(this);
//        jp01.add(versionCodeGenerator, c01);

        jp01.add(new JLabel(" "), c01);
        jp1.add("Generate code", jp01);

        // Panel 02 -> compile
//        c02.gridheight = 1;
//        c02.weighty = 1.0;
//        c02.weightx = 1.0;
//        c02.gridwidth = GridBagConstraints.REMAINDER; //end row
//        c02.fill = GridBagConstraints.BOTH;
//        c02.gridheight = 1;

//        compilegroup = new ButtonGroup();
//
//        compilesoclib = new JRadioButton(textSysC2, false);
//        compilesoclib.addActionListener(this);
//        jp02.add(compilesoclib, c02);
//        compilegroup.add(compilesoclib);
//        compiler = new JTextField(pathCompileMPSoC, 100);
//        jp02.add(compiler, c02);

        //compile.setSelected(selectedCompile == 0);
//        compilesoclib.setSelected(selectedCompile == 1);
//
//        jp1.add("Compile", jp02);

        // Panel 03 -> Execute
//        c03.gridheight = 1;
//        c03.weighty = 1.0;
//        c03.weightx = 1.0;
//        c03.gridwidth = GridBagConstraints.REMAINDER; //end row
//        c03.fill = GridBagConstraints.BOTH;
//        c03.gridheight = 1;

//        exegroup = new ButtonGroup();

        /*exetrace = new JRadioButton(textSysC3, false);
        exetrace.addActionListener(this);
        exegroup.add(exetrace);
        jp03.add(exetrace, c03);
        exe3 = new JTextField(pathExecuteMPSoC+"-trace", 100);
        jp03.add(exe3, c03);*/
//
//        exesoclib = new JRadioButton(textSysC4, false);
//        exesoclib.addActionListener(this);
//        exegroup.add(exesoclib);
//        jp03.add(exesoclib, c03);
//        exe4 = new JTextField(pathExecuteMPSoC, 100);
//        jp03.add(exe4, c03);

        //exe.setSelected(selectedRun == 0);
        //exetrace.setSelected(selectedRun == 1);
      //  exesoclib.setSelected(selectedRun == 2);

//        jp03.add(new JLabel(" "), c03);

//        jp1.add("Execute", jp03);

        // Panel 04 -> View trace
//        c04.gridheight = 1;
//        c04.weighty = 1.0;
//        c04.weightx = 1.0;
//        c04.gridwidth = GridBagConstraints.REMAINDER; //end row
//        c04.fill = GridBagConstraints.HORIZONTAL;
//        c04.gridheight = 1;

//        viewgroup = new ButtonGroup();
//        viewtrace = new JRadioButton(textSysC5, false);
//        viewgroup.add(viewtrace);
//        viewtrace.addActionListener(this);
//        jp04.add(viewtrace, c04);
//        simulationTraceFile = new JTextField(pathCode + "trace.txt", 100);
//        jp04.add(simulationTraceFile, c04);
//        viewtracesoclib = new JRadioButton(textSysC6, false);
//        viewgroup.add(viewtracesoclib);
//        viewtracesoclib.addActionListener(this);
//        jp04.add(viewtracesoclib, c04);
//        simulationsoclibTraceFile = new JTextField(pathSoclibTraceFile, 100);
//        jp04.add(simulationsoclibTraceFile, c04);
//
//        showSimulationTrace = new JButton("Show simulation trace");
//        showSimulationTrace.addActionListener(this);
//        jp04.add(showSimulationTrace, c04);

        //-------------Ajout C.Demarigny---------------

//        showOverflowStatus = new JButton("Show overflow status");
//        showOverflowStatus.addActionListener(this);
//        jp04.add(showOverflowStatus, c04);

        //----------------Fin ajout--------------------

//        viewtrace.setSelected(selectedViewTrace == 0);
//        viewtracesoclib.setSelected(selectedViewTrace == 1);

//        jp1.add("Results", jp04);

        c.add(jp1, BorderLayout.NORTH);

        jta = new ScrolledJTextArea();
        jta.setEditable(false);
        jta.setMargin(new Insets(10, 10, 10, 10));
        jta.setTabSize(3);
        jta.append("Select options and then, click on 'start' to launch code generation\n"); // / compilation / execution
        Font f = new Font("Courrier", Font.BOLD, 12);
        jta.setFont(f);
        jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        c.add(jsp, BorderLayout.CENTER);

        start = new JButton("Start", IconManager.imgic53);
        stop = new JButton("Stop", IconManager.imgic55);
        close = new JButton("Close", IconManager.imgic27);

        start.setPreferredSize(new Dimension(100, 30));
        stop.setPreferredSize(new Dimension(100, 30));
        close.setPreferredSize(new Dimension(100, 30));

        start.addActionListener(this);
        stop.addActionListener(this);
        close.addActionListener(this);

        JPanel jp2 = new JPanel();
        jp2.add(start);
        jp2.add(stop);
        jp2.add(close);

        c.add(jp2, BorderLayout.SOUTH);
    }

    public void actionPerformed(ActionEvent evt) {
        String command = evt.getActionCommand();

        // Compare the action command to the known actions.
        if (command.equals("Start")) {
            startProcess();
        } else if (command.equals("Stop")) {
            stopProcess();
        } else if (command.equals("Close")) {
            closeDialog();
        } else if (evt.getSource() == versionCodeGenerator) {
            // selectedItem = versionCodeGenerator.getSelectedIndex();
//        } else if (evt.getSource() == units) {
//            selectedUnit = units.getSelectedIndex();
//        } else if (evt.getSource() == showSimulationTrace) {
//            showSimulationTrace();
        //} else if ((evt.getSource() == exe) || (evt.getSource() == exetrace)|| (evt.getSource() == exesoclib)) {
//        else if ((evt.getSource() == exetrace) || (evt.getSource() == exesoclib)) {
//            makeSelectionExecute();
//            // } else if ((evt.getSource() == compile) || (evt.getSource() == compilesoclib)) {
//        } else if ((evt.getSource() == compilesoclib)) {
//            makeSelectionCompile();
//        } else if ((evt.getSource() == viewtrace) || (evt.getSource() == viewtracesoclib)) {
//            makeSelectionViewTrace();
//        } else if ((evt.getSource() == showOverflowStatus)) { //ajout CD
//            showOverflowStatus();
        }
    }

    public void closeDialog() {
        if (mode == STARTED) {
            stopProcess();
        }
//        optimizeModeSelected = optimizemode.isSelected();
//        removeCFilesValue = removeCFiles.isSelected();
//        removeXFilesValue = removeXFiles.isSelected();
//        debugValue = debugmode.isSelected();
//        tracingValue = tracemode.isSelected();
//        static_putUserCode = putUserCode.isSelected();
        dispose();
    }
//
//    public void makeSelectionExecute() {
//
//        //if (exetrace.isSelected()) {
//        //    selectedRun = 1;
//        //} else {
//        selectedRun = 2;
//        //}
//
//        // exe2.setEnabled(selectedRun == 0);
//        //exe3.setEnabled(selectedRun == 1);
//        exe4.setEnabled(selectedRun == 2);
//    }

//    public void makeSelectionCompile() {
//
//        selectedCompile = 1;
//        compiler.setEnabled(selectedCompile == 1);
//
//    }

//    public void makeSelectionViewTrace() {
//        if (viewtrace.isSelected()) {
//            selectedViewTrace = 0;
//        } else {
//            selectedViewTrace = 1;
//        }
//        simulationTraceFile.setEnabled(selectedViewTrace == 0);
//        // simulationsoclibTraceFile.setEnabled(selectedViewTrace == 1);
//    }

    public void stopProcess() {
        try {
            rshc.stopCommand();
        } catch (LauncherException le) {

        }
        rshc = null;
        mode = STOPPED;
        setButtons();
        go = false;
    }

    public void startProcess() {
        startProcess = false;
        t = new Thread(this);
        mode = STARTED;
        setButtons();
        go = true;
        t.start();
    }

    private void testGo() throws InterruptedException {
        if (go == false) {
            throw new InterruptedException("Stopped by user");
        }
    }

    public void run() {
//        String cmd;
//        String list;//, data;
//        hasError = false;

        try {
            if (jp1.getSelectedIndex() == 0) {
                jta.append("Generating executable code (ELN version)\n");

                Vector<ELNDiagramPanel> elnDiagramPanels = mgui.getListELNPanel();
                LinkedList<ELNTCluster> clusters = new LinkedList<ELNTCluster>();
                for (ELNDiagramPanel elnDiagramPanel : elnDiagramPanels) {
                	ELNPanelTranslator elnPanelTranslator = new ELNPanelTranslator(elnDiagramPanel);
                	ELNSpecification elnSpec = elnPanelTranslator.getELNSpecification();
                	clusters.add(elnSpec.getCluster());
                }
                for (ELNDiagramPanel elnDiagramPanel : elnDiagramPanels) {
                	ELNPanelTranslator elnPanelTranslator = new ELNPanelTranslator(elnDiagramPanel);
                	ELNSpecification elnSpec = elnPanelTranslator.getELNSpecification();

                	// Generating code
                	if (elnSpec == null) {
                		jta.append("Error: No ELN specification\n");
                	} else {
                		System.err.println("**ELN TOPCELL found");

                		TopCellGenerator topCellGenerator = new TopCellGenerator(elnSpec);
                		testGo();
                		jta.append("Generation of TopCell \"" + elnSpec.getCluster().getName() + "\" executable code: done\n");

                		try {
                			jta.append("Saving ELN code in files\n");
                			System.err.println("Saving ELN code in files\n");
                			pathCode = code2.getText();

                			System.err.println("ELN TOPCELL : " + elnSpec.getCluster().getName() + "saved in " + code2.getText());
                			topCellGenerator.saveFile(pathCode);

                			jta.append("Code saved\n");
                		} catch (Exception e) {
                			jta.append("Could not generate files\n");
                			System.err.println("Could not generate ELN files\n");
                			e.printStackTrace();
                		}
                	}
                	testGo();
                }
                try {
        			String makefile;
        			System.err.println(pathCode + "Makefile");
        			FileWriter fw = new FileWriter(pathCode + "/" + "Makefile");
        			makefile = MakefileCode.getMakefileCode(clusters);
        			fw.write(makefile);
        			fw.close();
        		} catch (Exception ex) {
        			ex.printStackTrace();
        		}
                testGo();
            }
//                if (removeCFiles.isSelected()) {
//
//                    jta.append("Removing all .h files\n");
//
//                    list = FileUtils.deleteFiles(code1.getText() + TasksAndMainGenerator.getGeneratedPath(), ".h");
//                    if (list.length() == 0) {
//                        jta.append("No files were deleted\n");
//                    } else {
//                        jta.append("Files deleted:\n" + list + "\n");
//                    }
//                    jta.append("Removing all  .c files\n");
//                    list = FileUtils.deleteFiles(code1.getText() + TasksAndMainGenerator.getGeneratedPath(), ".c");
//                    if (list.length() == 0) {
//                        jta.append("No files were deleted\n");
//                    } else {
//                        jta.append("Files deleted:\n" + list + "\n");
//                    }
//                }

//                if (removeXFiles.isSelected()) {
//                    jta.append("Removing all .x files\n");
//                    list = FileUtils.deleteFiles(code1.getText(), ".x");
//                    if (list.length() == 0) {
//                        jta.append("No files were deleted\n");
//                    } else {
//                        jta.append("Files deleted:\n" + list + "\n");
//                    }
//                }

//                testGo();

//                selectedUnit = units.getSelectedIndex();

                // Generating code
//                if (avspec == null) {
//                    jta.append("Error: No AVATAR specification\n");
//                } else {
//
//                    TasksAndMainGenerator gene = new TasksAndMainGenerator(syscalsspec, avspec);
//                    gene.includeUserCode(putUserCode.isSelected());
//                    gene.setTimeUnit(selectedUnit);
//                    gene.generateSoclib(debugmode.isSelected(), tracemode.isSelected());
//
//                    if (syscalsspec == null) {
//                        jta.append("Error: No AVATAR Deployment specification\n");
//                    } else {
//                        System.err.println("AVATAR TOPCELL found");
//                    }
//
//                    TopCellGenerator topCellGenerator = new TopCellGenerator(syscalsspec, tracemode.isSelected(), avspec);
//                    testGo();
//                    jta.append("Generation of TopCell executable code: done\n");
//
//                    try {
//                        jta.append("Saving code in files\n");
//                        pathCode = code2.getText();
//                        topCellGenerator.saveFile(pathCode);
//
//                        jta.append("Code saved\n");
//                    } catch (Exception e) {
//                        jta.append("Could not generate files\n");
//                    }
//
//                    testGo();
//                    jta.append("Generation of C-SOCLIB executable code: done\n");
//                    try {
//                        jta.append("Saving code in files\n");
//                        pathCode = code1.getText();
//                        gene.saveInFiles(pathCode);
//
//                        jta.append("Code saved\n");
//                    } catch (Exception e) {
//                        jta.append("Could not generate files\n");
//                    }
//                }
//            }

//            testGo();

//            if (jp1.getSelectedIndex() == 1) {
//                cmd = compiler.getText();
//                jta.append("Compiling executable code with command: \n" + cmd + "\n");
//
//                rshc = new RshClient(hostExecute);
//                try {
//                    processCmd(cmd, jta);
//                    jta.append("Compilation done\n");
//                } catch (LauncherException le) {
//                    jta.append("Error: " + le.getMessage() + "\n");
//                    mode = STOPPED;
//                    setButtons();
//                    return;
//                } catch (Exception e) {
//                    mode = STOPPED;
//                    setButtons();
//                    return;
//                }
//            }
//
//            if (jp1.getSelectedIndex() == 2) {
//                try {
//                    cmd = exe4.getText();
//                    jta.append("Executing code with command: \n" + cmd + "\n");
//                    rshc = new RshClient(hostExecute);
//                    processCmd(cmd, jta);
//                    jta.append("Execution done\n");
//                } catch (LauncherException le) {
//                    jta.append("Error: " + le.getMessage() + "\n");
//                    mode = STOPPED;
//                    setButtons();
//                    return;
//                } catch (Exception e) {
//                    mode = STOPPED;
//                    setButtons();
//                    return;
//                }
//            }
//            if ((hasError == false) && (jp1.getSelectedIndex() < 2)) {
//                jp1.setSelectedIndex(jp1.getSelectedIndex() + 1);
//            }
        } catch (InterruptedException ie) {
            jta.append("Interrupted\n");
        }

        jta.append("\n\nReady to process next command\n");

        checkMode();
        setButtons();
    }

    protected void processCmd(String cmd, JTextArea _jta) throws LauncherException {
        rshc.setCmd(cmd);
        rshc.sendExecuteCommandRequest();
        final Writer output = new StringWriter();
        rshc.writeCommandMessages(output);
        _jta.append(output.toString());

        return;
    }

    protected void checkMode() {
        mode = NOT_STARTED;
    }

    protected void setButtons() {
        switch (mode) {
            case NOT_STARTED:
                start.setEnabled(true);
                stop.setEnabled(false);
                close.setEnabled(true);
                getGlassPane().setVisible(false);
                break;
            case STARTED:
                start.setEnabled(false);
                stop.setEnabled(true);
                close.setEnabled(false);
                getGlassPane().setVisible(true);
                break;
            case STOPPED:
            default:
                start.setEnabled(false);
                stop.setEnabled(false);
                close.setEnabled(true);
                getGlassPane().setVisible(false);
                break;
        }
    }

    public boolean hasToContinue() {
        return (go == true);
    }

    public void appendOut(String s) {
        jta.append(s);
    }


    public void setError() {
//        hasError = true;
    }

//    public void showSimulationTrace() {
//        JFrameSimulationSDPanel jfssdp = new JFrameSimulationSDPanel(f, mgui, "Simulation trace of " + simulationTraceFile.getText());
//        jfssdp.setIconImage(IconManager.img8);
//        GraphicLib.centerOnParent(jfssdp, 600, 600);
//        if (selectedViewTrace == 0) {
//            jfssdp.setFileReference(simulationTraceFile.getText());
//        } else {
//            jfssdp.setFileReference(simulationsoclibTraceFile.getText());
//        }
//        jfssdp.setVisible(true);
//        TraceManager.addDev("Ok JFrame");
//    }

//    public void showOverflowStatus() {
//        try {
//            String path = ConfigurationTTool.AVATARMPSoCPerformanceEvaluationDirectory;
//            String taille = "0";
//
//            String log = "mwmr0.log";
//
//            String[] commande = {"sh", path + "callingOverflow.sh", taille, path, log};
//
//            ProcessBuilder pb = new ProcessBuilder(commande);
//            pb.redirectError(ProcessBuilder.Redirect.INHERIT);
//            Process p = pb.start();
//
//            int exitStatus = p.waitFor();
//
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}