|
JMeter example source code file (DistributionGraphVisualizer.java)
The JMeter DistributionGraphVisualizer.java source code
/*
* 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.visualizers;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
import org.apache.jmeter.samplers.Clearable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
/**
* This class implements the visualizer for displaying the distribution graph.
* Distribution graphs are useful for standard benchmarks and viewing the
* distribution of data points. Results tend to clump together.
*
* Created May 25, 2004
*/
public class DistributionGraphVisualizer extends AbstractVisualizer implements ImageVisualizer, GraphListener,
Clearable {
private static final long serialVersionUID = 240L;
private SamplingStatCalculator model;
private JPanel graphPanel = null;
private DistributionGraph graph;
private JTextField noteField;
private int delay = 10;
private int counter = 0;
/**
* Constructor for the GraphVisualizer object.
*/
public DistributionGraphVisualizer() {
model = new SamplingStatCalculator("Distribution");
graph = new DistributionGraph(model);
graph.setBackground(Color.white);
init();
}
/**
* Gets the Image attribute of the GraphVisualizer object.
*
* @return the Image value
*/
public Image getImage() {
Image result = graph.createImage(graph.getWidth(), graph.getHeight());
graph.paintComponent(result.getGraphics());
return result;
}
public synchronized void updateGui() {
if (graph.getWidth() < 10) {
graph.setPreferredSize(new Dimension(getWidth() - 40, getHeight() - 160));
}
graphPanel.updateUI();
graph.repaint();
}
public synchronized void updateGui(Sample s) {
// We have received one more sample
if (delay == counter) {
updateGui();
counter = 0;
} else {
counter++;
}
}
public synchronized void add(SampleResult res) {
model.addSample(res);
updateGui(model.getCurrentSample());
}
public String getLabelResource() {
return "distribution_graph_title"; // $NON-NLS-1$
}
public synchronized void clearData() {
this.graph.clearData();
model.clear();
repaint();
}
@Override
public String toString() {
return "Show the samples in a distribution graph";
}
/**
* Initialize the GUI.
*/
private void init() {
this.setLayout(new BorderLayout());
// MAIN PANEL
Border margin = new EmptyBorder(10, 10, 5, 10);
this.setBorder(margin);
// Set up the graph with header, footer, Y axis and graph display
JPanel lgraphPanel = new JPanel(new BorderLayout());
lgraphPanel.add(createGraphPanel(), BorderLayout.CENTER);
lgraphPanel.add(createGraphInfoPanel(), BorderLayout.SOUTH);
// Add the main panel and the graph
this.add(makeTitlePanel(), BorderLayout.NORTH);
this.add(lgraphPanel, BorderLayout.CENTER);
}
// Methods used in creating the GUI
/**
* Creates a scroll pane containing the actual graph of the results.
*
* @return a scroll pane containing the graph
*/
private Component createGraphPanel() {
graphPanel = new JPanel();
graphPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED, Color.lightGray, Color.darkGray));
graphPanel.add(graph);
graphPanel.setBackground(Color.white);
return graphPanel;
}
// /**
// * Creates one of the fields used to display the graph's current
// * values.
// *
// * @param color the color used to draw the value. By convention
// * this is the same color that is used to draw the
// * graph for this value and in the choose panel.
// * @param length the number of digits which the field should be
// * able to display
// *
// * @return a text field configured to display one of the
// * current graph values
// */
// private JTextField createInfoField(Color color, int length)
// {
// JTextField field = new JTextField(length);
// field.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
// field.setEditable(false);
// field.setForeground(color);
// field.setBackground(getBackground());
//
// // The text field should expand horizontally, but have
// // a fixed height
// field.setMaximumSize(new Dimension(
// field.getMaximumSize().width,
// field.getPreferredSize().height));
// return field;
// }
/**
* Creates a label for one of the fields used to display the graph's current
* values. Neither the label created by this method or the
* <code>field passed as a parameter is added to the GUI here.
*
* @param labelResourceName
* the name of the label resource. This is used to look up the
* label text using {@link JMeterUtils#getResString(String)}.
* @param field
* the field this label is being created for.
*/
private JLabel createInfoLabel(String labelResourceName, JTextField field) {
JLabel label = new JLabel(JMeterUtils.getResString(labelResourceName));
label.setForeground(field.getForeground());
label.setLabelFor(field);
return label;
}
/**
* Creates the information Panel at the bottom
*
* @return
*/
private Box createGraphInfoPanel() {
Box graphInfoPanel = Box.createHorizontalBox();
this.noteField = new JTextField();
graphInfoPanel.add(this.createInfoLabel("distribution_note1", this.noteField)); // $NON-NLS-1$
return graphInfoPanel;
}
/**
* Method implements Printable, which is suppose to return the correct
* internal component. The Action class can then print or save the graphics
* to a file.
*/
@Override
public JComponent getPrintableComponent() {
return this.graphPanel;
}
}
Other JMeter examples (source code examples)Here is a short list of links related to this JMeter DistributionGraphVisualizer.java source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
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.