/**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.
*
* /**
* Class JDialogAvatarExecutableCodeGeneration
* Dialog for managing the generation and compilation of AVATAR executable code
* Creation: 29/03/2011
* @version 1.1 29/03/2011
* @author Ludovic APVRILLE
* @see
*/

package ui.window;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.util.*;

import myutil.*;
import ui.*;


import avatartranslator.*;
import avatartranslator.toexecutable.*;
import launcher.*;

import ui.interactivesimulation.*;


public class JDialogAvatarExecutableCodeGeneration extends javax.swing.JFrame implements ActionListener, Runnable, MasterProcessInterface  {
    
	private static String[] unitTab = {"usec", "msec", "sec"}; 
	
    protected Frame f;
    protected MainGUI mgui;
    
    private String textSysC1 = "Base directory of code generation code:";
    private String textSysC2 = "Compile executable code in";
	private String textSysC3 = "Compile soclib executable with";
    //private String textSysC3 = "with";
    private String textSysC4 = "Run code:";
	private String textSysC5 = "Run code and trace events (if enabled at code generation):";
	private String textSysC6 = "Run code in soclib / mutekh:";
	private String textSysC8 = "Show trace from file:";
	private String textSysC9 = "Show trace from soclib file:";
    
    private static String unitCycle = "1";
	
	private static String[] codes = {"AVATAR CPOSIX"};
	private static int selectedItem = 0;
	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 pathCompiler;
    protected static String pathExecute;
	protected static String pathExecuteWithTracing;
	protected static String pathCompileSoclib;
	protected static String pathExecuteSoclib;
	protected static String pathSoclibTraceFile;
	
	
	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, compiler1, compiler2, exe1, exe2, exe3, exe4, exe2int, simulationTraceFile, simulationsoclibTraceFile;
    protected JTabbedPane jp1;
    protected JScrollPane jsp;
    protected JCheckBox removeCFiles, removeXFiles, debugmode, tracemode, optimizemode, putUserCode;
	protected JComboBox versionCodeGenerator, units;
    protected JButton showSimulationTrace;
	
