You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by fs...@apache.org on 2021/03/10 20:03:43 UTC

[jmeter] 01/02: OS Process Sampler - Cannot "Add from Clipboard" Command parameters

This is an automated email from the ASF dual-hosted git repository.

fschumacher pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git

commit 6010d208454930385547d8b0d8fb4a70ec4f5f98
Author: Felix Schumacher <fe...@internetallee.de>
AuthorDate: Sun Feb 21 18:56:33 2021 +0100

    OS Process Sampler - Cannot "Add from Clipboard" Command parameters
    
    Bugzilla Id: 65152
---
 .../apache/jmeter/config/gui/ArgumentsPanel.java   | 42 ++++++++++--
 .../apache/jmeter/config/gui/RowDetailDialog.java  | 77 +++++++++++-----------
 .../protocol/system/gui/SystemSamplerGui.java      | 16 ++---
 xdocs/changes.xml                                  |  1 +
 4 files changed, 86 insertions(+), 50 deletions(-)

diff --git a/src/core/src/main/java/org/apache/jmeter/config/gui/ArgumentsPanel.java b/src/core/src/main/java/org/apache/jmeter/config/gui/ArgumentsPanel.java
index f71a812..8e95fef 100644
--- a/src/core/src/main/java/org/apache/jmeter/config/gui/ArgumentsPanel.java
+++ b/src/core/src/main/java/org/apache/jmeter/config/gui/ArgumentsPanel.java
@@ -29,6 +29,7 @@ import java.awt.event.ActionListener;
 import java.io.IOException;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.function.Function;
 
 import javax.swing.BorderFactory;
 import javax.swing.Box;
