/* * Copyright (c) 2015 Paul Scherrer Institute. All rights reserved. */ import ch.psi.utils.swing.SwingUtils; import java.awt.Desktop; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Properties; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.table.DefaultTableModel; import org.apache.commons.io.FilenameUtils; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author boccioli_m */ public class TestingListDetails extends javax.swing.JPanel { /** * Creates new form TestingListDetails */ public TestingListDetails() { initComponents(); } public TestingListDetails(HashMap hDetails) { initComponents(); fillComponents(hDetails); } 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 = ";"; /** * 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 * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { jLabelDeviceName = new javax.swing.JLabel(); txtDeviceName = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); txtDeviceDescription = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); txtTestSuite = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); txtTestName = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel(); jScrollPaneParam = new javax.swing.JScrollPane(); jTableParams = new javax.swing.JTable(); jLabel7 = new javax.swing.JLabel(); jScrollPaneRes = new javax.swing.JScrollPane(); txtTestResult = new javax.swing.JTextArea(); jLabel8 = new javax.swing.JLabel(); jScrollPaneTestDesc = new javax.swing.JScrollPane(); txtTestDescription = new javax.swing.JTextArea(); jScrollPaneHtml = new javax.swing.JScrollPane(); jEditorPaneHelp = new javax.swing.JEditorPane(); jButtonOk = new javax.swing.JButton(); txtTestResultSummary = new javax.swing.JTextField(); 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); txtDeviceName.setEditable(false); txtDeviceName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtDeviceName.setText("jTextField1"); txtDeviceName.setVisible(true); jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel2.setText("Device Description"); jLabel2.setVisible(false); txtDeviceDescription.setEditable(false); txtDeviceDescription.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtDeviceDescription.setText("jTextField2"); txtDeviceDescription.setVisible(false); jLabel4.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel4.setText("Test Case/Suite"); jLabel4.setVisible(false); txtTestSuite.setEditable(false); txtTestSuite.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestSuite.setText("jTextField2"); txtTestSuite.setVisible(false); jLabel5.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N jLabel5.setText("Test Name"); txtTestName.setEditable(false); txtTestName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestName.setText("jTextField2"); jLabel6.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N jLabel6.setText("Last Test Result"); jScrollPaneParam.setMinimumSize(new java.awt.Dimension(150, 100)); jTableParams.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jTableParams.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Parameter", "Value", "Description" } ) { boolean[] canEdit = new boolean [] { false, true, false }; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); jTableParams.setDragEnabled(true); jTableParams.setMinimumSize(new java.awt.Dimension(180, 100)); jTableParams.setRowHeight(20); jScrollPaneParam.setViewportView(jTableParams); if (jTableParams.getColumnModel().getColumnCount() > 0) { jTableParams.getColumnModel().getColumn(0).setMinWidth(150); jTableParams.getColumnModel().getColumn(0).setPreferredWidth(150); jTableParams.getColumnModel().getColumn(0).setMaxWidth(150); jTableParams.getColumnModel().getColumn(1).setPreferredWidth(120); jTableParams.getColumnModel().getColumn(1).setMaxWidth(200); } jLabel7.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N jLabel7.setText("Test Parameters"); jScrollPaneRes.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jScrollPaneRes.setMinimumSize(new java.awt.Dimension(150, 100)); jScrollPaneRes.setPreferredSize(new java.awt.Dimension(146, 91)); jScrollPaneRes.setVisible(false); txtTestResult.setEditable(false); txtTestResult.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background")); txtTestResult.setColumns(20); txtTestResult.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestResult.setLineWrap(true); txtTestResult.setRows(5); jScrollPaneRes.setViewportView(txtTestResult); jLabel8.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jLabel8.setText("Test Description"); jLabel8.setVisible(false); jScrollPaneTestDesc.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jScrollPaneTestDesc.setVisible(false); txtTestDescription.setEditable(false); txtTestDescription.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.background")); txtTestDescription.setColumns(20); txtTestDescription.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestDescription.setLineWrap(true); txtTestDescription.setRows(5); jScrollPaneTestDesc.setViewportView(txtTestDescription); jEditorPaneHelp.setContentType("text/html"); // NOI18N jEditorPaneHelp.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jEditorPaneHelp.setDropMode(javax.swing.DropMode.INSERT); jEditorPaneHelp.setMinimumSize(new java.awt.Dimension(6, 400)); jEditorPaneHelp.setPreferredSize(new java.awt.Dimension(6, 400)); jScrollPaneHtml.setViewportView(jEditorPaneHelp); jButtonOk.setText("Save as default"); jButtonOk.setToolTipText("Save parameters values as default (fo this test)"); jButtonOk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonOkActionPerformed(evt); } }); txtTestResultSummary.setEditable(false); txtTestResultSummary.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestResultSummary.setText("jTextField1"); jButtonMoreResult.setText("More"); jButtonMoreResult.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonMoreResultActionPerformed(evt); } }); jButtonMoreTest.setText("More"); jButtonMoreTest.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonMoreTestActionPerformed(evt); } }); jLabel9.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 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() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonOk1ActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .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.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel5) .addComponent(jLabel8) .addComponent(jLabel6) .addComponent(jLabel9) .addComponent(jLabelDeviceName) .addComponent(jLabel10)) .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING)) .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)) .addComponent(jLabel7, javax.swing.GroupLayout.Alignment.LEADING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .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.PREFERRED_SIZE, 440, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jButtonMoreResult)) .addComponent(txtTestSuite) .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) .addGap(18, 18, 18) .addComponent(jButtonOk, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(18, 18, 18) .addComponent(jScrollPaneHtml, javax.swing.GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .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, 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, 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) .addComponent(jLabel8) .addComponent(jScrollPaneTestDesc, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButtonMoreResult) .addComponent(jLabel6)) .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, 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, 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) .addComponent(jButtonOk) .addComponent(jButtonOk1))) .addComponent(jScrollPaneHtml, javax.swing.GroupLayout.DEFAULT_SIZE, 559, Short.MAX_VALUE)) .addContainerGap()) ); }// //GEN-END:initComponents private void fillComponents(HashMap hDetails) { //add values to each text box 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); //help text showHelp(String.valueOf(hDetails.get("testPath")), String.valueOf(hDetails.get("testHelp"))); //parameters table HashMap hParams = (HashMap) hDetails.get("parameters"); String name="", value="", description=""; DefaultTableModel model = (DefaultTableModel) jTableParams.getModel(); for(Object entry : hParams.keySet()){ Object param = entry; if(param instanceof String){ name = (String) param; 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); } } //load and show help private void showHelp(String sTestPath, String sHelpText){ this.jEditorPaneHelp.addHyperlinkListener(new HyperlinkListener() { @Override public void hyperlinkUpdate(HyperlinkEvent hle) { if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType())) { //System.out.println(hle.getURL()); Desktop desktop = Desktop.getDesktop(); try { desktop.browse(hle.getURL().toURI()); } catch (Exception ex) { ex.printStackTrace(); } } } }); this.jEditorPaneHelp.setEditable(false); //if there is no input, exit if(sTestPath == "" && sHelpText == ""){ return; } File fTest = new File(sTestPath); String sParentPath = fTest.getParent().toString(); File fHelp = new File(FilenameUtils.separatorsToSystem(sParentPath + "/help.html")); if(fHelp.isFile()){//if local help file existis: try { this.jEditorPaneHelp.setPage(fHelp.toURI().toURL()); } catch (IOException ex) { this.jEditorPaneHelp.setText(String.valueOf(ex)); } } else { //help.html file is present. see if a plain text has been given from .config file if(sHelpText.isEmpty() || sHelpText == "null"){ this.jEditorPaneHelp.setText("[No help available]"); //this.jEditorPaneHelp.setVisible(false); }else { this.jEditorPaneHelp.setText(sHelpText); } } } private HashMap getParametersFromTable(){ HashMap mParameters = new HashMap(); // contains name and attributes HashMap mParameterAttributes = new HashMap(); //contians value and description for(int row=0 ; row // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButtonMoreResult; private javax.swing.JButton jButtonMoreTest; private javax.swing.JButton jButtonOk; private javax.swing.JButton jButtonOk1; private javax.swing.JEditorPane jEditorPaneHelp; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; 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; private javax.swing.JScrollPane jScrollPaneTestDesc; private javax.swing.JTable jTableParams; private javax.swing.JTextField txtDeviceDescription; private javax.swing.JTextField txtDeviceName; private javax.swing.JTextArea txtTestDescription; private javax.swing.JTextField txtTestName; private javax.swing.JTextArea txtTestResult; private javax.swing.JTextField txtTestResultSummary; private javax.swing.JTextField txtTestSuite; // End of variables declaration//GEN-END:variables // }