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 2016/07/13 19:22:24 UTC
svn commit: r1752526 - in /jmeter/trunk:
src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java
xdocs/changes.xml
Author: fschumacher
Date: Wed Jul 13 19:22:24 2016
New Revision: 1752526
URL: http://svn.apache.org/viewvc?rev=1752526&view=rev
Log:
Allow multiple selection and delete in HTTP Authorization Manager.
Based on a patch by Benoit Wiart (b.wiart at ubik-ingenierie.com).
Closes #212 on github.
Modified:
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java?rev=1752526&r1=1752525&r2=1752526&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/AuthPanel.java Wed Jul 13 19:22:24 2016
@@ -178,47 +178,65 @@ public class AuthPanel extends AbstractC
add(createAuthTablePanel(), BorderLayout.CENTER);
}
- @Override
- public void actionPerformed(ActionEvent e) {
- String action = e.getActionCommand();
+ /**
+ * Remove the currently selected argument from the table.
+ */
+ protected void deleteRows() {
+ // If a table cell is being edited, we must cancel the editing
+ // before deleting the row.
+ cancelEditing();
+
+ int[] rowsSelected = authTable.getSelectedRows();
+ int anchorSelection = authTable.getSelectionModel().getAnchorSelectionIndex();
+ authTable.clearSelection();
+ if (rowsSelected.length > 0) {
+ for (int i = rowsSelected.length - 1; i >= 0; i--) {
+ tableModel.removeRow(rowsSelected[i]);
+ }
+ tableModel.fireTableDataChanged();
- if (action.equals(DELETE_COMMAND)) {
+ // Table still contains one or more rows, so highlight (select)
+ // the appropriate one.
if (tableModel.getRowCount() > 0) {
- // If a table cell is being edited, we must cancel the editing
- // before deleting the row.
- if (authTable.isEditing()) {
- TableCellEditor cellEditor = authTable.getCellEditor(authTable.getEditingRow(), authTable
- .getEditingColumn());
- cellEditor.cancelCellEditing();
+ if (anchorSelection >= tableModel.getRowCount()) {
+ anchorSelection = tableModel.getRowCount() - 1;
}
+ authTable.setRowSelectionInterval(anchorSelection, anchorSelection);
+ }
- int rowSelected = authTable.getSelectedRow();
+ checkButtonsStatus();
+ }
+ }
- if (rowSelected != -1) {
- tableModel.removeRow(rowSelected);
- tableModel.fireTableDataChanged();
+ /**
+ * If a table cell is being edited, we must cancel the editing before deleting the row
+ */
+ private void cancelEditing() {
+ if (authTable.isEditing()) {
+ TableCellEditor cellEditor = authTable.getCellEditor(authTable.getEditingRow(), authTable.getEditingColumn());
+ cellEditor.cancelCellEditing();
+ }
+ }
- // Disable the DELETE and SAVE buttons if no rows remaining
- // after delete.
- if (tableModel.getRowCount() == 0) {
- deleteButton.setEnabled(false);
- saveButton.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;
- }
+ private void checkButtonsStatus() {
+ // Disable DELETE if there are no rows in the table to delete.
+ if (tableModel.getRowCount() == 0) {
+ deleteButton.setEnabled(false);
+ saveButton.setEnabled(false);
+ } else {
+ deleteButton.setEnabled(true);
+ saveButton.setEnabled(true);
+ }
+ }
- authTable.setRowSelectionInterval(rowToSelect, rowToSelect);
- }
- }
- }
- } else if (action.equals(ADD_COMMAND)) {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String action = e.getActionCommand();
+
+ if (action.equals(DELETE_COMMAND)) {
+ deleteRows();
+ }
+ else if (action.equals(ADD_COMMAND)) {
// If a table cell is being edited, we should accept the current
// value and stop the editing before adding a new row.
GuiUtils.stopTableEditing(authTable);
@@ -226,14 +244,7 @@ public class AuthPanel extends AbstractC
tableModel.addNewRow();
tableModel.fireTableDataChanged();
- // Enable the DELETE and SAVE buttons if they are currently
- // disabled.
- if (!deleteButton.isEnabled()) {
- deleteButton.setEnabled(true);
- }
- if (!saveButton.isEnabled()) {
- saveButton.setEnabled(true);
- }
+ checkButtonsStatus();
// Highlight (select) the appropriate row.
int rowToSelect = tableModel.getRowCount() - 1;
@@ -246,13 +257,10 @@ public class AuthPanel extends AbstractC
tableModel.manager.addFile(dialog.getSelectedFile().getAbsolutePath());
tableModel.fireTableDataChanged();
- if (tableModel.getRowCount() > 0) {
- deleteButton.setEnabled(true);
- saveButton.setEnabled(true);
- }
+ checkButtonsStatus();
}
} catch (IOException ex) {
- log.error("", ex);
+ log.error("Error loading auth data", ex);
}
} else if (action.equals(SAVE_COMMAND)) {
try {
@@ -271,7 +279,7 @@ public class AuthPanel extends AbstractC
authTable = new JTable(tableModel);
JMeterUtils.applyHiDPI(authTable);
authTable.getTableHeader().setDefaultRenderer(new HeaderAsPropertyRenderer());
- authTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ authTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
authTable.setPreferredScrollableViewportSize(new Dimension(100, 70));
TableColumn passwordColumn = authTable.getColumnModel().getColumn(AuthManager.COL_PASSWORD);
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1752526&r1=1752525&r2=1752526&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Wed Jul 13 19:22:24 2016
@@ -101,6 +101,7 @@ Summary
<ul>
<li><bug>59609</bug>Format extracted JSON Objects in JSON Post Processor correctly as JSON.</li>
<li><bug>59845</bug>Log messages about JSON Path mismatches at <code>debug</code> level instead of <code>error</code>.</li>
+ <li><pr>212</pr>Allow multiple selection and delete in HTTP Authorization Manager. Based on a patch by Benoit Wiart (b.wiart at ubik-ingenierie.com)</li>
</ul>
<h3>Functions</h3>
@@ -182,6 +183,7 @@ Summary
<li>Graham Russell (graham at ham1.co.uk)</li>
<li>Teemu Vesala (teemu.vesala at qentinel.com)</li>
<li>Asier Lostalé</li>
+<li>Benoit Wiart (b.wiart at ubik-ingenierie.com)</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>