Package org.apache.jmeter.modifiers.gui

Source Code of org.apache.jmeter.modifiers.gui.UserParametersGui$DeleteRowAction

package org.apache.jmeter.modifiers.gui;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableCellEditor;

import org.apache.jmeter.gui.util.PowerTableModel;
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.modifiers.UserParameters;
import org.apache.jmeter.processor.gui.AbstractPreProcessorGui;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.property.CollectionProperty;
import org.apache.jmeter.testelement.property.PropertyIterator;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

public class UserParametersGui extends AbstractPreProcessorGui {

    private static Logger log = LoggingManager.getLoggerFor(JMeterUtils.GUI);
  private String THREAD_COLUMNS = JMeterUtils.getResString("user");

  private JTable paramTable;
  private PowerTableModel tableModel;
  private int numUserColumns = 1;
  private JButton addParameterButton,
    addUserButton,
    deleteRowButton,
    deleteColumnButton;
    private JCheckBox perIterationCheck;

  public UserParametersGui() {
    super();
    init();
  }

  /**
   * @see org.apache.jmeter.gui.JMeterGUIComponent#getStaticLabel()
   */
  public String getStaticLabel() {
    return JMeterUtils.getResString("user_parameters_title");
  }
 
  public void configure(TestElement el)
  {
        initTableModel();
        paramTable.setModel(tableModel);
    UserParameters params = (UserParameters)el;
    CollectionProperty names = params.getNames();
        CollectionProperty threadValues = params.getThreadLists();
    tableModel.setColumnData(0,(List)names.getObjectValue());
    PropertyIterator iter = threadValues.iterator();
    if(iter.hasNext())
    {
      tableModel.setColumnData(1,(List)iter.next().getObjectValue());
    }
    int count = 2;
    while(iter.hasNext())
    {
      String colName = THREAD_COLUMNS+"_"+count;
      tableModel.addNewColumn(colName,String.class);
      tableModel.setColumnData(count,(List)iter.next().getObjectValue());
      count++;
    }
        perIterationCheck.setSelected(params.isPerIteration());
    super.configure(el);
  }

  /**
   * @see org.apache.jmeter.gui.JMeterGUIComponent#createTestElement()
   */
  public TestElement createTestElement() {
    UserParameters params = new UserParameters();
    modifyTestElement(params);
    return params;
  }

    /**
     * Modifies a given TestElement to mirror the data in the gui components.
     * @see org.apache.jmeter.gui.JMeterGUIComponent#modifyTestElement(TestElement)
     */
    public void modifyTestElement(TestElement params)
    {
        ((UserParameters)params).setNames(new CollectionProperty(UserParameters.NAMES,
                tableModel.getColumnData(JMeterUtils.getResString("name"))));
        CollectionProperty threadLists = new CollectionProperty(UserParameters.THREAD_VALUES,new ArrayList());
        log.debug("making threadlists from gui = " + threadLists);
        for (int x = 1; x < tableModel.getColumnCount(); x++) {
          threadLists.addItem(tableModel.getColumnData(THREAD_COLUMNS + "_" + x));
            log.debug("Adding column to threadlist: " + tableModel.getColumnData(THREAD_COLUMNS + "_" + x));
            log.debug("Threadlists now = " + threadLists);
        }
        log.debug("In the end, threadlists = " + threadLists);
        ((UserParameters)params).setThreadLists(threadLists);
        ((UserParameters)params).setPerIteration(perIterationCheck.isSelected());
        super.configureTestElement(params);
    }

  private void init() {
        setBorder(makeBorder());
    setLayout(new BorderLayout());
        JPanel vertPanel = new VerticalPanel();
        vertPanel.add(makeTitlePanel());

        perIterationCheck = new JCheckBox(JMeterUtils.getResString("update_per_iter"), true);
        Box perIterationPanel = Box.createHorizontalBox();
        perIterationPanel.add(perIterationCheck);
        perIterationPanel.add(Box.createHorizontalGlue());
        vertPanel.add(perIterationPanel);
        add(vertPanel,BorderLayout.NORTH);
       
       add(makeParameterPanel(),BorderLayout.CENTER);
  }
   
  private JPanel makeParameterPanel() {
    JLabel tableLabel =
      new JLabel(JMeterUtils.getResString("user_parameters_table"));
    initTableModel();
    paramTable = new JTable(tableModel);
    //paramTable.setRowSelectionAllowed(true);
    //paramTable.setColumnSelectionAllowed(true);
    paramTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    //paramTable.setCellSelectionEnabled(true);
        //paramTable.setPreferredScrollableViewportSize(new Dimension(100, 70));

        JPanel paramPanel = new JPanel(new BorderLayout());
        paramPanel.add(tableLabel, BorderLayout.NORTH);
        JScrollPane scroll = new JScrollPane(paramTable);
        scroll.setPreferredSize(scroll.getMinimumSize());
    paramPanel.add(scroll, BorderLayout.CENTER);
    paramPanel.add(makeButtonPanel(), BorderLayout.SOUTH);
    return paramPanel;
  }

    protected void initTableModel()
    {
        tableModel =
          new PowerTableModel(
            new String[] {
              JMeterUtils.getResString("name"),
              THREAD_COLUMNS + "_" + numUserColumns },
            new Class[] { String.class, String.class });
    }

  private JPanel makeButtonPanel() {
    JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(2,2));
    addParameterButton =
      new JButton(JMeterUtils.getResString("add_parameter"));
    addUserButton = new JButton(JMeterUtils.getResString("add_user"));
    deleteRowButton =
      new JButton(JMeterUtils.getResString("delete_parameter"));
    deleteColumnButton =
      new JButton(JMeterUtils.getResString("delete_user"));
    buttonPanel.add(addParameterButton);
        buttonPanel.add(deleteRowButton);
    buttonPanel.add(addUserButton);
    buttonPanel.add(deleteColumnButton);
    addParameterButton.addActionListener(new AddParamAction());
    addUserButton.addActionListener(new AddUserAction());
    deleteRowButton.addActionListener(new DeleteRowAction());
    deleteColumnButton.addActionListener(new DeleteColumnAction());
    return buttonPanel;
  }

  private class AddParamAction implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      if (paramTable.isEditing()) {
        TableCellEditor cellEditor =
          paramTable.getCellEditor(
            paramTable.getEditingRow(),
            paramTable.getEditingColumn());
        cellEditor.stopCellEditing();
      }

      tableModel.addNewRow();
      tableModel.fireTableDataChanged();

      // Enable DELETE (which may already be enabled, but it won't hurt)
      deleteRowButton.setEnabled(true);

      // Highlight (select) the appropriate row.
      int rowToSelect = tableModel.getRowCount() - 1;
      paramTable.setRowSelectionInterval(rowToSelect, rowToSelect);
    }
  }

  private class AddUserAction implements ActionListener {
    public void actionPerformed(ActionEvent e) {
     
      if (paramTable.isEditing()) {
        TableCellEditor cellEditor =
          paramTable.getCellEditor(
            paramTable.getEditingRow(),
            paramTable.getEditingColumn());
        cellEditor.stopCellEditing();
      }

      tableModel.addNewColumn(
        THREAD_COLUMNS + "_" + tableModel.getColumnCount(),
        String.class);
      tableModel.fireTableDataChanged();

      // Enable DELETE (which may already be enabled, but it won't hurt)
      deleteColumnButton.setEnabled(true);

      // Highlight (select) the appropriate row.
      int colToSelect = tableModel.getColumnCount() - 1;
      paramTable.setColumnSelectionInterval(colToSelect, colToSelect);
    }
  }

  private class DeleteRowAction implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      if (paramTable.isEditing()) {
        TableCellEditor cellEditor =
          paramTable.getCellEditor(
            paramTable.getEditingRow(),
            paramTable.getEditingColumn());
        cellEditor.cancelCellEditing();
      }

      int rowSelected = paramTable.getSelectedRow();
      if (rowSelected >= 0) {
        tableModel.removeRow(rowSelected);
        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);
        }
      }
    }
  }

  private class DeleteColumnAction implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      if (paramTable.isEditing()) {
        TableCellEditor cellEditor =
          paramTable.getCellEditor(
            paramTable.getEditingRow(),
            paramTable.getEditingColumn());
        cellEditor.cancelCellEditing();
      }

      int colSelected = paramTable.getSelectedColumn();
      if(colSelected == 0 || colSelected == 1)
      {
        JOptionPane.showMessageDialog(null,
            JMeterUtils.getResString("column_delete_disallowed"), "Error",
            JOptionPane.ERROR_MESSAGE);
        return;
      }
      if (colSelected >= 0) {
        tableModel.removeColumn(colSelected);
        tableModel.fireTableDataChanged();

        // Disable DELETE if there are no rows in the table to delete.
        if (tableModel.getColumnCount() == 0) {
          deleteColumnButton.setEnabled(false);
        }

        // Table still contains one or more rows, so highlight (select)
        // the appropriate one.
        else {

          if (colSelected >= tableModel.getColumnCount()) {
            colSelected = colSelected - 1;
          }

          paramTable.setColumnSelectionInterval(
            colSelected,
            colSelected);
        }
      }
    }
  }
}
TOP

Related Classes of org.apache.jmeter.modifiers.gui.UserParametersGui$DeleteRowAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.