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

What this is

This file 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.

Other links

The source code

// $Header: /home/cvs/jakarta-jmeter/src/monitor/components/org/apache/jmeter/visualizers/MonitorPerformancePanel.java,v 1.5 2004/03/19 23:19:48 sebb Exp $
/*
 * Copyright 2004 The Apache Software Foundation.
 *
 * Licensed 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.util.HashMap;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;


import org.apache.jmeter.samplers.Clearable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.util.JMeterUtils;

public class MonitorPerformancePanel extends JSplitPane
	implements TreeSelectionListener, MonitorListener, Clearable
{

	private JScrollPane TREEPANE;
	private JPanel GRAPHPANEL;
	private JTree SERVERTREE;
	private DefaultTreeModel TREEMODEL;
	private MonitorGraph GRAPH;
	private DefaultMutableTreeNode ROOTNODE;
	private HashMap SERVERMAP;
	private MonitorAccumModel MODEL;
	private SampleResult ROOTSAMPLE;
	
	public static final String LEGEND_HEALTH =
		JMeterUtils.getResString("monitor_legend_health");
	public static final String LEGEND_LOAD =
		JMeterUtils.getResString("monitor_legend_load");
	public static final String LEGEND_MEM =
		JMeterUtils.getResString("monitor_legend_memory_per");
	public static final String LEGEND_THREAD =
		JMeterUtils.getResString("monitor_legend_thread_per");
	public static ImageIcon LEGEND_HEALTH_ICON =
		JMeterUtils.getImage("monitor-green-legend.gif");
	public static ImageIcon LEGEND_LOAD_ICON =
		JMeterUtils.getImage("monitor-blue-legend.gif");
	public static ImageIcon LEGEND_MEM_ICON =
		JMeterUtils.getImage("monitor-orange-legend.gif");
	public static ImageIcon LEGEND_THREAD_ICON =
		JMeterUtils.getImage("monitor-red-legend.gif");
	public static final String GRID_LABEL_TOP =
		JMeterUtils.getResString("monitor_label_left_top");
	public static final String GRID_LABEL_MIDDLE =
		JMeterUtils.getResString("monitor_label_left_middle");
	public static final String GRID_LABEL_BOTTOM =
		JMeterUtils.getResString("monitor_label_left_bottom");
	public static final String GRID_LABEL_HEALTHY =
		JMeterUtils.getResString("monitor_label_right_healthy");
	public static final String GRID_LABEL_ACTIVE =
		JMeterUtils.getResString("monitor_label_right_active");
	public static final String GRID_LABEL_WARNING =
		JMeterUtils.getResString("monitor_label_right_warning");
	public static final String GRID_LABEL_DEAD =
		JMeterUtils.getResString("monitor_label_right_dead");
	
	public static final String PERF_TITLE =
		JMeterUtils.getResString("monitor_performance_title");
	public static final String SERVER_TITLE =
		JMeterUtils.getResString("monitor_performance_servers");

	protected Font plaintext = new Font("plain", Font.TRUETYPE_FONT, 10);

	/**
     * 
     * @deprecated Only for use in unit testing
     */
    public MonitorPerformancePanel()
	{
    	//log.warn("Only for use in unit testing");
    }

    /**
     * 
     */
    public MonitorPerformancePanel(MonitorAccumModel model, MonitorGraph graph)
    {
        super();
        this.SERVERMAP = new HashMap();
        this.MODEL = model;
        this.MODEL.addListener(this);
        this.GRAPH = graph;
        init();
    }

	/**
	 * init() will create all the necessary swing panels,
	 * labels and icons for the performance panel.
	 */
	protected void init(){
		ROOTSAMPLE = new SampleResult();
		ROOTSAMPLE.setSampleLabel(SERVER_TITLE);
		ROOTSAMPLE.setSuccessful(true);
		ROOTNODE = new DefaultMutableTreeNode(ROOTSAMPLE);
		TREEMODEL = new DefaultTreeModel(ROOTNODE);
		SERVERTREE = new JTree(TREEMODEL);
		SERVERTREE.getSelectionModel().setSelectionMode(
			TreeSelectionModel.SINGLE_TREE_SELECTION);
		SERVERTREE.addTreeSelectionListener(this);
		SERVERTREE.setShowsRootHandles(true);
		TREEPANE = new JScrollPane(SERVERTREE);
		TREEPANE.setPreferredSize(new Dimension(150,200));
		this.add(TREEPANE,JSplitPane.LEFT);
		this.setDividerLocation(0.18);
	
		JPanel right = new JPanel();
		right.setLayout(new BorderLayout());
		JLabel title = new JLabel(" " + PERF_TITLE);
		title.setPreferredSize(new Dimension(200,40));
		GRAPHPANEL = new JPanel();
		GRAPHPANEL.setLayout(new BorderLayout());
		GRAPHPANEL.setMaximumSize(
			new Dimension(MODEL.getBufferSize(),MODEL.getBufferSize()));
		GRAPHPANEL.setBackground(Color.white);
		GRAPHPANEL.add(GRAPH,BorderLayout.CENTER);
		right.add(GRAPHPANEL,BorderLayout.CENTER);
		
		right.add(title,BorderLayout.NORTH);
		right.add(createLegend(),BorderLayout.SOUTH);
		right.add(createLeftGridLabels(),BorderLayout.WEST);
		right.add(createRightGridLabels(),BorderLayout.EAST);
		this.add(right,JSplitPane.RIGHT);		
	}
	
	/**
	 * Method will create the legends at the bottom of
	 * the performance tab explaining the meaning of
	 * each line.
	 * @return JPanel
	 */
	public JPanel createLegend(){
		Dimension lsize = new Dimension(130,18);
		
		JPanel legend = new JPanel();
		legend.setLayout(new FlowLayout());
		JLabel health = new JLabel(LEGEND_HEALTH);
		health.setFont(plaintext);
		health.setPreferredSize(lsize);
		health.setIcon(LEGEND_HEALTH_ICON);
		legend.add(health);
		
		JLabel load = new JLabel(LEGEND_LOAD);
		load.setFont(plaintext);
		load.setPreferredSize(lsize);
		load.setIcon(LEGEND_LOAD_ICON);
		legend.add(load);
		
		JLabel mem = new JLabel(LEGEND_MEM);
		mem.setFont(plaintext);
		mem.setPreferredSize(lsize);
		mem.setIcon(LEGEND_MEM_ICON);
		legend.add(mem);
		
		JLabel thd = new JLabel(LEGEND_THREAD);
		thd.setFont(plaintext);
		thd.setPreferredSize(lsize);
		thd.setIcon(LEGEND_THREAD_ICON);
		legend.add(thd);
		return legend;
	}

	/**
	 * Method is responsible for creating the left
	 * grid labels.
	 * @return JPanel
	 */	
	public JPanel createLeftGridLabels(){
		Dimension lsize = new Dimension(33,20);
		JPanel labels = new JPanel();
		labels.setLayout(new BorderLayout());
		
		JLabel top = new JLabel(" " + GRID_LABEL_TOP);
		top.setFont(plaintext);
		top.setPreferredSize(lsize);
		labels.add(top,BorderLayout.NORTH);
		
		JLabel mid = new JLabel(" " + GRID_LABEL_MIDDLE);
		mid.setFont(plaintext);
		mid.setPreferredSize(lsize);
		labels.add(mid,BorderLayout.CENTER);
		
		JLabel bottom = new JLabel(" " + GRID_LABEL_BOTTOM);
		bottom.setFont(plaintext);
		bottom.setPreferredSize(lsize);
		labels.add(bottom,BorderLayout.SOUTH);
		return labels;
	}
	
	/**
	 * Method is responsible for creating the grid labels
	 * on the right for "healthy" and "dead"
	 * @return JPanel
	 */
	public JPanel createRightGridLabels(){
		JPanel labels = new JPanel();
		labels.setLayout(new BorderLayout());
		labels.setPreferredSize(new Dimension(40,GRAPHPANEL.getWidth() - 100));
		Dimension lsize = new Dimension(40,20);
		JLabel h = new JLabel(GRID_LABEL_HEALTHY);
		h.setFont(plaintext);
		h.setPreferredSize(lsize);
		labels.add(h,BorderLayout.NORTH);
		
		JLabel d = new JLabel(GRID_LABEL_DEAD);
		d.setFont(plaintext);
		d.setPreferredSize(lsize);
		labels.add(d,BorderLayout.SOUTH);
		return labels;
	}
	
	/**
	 * MonitorAccumModel will call this method to notify
	 * the component data has changed.
	 */
	public void addSample(MonitorModel model){
		if (!SERVERMAP.containsKey(model.getURL())){
			DefaultMutableTreeNode newnode =
				new DefaultMutableTreeNode(model);
			newnode.setAllowsChildren(false);
			SERVERMAP.put(model.getURL(),newnode);
			ROOTNODE.add(newnode);
			this.TREEPANE.updateUI();
		}
		DefaultMutableTreeNode node =
			(DefaultMutableTreeNode) SERVERTREE.getLastSelectedPathComponent();
		Object usrobj = node.getUserObject();
		if (usrobj instanceof MonitorModel){
			GRAPH.updateGui((MonitorModel)usrobj);
		}
	}
	
	/**
	 * When the user selects a different node in the
	 * tree, we get the selected node. From the node,
	 * we get the UserObject used to create the
	 * treenode in the constructor.
	 */
	public void valueChanged(TreeSelectionEvent e)
	{
		// we check to see if the lastSelectedPath is null
		// after we clear, it would return null
		if (SERVERTREE.getLastSelectedPathComponent() != null){
			DefaultMutableTreeNode node =
				(DefaultMutableTreeNode) SERVERTREE.getLastSelectedPathComponent();
			Object usrobj = node.getUserObject();
			if ( usrobj != null && usrobj instanceof MonitorModel){
				MonitorModel mo = (MonitorModel)usrobj;
				GRAPH.updateGui(mo);
				this.updateUI();
			}
			TREEPANE.updateUI();
		}
	}
	
	/**
	 * clear will remove all child nodes from the ROOTNODE,
	 * clear the HashMap, update the graph and jpanel for
	 * the server tree.
	 */
	public void clear(){
		this.SERVERMAP.clear();
		ROOTNODE.removeAllChildren();
		SERVERTREE.updateUI();
		GRAPH.clear();
	}
}
... 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.