Package org.apache.jmeter.protocol.http.config.gui

Source Code of org.apache.jmeter.protocol.http.config.gui.UrlConfigGui

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.protocol.http.config.gui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jmeter.protocol.http.gui.HTTPArgumentsPanel;
import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase;
import org.apache.jmeter.protocol.http.util.HTTPArgument;
import org.apache.jmeter.testelement.AbstractTestElement;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.property.BooleanProperty;
import org.apache.jmeter.testelement.property.TestElementProperty;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.gui.JLabeledChoice;

/**
* Basic URL / HTTP Request configuration:
* - host and port
* - path, method, encoding, parameters
* - redirects & keepalive
*/
public class UrlConfigGui extends JPanel implements ChangeListener {
  protected HTTPArgumentsPanel argsPanel;

  private static String DOMAIN = "domain"; // $NON-NLS-1$

  private static String PORT = "port"; // $NON-NLS-1$

  private static String PROTOCOL = "protocol"; // $NON-NLS-1$

  private static String CONTENT_ENCODING = "content_encoding"; // $NON-NLS-1$

  private static String PATH = "path"; // $NON-NLS-1$

  private static String FOLLOW_REDIRECTS = "follow_redirects"; // $NON-NLS-1$

  private static String AUTO_REDIRECTS = "auto_redirects"; // $NON-NLS-1$

  private static String USE_KEEPALIVE = "use_keepalive"; // $NON-NLS-1$

    private static String USE_MULTIPART_FOR_POST = "use_multipart_for_post"; // $NON-NLS-1$

  private JTextField domain;

  private JTextField port;

  private JTextField protocol;

  private JTextField contentEncoding;

  private JTextField path;

  private JCheckBox followRedirects;

  private JCheckBox autoRedirects;

  private JCheckBox useKeepAlive;

    private JCheckBox useMultipartForPost;

    private JLabeledChoice method;
   
    private final boolean notConfigOnly;
    // set this true to suppress some items for use in HTTP Request defaults
   
  public UrlConfigGui() {
    notConfigOnly=true;
    init();
  }

  public UrlConfigGui(boolean value) {
    notConfigOnly=value;
    init();
  }
 
  protected void configureTestElement(TestElement mc) {
    mc.setProperty(TestElement.NAME, getName());
    mc.setProperty(TestElement.GUI_CLASS, this.getClass().getName());
    mc.setProperty(TestElement.TEST_CLASS, mc.getClass().getName());
  }

  public void clear() {
    domain.setText(""); // $NON-NLS-1$
    if (notConfigOnly){
      followRedirects.setSelected(false);
      autoRedirects.setSelected(true);
          method.setText(HTTPSamplerBase.DEFAULT_METHOD);
      useKeepAlive.setSelected(true);
          useMultipartForPost.setSelected(false);
    }
    path.setText(""); // $NON-NLS-1$
    port.setText(""); // $NON-NLS-1$
    protocol.setText(""); // $NON-NLS-1$
    contentEncoding.setText(""); // $NON-NLS-1$
    argsPanel.clear();
  }

  public TestElement createTestElement() {
    ConfigTestElement element = new ConfigTestElement();

    this.configureTestElement(element);
    Arguments args = (Arguments) argsPanel.createTestElement();

    HTTPArgument.convertArgumentsToHTTP(args);
    element.setProperty(new TestElementProperty(HTTPSamplerBase.ARGUMENTS, args));
    element.setProperty(HTTPSamplerBase.DOMAIN, domain.getText());
    element.setProperty(HTTPSamplerBase.PORT, port.getText());
    element.setProperty(HTTPSamplerBase.PROTOCOL, protocol.getText());
    element.setProperty(HTTPSamplerBase.CONTENT_ENCODING, contentEncoding.getText());
    element.setProperty(HTTPSamplerBase.PATH, path.getText());
    if (notConfigOnly){
      element.setProperty(HTTPSamplerBase.METHOD, method.getText());
      element.setProperty(new BooleanProperty(HTTPSamplerBase.FOLLOW_REDIRECTS, followRedirects.isSelected()));
      element.setProperty(new BooleanProperty(HTTPSamplerBase.AUTO_REDIRECTS, autoRedirects.isSelected()));
      element.setProperty(new BooleanProperty(HTTPSamplerBase.USE_KEEPALIVE, useKeepAlive.isSelected()));
          element.setProperty(new BooleanProperty(HTTPSamplerBase.DO_MULTIPART_POST, useMultipartForPost.isSelected()));
    }
    return element;
  }