	private static int selectedUnit = 2;
	private static boolean removeCFilesValue = true;
	private static boolean removeXFilesValue = true;
	private static boolean debugValue = false;
	private static boolean tracingValue = true;
	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;
    
    
    /** Creates new form  */
    public JDialogAvatarExecutableCodeGeneration(Frame _f, MainGUI _mgui, String title, String _hostExecute, String _pathCode, String _pathCompiler, String _pathExecute, String _pathCompilerSoclib, String _pathExecuteSoclib, String _pathSoclibTraceFile) {
        super(title);
        
        f = _f;
        mgui = _mgui;
        
        if (pathCode == null) {
            pathCode = _pathCode;
        }
        
        if (pathCompiler == null)
            pathCompiler = _pathCompiler;
        
        if (pathExecute == null)
            pathExecute = _pathExecute;
        
		if (pathCompileSoclib == null) {
			pathCompileSoclib = _pathCompilerSoclib;
		}
		
		if (pathExecuteSoclib == null) {
			pathExecuteSoclib = _pathExecuteSoclib;
		}
		
		if (pathSoclibTraceFile == null){
			pathSoclibTraceFile = _pathSoclibTraceFile;
		}
		
        hostExecute = _hostExecute;
        
		
        initComponents();
        myInitComponents();
        pack();
        
        //getGlassPane().addMouseListener( new MouseAdapter() {});
        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());
        //setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        
        jp1 = 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);
        //genJava.addActionListener(this);
        jp01.add(gen, c01);
        
        code1 = new JTextField(pathCode, 100);
        jp01.add(code1, 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(unitTab);
		units.setSelectedIndex(selectedUnit);
		units.addActionListener(this);
		jp01.add(units, c01);
		
		jp01.add(new JLabel("Code generator used:"), c01);
		
		versionCodeGenerator = new JComboBox(codes);
		versionCodeGenerator.setSelectedIndex(selectedItem);
		versionCodeGenerator.addActionListener(this);
		jp01.add(versionCodeGenerator, c01);
		//System.out.println("selectedItem=" + selectedItem);
		
		//devmode = new JCheckBox("Development version of the simulator");
        //devmode.setSelected(true);
        //jp01.add(devmode, 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();
        
        compile = new JRadioButton(textSysC2, false);
        jp02.add(compile, c02);
		compile.addActionListener(this);
        compilegroup.add(compile);
        //code2 = new JTextField(pathCode, 100);
        //jp02.add(code2, c02);
        
        //jp02.add(new JLabel("with"), c02);
        
        compiler1 = new JTextField(pathCompiler, 100);
        jp02.add(compiler1, c02);
        
        jp02.add(new JLabel(" "), c02);
		
		
		compilesoclib = new JRadioButton(textSysC3, false);
		compilesoclib.addActionListener(this);
        jp02.add(compilesoclib, c02);
        compilegroup.add(compilesoclib);
        compiler2 = new JTextField(pathCompileSoclib, 100);
        jp02.add(compiler2, 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();
        exe = new JRadioButton(textSysC4, false);
		exe.addActionListener(this);
		exegroup.add(exe);
        jp03.add(exe, c03);
        exe2 = new JTextField(pathExecute, 100);
        jp03.add(exe2, c03);
		exegroup.add(exe);
		
		exetrace = new JRadioButton(textSysC5, false);
		exetrace.addActionListener(this);
		exegroup.add(exetrace);
		jp03.add(exetrace, c03);
		exe3 = new JTextField(pathExecute +  " " + pathCode + File.separator + "trace.txt", 100);
        jp03.add(exe3, c03);
		
		exesoclib = new JRadioButton(textSysC6, false);
		exesoclib.addActionListener(this);
		exegroup.add(exesoclib);
		jp03.add(exesoclib, c03);
		exe4 = new JTextField(pathExecuteSoclib, 100);
        jp03.add(exe4, c03);
		
		exe.setSelected(selectedRun == 0);
		exetrace.setSelected(selectedRun == 1);
		exesoclib.setSelected(selectedRun == 2);
		
		/*exeint = new JRadioButton(textSysC5, true);
		exeint.addActionListener(this);
		exegroup.add(exeint);
        //exeJava.addActionListener(this);
        jp03.add(exeint, c03);
        
        exe2int = new JTextField(pathInteractiveExecute, 100);
        jp03.add(exe2int, c02);*/
        
        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(textSysC8, false);
		viewgroup.add(viewtrace);
		viewtrace.addActionListener(this);
		 jp04.add(viewtrace, c04);
        simulationTraceFile = new JTextField(pathCode + File.separator + "trace.txt", 100);
        jp04.add(simulationTraceFile, c04);
		viewtracesoclib = new JRadioButton(textSysC9, 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);
        
		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 / compilation / execution\n");
        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)) {
			makeSelectionExecute();
		} else if ((evt.getSource() == compile) || (evt.getSource() == compilesoclib)) {
			makeSelectionCompile();
		} else if ((evt.getSource() == viewtrace) || (evt.getSource() == viewtracesoclib)) {
			makeSelectionViewTrace();
		} 
    }
    
    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 (exe.isSelected()) {
				selectedRun = 0;
			} else {
				if (exetrace.isSelected()) {
					selectedRun = 1;
				} else {
					selectedRun = 2;
				}
			}
			
			exe2.setEnabled(selectedRun == 0);
			exe3.setEnabled(selectedRun == 1);
			exe4.setEnabled(selectedRun == 2);
			
	}
	
	public void makeSelectionCompile() {
			if (compile.isSelected()) {
				selectedCompile = 0;
			} else {
				selectedCompile = 1;
			}
			
			//code2.setEnabled(selectedCompile == 0);
			compiler1.setEnabled(selectedCompile == 0);
			compiler2.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.stopFillJTA();
			} 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;
        int cycle = 0;
        
        hasError = false;
        
        try {
            if (versionCodeGenerator.getSelectedIndex() == 0) {
				// Code generation
				if (jp1.getSelectedIndex() == 0) {
					jta.append("Generating executable code (C-POSIX version)\n");
					
					if (removeCFiles.isSelected()) {
						jta.append("Removing all .h files\n");
						list = FileUtils.deleteFiles(code1.getText() +  AVATAR2CPOSIX.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() +  AVATAR2CPOSIX.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();
					
					selectedItem = versionCodeGenerator.getSelectedIndex();
					selectedUnit = units.getSelectedIndex();
					//System.out.println("Selected item=" + selectedItem);
					if (selectedItem == 0) {
						AvatarSpecification avspec = mgui.gtm.getAvatarSpecification();
						
						// Generating code
						if (avspec == null) {
							jta.append("Error: No AVATAR specification\n");
						} else {
							AVATAR2CPOSIX avatartocposix = new AVATAR2CPOSIX(avspec);
							avatartocposix.includeUserCode(putUserCode.isSelected());
							avatartocposix.setTimeUnit(selectedUnit);
							avatartocposix.generateCPOSIX(debugmode.isSelected(), tracemode.isSelected());
							testGo();
							jta.append("Generation of C-POSIX executable code: done\n");
							//t2j.printJavaClasses();
							try {
								jta.append("Saving code in files\n");
								pathCode = code1.getText();
								avatartocposix.saveInFiles(pathCode);
								//tml2systc.saveFile(pathCode, "appmodel");
								jta.append("Code saved\n");
							} catch (Exception e) {
								jta.append("Could not generate files\n");
							}
						}
					}
					
					
				}
				
				testGo();
				
				
				// Compilation
				if (jp1.getSelectedIndex() == 1) {
					
					if (selectedCompile == 0) {
					cmd = compiler1.getText();
					} else {
						cmd = compiler2.getText();
					}
					
					jta.append("Compiling executable code with command: \n" + cmd + "\n");
					
					rshc = new RshClient(hostExecute);
					// Assuma data are on the remote host
					// Command
					try {
						processCmd(cmd, jta);
						//data = processCmd(cmd);
						//jta.append(data);
						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 {
						if (selectedRun == 0) {
							cmd = exe2.getText();
						} else {
							if (selectedRun == 1) {
								cmd = exe3.getText();
							} else {
								cmd = exe4.getText();
							}
						}
						
						jta.append("Executing code with command: \n" + cmd + "\n");
						
						rshc = new RshClient(hostExecute);
						// Assume data are on the remote host
						// Command
						
						processCmd(cmd, jta);
						//jta.append(data);
						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();
		
		//System.out.println("Selected item=" + selectedItem);
    }
    
    protected void processCmd(String cmd, JTextArea _jta) throws LauncherException {
        rshc.setCmd(cmd);
        rshc.sendProcessRequest();
        rshc.fillJTA(_jta);
        return;
    }
    
    protected void checkMode() {
        mode = NOT_STARTED;
    }
    
    protected void setButtons() {
        switch(mode) {
		case NOT_STARTED:
			start.setEnabled(true);
			stop.setEnabled(false);
			close.setEnabled(true);
			//setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
			getGlassPane().setVisible(false);
			break;
		case STARTED:
			start.setEnabled(false);
			stop.setEnabled(true);
			close.setEnabled(false);
			getGlassPane().setVisible(true);
			//setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
			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);
        jfssdp.setSize(600, 600);
        GraphicLib.centerOnParent(jfssdp);
		if (selectedViewTrace == 0) {
        jfssdp.setFileReference(simulationTraceFile.getText());
		} else {
			  jfssdp.setFileReference(simulationsoclibTraceFile.getText());
		}
        jfssdp.setVisible(true);
        TraceManager.addDev("Ok JFrame");
    }
	
	
}