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

JMeter example source code file (DistributionGraphVisualizer.java)

This example JMeter source code file (DistributionGraphVisualizer.java) 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.

Java - JMeter tags/keywords

awt, border, borderlayout, borderlayout, box, distributiongraphvisualizer, gui, image, jlabel, jpanel, jpanel, jtextfield, jtextfield, non-nls-1, override, samplingstatcalculator, string, swing

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

 

new blog posts

 

Copyright 1998-2021 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.