  /**
   * Set the text, etc. in the UI.
   *
   * @param el
   *            contains the data to be displayed
   */
  public void configure(TestElement el) {
    setName(el.getPropertyAsString(TestElement.NAME));
    argsPanel.configure((TestElement) el.getProperty(HTTPSamplerBase.ARGUMENTS).getObjectValue());
    domain.setText(el.getPropertyAsString(HTTPSamplerBase.DOMAIN));

    String portString = el.getPropertyAsString(HTTPSamplerBase.PORT);

    // Only display the port number if it is meaningfully specified
    if (portString.equals(HTTPSamplerBase.UNSPECIFIED_PORT_AS_STRING)) {
      port.setText(""); // $NON-NLS-1$
    } else {
      port.setText(portString);
    }
    protocol.setText(el.getPropertyAsString(HTTPSamplerBase.PROTOCOL));
        contentEncoding.setText(el.getPropertyAsString(HTTPSamplerBase.CONTENT_ENCODING));
    path.setText(el.getPropertyAsString(HTTPSamplerBase.PATH));
    if (notConfigOnly){
          method.setText(el.getPropertyAsString(HTTPSamplerBase.METHOD));
      followRedirects.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.FOLLOW_REDIRECTS));
      autoRedirects.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.AUTO_REDIRECTS));
      useKeepAlive.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.USE_KEEPALIVE));
          useMultipartForPost.setSelected(((AbstractTestElement) el).getPropertyAsBoolean(HTTPSamplerBase.DO_MULTIPART_POST));
    }
  }

  protected void init() {
    this.setLayout(new BorderLayout());

    // WEB SERVER PANEL
    VerticalPanel webServerPanel = new VerticalPanel();
    webServerPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
        JMeterUtils.getResString("web_server"))); // $NON-NLS-1$
    final JPanel domainPanel = getDomainPanel();
    final JPanel portPanel = getPortPanel();
    domainPanel.add(portPanel,BorderLayout.EAST);
    webServerPanel.add(domainPanel);

    JPanel northPanel = new JPanel();
    northPanel.setLayout(new BoxLayout(northPanel, BoxLayout.Y_AXIS));
    northPanel.add(getProtocolAndMethodPanel());
    northPanel.add(getPathPanel());

    // WEB REQUEST PANEL
    JPanel webRequestPanel = new JPanel();
    webRequestPanel.setLayout(new BorderLayout());
    webRequestPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
        JMeterUtils.getResString("web_request"))); // $NON-NLS-1$

    webRequestPanel.add(northPanel, BorderLayout.NORTH);
    webRequestPanel.add(getParameterPanel(), BorderLayout.CENTER);

    this.add(webServerPanel, BorderLayout.NORTH);
    this.add(webRequestPanel, BorderLayout.CENTER);
  }
  protected JPanel getPortPanel() {
    port = new JTextField(6);
    port.setName(PORT);

    JLabel label = new JLabel(JMeterUtils.getResString("web_server_port")); // $NON-NLS-1$
    label.setLabelFor(port);

    JPanel panel = new JPanel(new BorderLayout(5, 0));
    panel.add(label, BorderLayout.WEST);
    panel.add(port, BorderLayout.CENTER);

    return panel;
  }

  protected JPanel getDomainPanel() {
    domain = new JTextField(20);
    domain.setName(DOMAIN);

    JLabel label = new JLabel(JMeterUtils.getResString("web_server_domain")); // $NON-NLS-1$
    label.setLabelFor(domain);

    JPanel panel = new JPanel(new BorderLayout(5, 0));
    panel.add(label, BorderLayout.WEST);
    panel.add(domain, BorderLayout.CENTER);
    return panel;
  }

  /**
   * This method defines the Panel for the HTTP path, 'Follow Redirects'
   * 'Use KeepAlive', and 'Use multipart for HTTP POST' elements.
   *
   * @return JPanel The Panel for the path, 'Follow Redirects' and 'Use
   *         KeepAlive' elements.
   */
  protected Component getPathPanel() {
    path = new JTextField(15);
    path.setName(PATH);

    JLabel label = new JLabel(JMeterUtils.getResString("path")); //$NON-NLS-1$
    label.setLabelFor(path);

    if (notConfigOnly){
      followRedirects = new JCheckBox(JMeterUtils.getResString("follow_redirects")); // $NON-NLS-1$
      followRedirects.setName(FOLLOW_REDIRECTS);
      followRedirects.setSelected(false);
 
      autoRedirects = new JCheckBox(JMeterUtils.getResString("follow_redirects_auto")); //$NON-NLS-1$
      autoRedirects.setName(AUTO_REDIRECTS);
      autoRedirects.addChangeListener(this);
      autoRedirects.setSelected(true);// Default changed in 2.3
 
      useKeepAlive = new JCheckBox(JMeterUtils.getResString("use_keepalive")); // $NON-NLS-1$
      useKeepAlive.setName(USE_KEEPALIVE);
      useKeepAlive.setSelected(true);
 
          useMultipartForPost = new JCheckBox(JMeterUtils.getResString("use_multipart_for_http_post")); // $NON-NLS-1$
          useMultipartForPost.setName(USE_MULTIPART_FOR_POST);
          useMultipartForPost.setSelected(false);
    }
   
    JPanel pathPanel = new JPanel(new BorderLayout(5, 0));
    pathPanel.add(label, BorderLayout.WEST);
    pathPanel.add(path, BorderLayout.CENTER);
    pathPanel.setMinimumSize(pathPanel.getPreferredSize());

    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.add(pathPanel);
    if (notConfigOnly){
      JPanel optionPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
      optionPanel.add(autoRedirects);
      optionPanel.add(followRedirects);
      optionPanel.add(useKeepAlive);
       optionPanel.add(useMultipartForPost);
      optionPanel.setMinimumSize(optionPanel.getPreferredSize());
      panel.add(optionPanel);
    }

    return panel;
  }

  protected JPanel getProtocolAndMethodPanel() {
    // PROTOCOL
    protocol = new JTextField(10);
    protocol.setName(PROTOCOL);
    // CONTENT_ENCODING
    contentEncoding = new JTextField(10);
    contentEncoding.setName(CONTENT_ENCODING);

    JLabel protocolLabel = new JLabel(JMeterUtils.getResString("protocol")); // $NON-NLS-1$
    protocolLabel.setLabelFor(protocol);
    JLabel contentEncodingLabel = new JLabel(JMeterUtils.getResString("content_encoding")); // $NON-NLS-1$
    protocolLabel.setLabelFor(contentEncoding);
        if (notConfigOnly){
          method = new JLabeledChoice(JMeterUtils.getResString("method"), // $NON-NLS-1$
                    HTTPSamplerBase.getValidMethodsAsArray());
        }

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));

    panel.add(protocolLabel);
    panel.add(protocol);
    panel.add(Box.createHorizontalStrut(5));

    if (notConfigOnly){
      panel.add(method);
    }
    panel.setMinimumSize(panel.getPreferredSize());
        panel.add(Box.createHorizontalStrut(5));
   
    panel.add(contentEncodingLabel);
    panel.add(contentEncoding);
    return panel;
  }

  protected JPanel getParameterPanel() {
    argsPanel = new HTTPArgumentsPanel();

    return argsPanel;
  }

  // Disable follow redirects if Autoredirect is selected
  public void stateChanged(ChangeEvent e) {
    if (e.getSource() == autoRedirects){
      if (autoRedirects.isSelected()) {
        followRedirects.setEnabled(false);
      } else {
        followRedirects.setEnabled(true);
      }
    }
  }
}
TOP

Related Classes of org.apache.jmeter.protocol.http.config.gui.UrlConfigGui

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.