Author: pmouawad
Date: Wed Dec 28 17:12:21 2016
New Revision: 1776305

URL: http://svn.apache.org/viewvc?rev=1776305&view=rev
Log:
Bug 60154 - User Parameters GUI: allow rows to be moved up & down in the list
This closes #242 on github 
Contributed by https://github.com/Murdecai777

Also correct wrong comment on lock instance
Bugzilla Id: 60154

Modified:
    jmeter/trunk/src/components/org/apache/jmeter/modifiers/UserParameters.java
    
jmeter/trunk/src/components/org/apache/jmeter/modifiers/gui/UserParametersGui.java
    jmeter/trunk/xdocs/changes.xml

Modified: 
jmeter/trunk/src/components/org/apache/jmeter/modifiers/UserParameters.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/modifiers/UserParameters.java?rev=1776305&r1=1776304&r2=1776305&view=diff
==============================================================================
--- jmeter/trunk/src/components/org/apache/jmeter/modifiers/UserParameters.java 
(original)
+++ jmeter/trunk/src/components/org/apache/jmeter/modifiers/UserParameters.java 
Wed Dec 28 17:12:21 2016
@@ -176,12 +176,10 @@ public class UserParameters extends Abst
         }
     }
 
-    /*
-     * (non-Javadoc) A new instance is created for each thread group, and the
+    /**
+     * A new instance is created for each thread group, and the
      * clone() method is then called to create copies for each thread in a
-     * thread group. This means that the lock object is common to a thread
-     * group; separate thread groups have separate locks. If this is not
-     * intended, the lock object could be made static.
+     * thread group. This means that the lock object is common to all instances
      *
      * @see java.lang.Object#clone()
      */

Modified: 
jmeter/trunk/src/components/org/apache/jmeter/modifiers/gui/UserParametersGui.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/modifiers/gui/UserParametersGui.java?rev=1776305&r1=1776304&r2=1776305&view=diff
==============================================================================
--- 
jmeter/trunk/src/components/org/apache/jmeter/modifiers/gui/UserParametersGui.java
 (original)
+++ 
jmeter/trunk/src/components/org/apache/jmeter/modifiers/gui/UserParametersGui.java
 Wed Dec 28 17:12:21 2016
@@ -74,6 +74,8 @@ public class UserParametersGui extends A
     private JButton addUserButton;
     private JButton deleteRowButton;
     private JButton deleteColumnButton;
+    private JButton moveRowUpButton;
+    private JButton moveRowDownButton;
 
     private JCheckBox perIterationCheck;
 
@@ -201,7 +203,7 @@ public class UserParametersGui extends A
         JLabel tableLabel = new 
JLabel(JMeterUtils.getResString("user_parameters_table")); // $NON-NLS-1$
         initTableModel();
         paramTable = new JTable(tableModel);
-        paramTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        
paramTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         paramTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         JMeterUtils.applyHiDPI(paramTable);
 
@@ -226,14 +228,20 @@ public class UserParametersGui extends A
         addUserButton = new JButton(JMeterUtils.getResString("add_user")); // 
$NON-NLS-1$
         deleteRowButton = new 
JButton(JMeterUtils.getResString("delete_parameter")); // $NON-NLS-1$
         deleteColumnButton = new 
JButton(JMeterUtils.getResString("delete_user")); // $NON-NLS-1$
+        moveRowUpButton = new JButton(JMeterUtils.getResString("up")); // 
$NON-NLS-1$
+        moveRowDownButton = new JButton(JMeterUtils.getResString("down")); // 
$NON-NLS-1$
         buttonPanel.add(addParameterButton);
         buttonPanel.add(deleteRowButton);
+        buttonPanel.add(moveRowUpButton);
         buttonPanel.add(addUserButton);
         buttonPanel.add(deleteColumnButton);
+        buttonPanel.add(moveRowDownButton);
         addParameterButton.addActionListener(new AddParamAction());
         addUserButton.addActionListener(new AddUserAction());
         deleteRowButton.addActionListener(new DeleteRowAction());
         deleteColumnButton.addActionListener(new DeleteColumnAction());
