Author: pmouawad
Date: Mon Mar 14 20:29:36 2016
New Revision: 1734993
URL: http://svn.apache.org/viewvc?rev=1734993&view=rev
Log:
Bug 59108 - TableEditor: Allow rows to be moved up and down
#resolve #163
https://github.com/apache/jmeter/pull/163/
Bugzilla Id: 59108
Modified:
jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TableEditor.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TableEditor.java
URL:
http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TableEditor.java?rev=1734993&r1=1734992&r2=1734993&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TableEditor.java
(original)
+++ jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TableEditor.java Mon
Mar 14 20:29:36 2016
@@ -42,6 +42,7 @@ import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
+import javax.swing.table.TableCellEditor;
import org.apache.jmeter.gui.ClearGui;
import org.apache.jmeter.testelement.property.TestElementProperty;
@@ -85,6 +86,8 @@ public class TableEditor extends Propert
private final JButton clipButton;
private final JButton removeButton;
private final JButton clearButton;
+ private final JButton upButton;
+ private final JButton downButton;
public TableEditor() {
addButton = new JButton(JMeterUtils.getResString("add")); //
$NON-NLS-1$
@@ -95,6 +98,10 @@ public class TableEditor extends Propert
removeButton.addActionListener(new RemoveListener());
clearButton = new JButton(JMeterUtils.getResString("clear")); //
$NON-NLS-1$
clearButton.addActionListener(new ClearListener());
+ upButton = new JButton(JMeterUtils.getResString("up")); // $NON-NLS-1$
+ upButton.addActionListener(new UpListener());
+ downButton = new JButton(JMeterUtils.getResString("down")); //
$NON-NLS-1$
+ downButton.addActionListener(new DownListener());
}
@Override
@@ -120,8 +127,14 @@ public class TableEditor extends Propert
JPanel south = new JPanel();
south.add(addButton);
south.add(clipButton);
+ removeButton.setEnabled(false);
south.add(removeButton);
+ clearButton.setEnabled(false);
south.add(clearButton);
+ upButton.setEnabled(false);
+ south.add(upButton);
+ downButton.setEnabled(false);
+ south.add(downButton);
p.add(south,BorderLayout.SOUTH);
return p;
}
@@ -143,6 +156,23 @@ public class TableEditor extends Propert
} else {
model.clearData();
}
+
+ if(model.getRowCount()>0) {
+ removeButton.setEnabled(true);
+ clearButton.setEnabled(true);
+ } else {
+ removeButton.setEnabled(false);
+ clearButton.setEnabled(false);
+ }
+
+ if(model.getRowCount()>1) {
+ upButton.setEnabled(true);
+ downButton.setEnabled(true);
+ } else {
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ }
+
this.firePropertyChange();
}
@@ -273,6 +303,9 @@ public class TableEditor extends Propert
public void actionPerformed(ActionEvent e) {
try {
model.addRow(clazz.newInstance());
+
+ removeButton.setEnabled(true);
+ clearButton.setEnabled(true);
} catch(Exception err) {
LOG.error("The class type given to TableEditor was not
instantiable. ", err);
}
@@ -298,6 +331,14 @@ public class TableEditor extends Propert
model.setValueAt(columns[i], model.getRowCount() - 1,
i);
}
}
+
+ if(model.getRowCount()>1) {
+ upButton.setEnabled(true);
+ downButton.setEnabled(true);
+ } else {
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ }
} catch (Exception err) {
LOG.error("The class type given to TableEditor was not
instantiable. ", err);
}
@@ -308,9 +349,17 @@ public class TableEditor extends Propert
@Override
public void actionPerformed(ActionEvent e) {
int[] rows = table.getSelectedRows();
- for(int i=0;i<rows.length;i++){
+ for(int i=0; i<rows.length; i++){
model.removeRow(rows[i]-i);
}
+
+ if(model.getRowCount()>1) {
+ upButton.setEnabled(true);
+ downButton.setEnabled(true);
+ } else {
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ }
}
}
@@ -318,6 +367,46 @@ public class TableEditor extends Propert
@Override
public void actionPerformed(ActionEvent e) {
model.clearData();
+
+ upButton.setEnabled(false);
+ downButton.setEnabled(false);
+ }
+ }
+
+ private class UpListener implements ActionListener {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ cancelEditing();
+
+ int[] rowsSelected = table.getSelectedRows();
+ if (rowsSelected.length > 0 && rowsSelected[0] > 0) {
+ table.clearSelection();
+ for (int rowSelected : rowsSelected) {
+ model.moveRow(rowSelected, rowSelected + 1, rowSelected -
1);
+ }
+ for (int rowSelected : rowsSelected) {
+ table.addRowSelectionInterval(rowSelected - 1, rowSelected
- 1);
+ }
+ }
+ }
+ }
+
+ private class DownListener implements ActionListener {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ cancelEditing();
+
+ int[] rowsSelected = table.getSelectedRows();
+ if (rowsSelected.length > 0 && rowsSelected[rowsSelected.length -
1] < table.getRowCount() - 1) {
+ table.clearSelection();
+ for (int i = rowsSelected.length - 1; i >= 0; i--) {
+ int rowSelected = rowsSelected[i];
+ model.moveRow(rowSelected, rowSelected + 1, rowSelected +
1);
+ }
+ for (int rowSelected : rowsSelected) {
+ table.addRowSelectionInterval(rowSelected + 1, rowSelected
+ 1);
+ }
+ }
}
}
@@ -325,5 +414,17 @@ public class TableEditor extends Propert
public void clearGui() {
this.model.clearData();
}
+
+ /**
+ * Cancel cell editing if it is being edited
+ */
+ private void cancelEditing() {
+ // If a table cell is being edited, we must cancel the editing before
+ // deleting the row
+ if (table.isEditing()) {
+ TableCellEditor cellEditor =
table.getCellEditor(table.getEditingRow(), table.getEditingColumn());
+ cellEditor.cancelCellEditing();
+ }
+ }
}
Modified: jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1734993&r1=1734992&r2=1734993&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Mon Mar 14 20:29:36 2016
@@ -208,6 +208,7 @@ Summary
<li><bug>58773</bug>TestCacheManager : Add tests for CacheManager that use
HttpClient 4</li>
<li><bug>58742</bug>CompareAssertion : Reset data in TableEditor when
switching between different CompareAssertions in gui.
Based on a patch by Vincent Herilier (vherilier at gmail.com)</li>
+ <li><bug>59108</bug>TableEditor: Allow rows to be moved up and down.
Contributed by Vincent Herilier (vherilier at gmail.com)</li>
<li><bug>58848</bug>Argument Panel : when adding an argument (add button or
from clipboard) scroll the table to the new line. Contributed by Benoit Wiart
(benoit dot wiart at gmail.com)</li>
<li><bug>58865</bug>Allow empty default value in the Regular Expression
Extractor. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)</li>
<li><bug>59156</bug>XMLAssertion : drop jdom dependency by using
XMLReader</li>