kg.apc.jmeter.graphs.GraphPanel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jmeter-plugins-cmn-jmeter Show documentation
Show all versions of jmeter-plugins-cmn-jmeter Show documentation
Various utility classes to ease development of plugins
package kg.apc.jmeter.graphs;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import kg.apc.charting.AbstractGraphRow;
import kg.apc.charting.GraphPanelChart;
import org.apache.jmeter.gui.GuiPackage;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;
public class GraphPanel
extends JTabbedPane
{
private static final Logger log = LoggingManager.getLoggerForClass();
private GraphPanelChart graphPanelObject;
private JRowsSelectorPanel rowsTab;
private JComponent settingsTab;
private ChartRowsTable table;
private JGraphPanel graphTab;
/**
*
*/
public GraphPanel()
{
super();
addGraphTab();
addRowsTab();
addOptionsTab();
addChangeListener(new TabsChangeListener());
}
private void addRowsTab()
{
ImageIcon rowsIcon = createImageIcon("/kg/apc/jmeter/img/checks.png");
rowsTab = new JRowsSelectorPanel(this);
rowsTab.setTable(makeTable(rowsTab));
addTab("Rows", rowsIcon, rowsTab, "Select rows to display");
}
/**
* Method used only for change row selector tab in Composite Chart
* @param tabLabelnew the new tab label
* @param object the new Panel to add in the tab
* @param toolTipText the new tooltip text
*/
public void replaceRowTab(String tabLabel, Component object, String toolTipText) {
int index = indexOfComponent(rowsTab);
remove(index);
ImageIcon rowsIcon = createImageIcon("/kg/apc/jmeter/img/checks.png");
insertTab(tabLabel, rowsIcon, object, toolTipText, index);
}
private void addOptionsTab()
{
ImageIcon icon = createImageIcon("/kg/apc/jmeter/img/settings.png");
settingsTab = new JPanel(new BorderLayout());
addTab("Settings", icon, settingsTab, "Chart plot settings");
}
private Component makeTable(JRowsSelectorPanel rowsTab)
{
table = new ChartRowsTable(rowsTab);
return makeScrollPane(table);
}
private JScrollPane makeScrollPane(Component comp)
{
JScrollPane pane = new JScrollPane(comp);
pane.setPreferredSize(pane.getMinimumSize());
pane.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
return pane;
}
private void addGraphTab()
{
ImageIcon graphIcon = createImageIcon("/kg/apc/jmeter/img/graph.png");
graphPanelObject = new GraphPanelChart(GuiPackage.getInstance() != null);
graphPanelObject.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
graphTab = new JGraphPanel();
graphTab.add(graphPanelObject, BorderLayout.CENTER);
addTab("Chart", graphIcon, graphTab, "View chart");
}
/** Returns an ImageIcon, or null if the path was invalid. */
private static ImageIcon createImageIcon(String path)
{
java.net.URL imgURL = GraphPanel.class.getResource(path);
if (imgURL != null)
return new ImageIcon(imgURL);
else
{
throw new RuntimeException("Couldn't find file: " + path);
//log.error("Couldn't find file: " + path);
//return null;
}
}
/**
*
*/
public void updateGui()
{
graphPanelObject.invalidateCache();
JComponent selectedTab = (JComponent) getSelectedComponent();
selectedTab.updateUI();
selectedTab.repaint();
}
public Image getGraphImage()
{
Image result = graphPanelObject.createImage(graphPanelObject.getWidth(), graphPanelObject.getHeight());
if (result != null)
graphPanelObject.paintComponent(result.getGraphics());
return result;
}
/**
* @return the graphTab
*/
public GraphPanelChart getGraphObject()
{
return graphPanelObject;
}
public JRowsSelectorPanel getRowSelectorPanel() {
return rowsTab;
}
/**
* check if the row bellows to the selected model and add it to the table
* @param row
*/
public void addRow(AbstractGraphRow row)
{
if (getGraphObject().isModelContainsRow(row))
table.addRow(row);
}
/**
*
*/
public void clearRowsTab()
{
table.clear();
}
public JComponent getSettingsTab()
{
return settingsTab;
}
private static class JGraphPanel extends JPanel implements GraphRendererInterface
{
public JGraphPanel()
{
super();
setLayout(new BorderLayout());
}
@Override
public JPanel getGraphDisplayPanel()
{
return this;
}
@Override
public boolean isPreview()
{
return false;
}
}
private class TabsChangeListener
implements ChangeListener
{
@Override
public void stateChanged(ChangeEvent e)
{
updateGui();
JComponent selectedComponent = (JComponent) getSelectedComponent();
//settings panel is added to a top container panel, so we get it
//as selected component
if (selectedComponent == settingsTab)
{
selectedComponent = (JComponent) selectedComponent.getComponent(0);
}
GraphRendererInterface renderer = (GraphRendererInterface) (selectedComponent);
renderer.getGraphDisplayPanel().add(graphPanelObject, BorderLayout.CENTER);
graphPanelObject.setIsPreview(renderer.isPreview());
}
}
}