+        moveRowUpButton.addActionListener(new MoveRowUpAction());
+        moveRowDownButton.addActionListener(new MoveRowDownAction());
         return buttonPanel;
     }
 
@@ -328,27 +336,17 @@ public class UserParametersGui extends A
         public void actionPerformed(ActionEvent e) {
             GuiUtils.cancelEditing(paramTable);
 
-            int rowSelected = paramTable.getSelectedRow();
-            if (rowSelected >= 0) {
-                tableModel.removeRow(rowSelected);
+            int[] rowsSelected = paramTable.getSelectedRows();
+            if (rowsSelected.length > 0) {
+                for (int i = rowsSelected.length - 1; i >= 0; i--) {
+                    tableModel.removeRow(rowsSelected[i]);
+                }
                 tableModel.fireTableDataChanged();
 
                 // Disable DELETE if there are no rows in the table to delete.
                 if (tableModel.getRowCount() == 0) {
                     deleteRowButton.setEnabled(false);
                 }
-
-                // Table still contains one or more rows, so highlight (select)
-                // the appropriate one.
-                else {
-                    int rowToSelect = rowSelected;
-
-                    if (rowSelected >= tableModel.getRowCount()) {
-                        rowToSelect = rowSelected - 1;
-                    }
-
-                    paramTable.setRowSelectionInterval(rowToSelect, 
rowToSelect);
-                }
             }
         }
     }
@@ -389,4 +387,40 @@ public class UserParametersGui extends A
             }
         }
     }
+
+    private class MoveRowUpAction implements ActionListener {
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            int[] rowsSelected = paramTable.getSelectedRows();
+            GuiUtils.stopTableEditing(paramTable);
+
+            if (rowsSelected.length > 0 && rowsSelected[0] > 0) {
+                for (int rowSelected : rowsSelected) {
+                    tableModel.moveRow(rowSelected, rowSelected + 1, 
rowSelected - 1);
+                }
+
+                for (int rowSelected : rowsSelected) {
+                    paramTable.addRowSelectionInterval(rowSelected - 1, 
rowSelected - 1);
+                }
+            }
+        }
+    }
+
+    private class MoveRowDownAction implements ActionListener {
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            int[] rowsSelected = paramTable.getSelectedRows();
+            GuiUtils.stopTableEditing(paramTable);
+
+            if (rowsSelected.length > 0 && rowsSelected[rowsSelected.length - 
1] < paramTable.getRowCount() - 1) {
+                for (int i = rowsSelected.length - 1; i >= 0; i--) {
+                    int rowSelected = rowsSelected[i];
+                    tableModel.moveRow(rowSelected, rowSelected + 1, 
rowSelected + 1);
+                }
+                for (int rowSelected : rowsSelected) {
+                    paramTable.addRowSelectionInterval(rowSelected + 1, 
rowSelected + 1);
+                }
+            }
+        }
+    }
 }

Modified: jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1776305&r1=1776304&r2=1776305&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Wed Dec 28 17:12:21 2016
@@ -121,6 +121,7 @@ Fill in some detail.
 
 <h3>Timers, Assertions, Config, Pre- &amp; Post-Processors</h3>
 <ul>
+    <li><bug>60154</bug>User Parameters GUI: allow rows to be moved up &amp; 
down in the list. Contributed by Murdecai777 
(https://github.com/Murdecai777).</li>
 </ul>
 
 <h3>Functions</h3>
@@ -204,6 +205,7 @@ Fill in some detail.
 <li>Qi Chen (qi.chensh at ele.me)</li>
 <li>(gavin at 16degrees.com.au)</li>
 <li>Thomas Schapitz (ts-nospam12 at online.de)</li>
+<li>Murdecai777 (https://github.com/Murdecai777)</li>
 </ul>
 <p>We also thank bug reporters who helped us improve JMeter. <br/>
 For this release we want to give special thanks to the following reporters for 
the clear reports and tests made after our fixes:</p>


Reply via email to