org.ash.history.detail.DetailsPanelH.java Source code

Java tutorial

Introduction

Here is the source code for org.ash.history.detail.DetailsPanelH.java

Source

/*
 *-------------------
 * The DetailsPanelH.java is part of ASH Viewer
 *-------------------
 * 
 * ASH Viewer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * ASH Viewer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with ASH Viewer.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Copyright (c) 2009, Alex Kardapolov, All rights reserved.
 *
 */
package org.ash.history.detail;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JRadioButton;
import javax.swing.JSplitPane;
import javax.swing.JToolBar;
import javax.swing.border.EtchedBorder;

import org.ash.history.detail.GanttDetailsH;
import org.ash.history.detail.StackedChartDetail;
import org.ash.history.ASHDatabaseH;
import org.ash.util.Options;
import org.ash.util.ProgressBarUtil;
import org.jfree.chart.ChartPanel;

public class DetailsPanelH extends JPanel implements ActionListener {

    /** The database. */
    private ASHDatabaseH database;

    /** The main panel. */
    private JPanel mainPanel;

    /** The button panel. */
    private JToolBar buttonPanel;

    /** The radio button for cpu */
    private JRadioButton cpuRadioButton = new JRadioButton();

    /** The radio button for scheduler */
    private JRadioButton schedulerRadioButton = new JRadioButton();

    /** The radio button for User I/O */
    private JRadioButton userIORadioButton = new JRadioButton();

    /** The radio button for System I/O */
    private JRadioButton systemIORadioButton = new JRadioButton();

    /** The radio button for Concurrency */
    private JRadioButton concurrencyRadioButton = new JRadioButton();

    /** The radio button for Application */
    private JRadioButton applicationRadioButton = new JRadioButton();

    /** The radio button for Commit */
    private JRadioButton commitRadioButton = new JRadioButton();

    /** The radio button for Configuration */
    private JRadioButton configurationRadioButton = new JRadioButton();

    /** The radio button for Administrative */
    private JRadioButton administrativeRadioButton = new JRadioButton();

    /** The radio button for Network */
    private JRadioButton networkRadioButton = new JRadioButton();

    /** The radio button for Queuning */
    private JRadioButton queuningRadioButton = new JRadioButton();

    /** The radio button for Cluster */
    private JRadioButton clusterRadioButton = new JRadioButton();

    /** The radio button for Other */
    private JRadioButton otherRadioButton = new JRadioButton();

    /** Button group for details radio buttons */
    private ButtonGroup buttonGroup = new ButtonGroup();

    /** The max cpu. */
    private double maxCpu;

    /** The begin time. */
    private double beginTime = 0.0;

    /** The end time. */
    private double endTime = 0.0;

    /**
     *  Constructor DetailFrame
     *  
     * @param database
     * @param beginTime
     * @param endTime
     * @param maxCpu
     */
    public DetailsPanelH(ASHDatabaseH database, double beginTime, double endTime, double maxCpu) {
        this.database = database;
        this.beginTime = beginTime;
        this.endTime = endTime;
        this.maxCpu = maxCpu;
        this.initialize();
    }

