diff --git a/src/ui/window/JDialogAvatarddExecutableCodeGeneration.java b/src/ui/window/JDialogAvatarddExecutableCodeGeneration.java index 011750e76725dfa013d49bd64254555ef4c3d41d..807a3769472208c7c275b6752ba3f9cc411be752 100755 --- a/src/ui/window/JDialogAvatarddExecutableCodeGeneration.java +++ b/src/ui/window/JDialogAvatarddExecutableCodeGeneration.java @@ -1,471 +1,938 @@ -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.*; - -import ddtranslatorSoclib.toSoclib.*; -import ddtranslatorSoclib.toTopCell.*; -import ddtranslatorSoclib.*; -import ui.avatardd.*; -import ui.avatarbd.*; - -// ----------------------------------------------------- - - -public class JDialogAvatarddExecutableCodeGeneration 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 Soclib :"; - private String textSysC2 = "Compile executable code in"; - private String textSysC10 = "Base directory of code generation code TopCell"; - private String textSysC3 = "Base directory of code generation code TopCell :"; - 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"; - - //modif DG - private static String[] codes = {"AVATAR TOPCELL", "AVATAR TOPCELL, TASKS AND MAIN"}; - 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 String pathCodeTopCell; - protected static String pathCodeSocLib; - - 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 JComboBox versionCodeGenerator, units; - protected JButton showSimulationTrace; - - private static int selectedUnit = 2; - private static boolean removeCFilesValue = true; - private static boolean removeXFilesValue = true; - private static boolean removeCCFilesValue = 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; - - private RshClient rshc; - - - /** Creates new form */ - public JDialogAvatarddExecutableCodeGeneration(Frame _f, MainGUI _mgui, String title, String _hostExecute, String _pathCodeSocLib , String _pathCodeTopCell, String _pathCompilerSoclib, String _pathSoclibTraceFile) { - super(title); - - f = _f; - mgui = _mgui; - - if (pathCodeSocLib == null) { - pathCodeSocLib = _pathCodeSocLib; - } - - if (pathSoclibTraceFile == null){ - pathSoclibTraceFile = _pathSoclibTraceFile; - } - - if (pathCodeTopCell == null){ - pathCodeTopCell = _pathCodeTopCell; - } - - hostExecute = _hostExecute; - - - initComponents(); - myInitComponents(); - pack(); - - //getGlassPane().addMouseListener( new MouseAdapter() {}); - getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - } - - protected void myInitComponents() { - mode = NOT_STARTED; - setButtons(); - } - - 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")); - - 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(pathCodeSocLib, 100); - jp01.add(code1, c01); - - // ----------------------------------------------- - // path code for TopCell - - gen = new JLabel(textSysC10); - //genJava.addActionListener(this); - jp01.add(gen, c01); - - code2 = new JTextField(pathCodeTopCell, 100); - jp01.add(code2, c01); - - // --------------------------------------------- - - jp01.add(new JLabel(" "), c01); - c01.gridwidth = GridBagConstraints.REMAINDER; //end row - - jp01.add(new JLabel("Code generator used:"), c01); - - versionCodeGenerator = new JComboBox(codes); - versionCodeGenerator.setSelectedIndex(selectedItem); - versionCodeGenerator.addActionListener(this); - jp01.add(versionCodeGenerator, c01); - - jp01.add(new JLabel(" "), c01); - jp1.add("Generate code and topcell", jp01); - - 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"); - - 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() == exe) || (evt.getSource() == exetrace)|| (evt.getSource() == exesoclib)) { - makeSelectionExecute(); - } - } - - 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 closeDialog() { - if (mode == STARTED) { - stopProcess(); - } - dispose(); - } - - - public void stopProcess() { - System.err.println("stop process ! "); - 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 { - selectedItem = versionCodeGenerator.getSelectedIndex(); - if (selectedItem == 0) { - System.err.println("AVATAR "); - // Code generation - if (jp1.getSelectedIndex() == 0) { - jta.append("Generating TopCell \n"); - - System.err.println("AVATAR TOPCELL"); - - testGo(); - selectedUnit = 1;//DG 29.10. - //selectedUnit = units.getSelectedIndex(); - - ADDDiagramPanel deploymentDiagramPanel = mgui.getFirstAvatarDeploymentPanelFound(); - AvatarDeploymentPanelTranslator avdeploymenttranslator = new AvatarDeploymentPanelTranslator(deploymentDiagramPanel); - AvatarddSpecification avddspec = avdeploymenttranslator.getAvatarddSpecification(); - - // Generating code - if ( avddspec == null) { - jta.append("Error: No AVATAR Deployemnt specification\n"); - } else { - System.err.println("AVATAR TOPCELL found"); - - TopCellGenerator topCellGenerator = new TopCellGenerator(avddspec); - 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(); - // generation code Soclib --------------------------------------- - - - // generation Soclib / TopCell - - if (selectedItem == 1) { - jta.append("Generating executable code (SOCLIB version)\n"); - - //testGo(); - selectedUnit = 1;//DG 29.10. - //selectedUnit = units.getSelectedIndex(); - //System.out.println("Selected item=" + selectedItem); - - // get Design Panel - AvatarDesignPanel designDiagramPanel = mgui.getFirstAvatarDesignPanelFound(); - AvatarDesignPanelTranslator avdesigntranslator = new AvatarDesignPanelTranslator( designDiagramPanel); - LinkedList<AvatarBDBlock> adp = designDiagramPanel.getAvatarBDPanel().getFullBlockList(); - Vector blocks = new Vector(adp); - AvatarSpecification avaspec = avdesigntranslator.generateAvatarSpecification(blocks); - - // get Deployment Panel - ADDDiagramPanel deploymentDiagramPanel = mgui.getFirstAvatarDeploymentPanelFound(); - AvatarDeploymentPanelTranslator avdeploymenttranslator = new AvatarDeploymentPanelTranslator(deploymentDiagramPanel); - AvatarddSpecification avddspec = avdeploymenttranslator.getAvatarddSpecification(); - - - // Generating code - if (avaspec == null) { - jta.append("Error: No AVATAR Design specification\n"); - }else if( avddspec == null){ - jta.append("Error: No AVATAR Deployment specification\n"); - } else { - - // julien ----------------------------------------- - - TopCellGenerator topCellGenerator = new TopCellGenerator(avddspec); - - TasksAndMainGenerator gene = new TasksAndMainGenerator(avddspec,avaspec); - // gene.includeUserCode(putUserCode.isSelected()); - // gene.setTimeUnit(selectedUnit); - // gene. generateSoclib(debugmode.isSelected(), tracemode.isSelected()); - // -------------------------------------------------- - //testGo(); - jta.append("Generation of Soclib executable code: done\n"); - - try { - jta.append("Saving code in files\n"); - pathCode = code2.getText(); - gene.saveInFiles(pathCode); - pathCode = code2.getText(); - topCellGenerator.saveFile(pathCode); - //tml2systc.saveFile(pathCode, "appmodel"); - jta.append("Code saved\n"); - } catch (Exception e) { - jta.append("Could not generate files\n"); - } - } - } - }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.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; - } - -} \ No newline at end of file +/**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 + * @author (added deployment diagrams) Julien Henon, Daniela GENIUS + * @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.*; +import ddtranslatorSoclib.toSoclib.*; +import ddtranslatorSoclib.toTopCell.*; +import ddtranslatorSoclib.*; +import ui.avatardd.*; + +public class JDialogAvatarddExecutableCodeGeneration 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:"; + 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"; + + //modif DG + //private static String[] codes = {"AVATAR CPOSIX", "AVATAR SOCLIB"}; + private static String[] codes = {"AVATAR SOCLIB"}; + 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 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, 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 JDialogAvatarddExecutableCodeGeneration(Frame _f, MainGUI _mgui, String title, +String _hostExecute, +String _pathCode, +String _pathCompileMPSoC, +String _pathExecuteMPSoC) { + + 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().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(pathCompileMPSoC, 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(pathCompileMPSoC, 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(pathExecuteMPSoC, 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(pathExecuteMPSoC + " " + 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(pathExecuteMPSoC, 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 { + selectedItem = versionCodeGenerator.getSelectedIndex(); + if (selectedItem == 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(); + + selectedUnit = units.getSelectedIndex(); + //System.out.println("Selected item=" + selectedItem); + 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(); + //gene.avatartocposix.saveInFiles(pathCode);//DG 27.11. + 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); + } + } + + //ajoute DG + if (selectedItem == 1) { + // Code generation + if (jp1.getSelectedIndex() == 0) { + jta.append("Generating executable code (SOCLIB version)\n"); + + if (removeCFiles.isSelected()) { + + jta.append("Removing all .h files\n"); + //list = FileUtils.deleteFiles(code1.getText() + AVATAR2SOCLIB.getGeneratedPath(), ".h"); + 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"); + //list = FileUtils.deleteFiles(code1.getText() + AVATAR2SOCLIB.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(); + //System.out.println("Selected item=" + selectedItem); + AvatarSpecification avspec = mgui.gtm.getAvatarSpecification(); + + // Generating code + if (avspec == null) { + jta.append("Error: No AVATAR specification\n"); + } else { + /* AVATAR2SOCLIB avatartocposix = new AVATAR2SOCLIB(avspec); + avatartocposix.includeUserCode(putUserCode.isSelected()); + avatartocposix.setTimeUnit(selectedUnit); + avatartocposix.generateCPOSIX(debugmode.isSelected(), tracemode.isSelected());*/ + // julien ----------------------------------------- + ADDDiagramPanel deploymentDiagramPanel = mgui.getFirstAvatarDeploymentPanelFound(); + AvatarDeploymentPanelTranslator avdeploymenttranslator = new AvatarDeploymentPanelTranslator(deploymentDiagramPanel); + AvatarddSpecification avddspec = avdeploymenttranslator.getAvatarddSpecification(); + + TasksAndMainGenerator gene = new TasksAndMainGenerator(avddspec,avspec); + gene.includeUserCode(putUserCode.isSelected()); + gene.setTimeUnit(selectedUnit); + gene.generateSoclib(debugmode.isSelected(), tracemode.isSelected()); + + //DG 5.2. + TopCellGenerator topCellGenerator = new TopCellGenerator(avddspec); + 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"); + } + //end DG + + // ----------end addition julien ---------------------------------------- + + testGo(); + jta.append("Generation of C-SOCLIB executable code: done\n"); + //t2j.printJavaClasses(); + try { + jta.append("Saving code in files\n"); + pathCode = code1.getText(); + gene.saveInFiles(pathCode);//DG 27.11. +//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); + } + } + + //fin ajoute DG + + + } 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"); + } + + +}