Index: src/core/org/apache/jmeter/config/gui/ArgumentsPanel.java =================================================================== --- src/core/org/apache/jmeter/config/gui/ArgumentsPanel.java (revision 1195882) +++ src/core/org/apache/jmeter/config/gui/ArgumentsPanel.java (working copy) @@ -22,8 +22,14 @@ import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.IOException; import java.util.Collection; import java.util.Iterator; @@ -43,7 +49,9 @@ import org.apache.jmeter.testelement.property.PropertyIterator; import org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.gui.ObjectTableModel; +import org.apache.jorphan.logging.LoggingManager; import org.apache.jorphan.reflect.Functor; +import org.apache.log.Logger; /** * A GUI panel allowing the user to enter name-value argument pairs. These @@ -55,6 +63,8 @@ private static final long serialVersionUID = 240L; + private static final Logger log = LoggingManager.getLoggerForClass(); + /** The title label for this component. */ private JLabel tableLabel; @@ -67,6 +77,9 @@ /** A button for adding new arguments to the table. */ private JButton add; + /** A button for adding new arguments to the table from the clipboard. */ + private JButton addFromClipboard; + /** A button for removing arguments from the table. */ private JButton delete; @@ -92,6 +105,9 @@ /** Command for adding a row to the table. */ private static final String ADD = "add"; // $NON-NLS-1$ + /** Command for adding rows from the clipboard */ + private static final String ADD_FROM_CLIPBOARD = "addFromClipboard"; // $NON-NLS-1$ + /** Command for removing a row from the table. */ private static final String DELETE = "delete"; // $NON-NLS-1$ @@ -309,6 +325,8 @@ deleteArgument(); } else if (action.equals(ADD)) { addArgument(); + } else if (action.equals(ADD_FROM_CLIPBOARD)) { + addFromClipboard(); } else if (action.equals(UP)) { moveUp(); } else if (action.equals(DOWN)) { @@ -421,8 +439,48 @@ } /** + * Add values from the clipboard + */ + protected void addFromClipboard() { + stopTableEditing(); + int rowCount = table.getRowCount(); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + Transferable trans = clipboard.getContents(null); + try { + String clipboardContent = (String) trans.getTransferData(DataFlavor.stringFlavor); + String[] clipboardLines = clipboardContent.split("\n"); + for (String clipboardLine : clipboardLines) { + String[] clipboardCols = clipboardLine.split("\t"); + if (clipboardCols.length > 0) { + Argument argument = makeNewArgument(); + argument.setName(clipboardCols[0]); + if (clipboardCols.length > 1) { + argument.setValue(clipboardCols[1]); + if (clipboardCols.length > 2) { + argument.setDescription(clipboardCols[2]); + } + } + tableModel.addRow(argument); + } + } + } catch (IOException ioe) { + log.warn("Failed to paste arguments from clipboard.", ioe); + } catch (UnsupportedFlavorException ufe) { + log.warn("Failed to paste arguments from clipboard.", ufe); + } + if (table.getRowCount() > rowCount) { + // Enable DELETE (which may already be enabled, but it won't hurt) + delete.setEnabled(true); + + // Highlight (select) the appropriate rows. + int rowToSelect = tableModel.getRowCount() - 1; + table.setRowSelectionInterval(rowCount, rowToSelect); + } + } + + /** * Create a new Argument object. - * + * * @return a new Argument object */ protected Argument makeNewArgument() { @@ -524,6 +582,10 @@ add.setActionCommand(ADD); add.setEnabled(true); + addFromClipboard = new JButton(JMeterUtils.getResString("add_from_clipboard")); // $NON-NLS-1$ + addFromClipboard.setActionCommand(ADD_FROM_CLIPBOARD); + addFromClipboard.setEnabled(true); + delete = new JButton(JMeterUtils.getResString("delete")); // $NON-NLS-1$ delete.setActionCommand(DELETE); @@ -542,8 +604,10 @@ buttonPanel.setBackground(this.background); } add.addActionListener(this); + addFromClipboard.addActionListener(this); delete.addActionListener(this); buttonPanel.add(add); + buttonPanel.add(addFromClipboard); buttonPanel.add(delete); if(enableUpDown) { up.addActionListener(this); Index: src/core/org/apache/jmeter/resources/messages.properties =================================================================== --- src/core/org/apache/jmeter/resources/messages.properties (revision 1188913) +++ src/core/org/apache/jmeter/resources/messages.properties (working copy) @@ -22,6 +22,7 @@ about=About Apache JMeter add=Add +add_from_clipboard=Add from Clipboard add_as_child=Add as Child add_parameter=Add Variable add_pattern=Add Pattern\: