alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

// $Header: /home/cvs/jakarta-jmeter/src/components/org/apache/jmeter/assertions/gui/AssertionGui.java,v 1.17 2004/03/05 01:32:13 sebb Exp $
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
*/

package org.apache.jmeter.assertions.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import org.apache.jmeter.assertions.ResponseAssertion;
import org.apache.jmeter.gui.util.PowerTableModel;
import org.apache.jmeter.gui.util.TextAreaCellRenderer;
import org.apache.jmeter.gui.util.TextAreaTableCellEditor;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.property.PropertyIterator;
import org.apache.jmeter.util.JMeterUtils;

/**
 * GUI interface for a {@link ResponseAssertion}.
 *
 * @version   $Revision: 1.17 $ on $Date: 2004/03/05 01:32:13 $
 */
public class AssertionGui extends AbstractAssertionGui
{
    /** The name of the table column in the list of patterns. */
    private static final String COL_NAME =
        JMeterUtils.getResString("assertion_patterns_to_test");

    /** Radio button indicating that the text response should be tested. */
    private JRadioButton responseStringButton;

    /** Radio button indicating that the URL should be tested. */
    private JRadioButton labelButton;

	/** Radio button indicating that the responseMessage should be tested. */
	private JRadioButton responseMessageButton;

	/** Radio button indicating that the responseCode should be tested. */
	private JRadioButton responseCodeButton;

    /**
     * Radio button indicating to test if the field contains one of the
     * patterns.
     */
    private JRadioButton containsBox;

    /**
     * Radio button indicating to test if the field matches one of the
     * patterns.
     */
    private JRadioButton matchesBox;

    /**
     * Checkbox indicating to test that the field does NOT contain/match
     * the patterns.
     */
    private JCheckBox notBox;

    /** A table of patterns to test against. */
    private JTable stringTable;

    /** Button to add a new pattern. */
    private JButton addPattern;

    /** Button to delete a pattern. */
    private JButton deletePattern;

    /** Table model for the pattern table. */
    private PowerTableModel tableModel;

    /**
     * Create a new AssertionGui panel.
     */
    public AssertionGui()
    {
        init();
    }

    public String getLabelResource()
    {
        return "assertion_title";
    }

    /* Implements JMeterGUIComponent.createTestElement() */
    public TestElement createTestElement()
    {
        ResponseAssertion el = new ResponseAssertion();
        modifyTestElement(el);
        return el;
    }

    /* Implements JMeterGUIComponent.modifyTestElement(TestElement) */
    public void modifyTestElement(TestElement el)
    {
        configureTestElement(el);
        if (el instanceof ResponseAssertion)
        {
            ResponseAssertion ra = (ResponseAssertion) el;

            ra.clearTestStrings();
            String[] testStrings = tableModel.getData().getColumn(COL_NAME);
            for (int i = 0; i < testStrings.length; i++)
            {
                ra.addTestString(testStrings[i]);
            }

            if (labelButton.isSelected())
            {
                ra.setTestField(ResponseAssertion.SAMPLE_LABEL);
            }
            else if (responseCodeButton.isSelected())
            {
				ra.setTestField(ResponseAssertion.RESPONSE_CODE);
            }
			else if (responseMessageButton.isSelected())
			{
				ra.setTestField(ResponseAssertion.RESPONSE_MESSAGE);
			}
            else
            {
                ra.setTestField(ResponseAssertion.RESPONSE_DATA);
            }

            if (containsBox.isSelected())
            {
                ra.setToContainsType();
            }
            else
            {
                ra.setToMatchType();
            }

            if (notBox.isSelected())
            {
                ra.setToNotType();
            }
            else
            {
                ra.unsetNotType();
            }
        }
    }

    /**
     * A newly created component can be initialized with the contents of
     * a Test Element object by calling this method.  The component is
     * responsible for querying the Test Element object for the
     * relevant information to display in its GUI.
     *
     * @param el the TestElement to configure
     */
    public void configure(TestElement el)
    {
        super.configure(el);
        ResponseAssertion model = (ResponseAssertion) el;

        if (model.isContainsType())
        {
            containsBox.setSelected(true);
            matchesBox.setSelected(false);
        }
        else
        {
            containsBox.setSelected(false);
            matchesBox.setSelected(true);
        }

        if (model.isNotType())
        {
            notBox.setSelected(true);
        }
        else
        {
            notBox.setSelected(false);
        }

        if (ResponseAssertion.RESPONSE_DATA.equals(model.getTestField()))
        {
            responseStringButton.setSelected(true);
        }
		else if (ResponseAssertion.RESPONSE_CODE.equals(model.getTestField()))
		{
			responseCodeButton.setSelected(true);
		}
		else if (ResponseAssertion.RESPONSE_MESSAGE.equals(model.getTestField()))
		{
			responseMessageButton.setSelected(true);
		}
        else // Assume it is the URL
        {
            labelButton.setSelected(true);
        }

        tableModel.clearData();
        PropertyIterator tests = model.getTestStrings().iterator();
        while (tests.hasNext())
        {
            tableModel.addRow(new Object[] { tests.next().getStringValue()});
        }

        if(model.getTestStrings().size() == 0)
        {
            deletePattern.setEnabled(false);
        }
        else
        {
            deletePattern.setEnabled(true);
        }

        tableModel.fireTableDataChanged();
    }

    /**
     * Initialize the GUI components and layout.
     */
    private void init()
    {
        setLayout(new BorderLayout());
        Box box = Box.createVerticalBox();
        setBorder(makeBorder());

        box.add(makeTitlePanel());
        box.add(createFieldPanel());
        box.add(createTypePanel());
        add(box,BorderLayout.NORTH);
        add(createStringPanel(),BorderLayout.CENTER);
    }

    /**
     * Create a panel allowing the user to choose which response field should
     * be tested.
     *
     * @return a new panel for selecting the response field
     */
    private JPanel createFieldPanel()
    {
        JPanel panel = new JPanel();
        panel.setBorder(
            BorderFactory.createTitledBorder(
                JMeterUtils.getResString("assertion_resp_field")));

        responseStringButton =
            new JRadioButton(JMeterUtils.getResString("assertion_text_resp"));
        labelButton =
            new JRadioButton(JMeterUtils.getResString("assertion_url_samp"));
		responseCodeButton =
			new JRadioButton(JMeterUtils.getResString("assertion_code_resp"));
		responseMessageButton =
			new JRadioButton(JMeterUtils.getResString("assertion_message_resp"));

        ButtonGroup group = new ButtonGroup();
        group.add(responseStringButton);
        group.add(labelButton);
		group.add(responseCodeButton);
		group.add(responseMessageButton);
		
        panel.add(responseStringButton);
        panel.add(labelButton);
		panel.add(responseCodeButton);
		panel.add(responseMessageButton);
		
        responseStringButton.setSelected(true);

        return panel;
    }

    /**
     * Create a panel allowing the user to choose what type of test should be
     * performed.
     *
     * @return a new panel for selecting the type of assertion test
     */
    private JPanel createTypePanel()
    {
        JPanel panel = new JPanel();
        panel.setBorder(
            BorderFactory.createTitledBorder(
                JMeterUtils.getResString("assertion_pattern_match_rules")));

        ButtonGroup group = new ButtonGroup();

        containsBox =
            new JRadioButton(JMeterUtils.getResString("assertion_contains"));
        group.add(containsBox);
        containsBox.setSelected(true);
        panel.add(containsBox);

        matchesBox =
            new JRadioButton(JMeterUtils.getResString("assertion_matches"));
        group.add(matchesBox);
        panel.add(matchesBox);

        notBox = new JCheckBox(JMeterUtils.getResString("assertion_not"));
        panel.add(notBox);

        return panel;
    }

    /**
     * Create a panel allowing the user to supply a list of string patterns to
     * test against.
     *
     * @return a new panel for adding string patterns
     */
    private JPanel createStringPanel()
    {
        tableModel =
            new PowerTableModel(
                new String[] { COL_NAME },
                new Class[] { String.class });
        stringTable = new JTable(tableModel);

        TextAreaCellRenderer renderer = new TextAreaCellRenderer();
        stringTable.setRowHeight(renderer.getPreferredHeight());
        stringTable.setDefaultRenderer(String.class, renderer);
        stringTable.setDefaultEditor(
            String.class,
            new TextAreaTableCellEditor());
        stringTable.setPreferredScrollableViewportSize(new Dimension(100, 70));

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(
            BorderFactory.createTitledBorder(
                JMeterUtils.getResString("assertion_patterns_to_test")));

        panel.add(new JScrollPane(stringTable), BorderLayout.CENTER);
        panel.add(createButtonPanel(), BorderLayout.SOUTH);

        return panel;
    }

    /**
     * Create a panel with buttons to add and delete string patterns.
     *
     * @return the new panel with add and delete buttons
     */
    private JPanel createButtonPanel()
    {
        addPattern = new JButton(JMeterUtils.getResString("add"));
        addPattern.addActionListener(new AddPatternListener());

        deletePattern = new JButton(JMeterUtils.getResString("delete"));
        deletePattern.addActionListener(new ClearPatternsListener());
        deletePattern.setEnabled(false);

        JPanel buttonPanel = new JPanel();
        buttonPanel.add(addPattern);
        buttonPanel.add(deletePattern);
        return buttonPanel;
    }

    /**
     * An ActionListener for deleting a pattern.
     *
     * @author    
     * @version   $Revision: 1.17 $ Last updated: $Date: 2004/03/05 01:32:13 $
     */
    private class ClearPatternsListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            int index = stringTable.getSelectedRow();
            if (index > -1)
            {
                stringTable
                    .getCellEditor(index, stringTable.getSelectedColumn())
                    .cancelCellEditing();
                tableModel.removeRow(index);
                tableModel.fireTableDataChanged();
            }
            if (stringTable.getModel().getRowCount() == 0)
            {
                deletePattern.setEnabled(false);
            }
        }
    }

    /**
     * An ActionListener for adding a pattern.
     *
     * @version   $Revision: 1.17 $  Last updated: $Date: 2004/03/05 01:32:13 $
     */
    private class AddPatternListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            tableModel.addNewRow();
            deletePattern.setEnabled(true);
            tableModel.fireTableDataChanged();
        }
    }
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.