package com.ibm.nmon.gui.report;
import com.ibm.nmon.gui.main.ChartSplitPane;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.ibm.nmon.data.DataSet;
import com.ibm.nmon.gui.Styles;
import com.ibm.nmon.gui.chart.BaseChartPanel;
import com.ibm.nmon.gui.main.NMONVisualizerGui;
/**
* Display a custom report.
*
* @see ReportFrame
*/
final class ReportSplitPane extends ChartSplitPane {
private static final long serialVersionUID = -8401367823499645439L;
private final JFrame parent;
private final JPanel blank;
private ReportPanel reportPanel;
private ReportPanel.MultiplexMode multiplexMode;
ReportSplitPane(NMONVisualizerGui gui, JFrame parent) {
super(gui, parent);
this.parent = parent;
this.multiplexMode = ReportPanel.MultiplexMode.NONE;
blank = new JPanel();
blank.setBackground(java.awt.Color.WHITE);
blank.setBorder(Styles.createTopLineBorder(blank));
setTopComponent(blank);
}
boolean hasReport() {
return getTopComponent() != blank;
}
void loadReport(File reportFile) throws IOException {
try {
gui.getReportCache().addReport("custom", reportFile.getAbsolutePath());
}
catch (IOException ioe) {
throw ioe;
}
createReportPanel("custom");
}
void loadDefaultDataSetReport() {
createReportPanel(com.ibm.nmon.report.ReportCache.DEFAULT_DATASET_CHARTS_KEY);
}
void loadDefaultSummaryReport() {
createReportPanel(com.ibm.nmon.report.ReportCache.DEFAULT_SUMMARY_CHARTS_KEY);
}
void loadDefaultIOStatReport() {
createReportPanel(com.ibm.nmon.report.ReportCache.DEFAULT_IOSTAT_CHARTS_KEY);
}
void loadDefaultIOStatDiskDataReport() {
createReportPanel(com.ibm.nmon.report.ReportCache.DEFAULT_IOSTAT_DISKDATA_CHARTS_KEY);
}
private void createReportPanel(String cacheKey) {
setTopComponent(null);
dispose();
int location = getDividerLocation();
// start with an empty list; ReportFrame will handle adding the data
reportPanel = new ReportPanel(gui, parent, cacheKey, new java.util.ArrayList<DataSet>(), multiplexMode);
setTopComponent(reportPanel);
reportPanel.addPropertyChangeListener("chart", summaryTable);
reportPanel.addPropertyChangeListener("highlightedLine", this);
reportPanel.addPropertyChangeListener("highlightedBar", this);
// ensure ChartSplitPane forwards these events
reportPanel.addPropertyChangeListener("chart", this);
reportPanel.addPropertyChangeListener("annotation", this);
reportPanel.setEnabled(true);
setDividerLocation(location);
}
void setData(Iterable<? extends DataSet> dataSets) {
if (reportPanel != null) {
reportPanel.setData(dataSets);
}
}
void setMultiplexMode(ReportPanel.MultiplexMode multiplexMode) {
if (reportPanel != null) {
reportPanel.setMultiplexMode(multiplexMode);
}
}
// data selection is handled by ReportFrame's JList of systems
@Override
public void dataAdded(DataSet data) {}
@Override
public void dataRemoved(DataSet data) {}
@Override
public void dataChanged(DataSet data) {}
@Override
public void dataCleared() {}
void dispose() {
if (reportPanel != null) {
reportPanel.dispose();
reportPanel = null;
}
}
@Override
protected BaseChartPanel getChartPanel() {
return reportPanel == null ? null : reportPanel.getChartPanel();
}
@Override
protected void saveCharts(String directory) {
if (reportPanel != null) {
reportPanel.saveAllCharts(directory);
}
}
@Override
protected String[] getDefaultColumns() {
return new String[] { "Hostname", "Data Type", "Metric", "Series Name", "Minimum", "Average", "Maximum",
"Std Dev" };
}
}