diff --git a/plugins/EditTestingList.form b/plugins/EditTestingList.form index 3381652..4b9d90f 100644 --- a/plugins/EditTestingList.form +++ b/plugins/EditTestingList.form @@ -38,6 +38,17 @@ + + + + + + + + + + + @@ -55,11 +66,22 @@ + + + + + + + + + + + @@ -72,8 +94,12 @@ - + + + + + @@ -95,7 +121,7 @@ - + @@ -111,11 +137,11 @@ - + - + - + @@ -123,9 +149,9 @@ - - - + + + @@ -133,29 +159,29 @@ - + - + - + - + - + diff --git a/plugins/EditTestingList.java b/plugins/EditTestingList.java index d09dcf8..c08ad41 100644 --- a/plugins/EditTestingList.java +++ b/plugins/EditTestingList.java @@ -3,7 +3,22 @@ */ import ch.psi.utils.swing.SwingUtils; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.nio.file.Paths; +import java.util.Iterator; +import java.util.Properties; +import java.util.Vector; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JFileChooser; +import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; +import org.apache.commons.io.FilenameUtils; /* * To change this license header, choose License Headers in Project Properties. @@ -26,7 +41,8 @@ public class EditTestingList extends javax.swing.JPanel { public EditTestingList(TableModel hDetails) { initComponents(); - fillComponents(hDetails); + //fillComponents(hDetails); + loadTests(); } /** @@ -44,9 +60,9 @@ public class EditTestingList extends javax.swing.JPanel { jScrollPane5 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); jPanel2 = new javax.swing.JPanel(); - cmDefault2 = new javax.swing.JButton(); - cmCancel2 = new javax.swing.JButton(); - cmOk2 = new javax.swing.JButton(); + cmDefault = new javax.swing.JButton(); + cmCancel = new javax.swing.JButton(); + cmOk = new javax.swing.JButton(); setPreferredSize(new java.awt.Dimension(963, 556)); setLayout(new java.awt.BorderLayout()); @@ -54,29 +70,37 @@ public class EditTestingList extends javax.swing.JPanel { jPanel1.setPreferredSize(new java.awt.Dimension(963, 556)); jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.LINE_AXIS)); + jScrollPane2.setMaximumSize(new java.awt.Dimension(4000, 32767)); + jScrollPane2.setMinimumSize(new java.awt.Dimension(100, 27)); + jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 146)); + jList2.setModel(new javax.swing.AbstractListModel() { String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; public int getSize() { return strings.length; } public Object getElementAt(int i) { return strings[i]; } }); + jList2.setMaximumSize(new java.awt.Dimension(0, 0)); + jList2.setMinimumSize(new java.awt.Dimension(0, 0)); jScrollPane2.setViewportView(jList2); jPanel1.add(jScrollPane2); + jScrollPane5.setMinimumSize(new java.awt.Dimension(300, 300)); + jTable1.setFont(new java.awt.Font("Tahoma", 0, 15)); // NOI18N jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { - "Select", "Start", "Time", "Device Name", "Device Description", "Test Suite", "Test Name", "Test Peth", "Test Parameters", "Test Description", "Test Help", "Last Test Result", "Status", "" + "Select", "Start", "Device Name", "Device Description", "Test Suite", "Test Name", "Test Peth", "Test Description", } ) { 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, javax.swing.Icon.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 }; boolean[] canEdit = new boolean [] { - true, true, false, false, false, false, false, false, false, false, false, false, false, false + true, true, false, false, false, false, false, false }; public Class getColumnClass(int columnIndex) { @@ -87,6 +111,7 @@ public class EditTestingList extends javax.swing.JPanel { return canEdit [columnIndex]; } }); + jTable1.setColumnSelectionAllowed(true); jTable1.setDragEnabled(true); jTable1.setDropMode(javax.swing.DropMode.INSERT); jTable1.setRowHeight(22); @@ -101,33 +126,34 @@ public class EditTestingList extends javax.swing.JPanel { } }); jScrollPane5.setViewportView(jTable1); + jTable1.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); jPanel1.add(jScrollPane5); add(jPanel1, java.awt.BorderLayout.CENTER); - jPanel2.setPreferredSize(new java.awt.Dimension(263, 30)); + jPanel2.setPreferredSize(new java.awt.Dimension(263, 50)); - cmDefault2.setText("Save as Default"); + cmDefault.setText("Save as Default"); this.cmCancel.setVisible(false); this.cmOk.setVisible(false); this.cmDefault.setVisible(false); - cmDefault2.addActionListener(new java.awt.event.ActionListener() { + cmDefault.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - cmDefault2ActionPerformed(evt); + cmDefaultActionPerformed(evt); } }); - cmCancel2.setText("Cancel"); + cmCancel.setText("Cancel"); this.cmCancel.setVisible(false); this.cmOk.setVisible(false); - cmCancel2.addActionListener(new java.awt.event.ActionListener() { + cmCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - cmCancel2ActionPerformed(evt); + cmCancelActionPerformed(evt); } }); - cmOk2.setText("Ok"); + cmOk.setText("Ok"); this.cmCancel.setVisible(false); this.cmOk.setVisible(false); @@ -136,19 +162,19 @@ public class EditTestingList extends javax.swing.JPanel { jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() - .addComponent(cmDefault2, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cmDefault, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 223, Short.MAX_VALUE) - .addComponent(cmOk2, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cmOk, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(32, 32, 32) - .addComponent(cmCancel2)) + .addComponent(cmCancel)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(cmCancel2, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(cmOk2, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(cmDefault2, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(cmCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cmOk, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cmDefault, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(25, 25, 25)) ); @@ -157,9 +183,119 @@ public class EditTestingList extends javax.swing.JPanel { private void fillComponents(TableModel hDetails) { jTable1.setModel(hDetails); + } + /** + * Load test list from file + * + * @param file file containing the settings + */ + private void loadSettings(String sFileName) { + final JFileChooser fc = new JFileChooser(); + File file = new File(sFileName); + if (file.isFile()){ + 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(); + } catch (Exception ex) { + ex.printStackTrace(); + SwingUtils.showMessage(this, "loadSettings()", ex.toString()); + } + } + } + + + /** + * scan tests directory, scan devices directory, search for their test cases + * and scan for tests. + * + * @throws FileNotFoundException + * @throws IOException + */ + public void loadTests() { + 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[] listOfFiles = (TestingList.TESTS_DEVICES_DEFAULT_DIR.toFile()).listFiles(); + for (File listOfFile : listOfFiles) { + propDevice.clear(); + if (listOfFile.isFile()) { + } else if (listOfFile.isDirectory()) { + File configFile = new File(listOfFile.getPath() + FilenameUtils.separatorsToSystem("/.config")); + if (configFile.exists() && !configFile.isDirectory()) { + InputStream is = null; + try { + is = new FileInputStream(configFile); + } catch (FileNotFoundException ex) { + Logger.getLogger(EditTestingList.class.getName()).log(Level.SEVERE, null, ex); + } + if(is != null){ + try { + propDevice.load(is); + } catch (IOException ex) { + Logger.getLogger(EditTestingList.class.getName()).log(Level.SEVERE, null, ex); + } + //config of device was loaded. now load the config of each test belonging to the device + //sTestName = TESTS_TESTS_DEFAULT_DIR + propDevice.getProperty("tests"); + //testsFolder = new File(sTestName); + testsFolder = Paths.get(TestingList.TESTS_TESTS_DEFAULT_DIR.toString(), propDevice.getProperty("tests")).toFile(); + if (testsFolder.exists() && testsFolder.isDirectory()) { + File[] listOfTests = testsFolder.listFiles(); + for (File listOfTest : listOfTests) { + propTest.clear(); + if (listOfTest.isDirectory()) { + configFile = new File(listOfTest.getPath() + FilenameUtils.separatorsToSystem("/.config")); + if (configFile.exists() && !configFile.isDirectory()) { + InputStream ist = null; + try { + ist = new FileInputStream(configFile); + } catch (FileNotFoundException ex) { + Logger.getLogger(EditTestingList.class.getName()).log(Level.SEVERE, null, ex); + } + try { + propTest.load(ist); + } catch (IOException ex) { + Logger.getLogger(EditTestingList.class.getName()).log(Level.SEVERE, null, ex); + } + addToTable("", + propDevice.getProperty("name"), + propDevice.getProperty("description"), + propDevice.getProperty("tests"), + "path", + propTest.getProperty("name"), + propTest.getProperty("parameters")); + iCounter++; + } + } + } + } + } + else{ + SwingUtils.showMessage(this, "loadTests()", "Could not find any test"); + } + } + } + } + } + private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MouseClicked if (this.jTable1.isEnabled()) { @@ -182,19 +318,19 @@ public class EditTestingList extends javax.swing.JPanel { }//GEN-LAST:event_jTable1KeyReleased - private void cmCancel2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmCancel2ActionPerformed + private void cmCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmCancelActionPerformed // TODO add your handling code here: - }//GEN-LAST:event_cmCancel2ActionPerformed + }//GEN-LAST:event_cmCancelActionPerformed - private void cmDefault2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmDefault2ActionPerformed + private void cmDefaultActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmDefaultActionPerformed // TODO add your handling code here: - }//GEN-LAST:event_cmDefault2ActionPerformed + }//GEN-LAST:event_cmDefaultActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton cmCancel2; - private javax.swing.JButton cmDefault2; - private javax.swing.JButton cmOk2; + private javax.swing.JButton cmCancel; + private javax.swing.JButton cmDefault; + private javax.swing.JButton cmOk; private javax.swing.JList jList2; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; @@ -202,4 +338,8 @@ public class EditTestingList extends javax.swing.JPanel { private javax.swing.JScrollPane jScrollPane5; private javax.swing.JTable jTable1; // End of variables declaration//GEN-END:variables + + private void addToTable(String property, String property0, String property1, String property2, String property3, String property4, String property5) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/plugins/TestingList.java b/plugins/TestingList.java index 55e6f17..abc7992 100644 --- a/plugins/TestingList.java +++ b/plugins/TestingList.java @@ -239,9 +239,9 @@ public class TestingList extends Panel { Logger logger = Logger.getLogger("TestsLog"); //these paths are converted to unix or win path according to host OS - private final Path TESTS_DEVICES_DEFAULT_DIR = Paths.get(".","home", "script", "tests", "devices"); - private final Path TESTS_TESTS_DEFAULT_DIR = Paths.get(".","home", "script", "tests", "tests"); - private final Path TESTS_LOG_DEFAULT_DIR = Paths.get(".","home", "script", "tests", "log", "TestsLog"+ getnow() + ".txt"); + 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 final Path TESTS_LOG_DEFAULT_DIR = Paths.get(".","home", "script", "tests", "log", "TestsLog"+ getnow() + ".txt"); private void log(Object text){ @@ -1404,7 +1404,7 @@ public class TestingList extends Panel { } /** - * Save current setup in a file. The current position of table rows is also + * Load current setup from a file. The current position of table rows is also * saved. * * @param file file containing the settings