From 23f6671e41a36f307a448149db646b38cfb24606 Mon Sep 17 00:00:00 2001 From: boccioli_m Date: Tue, 20 Mar 2018 13:48:39 +0100 Subject: [PATCH] Startup --- plugins/NewTest.form | 67 +- plugins/NewTest.java | 191 +- plugins/TestingList - Copy.java | 2816 ----------------- plugins/TestingList.form | 58 +- plugins/TestingList.java | 315 +- plugins/TestingListDetails.form | 83 +- plugins/TestingListDetails.java | 194 +- plugins/icons/Thumbs.db | Bin 237568 -> 17920 bytes plugins/json-simple-1.1.1.jar | Bin 23737 -> 0 bytes .../New Structure Tests/new bx84 2/.config | 4 + .../New Structure Tests/new bx84 2/help.html | 15 + .../new bx84 2/new bx84 2.py | 174 + 12 files changed, 507 insertions(+), 3410 deletions(-) delete mode 100644 plugins/TestingList - Copy.java delete mode 100644 plugins/json-simple-1.1.1.jar create mode 100644 script/tests/tests/New Structure Tests/new bx84 2/.config create mode 100644 script/tests/tests/New Structure Tests/new bx84 2/help.html create mode 100644 script/tests/tests/New Structure Tests/new bx84 2/new bx84 2.py diff --git a/plugins/NewTest.form b/plugins/NewTest.form index 7484a61..45fe096 100644 --- a/plugins/NewTest.form +++ b/plugins/NewTest.form @@ -54,7 +54,7 @@ - + @@ -73,19 +73,12 @@ - - - - - - - - - - - - + + + + + @@ -94,33 +87,31 @@ - - - - - - + + + + - - - - + + + + - + - + - - + + + - - + - + @@ -181,15 +172,12 @@ - + - + - - - @@ -229,7 +217,6 @@ - @@ -240,12 +227,6 @@ - - - - - - @@ -274,7 +255,7 @@ - + <Editor/> <Renderer/> diff --git a/plugins/NewTest.java b/plugins/NewTest.java index 8f09584..d5cb1c5 100644 --- a/plugins/NewTest.java +++ b/plugins/NewTest.java @@ -14,7 +14,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; -import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -40,8 +39,7 @@ import javax.naming.directory.SearchResult; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; import javax.swing.table.DefaultTableModel; -//import org.json.simple.JSONArray; -//import org.json.simple.JSONObject; + /** * * @author boccioli_m @@ -60,11 +58,9 @@ public class NewTest extends javax.swing.JPanel { public static Path TEMPLATES_DEVICECONFIG_FILEPATH = Paths.get(TESTS_ROOT_DIR, "templates","deviceTemplate.config"); public static String TESTS_CONFIG_FILENAME = ".config"; public static String TESTS_HELP_FILENAME = "help.html"; - public static String ALLOWED_CHARSET1 = "[a-z A-Z 0-9 . _ \\- \\[\\] () : < > = \\$]*"; //les restricted set of chars - public static String ALLOWED_CHARSET2 = "[a-z A-Z 0-9 . _ \\- \\[\\] () : \\$]*"; //more restricted set of chars - public static String ALLOWED_CHARSET3 = "[a-zA-Z0-9._ \\- \\$ , :]*"; //even more restricted set of chars - public static String VALUE_SEPARATOR = "&"; - public static String PARAM_SEPARATOR = ";"; + public static String ALLOWED_CHARSET1 = "[a-z A-Z 0-9 . _ \\- \\[\\] () : , < > =]*"; //les restricted set of chars + public static String ALLOWED_CHARSET2 = "[a-z A-Z 0-9 . _ \\- \\[\\] ()]*"; //more restricted set of chars + public static String ALLOWED_CHARSET3 = "[a-zA-Z0-9._\\-]*"; //even more restricted set of chars /** * enumeration of table column indexes @@ -155,13 +151,8 @@ public class NewTest extends javax.swing.JPanel { txtTestName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestName.setToolTipText(""); - txtTestName.setMinimumSize(new java.awt.Dimension(30, 26)); - txtTestName.setPreferredSize(new java.awt.Dimension(60, 26)); - txtTestName.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - txtTestNameActionPerformed(evt); - } - }); + txtTestName.setMinimumSize(new java.awt.Dimension(30, 23)); + txtTestName.setPreferredSize(new java.awt.Dimension(60, 23)); jComboBoxTestSuites.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jComboBoxTestSuites.setToolTipText("Select a Test Suite or add a new one"); @@ -175,13 +166,10 @@ public class NewTest extends javax.swing.JPanel { txtTestDescription.setLineWrap(true); txtTestDescription.setRows(5); txtTestDescription.setToolTipText("Add here a detailed description"); - txtTestDescription.setWrapStyleWord(true); jScrollPane3.setViewportView(txtTestDescription); txtContactName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtContactName.setToolTipText("Write here the user name of the person who can be contacted for any question concerning this test"); - txtContactName.setMinimumSize(new java.awt.Dimension(6, 26)); - txtContactName.setPreferredSize(new java.awt.Dimension(6, 26)); jTableParams.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jTableParams.setModel(new javax.swing.table.DefaultTableModel( @@ -207,8 +195,8 @@ public class NewTest extends javax.swing.JPanel { jTableParams.getColumnModel().getColumn(0).setMinWidth(150); jTableParams.getColumnModel().getColumn(0).setPreferredWidth(150); jTableParams.getColumnModel().getColumn(0).setMaxWidth(150); - jTableParams.getColumnModel().getColumn(1).setPreferredWidth(100); - jTableParams.getColumnModel().getColumn(1).setMaxWidth(200); + jTableParams.getColumnModel().getColumn(1).setPreferredWidth(80); + jTableParams.getColumnModel().getColumn(1).setMaxWidth(100); } jButtonGenerate.setText("Generate"); @@ -250,7 +238,7 @@ public class NewTest extends javax.swing.JPanel { .addGroup(layout.createSequentialGroup() .addComponent(lblParams) .addGap(18, 18, 18) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 549, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblName) @@ -263,44 +251,36 @@ public class NewTest extends javax.swing.JPanel { .addComponent(lblContact)) .addGap(10, 10, 10) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(txtTestName, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jComboBoxTestSuites, javax.swing.GroupLayout.Alignment.TRAILING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.TRAILING)) - .addGap(12, 12, 12)) - .addGroup(layout.createSequentialGroup() - .addComponent(txtContactName, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()))))) + .addComponent(txtTestName, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jComboBoxTestSuites, javax.swing.GroupLayout.Alignment.TRAILING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(txtContactName)) + .addGap(12, 12, 12)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblName) + .addComponent(txtTestName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblSuite) + .addComponent(jComboBoxTestSuites, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(lblName)) - .addComponent(txtTestName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE) + .addComponent(lblDescr)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lblSuite) - .addComponent(jComboBoxTestSuites, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 126, Short.MAX_VALUE) - .addComponent(lblDescr)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addComponent(lblContact) - .addGap(29, 29, 29)) - .addGroup(layout.createSequentialGroup() - .addComponent(txtContactName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED))) + .addComponent(txtContactName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblContact)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(lblParams) - .addGap(0, 171, Short.MAX_VALUE)) + .addGap(0, 132, Short.MAX_VALUE)) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -341,17 +321,11 @@ public class NewTest extends javax.swing.JPanel { } }//GEN-LAST:event_jMenuItemDeleteRowActionPerformed - private void txtTestNameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtTestNameActionPerformed - // TODO add your handling code here: - }//GEN-LAST:event_txtTestNameActionPerformed - /** * fill table with example parameters * @param newType of type TypeOfNewFile, can be device or test. */ private void fillComponents(TypeOfNewFile newType) { - - txtContactName.setText(System.getProperty("user.name")); // listener for mouse-click also on table header jTableParams.getTableHeader().addMouseListener(new MouseAdapter() { @@ -369,9 +343,9 @@ public class NewTest extends javax.swing.JPanel { this.lblName.setText( newType + " "+ this.lblName.getText()); this.lblName.setToolTipText(newType + " name. Can be a PV name."); this.txtTestName.setToolTipText(newType + " name. Can be a PV name."); - //lblParams.setVisible(false); - //jTableParams.setVisible(false); - //jScrollPane1.setVisible(false); + lblParams.setVisible(false); + jTableParams.setVisible(false); + jScrollPane1.setVisible(false); lblContact.setVisible(false); txtContactName.setVisible(false); } @@ -449,7 +423,7 @@ public class NewTest extends javax.swing.JPanel { String[] dsParameterAttributes = null; String[] dsParameters = parametersString.split(";"); for (String sParameter : dsParameters) { - dsParameterAttributes = sParameter.split("&"); + dsParameterAttributes = sParameter.split(":"); if (dsParameterAttributes.length > 2) { mParameterAttributes = new HashMap(); mParameterAttributes.put("value", (Object) dsParameterAttributes[1]); @@ -784,7 +758,7 @@ public class NewTest extends javax.swing.JPanel { * @param hmTestParams test parameters. For the details of the structure, see buildParametersMap * @return true if success, false if else */ - public boolean generateTestConfigOld(Path templateDir, + public boolean generateTestConfig(Path templateDir, Path testDir, String sTestName, String sTestDescription, @@ -810,7 +784,7 @@ public class NewTest extends javax.swing.JPanel { value = (String) attributes.get("value"); description = (String) attributes.get("description"); //build the python code for getting the test parameter - sTestParameters = sTestParameters + name + VALUE_SEPARATOR + value + VALUE_SEPARATOR + description + PARAM_SEPARATOR ; + sTestParameters = sTestParameters + name + ":" + value + ":" + description + ";" ; } } FileInputStream in = new FileInputStream(configFile); @@ -844,101 +818,6 @@ public class NewTest extends javax.swing.JPanel { } - - /** - * generate the python script that runs the test - * - * @param templateDir the path of the template to be used for the generation of theconfig. - * it can be: TEMPLATES_TESTCONFIG_FILEPATH, TEMPLATES_DEVICECONFIG_FILEPATH - * @param testDir path where the test is located (including the test name dir) - * @param sTestName name of the test - * @param sTestDescription description of the test - * @param sTestSuite test cases/test suite name - * @param hmTestParams test parameters. For the details of the structure, see buildParametersMap - * @return true if success, false if else - */ - public boolean generateTestConfig(Path templateDir, - Path testDir, - String sTestName, - String sTestDescription, - String sTestSuite, - HashMap hmTestParams){ - //generate test config file from template - boolean success = false; - try { - Path path = Paths.get(testDir.toString(),TESTS_CONFIG_FILENAME); - if(Files.exists(path)){ - Files.delete(path); - } - Files.copy(templateDir, path); - File configFile = path.toFile(); - - //Loop among the test parameters and generate variable assignement syntax for python - String sTestParameters = ""; - String name="", value="", description=""; - for(Object entry : hmTestParams.keySet()){ - Object param = entry; - if(param instanceof String){ - name = (String) param; - HashMap attributes = (HashMap) hmTestParams.get(param); - value = (String) attributes.get("value"); - description = (String) attributes.get("description"); - //build the python code for getting the test parameter - sTestParameters = sTestParameters + name + VALUE_SEPARATOR + "\"" + value + "\"" + VALUE_SEPARATOR + "\"" + description + "\"" + PARAM_SEPARATOR ; - } - } - FileInputStream in = new FileInputStream(configFile); - Properties props = new Properties(); - props.load(in); - in.close(); - FileOutputStream out = new FileOutputStream(configFile); - if(sType == TypeOfNewFile.Device){ - //creation of device config - props.setProperty("name", sTestName); - props.setProperty("description", sTestDescription); - props.setProperty("tests", sTestSuite); - props.setProperty("parameters", sTestParameters); - }else{ - //creation of test config - props.setProperty("name", sTestName); - props.setProperty("description", sTestDescription); - props.setProperty("parameters", sTestParameters); - - } - props.store(out, null); - out.close(); - /* - JSONObject obj = new JSONObject(); - obj.put("Name", "crunchify.com"); - obj.put("Author", "App Shah"); - - JSONArray company = new JSONArray(); - company.add("Compnay: eBay"); - company.add("Compnay: Paypal"); - company.add("Compnay: Google"); - obj.put("Company List", company); - - String jsonConfig = obj.toJSONString(); - - FileWriter jout = new FileWriter(configFile); - - jout.write(jsonConfig); - jout.flush(); - jout.close(); - */ - success = true; - } catch (FileNotFoundException ex) { - SwingUtils.showMessage(this, "generateTestConfig()", "Cannot find file: " + ex.toString()); - Logger.getLogger(NewTest.class.getName()).log(Level.SEVERE, null, ex); - } catch (IOException ex) { - SwingUtils.showMessage(this, "generateTestConfig()", "Problem with file aaccess: " + ex.toString()); - Logger.getLogger(NewTest.class.getName()).log(Level.SEVERE, null, ex); - } - return success; - } - - - /** * generate the html help file of the test * diff --git a/plugins/TestingList - Copy.java b/plugins/TestingList - Copy.java deleted file mode 100644 index 344a309..0000000 --- a/plugins/TestingList - Copy.java +++ /dev/null @@ -1,2816 +0,0 @@ -/* - * Copyright (c) 2015 Paul Scherrer Institute. All rights reserved. - */ -//<editor-fold defaultstate="collapsed" desc="import"> - -import ch.psi.pshell.core.Context; -import ch.psi.pshell.scripting.StatementException; -import ch.psi.pshell.security.AccessLevel; -import ch.psi.pshell.ui.App; -import ch.psi.pshell.ui.Panel; -import ch.psi.pshell.ui.Plugin; -import ch.psi.pshell.ui.View; -import ch.psi.utils.Convert; -import ch.psi.utils.swing.SwingUtils; -import ch.psi.utils.swing.SwingUtils.OptionType; -import java.awt.Component; -import java.awt.Point; -import java.io.BufferedReader; -import java.io.File; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.ImageIcon; -import javax.swing.JPanel; -import javax.swing.table.DefaultTableModel; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.OutputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Vector; -import java.util.function.Consumer; -import java.util.logging.FileHandler; -import java.util.logging.SimpleFormatter; -import java.util.regex.PatternSyntaxException; -import javax.script.ScriptException; -import javax.swing.DefaultCellEditor; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JFileChooser; -import javax.swing.JMenuItem; -import javax.swing.RowFilter; -import javax.swing.UIManager; -import javax.swing.filechooser.FileSystemView; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.TableModel; -import javax.swing.table.TableRowSorter; -import org.apache.commons.io.FilenameUtils; -import org.python.core.PyList; -import static org.python.bouncycastle.util.Arrays.append; -import java.util.Collections; -//</editor-fold> - -/** - * - * @author boccioli_m - */ -public class TestingList extends Panel { - Properties properties = new Properties(); - - - public TestingList() throws Exception { - initialise(); - } - -//<editor-fold defaultstate="collapsed" desc="types enum"> - /** - * enumeration of table column indexes - */ - public enum COL { - - CHECK(0), - STARTSEQUENCE(1), - TIME(2), - DEVICENAME(3), - DEVICEPATH(4), - DEVICEDESCR(5), - TESTSUITE(6), - TESTNAME(7), - TESTPATH(8), - TESTPARAMS(9), - TESTDESCR(10), - TESTHELP(11), - RESULT(12), - STATUS(13), - ICON(14); - private int value; - - private COL(int value) { - this.value = value; - } - - /** - * - * @return int index of the corresponding column - */ - public int index() { - return (int) value; - } - }; - - /** - * enumeration of possible test statuses: text and related icon - */ - public enum TestStatus { - - SUCCESS, - FAILURE, - PENDING, - DISABLED, - RUNNING; - - /** - * - * @return - */ - public String IconFilename() { - String iconFileName = ""; - switch (this) { - case SUCCESS: - iconFileName = "/icons/run-ok-16px.png"; - break; - case FAILURE: - iconFileName = "/icons/run-error-16px.png"; - break; - case PENDING: - iconFileName = "/icons/run-stop-16px.png"; - break; - case DISABLED: - iconFileName = ""; - break; - case RUNNING: - iconFileName = "/icons/run-play-16px.png"; - break; - } - return iconFileName; - } - - @Override - public final String toString() { - String status = ""; - switch (this) { - case SUCCESS: - status = "Success"; - break; - case FAILURE: - status = "Failure"; - break; - case PENDING: - status = "Pending"; - break; - case DISABLED: - status = "Disabled"; - break; - case RUNNING: - status = "Running"; - break; - } - return status; - } - - /** - * - * @return ImageIcon corresponding to the selected testStatus - */ - public ImageIcon Icon() { - String iconFileName = this.IconFilename(); - ImageIcon icon = null; - if (iconFileName != "") { - icon = new ImageIcon(getClass().getResource(this.IconFilename())); - } - return icon; - } - }; - - /** - * Sequence options: AFTER: the test starts after the test above has - * finished TOGETHER: the test starts at the same time as the test above - */ - public enum StartSequence { - - AFTER, - TOGETHER; - - @Override - public final String toString() { - String status = ""; - switch (this) { - case AFTER: - status = "After previous"; - break; - case TOGETHER: - status = "With previous"; - break; - } - return status; - } - }; - - /** - * List of Keys defining the arguments to be passed to a test script - */ - public enum testArgNames { - - PARAMETERS, - TEST, - DEVICE, - TEST_PATH, - STATUS; - - @Override - public final String toString() { - String status = ""; - switch (this) { - case PARAMETERS: - status = "parameters"; - break; - case TEST: - status = "test"; - break; - case DEVICE: - status = "device"; - break; - case TEST_PATH: - status = "testPath"; - break; - case STATUS: - status = "status"; - break; - } - return status; - } - }; - - /** - * List of Keys defining the arguments to be passed to a test script - */ - public enum testPropertyNames { - - DEVICE_NAME, - DEVICE_DESCRIPTION, - TEST_NAME, - TEST_DESCRIPTION, - TEST_PARAMETERS, - TEST_HELP; - - @Override - public final String toString() { - String val = ""; - switch (this) { - case DEVICE_NAME: - case TEST_NAME: - val = "name"; - break; - case TEST_PARAMETERS: - val = "parameters"; - break; - case DEVICE_DESCRIPTION: - case TEST_DESCRIPTION: - val = "description"; - break; - case TEST_HELP: - val = "help"; - break; - } - return val; - } - }; -//</editor-fold> - - Logger logger = Logger.getLogger("TestsLog"); - //these paths are converted to unix or win path according to host OS - public static Path TESTS_DEVICES_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "devices"); - public static Path TESTS_TESTS_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "tests"); - public static Path TESTS_CONFIG_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "config"); - public static Path TESTS_PROPERTIES_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "tests.properties"); - public final Path TESTS_LOG_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "log", "TestsLog" + getnow() + ".txt"); - public static String TESTS_CONFIG_FILENAME = ".config"; - public static String TESTS_HELP_FILENAME = "help.html"; - public static String VALUE_SEPARATOR = "&"; - public static String PARAM_SEPARATOR = ";"; - - - /** - * initialise panel - */ - private void initialise(){ - - /* - // testing RPS packets - System.out.println("msg:"); - int PORT1 = 0x8899; // this port - String mode = "2,IQCOM,$BMA1,1,DIA"; - int i = 0; - byte[] msg = new byte[128]; - msg[0] = 50; //bytecount - msg[2] = 105; // transfer function - msg[4] = (byte) PORT1; - msg[5] = (byte) (PORT1 >>> 8); - msg[6] = 1; // message id - msg[16] = 1; //io-func reset=2 read mode=0 write mode=1 - byte[] buffer = mode.getBytes(); - while (i < buffer.length) { - msg[28 + i] = buffer[i]; - i++; - } - for (i=0 ; i < msg.length; i++) { - System.out.print(String.format("%02X ", msg[i])); - } - System.out.println(""); - // end of testing RPS packets -*/ - - - - - - - - - initComponents(); - addIcons(); - initLogger(); - buildTable(); - - try { - loadTests(); - //if not administrator, then show only enabled tests - boolean bShow = getContext().getInstance().getLevel()==AccessLevel.administrator; - jCheckBoxMenuShowSelectedTests1.setEnabled(bShow); - } catch (Exception ex) { - getLogger().severe(ex.getMessage()); - } - loadProperties(); - - } - - - /** - * load general properties - */ - private void loadProperties(){ - File configFile = TESTS_PROPERTIES_DEFAULT_DIR.toFile(); - if (!configFile.isFile()) return; - boolean error = false; - try { - FileReader reader = new FileReader(configFile); - Properties props = new Properties(); - props.load(reader); - reader.close(); - String property; - properties = props; - - //custom panel - property = props.getProperty("customPanel"); - //System.out.println("load customPanel: " + property); - property = property.replace("\"",""); - loadCustomPanel(property); - - //list filter - property = props.getProperty("listFilter"); - //System.out.println("load listFilter: " + property); - if(property==null || property==""){ - loadListFilter(); - } else{ - property = property.replace("\"",""); - loadListFilter(Paths.get(TESTS_CONFIG_DEFAULT_DIR.toString(), property).toFile()); - } - - //show Enabled Tests Only - property = props.getProperty("showEnabledTestsOnly"); - //System.out.println("load showEnabledTestsOnly: " + property); - property = property.replace("\"",""); - showEnabledTestsOnly("true".equals(property)); - - - } catch (FileNotFoundException ex) { - // file does not exist - System.out.println(ex.toString()); - error = true; - } catch (IOException ex) { - // I/O error - System.out.println(ex.toString()); - error = true; - } catch (Exception ex){ - // Any other exception - System.out.println(ex.toString()); - error = true; - } - if(error){ - //load defaults - } - } - - - /** - * save general properties - */ - private void saveProperties(String key, String val){ - File configFile = TESTS_PROPERTIES_DEFAULT_DIR.toFile(); - - try { - if (!configFile.isFile()) configFile.createNewFile(); - FileReader reader = new FileReader(configFile); - System.out.println("save property: "+ key + " = " + val); - properties.setProperty(key, val); - Properties props = properties; - - OutputStream out = new FileOutputStream( configFile ); - props.store(out, "TestingList for pshell: configuration properties"); - - out.close(); - } catch (FileNotFoundException ex) { - // file does not exist - System.out.println(ex.toString()); - } catch (IOException ex) { - // I/O error - System.out.println(ex.toString()); - } - - } - - - /** - * close the custom panel if present - */ - private void closeCustomPanel(){ - jPanelCustomFrame.removeAll(); - jPanelCustom.setVisible(false); - repaint(); - //store custom panel in the properties - saveProperties("customPanel", ""); - } - - - /** - * load plugins available excluding the plugins used directly by TestingList - * @return list of plugins assumed to be custom panels - */ - private List<String> getCustomPanels(){ - Path pluginsPath = Paths.get(".", "home", "config", "plugins.properties"); - List<String> stringBuffer =new ArrayList<String>() ; - try { - //get list of java classes from plugins list file - File file = pluginsPath.toFile(); - FileReader fileReader = new FileReader(file); - BufferedReader bufferedReader = new BufferedReader(fileReader); - String line, fileName; - while ((line = bufferedReader.readLine()) != null) { - if(line.contains("=enabled")){ - //extract java class name from file path - fileName = line.replace(".java=enabled", ""); - fileName = (Paths.get(fileName)).getFileName().toString(); - if( !(fileName.contains("TestingListDetails") || - fileName.contains("TestingList") || - fileName.contains("NewTest"))){ - stringBuffer.add(fileName); - } - } - } - fileReader.close(); - //System.out.println("Contents of file:"); - //System.out.println(stringBuffer.toString()); - } catch (IOException e) { - e.printStackTrace(); - } - return stringBuffer; - } - - - /** - * get the presently active custom panel - * - * @return custom panel as component - */ - public Component getCustomPanel(){ - Component customPanel = null; - if(this.jPanelCustomFrame.getComponentCount() >0){ - Component components[] = this.jPanelCustomFrame.getComponents(); - //there is only one component - customPanel = components[0]; - } - return customPanel; - } - - - /** - * add custom panel if specified. - * Custom panels are java classes. To add a new custom panel MyNewPanel: - * - create a panel and save it as MyNewPanel.java - * - add MyNewPanel.java file in the pshell plugins folder - * - on pshell, open Plugins and enable MyNewPanel.java - * - restart pshell - * To show the new panel, open the menu Advanced/Load Custom Panel - * - * @param panel the panel to add as component - */ - public void loadCustomPanel(Component panel){ - if(panel != null) - loadCustomPanel(panel.getClass().getName() ); - else - closeCustomPanel(); - } - - /** - * add custom panel if specified. - * Custom panels are java classes. To add a new custom panel MyNewPanel: - * - create a panel and save it as MyNewPanel.java - * - add MyNewPanel.java file in the pshell plugins folder - * - on pshell, open Plugins and enable MyNewPanel.java - * - restart pshell - * To show the new panel, open the menu Advanced/Load Custom Panel - * - * @param sPanelClassName the panel to add as class name - */ - private void loadCustomPanel(String sPanelClassName){ - closeCustomPanel(); - if ( sPanelClassName == null || - sPanelClassName.trim() == "" || - sPanelClassName.isEmpty()) { - return; - } - - //if a custom panel is shown, the tests cannot be run in parallel, - //they can only be run in series (one after the other). - boolean changeSequenceToAfter = true;// = SwingUtils.OptionResult.No; - for (int row = 0; row < jTable1.getRowCount(); row++) { - try{ - if(jTable1.getValueAt(row, COL.STARTSEQUENCE.ordinal())==null) continue; - String sStartSequence = String.valueOf(jTable1.getValueAt(row, COL.STARTSEQUENCE.ordinal())); - if(sStartSequence.equals(StartSequence.TOGETHER.toString())){ - SwingUtils.OptionResult ret = SwingUtils.showOption(this, "Modify Start mode", - "A custom panel is active: tests can only run in sequence (Start mode: 'After previous'). "+ - "\nDo you want to keep the custom panel open and set all tests Start mode to 'After previous'?", - OptionType.YesNo); - if(ret == SwingUtils.OptionResult.Yes){ - changeSequenceToAfter = true ; - } else { - changeSequenceToAfter = false ; - } - break; - } - } catch (NullPointerException ex){ - continue; - } - } - //Set all active tests sequence to "After previous" - if(changeSequenceToAfter ){ - for (int row = 0; row < jTable1.getRowCount(); row++) { - boolean bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal()); - if(bSelected){ - jTable1.setValueAt(StartSequence.AFTER.toString(), row, COL.STARTSEQUENCE.ordinal()); - } - } - } else { //user does not wat to change running sequence from parallel to sequential - return; - } - - try { - //create a class to visualise the details panel - Class panelClass = getContext().getClassByName(sPanelClassName); - JPanel detailsPanel = (JPanel) panelClass.getConstructor(new Class[]{String.class}).newInstance(new Object[]{""}); - this.jPanelCustomFrame.add(detailsPanel); - this.jLabelCustomPanelName.setText("Custom panel: "+sPanelClassName); - repaint(); - revalidate(); - //store custom panel in the properties - saveProperties("customPanel", sPanelClassName); - jPanelCustom.setVisible(true); - animateCustomPanel(); - } catch (Exception ex) { - System.out.println("animateCustomPanel(): "+String.valueOf(ex)); - } - } - - /** - * Starts animating the custom panel, if present - * - * Note: the custom panel must have the public method "animate(String deviceName)" - * - * @param deviceName name of the device. The panel should then append the epics PV to the device name for caget/caset - */ - public void animateCustomPanel(String deviceName) { - try { - Component customPanel = getCustomPanel(); - //if no custom panel: nothing to do - if(customPanel==null) return; - //call the method "animate" of the custom panel (this function must be there) - Class[] cArg = new Class[1]; - cArg[0] = String.class; - Method animate = customPanel.getClass().getMethod("animate", cArg); - animate.invoke(customPanel, deviceName); - } catch (Exception ex) { - System.out.println("animateCustomPanel(): "+String.valueOf(ex)); - } - } - - - /** - * Starts animating the custom panel, if present, and only if the whole list of selected tests contains one only device name - * - * Note: the custom panel must have the public method "animate(String deviceName)" - */ - public void animateCustomPanel(){ - Component customPanel = getCustomPanel(); - //if no custom panel: nothing to do - if(customPanel==null) return; - //scan the table to see if only one device name is present - String sDeviceName = ""; - String sRowDeviceName = ""; - boolean bRowTestEnabled = false; - for (int row = 0; row < jTable1.getRowCount(); row++) { - sRowDeviceName = String.valueOf(jTable1.getValueAt(row, COL.DEVICENAME.ordinal())); - bRowTestEnabled = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal()); - if(bRowTestEnabled){ - if(sDeviceName == ""){ - sDeviceName = sRowDeviceName; - } else if(sDeviceName != sRowDeviceName){ - //there are at least two devices. Cannot animate the custom panel - return; - } - } - } - //if only one device name is present in the table, then animate the custom panel with the device - if(sDeviceName != ""){ - animateCustomPanel(sDeviceName); - } - } - - - /** - * write info into a log file - * @param text the info to be logged - */ - private void log(Object text) { - try { - getContext().getDataManager().appendLog(String.valueOf(text)); - } catch (Exception ex) { - System.out.println("animateCustomPanel(): "+String.valueOf(ex)); - } - } - - /** - * initialise the logger - */ - private void initLogger() { - /* - this.evalAsync("bla").handle((ok, ex) -> { - if (ex != null) { - - } else { - } - return ok; - }); - */ - - try { - - FileHandler fh; - // This block configure the logger with handler and formatter - fh = new FileHandler(TESTS_LOG_DEFAULT_DIR.toString()); - logger.addHandler(fh); - SimpleFormatter formatter = new SimpleFormatter(); - fh.setFormatter(formatter); - log("INF - " + "New testing session"); - } catch (SecurityException e) { - SwingUtils.showMessage(this, "initLogger()", e.toString()); - } catch (IOException e) { - SwingUtils.showMessage(this, "initLogger()", e.toString()); - } - } - - /** - * - * @throws IOException - */ - @SuppressWarnings("unchecked") - - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - jPopupMenuOptions = new javax.swing.JPopupMenu(); - jCheckBoxMenuShowSelectedTests = new javax.swing.JCheckBoxMenuItem(); - jMenuItemReload = new javax.swing.JMenuItem(); - jSeparator1 = new javax.swing.JPopupMenu.Separator(); - jMenuAdvanced = new javax.swing.JMenu(); - jMenuItemNewTest = new javax.swing.JMenuItem(); - jMenuItemNewDevice = new javax.swing.JMenuItem(); - jMenuItemEditScript = new javax.swing.JMenuItem(); - jSeparator6 = new javax.swing.JPopupMenu.Separator(); - jMenuLoadCustomPanel = new javax.swing.JMenu(); - jSeparator2 = new javax.swing.JPopupMenu.Separator(); - jMenuItemOpenLog = new javax.swing.JMenuItem(); - jPopupMenuConfigs = new javax.swing.JPopupMenu(); - jPopupMenuTable = new javax.swing.JPopupMenu(); - jMenuItemShowDetails = new javax.swing.JMenuItem(); - jSeparator5 = new javax.swing.JPopupMenu.Separator(); - jMenuItemRunSingleTest = new javax.swing.JMenuItem(); - jSeparator3 = new javax.swing.JPopupMenu.Separator(); - jMenuSelect = new javax.swing.JMenu(); - jMenuItemSelectAll = new javax.swing.JMenuItem(); - jMenuItemSelectSelection = new javax.swing.JMenuItem(); - jMenuItemSelectNone = new javax.swing.JMenuItem(); - jMenuItemDeselectSelection = new javax.swing.JMenuItem(); - jSeparator7 = new javax.swing.JPopupMenu.Separator(); - jMenuItemDeselect = new javax.swing.JMenuItem(); - jSeparator4 = new javax.swing.JPopupMenu.Separator(); - jCheckBoxMenuShowSelectedTests1 = new javax.swing.JCheckBoxMenuItem(); - jMenuItemReload1 = new javax.swing.JMenuItem(); - jPopupMenuCustom = new javax.swing.JPopupMenu(); - jMenuItemCustomClose = new javax.swing.JMenuItem(); - jPanel1 = new javax.swing.JPanel(); - jPanelTopCommands = new javax.swing.JPanel(); - jPanelButtons = new javax.swing.JPanel(); - jButtonOptions = new javax.swing.JButton(); - jButtonSave = new javax.swing.JButton(); - jButtonOpen = new javax.swing.JButton(); - jButtonRun = new javax.swing.JButton(); - jPanelSelection = new javax.swing.JPanel(); - jCheckBoxEnableDisable = new javax.swing.JCheckBox(); - jButtonMoveDown = new javax.swing.JButton(); - jButtonMoveUp = new javax.swing.JButton(); - jScrollPane2 = new javax.swing.JScrollPane(); - jTable1 = new javax.swing.JTable(); - jPanelCustom = new javax.swing.JPanel(); - jPanelCustomHeader = new javax.swing.JPanel(); - jButtonX = new javax.swing.JButton(); - jLabelCustomPanelName = new javax.swing.JLabel(); - jPanelCustomFrame = new javax.swing.JPanel(); - - jCheckBoxMenuShowSelectedTests.setSelected(true); - jCheckBoxMenuShowSelectedTests.setText("Show enabled tests only"); - jCheckBoxMenuShowSelectedTests.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxMenuShowSelectedTestsActionPerformed(evt); - } - }); - jPopupMenuOptions.add(jCheckBoxMenuShowSelectedTests); - - jMenuItemReload.setText("Reload tests"); - jMenuItemReload.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemReloadActionPerformed(evt); - } - }); - jPopupMenuOptions.add(jMenuItemReload); - jPopupMenuOptions.add(jSeparator1); - - jMenuAdvanced.setText("Advanced"); - - jMenuItemNewTest.setText("New Test..."); - jMenuItemNewTest.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemNewTestActionPerformed(evt); - } - }); - jMenuAdvanced.add(jMenuItemNewTest); - - jMenuItemNewDevice.setText("New Device..."); - jMenuItemNewDevice.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemNewDeviceActionPerformed(evt); - } - }); - jMenuAdvanced.add(jMenuItemNewDevice); - - jMenuItemEditScript.setText("Edit selected test"); - jMenuItemEditScript.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemEditScriptActionPerformed(evt); - } - }); - jMenuAdvanced.add(jMenuItemEditScript); - jMenuAdvanced.add(jSeparator6); - - jMenuLoadCustomPanel.setText("Load Custom Panel"); - jMenuLoadCustomPanel.addMenuListener(new javax.swing.event.MenuListener() { - public void menuCanceled(javax.swing.event.MenuEvent evt) { - } - public void menuDeselected(javax.swing.event.MenuEvent evt) { - } - public void menuSelected(javax.swing.event.MenuEvent evt) { - jMenuLoadCustomPanelMenuSelected(evt); - } - }); - jMenuAdvanced.add(jMenuLoadCustomPanel); - jMenuAdvanced.add(jSeparator2); - - jMenuItemOpenLog.setText("Open Log"); - jMenuItemOpenLog.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemOpenLogActionPerformed(evt); - } - }); - jMenuAdvanced.add(jMenuItemOpenLog); - - jPopupMenuOptions.add(jMenuAdvanced); - - jMenuItemShowDetails.setText("Open Test Details"); - jMenuItemShowDetails.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemShowDetailsActionPerformed(evt); - } - }); - jPopupMenuTable.add(jMenuItemShowDetails); - jPopupMenuTable.add(jSeparator5); - - jMenuItemRunSingleTest.setText("Run this test now"); - jMenuItemRunSingleTest.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemRunSingleTestActionPerformed(evt); - } - }); - jPopupMenuTable.add(jMenuItemRunSingleTest); - jPopupMenuTable.add(jSeparator3); - - jMenuSelect.setText("Enable/Disable"); - - jMenuItemSelectAll.setText("Enable all"); - jMenuItemSelectAll.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemSelectAllActionPerformed(evt); - } - }); - jMenuSelect.add(jMenuItemSelectAll); - - jMenuItemSelectSelection.setText("Enable selection"); - jMenuItemSelectSelection.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemSelectSelectionActionPerformed(evt); - } - }); - jMenuSelect.add(jMenuItemSelectSelection); - - jMenuItemSelectNone.setText("Disable all"); - jMenuItemSelectNone.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemSelectNoneActionPerformed(evt); - } - }); - jMenuSelect.add(jMenuItemSelectNone); - - jMenuItemDeselectSelection.setText("Disable selection"); - jMenuItemDeselectSelection.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemDeselectSelectionActionPerformed(evt); - } - }); - jMenuSelect.add(jMenuItemDeselectSelection); - jMenuSelect.add(jSeparator7); - - jMenuItemDeselect.setText("Deselect all"); - jMenuItemDeselect.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemDeselectActionPerformed(evt); - } - }); - jMenuSelect.add(jMenuItemDeselect); - - jPopupMenuTable.add(jMenuSelect); - jPopupMenuTable.add(jSeparator4); - - jCheckBoxMenuShowSelectedTests1.setText("Show enabled tests only"); - jCheckBoxMenuShowSelectedTests1.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxMenuShowSelectedTests1ActionPerformed(evt); - } - }); - jPopupMenuTable.add(jCheckBoxMenuShowSelectedTests1); - - jMenuItemReload1.setText("Reload tests"); - jMenuItemReload1.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemReload1ActionPerformed(evt); - } - }); - jPopupMenuTable.add(jMenuItemReload1); - - jMenuItemCustomClose.setText("Close this custom panel"); - jMenuItemCustomClose.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jMenuItemCustomCloseActionPerformed(evt); - } - }); - jPopupMenuCustom.add(jMenuItemCustomClose); - - setLayout(new java.awt.BorderLayout()); - - jPanel1.setMinimumSize(new java.awt.Dimension(100, 200)); - jPanel1.setPreferredSize(new java.awt.Dimension(110, 110)); - jPanel1.setLayout(new java.awt.BorderLayout()); - - jPanelTopCommands.setMinimumSize(new java.awt.Dimension(115, 100)); - jPanelTopCommands.setLayout(new java.awt.BorderLayout()); - - jPanelButtons.setMinimumSize(new java.awt.Dimension(0, 80)); - jPanelButtons.setPreferredSize(new java.awt.Dimension(100, 80)); - jPanelButtons.setLayout(new java.awt.BorderLayout()); - - jButtonOptions.setToolTipText("More actions"); - jButtonOptions.setMaximumSize(new java.awt.Dimension(60, 40)); - jButtonOptions.setMinimumSize(new java.awt.Dimension(0, 40)); - jButtonOptions.setPreferredSize(new java.awt.Dimension(50, 40)); - jButtonOptions.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonOptionsActionPerformed(evt); - } - }); - jPanelButtons.add(jButtonOptions, java.awt.BorderLayout.LINE_START); - - jButtonSave.setToolTipText("Save current list of tests"); - jButtonSave.setMaximumSize(new java.awt.Dimension(60, 40)); - jButtonSave.setMinimumSize(new java.awt.Dimension(0, 40)); - jButtonSave.setPreferredSize(new java.awt.Dimension(50, 40)); - jButtonSave.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonSaveActionPerformed(evt); - } - }); - jPanelButtons.add(jButtonSave, java.awt.BorderLayout.LINE_END); - - jButtonOpen.setToolTipText("Open a list of tests"); - jButtonOpen.setMinimumSize(new java.awt.Dimension(0, 9)); - jButtonOpen.setPreferredSize(new java.awt.Dimension(33, 50)); - jButtonOpen.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonOpenActionPerformed(evt); - } - }); - jPanelButtons.add(jButtonOpen, java.awt.BorderLayout.PAGE_END); - - jPanelTopCommands.add(jPanelButtons, java.awt.BorderLayout.EAST); - - jButtonRun.setToolTipText("Run enabled tests"); - jButtonRun.setMaximumSize(new java.awt.Dimension(330000, 39)); - jButtonRun.setMinimumSize(new java.awt.Dimension(90, 90)); - jButtonRun.setPreferredSize(new java.awt.Dimension(90, 39)); - jButtonRun.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonRunActionPerformed(evt); - } - }); - jPanelTopCommands.add(jButtonRun, java.awt.BorderLayout.CENTER); - - jPanelSelection.setLayout(new java.awt.BorderLayout()); - - jCheckBoxEnableDisable.setToolTipText("Enable/Disable the selected tests"); - jCheckBoxEnableDisable.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - jCheckBoxEnableDisable.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - jCheckBoxEnableDisable.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxEnableDisableActionPerformed(evt); - } - }); - jPanelSelection.add(jCheckBoxEnableDisable, java.awt.BorderLayout.WEST); - - jButtonMoveDown.setToolTipText("Move the selected tests down"); - jButtonMoveDown.setMaximumSize(new java.awt.Dimension(25, 25)); - jButtonMoveDown.setMinimumSize(new java.awt.Dimension(25, 25)); - jButtonMoveDown.setPreferredSize(new java.awt.Dimension(25, 25)); - jButtonMoveDown.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonMoveDownActionPerformed(evt); - } - }); - jPanelSelection.add(jButtonMoveDown, java.awt.BorderLayout.SOUTH); - - jButtonMoveUp.setToolTipText("Move the selected tests up"); - jButtonMoveUp.setMaximumSize(new java.awt.Dimension(25, 25)); - jButtonMoveUp.setMinimumSize(new java.awt.Dimension(25, 25)); - jButtonMoveUp.setPreferredSize(new java.awt.Dimension(25, 25)); - jButtonMoveUp.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonMoveUpActionPerformed(evt); - } - }); - jPanelSelection.add(jButtonMoveUp, java.awt.BorderLayout.PAGE_START); - - jPanelTopCommands.add(jPanelSelection, java.awt.BorderLayout.LINE_START); - - jPanel1.add(jPanelTopCommands, java.awt.BorderLayout.CENTER); - - add(jPanel1, java.awt.BorderLayout.NORTH); - - jTable1.setAutoCreateRowSorter(true); - jTable1.setFont(new java.awt.Font("Tahoma", 0, 15)); // NOI18N - jTable1.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { - - }, - new String [] { - "Enable", "Start Mode", "Time", "Device Name", "Device Path", "Device Description", "Test Suite", "Test Name", "Test Peth", "Test Parameters", "Test Description", "Test Help", "Last Test Result", "Status", "" - } - ) { - Class[] types = new Class [] { - java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, javax.swing.Icon.class - }; - boolean[] canEdit = new boolean [] { - true, true, false, false, false, false, false, false, false, false, false, false, false, false, false - }; - - public Class getColumnClass(int columnIndex) { - return types [columnIndex]; - } - - public boolean isCellEditable(int rowIndex, int columnIndex) { - return canEdit [columnIndex]; - } - }); - jTable1.getTableHeader().setReorderingAllowed(false); - jTable1.setDragEnabled(true); - jTable1.setRowHeight(22); - jTable1.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - jTable1MouseClicked(evt); - } - }); - jTable1.addKeyListener(new java.awt.event.KeyAdapter() { - public void keyReleased(java.awt.event.KeyEvent evt) { - jTable1KeyReleased(evt); - } - }); - jScrollPane2.setViewportView(jTable1); - - add(jScrollPane2, java.awt.BorderLayout.CENTER); - - jPanelCustom.setPreferredSize(new java.awt.Dimension(300, 100)); - - jPanelCustomHeader.setPreferredSize(new java.awt.Dimension(88, 20)); - jPanelCustomHeader.setLayout(new java.awt.BorderLayout()); - - jButtonX.setFont(new java.awt.Font("Tahoma", 0, 8)); // NOI18N - jButtonX.setToolTipText("Close this custom panel"); - jButtonX.setMaximumSize(new java.awt.Dimension(12, 12)); - jButtonX.setMinimumSize(new java.awt.Dimension(12, 12)); - jButtonX.setPreferredSize(new java.awt.Dimension(12, 12)); - jButtonX.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonXActionPerformed(evt); - } - }); - jPanelCustomHeader.add(jButtonX, java.awt.BorderLayout.EAST); - - jLabelCustomPanelName.setMaximumSize(new java.awt.Dimension(1000, 20)); - jLabelCustomPanelName.setMinimumSize(new java.awt.Dimension(100, 20)); - jLabelCustomPanelName.setPreferredSize(new java.awt.Dimension(100, 20)); - jLabelCustomPanelName.addMouseListener(new java.awt.event.MouseAdapter() { - public void mouseClicked(java.awt.event.MouseEvent evt) { - jLabelCustomPanelNameMouseClicked(evt); - } - }); - jPanelCustomHeader.add(jLabelCustomPanelName, java.awt.BorderLayout.CENTER); - - javax.swing.GroupLayout jPanelCustomLayout = new javax.swing.GroupLayout(jPanelCustom); - jPanelCustom.setLayout(jPanelCustomLayout); - jPanelCustomLayout.setHorizontalGroup( - jPanelCustomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelCustomLayout.createSequentialGroup() - .addGroup(jPanelCustomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanelCustomHeader, javax.swing.GroupLayout.DEFAULT_SIZE, 440, Short.MAX_VALUE) - .addComponent(jPanelCustomFrame, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) - ); - jPanelCustomLayout.setVerticalGroup( - jPanelCustomLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanelCustomLayout.createSequentialGroup() - .addComponent(jPanelCustomHeader, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanelCustomFrame, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - jPanelCustom.setVisible(false); - - add(jPanelCustom, java.awt.BorderLayout.SOUTH); - }// </editor-fold>//GEN-END:initComponents - - private void addIcons() { - jButtonRun.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/play-circled-64-000000.png"))); - jButtonOptions.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/listing-option-32px.png"))); - jButtonSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/android-save-24-000000.png"))); - jButtonOpen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/folder-open-36-000000.png"))); - jButtonMoveUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/chevron-up-24-000000.png"))); - jButtonMoveDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/chevron-down-24-000000.png"))); - } - - private void jButtonRunActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRunActionPerformed - if (this.jButtonRun.getToolTipText().equals("Run enabled tests")) { - Object pshellStatus; - String sWait = "pshell is initialising: cannot start tests, please try again in a few seconds..."; - Boolean bWait = false; - //check if pshell is still initialising: if so, don't start the tests - try { - //invoke python method - pshellStatus = eval("get_context().state"); - if(String.valueOf(pshellStatus)=="Initializing"){ - bWait = true; - } - } catch (Exception ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - bWait = true; - } - //pshell is actually initialising: don't start tests - if(bWait){ - System.out.println(sWait); - return; - } - setButtonToStart(); - updateStatus(); - executeTests(); - } else { - try { - setToStopped(); - } catch (InterruptedException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.WARNING, null, ex); - } - } - }//GEN-LAST:event_jButtonRunActionPerformed - - /** - * reaction to Stop - */ - private void setButtonToStop() throws InterruptedException { - abort(); - this.jButtonRun.setToolTipText("Run enabled tests"); - jButtonRun.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/play-circled-64-000000.png"))); - this.jTable1.setEnabled(true); - this.jButtonOpen.setEnabled(true); - this.jButtonOptions.setEnabled(true); - this.jButtonSave.setEnabled(true); - } - - /** - * reaction to Start - */ - private void setButtonToStart() { - this.jButtonRun.setToolTipText("Stop tests"); - jButtonRun.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/stop-circled-64-000000.png"))); - this.jTable1.clearSelection(); - this.jTable1.setEnabled(false); - this.jButtonOpen.setEnabled(false); - this.jButtonOptions.setEnabled(false); - this.jButtonSave.setEnabled(false); - } - - /** - * enable/disable the tests in the table. - * - * @param bEnable if true, enable. Else, disable - * @param onlyIfSelected if true, only the tests with Selected checkbox full will be enables/disabled. - * If false, all tests will be enabled/disabled - * @param smartEnable if true, it enables/disables selected tests or, if none selected, it enables/disables all - */ - private void enableAll(boolean bEnable, boolean onlyIfSelected, boolean smartEnable){ - int iSelRows = jTable1.getSelectedRowCount(); - - if (onlyIfSelected || (smartEnable && iSelRows > 0)) {// if some rows are selected, check/uncheck selected rows - for (int row = 0; row <= jTable1.getRowCount() - 1; row++) { - for (int selRow = 0; selRow <= jTable1.getSelectedRowCount() - 1; selRow++) { - if (row == jTable1.getSelectedRows()[selRow]) { - jTable1.setValueAt(bEnable, row, 0); - } - } - } - } else {//if none of the rows are selected, check/uncheck all - for (int row = 0; row <= jTable1.getRowCount() - 1; row++) { - jTable1.setValueAt(bEnable, row, 0); - } - } - updateStatus(); - } - - private void enableAll(boolean bEnable){ - enableAll(bEnable, false, false); - } - - private void enableSelection(boolean bEnable){ - enableAll(bEnable, true, true); - } - - private void jCheckBoxEnableDisableActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxEnableDisableActionPerformed - enableAll(jCheckBoxEnableDisable.isSelected(), false, true); - }//GEN-LAST:event_jCheckBoxEnableDisableActionPerformed - - private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MouseClicked - if (this.jTable1.isEnabled()) { - if(evt.getButton() == java.awt.event.MouseEvent.BUTTON3){ - //right mouse click - //select row with right-click only if previously only one or zero rows were selected - if(jTable1.getSelectedRowCount()<2){ - Point cursor = evt.getPoint(); - int rowAtPoint = jTable1.rowAtPoint(cursor); - jTable1.setRowSelectionInterval(rowAtPoint, rowAtPoint); - } - //enable jMenuItemShowDetails depending on user privileges - this.jMenuItemShowDetails.setEnabled(Context.getInstance().getLevel()==AccessLevel.administrator); - //enable action Show Test Details only if one row is selected - this.jMenuItemShowDetails.setEnabled(jTable1.getSelectedRows().length == 1); - this.jMenuItemRunSingleTest.setEnabled(jTable1.getSelectedRows().length == 1); - jPopupMenuTable.show(jTable1, evt.getX(), evt.getY()); - } - else{ - //left mouse click - try { - switch (evt.getClickCount()) { - case 1: - break; - case 2: - openDetails(); - break; - } - //updateStatus(); - } catch (Exception ex) { - SwingUtils.showException(this, ex); - } - } - } - }//GEN-LAST:event_jTable1MouseClicked - - private void jTable1KeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTable1KeyReleased - updateStatus(); - }//GEN-LAST:event_jTable1KeyReleased - - private void jButtonMoveDownActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonMoveDownActionPerformed - moveDown(); - }//GEN-LAST:event_jButtonMoveDownActionPerformed - - private void jButtonMoveUpActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonMoveUpActionPerformed - moveUp(); - }//GEN-LAST:event_jButtonMoveUpActionPerformed - - private void jButtonOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOpenActionPerformed - this.loadListFilter(); - //this below is a test that can be useful to check that multithreading does work fine with passing variables - /* new Thread(() -> { - try { - //Object ret = eval("parallelize((run,('testLocalVar1',globals(),{'a':'21', 'b':34})), (run,('testLocalVar2',globals(),{'a':231, 'b':234})))"); - Object ret; - ret = eval("parallelize((run,('dummy',)))"); - ret = eval("parallelize((run,('testLocalVar1', None,{'a':21, 'b':34})), (run,('testLocalVar2', None, {'a':231, 'b':234})))"); - Object ret1 = ((ArrayList) ret).get(0); - Object ret2 = ((ArrayList) ret).get(1); - System.out.println(String.valueOf(ret1)); - System.out.println(String.valueOf(ret2)); - } catch (Exception ex) { - SwingUtils.showException(this, ex); - } - }).start(); - */ - }//GEN-LAST:event_jButtonOpenActionPerformed - - private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSaveActionPerformed - saveSettings(); - }//GEN-LAST:event_jButtonSaveActionPerformed - - private void jButtonOptionsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOptionsActionPerformed - //enable some menu items only for administrator access control level - this.jMenuItemEditScript.setVisible(Context.getInstance().getLevel()==AccessLevel.administrator); - this.jMenuItemNewTest.setVisible(Context.getInstance().getLevel()==AccessLevel.administrator); - this.jMenuItemNewDevice.setVisible(Context.getInstance().getLevel()==AccessLevel.administrator); - jPopupMenuOptions.show(jButtonOptions, 0, jButtonOptions.getHeight()); - }//GEN-LAST:event_jButtonOptionsActionPerformed - - private void jCheckBoxMenuShowSelectedTestsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuShowSelectedTestsActionPerformed - - boolean bShow = jCheckBoxMenuShowSelectedTests.getState(); - showEnabledTestsOnly(bShow); - jCheckBoxMenuShowSelectedTests1.setState(bShow); - }//GEN-LAST:event_jCheckBoxMenuShowSelectedTestsActionPerformed - - private void jMenuItemOpenLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemOpenLogActionPerformed - - String cmd; - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - cmd = "notepad.exe " + TESTS_LOG_DEFAULT_DIR; - } else { - cmd = "nedit " + TESTS_LOG_DEFAULT_DIR; - } - try { - Runtime.getRuntime().exec(cmd); - } catch (IOException ex) { - SwingUtils.showMessage(this, "jButtonOpenLogActionPerformed()", "jButtonOpenLogActionPerformed() " + ex.toString() - + " \nPlease open the file manually. \nFile dir: " + TESTS_LOG_DEFAULT_DIR); - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - }//GEN-LAST:event_jMenuItemOpenLogActionPerformed - - private void jMenuItemReloadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemReloadActionPerformed - - reloadTests(); - try { - cleanTests(); - cleanTests(); - } catch (IOException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - }//GEN-LAST:event_jMenuItemReloadActionPerformed - - private void jMenuItemNewTestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemNewTestActionPerformed - - openNewTestEditor("Test"); - }//GEN-LAST:event_jMenuItemNewTestActionPerformed - - private void jMenuItemNewDeviceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemNewDeviceActionPerformed - - openNewTestEditor("Device"); - }//GEN-LAST:event_jMenuItemNewDeviceActionPerformed - - private void jCheckBoxMenuShowSelectedTests1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuShowSelectedTests1ActionPerformed - - boolean bShow = jCheckBoxMenuShowSelectedTests1.getState(); - showEnabledTestsOnly(bShow); - jCheckBoxMenuShowSelectedTests.setState(bShow); - }//GEN-LAST:event_jCheckBoxMenuShowSelectedTests1ActionPerformed - - private void jMenuItemReload1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemReload1ActionPerformed - - reloadTests(); - try { - cleanTests(); - cleanTests(); - } catch (IOException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - }//GEN-LAST:event_jMenuItemReload1ActionPerformed - - private void jMenuItemShowDetailsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemShowDetailsActionPerformed - try { - - openDetails(); - } catch (Exception ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - }//GEN-LAST:event_jMenuItemShowDetailsActionPerformed - - private void jMenuItemSelectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemSelectAllActionPerformed - - enableAll(true); - }//GEN-LAST:event_jMenuItemSelectAllActionPerformed - - private void jMenuItemSelectNoneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemSelectNoneActionPerformed - - enableAll(false); - }//GEN-LAST:event_jMenuItemSelectNoneActionPerformed - - private void jMenuItemSelectSelectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemSelectSelectionActionPerformed - - enableSelection(true); - }//GEN-LAST:event_jMenuItemSelectSelectionActionPerformed - - private void jMenuItemDeselectSelectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDeselectSelectionActionPerformed - - enableSelection(false); - }//GEN-LAST:event_jMenuItemDeselectSelectionActionPerformed - - private void jMenuItemEditScriptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEditScriptActionPerformed - - int rows[] = jTable1.getSelectedRows(); - for(int row=0 ; row<rows.length ; row++){ - try { - String sTestPath = String.valueOf(jTable1.getValueAt(rows[row], COL.TESTPATH.ordinal())).replace("\\", File.separator); - System.out.println("Test Path: " + sTestPath); - ((View)App.getInstance().getMainFrame()).openScript(sTestPath); - } catch (IOException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - } - }//GEN-LAST:event_jMenuItemEditScriptActionPerformed - - private void jMenuItemRunSingleTestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemRunSingleTestActionPerformed - - enableAll(false); - enableSelection(true); - jButtonRunActionPerformed( evt); - }//GEN-LAST:event_jMenuItemRunSingleTestActionPerformed - - private void jMenuLoadCustomPanelMenuSelected(javax.swing.event.MenuEvent evt) {//GEN-FIRST:event_jMenuLoadCustomPanelMenuSelected - - List<String> menuList = getCustomPanels(); - jMenuLoadCustomPanel.removeAll(); - for(int u = 0; u < menuList.size(); u++){ - - JMenuItem menuItem = new JMenuItem(menuList.get(u)); - menuItem.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - loadCustomPanel(((JMenuItem)evt.getSource()).getText()); - } - }); - jMenuLoadCustomPanel.add(menuItem); - } - }//GEN-LAST:event_jMenuLoadCustomPanelMenuSelected - - private void jButtonXActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonXActionPerformed - - closeCustomPanel(); - }//GEN-LAST:event_jButtonXActionPerformed - - private void jLabelCustomPanelNameMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jLabelCustomPanelNameMouseClicked - - if(evt.getButton() == java.awt.event.MouseEvent.BUTTON3){ - //right mouse click - jPopupMenuCustom.show(jLabelCustomPanelName, evt.getX(), evt.getY()); - } - }//GEN-LAST:event_jLabelCustomPanelNameMouseClicked - - private void jMenuItemCustomCloseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemCustomCloseActionPerformed - this.closeCustomPanel(); - }//GEN-LAST:event_jMenuItemCustomCloseActionPerformed - - private void jMenuItemDeselectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDeselectActionPerformed - - this.jTable1.clearSelection(); - }//GEN-LAST:event_jMenuItemDeselectActionPerformed - - //<editor-fold defaultstate="collapsed" desc="Witget Variables declaration"> - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton jButtonMoveDown; - private javax.swing.JButton jButtonMoveUp; - private javax.swing.JButton jButtonOpen; - private javax.swing.JButton jButtonOptions; - private javax.swing.JButton jButtonRun; - private javax.swing.JButton jButtonSave; - private javax.swing.JButton jButtonX; - private javax.swing.JCheckBox jCheckBoxEnableDisable; - private javax.swing.JCheckBoxMenuItem jCheckBoxMenuShowSelectedTests; - private javax.swing.JCheckBoxMenuItem jCheckBoxMenuShowSelectedTests1; - private javax.swing.JLabel jLabelCustomPanelName; - private javax.swing.JMenu jMenuAdvanced; - private javax.swing.JMenuItem jMenuItemCustomClose; - private javax.swing.JMenuItem jMenuItemDeselect; - private javax.swing.JMenuItem jMenuItemDeselectSelection; - private javax.swing.JMenuItem jMenuItemEditScript; - private javax.swing.JMenuItem jMenuItemNewDevice; - private javax.swing.JMenuItem jMenuItemNewTest; - private javax.swing.JMenuItem jMenuItemOpenLog; - private javax.swing.JMenuItem jMenuItemReload; - private javax.swing.JMenuItem jMenuItemReload1; - private javax.swing.JMenuItem jMenuItemRunSingleTest; - private javax.swing.JMenuItem jMenuItemSelectAll; - private javax.swing.JMenuItem jMenuItemSelectNone; - private javax.swing.JMenuItem jMenuItemSelectSelection; - private javax.swing.JMenuItem jMenuItemShowDetails; - private javax.swing.JMenu jMenuLoadCustomPanel; - private javax.swing.JMenu jMenuSelect; - private javax.swing.JPanel jPanel1; - private javax.swing.JPanel jPanelButtons; - private javax.swing.JPanel jPanelCustom; - private javax.swing.JPanel jPanelCustomFrame; - private javax.swing.JPanel jPanelCustomHeader; - private javax.swing.JPanel jPanelSelection; - private javax.swing.JPanel jPanelTopCommands; - private javax.swing.JPopupMenu jPopupMenuConfigs; - private javax.swing.JPopupMenu jPopupMenuCustom; - private javax.swing.JPopupMenu jPopupMenuOptions; - private javax.swing.JPopupMenu jPopupMenuTable; - private javax.swing.JScrollPane jScrollPane2; - private javax.swing.JPopupMenu.Separator jSeparator1; - private javax.swing.JPopupMenu.Separator jSeparator2; - private javax.swing.JPopupMenu.Separator jSeparator3; - private javax.swing.JPopupMenu.Separator jSeparator4; - private javax.swing.JPopupMenu.Separator jSeparator5; - private javax.swing.JPopupMenu.Separator jSeparator6; - private javax.swing.JPopupMenu.Separator jSeparator7; - private javax.swing.JTable jTable1; - // End of variables declaration//GEN-END:variables - //</editor-fold> - - /** - * reload tests from files - */ - public void reloadTests() { - try { - loadTests(); - } catch (IOException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - } - - /** - * filter table: show only rows selected (checkbox checked) for running. - * - * @param show if false, show all tests. If true, show only selected tests. - */ - public void showEnabledTestsOnly(boolean show) { - String filter; - if (show) { - filter ="true"; - } else { - filter =""; - } - filterTests(filter); - //store filter in the properties - saveProperties("showEnabledTestsOnly", filter); - //if only enabled tests are visible, disable the move buttons - this.jButtonMoveUp.setEnabled(!show); - this.jButtonMoveDown.setEnabled(!show); - //check related checkboxes - jCheckBoxMenuShowSelectedTests.setSelected(show); - jCheckBoxMenuShowSelectedTests1.setSelected(show); - } - - /** - * open New Test/Device editor panel - * - * @param type can be "Device" or "Test". Either device or test will be created. - */ - public void openNewTestEditor(String type){ - try { - JDialog dlg = new JDialog(getView(), "New "+ type, true); - //create a class to visualise the details panel - Class testingListDetailsClass = getContext().getClassByName("NewTest"); - JPanel detailsPanel = (JPanel) testingListDetailsClass.getConstructor(new Class[]{String.class}).newInstance(new Object[]{type}); - dlg.getContentPane().add(detailsPanel); - dlg.pack(); - dlg.setVisible(true); - } catch (Exception ex) { - System.out.println("animateCustomPanel(): "+String.valueOf(ex)); - } - } - - /** - * filter table: show only rows containing the specified text. - * - * @param filterText text for filtering; can be a regex pattern. - */ - private void filterTests(String filterText) { - TableModel model = new DefaultTableModel() { - public Class getColumnClass(int column) { - Class returnValue; - if ((column >= 0) && (column < getColumnCount())) { - returnValue = getValueAt(0, column).getClass(); - } else { - returnValue = Object.class; - } - return returnValue; - } - }; - model = jTable1.getModel(); - - final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); - jTable1.setRowSorter(sorter); - if (filterText.length() == 0) { - sorter.setRowFilter(null); - } else { - try { - sorter.setRowFilter(RowFilter.regexFilter(filterText)); - } catch (PatternSyntaxException pse) { - System.err.println("Bad regex pattern"); - } - } - } - - /** - * return whether or not the tests can run (Run launched by the user) - * - * @return status of run button. True = tests launching sequence is running - */ - public boolean isTestRunAllowed() { - return (this.jButtonRun.getToolTipText().equals("Stop tests") && countPendingTests() > 0); - } - - /** - * move selected rows up in table - * - */ - private void moveUp() { - DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); - int[] rows = jTable1.getSelectedRows(); - try{ - if (rows[0] - 1 >= 0) { - jTable1.setAutoCreateRowSorter(false); - model.moveRow(rows[0], rows[rows.length - 1], rows[0] - 1); - jTable1.setAutoCreateRowSorter(true); - jTable1.setRowSelectionInterval(rows[0] - 1, rows[rows.length - 1] - 1); - } - } - catch(Exception ex){ - //fail silently - } - } - - /** - * move selected rows down in table - */ - private void moveDown() { - DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); - int[] rows = jTable1.getSelectedRows(); - try{ - if (rows[rows.length - 1] < jTable1.getRowCount()) { - jTable1.setAutoCreateRowSorter(false); - model.moveRow(rows[0], rows[rows.length - 1], rows[0] + 1); - jTable1.setAutoCreateRowSorter(true); - jTable1.setRowSelectionInterval(rows[0] + 1, rows[rows.length - 1] + 1); - } - } - catch(Exception ex){ - //fail silently - } - } - - /** - * open details of the selected row in a new panel - * - * @throws exception - */ - private void openDetails() throws Exception { - //pick details from the clicked row - int row = jTable1.getSelectedRow(); - String sDeviceName = jTable1.getValueAt(row, COL.DEVICENAME.ordinal()).toString(); - String sTestName = jTable1.getValueAt(row, COL.TESTNAME.ordinal()).toString(); - String sTestPath = jTable1.getValueAt(row, COL.TESTPATH.ordinal()).toString(); - String sTestCaseName = jTable1.getValueAt(row, COL.TESTSUITE.ordinal()).toString(); - String sTestDescription = getTestDescription(sTestPath); - String sDevicePath = jTable1.getValueAt(row, COL.DEVICEPATH.ordinal()).toString(); - System.out.println("sDevicePath: "+sDevicePath); - System.out.println("sTestPath: "+sTestPath); - String sDeviceDescription = jTable1.getValueAt(row, COL.DEVICEDESCR.ordinal()).toString(); - String sLastResult = jTable1.getValueAt(row, COL.RESULT.ordinal()).toString(); - String sResultTime = jTable1.getValueAt(row, COL.TIME.ordinal()).toString(); - String sTestHelp = String.valueOf(jTable1.getValueAt(row, COL.TESTHELP.ordinal())); - HashMap mParameters = getParameters(sTestPath, sDevicePath); - //create map for passing details to Details Panel - HashMap details = new HashMap(); - details.put("deviceName", sDeviceName); - details.put("deviceDescription", sDeviceDescription); - details.put("devicePath", sDevicePath); - details.put("testDescription", sTestDescription); - details.put("testSuite", sTestCaseName); - details.put("testName", sTestName); - details.put("testResult", sLastResult); - details.put("time", sResultTime); - details.put("parameters", mParameters); - details.put("testHelp", sTestHelp); - details.put("testPath", sTestPath); - //open details panel - JDialog dlg = new JDialog(getView(), "Test Details - " + sTestName, true); - //create a class to visualise the details panel - Class testingListDetailsClass = getContext().getClassByName("TestingListDetails"); - JPanel detailsPanel = (JPanel) testingListDetailsClass.getConstructor(new Class[]{HashMap.class}).newInstance(new Object[]{details}); - - dlg.getContentPane().add(detailsPanel); - //dlg.add(new TestingListDetails()); - dlg.pack(); - dlg.setVisible(true); - } - - /** - * open details of the selected row in a new panel - * - * @throws exception - */ - private void openListEditor() throws Exception { - - JDialog dlg = new JDialog(getView(), "Add/remove tests", true); - //create a class to visualise the edit panel - Class editTestingListClass = getContext().getClassByName("EditTestingList"); - JPanel detailsPanel = (JPanel) editTestingListClass.getConstructor(new Class[]{TableModel.class}).newInstance(jTable1.getModel()); - - dlg.getContentPane().add(detailsPanel); - //dlg.add(new TestingListDetails()); - dlg.pack(); - dlg.setVisible(true); - } - - - /** - * put the test result in table - * - * @param deviceName name of the device to search in table - * @param testPath path of the test to search in table - * @param res String result returned by the test - * @param status String status returned by the test - * @return int index of the row of the device in table - */ - public int showResult(String deviceName, String testPath, String res, String status) throws InterruptedException { - int rowD = -1; - testPath = testPath.replace("\\\\", "\\"); - String sTestName = testPath; - //getContext().getDataManager().appendLog(str(log)); - - //System.out.println("Looking for: deviceName: " + deviceName + "; testPath: " + testPath + " in table."); - - String sStatus; - if (status == "true") { - sStatus = TestStatus.SUCCESS.toString(); - } else if (status == "false") { - sStatus = TestStatus.FAILURE.toString(); - } else { - sStatus = status; - } - //search for device name in table - for (int row = 0; row <= jTable1.getRowCount() - 1; row++) { - if (deviceName.equals(jTable1.getValueAt(row, COL.DEVICENAME.ordinal())) - && testPath.equals(String.valueOf(jTable1.getValueAt(row, COL.TESTPATH.ordinal())).replace("\\", File.separator))) { - rowD = row; - sTestName = jTable1.getValueAt(rowD, COL.TESTNAME.ordinal()).toString(); - break; - } - } - ImageIcon icon = new ImageIcon(); - switch (sStatus) { - case "Success": - icon = TestStatus.SUCCESS.Icon(); - logger.log(Level.INFO, sStatus + " - Device: " + deviceName + "; Test: " + sTestName + "; Result: " + res); - log("INF - " + sStatus + " - Device: " + deviceName + "; Test: " + sTestName + "; Result: " + res); - break; - case "Failure": - icon = TestStatus.FAILURE.Icon(); - logger.log(Level.SEVERE, sStatus + " - Device: " + deviceName + "; Test: " + sTestName + "; Result: " + res); - break; - case "Running": - icon = TestStatus.RUNNING.Icon(); - //logger.log(Level.INFO, "Running Test: " + sTestName + "."); - break; - } - if (rowD >= 0) { - jTable1.setValueAt(icon, rowD, COL.ICON.ordinal()); - jTable1.setValueAt(getNow(), rowD, COL.TIME.ordinal()); - jTable1.setValueAt(res, rowD, COL.RESULT.ordinal()); - jTable1.setValueAt(sStatus, rowD, COL.STATUS.ordinal()); - } else { - logger.log(Level.SEVERE, "Cant find Test: " + testPath + " in table."); - } - //check if there are still pending tests. If not, set the status of the tool to Stopped. - if (countPendingTests() == 0 && countRunningTests() == 0) { - setToStopped(); - } - updateResultSummary(); - return rowD; - } - - /** - * show a summary icon indicating if all tests succeeded - * or if at least one failed - */ - public void updateResultSummary() { - ImageIcon summaryIcon = null; - if(countRunningTests()>0){ - summaryIcon = TestStatus.RUNNING.Icon(); - } else if(countFailureTests()>0){ - summaryIcon = TestStatus.FAILURE.Icon(); - } else if(countSuccessTests()>0){ - summaryIcon = TestStatus.SUCCESS.Icon(); - } - //System.out.println("successful: "+countSuccessTests() + " Failed: "+countSuccessTests() ); - setIcon(jTable1, COL.ICON.ordinal(), summaryIcon, ""); - } - - /** - * return the amount of tests currently in Pending state - * - * @return int counter of pending tests - */ - public int countPendingTests() { - return testsStatusCount(TestStatus.PENDING); - } - - /** - * return the amount of tests currently in Running state - * - * @return int counter of running tests - */ - public int countRunningTests() { - return testsStatusCount(TestStatus.RUNNING); - } - - /** - * return the amount of tests currently in Success state - * - * @return int counter of successful tests - */ - public int countSuccessTests() { - return testsStatusCount(TestStatus.SUCCESS); - } - - /** - * return the amount of tests currently in Failure state - * - * @return int counter of failed tests - */ - public int countFailureTests() { - return testsStatusCount(TestStatus.FAILURE); - } - - /** - * returns the amount of tests currently in "status" state - * - * @param status type of status to count - * @return int counter with occurrences of the status - */ - private int testsStatusCount(TestStatus status) { - String sStatus; - boolean bSelected; - int iTestsCount = 0; - for (int row = 0; row < jTable1.getRowCount(); row++) { - bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal()); - sStatus = jTable1.getValueAt(row, COL.STATUS.ordinal()).toString(); - //System.out.println("sStatus: " +sStatus); - if (bSelected && sStatus.equals(status.toString())) { - iTestsCount++; - } - } - return iTestsCount; - } - - /** - * set the tests to stopped - */ - private void setToStopped() throws InterruptedException { - //No more tests to play. Stop - setButtonToStop(); - logger.log(Level.INFO, "End of tests."); - } - - /** - * get the first test currently in progress - * - * @return properties of the test in progress: {deviceName,testPath} - */ - public String[] getTestInProgress() { - String[] dsTestProperties = {"", ""}; - //search for device name in table - try { - for (int row = 0; row <= jTable1.getRowCount() - 1; row++) { - if (jTable1.getValueAt(row, COL.STATUS.ordinal()).toString().equals(TestStatus.RUNNING.toString())) { - dsTestProperties[0] = jTable1.getValueAt(row, COL.DEVICENAME.ordinal()).toString(); - dsTestProperties[1] = jTable1.getValueAt(row, COL.TESTPATH.ordinal()).toString().replace("\\", File.separator); - break; - } - } - } catch (Exception ex) { - this.setToStopped(); - SwingUtils.showMessage(this, "getTestInProgress()", ex.toString()); - } finally { - return dsTestProperties; - } - } - - /** - * Stop all the tests in progress and return to idle state (no further tests are launched) - * - * @param resultMessage the message that will be shown as Result of each stopped test - */ - public void stopAll(String resultMessage) throws InterruptedException{ - setToStopped(); - String testInProgress[] = getTestInProgress(); - while(testInProgress[0]!=""){ - testInProgress = getTestInProgress(); - showResult(testInProgress[0], testInProgress[1], resultMessage, "false"); - } - try { - Object ret = eval("log('Tests interrupted by user')"); - } catch (Exception ex) { - System.out.println("animateCustomPanel(): "+String.valueOf(ex)); - } - } - - /** - * return the status of the specified test name for specified device name - * - * @param deviceName name of the device - * @param testPath path of the test file - * @return String containing the result returned by the test - */ - public String getResult(String deviceName, String testPath) { - String sStatus = ""; - int rowD = -1, colT = -1; - //search for device name in table - for (int row = 0; row <= jTable1.getRowCount() - 1; row++) { - if (deviceName.equals(jTable1.getValueAt(row, COL.DEVICENAME.ordinal()))) { - rowD = row; - break; - } - } - if (rowD >= 0) { - //search for test in table - if (testPath.equals(String.valueOf(jTable1.getValueAt(rowD, COL.TESTPATH.ordinal())).replace("\\", File.separator))) { - colT = COL.TESTNAME.ordinal(); - } - } - //get the test result - if (colT >= 0 && rowD >= 0) { - sStatus = jTable1.getValueAt(rowD, COL.STATUS.ordinal()).toString(); - } - return sStatus; - } - - /** - * visualise test status (columns status and icon) - */ - public void updateStatus() { - String sStatus; - boolean bSelected; - ImageIcon icon = null; - String sStart; - for (int row = 0; row <= jTable1.getRowCount() - 1; row++) { - bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal()); - sStart = String.valueOf(jTable1.getValueAt(row, COL.STARTSEQUENCE.ordinal())); - if (bSelected) { - sStatus = TestStatus.PENDING.toString(); - icon = TestStatus.PENDING.Icon(); - if (sStart == "") { - sStart = StartSequence.AFTER.toString(); - } - } else { - sStatus = TestStatus.DISABLED.toString(); - icon = TestStatus.DISABLED.Icon(); - sStart = ""; - } - jTable1.setValueAt(bSelected, row, COL.CHECK.ordinal()); - jTable1.setValueAt(icon, row, COL.ICON.ordinal()); - jTable1.setValueAt(sStatus, row, COL.STATUS.ordinal()); - jTable1.setValueAt(sStart, row, COL.STARTSEQUENCE.ordinal()); - } - updateResultSummary(); - } - - /** - * launch the execution of the tests - */ - public void executeTests() { - RunTest runTest = new RunTest(); - Thread t = new Thread(runTest); - t.start(); - } - - /** - * tests run multithreaded - */ - public class RunTest implements Runnable { - - private HashMap mParameters; - //private HashMap<String,Object> args; - private HashMap<String, HashMap> hTests ; - - /** - * - */ - public RunTest() { - //System.out.println("A0"); - } - - public void run() { - // code in the other thread, can reference "var" variable - loadCustomPanel(getCustomPanel()); - try { - executeTest(0); - } catch (InterruptedException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.WARNING, null, ex); - } - } - - /** - * execute the selected tests in the list, starting from the position - * - * @param position row number from which to start executing tests - */ - private void executeTest(int position) throws InterruptedException { - boolean bSelected = false; - String sStartSequence, sStatus; - int[] selectedTestsRows = {}; - //scan through the table starting from 'position' and execute the first selected test found - int row = 0;// position; - if (row < jTable1.getRowCount()) { - for (row = position; row < jTable1.getRowCount(); row++) { - bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal()); - sStartSequence = jTable1.getValueAt(row, COL.STARTSEQUENCE.ordinal()).toString(); - sStatus = jTable1.getValueAt(row, COL.STATUS.ordinal()).toString(); - //collect tests to be launched in parallel - //the test must be: selected, set as start with previous, pending. - //alternatively, the test must be: selected, first of the list. - //System.out.println(String.valueOf(row) + "\t" + String.valueOf(bSelected) + "\t" + String.valueOf(selectedTestsRows.length) + "\t" + sStartSequence + "\t" + sStatus); - if (bSelected - && sStatus.equals(TestStatus.PENDING.toString()) - && (selectedTestsRows.length == 0 || //the test must be: selected, pending, first of the list. - sStartSequence.equals(StartSequence.TOGETHER.toString()))) { //or the test must be: selected, pending, set as start with previous - selectedTestsRows = append(selectedTestsRows, row); - } else if (bSelected - && sStatus.equals(TestStatus.PENDING.toString()) &&//if this test must be executed... - selectedTestsRows.length > 0 && //but there are already tests to be executed in parallel.... - (sStartSequence.equals(StartSequence.AFTER.toString()))) { //...and this test must be executed in series, then stop searching - break; - } - } - //if the user pressed Stop, or error, exit from run: - if(!isTestRunAllowed()) - return; - if (selectedTestsRows.length > 0) { //at least one test is selected: launch it (or them) - System.out.println("\n===================================================\n"); - executeParallelTestsGroup(selectedTestsRows); //last execution did not find a test file. Continue with next execution - executeTest(position + 1); - } else {//no tests were selected. end. - setToStopped(); - } - } - } - - /** - * build a HashMap containing the items picked from a specific table row. - * - * @param row the row whose items will fill the HashMap - * @return the HashMap containing the items picked from the specified table row. - */ - private HashMap buildMapFromTableRow(int row) { - String sDeviceName = jTable1.getValueAt(row, COL.DEVICENAME.ordinal()).toString(); - String sDevicePath = jTable1.getValueAt(row, COL.DEVICEPATH.ordinal()).toString().replace("\\", File.separator); - String sTestName = jTable1.getValueAt(row, COL.TESTNAME.ordinal()).toString(); - String sTestPath = jTable1.getValueAt(row, COL.TESTPATH.ordinal()).toString().replace("\\", File.separator); -// HashMap mParameters = buildParametersMap(String.valueOf(jTable1.getValueAt(row, COL.TESTPARAMS.ordinal()))); - //get the parameters directly frm he config file - HashMap mParameters = getParameters(sTestPath, sDevicePath); - HashMap testArgs = new HashMap(); - System.out.println("mParameters: " + mParameters.toString()); - //args.put("ret", ""); - testArgs.put(testArgNames.PARAMETERS.toString(), mParameters); - testArgs.put(testArgNames.TEST.toString(), sTestName); - testArgs.put(testArgNames.DEVICE.toString(), sDeviceName); - testArgs.put(testArgNames.TEST_PATH.toString(), sTestPath); - testArgs.put(testArgNames.STATUS.toString(), false); - - return testArgs; - } - - /** - * convert HashMap string separators to python dictionary string - * separators - * - * @param sParameters string coming from HashMap conaining the list of - * parameters to be passed to the test script. Example: - * {repeatTimes={description="Repeat N times", value="1"}, - * midPoint={description="Middle point A", value="41.0"}, - * spanFromMidPoint={description="B steps around middle point A", - * value="2.0"}} - * @return string of dictionary in python syntax. This can be passed to - * the python test script. Example of output: - * {'repeatTimes':{'description':'Repeat N - * times','value':'1'},'midPoint':{'description':'Middle point - * A','value':'41.0'},'spanFromMidPoint':{'description':'B steps around - * middle point A','value':'2.0'} - */ - private String convertParametersMapToPythonMap(String sParameters) { - String sPythonParams = sParameters; - sPythonParams = sPythonParams.replace(", ", ","); - sPythonParams = sPythonParams.replace(" ,", ","); - sPythonParams = sPythonParams.replace("{{", "#@"); - sPythonParams = sPythonParams.replace("\"}}", "@#"); - sPythonParams = sPythonParams.replace("\"},", "@%#"); - sPythonParams = sPythonParams.replace(",{", "#%@"); - sPythonParams = sPythonParams.replace("={", "^%&"); - sPythonParams = sPythonParams.replace("=}", "&%^"); - sPythonParams = sPythonParams.replace("\",", "','"); - sPythonParams = sPythonParams.replace("{", "{'"); - sPythonParams = sPythonParams.replace("\"}", "'}"); - sPythonParams = sPythonParams.replace("=\"", "':'"); - sPythonParams = sPythonParams.replace("^%&", "':{'"); - sPythonParams = sPythonParams.replace("&%^", "'}:'"); - sPythonParams = sPythonParams.replace("#@", "{{'"); - sPythonParams = sPythonParams.replace("@#", "'}}"); - sPythonParams = sPythonParams.replace("@%#", "'},'"); - sPythonParams = sPythonParams.replace("#%@", "',{'"); - return sPythonParams; - } - - /** - * start all the tests in the array rowsToExecute. all tests in the - * listed row indexes will be started at the same time. - * - * @param rowsToExecute array of indexes relative to the test rows in - * the table. The indexes in the array will execute the test in - * corresponding row - * @return return value: 0 means ok, <0 means problem - */ - private int executeParallelTestsGroup(int[] rowsToExecute) throws InterruptedException { - // System.out.println("Rows = " + Convert.arrayToString(rowsToExecute, " - " , 10)); - hTests = new HashMap(); - int iRet = -1; - HashMap args2 = new HashMap(); //this is the global map that will contain one map per test. - HashMap testArgs; //this is the map for a test. - String sTestName = "", sDeviceName = "", sTestPath = "", sTestID = ""; //sTestID is the compination of device name + test path - for (int row : rowsToExecute) { - //System.out.println(String.valueOf(row) + "\t" + sDeviceName + "\t" + sTestName + "\t" + sTestCaseName + "\t" + String.valueOf(rowsToExecute.length)); - try { - testArgs = buildMapFromTableRow(row); - sTestName = (String) testArgs.get(testArgNames.TEST.toString()); - sTestPath = (String) testArgs.get(testArgNames.TEST_PATH.toString()); - sDeviceName = (String) testArgs.get(testArgNames.DEVICE.toString()); - mParameters = (HashMap) testArgs.get(testArgNames.PARAMETERS.toString()); - sTestID = sDeviceName+"|"+sTestPath; - File f = new File(sTestPath); - if (!f.exists() || f.isDirectory()) { - logger.log(Level.SEVERE, "Cannot find test script: " + sTestPath); - showResult(sDeviceName, sTestPath, "Cannot find test script: " + sTestPath, TestStatus.FAILURE.toString()); - hTests = args2; - continue; - } - //if the user pressed Stop, exit from run: - if(!isTestRunAllowed()) - return iRet; - showResult(sDeviceName, sTestPath, "Test running", TestStatus.RUNNING.toString()); - //launch the test - if (!mParameters.isEmpty()) { - String msg = "Running test '" + sTestName + "' for device '" + sDeviceName + "' with the following parameters: " + mParameters.toString(); - logger.log(Level.INFO, msg); - System.out.println(msg); - } else { - String msg = "Running Test '" + sTestName + "'. No parameters found."; - logger.log(Level.INFO, msg); - System.out.println(msg); - } - //System.out.println("sTestID: " + sTestID); - Object retargs = args2.put(sTestID, testArgs); - //System.out.println("retargs: " + retargs); - hTests = args2; - iRet = 0; - } catch (Exception ex) { - ex.printStackTrace(); - SwingUtils.showMessage(TestingList.this, "executeTest()", ex.toString()); - logger.log(Level.SEVERE, ex.toString()); - showResult(sDeviceName, sTestPath, ex.toString(), TestStatus.FAILURE.toString()); - setToStopped(); - } - } - // System.out.println(hTests); - try { - int iLastExecutedTestIndex = -1; - final String sParallelizeBegin = "(run,(str('"; - final String sParallelizeEnd = "'),))"; - String sParallelizeArguments; - try { - String sParallelizeCommand = "parallelize("; - int i = 0; - int iTotalEntries = hTests.entrySet().size(); - HashMap args = new HashMap(); - //System.out.println("hTests: "+hTests.entrySet().toString()); - if(hTests.isEmpty()) return iRet; - for (Map.Entry<String, HashMap> hTest : hTests.entrySet()) { - sTestPath = (String) hTest.getValue().get(testArgNames.TEST_PATH.toString()); - sTestPath = sTestPath.replace("\\", "\\\\"); - sParallelizeCommand = sParallelizeCommand + "(run,(str('" + sTestPath; - sParallelizeArguments = "None, {'parameters':" + convertParametersMapToPythonMap(hTest.getValue().get("parameters").toString()) - + ",'test':'" + hTest.getValue().get(testArgNames.TEST.toString()) - + "','device':'" + hTest.getValue().get(testArgNames.DEVICE.toString()) - + "','status':'" + hTest.getValue().get(testArgNames.STATUS.toString()) + "'}"; - sParallelizeCommand = sParallelizeCommand + "')," + sParallelizeArguments; - i++; - if (i < iTotalEntries) { - sParallelizeCommand = sParallelizeCommand + ")),"; //between each "run" command - } else { - sParallelizeCommand = sParallelizeCommand + ")))"; //very last part of command "parallelize" - } - } - //animate the custom panel (if present) - animateCustomPanel(sDeviceName); - //System.out.println("sParallelizeCommand: " +sParallelizeCommand); - //run test(s) - Object ret = eval(sParallelizeCommand); - //System.out.println(ret); - String sTestResult, sTestStatus; - if(ret == null){ - SwingUtils.showMessage(TestingList.this, "executeParallelTestsGroup()", "The test script(s) did not return any feedback."); - System.out.println("The test script(s) did not return any feedback."); - } - //scan through all return mappings of all run tests - for (Object oTestRet : (ArrayList) ret) { - //check if the mapping of the selected test has all expected return values - if (((List<PyList>) oTestRet).size() >= 4) { - //extract return data of the current test - sTestPath = String.valueOf(((List<PyList>) oTestRet).get(0)); - sDeviceName = String.valueOf(((List<PyList>) oTestRet).get(1)); - sTestResult = String.valueOf(((List<PyList>) oTestRet).get(2)); - sTestStatus = String.valueOf(((List<PyList>) oTestRet).get(3)); - sTestID = sDeviceName+"|"+sTestPath; - //from the map of executed tests, get the test name (key is test path) - HashMap<String, HashMap> hTest = hTests.get(sTestID); - sTestName = String.valueOf(hTest.get(testArgNames.TEST.toString())); - } else { //problem, the test script does not return all the expected return values - String sErrorText = "Test " + sTestPath + " did not return all required return values"; - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, sErrorText); - SwingUtils.showMessage(TestingList.this, "executeParallelTestsGroup()", sErrorText); - System.out.println(String.valueOf(sErrorText)); - //try to fetch at least first element of returned map. If fails, it will go to catch - sTestID = String.valueOf(((List<PyList>) oTestRet).get(0)); - sTestStatus = sErrorText; - sTestResult = "false"; - HashMap<String, HashMap> hTest = hTests.get(sTestID); - sDeviceName = String.valueOf(hTest.get(testArgNames.DEVICE.toString())); - sTestName = String.valueOf(hTest.get(testArgNames.TEST.toString())); - } - //System.out.println("Result: " + sDeviceName + "|" + sTestPath + "|" + sTestResult + "|" + sTestStatus); - iLastExecutedTestIndex = showResult(sDeviceName, sTestPath, sTestResult, sTestStatus); - } - } catch (StatementException intEx) { - intEx.printStackTrace(); - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, intEx); - System.out.println("User interrupted test! |"+ sDeviceName+"|"+ sTestPath+"|"+ String.valueOf(intEx)); - stopAll("Test stopped by user"); - //showResult(sDeviceName, sTestPath, "User interrupted test", "false"); - //setToStopped(); - } catch (ClassCastException ccex) { - ccex.printStackTrace(); - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ccex); - SwingUtils.showMessage(TestingList.this, "executeParallelTestsGroup()", ccex.toString()); - //System.out.println(String.valueOf(ccex)); - if (!sDeviceName.isEmpty()) { - showResult(sDeviceName, sTestPath, ccex.toString(), TestStatus.FAILURE.toString()); - } - }catch (Exception ex) { - ex.printStackTrace(); - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - SwingUtils.showMessage(TestingList.this, "executeParallelTestsGroup()", ex.toString()); - System.out.println(String.valueOf(ex)); - showResult(sDeviceName, sTestPath, ex.toString(), TestStatus.FAILURE.toString()); - } - } catch (Exception ex) { - ex.printStackTrace(); - SwingUtils.showMessage(TestingList.this, "executeParallelTestsGroup(), run thread", ex.toString()); - logger.log(Level.SEVERE, ex.toString()); - setToStopped(); - } - return iRet; - } - } - - /** - * table management (hide internal columns, size, etc) - */ - private void buildTable() { - String sDate = getNow(); - DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); - jTable1.setModel(model); - - //Set up the combo box editor for the Start Sequence cells. - JComboBox comboBox = new JComboBox(); - comboBox.addItem(StartSequence.AFTER.toString()); - comboBox.addItem(StartSequence.TOGETHER.toString()); - jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setCellEditor(new DefaultCellEditor(comboBox)); - //Set up tool tips for the sequence cells. - DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); - renderer.setToolTipText("Click for options"); - jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setCellRenderer(renderer); - jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setPreferredWidth(130); - jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setMaxWidth(130); - jTable1.getColumnModel().getColumn(COL.ICON.ordinal()).setMaxWidth(27); - jTable1.getColumnModel().getColumn(COL.CHECK.ordinal()).setMaxWidth(27); - jTable1.getColumnModel().getColumn(COL.DEVICENAME.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.DEVICENAME.ordinal()).setMaxWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTNAME.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTNAME.ordinal()).setMaxWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTSUITE.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTSUITE.ordinal()).setMaxWidth(200); - jTable1.getColumnModel().getColumn(COL.STATUS.ordinal()).setPreferredWidth(90); - jTable1.getColumnModel().getColumn(COL.STATUS.ordinal()).setMaxWidth(90); - jTable1.getColumnModel().getColumn(COL.TIME.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.TIME.ordinal()).setMaxWidth(200); - hideColumn(COL.DEVICEDESCR); - hideColumn(COL.DEVICEPATH); - hideColumn(COL.TESTPATH); - hideColumn(COL.TESTDESCR); - hideColumn(COL.TESTPARAMS); - hideColumn(COL.TESTHELP); - jTable1.setAutoCreateRowSorter(true); - updateStatus(); - } - - /** - * hide a specific column - * @param column column to hide - */ - private void hideColumn(COL column) { - jTable1.getColumnModel().getColumn(column.ordinal()).setMinWidth(0); - jTable1.getColumnModel().getColumn(column.ordinal()).setMaxWidth(0); - } - - /** - * append test info (see parameters) to table - * - * @param deviceName - * @param deviceDescription - * @param testSuite - * @param testName - * @param testParams string of parameters. See buildParametersMap() for - * details - * @param testDescription - * @param testHelp - * - */ - private void addToTable(String deviceName, - String deviceDescription, - String devicePath, - String testSuite, - String testName, - String testParams, - String testDescription, - String testPath, - String testHelp) { - String sDate = ""; - if (testName.equals("") || deviceName.equals("")) { - return; - } - try { - ImageIcon icon = null;// new ImageIcon(getClass().getResource("/icons/button_pause-16px.png")); - DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); - //String testPath = FilenameUtils.separatorsToSystem(TESTS_TESTS_DEFAULT_DIR + testSuite + "/" + testName + "/" + testName + ".py"); - String otestPath = Paths.get(TESTS_TESTS_DEFAULT_DIR.toString(), testSuite, testName, testName + ".py").toString(); - String odevicePath = Paths.get(TESTS_DEVICES_DEFAULT_DIR.toString(), deviceName, deviceName + ".config").toString(); - - System.out.println("Old Test Path = " + otestPath); - System.out.println("Old Dev Path = " + odevicePath); - - System.out.println("Test Path = " + testPath); - System.out.println("Dev Path = " + devicePath); - Object rowData[] = new Object[]{false, "", sDate, deviceName, devicePath, deviceDescription, testSuite, testName, testPath, testParams, testDescription, testHelp, "", "Pending", icon}; - //vedify that this test is not already in the table - int totalRows = model.getRowCount(); - boolean bTestAlreadyInTable = false; - for (int row = 0; row < totalRows; row++) { - bTestAlreadyInTable = (model.getValueAt(row, COL.DEVICENAME.ordinal()).toString().equals(deviceName) - && model.getValueAt(row, COL.TESTSUITE.ordinal()).toString().equals(testSuite) - && model.getValueAt(row, COL.TESTNAME.ordinal()).toString().equals(testName) - && model.getValueAt(row, COL.TESTPATH.ordinal()).toString().replace("\\", File.separator).equals(testPath)); - if (bTestAlreadyInTable) { - break; - } - } - if (!bTestAlreadyInTable) { - model.addRow(rowData); - } - } catch (Exception ex) { - ex.printStackTrace(); - SwingUtils.showMessage(this, "loadListFilter()", ex.toString()); - } - updateStatus(); - } - - /** - * get the current time in format like 2015/07/02 15:59:43 - * - * @return formatted time - */ - public String getNow() { - DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - Date date = new Date(); - return dateFormat.format(date); - } - - /** - * get the current time in format like 20150702155943 - * - * @return time with sortable format - */ - public String getnow() { - DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); - Date date = new Date(); - return dateFormat.format(date); - } - - /** - * scan tests directory, scan devices directory, search for their test cases - * and scan for tests. - * - * @throws FileNotFoundException - * @throws IOException - */ - public void loadTests() throws FileNotFoundException, IOException { - Properties propDevice = new Properties(); - Properties propTest = new Properties(); - //String fileName = TESTS_DEVICES_DEFAULT_DIR; - //File folder = new File(fileName); - File testsFolder = null; - String sTestName; - int iCounter = 0; - //search devices and their tests - //Scan the list of devices - //File[] listOfDevices = TESTS_DEVICES_DEFAULT_DIR.toFile().listFiles(); - List<File> listOfDevices = new ArrayList<File>(); - Collections.addAll(listOfDevices, listFilesAsArray(TESTS_DEVICES_DEFAULT_DIR.toFile(), true)); - - for (File deviceInList : listOfDevices) { - propDevice.clear(); - if (deviceInList.isFile()) { - } else if (deviceInList.isDirectory()) { - System.out.println("deviceInList:" + deviceInList.getPath()); - File configFile = new File(deviceInList.getPath() + FilenameUtils.separatorsToSystem("/" + TESTS_CONFIG_FILENAME)); - if (configFile.exists() && !configFile.isDirectory()) { - InputStream is = new FileInputStream(configFile); - propDevice.load(is); - is.close(); - //config of device was loaded. now load the config of each test belonging to the device - testsFolder = Paths.get(TESTS_TESTS_DEFAULT_DIR.toString(), propDevice.getProperty("tests")).toFile(); - if (testsFolder.exists() && testsFolder.isDirectory()) { - File[] listOfTests = testsFolder.listFiles(); - for (File testinList : listOfTests) { - propTest.clear(); - if (testinList.isDirectory()) { - configFile = new File(testinList.getPath() + FilenameUtils.separatorsToSystem("/" + TESTS_CONFIG_FILENAME)); - if (configFile.exists() && !configFile.isDirectory()) { - InputStream ist = new FileInputStream(configFile); - propTest.load(ist); - ist.close(); - addToTable(propDevice.getProperty("name"), - propDevice.getProperty("description"), - deviceInList.getPath(), - propDevice.getProperty("tests"), - propTest.getProperty("name"), - "", //test parameters - "", //test description - testinList.getPath(), - propTest.getProperty("help")); - iCounter++; - } - } - } - } - } - } - } - //showEnabledTestsOnly(jCheckBoxMenuShowSelectedTests1.getState()); - logger.log(Level.INFO, iCounter + " tests loaded."); - } - - -public static File[] listFilesAsArray(File directory, boolean recurse) -{ - Collection files = listFiles(directory, recurse); - File[] arr = new File[files.size()]; - return (File[]) files.toArray(arr); -} - -public static Collection listFiles(File directory, boolean recurse){ - // List of files / directories - Vector files = new Vector (); - // Get files / directories in the directory - File[] entries = directory.listFiles(); - // Go over entries - for (File entry : entries){ - - files.add(entry); - // If the file is a directory and the recurse flag - // is set, recurse into the directory - if (recurse && entry.isDirectory()){ - files.addAll(listFiles(entry, recurse)); - } - } - // Return collection of files - return files; -} - - /** - * scan tests table and see if tests/devices in the table still exist in directory. - * Remove from table the tests whose files do not exist in directories. - * - * @throws FileNotFoundException - * @throws IOException - */ - public void cleanTests() throws FileNotFoundException, IOException { - Properties propDevice = new Properties(); - Properties propTest = new Properties(); - //String fileName = TESTS_DEVICES_DEFAULT_DIR; - //File folder = new File(fileName); - File testsFolder = null; - String sTestName; - int iCounter = 0; - //search devices and their tests - //Scan the list of devices - File[] listOfDevices = TESTS_DEVICES_DEFAULT_DIR.toFile().listFiles(); - //collect all tests from files - List<List> testsInDir = new ArrayList<List>(); - List<String> testDetails = new ArrayList<String>(); - for (File deviceInList : listOfDevices) { - propDevice.clear(); - if (deviceInList.isDirectory()) { - File configFile = new File(deviceInList.getPath() + FilenameUtils.separatorsToSystem("/"+TESTS_CONFIG_FILENAME)); - if (configFile.exists() && !configFile.isDirectory()) { - InputStream is = new FileInputStream(configFile); - propDevice.load(is); - is.close(); - //config of device was loaded. now load the config of each test belonging to the device - testsFolder = Paths.get(TESTS_TESTS_DEFAULT_DIR.toString(), propDevice.getProperty("tests")).toFile(); - if (testsFolder.exists() && testsFolder.isDirectory()) { - File[] listOfTests = testsFolder.listFiles(); - for (File testinList : listOfTests) { - propTest.clear(); - if (testinList.isDirectory()) { - configFile = new File(testinList.getPath() + FilenameUtils.separatorsToSystem("/"+TESTS_CONFIG_FILENAME)); - if (configFile.exists() && !configFile.isDirectory()) { - InputStream ist = new FileInputStream(configFile); - propTest.load(ist); - ist.close(); - testDetails = new ArrayList<String>(); - testDetails.add(propDevice.getProperty("name")); - testDetails.add(propDevice.getProperty("tests")); - testDetails.add(propTest.getProperty("name")); - iCounter++; - testsInDir.add(testDetails); - } - } - } - } - } - } - } - //now check each test in table, if it is present in directory - DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); - int row; - boolean bTestAlreadyInTable = false; - String testSuiteTable, testSuiteDir; - String testNameTable, testNameDir; - String deviceNameTable, deviceNameDir; - String testPathTable, testPathDir; - int totalRows = model.getRowCount(); - //loop among the tests in the table - for (row = 0; row < totalRows; row++) { - bTestAlreadyInTable = false; - deviceNameTable = model.getValueAt(row, COL.DEVICENAME.ordinal()).toString(); - //testSuiteTable = model.getValueAt(row, COL.TESTSUITE.ordinal()).toString(); - //testNameTable = model.getValueAt(row, COL.TESTNAME.ordinal()).toString(); - testPathTable = model.getValueAt(row, COL.TESTPATH.ordinal()).toString().replace("\\", File.separator); - //loop to compare current test in table with all tests in directory - for (int i = 0; i < testsInDir.size(); i++) { - deviceNameDir = testsInDir.get(i).get(0).toString(); - testSuiteDir = testsInDir.get(i).get(1).toString(); - testNameDir = testsInDir.get(i).get(2).toString(); - testPathDir = Paths.get(TESTS_TESTS_DEFAULT_DIR.toString(), - testSuiteDir, testNameDir, testNameDir + ".py").toString(); - //check if the test files and device files corresponding to the current test row exist - bTestAlreadyInTable = (testPathDir.equals(testPathTable) && deviceNameDir.equals(deviceNameTable)); - if (bTestAlreadyInTable) { - break; - } - } - if (!bTestAlreadyInTable) { - //this test in table does not exist any more in the tests directory or in the device directory: remove - model.removeRow(row); - totalRows = model.getRowCount(); - row=0; - } - } - } - - /** - * Build a map with optional parameters to be passed to the testing script. - * The map is like this: parameters \_ name | \_ value | \_ description \_ - * name | \_ value | \_ description ... the name 'name' is the mapping key. - * 'value' and 'description' are constant mapping keys of a nested map. - * - * @param parametersString string containing the parameters. Syntax: - * name:value:description[;name:value:description;...] - */ - private HashMap buildParametersMap(String parametersString) { - HashMap mParameters = new HashMap(); // contains name and attributes - HashMap mParameterAttributes = new HashMap(); //contians value and description - String[] dsParameterAttributes = null; - String[] dsParameters = parametersString.split(PARAM_SEPARATOR); - for (String sParameter : dsParameters) { - dsParameterAttributes = sParameter.split(VALUE_SEPARATOR); - if (dsParameterAttributes.length > 2) { - mParameterAttributes = new HashMap(); - mParameterAttributes.put("value", (Object) dsParameterAttributes[1]); - mParameterAttributes.put("description", dsParameterAttributes[2]); - //add parameter name and attributes (value + description) - mParameters.put(dsParameterAttributes[0], mParameterAttributes); - System.out.println(dsParameterAttributes[0] + dsParameterAttributes[1] + dsParameterAttributes[2]); - } - } - return mParameters; - } - - /** - * get the parameters from the test config file - * - * @param sTestPath directory where the test files are (directory with the - * test name) - * @return HashMap of the test parameters. See buildParametersMap() for - * details. - */ - private HashMap getTestParameters(String sTestPath) { - String testParams = getConfigItem("parameters", sTestPath); - return buildParametersMap(testParams); - } - - - /** - * get the parameters from the test and device config file. - * the test config params are default params. if the same param name - * is also in the device config, it will override the test param. - * - * @param sTestPath directory where the test files are (directory with the - * test name) - * @param sdevicePath device config file path - * @return HashMap of the test parameters. See buildParametersMap() for - * details. - */ - private HashMap getParameters(String sTestPath, String sDevicePath) { - HashMap deviceParams = buildParametersMap(getConfigItem("parameters", sDevicePath)); - HashMap testParams = buildParametersMap(getConfigItem("parameters", sTestPath)); - HashMap params = new HashMap(); - if(deviceParams.isEmpty()){ - return testParams; - } - Iterator itD = deviceParams.entrySet().iterator(); - System.out.println("deviceParams: " + deviceParams.size()); - while (itD.hasNext()) { - Map.Entry pairD = (Map.Entry)itD.next(); - System.out.println(pairD.getKey() + " = " + pairD.getValue()); - params.putIfAbsent(pairD.getKey(), pairD.getValue()); - } - Iterator it = testParams.entrySet().iterator(); - System.out.println("testParams: " + testParams.size()); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry)it.next(); - System.out.println(pair.getKey() + " = " + pair.getValue()); - // add parameter only if not already on device parameters - params.putIfAbsent(pair.getKey(), pair.getValue()); - } - return params; - } - - /** - * Get the description of the test. - * - * @param sTestPath directory where the test files are (directory with the - * test name) - * @return test description - */ - private String getTestDescription(String sTestPath) { - return getConfigItem("description", sTestPath); - } - - /** - * generic function that get a configuration item of a test. - * - * @param sParameterName configuration item name to retrieve from the test - * @param sTestPath directory where the test files are (directory with the - * test name) - * @return value of the configuration item - */ - private String getConfigItem(String sParameterName, String sTestPath) { - Properties propTest = new Properties(); - File fileTest = new File(sTestPath); - File dirTest = fileTest.getParentFile(); - String testParams = ""; - if (dirTest.isDirectory()) { - File configFile = new File(dirTest.getPath() + FilenameUtils.separatorsToSystem("/"+TESTS_CONFIG_FILENAME)); - if (configFile.exists() && !configFile.isDirectory()) { - try { - InputStream ist = new FileInputStream(configFile); - propTest.load(ist); - ist.close(); - testParams = propTest.getProperty(sParameterName); - if (testParams == null) { - testParams = ""; - } - - } catch (IOException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - return testParams; - } - - /** - * Save current setup in a file. The current position of table rows is also - * saved. - */ - public void saveSettings() { - if (!TESTS_CONFIG_DEFAULT_DIR.toFile().isDirectory()) { - boolean success = TESTS_CONFIG_DEFAULT_DIR.toFile().mkdirs(); - if (!success) { - // Directory creation failed - SwingUtils.showMessage(this, "saveSettings()", "Cannot create directory " + TESTS_CONFIG_DEFAULT_DIR.toString()); - } - } - JFileChooser fc = new JFileChooser(TESTS_CONFIG_DEFAULT_DIR.toFile()); - int returnVal = fc.showSaveDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = fc.getSelectedFile(); - saveSettings(file); - } - } - - /** - * Save current setup in a file. The current position of table rows is also - * saved. - * - * @param file file containing the settings - */ - private void saveSettings(File file) { - DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel(); - try { - ObjectOutputStream out = new ObjectOutputStream( - new FileOutputStream(file)); - out.writeObject(tableModel.getDataVector()); - out.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - /** - * Save current setup in a file. The current position of table rows is also - * saved. - */ - public void loadListFilter() { - final JFileChooser fc = new JFileChooser(); - fc.setCurrentDirectory(TESTS_CONFIG_DEFAULT_DIR.toFile()); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = fc.getSelectedFile(); - loadListFilter(file); - this.showEnabledTestsOnly(true); - } - } - - /** - * Load current setup from a file. The current position of table rows is - * also saved. - * - * @param file file containing the settings - */ - private void loadListFilter(File file) { - if (file == null || !file.isFile()){ - loadListFilter(); - //store current file in the properties - saveProperties("listFilter", ""); - return; - } - DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel(); - try { - ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); - Vector rowData = (Vector) in.readObject(); - Iterator itr = rowData.iterator(); - //clear table - tableModel.getDataVector().removeAllElements(); - tableModel.fireTableDataChanged(); - //rewrite table - while (itr.hasNext()) { - tableModel.addRow((Vector) itr.next()); - } - in.close(); - loadTests(); - //store current file in the properties - saveProperties("listFilter", file.getName()); - //try to animate the custom panel, if the tests list concerns only one device - animateCustomPanel(); - } catch (Exception ex) { - ex.printStackTrace(); - SwingUtils.showMessage(this, "loadListFilter()", ex.toString()); - } - } - - - - - /** - * for putting an icon and text to a table header - */ - public class iconRenderer extends DefaultTableCellRenderer{ - public Component getTableCellRendererComponent(javax.swing.JTable table, - Object obj,boolean isSelected, boolean hasFocus, int row, - int column) { - txtIcon i = (txtIcon)obj; - if (obj == i) { - setIcon(i.imageIcon); - setText(i.txt); - } - setBorder(UIManager.getBorder("TableHeader.cellBorder")); - setHorizontalAlignment(javax.swing.JLabel.CENTER); - return this; - } - } - /** - * for putting an icon and text to a table header - */ - public class txtIcon { - String txt; - ImageIcon imageIcon; - txtIcon(String text, ImageIcon icon) { - txt = text; - imageIcon = icon; - } - } - - /** - * put an icon and text to a table header - * - * @param table the table where the header is - * @param col_index column index of the table header where to put the icon - * @param icon the icon to put to the header - * @param name the text to put to the header - */ - public void setIcon(javax.swing.JTable table, int col_index, ImageIcon icon,String name){ - table.getTableHeader().getColumnModel().getColumn(col_index).setHeaderRenderer(new iconRenderer()); - table.getColumnModel().getColumn(col_index).setHeaderValue(new txtIcon(name, icon)); - table.updateUI(); - } - -} diff --git a/plugins/TestingList.form b/plugins/TestingList.form index 399ce90..a18d41d 100644 --- a/plugins/TestingList.form +++ b/plugins/TestingList.form @@ -104,6 +104,9 @@ </Component> <MenuItem class="javax.swing.JMenuItem" name="jMenuItemRunSingleTest"> <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/play-circled-16-000000.png"/> + </Property> <Property name="text" type="java.lang.String" value="Run this test now"/> </Properties> <Events> @@ -259,14 +262,14 @@ </Constraint> </Constraints> - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout"> - <Property name="columns" type="int" value="2"/> - <Property name="rows" type="int" value="2"/> - </Layout> + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> <SubComponents> <Component class="javax.swing.JButton" name="jButtonOptions"> <Properties> - <Property name="toolTipText" type="java.lang.String" value="More actions"/> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/listing-option-32px.png"/> + </Property> + <Property name="toolTipText" type="java.lang.String" value="Optional actions"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[60, 40]"/> </Property> @@ -280,10 +283,18 @@ <Events> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButtonOptionsActionPerformed"/> </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="Before"/> + </Constraint> + </Constraints> </Component> <Component class="javax.swing.JButton" name="jButtonSave"> <Properties> - <Property name="toolTipText" type="java.lang.String" value="Save current list of tests"/> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/android-save-24-000000.png"/> + </Property> + <Property name="toolTipText" type="java.lang.String" value="Save current configuration"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[60, 40]"/> </Property> @@ -297,15 +308,18 @@ <Events> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButtonSaveActionPerformed"/> </Events> - </Component> - <Component class="javax.swing.JButton" name="jButtonLog"> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButtonLogActionPerformed"/> - </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="After"/> + </Constraint> + </Constraints> </Component> <Component class="javax.swing.JButton" name="jButtonOpen"> <Properties> - <Property name="toolTipText" type="java.lang.String" value="Open a list of tests"/> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/folder-open-24-000000.png"/> + </Property> + <Property name="toolTipText" type="java.lang.String" value="Open configuration"/> <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[0, 9]"/> </Property> @@ -316,11 +330,19 @@ <Events> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButtonOpenActionPerformed"/> </Events> + <Constraints> + <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription"> + <BorderConstraints direction="Last"/> + </Constraint> + </Constraints> </Component> </SubComponents> </Container> <Component class="javax.swing.JButton" name="jButtonRun"> <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/play-circled-64-000000.png"/> + </Property> <Property name="toolTipText" type="java.lang.String" value="Run enabled tests"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[330000, 39]"/> @@ -367,6 +389,9 @@ </Component> <Component class="javax.swing.JButton" name="jButtonMoveDown"> <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/chevron-down-16-000000.png"/> + </Property> <Property name="toolTipText" type="java.lang.String" value="Move the selected tests down"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[25, 25]"/> @@ -389,6 +414,9 @@ </Component> <Component class="javax.swing.JButton" name="jButtonMoveUp"> <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/chevron-up-16-000000.png"/> + </Property> <Property name="toolTipText" type="java.lang.String" value="Move the selected tests up"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[25, 25]"/> @@ -505,6 +533,9 @@ <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> <Font name="Tahoma" size="8" style="0"/> </Property> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/x-darker-8px.png"/> + </Property> <Property name="toolTipText" type="java.lang.String" value="Close this custom panel"/> <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[12, 12]"/> @@ -515,6 +546,9 @@ <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> <Dimension value="[12, 12]"/> </Property> + <Property name="rolloverIcon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/icons/x-darker-8px.png"/> + </Property> </Properties> <Events> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButtonXActionPerformed"/> diff --git a/plugins/TestingList.java b/plugins/TestingList.java index 969f717..00a519c 100644 --- a/plugins/TestingList.java +++ b/plugins/TestingList.java @@ -40,8 +40,6 @@ import java.lang.reflect.Method; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -58,7 +56,6 @@ import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JMenuItem; import javax.swing.RowFilter; -import javax.swing.UIManager; import javax.swing.filechooser.FileSystemView; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableModel; @@ -66,7 +63,7 @@ import javax.swing.table.TableRowSorter; import org.apache.commons.io.FilenameUtils; import org.python.core.PyList; import static org.python.bouncycastle.util.Arrays.append; -import java.util.Collections; + //</editor-fold> /** @@ -295,17 +292,12 @@ public class TestingList extends Panel { public final Path TESTS_LOG_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "log", "TestsLog" + getnow() + ".txt"); public static String TESTS_CONFIG_FILENAME = ".config"; public static String TESTS_HELP_FILENAME = "help.html"; - public static String VALUE_SEPARATOR = "&"; - public static String PARAM_SEPARATOR = ";"; /** * initialise panel */ private void initialise(){ - - /* - // testing RPS packets System.out.println("msg:"); int PORT1 = 0x8899; // this port String mode = "2,IQCOM,$BMA1,1,DIA"; @@ -326,8 +318,6 @@ public class TestingList extends Panel { System.out.print(String.format("%02X ", msg[i])); } System.out.println(""); - // end of testing RPS packets -*/ @@ -336,8 +326,9 @@ public class TestingList extends Panel { - initComponents(); - addIcons(); + + + initComponents(); initLogger(); buildTable(); @@ -349,8 +340,7 @@ public class TestingList extends Panel { } catch (Exception ex) { getLogger().severe(ex.getMessage()); } - loadProperties(); - + loadProperties(); } @@ -680,7 +670,7 @@ public class TestingList extends Panel { logger.addHandler(fh); SimpleFormatter formatter = new SimpleFormatter(); fh.setFormatter(formatter); - log("INF - " + "New testing session"); + log("INFO - " + "New testing session"); } catch (SecurityException e) { SwingUtils.showMessage(this, "initLogger()", e.toString()); } catch (IOException e) { @@ -732,7 +722,6 @@ public class TestingList extends Panel { jPanelButtons = new javax.swing.JPanel(); jButtonOptions = new javax.swing.JButton(); jButtonSave = new javax.swing.JButton(); - jButtonLog = new javax.swing.JButton(); jButtonOpen = new javax.swing.JButton(); jButtonRun = new javax.swing.JButton(); jPanelSelection = new javax.swing.JPanel(); @@ -824,6 +813,7 @@ public class TestingList extends Panel { jPopupMenuTable.add(jMenuItemShowDetails); jPopupMenuTable.add(jSeparator5); + jMenuItemRunSingleTest.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/play-circled-16-000000.png"))); // NOI18N jMenuItemRunSingleTest.setText("Run this test now"); jMenuItemRunSingleTest.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -914,9 +904,10 @@ public class TestingList extends Panel { jPanelButtons.setMinimumSize(new java.awt.Dimension(0, 80)); jPanelButtons.setPreferredSize(new java.awt.Dimension(100, 80)); - jPanelButtons.setLayout(new java.awt.GridLayout(2, 2)); + jPanelButtons.setLayout(new java.awt.BorderLayout()); - jButtonOptions.setToolTipText("More actions"); + jButtonOptions.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/listing-option-32px.png"))); // NOI18N + jButtonOptions.setToolTipText("Optional actions"); jButtonOptions.setMaximumSize(new java.awt.Dimension(60, 40)); jButtonOptions.setMinimumSize(new java.awt.Dimension(0, 40)); jButtonOptions.setPreferredSize(new java.awt.Dimension(50, 40)); @@ -925,9 +916,10 @@ public class TestingList extends Panel { jButtonOptionsActionPerformed(evt); } }); - jPanelButtons.add(jButtonOptions); + jPanelButtons.add(jButtonOptions, java.awt.BorderLayout.LINE_START); - jButtonSave.setToolTipText("Save current list of tests"); + jButtonSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/android-save-24-000000.png"))); // NOI18N + jButtonSave.setToolTipText("Save current configuration"); jButtonSave.setMaximumSize(new java.awt.Dimension(60, 40)); jButtonSave.setMinimumSize(new java.awt.Dimension(0, 40)); jButtonSave.setPreferredSize(new java.awt.Dimension(50, 40)); @@ -936,16 +928,10 @@ public class TestingList extends Panel { jButtonSaveActionPerformed(evt); } }); - jPanelButtons.add(jButtonSave); + jPanelButtons.add(jButtonSave, java.awt.BorderLayout.LINE_END); - jButtonLog.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonLogActionPerformed(evt); - } - }); - jPanelButtons.add(jButtonLog); - - jButtonOpen.setToolTipText("Open a list of tests"); + jButtonOpen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/folder-open-24-000000.png"))); // NOI18N + jButtonOpen.setToolTipText("Open configuration"); jButtonOpen.setMinimumSize(new java.awt.Dimension(0, 9)); jButtonOpen.setPreferredSize(new java.awt.Dimension(33, 50)); jButtonOpen.addActionListener(new java.awt.event.ActionListener() { @@ -953,10 +939,11 @@ public class TestingList extends Panel { jButtonOpenActionPerformed(evt); } }); - jPanelButtons.add(jButtonOpen); + jPanelButtons.add(jButtonOpen, java.awt.BorderLayout.PAGE_END); jPanelTopCommands.add(jPanelButtons, java.awt.BorderLayout.EAST); + jButtonRun.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/play-circled-64-000000.png"))); // NOI18N jButtonRun.setToolTipText("Run enabled tests"); jButtonRun.setMaximumSize(new java.awt.Dimension(330000, 39)); jButtonRun.setMinimumSize(new java.awt.Dimension(90, 90)); @@ -980,6 +967,7 @@ public class TestingList extends Panel { }); jPanelSelection.add(jCheckBoxEnableDisable, java.awt.BorderLayout.WEST); + jButtonMoveDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/chevron-down-16-000000.png"))); // NOI18N jButtonMoveDown.setToolTipText("Move the selected tests down"); jButtonMoveDown.setMaximumSize(new java.awt.Dimension(25, 25)); jButtonMoveDown.setMinimumSize(new java.awt.Dimension(25, 25)); @@ -991,6 +979,7 @@ public class TestingList extends Panel { }); jPanelSelection.add(jButtonMoveDown, java.awt.BorderLayout.SOUTH); + jButtonMoveUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/chevron-up-16-000000.png"))); // NOI18N jButtonMoveUp.setToolTipText("Move the selected tests up"); jButtonMoveUp.setMaximumSize(new java.awt.Dimension(25, 25)); jButtonMoveUp.setMinimumSize(new java.awt.Dimension(25, 25)); @@ -1056,10 +1045,12 @@ public class TestingList extends Panel { jPanelCustomHeader.setLayout(new java.awt.BorderLayout()); jButtonX.setFont(new java.awt.Font("Tahoma", 0, 8)); // NOI18N + jButtonX.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/x-darker-8px.png"))); // NOI18N jButtonX.setToolTipText("Close this custom panel"); jButtonX.setMaximumSize(new java.awt.Dimension(12, 12)); jButtonX.setMinimumSize(new java.awt.Dimension(12, 12)); jButtonX.setPreferredSize(new java.awt.Dimension(12, 12)); + jButtonX.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/x-darker-8px.png"))); // NOI18N jButtonX.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonXActionPerformed(evt); @@ -1101,16 +1092,6 @@ public class TestingList extends Panel { add(jPanelCustom, java.awt.BorderLayout.SOUTH); }// </editor-fold>//GEN-END:initComponents - private void addIcons() { - jButtonRun.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/play-circled-64-000000.png"))); - jButtonLog.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/logbook-32px.png"))); - jButtonOptions.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/listing-option-32px.png"))); - jButtonSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/android-save-24-000000.png"))); - jButtonOpen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/folder-open-36-000000.png"))); - jButtonMoveUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/chevron-up-24-000000.png"))); - jButtonMoveDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/chevron-down-24-000000.png"))); - } - private void jButtonRunActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonRunActionPerformed if (this.jButtonRun.getToolTipText().equals("Run enabled tests")) { Object pshellStatus; @@ -1236,7 +1217,7 @@ public class TestingList extends Panel { openDetails(); break; } - //updateStatus(); + updateStatus(); } catch (Exception ex) { SwingUtils.showException(this, ex); } @@ -1289,14 +1270,14 @@ public class TestingList extends Panel { }//GEN-LAST:event_jButtonOptionsActionPerformed private void jCheckBoxMenuShowSelectedTestsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuShowSelectedTestsActionPerformed - + // TODO add your handling code here: boolean bShow = jCheckBoxMenuShowSelectedTests.getState(); showEnabledTestsOnly(bShow); jCheckBoxMenuShowSelectedTests1.setState(bShow); }//GEN-LAST:event_jCheckBoxMenuShowSelectedTestsActionPerformed private void jMenuItemOpenLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemOpenLogActionPerformed - + // TODO add your handling code here: String cmd; if (System.getProperty("os.name").toLowerCase().contains("windows")) { cmd = "notepad.exe " + TESTS_LOG_DEFAULT_DIR; @@ -1313,7 +1294,7 @@ public class TestingList extends Panel { }//GEN-LAST:event_jMenuItemOpenLogActionPerformed private void jMenuItemReloadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemReloadActionPerformed - + // TODO add your handling code here: reloadTests(); try { cleanTests(); @@ -1324,24 +1305,24 @@ public class TestingList extends Panel { }//GEN-LAST:event_jMenuItemReloadActionPerformed private void jMenuItemNewTestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemNewTestActionPerformed - + // TODO add your handling code here: openNewTestEditor("Test"); }//GEN-LAST:event_jMenuItemNewTestActionPerformed private void jMenuItemNewDeviceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemNewDeviceActionPerformed - + // TODO add your handling code here: openNewTestEditor("Device"); }//GEN-LAST:event_jMenuItemNewDeviceActionPerformed private void jCheckBoxMenuShowSelectedTests1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMenuShowSelectedTests1ActionPerformed - + // TODO add your handling code here: boolean bShow = jCheckBoxMenuShowSelectedTests1.getState(); showEnabledTestsOnly(bShow); jCheckBoxMenuShowSelectedTests.setState(bShow); }//GEN-LAST:event_jCheckBoxMenuShowSelectedTests1ActionPerformed private void jMenuItemReload1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemReload1ActionPerformed - + // TODO add your handling code here: reloadTests(); try { cleanTests(); @@ -1353,7 +1334,7 @@ public class TestingList extends Panel { private void jMenuItemShowDetailsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemShowDetailsActionPerformed try { - + // TODO add your handling code here: openDetails(); } catch (Exception ex) { Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); @@ -1361,32 +1342,32 @@ public class TestingList extends Panel { }//GEN-LAST:event_jMenuItemShowDetailsActionPerformed private void jMenuItemSelectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemSelectAllActionPerformed - + // TODO add your handling code here: enableAll(true); }//GEN-LAST:event_jMenuItemSelectAllActionPerformed private void jMenuItemSelectNoneActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemSelectNoneActionPerformed - + // TODO add your handling code here: enableAll(false); }//GEN-LAST:event_jMenuItemSelectNoneActionPerformed private void jMenuItemSelectSelectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemSelectSelectionActionPerformed - + // TODO add your handling code here: enableSelection(true); }//GEN-LAST:event_jMenuItemSelectSelectionActionPerformed private void jMenuItemDeselectSelectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDeselectSelectionActionPerformed - + // TODO add your handling code here: enableSelection(false); }//GEN-LAST:event_jMenuItemDeselectSelectionActionPerformed private void jMenuItemEditScriptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEditScriptActionPerformed - + // TODO add your handling code here: int rows[] = jTable1.getSelectedRows(); for(int row=0 ; row<rows.length ; row++){ try { String sTestPath = String.valueOf(jTable1.getValueAt(rows[row], COL.TESTPATH.ordinal())).replace("\\", File.separator); - System.out.println("Test Path: " + sTestPath); + System.out.println(sTestPath); ((View)App.getInstance().getMainFrame()).openScript(sTestPath); } catch (IOException ex) { Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); @@ -1395,14 +1376,14 @@ public class TestingList extends Panel { }//GEN-LAST:event_jMenuItemEditScriptActionPerformed private void jMenuItemRunSingleTestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemRunSingleTestActionPerformed - + // TODO add your handling code here: enableAll(false); enableSelection(true); jButtonRunActionPerformed( evt); }//GEN-LAST:event_jMenuItemRunSingleTestActionPerformed private void jMenuLoadCustomPanelMenuSelected(javax.swing.event.MenuEvent evt) {//GEN-FIRST:event_jMenuLoadCustomPanelMenuSelected - + // TODO add your handling code here: List<String> menuList = getCustomPanels(); jMenuLoadCustomPanel.removeAll(); for(int u = 0; u < menuList.size(); u++){ @@ -1435,22 +1416,12 @@ public class TestingList extends Panel { }//GEN-LAST:event_jMenuItemCustomCloseActionPerformed private void jMenuItemDeselectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDeselectActionPerformed - + // TODO add your handling code here: this.jTable1.clearSelection(); }//GEN-LAST:event_jMenuItemDeselectActionPerformed - private void jButtonLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonLogActionPerformed - try { - String logViewerScript = Paths.get(".", "home", "script", "startlogviewer-rpstests.sh").toString(); - Process p = Runtime.getRuntime().exec(logViewerScript); - } catch (IOException ex) { - Logger.getLogger(TestingList.class.getName()).log(Level.SEVERE, null, ex); - } - }//GEN-LAST:event_jButtonLogActionPerformed - //<editor-fold defaultstate="collapsed" desc="Witget Variables declaration"> // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton jButtonLog; private javax.swing.JButton jButtonMoveDown; private javax.swing.JButton jButtonMoveUp; private javax.swing.JButton jButtonOpen; @@ -1593,7 +1564,7 @@ public class TestingList extends Panel { * @return status of run button. True = tests launching sequence is running */ public boolean isTestRunAllowed() { - return (this.jButtonRun.getToolTipText().equals("Stop tests") && countPendingTests() > 0); + return (this.jButtonRun.getToolTipText().equals("Stop tests") && pendingTestsCount() > 0); } /** @@ -1645,12 +1616,10 @@ public class TestingList extends Panel { int row = jTable1.getSelectedRow(); String sDeviceName = jTable1.getValueAt(row, COL.DEVICENAME.ordinal()).toString(); String sTestName = jTable1.getValueAt(row, COL.TESTNAME.ordinal()).toString(); - String sTestPath = jTable1.getValueAt(row, COL.TESTPATH.ordinal()).toString(); + String sTestPath = String.valueOf(jTable1.getValueAt(row, COL.TESTPATH.ordinal())).replace("\\", File.separator); String sTestCaseName = jTable1.getValueAt(row, COL.TESTSUITE.ordinal()).toString(); String sTestDescription = getTestDescription(sTestPath); String sDevicePath = jTable1.getValueAt(row, COL.DEVICEPATH.ordinal()).toString(); - System.out.println("sDevicePath: "+sDevicePath); - System.out.println("sTestPath: "+sTestPath); String sDeviceDescription = jTable1.getValueAt(row, COL.DEVICEDESCR.ordinal()).toString(); String sLastResult = jTable1.getValueAt(row, COL.RESULT.ordinal()).toString(); String sResultTime = jTable1.getValueAt(row, COL.TIME.ordinal()).toString(); @@ -1660,7 +1629,6 @@ public class TestingList extends Panel { HashMap details = new HashMap(); details.put("deviceName", sDeviceName); details.put("deviceDescription", sDeviceDescription); - details.put("devicePath", sDevicePath); details.put("testDescription", sTestDescription); details.put("testSuite", sTestCaseName); details.put("testName", sTestName); @@ -1739,7 +1707,7 @@ public class TestingList extends Panel { case "Success": icon = TestStatus.SUCCESS.Icon(); logger.log(Level.INFO, sStatus + " - Device: " + deviceName + "; Test: " + sTestName + "; Result: " + res); - log("INF - " + sStatus + " - Device: " + deviceName + "; Test: " + sTestName + "; Result: " + res); + log("INFO - " + sStatus + " - Device: " + deviceName + "; Test: " + sTestName + "; Result: " + res); break; case "Failure": icon = TestStatus.FAILURE.Icon(); @@ -1759,36 +1727,18 @@ public class TestingList extends Panel { logger.log(Level.SEVERE, "Cant find Test: " + testPath + " in table."); } //check if there are still pending tests. If not, set the status of the tool to Stopped. - if (countPendingTests() == 0 && countRunningTests() == 0) { + if (pendingTestsCount() == 0 && runningTestsCount() == 0) { setToStopped(); } - updateResultSummary(); return rowD; } - - /** - * show a summary icon indicating if all tests succeeded - * or if at least one failed - */ - public void updateResultSummary() { - ImageIcon summaryIcon = null; - if(countRunningTests()>0){ - summaryIcon = TestStatus.RUNNING.Icon(); - } else if(countFailureTests()>0){ - summaryIcon = TestStatus.FAILURE.Icon(); - } else if(countSuccessTests()>0){ - summaryIcon = TestStatus.SUCCESS.Icon(); - } - //System.out.println("successful: "+countSuccessTests() + " Failed: "+countSuccessTests() ); - setIcon(jTable1, COL.ICON.ordinal(), summaryIcon, ""); - } /** * return the amount of tests currently in Pending state * * @return int counter of pending tests */ - public int countPendingTests() { + public int pendingTestsCount() { return testsStatusCount(TestStatus.PENDING); } @@ -1797,7 +1747,7 @@ public class TestingList extends Panel { * * @return int counter of running tests */ - public int countRunningTests() { + public int runningTestsCount() { return testsStatusCount(TestStatus.RUNNING); } @@ -1806,19 +1756,10 @@ public class TestingList extends Panel { * * @return int counter of successful tests */ - public int countSuccessTests() { + public int successTestsCount() { return testsStatusCount(TestStatus.SUCCESS); } - /** - * return the amount of tests currently in Failure state - * - * @return int counter of failed tests - */ - public int countFailureTests() { - return testsStatusCount(TestStatus.FAILURE); - } - /** * returns the amount of tests currently in "status" state * @@ -1828,16 +1769,15 @@ public class TestingList extends Panel { private int testsStatusCount(TestStatus status) { String sStatus; boolean bSelected; - int iTestsCount = 0; + int iPendingTestsCount = 0; for (int row = 0; row < jTable1.getRowCount(); row++) { bSelected = (boolean) jTable1.getValueAt(row, COL.CHECK.ordinal()); sStatus = jTable1.getValueAt(row, COL.STATUS.ordinal()).toString(); - //System.out.println("sStatus: " +sStatus); - if (bSelected && sStatus.equals(status.toString())) { - iTestsCount++; + if (bSelected && sStatus == status.toString()) { + iPendingTestsCount++; } } - return iTestsCount; + return iPendingTestsCount; } /** @@ -1949,7 +1889,6 @@ public class TestingList extends Panel { jTable1.setValueAt(sStatus, row, COL.STATUS.ordinal()); jTable1.setValueAt(sStart, row, COL.STARTSEQUENCE.ordinal()); } - updateResultSummary(); } /** @@ -2042,12 +1981,13 @@ public class TestingList extends Panel { String sDeviceName = jTable1.getValueAt(row, COL.DEVICENAME.ordinal()).toString(); String sDevicePath = jTable1.getValueAt(row, COL.DEVICEPATH.ordinal()).toString().replace("\\", File.separator); String sTestName = jTable1.getValueAt(row, COL.TESTNAME.ordinal()).toString(); + String sTestCaseName = jTable1.getValueAt(row, COL.TESTSUITE.ordinal()).toString(); String sTestPath = jTable1.getValueAt(row, COL.TESTPATH.ordinal()).toString().replace("\\", File.separator); // HashMap mParameters = buildParametersMap(String.valueOf(jTable1.getValueAt(row, COL.TESTPARAMS.ordinal()))); //get the parameters directly frm he config file + // System.out.println("sTestPath: " + sTestPath); HashMap mParameters = getParameters(sTestPath, sDevicePath); HashMap testArgs = new HashMap(); - System.out.println("mParameters: " + mParameters.toString()); //args.put("ret", ""); testArgs.put(testArgNames.PARAMETERS.toString(), mParameters); testArgs.put(testArgNames.TEST.toString(), sTestName); @@ -2064,10 +2004,10 @@ public class TestingList extends Panel { * * @param sParameters string coming from HashMap conaining the list of * parameters to be passed to the test script. Example: - * {repeatTimes={description="Repeat N times", value="1"}, - * midPoint={description="Middle point A", value="41.0"}, - * spanFromMidPoint={description="B steps around middle point A", - * value="2.0"}} + * {repeatTimes={description=Repeat N times, value=1}, + * midPoint={description=Middle point A, value=41.0}, + * spanFromMidPoint={description=B steps around middle point A, + * value=2.0}} * @return string of dictionary in python syntax. This can be passed to * the python test script. Example of output: * {'repeatTimes':{'description':'Repeat N @@ -2080,15 +2020,15 @@ public class TestingList extends Panel { sPythonParams = sPythonParams.replace(", ", ","); sPythonParams = sPythonParams.replace(" ,", ","); sPythonParams = sPythonParams.replace("{{", "#@"); - sPythonParams = sPythonParams.replace("\"}}", "@#"); - sPythonParams = sPythonParams.replace("\"},", "@%#"); + sPythonParams = sPythonParams.replace("}}", "@#"); + sPythonParams = sPythonParams.replace("},", "@%#"); sPythonParams = sPythonParams.replace(",{", "#%@"); sPythonParams = sPythonParams.replace("={", "^%&"); sPythonParams = sPythonParams.replace("=}", "&%^"); - sPythonParams = sPythonParams.replace("\",", "','"); + sPythonParams = sPythonParams.replace(",", "','"); sPythonParams = sPythonParams.replace("{", "{'"); - sPythonParams = sPythonParams.replace("\"}", "'}"); - sPythonParams = sPythonParams.replace("=\"", "':'"); + sPythonParams = sPythonParams.replace("}", "'}"); + sPythonParams = sPythonParams.replace("=", "':'"); sPythonParams = sPythonParams.replace("^%&", "':{'"); sPythonParams = sPythonParams.replace("&%^", "'}:'"); sPythonParams = sPythonParams.replace("#@", "{{'"); @@ -2113,6 +2053,7 @@ public class TestingList extends Panel { int iRet = -1; HashMap args2 = new HashMap(); //this is the global map that will contain one map per test. HashMap testArgs; //this is the map for a test. + RunTest runTest; String sTestName = "", sDeviceName = "", sTestPath = "", sTestID = ""; //sTestID is the compination of device name + test path for (int row : rowsToExecute) { //System.out.println(String.valueOf(row) + "\t" + sDeviceName + "\t" + sTestName + "\t" + sTestCaseName + "\t" + String.valueOf(rowsToExecute.length)); @@ -2144,9 +2085,7 @@ public class TestingList extends Panel { logger.log(Level.INFO, msg); System.out.println(msg); } - //System.out.println("sTestID: " + sTestID); - Object retargs = args2.put(sTestID, testArgs); - //System.out.println("retargs: " + retargs); + args2.put(sTestID, testArgs); hTests = args2; iRet = 0; } catch (Exception ex) { @@ -2188,7 +2127,7 @@ public class TestingList extends Panel { } //animate the custom panel (if present) animateCustomPanel(sDeviceName); - //System.out.println("sParallelizeCommand: " +sParallelizeCommand); + //System.out.println(sParallelizeCommand); //run test(s) Object ret = eval(sParallelizeCommand); //System.out.println(ret); @@ -2275,20 +2214,11 @@ public class TestingList extends Panel { DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setToolTipText("Click for options"); jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setCellRenderer(renderer); - jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setPreferredWidth(130); - jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setMaxWidth(130); + jTable1.getColumnModel().getColumn(COL.STARTSEQUENCE.ordinal()).setPreferredWidth(30); jTable1.getColumnModel().getColumn(COL.ICON.ordinal()).setMaxWidth(27); jTable1.getColumnModel().getColumn(COL.CHECK.ordinal()).setMaxWidth(27); - jTable1.getColumnModel().getColumn(COL.DEVICENAME.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.DEVICENAME.ordinal()).setMaxWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTNAME.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTNAME.ordinal()).setMaxWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTSUITE.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.TESTSUITE.ordinal()).setMaxWidth(200); - jTable1.getColumnModel().getColumn(COL.STATUS.ordinal()).setPreferredWidth(90); - jTable1.getColumnModel().getColumn(COL.STATUS.ordinal()).setMaxWidth(90); - jTable1.getColumnModel().getColumn(COL.TIME.ordinal()).setPreferredWidth(200); - jTable1.getColumnModel().getColumn(COL.TIME.ordinal()).setMaxWidth(200); + jTable1.getColumnModel().getColumn(COL.DEVICENAME.ordinal()).setPreferredWidth(30); + jTable1.getColumnModel().getColumn(COL.STATUS.ordinal()).setPreferredWidth(20); hideColumn(COL.DEVICEDESCR); hideColumn(COL.DEVICEPATH); hideColumn(COL.TESTPATH); @@ -2323,12 +2253,10 @@ public class TestingList extends Panel { */ private void addToTable(String deviceName, String deviceDescription, - String devicePath, String testSuite, String testName, String testParams, String testDescription, - String testPath, String testHelp) { String sDate = ""; if (testName.equals("") || deviceName.equals("")) { @@ -2338,14 +2266,9 @@ public class TestingList extends Panel { ImageIcon icon = null;// new ImageIcon(getClass().getResource("/icons/button_pause-16px.png")); DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); //String testPath = FilenameUtils.separatorsToSystem(TESTS_TESTS_DEFAULT_DIR + testSuite + "/" + testName + "/" + testName + ".py"); - String otestPath = Paths.get(TESTS_TESTS_DEFAULT_DIR.toString(), testSuite, testName, testName + ".py").toString(); - String odevicePath = Paths.get(TESTS_DEVICES_DEFAULT_DIR.toString(), deviceName, deviceName + ".config").toString(); - - System.out.println("Old Test Path = " + otestPath); - System.out.println("Old Dev Path = " + odevicePath); - - System.out.println("Test Path = " + testPath); - System.out.println("Dev Path = " + devicePath); + String testPath = Paths.get(TESTS_TESTS_DEFAULT_DIR.toString(), testSuite, testName, testName + ".py").toString(); + String devicePath = Paths.get(TESTS_DEVICES_DEFAULT_DIR.toString(), deviceName, deviceName + ".config").toString(); + System.out.println("Path = " + testPath); Object rowData[] = new Object[]{false, "", sDate, deviceName, devicePath, deviceDescription, testSuite, testName, testPath, testParams, testDescription, testHelp, "", "Pending", icon}; //vedify that this test is not already in the table int totalRows = model.getRowCount(); @@ -2356,15 +2279,11 @@ public class TestingList extends Panel { && model.getValueAt(row, COL.TESTNAME.ordinal()).toString().equals(testName) && model.getValueAt(row, COL.TESTPATH.ordinal()).toString().replace("\\", File.separator).equals(testPath)); if (bTestAlreadyInTable) { - System.out.println(" test already in table"); break; } } if (!bTestAlreadyInTable) { - System.out.println(" test not in table: adding it..."); - System.out.println(" rowData: " + rowData); model.addRow(rowData); - jTable1.updateUI(); } } catch (Exception ex) { ex.printStackTrace(); @@ -2412,45 +2331,34 @@ public class TestingList extends Panel { int iCounter = 0; //search devices and their tests //Scan the list of devices - //File[] listOfDevices = TESTS_DEVICES_DEFAULT_DIR.toFile().listFiles(); - List<File> listOfDevices = new ArrayList<File>(); - Collections.addAll(listOfDevices, listFilesAsArray(TESTS_DEVICES_DEFAULT_DIR.toFile(), true)); - + File[] listOfDevices = TESTS_DEVICES_DEFAULT_DIR.toFile().listFiles(); for (File deviceInList : listOfDevices) { propDevice.clear(); if (deviceInList.isFile()) { } else if (deviceInList.isDirectory()) { - System.out.println("deviceInList:" + deviceInList.getPath()+ FilenameUtils.separatorsToSystem("/" + TESTS_CONFIG_FILENAME)); File configFile = new File(deviceInList.getPath() + FilenameUtils.separatorsToSystem("/" + TESTS_CONFIG_FILENAME)); if (configFile.exists() && !configFile.isDirectory()) { - System.out.println("deviceInList found"); InputStream is = new FileInputStream(configFile); propDevice.load(is); is.close(); //config of device was loaded. now load the config of each test belonging to the device testsFolder = Paths.get(TESTS_TESTS_DEFAULT_DIR.toString(), propDevice.getProperty("tests")).toFile(); - System.out.println(" testsFolder:" + testsFolder); if (testsFolder.exists() && testsFolder.isDirectory()) { - System.out.println(" testsFolder found"); File[] listOfTests = testsFolder.listFiles(); for (File testinList : listOfTests) { propTest.clear(); if (testinList.isDirectory()) { configFile = new File(testinList.getPath() + FilenameUtils.separatorsToSystem("/" + TESTS_CONFIG_FILENAME)); - System.out.println(" configFile:" + testinList.getPath() + FilenameUtils.separatorsToSystem("/" + TESTS_CONFIG_FILENAME)); if (configFile.exists() && !configFile.isDirectory()) { - System.out.println(" configFile exists"); InputStream ist = new FileInputStream(configFile); propTest.load(ist); ist.close(); addToTable(propDevice.getProperty("name"), propDevice.getProperty("description"), - deviceInList.getPath(), propDevice.getProperty("tests"), propTest.getProperty("name"), "", //test parameters "", //test description - testinList.getPath(), propTest.getProperty("help")); iCounter++; } @@ -2463,33 +2371,6 @@ public class TestingList extends Panel { //showEnabledTestsOnly(jCheckBoxMenuShowSelectedTests1.getState()); logger.log(Level.INFO, iCounter + " tests loaded."); } - - -public static File[] listFilesAsArray(File directory, boolean recurse) -{ - Collection files = listFiles(directory, recurse); - File[] arr = new File[files.size()]; - return (File[]) files.toArray(arr); -} - -public static Collection listFiles(File directory, boolean recurse){ - // List of files / directories - Vector files = new Vector (); - // Get files / directories in the directory - File[] entries = directory.listFiles(); - // Go over entries - for (File entry : entries){ - - files.add(entry); - // If the file is a directory and the recurse flag - // is set, recurse into the directory - if (recurse && entry.isDirectory()){ - files.addAll(listFiles(entry, recurse)); - } - } - // Return collection of files - return files; -} /** * scan tests table and see if tests/devices in the table still exist in directory. @@ -2596,16 +2477,15 @@ public static Collection listFiles(File directory, boolean recurse){ HashMap mParameters = new HashMap(); // contains name and attributes HashMap mParameterAttributes = new HashMap(); //contians value and description String[] dsParameterAttributes = null; - String[] dsParameters = parametersString.split(PARAM_SEPARATOR); + String[] dsParameters = parametersString.split(";"); for (String sParameter : dsParameters) { - dsParameterAttributes = sParameter.split(VALUE_SEPARATOR); + dsParameterAttributes = sParameter.split(":"); if (dsParameterAttributes.length > 2) { mParameterAttributes = new HashMap(); mParameterAttributes.put("value", (Object) dsParameterAttributes[1]); mParameterAttributes.put("description", dsParameterAttributes[2]); //add parameter name and attributes (value + description) mParameters.put(dsParameterAttributes[0], mParameterAttributes); - System.out.println(dsParameterAttributes[0] + dsParameterAttributes[1] + dsParameterAttributes[2]); } } return mParameters; @@ -2794,51 +2674,4 @@ public static Collection listFiles(File directory, boolean recurse){ SwingUtils.showMessage(this, "loadListFilter()", ex.toString()); } } - - - - - /** - * for putting an icon and text to a table header - */ - public class iconRenderer extends DefaultTableCellRenderer{ - public Component getTableCellRendererComponent(javax.swing.JTable table, - Object obj,boolean isSelected, boolean hasFocus, int row, - int column) { - txtIcon i = (txtIcon)obj; - if (obj == i) { - setIcon(i.imageIcon); - setText(i.txt); - } - setBorder(UIManager.getBorder("TableHeader.cellBorder")); - setHorizontalAlignment(javax.swing.JLabel.CENTER); - return this; - } - } - /** - * for putting an icon and text to a table header - */ - public class txtIcon { - String txt; - ImageIcon imageIcon; - txtIcon(String text, ImageIcon icon) { - txt = text; - imageIcon = icon; - } - } - - /** - * put an icon and text to a table header - * - * @param table the table where the header is - * @param col_index column index of the table header where to put the icon - * @param icon the icon to put to the header - * @param name the text to put to the header - */ - public void setIcon(javax.swing.JTable table, int col_index, ImageIcon icon,String name){ - table.getTableHeader().getColumnModel().getColumn(col_index).setHeaderRenderer(new iconRenderer()); - table.getColumnModel().getColumn(col_index).setHeaderValue(new txtIcon(name, icon)); - table.updateUI(); - } - } diff --git a/plugins/TestingListDetails.form b/plugins/TestingListDetails.form index 07a84b9..c0a0c59 100644 --- a/plugins/TestingListDetails.form +++ b/plugins/TestingListDetails.form @@ -20,28 +20,24 @@ <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="1" attributes="0"> <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> + <Group type="103" groupAlignment="1" attributes="0"> <Group type="103" groupAlignment="1" attributes="0"> <Group type="103" groupAlignment="1" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jLabel5" alignment="0" max="-2" attributes="0"/> - <Component id="jLabel8" alignment="0" max="-2" attributes="0"/> - <Component id="jLabel6" alignment="0" max="-2" attributes="0"/> - <Component id="jLabel9" alignment="0" max="-2" attributes="0"/> - <Component id="jLabelDeviceName" alignment="0" max="-2" attributes="0"/> - </Group> - <EmptySpace type="separate" min="-2" max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="jLabel5" alignment="0" max="-2" attributes="0"/> + <Component id="jLabel8" alignment="0" max="-2" attributes="0"/> + <Component id="jLabel6" alignment="0" max="-2" attributes="0"/> + <Component id="jLabel9" alignment="0" max="-2" attributes="0"/> + <Component id="jLabel1" alignment="0" max="-2" attributes="0"/> + <Component id="jLabel10" alignment="0" max="-2" attributes="0"/> </Group> <Component id="jLabel4" alignment="0" max="-2" attributes="0"/> </Group> <Component id="jLabel2" alignment="0" max="-2" attributes="0"/> </Group> - <Group type="102" attributes="0"> - <Component id="jLabel7" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - </Group> + <Component id="jLabel7" alignment="0" max="-2" attributes="0"/> </Group> + <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="0" max="-2" attributes="0"> <Component id="txtDeviceName" alignment="0" max="32767" attributes="0"/> <Component id="txtDeviceDescription" alignment="0" max="32767" attributes="0"/> @@ -49,14 +45,14 @@ <Component id="jScrollPaneRes" alignment="0" max="32767" attributes="0"/> <Component id="jScrollPaneParam" alignment="0" max="32767" attributes="0"/> <Group type="102" alignment="1" attributes="0"> - <Component id="txtTestResultSummary" pref="440" max="32767" attributes="0"/> + <Component id="txtTestResultSummary" min="-2" pref="440" max="-2" attributes="0"/> <EmptySpace type="unrelated" max="-2" attributes="0"/> <Component id="jButtonMoreResult" min="-2" max="-2" attributes="0"/> </Group> <Component id="txtTestSuite" alignment="0" max="32767" attributes="0"/> - <Group type="102" alignment="1" attributes="0"> - <Component id="txtTestName" max="32767" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="txtTestName" min="-2" pref="441" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> <Component id="jButtonMoreTest" min="-2" max="-2" attributes="0"/> </Group> </Group> @@ -80,13 +76,13 @@ <Group type="103" groupAlignment="0" attributes="0"> <Group type="102" attributes="0"> <Group type="103" groupAlignment="3" attributes="0"> - <Component id="txtTestName" alignment="3" min="-2" pref="30" max="-2" attributes="0"/> + <Component id="txtTestName" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="jButtonMoreTest" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/> </Group> <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="3" attributes="0"> - <Component id="txtTestSuite" alignment="3" min="-2" pref="30" max="-2" attributes="0"/> + <Component id="txtTestSuite" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="jLabel4" alignment="3" min="-2" max="-2" attributes="0"/> </Group> <EmptySpace max="-2" attributes="0"/> @@ -100,7 +96,7 @@ <Component id="jButtonMoreResult" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/> </Group> - <Component id="txtTestResultSummary" alignment="1" min="-2" pref="30" max="-2" attributes="0"/> + <Component id="txtTestResultSummary" alignment="1" min="-2" max="-2" attributes="0"/> </Group> <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> @@ -109,12 +105,12 @@ </Group> <EmptySpace max="-2" attributes="0"/> <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jLabelDeviceName" min="-2" max="-2" attributes="0"/> - <Component id="txtDeviceName" alignment="0" min="-2" pref="30" max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <Component id="txtDeviceName" alignment="0" min="-2" max="-2" attributes="0"/> </Group> <EmptySpace type="unrelated" max="-2" attributes="0"/> <Group type="103" groupAlignment="3" attributes="0"> - <Component id="txtDeviceDescription" alignment="3" min="-2" pref="30" max="-2" attributes="0"/> + <Component id="txtDeviceDescription" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/> </Group> <EmptySpace type="separate" max="-2" attributes="0"/> @@ -122,6 +118,8 @@ <Component id="jScrollPaneParam" pref="0" max="32767" attributes="0"/> <Group type="102" attributes="0"> <Component id="jLabel7" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel10" min="-2" max="-2" attributes="0"/> <EmptySpace min="0" pref="0" max="32767" attributes="0"/> </Group> </Group> @@ -139,7 +137,7 @@ </DimensionLayout> </Layout> <SubComponents> - <Component class="javax.swing.JLabel" name="jLabelDeviceName"> + <Component class="javax.swing.JLabel" name="jLabel1"> <Properties> <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> <Font name="Tahoma" size="14" style="0"/> @@ -147,7 +145,7 @@ <Property name="text" type="java.lang.String" value="Device name"/> </Properties> <AuxValues> - <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="jLabelDeviceName.setVisible(true);"/> + <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="jLabel1.setVisible(false);"/> </AuxValues> </Component> <Component class="javax.swing.JTextField" name="txtDeviceName"> @@ -157,15 +155,9 @@ <Font name="Tahoma" size="14" style="0"/> </Property> <Property name="text" type="java.lang.String" value="jTextField1"/> - <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[6, 26]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[72, 26]"/> - </Property> </Properties> <AuxValues> - <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="txtDeviceName.setVisible(true);"/> + <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="txtDeviceName.setVisible(false);"/> </AuxValues> </Component> <Component class="javax.swing.JLabel" name="jLabel2"> @@ -229,12 +221,6 @@ <Font name="Tahoma" size="14" style="0"/> </Property> <Property name="text" type="java.lang.String" value="jTextField2"/> - <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[6, 26]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[72, 26]"/> - </Property> </Properties> </Component> <Component class="javax.swing.JLabel" name="jLabel6"> @@ -271,12 +257,12 @@ </Property> <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor"> <TableColumnModel selectionModel="0"> - <Column maxWidth="150" minWidth="150" prefWidth="120" resizable="true"> + <Column maxWidth="150" minWidth="150" prefWidth="150" resizable="true"> <Title/> <Editor/> <Renderer/> </Column> - <Column maxWidth="200" minWidth="-1" prefWidth="120" resizable="true"> + <Column maxWidth="100" minWidth="-1" prefWidth="80" resizable="true"> <Title/> <Editor/> <Renderer/> @@ -379,7 +365,6 @@ </Property> <Property name="lineWrap" type="boolean" value="true"/> <Property name="rows" type="int" value="5"/> - <Property name="wrapStyleWord" type="boolean" value="true"/> </Properties> </Component> </SubComponents> @@ -426,12 +411,6 @@ <Font name="Tahoma" size="14" style="0"/> </Property> <Property name="text" type="java.lang.String" value="jTextField1"/> - <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[6, 26]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[72, 26]"/> - </Property> </Properties> </Component> <Component class="javax.swing.JButton" name="jButtonMoreResult"> @@ -461,6 +440,14 @@ <AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="jLabel9.setVisible(false);"/> </AuxValues> </Component> + <Component class="javax.swing.JLabel" name="jLabel10"> + <Properties> + <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> + <Font name="Tahoma" size="14" style="0"/> + </Property> + <Property name="text" type="java.lang.String" value="(Value valid for all devices)"/> + </Properties> + </Component> <Component class="javax.swing.JButton" name="jButtonOk1"> <Properties> <Property name="text" type="java.lang.String" value="Save for this device"/> diff --git a/plugins/TestingListDetails.java b/plugins/TestingListDetails.java index c071ba2..68f0a05 100644 --- a/plugins/TestingListDetails.java +++ b/plugins/TestingListDetails.java @@ -4,15 +4,25 @@ import ch.psi.utils.swing.SwingUtils; import java.awt.Desktop; +import java.awt.event.KeyEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.ImageIcon; +import javax.swing.JDialog; +import javax.swing.JPanel; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.table.DefaultTableModel; @@ -45,15 +55,7 @@ public class TestingListDetails extends javax.swing.JPanel { public static String TESTS_CONFIG_FILENAME = ".config"; public static Path TESTS_TESTS_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "tests"); public static Path TESTS_DEVICES_DEFAULT_DIR = Paths.get(".", "home", "script", "tests", "devices"); - public static String VALUE_SEPARATOR = "&"; - public static String PARAM_SEPARATOR = ";"; - - private String testName; - private String testDescription; - private String testPath; - private String deviceName; - private String deviceDescription; - private String devicePath; + /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always @@ -63,7 +65,7 @@ public class TestingListDetails extends javax.swing.JPanel { // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { - jLabelDeviceName = new javax.swing.JLabel(); + jLabel1 = new javax.swing.JLabel(); txtDeviceName = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); txtDeviceDescription = new javax.swing.JTextField(); @@ -87,18 +89,17 @@ public class TestingListDetails extends javax.swing.JPanel { jButtonMoreResult = new javax.swing.JButton(); jButtonMoreTest = new javax.swing.JButton(); jLabel9 = new javax.swing.JLabel(); + jLabel10 = new javax.swing.JLabel(); jButtonOk1 = new javax.swing.JButton(); - jLabelDeviceName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N - jLabelDeviceName.setText("Device name"); - jLabelDeviceName.setVisible(true); + jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N + jLabel1.setText("Device name"); + jLabel1.setVisible(false); txtDeviceName.setEditable(false); txtDeviceName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtDeviceName.setText("jTextField1"); - txtDeviceName.setMinimumSize(new java.awt.Dimension(6, 26)); - txtDeviceName.setPreferredSize(new java.awt.Dimension(72, 26)); - txtDeviceName.setVisible(true); + txtDeviceName.setVisible(false); jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel2.setText("Device Description"); @@ -124,8 +125,6 @@ public class TestingListDetails extends javax.swing.JPanel { txtTestName.setEditable(false); txtTestName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestName.setText("jTextField2"); - txtTestName.setMinimumSize(new java.awt.Dimension(6, 26)); - txtTestName.setPreferredSize(new java.awt.Dimension(72, 26)); jLabel6.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N jLabel6.setText("Last Test Result"); @@ -155,10 +154,10 @@ public class TestingListDetails extends javax.swing.JPanel { jScrollPaneParam.setViewportView(jTableParams); if (jTableParams.getColumnModel().getColumnCount() > 0) { jTableParams.getColumnModel().getColumn(0).setMinWidth(150); - jTableParams.getColumnModel().getColumn(0).setPreferredWidth(120); + jTableParams.getColumnModel().getColumn(0).setPreferredWidth(150); jTableParams.getColumnModel().getColumn(0).setMaxWidth(150); - jTableParams.getColumnModel().getColumn(1).setPreferredWidth(120); - jTableParams.getColumnModel().getColumn(1).setMaxWidth(200); + jTableParams.getColumnModel().getColumn(1).setPreferredWidth(80); + jTableParams.getColumnModel().getColumn(1).setMaxWidth(100); } jLabel7.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N @@ -190,7 +189,6 @@ public class TestingListDetails extends javax.swing.JPanel { txtTestDescription.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestDescription.setLineWrap(true); txtTestDescription.setRows(5); - txtTestDescription.setWrapStyleWord(true); jScrollPaneTestDesc.setViewportView(txtTestDescription); jEditorPaneHelp.setContentType("text/html"); // NOI18N @@ -211,8 +209,6 @@ public class TestingListDetails extends javax.swing.JPanel { txtTestResultSummary.setEditable(false); txtTestResultSummary.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestResultSummary.setText("jTextField1"); - txtTestResultSummary.setMinimumSize(new java.awt.Dimension(6, 26)); - txtTestResultSummary.setPreferredSize(new java.awt.Dimension(72, 26)); jButtonMoreResult.setText("More"); jButtonMoreResult.addActionListener(new java.awt.event.ActionListener() { @@ -232,6 +228,9 @@ public class TestingListDetails extends javax.swing.JPanel { jLabel9.setText("Last Result Details"); jLabel9.setVisible(false); + jLabel10.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N + jLabel10.setText("(Value valid for all devices)"); + jButtonOk1.setText("Save for this device"); jButtonOk1.setToolTipText("Save parameters values for this specific device"); jButtonOk1.addActionListener(new java.awt.event.ActionListener() { @@ -248,36 +247,34 @@ public class TestingListDetails extends javax.swing.JPanel { .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel5) - .addComponent(jLabel8) - .addComponent(jLabel6) - .addComponent(jLabel9) - .addComponent(jLabelDeviceName)) - .addGap(18, 18, 18)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel5) + .addComponent(jLabel8) + .addComponent(jLabel6) + .addComponent(jLabel9) + .addComponent(jLabel1) + .addComponent(jLabel10)) .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING)) .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)) - .addGroup(layout.createSequentialGroup() - .addComponent(jLabel7) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) + .addComponent(jLabel7, javax.swing.GroupLayout.Alignment.LEADING)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(txtDeviceName, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(txtDeviceName) .addComponent(txtDeviceDescription) .addComponent(jScrollPaneTestDesc) .addComponent(jScrollPaneRes, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jScrollPaneParam, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(txtTestResultSummary, javax.swing.GroupLayout.DEFAULT_SIZE, 440, Short.MAX_VALUE) + .addComponent(txtTestResultSummary, javax.swing.GroupLayout.PREFERRED_SIZE, 440, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jButtonMoreResult)) .addComponent(txtTestSuite) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(txtTestName, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createSequentialGroup() + .addComponent(txtTestName, javax.swing.GroupLayout.PREFERRED_SIZE, 441, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButtonMoreTest)))) .addGroup(layout.createSequentialGroup() .addComponent(jButtonOk1) @@ -294,12 +291,12 @@ public class TestingListDetails extends javax.swing.JPanel { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(txtTestName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(txtTestName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButtonMoreTest) .addComponent(jLabel5)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(txtTestSuite, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(txtTestSuite, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -310,24 +307,26 @@ public class TestingListDetails extends javax.swing.JPanel { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButtonMoreResult) .addComponent(jLabel6)) - .addComponent(txtTestResultSummary, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(txtTestResultSummary, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel9) .addComponent(jScrollPaneRes, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabelDeviceName) - .addComponent(txtDeviceName, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jLabel1) + .addComponent(txtDeviceName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(txtDeviceDescription, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(txtDeviceDescription, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPaneParam, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jLabel7) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel10) .addGap(0, 0, Short.MAX_VALUE))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) @@ -338,41 +337,21 @@ public class TestingListDetails extends javax.swing.JPanel { ); }// </editor-fold>//GEN-END:initComponents - private class Details{ - private HashMap hDetails; - public Details(HashMap details) { - hDetails = details; - } - public String get(String detailName){ - return hDetails.get(detailName).toString().replace("\"", ""); - } - } - private void fillComponents(HashMap hDetails) { - - Details details = new Details(hDetails); - testName = details.get("testName"); - testDescription = details.get("testDescription"); - testPath = details.get("testPath"); - deviceName = details.get("deviceName"); - deviceDescription = details.get("deviceDescription"); - devicePath = details.get("devicePath"); //add values to each text box - this.txtDeviceName.setText(deviceName); - this.txtDeviceDescription.setText(deviceDescription); - this.txtTestDescription.setText(testDescription); - this.txtTestName.setText(testName); - this.txtTestSuite.setText(details.get("testSuite")); - this.txtTestResult.setText(details.get("time") + "\n" + - details.get("deviceName") + " - " + - details.get("testName") + "\n" + - details.get("testResult")); - this.txtTestResultSummary.setText( details.get("testResult")); + this.txtDeviceName.setText(hDetails.get("deviceName").toString()); + this.txtDeviceDescription.setText(hDetails.get("deviceDescription").toString()); + this.txtTestDescription.setText(hDetails.get("testDescription").toString()); + this.txtTestSuite.setText(hDetails.get("testSuite").toString()); + this.txtTestName.setText(hDetails.get("testName").toString()); + this.txtTestResult.setText(hDetails.get("time").toString() + "\n" + + hDetails.get("deviceName").toString() + " - " + + hDetails.get("testName").toString() + "\n" + + hDetails.get("testResult").toString()); + this.txtTestResultSummary.setText( hDetails.get("testResult").toString()); this.txtTestResultSummary.setCaretPosition(0); - System.out.println("detail testPath: "+testPath); - System.out.println("detail devicePath: "+devicePath); //help text - showHelp(details.get("testPath"), details.get("testHelp")); + showHelp(String.valueOf(hDetails.get("testPath")), String.valueOf(hDetails.get("testHelp"))); //parameters table HashMap hParams = (HashMap) hDetails.get("parameters"); String name="", value="", description=""; @@ -382,9 +361,9 @@ public class TestingListDetails extends javax.swing.JPanel { Object param = entry; if(param instanceof String){ name = (String) param; - Details attributes = new Details((HashMap) hParams.get(param)); - value = attributes.get("value"); - description = attributes.get("description"); + HashMap attributes = (HashMap) hParams.get(param); + value = (String) attributes.get("value"); + description = (String) attributes.get("description"); model.addRow(new Object[]{name, value, description}); } jTableParams.setModel(model); @@ -432,13 +411,40 @@ public class TestingListDetails extends javax.swing.JPanel { } } + /** + * Build a map with optional parameters to be passed to the testing script. + * The map is like this: parameters \_ name | \_ value | \_ description \_ + * name | \_ value | \_ description ... the name 'name' is the mapping key. + * 'value' and 'description' are constant mapping keys of a nested map. + * + * @param parametersString string containing the parameters. Syntax: + * name:value:description[;name:value:description;...] + */ + private HashMap buildParametersMap(String parametersString) { + HashMap mParameters = new HashMap(); // contains name and attributes + HashMap mParameterAttributes = new HashMap(); //contians value and description + String[] dsParameterAttributes = null; + String[] dsParameters = parametersString.split(";"); + for (String sParameter : dsParameters) { + dsParameterAttributes = sParameter.split(":"); + if (dsParameterAttributes.length > 2) { + mParameterAttributes = new HashMap(); + mParameterAttributes.put("value", (Object) dsParameterAttributes[1]); + mParameterAttributes.put("description", dsParameterAttributes[2]); + //add parameter name and attributes (value + description) + mParameters.put(dsParameterAttributes[0], mParameterAttributes); + } + } + return mParameters; + } + private HashMap getParametersFromTable(){ HashMap mParameters = new HashMap(); // contains name and attributes HashMap mParameterAttributes = new HashMap(); //contians value and description for(int row=0 ; row<jTableParams.getRowCount() ; row++){ String sParam = jTableParams.getValueAt(row, 0).toString(); - String sVal = "\"" + jTableParams.getValueAt(row, 1).toString().replace("\"", "").replace("&","").replace(";","") + "\""; - String sDescr = "\"" +jTableParams.getValueAt(row, 2).toString() + "\""; + String sVal = jTableParams.getValueAt(row, 1).toString(); + String sDescr = jTableParams.getValueAt(row, 2).toString(); mParameterAttributes = new HashMap(); mParameterAttributes.put("value", (Object) sVal); mParameterAttributes.put("description", sDescr); @@ -456,7 +462,7 @@ public class TestingListDetails extends javax.swing.JPanel { boolean success = false; try { Path path = Paths.get(testDir + FilenameUtils.separatorsToSystem("/"+TESTS_CONFIG_FILENAME)); - System.out.println("Test path: "+path); + File configFile = path.toFile(); //Loop among the test parameters and generate variable assignement syntax for python String sTestParameters = ""; String name="", value="", description=""; @@ -464,12 +470,11 @@ public class TestingListDetails extends javax.swing.JPanel { Object param = entry; if(param instanceof String){ name = (String) param; - Details attributes = new Details((HashMap) hmTestParams.get(param)); - value = "\""+attributes.get("value")+"\""; - description = "\""+attributes.get("description")+"\""; + HashMap attributes = (HashMap) hmTestParams.get(param); + value = (String) attributes.get("value"); + description = (String) attributes.get("description"); //build the python code for getting the test parameter - sTestParameters = sTestParameters + name + VALUE_SEPARATOR + value + VALUE_SEPARATOR + description + PARAM_SEPARATOR ; - //System.out.println("sTestParameters: "+sTestParameters); + sTestParameters = sTestParameters + name + ":" + value + ":" + description + ";" ; } } FileInputStream in = new FileInputStream(path.toFile()); @@ -511,8 +516,8 @@ public class TestingListDetails extends javax.swing.JPanel { private void jButtonMoreTestActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonMoreTestActionPerformed if(this.jButtonMoreTest.getText()=="More"){ - //this.txtDeviceName.setVisible(true); - //this.jLabelDeviceName.setVisible(true); + this.txtDeviceName.setVisible(true); + this.jLabel1.setVisible(true); this.jLabel2.setVisible(true); this.txtDeviceDescription.setVisible(true); this.jButtonMoreTest.setText("Less"); @@ -521,8 +526,8 @@ public class TestingListDetails extends javax.swing.JPanel { this.txtTestSuite.setVisible(true); this.jLabel8.setVisible(true); }else{ - //this.txtDeviceName.setVisible(false); - //this.jLabelDeviceName.setVisible(false); + this.txtDeviceName.setVisible(false); + this.jLabel1.setVisible(false); this.jLabel2.setVisible(false); this.txtDeviceDescription.setVisible(false); this.jScrollPaneTestDesc.setVisible(false); @@ -545,6 +550,8 @@ public class TestingListDetails extends javax.swing.JPanel { private javax.swing.JButton jButtonOk; private javax.swing.JButton jButtonOk1; private javax.swing.JEditorPane jEditorPaneHelp; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; @@ -552,7 +559,6 @@ public class TestingListDetails extends javax.swing.JPanel { private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; - private javax.swing.JLabel jLabelDeviceName; private javax.swing.JScrollPane jScrollPaneHtml; private javax.swing.JScrollPane jScrollPaneParam; private javax.swing.JScrollPane jScrollPaneRes; diff --git a/plugins/icons/Thumbs.db b/plugins/icons/Thumbs.db index a98b9f90baf88561fccbd2425e2acc6393bb1155..e1493ed4a0034a53e5329630106839c7b12ee3c4 100644 GIT binary patch delta 765 zcmZoTz}L{jI6+5+k%55$guy_7fq@Cg0O5cC|Nn;wGB9jRoX<G1KyVUM3=2qjasrdc z<PtUk#(x_Vs~IP;<nSfvtiNOQ;1VM<P=|xT<|>wJoNNc;=LkMj+Z@LCmXVhcsO!H7 zP!dE>zR037xkMm<2gDIY7W^U*!oh<qP$C$@!GR>O`HP@G8!rPZP>35zcyftE01rP< zfCX9bi$uU=7hQwNC6XbNJ#=+8f06X(fVe~$Sy_ov01q2bfE`)zixODR<Pv3wGsTf4 zH-AwE86*T1LU>6hgagC@0k9vx==e`|7BHM#qT9mQy7{N>W+sIE7K4C^DStK@onRNp zg$Dno=dre$g1Iv$-w<}J7x#2=46*QE8f@rwBtYP=@y46g849ir5z+bz-#T}zZxHZ( z&6rcF?Y}{>ampjs9Gw^er&$ja-(33pzWRR3LD53bIAde|%Ko39pLgFpST(m@DXp<Y zPpP=*+)my@$1Er7Pw$>~r(rE)-K0%A>jmEjoZELZ{zXF7Y?YH-7bkvT+gtyG^JCA~ z`i38pYR^qLJzN4ym_JVaze~Pv*0P^#R=o<XNDHlGe|fv_vBmMo_!;k+He0TJJ?pcg zRrcMFj`kbg&eY^PeE9gjKaJb|?r@RdNpoBv-gU&kif7GMb*q@G5&@_A)Eo_K^-gL4 zS#HuRUfq6@{bhE92&?$ZdzY)3n9p2NGO3-h=hQ#38DCu5HYtB+|1o2eqfgSKVzX!5 zn;ANivw|lGPIi>DpKQRwF}cC|@N{QOW~0faHh$pn{$c|ScUuVk#rDkP1JWIvJ?ww5 KY<AdnfDr(rB2Vl9 delta 212840 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�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 diff --git a/plugins/json-simple-1.1.1.jar b/plugins/json-simple-1.1.1.jar deleted file mode 100644 index 66347a6c86b7d6442358ca7643e4dc484fb01866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23737 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 A{Qv*} diff --git a/script/tests/tests/New Structure Tests/new bx84 2/.config b/script/tests/tests/New Structure Tests/new bx84 2/.config new file mode 100644 index 0000000..d88084e --- /dev/null +++ b/script/tests/tests/New Structure Tests/new bx84 2/.config @@ -0,0 +1,4 @@ +#Tue Mar 20 13:40:52 CET 2018 +name=new bx84 2 +parameters= +description=bla diff --git a/script/tests/tests/New Structure Tests/new bx84 2/help.html b/script/tests/tests/New Structure Tests/new bx84 2/help.html new file mode 100644 index 0000000..9b5aa70 --- /dev/null +++ b/script/tests/tests/New Structure Tests/new bx84 2/help.html @@ -0,0 +1,15 @@ +<html> +<!-- Copyright (c) 2015 Paul Scherrer Institute. All rights reserved. --> +<body> +<h2>Description</h2> +bla +<h2>Parameters</h2> +<table> + +</table> +<h2>Contact</h2> +<a href="https://intranet.psi.ch/search/#?t=phonebook&q=boccioli_m">Marco Boccioli</a> <br/> +Tel. 3078 +</html> +</body> + diff --git a/script/tests/tests/New Structure Tests/new bx84 2/new bx84 2.py b/script/tests/tests/New Structure Tests/new bx84 2/new bx84 2.py new file mode 100644 index 0000000..e1adb8b --- /dev/null +++ b/script/tests/tests/New Structure Tests/new bx84 2/new bx84 2.py @@ -0,0 +1,174 @@ +# Test name: new bx84 2 +# bla +# Copyright (c) 2015 Paul Scherrer Institute. All rights reserved. + +###### Init - DO NOT MODIFY THE CODE BELOW ###### +global sys, inspect, os, traceback +import sys, inspect, os, traceback + + +def startTest(testName, DEVICE, params): + """ + Main method running the test + """ + # by default, assume the test failed: + ret = 'Test failed' + status = False + # put the whole custom code under try/catch. + try: + # get the path of this script: + testPath = inspect.getfile(inspect.currentframe()) + # init the testing tool class: + test = TestingTool(testName, testPath, DEVICE, params) + +################ END OF Init ##################### +######### WRITE YOUR CODE HERE BELOW ############# + + """ + All the code in this section # WRITE YOUR CODE HERE BELOW # is just an example and can be modified/deleted. + It must be indented to the same level as this comment. + ----------------------------------- + GETTING INPUTS: + ----------------------------------- + If needed, the following methods are available: + + test.getPath() string, path of this test file + test.getName() string, name of this test + test.getDeviceName() string, device for which the test must run (typically it is the beginning of a process variable name) + test.getPlotName() string, name to be given to the plot when using setPlotTitle(). Example: scan.setPlotTitle(test.getPlotName()) + ----------------------------------- + GETTING TEST PARAMETERS: + ----------------------------------- + if you need to get parameters for the test, use: + + myParamValue = test.getParam('myParamName') + + the calls to getParam are added to the code automatically, one per parameter, when creating the new test. + NOTE: Casting may be necessary. + See the test config for the list of parameters specific to the test. + ----------------------------------- + SETTING OUTPUTS: + ----------------------------------- + When the test has ended (error or success), this method must be called in order to return to pshell: + + test.sendFeedback(ret,success) + + ret string, a text summarizing the result of the test. + success bool, True = test successful. False = test failed. + ----------------------------------- + LOG INFO: + ----------------------------------- + when some information must be shown on the log on pshell, use the following line: + test.log('text to log') + """ + + ########## Example (can be removed) ###### + + # print the list of parameters passed. If any error, stop and send feedback. + test.log("Example - Test name: " + test.getName()) + test.log("Example - Device name: " + test.getDeviceName() ) + try: + test.log("Running test with the following parameters:") + test.printParams() + # If present, use the parameters here below for your test script. + # These parameters were automatically generated: you might need to change the casting. + + except: + import traceback + # test failed, write the report into the variables ret and success and send feedback: + ret = 'Could not retrieve testing parameters - ' + traceback.format_exc() + success = False + test.sendFeedback(ret, success) + return + + # loop to read channels for a while and plot the channels values. + # initialise plot tab with 2 plots: pass here the axis names: + scan = ManualScan(['sample'], ['Status (MSTA)', 'Position (VAL)']) + # set plot name(tab title): + scan.setPlotTitle(test.getPlotName()) + # start plots. See further below how to add points to the plots (scan): + scan.start() + + # inject a sinus into the plot, as example + from math import sin + motor_msta = 0 + # take 100 samples of a sinus and a jigsaw plot them: + for sample in range(0, 100): + readback1 = sample #the x axis. + sleep(0.1) # settling time. + # get value (it is translated to a caget): + motor_msta = motor_msta + +1 + if motor_msta > 50: + motor_msta = 0 + # get value: + motor_val = sin(float(sample)/10.0)*10.0-10.0 + # add values to plot: + scan.append([readback1], [readback1], [motor_msta, motor_val]) + + # now try with data from real device: this part will most probably fail: correct the PV names with existing ones. + try: + # set up connection to channels. "type" of data can be "d" (= double), "l" (= long). + pv_motor_msta = Channel(test.getDeviceName() + ':IST:2' , type='d') + pv_motor_val = Channel(test.getDeviceName() + ':IST:1' , type='d') + pv_motor_com = Channel(test.getDeviceName() + ':COM:2' , type='d') + except: + import traceback + # prepare return information: return text: + ret = 'Unable to create channel - ' + traceback.format_exc() + # prepare return information: return success: + success = False + # send return information: + test.sendFeedback(ret, success) + return + # send a command to a channel (it is translated to a caput): uncomment this line below to try it + #pv_motor_com.put(1.0, timeout=None) # optionally, a timeout can be given. + # take 100 samples of the channels and plot them: + for sample in range(0, 100): + readback1 = sample #the x axis. + sleep(0.1) # settling time. + # get value (it is translated to a caget): + motor_msta = pv_motor_msta.get() + # get value: + motor_val = pv_motor_val.get() + # add values to plot: + scan.append([readback1], [readback1], [motor_msta, motor_val]) + + # Closing channels: all channels that were opened with Channel() must be closed before exit: + pv_motor_msta.close() + pv_motor_val.close() + pv_motor_com.close() + + # IMPORTANT: if the test was successful, write the report into the variables ret and success. + # for example, write the following: + ret = "Example - Test successful, here some detail: ..." + success = True + test.sendFeedback(ret, success) + # once the test is finished, no need to do anything. The code below yours will do the rest. + ################ End of Example ########## + +################ END OF YOUR CODE ################ +###### Final - DO NOT MODIFY THE CODE BELOW ###### + + # just in case the feedback was forgotten. + test.sendFeedback(ret, success) + except (KeyboardInterrupt): + # user stop error handler. + import traceback + ret = 'Test stopped by user.' + success = False + test.sendFeedback(ret, success) + except: + # generic error handler. + import traceback + ret = traceback.format_exc() + success = False + test.sendFeedback(ret, success) + + +# launch the test. +startTest(test, device, parameters) + +################ END OF Final #################### +#### IF NEEDED, ADD YOUR FUNCTIONS HERE BELOW #### +# Indent to end left +# def yourCustomFunction: