minor fixes: remember last used test, respect maximum window size etc

This commit is contained in:
fros4943 2009-04-23 08:54:10 +00:00
parent 3a6e561ea8
commit 2768a96b9b

View file

@ -26,16 +26,18 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $Id: ScriptRunner.java,v 1.16 2009/03/22 14:05:19 fros4943 Exp $ * $Id: ScriptRunner.java,v 1.17 2009/04/23 08:54:10 fros4943 Exp $
*/ */
package se.sics.cooja.plugins; package se.sics.cooja.plugins;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Insets; import java.awt.Insets;
import java.awt.Window; import java.awt.Window;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.File; import java.io.File;
@ -49,6 +51,7 @@ import java.io.InputStreamReader;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.StringReader; import java.io.StringReader;
import java.util.*; import java.util.*;
import javax.script.ScriptException; import javax.script.ScriptException;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
@ -95,6 +98,9 @@ public class ScriptRunner implements Plugin {
"log.log(\"waiting for hello world output from mote 1\\n\");\n" + "log.log(\"waiting for hello world output from mote 1\\n\");\n" +
"WAIT_UNTIL(id == 1 && msg.equals(\"Hello, world\"));\n" + "WAIT_UNTIL(id == 1 && msg.equals(\"Hello, world\"));\n" +
"\n" + "\n" +
"GENERATE_MSG(15000, \"continue\");\n" +
"WAIT_UNTIL(msg.equals(\"continue\"));\n" +
"\n" +
"log.log(\"ok, reporting success now\\n\");\n" + "log.log(\"ok, reporting success now\\n\");\n" +
"log.testOK(); /* Report test success and quit */\n" + "log.testOK(); /* Report test success and quit */\n" +
"//log.testFailed(); /* Report test failure and quit */\n"; "//log.testFailed(); /* Report test failure and quit */\n";
@ -223,9 +229,8 @@ public class ScriptRunner implements Plugin {
} }
}); });
JButton importButton = new JButton("Import Contiki test"); Action importAction = new AbstractAction() {
importButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
public void actionPerformed(ActionEvent ev) {
Runnable doImport = new Runnable() { Runnable doImport = new Runnable() {
public void run() { public void run() {
setScriptActive(false); setScriptActive(false);
@ -234,14 +239,23 @@ public class ScriptRunner implements Plugin {
}; };
new Thread(doImport).start(); new Thread(doImport).start();
} }
}); };
JButton importButton = new JButton(importAction);
importButton.setText("Import Contiki test Ctrl+I");
InputMap inputMap = importButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_I, KeyEvent.CTRL_DOWN_MASK, false), "import");
importButton.getActionMap().put("import", importAction);
JButton exportButton = new JButton("Export as Contiki test"); Action exportAction = new AbstractAction() {
exportButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
public void actionPerformed(ActionEvent ev) {
exportAsContikiTest(); exportAsContikiTest();
} }
}); };
JButton exportButton = new JButton(exportAction);
exportButton.setText("Export as Contiki test Ctrl+O");
inputMap = exportButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK, false), "export");
exportButton.getActionMap().put("export", exportAction);
JPanel scriptArea = new JPanel(new BorderLayout()); JPanel scriptArea = new JPanel(new BorderLayout());
@ -269,6 +283,13 @@ public class ScriptRunner implements Plugin {
pluginGUI.getContentPane().add(BorderLayout.SOUTH, southPanel); pluginGUI.getContentPane().add(BorderLayout.SOUTH, southPanel);
pluginGUI.pack(); pluginGUI.pack();
Dimension maxSize = gui.getDesktopPane().getSize();
if (pluginGUI.getWidth() > maxSize.getWidth()) {
pluginGUI.setSize((int)maxSize.getWidth(), pluginGUI.getHeight());
}
if (pluginGUI.getHeight() > maxSize.getHeight()) {
pluginGUI.setSize(pluginGUI.getWidth(), (int)maxSize.getHeight());
}
} }
private void setScriptActive(boolean active) { private void setScriptActive(boolean active) {
@ -284,15 +305,20 @@ public class ScriptRunner implements Plugin {
}); });
try { try {
engine.activateScript(scriptTextArea.getText()); engine.activateScript(scriptTextArea.getText());
toggleButton.setText("Deactivate");
logTextArea.setText("");
scriptTextArea.setEnabled(false);
logger.info("Test script activated");
} catch (ScriptException e) { } catch (ScriptException e) {
e.printStackTrace(); e.printStackTrace();
setScriptActive(false); setScriptActive(false);
} catch (RuntimeException e) {
e.printStackTrace();
setScriptActive(false);
} }
toggleButton.setText("Deactivate");
logTextArea.setText("");
scriptTextArea.setEnabled(false);
logger.info("Test script activated");
} else { } else {
if (engine != null) { if (engine != null) {
engine.deactivateScript(); engine.deactivateScript();
@ -313,20 +339,47 @@ public class ScriptRunner implements Plugin {
new Thread(new Runnable() { new Thread(new Runnable() {
public void run() { public void run() {
/* Load config from test directory */ /* Load config from test directory */
final File proposedDir = new File(GUI.getExternalToolsSetting("PATH_CONTIKI") + "/tools/cooja/contiki_tests"); File proposedDir = new File(GUI.getExternalToolsSetting("PATH_CONTIKI") + "/tools/cooja/contiki_tests");
if (!proposedDir.exists()) { if (!proposedDir.exists()) {
logger.fatal("Test directory does not exist: " + proposedDir.getPath()); logger.fatal("Test directory does not exist: " + proposedDir.getPath());
return; return;
} }
JFileChooser fc = new JFileChooser();
fc.setFileFilter(GUI.SAVED_SIMULATIONS_FILES);
fc.setCurrentDirectory(proposedDir);
/* Pre-select last used test */
String name = GUI.getExternalToolsSetting("LAST_TEST_CONFIG", null);
if (name != null) {
if (new File(proposedDir, name).exists()) {
fc.setSelectedFile(new File(proposedDir, name));
}
}
int returnVal = fc.showOpenDialog(GUI.getTopParentContainer());
if (returnVal != JFileChooser.APPROVE_OPTION) {
return;
}
File file = fc.getSelectedFile();
if (!file.exists() || !file.canRead()) {
logger.fatal("No read access to file");
return;
}
scriptTextArea.setText(""); scriptTextArea.setText("");
logTextArea.setText(""); logTextArea.setText("");
gui.doLoadConfig(false, true, proposedDir); gui.doLoadConfig(false, true, file);
if (gui.getSimulation() == null) { if (gui.getSimulation() == null) {
return; return;
} }
File cscFile = gui.currentConfigFile; File cscFile = gui.currentConfigFile;
if (cscFile == null) {
return;
}
String testName = cscFile.getName().substring(0, cscFile.getName().length()-4); String testName = cscFile.getName().substring(0, cscFile.getName().length()-4);
File testDir = cscFile.getParentFile(); File testDir = cscFile.getParentFile();
File jsFile = new File(testDir, testName + ".js"); File jsFile = new File(testDir, testName + ".js");
@ -434,6 +487,8 @@ public class ScriptRunner implements Plugin {
File infoFile = new File(testDir, testName + ".info"); File infoFile = new File(testDir, testName + ".info");
final File logFile = new File(testDir, testName + ".log"); final File logFile = new File(testDir, testName + ".log");
GUI.setExternalToolsSetting("LAST_TEST_CONFIG", cscFile.getName());
/* Overwrite existing test */ /* Overwrite existing test */
if (cscFile.exists() || jsFile.exists() || infoFile.exists()) { if (cscFile.exists() || jsFile.exists() || infoFile.exists()) {
s1 = "Overwrite"; s1 = "Overwrite";
@ -539,7 +594,7 @@ public class ScriptRunner implements Plugin {
"\n" + "\n" +
"Run exported test in forked Cooja now?", "Run exported test in forked Cooja now?",
"Run test?", JOptionPane.YES_NO_OPTION, "Run test?", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, options, s1); JOptionPane.QUESTION_MESSAGE, null, options, s2);
if (n != JOptionPane.YES_OPTION) { if (n != JOptionPane.YES_OPTION) {
return; return;
} }