    /**
     * Initialize DetailFrame
     */
    private void initialize() {

        this.setLayout(new BorderLayout());
        JSplitPane splitPaneMainDetail = new JSplitPane();

        this.cpuRadioButton.setText(Options.getInstance().getResource("cpuLabel.text"));
        this.cpuRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.cpuRadioButton);
        this.schedulerRadioButton.setText(Options.getInstance().getResource("schedulerLabel.text"));
        this.schedulerRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.schedulerRadioButton);
        this.userIORadioButton.setText(Options.getInstance().getResource("userIOLabel.text"));
        this.userIORadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.userIORadioButton);
        this.systemIORadioButton.setText(Options.getInstance().getResource("systemIOLabel.text"));
        this.systemIORadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.systemIORadioButton);
        this.concurrencyRadioButton.setText(Options.getInstance().getResource("concurrencyLabel.text"));
        this.concurrencyRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.concurrencyRadioButton);
        this.applicationRadioButton.setText(Options.getInstance().getResource("applicationsLabel.text"));
        this.applicationRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.applicationRadioButton);
        this.commitRadioButton.setText(Options.getInstance().getResource("commitLabel.text"));
        this.commitRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.commitRadioButton);
        this.configurationRadioButton.setText(Options.getInstance().getResource("configurationLabel.text"));
        this.configurationRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.configurationRadioButton);
        this.administrativeRadioButton.setText(Options.getInstance().getResource("administrativeLabel.text"));
        this.administrativeRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.administrativeRadioButton);
        this.networkRadioButton.setText(Options.getInstance().getResource("networkLabel.text"));
        this.networkRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.networkRadioButton);
        this.queuningRadioButton.setText(Options.getInstance().getResource("queueningLabel.text"));
        this.queuningRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.queuningRadioButton);
        this.clusterRadioButton.setText(Options.getInstance().getResource("clusterLabel.text"));
        this.clusterRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.clusterRadioButton);
        this.otherRadioButton.setText(Options.getInstance().getResource("otherLabel.text"));
        this.otherRadioButton.addItemListener(new SelectItemListenerRadioButton());
        this.setFont(this.otherRadioButton);

        this.buttonGroup.add(cpuRadioButton);
        this.buttonGroup.add(schedulerRadioButton);
        this.buttonGroup.add(userIORadioButton);
        this.buttonGroup.add(systemIORadioButton);
        this.buttonGroup.add(concurrencyRadioButton);
        this.buttonGroup.add(applicationRadioButton);
        this.buttonGroup.add(commitRadioButton);
        this.buttonGroup.add(configurationRadioButton);
        this.buttonGroup.add(administrativeRadioButton);
        this.buttonGroup.add(networkRadioButton);
        this.buttonGroup.add(queuningRadioButton);
        this.buttonGroup.add(clusterRadioButton);
        this.buttonGroup.add(otherRadioButton);

        /** Button panel fot buttons */
        this.buttonPanel = new JToolBar("PanelButton");
        this.buttonPanel.setFloatable(false);
        this.buttonPanel.setBorder(new EtchedBorder());

        this.buttonPanel.add(this.cpuRadioButton);
        this.buttonPanel.add(this.schedulerRadioButton);
        this.buttonPanel.add(this.userIORadioButton);
        this.buttonPanel.add(this.systemIORadioButton);
        this.buttonPanel.add(this.concurrencyRadioButton);
        this.buttonPanel.add(this.applicationRadioButton);
        this.buttonPanel.add(this.commitRadioButton);
        this.buttonPanel.add(this.configurationRadioButton);
        this.buttonPanel.add(this.administrativeRadioButton);
        this.buttonPanel.add(this.networkRadioButton);
        this.buttonPanel.add(this.queuningRadioButton);
        this.buttonPanel.add(this.clusterRadioButton);
        this.buttonPanel.add(this.otherRadioButton);

        splitPaneMainDetail.setOrientation(JSplitPane.VERTICAL_SPLIT);
        splitPaneMainDetail.add(new JPanel(), "top");
        splitPaneMainDetail.add(new JPanel(), "bottom");
        splitPaneMainDetail.setDividerLocation(230);
        splitPaneMainDetail.setOneTouchExpandable(true);

        this.mainPanel = new JPanel();
        this.mainPanel.setLayout(new BorderLayout());
        this.mainPanel.setVisible(true);
        this.mainPanel.add(splitPaneMainDetail, BorderLayout.CENTER);

        this.add(this.buttonPanel, BorderLayout.NORTH);
        this.add(this.mainPanel, BorderLayout.CENTER);
    }

    /**
     * Set Font for JRadioButton. 
     * 
     * @param radioButton
     */
    private void setFont(JRadioButton radioButton) {
        radioButton.setFont(new Font("SansSerif", Font.PLAIN, 9));
    }

    /**
     * Set the threshold max cpu.
     * @param maxCpu
     */
    public void setThresholdMaxCpu(Double maxCpu) {
        this.maxCpu = maxCpu;
    }

    /**
     * Item listener for cpu used and events radio buttons
     *
     */
    class SelectItemListenerRadioButton implements ItemListener {
        public void itemStateChanged(ItemEvent e) {
            //get object
            AbstractButton sel = (AbstractButton) e.getItemSelectable();
            //checkbox select or not
            if (e.getStateChange() == ItemEvent.SELECTED) {
                if (sel.getText().equals(Options.getInstance().getResource("cpuLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("cpuLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("schedulerLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("schedulerLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("userIOLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("userIOLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("systemIOLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("systemIOLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("concurrencyLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("concurrencyLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("applicationsLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("applicationsLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("commitLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("commitLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("configurationLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("configurationLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("administrativeLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("administrativeLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("networkLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("networkLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("queueningLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("queueningLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("clusterLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("clusterLabel.text"));
                } else if (sel.getText().equals(Options.getInstance().getResource("otherLabel.text"))) {
                    addChartPanel(Options.getInstance().getResource("otherLabel.text"));
                }
            }
        }
    }

    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }

    /**
     * Add ChartPanel to mainPanel
     * @param waitClass
     */
    private void addChartPanel(final String waitClass) {

        this.mainPanel.removeAll();
        JPanel panel = createProgressBar("Loading, please wait...");
        this.mainPanel.add(panel);
        this.validate();

        Thread t = new Thread() {
            @Override
            public void run() {
                // delay
                try {
                    Thread.sleep(50L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                addChartPanelT(waitClass);

            }
        };
        t.start();

    }

    /**
     * Add ChartPanel to mainPanel
     * @param waitClass
     */
    private void addChartPanelT(String waitClass) {

        JSplitPane splitPaneMainDetail = new JSplitPane();

        StackedChartDetail stackedChartMainObjectDetail = new StackedChartDetail(database, waitClass);

        ChartPanel chartDetailPanel = stackedChartMainObjectDetail.createChartPanel();
        stackedChartMainObjectDetail.setThresholdMaxCpu(this.maxCpu);

        GanttDetailsH sqlsAndSessions = new GanttDetailsH(database, waitClass);
        chartDetailPanel.addListenerReleaseMouse(sqlsAndSessions);

        database.clearStackedXYAreaChartDetail();
        database.saveStackedXYAreaChartDetail(stackedChartMainObjectDetail, waitClass);
        database.initialLoadingDataToChartPanelDataSetDetail(waitClass, this.beginTime, this.endTime);

        stackedChartMainObjectDetail.setTitle();

        this.mainPanel.removeAll();

        splitPaneMainDetail.setOrientation(JSplitPane.VERTICAL_SPLIT);
        splitPaneMainDetail.add(chartDetailPanel, "top");
        splitPaneMainDetail.add(sqlsAndSessions, "bottom");
        splitPaneMainDetail.setDividerLocation(215);
        splitPaneMainDetail.setOneTouchExpandable(true);

        this.mainPanel.add(splitPaneMainDetail, BorderLayout.CENTER);
        this.validate();
        this.repaint();
    }

    /**
     * Creates the progress bar.
     * 
     * @param msg the msg
     * 
     * @return the j panel
     */
    private JPanel createProgressBar(String msg) {
        JProgressBar progress = ProgressBarUtil.createJProgressBar(msg);
        progress.setPreferredSize(new Dimension(250, 30));
        JPanel panel = new JPanel();
        panel.add(progress);
        return panel;
    }

}