diff --git a/tools/cooja/java/se/sics/cooja/plugins/ScriptRunner.java b/tools/cooja/java/se/sics/cooja/plugins/ScriptRunner.java index e47cd5a58..13e012cb9 100644 --- a/tools/cooja/java/se/sics/cooja/plugins/ScriptRunner.java +++ b/tools/cooja/java/se/sics/cooja/plugins/ScriptRunner.java @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: ScriptRunner.java,v 1.13 2009/02/18 16:43:42 fros4943 Exp $ + * $Id: ScriptRunner.java,v 1.14 2009/03/03 13:50:02 fros4943 Exp $ */ package se.sics.cooja.plugins; @@ -49,9 +49,6 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.StringReader; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - import javax.script.ScriptException; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -127,6 +124,19 @@ public class ScriptRunner implements Plugin { return; } + /* Automatically activate test for new simulations */ + gui.addObserver(new Observer() { + public void update(Observable obs, Object obj) { + Simulation sim = ScriptRunner.this.gui.getSimulation(); + if (sim == null) { + setScriptActive(false); + return; + } + + setScriptActive(true); + } + }); + /* GUI components */ pluginGUI = new JInternalFrame( "Contiki Test Editor", @@ -206,29 +216,9 @@ public class ScriptRunner implements Plugin { toggleButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { if (toggleButton.getText().equals("Activate")) { - engine = new LogScriptEngine(ScriptRunner.this.gui); - engine.setScriptLogObserver(new Observer() { - public void update(Observable obs, Object obj) { - logTextArea.append((String) obj); - logTextArea.setCaretPosition(logTextArea.getText().length()); - } - }); - try { - engine.activateScript(scriptTextArea.getText()); - } catch (ScriptException e) { - e.printStackTrace(); - } - toggleButton.setText("Deactivate"); - logTextArea.setText(""); - scriptTextArea.setEnabled(false); - + setScriptActive(true); } else { - if (engine != null) { - engine.deactivateScript(); - engine = null; - } - toggleButton.setText("Activate"); - scriptTextArea.setEnabled(true); + setScriptActive(false); } } }); @@ -238,15 +228,7 @@ public class ScriptRunner implements Plugin { public void actionPerformed(ActionEvent ev) { Runnable doImport = new Runnable() { public void run() { - if (!toggleButton.getText().equals("Activate")) { - if (engine != null) { - engine.deactivateScript(); - engine = null; - } - toggleButton.setText("Activate"); - scriptTextArea.setEnabled(true); - } - + setScriptActive(false); importContikiTest(); } }; @@ -289,6 +271,40 @@ public class ScriptRunner implements Plugin { pluginGUI.pack(); } + private void setScriptActive(boolean active) { + if (active) { + setScriptActive(false); + + engine = new LogScriptEngine(ScriptRunner.this.gui); + engine.setScriptLogObserver(new Observer() { + public void update(Observable obs, Object obj) { + logTextArea.append((String) obj); + logTextArea.setCaretPosition(logTextArea.getText().length()); + } + }); + try { + engine.activateScript(scriptTextArea.getText()); + } catch (ScriptException e) { + e.printStackTrace(); + setScriptActive(false); + } + toggleButton.setText("Deactivate"); + logTextArea.setText(""); + scriptTextArea.setEnabled(false); + + logger.info("Test script activated"); + } else { + if (engine != null) { + engine.deactivateScript(); + engine = null; + + toggleButton.setText("Activate"); + scriptTextArea.setEnabled(true); + logger.info("Test script deactivated"); + } + } + } + public JInternalFrame getGUI() { return pluginGUI; } @@ -364,6 +380,7 @@ public class ScriptRunner implements Plugin { } private void exportAsContikiTest() { + String s1, s2; int n; Object[] options; Simulation simulation = ScriptRunner.this.gui.getSimulation(); if (simulation == null) { @@ -372,23 +389,24 @@ public class ScriptRunner implements Plugin { return; } - /* Confirm test directory */ File testDir = new File(GUI.getExternalToolsSetting("PATH_CONTIKI") + "/tools/cooja/contiki_tests"); - String s1 = "Ok"; - String s2 = "Cancel"; - Object[] options = { s1, s2 }; - int n = JOptionPane.showOptionDialog(GUI.getTopParentContainer(), + if (!testDir.exists()) { + logger.fatal("Test directory does not exist: " + testDir.getPath()); + return; + } + + /* Confirm test directory */ + /*s1 = "Ok"; + s2 = "Cancel"; + options = new Object[] { s1, s2 }; + n = JOptionPane.showOptionDialog(GUI.getTopParentContainer(), "The current simulation config (.csc) and test script (.js)\n" + "will be stored in directory '" + testDir.getPath() + "'", "Export Contiki test", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, s1); if (n != JOptionPane.YES_OPTION) { return; - } - if (!testDir.exists()) { - logger.fatal("Test directory does not exist: " + testDir.getPath()); - return; - } + }*/ /* Name test to export */ if (oldTestName == null) { @@ -418,6 +436,7 @@ public class ScriptRunner implements Plugin { if (cscFile.exists() || jsFile.exists() || infoFile.exists()) { s1 = "Overwrite"; s2 = "Cancel"; + options = new Object[] { s1, s2 }; n = JOptionPane.showOptionDialog(GUI.getTopParentContainer(), "Some output files already exist. Overwrite?", "Test already exist", JOptionPane.YES_NO_OPTION, @@ -448,32 +467,10 @@ public class ScriptRunner implements Plugin { if (pluginsConfig != null) { root.addContent(pluginsConfig); } -// if (pluginsConfig != null) { -// JOptionPane.showMessageDialog(GUI.getTopParentContainer(), -// "Stripping plugin configuration.\n" + -// "(Exporting non-GUI plugins not implemented.)", -// "Plugins detected", JOptionPane.WARNING_MESSAGE); -// } - - /* Fix simulation delay */ - root.detach(); - String configString = new XMLOutputter().outputString(new Document(root)); - String identifierExtraction = "([^<]*)"; - Matcher matcher = Pattern.compile(identifierExtraction).matcher(configString); - while (matcher.find()) { - int delay = Integer.parseInt(matcher.group(1)); - if (delay != 0) { - JOptionPane.showMessageDialog(GUI.getTopParentContainer(), - "Simulation delay currently set to " + delay + ".\n" + - "Changing delay time to 0 in exported test.", - "Non-zero delay time detected", JOptionPane.WARNING_MESSAGE); - } - configString = configString.replace( - "" + matcher.group(1) + "", - "0"); - } /* Export .csc */ + root.detach(); + String configString = new XMLOutputter().outputString(new Document(root)); try { Element newRoot = new SAXBuilder().build(new StringReader(configString)).getRootElement(); newRoot.detach(); @@ -529,7 +526,14 @@ public class ScriptRunner implements Plugin { /* Run exported test (optional) */ s1 = "Run test"; s2 = "No"; + options = new Object[] { s1, s2 }; + n = JOptionPane.showOptionDialog(GUI.getTopParentContainer(), + "Test files created:\n" + + (cscFile.exists()?"Config: " + cscFile.getName() + "\n": "") + + (jsFile.exists()?"Script: " + jsFile.getName() + "\n": "") + + (infoFile.exists()?"Info: " + infoFile.getName() + "\n": "") + + "\n" + "Run exported test in forked Cooja now?", "Run test?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, s1); @@ -665,6 +669,7 @@ public class ScriptRunner implements Plugin { gui.doQuit(false); return false; } + sim.setDelayTime(0); gui.setSimulation(sim); /* Load test script */