/* * Copyright (c) 2015 Paul Scherrer Institute. All rights reserved. */ import ch.psi.utils.swing.SwingUtils; import ch.psi.utils.swing.SwingUtils.OptionResult; import ch.psi.utils.swing.SwingUtils.OptionType; import java.awt.Desktop; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; 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; import org.apache.commons.io.FilenameUtils; /** * * @author boccioli_m */ public class NewTest extends javax.swing.JPanel { /** * Creates new form TestingListDetails */ private String sType; public NewTest() { initComponents(); } public NewTest(String hDetails) { initComponents(); sType = hDetails; fillComponents(sType); } /** * 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() { jPopupMenuTable = new javax.swing.JPopupMenu(); jMenuItemAddRow = new javax.swing.JMenuItem(); jMenuItemDeleteRow = new javax.swing.JMenuItem(); lblName = new javax.swing.JLabel(); lblSuite = new javax.swing.JLabel(); lblParams = new javax.swing.JLabel(); lblDescr = new javax.swing.JLabel(); txtTestName = new javax.swing.JTextField(); jComboBoxTestSuites = new javax.swing.JComboBox(); jScrollPane3 = new javax.swing.JScrollPane(); txtTestDescription = new javax.swing.JTextArea(); jScrollPane1 = new javax.swing.JScrollPane(); jTableParams = new javax.swing.JTable(); jPanel1 = new javax.swing.JPanel(); jButtonGenerate = new javax.swing.JButton(); jMenuItemAddRow.setText("Add Row"); jMenuItemAddRow.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemAddRowActionPerformed(evt); } }); jPopupMenuTable.add(jMenuItemAddRow); jMenuItemDeleteRow.setText("Delete Row"); jMenuItemDeleteRow.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemDeleteRowActionPerformed(evt); } }); jPopupMenuTable.add(jMenuItemDeleteRow); lblName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N lblName.setText("Name *"); lblSuite.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N lblSuite.setText("Test Case/Suite *"); lblParams.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N lblParams.setText("Test Parameters"); lblDescr.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N lblDescr.setText("Description *"); txtTestName.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jComboBoxTestSuites.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jComboBoxTestSuites.setMinimumSize(new java.awt.Dimension(31, 26)); jComboBoxTestSuites.setPreferredSize(new java.awt.Dimension(31, 26)); jScrollPane3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestDescription.setColumns(20); txtTestDescription.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N txtTestDescription.setLineWrap(true); txtTestDescription.setRows(5); jScrollPane3.setViewportView(txtTestDescription); jTableParams.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N jTableParams.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Parameter", "Value", "Description" } )); jTableParams.setColumnSelectionAllowed(true); jTableParams.setDragEnabled(true); jTableParams.setRowHeight(20); jTableParams.getTableHeader().setReorderingAllowed(false); jTableParams.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTableParamsMouseClicked(evt); } }); jScrollPane1.setViewportView(jTableParams); jTableParams.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); 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(80); jTableParams.getColumnModel().getColumn(1).setMaxWidth(100); } jButtonGenerate.setText("Generate"); jButtonGenerate.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonGenerateActionPerformed(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap(442, Short.MAX_VALUE) .addComponent(jButtonGenerate, javax.swing.GroupLayout.PREFERRED_SIZE, 188, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(0, 0, 0) .addComponent(jButtonGenerate, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); 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.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(1, 1, 1)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblParams) .addComponent(lblDescr)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(19, 19, 19) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 513, Short.MAX_VALUE) .addComponent(txtTestName, javax.swing.GroupLayout.DEFAULT_SIZE, 513, Short.MAX_VALUE) .addComponent(jComboBoxTestSuites, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addGroup(layout.createSequentialGroup() .addGap(18, 18, 18) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 513, Short.MAX_VALUE) .addGap(1, 1, 1))) .addGap(12, 12, 12)) .addComponent(lblName) .addComponent(lblSuite))) ); 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) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblDescr)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblParams) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); }// //GEN-END:initComponents private void jButtonGenerateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonGenerateActionPerformed // TODO add your handling code here: if(checkDataFields()){ generateTestFiles(); } }//GEN-LAST:event_jButtonGenerateActionPerformed private void jTableParamsMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTableParamsMouseClicked // TODO add your handling code here: if(evt.getButton() == java.awt.event.MouseEvent.BUTTON3){ jPopupMenuTable.show(jTableParams, evt.getX(), evt.getY()); } }//GEN-LAST:event_jTableParamsMouseClicked private void jMenuItemAddRowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemAddRowActionPerformed // TODO add your handling code here: DefaultTableModel model = (DefaultTableModel) jTableParams.getModel(); model.addRow(new Object[]{"", "", ""}); jTableParams.setModel(model); }//GEN-LAST:event_jMenuItemAddRowActionPerformed private void jMenuItemDeleteRowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDeleteRowActionPerformed // TODO add your handling code here: int row = jTableParams.getSelectedRow(); if(row>=0 && row 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; } /** * Pick the items one by one from the table and build a HashMap. * For details on the HashMap structure, see buildParametersMap() * @return contains the test parameters. */ private HashMap getParametersFromTable(){ HashMap mParameters = new HashMap(); // contains name and attributes HashMap mParameterAttributes = new HashMap(); //contians value and description for(int row=0 ; row" + name + " " + description + "
\n" ; } } success = replaceParameters(path, new String[]{"$testName","$testDescription","$testParameters"}, new String[]{sTestName,sTestDescription,sTestParameters}); } catch (IOException ex) { SwingUtils.showMessage(this, "generateTestHelp()", "Cannot create directory " + ex.toString()); Logger.getLogger(NewTest.class.getName()).log(Level.SEVERE, null, ex); } return success; } /** * replace thetemplateparameters(usually starting with $) with real values * * @param path path of the file whose parameters must be replaced * @param parameterNames array of template parameters names that must be searched in the file. * the size must be equal to the size of parameterValues * @param parameterValues array of template parameters values * that must replace the template parameter names in the file. * the size must be equal to the size of parameterNames * @return */ public boolean replaceParameters(Path path, String parameterNames[], String parameterValues[]){ boolean success = false; try { //replace parameters in template String content = new String(Files.readAllBytes(path)); for(int i=0 ; i