/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille, Andrea Enrici * * ludovic.apvrille AT telecom-paristech.fr * andrea.enrici AT telecom-paristech.f * * 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 JDialogSystemCGeneration * Dialog for managing the generation and compilation of SystemC code * Creation: 01/12/2005 * @version 1.2 02/06/2014 * @author Ludovic APVRILLE, Andrea ENRICI * @see */ package ui.window; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Vector; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import launcher.LauncherException; import launcher.RshClient; import myutil.FileUtils; import myutil.GraphicLib; import myutil.MasterProcessInterface; import myutil.ScrolledJTextArea; import myutil.TraceManager; //import ui.ebrdd.*; import req.ebrdd.EBRDD; import tepe.TEPE; import ui.AvatarRequirementPanelTranslator; import ui.IconManager; import ui.MainGUI; import ui.avatarpd.AvatarPDPanel; public class JDialogSystemCGeneration extends javax.swing.JDialog implements ActionListener, Runnable, MasterProcessInterface, ListSelectionListener { protected MainGUI mgui; private static String textSysC1 = "Generate SystemC code in"; private static String textSysC2 = "Compile SystemC code in"; //private String textSysC3 = "with"; private static String textSysC4 = "Run simulation to completion:"; private static String textSysC5 = "Run interactive simulation:"; private static String textSysC6 = "Run formal verification:"; private static String unitCycle = "1"; /*private static String[] simus = { "SystemC Simulator - LabSoC version", "C++ Simulator - LabSoc version" };*/ private static String[] simus = { "C++ Simulator - LabSoc version" }; private static int selectedItem = 0; protected static String pathCode; protected static String pathCompiler; protected static String pathExecute; protected static String pathInteractiveExecute; protected static String pathFormalExecute; protected static boolean interactiveSimulationSelected = true; protected static boolean optimizeModeSelected = true; protected final static int NOT_STARTED = 1; protected final static int STARTED = 2; protected final static int STOPPED = 3; protected final static int ERROR=4; int mode; //components protected JTextArea jta; protected JButton start; protected JButton stop; protected JButton close; protected JRadioButton exe, exeint, exeformal; protected ButtonGroup exegroup; protected JLabel gen, comp; protected JTextField code1, code2, unitcycle, compiler1, exe1, exe2, exe3, exe2int, exe2formal; protected JTabbedPane jp1; protected JScrollPane jsp; protected JCheckBox removeCppFiles, removeXFiles, debugmode, optimizemode; protected JComboBox versionSimulator; //EBRDD /*private static Vector validated, ignored; private Vector val, ign; private JList listIgnored; private JList listValidated; private JButton allValidated; private JButton addOneValidated; private JButton addOneIgnored; private JButton allIgnored; private JPanel panele1, panele2, panele3, panele4, panel5, panel6;*/ //TEPED private static Vector validatedTepe, ignoredTepe; private Vector valTepe, ignTepe; private JList listIgnoredTepe; private JList listValidatedTepe; private JButton allValidatedTepe; private JButton addOneValidatedTepe; private JButton addOneIgnoredTepe; private JButton allIgnoredTepe; private JPanel panele1Tepe, panele2Tepe, panele3Tepe, panele4Tepe, panel5Tepe, panel6Tepe; private Thread t; private boolean go = false; //private ProcessThread pt; private boolean hasError = false; protected boolean startProcess = false; //private TURTLE2Java t2j; private String hostSystemC; protected RshClient rshc; // Automatic modes public final static int MANUAL = 0; public final static int ONE_TRACE = 1; public final static int ANIMATION = 2; public final static int FORMAL_VERIFICATION = 3; private int automatic; private boolean wasClosed = false; /** Creates new form */ public JDialogSystemCGeneration(Frame f, MainGUI _mgui, String title, String _hostSystemC, String _pathCode, String _pathCompiler, String _pathExecute, String _pathInteractiveExecute, String _graphPath, int _automatic) { super(f, title, true); mgui = _mgui; if (pathCode == null) { pathCode = _pathCode; } if (pathCompiler == null) pathCompiler = _pathCompiler; if (pathExecute == null) pathExecute = _pathExecute; if (pathInteractiveExecute == null) { if (_graphPath != null) { _pathInteractiveExecute += " -gpath " + _graphPath; } pathInteractiveExecute = _pathInteractiveExecute; } if (pathFormalExecute == null) { pathFormalExecute = pathInteractiveExecute; int index = pathFormalExecute.indexOf("-server"); if (index != -1) { pathFormalExecute = pathFormalExecute.substring(0, index) + pathFormalExecute.substring(index+7, pathFormalExecute.length()); pathFormalExecute += " -explo"; } } hostSystemC = _hostSystemC; automatic = _automatic; makeLists(); initComponents(); myInitComponents(); pack(); //getGlassPane().addMouseListener( new MouseAdapter() {}); getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); if (automatic > 0) { startProcess(); } } protected void makeLists() { if (validatedTepe == null) { validatedTepe = new Vector(); } if (ignoredTepe == null) { ignoredTepe = new Vector(); } valTepe = new Vector(); ignTepe = new Vector(); ArrayList<AvatarPDPanel> al = mgui.getAllAvatarPDPanels(); for(AvatarPDPanel panel: al) { if(validatedTepe.contains(panel)) { valTepe.add(panel); } else { ignTepe.add(panel); } } } protected void myInitComponents() { mode = NOT_STARTED; setButtons(); setList(); updateInteractiveSimulation(); } 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")); 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 c01.gridwidth = GridBagConstraints.REMAINDER; //end row jp01.add(new JLabel("1 time unit = "), c01); unitcycle = new JTextField(unitCycle, 10); jp01.add(unitcycle, c01); jp01.add(new JLabel("cycle"), c01); removeCppFiles = new JCheckBox("Remove old .h / .cpp files"); removeCppFiles.setSelected(true); jp01.add(removeCppFiles, c01); removeXFiles = new JCheckBox("Remove old .x files"); removeXFiles.setSelected(true); jp01.add(removeXFiles, c01); debugmode = new JCheckBox("Put debug information in code"); debugmode.setSelected(false); jp01.add(debugmode, c01); optimizemode = new JCheckBox("Optimize code"); optimizemode.setSelected(optimizeModeSelected); jp01.add(optimizemode, c01); jp01.add(new JLabel("Simulator used:"), c01); versionSimulator = new JComboBox(simus); versionSimulator.setSelectedIndex(selectedItem); versionSimulator.addActionListener(this); jp01.add(versionSimulator, 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); //EBRDDs panele1Tepe = new JPanel(); panele1Tepe.setLayout(new BorderLayout()); panele1Tepe.setBorder(new javax.swing.border.TitledBorder("Ignored TEPE Diagrams")); listIgnoredTepe = new JList(ignTepe); //listIgnored.setPreferredSize(new Dimension(200, 250)); listIgnoredTepe.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION ); listIgnoredTepe.addListSelectionListener(this); JScrollPane scrollPane1 = new JScrollPane(listIgnoredTepe); panele1Tepe.add(scrollPane1, BorderLayout.CENTER); panele1Tepe.setPreferredSize(new Dimension(200, 250)); // validated list panele2Tepe = new JPanel(); panele2Tepe.setLayout(new BorderLayout()); panele2Tepe.setBorder(new javax.swing.border.TitledBorder("TEPE Diagrams taken into account")); listValidatedTepe = new JList(valTepe); //listValidated.setPreferredSize(new Dimension(200, 250)); listValidatedTepe.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION ); listValidatedTepe.addListSelectionListener(this); JScrollPane scrollPane2 = new JScrollPane(listValidatedTepe); panele2Tepe.add(scrollPane2, BorderLayout.CENTER); panele2Tepe.setPreferredSize(new Dimension(200, 250)); // central buttons panele3Tepe = new JPanel(); GridBagLayout gridbage1 = new GridBagLayout(); GridBagConstraints ce1 = new GridBagConstraints(); panele3Tepe.setLayout(gridbage1); ce1.weighty = 1.0; ce1.weightx = 1.0; ce1.gridwidth = GridBagConstraints.REMAINDER; //end row ce1.fill = GridBagConstraints.HORIZONTAL; ce1.gridheight = 1; allValidatedTepe = new JButton(IconManager.imgic50); allValidatedTepe.setPreferredSize(new Dimension(50, 25)); allValidatedTepe.addActionListener(this); allValidatedTepe.setActionCommand("allValidatedTepe"); panele3Tepe.add(allValidatedTepe, ce1); addOneValidatedTepe = new JButton(IconManager.imgic48); addOneValidatedTepe.setPreferredSize(new Dimension(50, 25)); addOneValidatedTepe.addActionListener(this); addOneValidatedTepe.setActionCommand("addOneValidatedTepe"); panele3Tepe.add(addOneValidatedTepe, ce1); panele3Tepe.add(new JLabel(" "), ce1); addOneIgnoredTepe = new JButton(IconManager.imgic46); addOneIgnoredTepe.addActionListener(this); addOneIgnoredTepe.setPreferredSize(new Dimension(50, 25)); addOneIgnoredTepe.setActionCommand("addOneIgnoredTepe"); panele3Tepe.add(addOneIgnoredTepe, ce1); allIgnoredTepe = new JButton(IconManager.imgic44); allIgnoredTepe.addActionListener(this); allIgnoredTepe.setPreferredSize(new Dimension(50, 25)); allIgnoredTepe.setActionCommand("allIgnoredTepe"); panele3Tepe.add(allIgnoredTepe, ce1); panele4Tepe = new JPanel(); panele4Tepe.setLayout(new BorderLayout()); panele4Tepe.add(panele1Tepe, BorderLayout.WEST); panele4Tepe.add(panele2Tepe, BorderLayout.EAST); panele4Tepe.add(panele3Tepe, BorderLayout.CENTER); jp01.add(panele4Tepe, c01); if (automatic > 0) { //GraphicLib.enableComponents(jp01, false); } jp1.add("Generate code", jp01); // Panel 02 c02.gridheight = 1; c02.weighty = 1.0; c02.weightx = 1.0; c02.gridwidth = GridBagConstraints.REMAINDER; //end row c02.fill = GridBagConstraints.BOTH; c02.gridheight = 1; comp = new JLabel(textSysC2); //compJava.addActionListener(this); jp02.add(comp, c02); 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); jp1.add("Compile", jp02); // Panel 03 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); //exeJava.addActionListener(this); jp03.add(exe, c03); exe2 = new JTextField(pathExecute, 100); jp03.add(exe2, c02); 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); exeformal = new JRadioButton(textSysC6, true); exeformal.addActionListener(this); exegroup.add(exeformal); jp03.add(exeformal, c03); exe2formal = new JTextField(pathFormalExecute, 100); jp03.add(exe2formal, c02); jp03.add(new JLabel(" "), c03); jp1.add("Execute", jp03); c.add(jp1, BorderLayout.NORTH); if (automatic > 0) { //GraphicLib.enableComponents(jp03, false); GraphicLib.enableComponents(jp1, false); } jta = new ScrolledJTextArea(); jta.setEditable(false); jta.setMargin(new Insets(10, 10, 10, 10)); jta.setTabSize(3); if (automatic == 0) { jta.append("Select options and then, click on 'start' to launch SystemC code generation / compilation\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); start.setPreferredSize(new Dimension(100, 30)); stop.setPreferredSize(new Dimension(100, 30)); start.addActionListener(this); stop.addActionListener(this); close = new JButton("Close", IconManager.imgic27); close.setPreferredSize(new Dimension(100, 30)); close.addActionListener(this); JPanel jp2 = new JPanel(); if (automatic == 0) { jp2.add(start); jp2.add(stop); } jp2.add(close); c.add(jp2, BorderLayout.SOUTH); } public void updateInteractiveSimulation() { if (automatic == 0) { exe2.setEnabled(exe.isSelected()); exe2int.setEnabled(exeint.isSelected()); exe2formal.setEnabled(exeformal.isSelected()); } } public void actionPerformed(ActionEvent evt) { String command = evt.getActionCommand(); //System.out.println("Actions"); // Compare the action command to the known actions. updateInteractiveSimulation(); if (command.equals("Start")) { startProcess(); } else if (command.equals("Stop")) { stopProcess(); } else if (command.equals("Close")) { closeDialog(); } else if (command.equals("addOneIgnoredTepe")) { addOneIgnoredTepe(); } else if (command.equals("addOneValidatedTepe")) { addOneValidatedTepe(); } else if (command.equals("allValidatedTepe")) { allValidatedTepe(); } else if (command.equals("allIgnoredTepe")) { allIgnoredTepe(); } else if (evt.getSource() == versionSimulator) { selectedItem = versionSimulator.getSelectedIndex(); } } public void closeDialog() { if (mode == STARTED) { stopProcess(); } updateStaticList(); optimizeModeSelected = optimizemode.isSelected(); wasClosed = true; dispose(); } public boolean wasClosed() { return wasClosed; } public void stopProcess() { try { rshc.stopFillJTA(); } catch (LauncherException le) { } rshc = null; mode = STOPPED; setButtons(); go = false; } public void startProcess() { if (automatic > 0) { startProcess = false; t = new Thread(this); mode = STARTED; go = true; t.start(); } else { /*if ((interactiveSimulationSelected) && (jp1.getSelectedIndex() == 2)) { startProcess = true; dispose(); } else {*/ 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 data; hasError = false; try { if (automatic > 0) { generateCode(); testGo(); compileCode(); testGo(); executeSimulation(); } else { // Code generation if (jp1.getSelectedIndex() == 0) { generateCode(); } testGo(); // Compilation if (jp1.getSelectedIndex() == 1) { compileCode(); } if (jp1.getSelectedIndex() == 2) { executeSimulation(); } 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); } private void generateCode() throws InterruptedException { String list; // int cycle = 0; jta.append("Generating SystemC code\n"); if (removeCppFiles.isSelected()) { jta.append("Removing all old h files\n"); list = FileUtils.deleteFiles(code1.getText(), ".h"); if (list.length() == 0) { jta.append("No files were deleted\n"); } else { jta.append("Files deleted:\n" + list + "\n"); } jta.append("Removing all old cpp files\n"); list = FileUtils.deleteFiles(code1.getText(), ".cpp"); 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 old 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(); try { unitCycle = unitcycle.getText(); // cycle = Integer.valueOf(unitCycle).intValue(); } catch (Exception e) { jta.append("Wrong number of cycles: " + unitcycle.getText()); jta.append("Aborting"); jta.append("\n\nReady to process next command\n"); checkMode(); setButtons(); return; } /*TML2SystemC tml2systc = new TML2SystemC(mgui.gtm.getTMLModeling()); tml2systc.generateSystemC(debugmode.isSelected()); testGo(); jta.append("SystemC code generation done\n"); //t2j.printJavaClasses(); try { jta.append("Generating SystemC file\n"); pathCode = code1.getText(); tml2systc.saveFile(pathCode, "appmodel"); jta.append("SystemC file generated\n"); } catch (Exception e) { jta.append("Could not generate SystemC file\n"); }*/ selectedItem = versionSimulator.getSelectedIndex(); //System.out.println("Selected item=" + selectedItem); switch( selectedItem ) { //Old SystemC generator /*case 0: { tmltranslator.tomappingsystemc.TML2MappingSystemC tml2systc; if (mgui.gtm.getTMLMapping() == null) { if (mgui.gtm.getArtificialTMLMapping() == null) { tml2systc = new tmltranslator.tomappingsystemc.TML2MappingSystemC(mgui.gtm.getTMLModeling()); } else { TraceManager.addDev("Using artifical mapping"); tml2systc = new tmltranslator.tomappingsystemc.TML2MappingSystemC(mgui.gtm.getArtificialTMLMapping()); } } else { tml2systc = new tmltranslator.tomappingsystemc.TML2MappingSystemC(mgui.gtm.getTMLMapping()); } tml2systc.generateSystemC(debugmode.isSelected(), optimizemode.isSelected()); testGo(); jta.append("SystemC code generation done\n"); //t2j.printJavaClasses(); try { jta.append("Generating SystemC file\n"); pathCode = code1.getText(); tml2systc.saveFile(pathCode, "appmodel"); jta.append("SystemC files generated\n"); } catch( Exception e ) { jta.append("Could not generate SystemC file\n"); } break; }*/ case 0: { //Simulator without CPs (Daniel's version) tmltranslator.tomappingsystemc2.TML2MappingSystemC tml2systc; // Making EBRDDs ArrayList<EBRDD> al = new ArrayList<EBRDD>(); ArrayList<TEPE> alTepe = new ArrayList<TEPE>(); TEPE tepe; AvatarRequirementPanelTranslator arpt = new AvatarRequirementPanelTranslator(); for(int k=0; k<valTepe.size(); k++) { testGo(); tepe = arpt.generateTEPESpecification((AvatarPDPanel)(valTepe.get(k))); jta.append("TEPE: " + tepe.getName() + "\n"); jta.append("Checking syntax\n"); // tepe.checkSyntax(); alTepe.add(tepe); jta.append("Done.\n"); } /*EBRDDTranslator ebrddt; EBRDDPanel ep; EBRDD ebrdd; for(int k=0; k<val.size(); k++) { testGo(); ebrddt = new EBRDDTranslator(); ep = (EBRDDPanel)(val.get(k)); jta.append("EBRDD: " + ep.getName() + "\n"); ebrdd = ebrddt.generateEBRDD(ep, ep.getName()); jta.append("Checking syntax\n"); if (ebrddt.getErrors().size() > 0) { jta.append("Syntax error: ignoring EBRDD\n\n"); } else { jta.append("No Syntax error: EBRDD taken into account\n\n"); al.add(ebrdd); } }*/ // Generating code if (mgui.gtm.getTMLMapping() == null) { if (mgui.gtm.getArtificialTMLMapping() == null) { tml2systc = new tmltranslator.tomappingsystemc2.TML2MappingSystemC(mgui.gtm.getTMLModeling(), al, alTepe); } else { TraceManager.addDev("Using artifical mapping"); tml2systc = new tmltranslator.tomappingsystemc2.TML2MappingSystemC(mgui.gtm.getArtificialTMLMapping(), al, alTepe); } } else { tml2systc = new tmltranslator.tomappingsystemc2.TML2MappingSystemC(mgui.gtm.getTMLMapping(), al, alTepe); } tml2systc.generateSystemC(debugmode.isSelected(), optimizemode.isSelected()); testGo(); jta.append("SystemC code generation done\n"); for(TEPE tep: alTepe) { TraceManager.addDev(tep.toString()); } //t2j.printJavaClasses(); try { jta.append("Generating SystemC file\n"); pathCode = code1.getText(); tml2systc.saveFile(pathCode, "appmodel"); jta.append("SystemC files generated\n"); } catch (Exception e) { jta.append("Could not generate SystemC file\n"); } break; } } } //End of method generateCode() public void compileCode() throws InterruptedException { String cmd = compiler1.getText(); jta.append("Compiling SystemC code with command: \n" + cmd + "\n"); rshc = new RshClient(hostSystemC); // Assuma data are on the remote host // Command try { processCmd(cmd, jta); if (jta.getText().contains("Error ")){ mode = ERROR; setButtons(); return; } //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; } } public void executeSimulation() throws InterruptedException { if (hasError) { jta.append("Simulation not executed: error"); return; } int toDo = automatic; if (toDo == 0) { if (exe.isSelected()) { toDo = ONE_TRACE; } else if (exeint.isSelected()) { toDo = ANIMATION; } else { toDo = FORMAL_VERIFICATION; } } // String cmd; switch(toDo) { case ONE_TRACE: executeSimulationCmd(exe2.getText(), "Generating one simulation trace"); break; case ANIMATION: dispose(); mgui.interactiveSimulationSystemC(getPathInteractiveExecute()); break; case FORMAL_VERIFICATION: executeSimulationCmd(exe2formal.getText(), "Running formal verification"); break; } } public void executeSimulationCmd(String cmd, String text) throws InterruptedException { try { jta.append(text + " with command: \n" + cmd + "\n"); rshc = new RshClient(hostSystemC); // It assumes that 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; } } protected void processCmd(String cmd, JTextArea _jta) throws LauncherException { rshc.setCmd(cmd); String s = null; rshc.sendProcessRequest(); rshc.fillJTA(_jta); //if ( //s = rshc.getDataFromProcess(); //return s; return; } protected void checkMode() { if (mode!=ERROR){ mode = NOT_STARTED; } } protected void setButtons() { if (automatic == 0) { 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: break; case ERROR: start.setEnabled(false); stop.setEnabled(false); close.setEnabled(true); break; default: start.setEnabled(false); stop.setEnabled(false); close.setEnabled(true); getGlassPane().setVisible(false); break; } } else { close.setEnabled(true); } } public boolean hasToContinue() { return (go == true); } public void appendOut(String s) { jta.append(s); } public void setError() { hasError = true; } public boolean isInteractiveSimulationSelected() { return (startProcess && interactiveSimulationSelected); } public String getPathInteractiveExecute() { return pathInteractiveExecute; } // List selection listener public void valueChanged(ListSelectionEvent e) { setList(); } private void setList() { if (automatic == 0) { int i1 = listIgnoredTepe.getSelectedIndex(); int i2 = listValidatedTepe.getSelectedIndex(); if (i1 == -1) { addOneValidatedTepe.setEnabled(false); } else { addOneValidatedTepe.setEnabled(true); //listValidated.clearSelection(); } if (i2 == -1) { addOneIgnoredTepe.setEnabled(false); } else { addOneIgnoredTepe.setEnabled(true); //listIgnored.clearSelection(); } if (ignTepe.size() ==0) { allValidatedTepe.setEnabled(false); } else { allValidatedTepe.setEnabled(true); } if (valTepe.size() ==0) { allIgnoredTepe.setEnabled(false); } else { allIgnoredTepe.setEnabled(true); } } } private void addOneIgnoredTepe() { int [] list = listValidatedTepe.getSelectedIndices(); Vector v = new Vector(); Object o; for (int i=0; i<list.length; i++){ o = valTepe.elementAt(list[i]); ignTepe.addElement(o); v.addElement(o); } valTepe.removeAll(v); listIgnoredTepe.setListData(ignTepe); listValidatedTepe.setListData(valTepe); setList(); } private void addOneValidatedTepe() { int [] list = listIgnoredTepe.getSelectedIndices(); Vector v = new Vector(); Object o; for (int i=0; i<list.length; i++){ o = ignTepe.elementAt(list[i]); valTepe.addElement(o); v.addElement(o); } ignTepe.removeAll(v); listIgnoredTepe.setListData(ignTepe); listValidatedTepe.setListData(valTepe); setList(); } private void allValidatedTepe() { valTepe.addAll(ignTepe); ignTepe.removeAllElements(); listIgnoredTepe.setListData(ignTepe); listValidatedTepe.setListData(valTepe); setList(); } private void allIgnoredTepe() { ignTepe.addAll(valTepe); valTepe.removeAllElements(); listIgnoredTepe.setListData(ignTepe); listValidatedTepe.setListData(valTepe); setList(); } private void updateStaticList() { validatedTepe = new Vector(); ignoredTepe = new Vector(); int i; for(i=0; i<ignTepe.size(); i++) { ignoredTepe.add(ignTepe.get(i)); } for(i=0;i<valTepe.size(); i++) { validatedTepe.add(valTepe.get(i)); } } }