Class AbstractVisualizer

  • All Implemented Interfaces:
    java.awt.MenuContainer , java.awt.image.ImageObserver , java.io.Serializable , java.util.EventListener , javax.accessibility.Accessible , javax.swing.TransferHandler.HasGetTransferHandler , javax.swing.event.ChangeListener , org.apache.jmeter.gui.ClearGui , org.apache.jmeter.gui.JMeterGUIComponent , org.apache.jmeter.gui.UnsharedComponent , org.apache.jmeter.samplers.Clearable , org.apache.jmeter.visualizers.Printable , org.apache.jmeter.visualizers.Visualizer

    
    public abstract class AbstractVisualizer
    extends AbstractListenerGui implements Visualizer, ChangeListener, UnsharedComponent, Clearable
                        

    This is the base class for JMeter GUI components which can display test results in some way. It provides the following conveniences to developers:

    • Implements the JMeterGUIComponent interface that allows your Gui visualizer to "plug-in" to the JMeter GUI environment. Provides implementations for the following methods:
    • Provides convenience methods to help you make a JMeter-compatible GUI:
      • makeTitlePanel. Returns a panel that includes the name of the component, and a FilePanel that allows users to control what file samples are logged to.
      • getModel and setModel methods for setting and getting the model class that handles the receiving and logging of sample results.
    For most developers, making a new visualizer is primarily for the purpose of either calculating new statistics on the sample results that other visualizers don't calculate, or displaying the results visually in a new and interesting way. Making a new visualizer for either of these purposes is easy - just extend this class and implement the add(SampleResult) method and display the results as you see fit. This AbstractVisualizer and the default ResultCollector handle logging and registering to receive SampleEvents for you - all you need to do is include the JPanel created by makeTitlePanel somewhere in your gui to allow users set the log file.

    If you are doing more than that, you may need to extend ResultCollector as well and modify the configure, modifyTestElement, and createTestElement methods to create and modify your alternate ResultCollector.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
    • Constructor Summary

      Constructors 
      Constructor Description
    • Enum Constant Summary

      Enum Constants 
      Enum Constant Description
    • Method Summary

      Modifier and Type Method Description
      boolean isStats() This method is used to indicate a visualizer generates statistics.
      void setFile(String filename) Sets the filename which results will be saved to.
      String getFile() Gets the filename which has been entered in the FilePanel.
      void stateChanged(ChangeEvent e) Invoked when the target of the listener has changed its state.
      TestElement createTestElement() JMeter test components are separated into a model and a GUI representation.
      void modifyTestElement(TestElement c) GUI components are responsible for populating TestElements they create with the data currently held in the GUI components.
      void configure(TestElement el) A newly created gui component can be initialized with the contents of a Test Element object by calling this method.
      void clearGui() Provides a default implementation that resets the name field to the value of getStaticLabel(), reset comment and sets enabled to true.
      • Methods inherited from class org.apache.jmeter.gui.AbstractJMeterGuiComponent

        getComment, getDocAnchor, getName, getPrintableComponent, getStaticLabel, isEnabled, setComment, setEnabled, setName
      • Methods inherited from class javax.swing.JPanel

        getAccessibleContext, getUI, getUIClassID, setUI, updateUI
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addNotify, addVetoableChangeListener, contains, createToolTip, disable, enable, firePropertyChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputVerifier, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getUI, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintImmediately, print, printAll, putClientProperty, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
      • Methods inherited from class java.awt.Container

        add, add, addContainerListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, getComponent, getComponentAt, getComponentCount, getComponentZOrder, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, locate, minimumSize, paintComponents, preferredSize, printComponents, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate
      • Methods inherited from class java.awt.Component

        action, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, createImage, createVolatileImage, dispatchEvent, enableInputMethods, getBackground, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getParent, getPropertyChangeListeners, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusOwner, isFocusTraversable, isFocusable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, resize, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusTraversalKeysEnabled, setFocusable, setIgnoreRepaint, setLocale, setLocation, setMixingCutoutShape, setSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class org.apache.jmeter.visualizers.gui.AbstractListenerGui

        createPopupMenu, getMenuCategories
      • Methods inherited from class org.apache.jmeter.visualizers.Visualizer

        add
      • Methods inherited from class org.apache.jmeter.samplers.Clearable

        clearData
      • Methods inherited from class org.apache.jmeter.gui.JMeterGUIComponent

        assignDefaultValues, canBeAdded, getLabelResource, makeTestElement
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

    • Method Detail

      • isStats

         boolean isStats()

        This method is used to indicate a visualizer generates statistics.

        Returns:

        true if visualiser generates statistics

      • setFile

         void setFile(String filename)

        Sets the filename which results will be saved to. This will set the filename in the FilePanel. Subclasses don't normally need to call this method, because configuration of the FilePanel is handled in this base class.

        Parameters:
        filename - the new filename
      • getFile

         String getFile()

        Gets the filename which has been entered in the FilePanel. Subclasses don't normally need to call this method, because configuration of the FilePanel is handled in this base class.

        Returns:

        the current filename

      • stateChanged

         void stateChanged(ChangeEvent e)

        Invoked when the target of the listener has changed its state. This implementation assumes that the target is the FilePanel, and will update the result collector for the new filename.

        Parameters:
        e - the event that has occurred
      • createTestElement

         TestElement createTestElement()

        JMeter test components are separated into a model and a GUI representation. The model holds the data and the GUI displays it. The GUI class is responsible for knowing how to create and initialize with data the model class that it knows how to display, and this method is called when new test elements are created.

        Since 5.6.3, the default implementation is as follows, and subclasses should override makeTestElement

        public TestElement createTestElement() {
            TestElement element = makeTestElement();
            assignDefaultValues(element);
            return el;
        }
        

        Before 5.6.3 the canonical implementation was as follows, however, it is recommended to avoid overriding createTestElement and override makeTestElement instead.

        public TestElement createTestElement() {
            TestElementXYZ el = new TestElementXYZ();
            modifyTestElement(el);
            return el;
        }
        
        Returns:

        the Test Element object that the GUI component represents.

      • modifyTestElement

         void modifyTestElement(TestElement c)

        GUI components are responsible for populating TestElements they create with the data currently held in the GUI components. This method should overwrite whatever data is currently in the TestElement as it is called after a user has filled out the form elements in the gui with new information.

        If you override AbstractJMeterGuiComponent, you might want using bindingGroup instead of overriding modifyTestElement.

        The canonical implementation looks like this:

        @Override
        public void modifyTestElement(TestElement element) {
            super.modifyTestElement(element); // clear the element and assign basic fields like name, gui class, test class
            // Using the element setters (preferred):
            // If the field is empty, you probably want to remove the property instead of storing an empty string
            // See Streamline binding of UI elements to TestElement properties
            // for more details
            TestElementXYZ xyz = (TestElementXYZ) element;
            xyz.setState(StringUtils.defaultIfEmpty(guiState.getText(), null));
            xyz.setCode(StringUtils.defaultIfEmpty(guiCode.getText(), null));
            ... other GUI fields ...
            // or directly (do not use unless there is no setter for the field):
            element.setProperty(TestElementXYZ.STATE, StringUtils.defaultIfEmpty(guiState.getText(), null))
            element.setProperty(TestElementXYZ.CODE, StringUtils.defaultIfEmpty(guiCode.getText(), null))
            ... other GUI fields ...
        }
        
      • configure

         void configure(TestElement el)

        A newly created gui 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.

        AbstractJMeterGuiComponent provides a partial implementation of this method, setting the name of the component and its enabled status. Subclasses should override this method, performing their own configuration as needed, but also calling this super-implementation.

      • clearGui

         void clearGui()

        Provides a default implementation that resets the name field to the value of getStaticLabel(), reset comment and sets enabled to true. Your GUI may need more things cleared, in which case you should override, clear the extra fields, and still call super.clearGui().