@@ -62,7 +63,7 @@ import org.apache.jorphan.reflect.Functor;
 @TestElementMetadata(labelResource = "user_defined_variables")
 public class ArgumentsPanel extends AbstractConfigGui implements ActionListener {
 
-    private static final long serialVersionUID = 240L;
+    private static final long serialVersionUID = 241L;
 
     /** The title label for this component. */
     private JLabel tableLabel;
@@ -107,6 +108,8 @@ public class ArgumentsPanel extends AbstractConfigGui implements ActionListener
     /** Disable buttons :Detail, Add, Add from Clipboard, Delete, Up and Down*/
     private final boolean disableButtons;
 
+    private final Function<String[], Argument> argCreator;
+
     /** Command for adding a row to the table. */
     private static final String ADD = "add"; // $NON-NLS-1$
 
@@ -175,7 +178,7 @@ public class ArgumentsPanel extends AbstractConfigGui implements ActionListener
      * @param label the title for the component.
      */
     public ArgumentsPanel(boolean disableButtons, String label) {
-        this(label, null, false, false, null, disableButtons);
+        this(label, null, false, false, null, disableButtons, null);
     }
 
     /**
@@ -195,7 +198,7 @@ public class ArgumentsPanel extends AbstractConfigGui implements ActionListener
      * @param standalone is standalone
      */
     public ArgumentsPanel(String label, Color bkg, boolean enableUpDown, boolean standalone) {
-        this(label, bkg, enableUpDown, standalone, null, false);
+        this(label, bkg, enableUpDown, standalone, null, false, null);
     }
 
     /**
@@ -207,7 +210,20 @@ public class ArgumentsPanel extends AbstractConfigGui implements ActionListener
      * @param model the table model to use
      */
     public ArgumentsPanel(String label, Color bkg, boolean enableUpDown, boolean standalone, ObjectTableModel model) {
-        this(label, bkg, enableUpDown, standalone, model, false);
+        this(label, bkg, enableUpDown, standalone, model, null);
+    }
+
+    /**
+     * Create a new ArgumentsPanel with a border and color background
+     * @param label text for label
+     * @param bkg background colour
+     * @param enableUpDown Add up/down buttons
+     * @param standalone is standalone
+     * @param model the table model to use
+     * @param argCreator function to create {@link Argument}s from Strings taken from clipboard
+     */
+    public ArgumentsPanel(String label, Color bkg, boolean enableUpDown, boolean standalone, ObjectTableModel model, Function<String[], Argument> argCreator) {
+        this(label, bkg, enableUpDown, standalone, model, false, argCreator);
     }
 
     /**
@@ -220,12 +236,27 @@ public class ArgumentsPanel extends AbstractConfigGui implements ActionListener
      * @param disableButtons Remove all buttons
      */
     public ArgumentsPanel(String label, Color bkg, boolean enableUpDown, boolean standalone, ObjectTableModel model, boolean disableButtons) {
+        this(label, bkg, enableUpDown, standalone, model, disableButtons, null);
+    }
+
+    /**
+     * Create a new ArgumentsPanel with a border and color background
+     * @param label text for label
+     * @param bkg background colour
+     * @param enableUpDown Add up/down buttons
+     * @param standalone is standalone
+     * @param model the table model to use
+     * @param disableButtons Remove all buttons
+     * @param argCreator function to create {@link Argument}s from Strings taken from clipboard
+     */
+    public ArgumentsPanel(String label, Color bkg, boolean enableUpDown, boolean standalone, ObjectTableModel model, boolean disableButtons, Function<String[], Argument> argCreator) {
         tableLabel = new JLabel(label);
         this.enableUpDown = enableUpDown;
         this.disableButtons = disableButtons;
         this.background = bkg;
         this.standalone = standalone;
         this.tableModel = model;
+        this.argCreator = argCreator;
         init();
     }
 
@@ -584,6 +615,9 @@ public class ArgumentsPanel extends AbstractConfigGui implements ActionListener
     }
 
     protected Argument createArgumentFromClipboard(String[] clipboardCols) {
+        if (argCreator != null) {
+            return argCreator.apply(clipboardCols);
+        }
         Argument argument = makeNewArgument();
         argument.setName(clipboardCols[0]);
         if (clipboardCols.length > 1) {
diff --git a/src/core/src/main/java/org/apache/jmeter/config/gui/RowDetailDialog.java b/src/core/src/main/java/org/apache/jmeter/config/gui/RowDetailDialog.java
index ec90c81..f07997e 100644
--- a/src/core/src/main/java/org/apache/jmeter/config/gui/RowDetailDialog.java
+++ b/src/core/src/main/java/org/apache/jmeter/config/gui/RowDetailDialog.java
@@ -21,12 +21,12 @@ import java.awt.BorderLayout;
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
 import javax.swing.InputMap;
 import javax.swing.JButton;
 import javax.swing.JComponent;
@@ -38,6 +38,7 @@ import javax.swing.JRootPane;
 import javax.swing.JTextField;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
+import javax.swing.text.JTextComponent;
 
 import org.apache.jmeter.gui.action.KeyStrokes;
 import org.apache.jmeter.gui.util.JSyntaxTextArea;
@@ -46,6 +47,8 @@ import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.gui.ComponentUtil;
 import org.apache.jorphan.gui.ObjectTableModel;
 
+import net.miginfocom.swing.MigLayout;
+
 /**
  * Show detail of a Row
  */
@@ -64,13 +67,7 @@ public class RowDetailDialog extends JDialog implements ActionListener, Document
 
     private static final String UPDATE = "update"; // $NON-NLS-1$
 
-    private JLabel nameLabel;
-
-    private JTextField nameTF;
-
-    private JLabel valueLabel;
-
-    private JSyntaxTextArea valueTA;
+    private List<JTextComponent> dataAreas;
 
     private JButton nextButton;
 
@@ -132,30 +129,31 @@ public class RowDetailDialog extends JDialog implements ActionListener, Document
     private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final)
         this.getContentPane().setLayout(new BorderLayout(10,10));
 
-        nameLabel = new JLabel(JMeterUtils.getResString("name")); //$NON-NLS-1$
-        nameTF = new JTextField(JMeterUtils.getResString("name"), 20); //$NON-NLS-1$
-        nameTF.getDocument().addDocumentListener(this);
-        JPanel namePane = new JPanel(new BorderLayout());
-        namePane.add(nameLabel, BorderLayout.WEST);
-        namePane.add(nameTF, BorderLayout.CENTER);
+        JPanel dataPanel = new JPanel(new MigLayout("fillx, wrap 2", "[][fill, grow]"));
+        dataAreas = new ArrayList<>();
+
+        for (int i=0; i < tableModel.getColumnCount(); i++) {
+            JLabel dataLabel = new JLabel(JMeterUtils.getResString(tableModel.getColumnName(i)));
+            dataPanel.add(dataLabel);
+            if (i > 0 || tableModel.getColumnCount() == 1) {
+                JSyntaxTextArea dataArea = JSyntaxTextArea.getInstance(30, 80);
+                dataArea.getDocument().addDocumentListener(this);
+                dataAreas.add(dataArea);
+                dataPanel.add(JTextScrollPane.getInstance(dataArea));
+                dataLabel.setLabelFor(dataArea);
+            } else {
+                final JTextField nameTF = new JTextField("", 20);
+                dataAreas.add(nameTF);
+                nameTF.getDocument().addDocumentListener(this);
+                dataPanel.add(nameTF);
+                dataLabel.setLabelFor(nameTF);
+            }
+        }
 
-        valueLabel = new JLabel(JMeterUtils.getResString("value")); //$NON-NLS-1$
-        valueTA = JSyntaxTextArea.getInstance(30, 80);
-        valueTA.getDocument().addDocumentListener(this);
         setValues(selectedRow);
-        JPanel valuePane = new JPanel(new BorderLayout());
-        valuePane.add(valueLabel, BorderLayout.NORTH);
-        JTextScrollPane jTextScrollPane = JTextScrollPane.getInstance(valueTA);
-        valuePane.add(jTextScrollPane, BorderLayout.CENTER);
-
-        JPanel detailPanel = new JPanel(new BorderLayout());
-        detailPanel.add(namePane, BorderLayout.NORTH);
-        detailPanel.add(valuePane, BorderLayout.CENTER);
 
-        JPanel mainPanel = new JPanel();
-        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
-        mainPanel.setBorder(BorderFactory.createEmptyBorder(7, 3, 3, 3));
-        mainPanel.add(detailPanel, BorderLayout.CENTER);
+        JPanel mainPanel = new JPanel(new MigLayout());
+        mainPanel.add(dataPanel, "wrap");
 
         JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
 
@@ -178,9 +176,9 @@ public class RowDetailDialog extends JDialog implements ActionListener, Document
         buttonsPanel.add(previousButton);
         buttonsPanel.add(nextButton);
         buttonsPanel.add(closeButton);
-        mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
+        mainPanel.add(buttonsPanel, "center");
         this.getContentPane().add(mainPanel);
-        nameTF.requestFocusInWindow();
+        dataAreas.get(0).requestFocusInWindow();
 
         this.pack();
         ComponentUtil.centerComponentInWindow(this);
@@ -218,9 +216,13 @@ public class RowDetailDialog extends JDialog implements ActionListener, Document
      * @param selectedRow Selected row
      */
     private void setValues(int selectedRow) {
-        nameTF.setText((String)tableModel.getValueAt(selectedRow, 0));
-        valueTA.setInitialText((String)tableModel.getValueAt(selectedRow, 1));
-        valueTA.setCaretPosition(0);
+        for (int i=0; i < tableModel.getColumnCount(); i++) {
+            final JTextComponent dataArea = dataAreas.get(i);
+            dataArea.setText((String)tableModel.getValueAt(selectedRow, i));
+            if (dataArea instanceof JSyntaxTextArea) {
+                dataArea.setCaretPosition(0);
+            }
+        }
         textChanged = false;
     }
 
@@ -229,8 +231,9 @@ public class RowDetailDialog extends JDialog implements ActionListener, Document
      * @param actionEvent the event that led to this call
      */
     protected void doUpdate(ActionEvent actionEvent) {
-        tableModel.setValueAt(nameTF.getText(), selectedRow, 0);
-        tableModel.setValueAt(valueTA.getText(), selectedRow, 1);
+        for (int i=0; i < tableModel.getColumnCount(); i++) {
+            tableModel.setValueAt(dataAreas.get(i).getText(), selectedRow, i);
+        }
         // Change Cancel label to Close
         closeButton.setText(JMeterUtils.getResString("close")); //$NON-NLS-1$
         textChanged = false;
diff --git a/src/protocol/native/src/main/java/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java b/src/protocol/native/src/main/java/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java
index 6c884a5..7b43e03 100644
--- a/src/protocol/native/src/main/java/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java
+++ b/src/protocol/native/src/main/java/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java
@@ -213,19 +213,17 @@ public class SystemSamplerGui extends AbstractSamplerGui implements ItemListener
         return panel;
     }
 
-
     /**
      * @return JPanel Arguments Panel
      */
     private JPanel makeArgumentsPanel() {
-        argsPanel = new ArgumentsPanel(JMeterUtils.getResString("arguments_panel_title"), null, true, false ,  // $NON-NLS-1$
-                new ObjectTableModel(new String[] { ArgumentsPanel.COLUMN_RESOURCE_NAMES_1 },
-                        Argument.class,
-                        new Functor[] {
-                        new Functor("getValue") },  // $NON-NLS-1$
-                        new Functor[] {
-                        new Functor("setValue") }, // $NON-NLS-1$
-                        new Class[] {String.class }));
+        final ObjectTableModel objectTableModel = new ObjectTableModel(
+                new String[] { ArgumentsPanel.COLUMN_RESOURCE_NAMES_1 }, Argument.class,
+                new Functor[] { new Functor("getValue") }, // $NON-NLS-1$
+                new Functor[] { new Functor("setValue") }, // $NON-NLS-1$
+                new Class[] { String.class });
+        argsPanel = new ArgumentsPanel(JMeterUtils.getResString("arguments_panel_title"), null, true, false, // $NON-NLS-1$
+                objectTableModel, cols -> new Argument("", cols[0]));
         return argsPanel;
     }
 
diff --git a/xdocs/changes.xml b/xdocs/changes.xml
index 4be11ef..1761010 100644
--- a/xdocs/changes.xml
+++ b/xdocs/changes.xml
@@ -132,6 +132,7 @@ Summary
 
 <h3>Other Samplers</h3>
 <ul>
+  <li><bug>65152</bug>OS Process Sampler - Cannot <code>Add from Clipboard</code> Command parameters</li>
 </ul>
 
 <h3>Controllers</h3>