// TODO: resolve scrolling issue here and in all other samplers
package kg.apc.jmeter.samplers;
import kg.apc.jmeter.JMeterPluginsUtils;
import kg.apc.jmeter.gui.GuiBuilderHelper;
import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
import org.apache.jmeter.testelement.TestElement;
import javax.swing.*;
import java.awt.*;
public class DummySamplerGui
extends AbstractSamplerGui {
public static final String WIKIPAGE = "DummySampler";
private JCheckBox isSuccessful;
private JTextField responseCode;
private JTextField responseMessage;
private JTextField responseTime;
private JTextArea responseData;
private JTextArea requestData;
private JCheckBox isWaiting;
private JTextField latency;
private JTextField connect;
public DummySamplerGui() {
init();
}
@Override
public String getStaticLabel() {
return JMeterPluginsUtils.prefixLabel("Dummy Sampler");
}
@Override
public void configure(TestElement element) {
super.configure(element);
isSuccessful.setSelected(element.getPropertyAsBoolean(DummySampler.IS_SUCCESSFUL));
isWaiting.setSelected(element.getPropertyAsBoolean(DummySampler.IS_WAITING));
responseCode.setText(element.getPropertyAsString(DummySampler.RESPONSE_CODE));
responseMessage.setText(element.getPropertyAsString(DummySampler.RESPONSE_MESSAGE));
requestData.setText(element.getPropertyAsString(DummySampler.REQUEST_DATA));
responseData.setText(element.getPropertyAsString(DummySampler.RESPONSE_DATA));
responseTime.setText(element.getPropertyAsString(DummySampler.RESPONSE_TIME));
latency.setText(element.getPropertyAsString(DummySampler.LATENCY));
connect.setText(element.getPropertyAsString(DummySampler.CONNECT));
}
@Override
public TestElement createTestElement() {
DummySampler sampler = new DummySampler();
modifyTestElement(sampler);
sampler.setComment(JMeterPluginsUtils.getWikiLinkText(WIKIPAGE));
return sampler;
}
/**
* Modifies a given TestElement to mirror the data in the gui components.
*
* @param sampler Sampler
* @see org.apache.jmeter.gui.JMeterGUIComponent#modifyTestElement(TestElement)
*/
@Override
public void modifyTestElement(TestElement sampler) {
super.configureTestElement(sampler);
if (sampler instanceof DummySampler) {
DummySampler dummySampler = (DummySampler) sampler;
dummySampler.setSimulateWaiting(isWaiting.isSelected());
dummySampler.setSuccessful(isSuccessful.isSelected());
dummySampler.setResponseCode(responseCode.getText());
dummySampler.setResponseMessage(responseMessage.getText());
dummySampler.setRequestData(requestData.getText());
dummySampler.setResponseData(responseData.getText());
dummySampler.setResponseTime(responseTime.getText());
dummySampler.setLatency(latency.getText());
dummySampler.setConnectTime(connect.getText());
}
}
@Override
public void clearGui() {
super.clearGui();
initFields();
}
private void initFields() {
isSuccessful.setSelected(true);
isWaiting.setSelected(true);
responseCode.setText("200");
responseMessage.setText("OK");
requestData.setText("Dummy Sampler used to simulate requests and responses\nwithout actual network activity. This helps debugging tests.");
responseData.setText("Dummy Sampler used to simulate requests and responses\nwithout actual network activity. This helps debugging tests.");
responseTime.setText("${__Random(50,500)}");
latency.setText("${__Random(1,50)}");
connect.setText("${__Random(1,5)}");
}
@Override
public String getLabelResource() {
return this.getClass().getSimpleName();
}
private void init() {
setLayout(new BorderLayout(0, 5));
setBorder(makeBorder());
add(JMeterPluginsUtils.addHelpLinkToPanel(makeTitlePanel(), WIKIPAGE), BorderLayout.NORTH);
JPanel mainPanel = new JPanel(new GridBagLayout());
GridBagConstraints labelConstraints = new GridBagConstraints();
labelConstraints.anchor = GridBagConstraints.FIRST_LINE_END;
GridBagConstraints editConstraints = new GridBagConstraints();
editConstraints.anchor = GridBagConstraints.FIRST_LINE_START;
editConstraints.weightx = 1.0;
editConstraints.fill = GridBagConstraints.HORIZONTAL;
addToPanel(mainPanel, labelConstraints, 0, 0, new JLabel("Successful sample: ", JLabel.RIGHT));
addToPanel(mainPanel, editConstraints, 1, 0, isSuccessful = new JCheckBox());
addToPanel(mainPanel, labelConstraints, 0, 1, new JLabel("Response Code (eg 200): ", JLabel.RIGHT));
addToPanel(mainPanel, editConstraints, 1, 1, responseCode = new JTextField(20));
editConstraints.insets = new java.awt.Insets(2, 0, 0, 0);
labelConstraints.insets = new java.awt.Insets(2, 0, 0, 0);
addToPanel(mainPanel, labelConstraints, 0, 2, new JLabel("Response Message (eg OK): ", JLabel.RIGHT));
addToPanel(mainPanel, editConstraints, 1, 2, responseMessage = new JTextField(20));
addToPanel(mainPanel, labelConstraints, 0, 3, new JLabel("Connect Time (milliseconds): ", JLabel.RIGHT));
addToPanel(mainPanel, editConstraints, 1, 3, connect = new JTextField(20));
addToPanel(mainPanel, labelConstraints, 0, 4, new JLabel("Latency (milliseconds): ", JLabel.RIGHT));
addToPanel(mainPanel, editConstraints, 1, 4, latency = new JTextField(20));
addToPanel(mainPanel, labelConstraints, 0, 5, new JLabel("Response Time (milliseconds): ", JLabel.RIGHT));
addToPanel(mainPanel, editConstraints, 1, 5, responseTime = new JTextField(20));
addToPanel(mainPanel, labelConstraints, 0, 6, new JLabel("Simulate Response Time (sleep): ", JLabel.RIGHT));
addToPanel(mainPanel, editConstraints, 1, 6, isWaiting = new JCheckBox());
editConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
labelConstraints.insets = new java.awt.Insets(4, 0, 0, 0);
addToPanel(mainPanel, labelConstraints, 0, 7, new JLabel("Request Data: ", JLabel.RIGHT));
editConstraints.fill = GridBagConstraints.BOTH;
requestData = new JTextArea();
addToPanel(mainPanel, editConstraints, 1, 7, GuiBuilderHelper.getTextAreaScrollPaneContainer(requestData, 10));
addToPanel(mainPanel, labelConstraints, 0, 8, new JLabel("Response Data: ", JLabel.RIGHT));
editConstraints.fill = GridBagConstraints.BOTH;
responseData = new JTextArea();
addToPanel(mainPanel, editConstraints, 1, 8, GuiBuilderHelper.getTextAreaScrollPaneContainer(responseData, 10));
JPanel container = new JPanel(new BorderLayout());
container.add(mainPanel, BorderLayout.NORTH);
add(container, BorderLayout.CENTER);
}
private void addToPanel(JPanel panel, GridBagConstraints constraints, int col, int row, JComponent component) {
constraints.gridx = col;
constraints.gridy = row;
panel.add(component, constraints);
}
}