org.ash.gui.MainFrame.java Source code

Java tutorial

Introduction

Here is the source code for org.ash.gui.MainFrame.java

Source

/*
 *-------------------
 * The MainFrame.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.gui;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Point;

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.util.Locale;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;
import javax.swing.border.EtchedBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.ash.conn.gui.ConnectionFrame;
import org.ash.conn.model.Model;
import org.ash.conn.settings.DbConnectionUtil;
import org.ash.database.Database10g1;
import org.ash.database.Database10g11gSE;
import org.ash.database.Database10g2;
import org.ash.database.Database11g1;
import org.ash.database.Database8i;
import org.ash.database.Database9i;
import org.ash.database.ASHDatabase;
import org.ash.detail.DetailPanels;
import org.ash.history.MainPanel;
import org.ash.invoker.Collector;
import org.ash.invoker.Collector10g11gUI;
import org.ash.invoker.Collector9iAndSEDB;
import org.ash.invoker.Collector9iAndSEUI;
import org.ash.util.Options;
import org.jfree.chart.ChartPanel;

import com.sleepycat.je.DatabaseException;

/**
 * The Class MainFrame.
 */
public class MainFrame extends JFrame implements ActionListener {

    /** The db conn util. */
    private static DbConnectionUtil dbConnUtil = null;

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 3257009847668192306L;

    /** The model. */
    private Model model;

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

    /** The split pane main. */
    private JSplitPane splitPaneMain;

    /** The database. */
    private ASHDatabase database;

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

    /** The chart chart panel. */
    private ChartPanel chartChartPanel;

    /** The stacked chart main object. */
    private StackedChart stackedChartMainObject;

    /** The collector. Update UI and load data from DB for 10g, 
     * for 9i - only update UI */
    private Collector collectorUI;

    /** The collerctor. Collect data from DB for 9i database*/
    private Collector collectorDB;

    /** The sqls and sessions. */
    private Gantt sqlsAndSessions;

    /** The latency is 15 sec.*/
    private int latency = 15000;

    /** The JButton - settings button*/
    private JButton jButtonSettings = new JButton();

    /** The JButton - detail button*/
    private JButton jButtonThumbnail = new JButton();

    /** The status bar. */
    private StatusBar statusBar;

    /** The menu file exit. */
    private JMenuItem menuFileExit = new JMenuItem();

    /** The menu help about. */
    private JMenuItem menuHelpAbout = new JMenuItem();

    /** The settings dialog. */
    private Settings settingsDialog;

    /** The detail panel. */
    private DetailPanels detailJPanel;

    /** The tabbed panel. */
    private JTabbedPane tabsMain;

    /** The history panel. */
    private MainPanel historyJPanel;

    /**
     * Instantiates a new main frame.
     */
    public MainFrame() {
        super();
        Options.getInstance().setDateFormat("dd.MM.yyyy hh:mm:ss");
        Options.getInstance().setLanguage(Locale.getDefault().getLanguage());
        Options.getInstance().setJtextAreaSqlTextGanttHAndDetailsH();

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setSize((int) screenSize.getWidth(), (int) screenSize.getHeight() - 24);
        this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        JFrame.setDefaultLookAndFeelDecorated(true);

        this.setExtendedState(this.getExtendedState() | Frame.MAXIMIZED_BOTH);

        // retrieve the HashMap of Default properties.  
        //UIDefaults uiDefs = UIManager.getDefaults();

        // Set indent for SQL plan JTreeTable.  
        //uiDefs.put("Tree.leftChildIndent" , new Integer( 1 ) ); 
        //uiDefs.put("Tree.rightChildIndent" , new Integer( 8 ) );  

        try {
            jbInit();
            menuFileNewConn_actionPerformed(null);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * Jb init.
     * 
     * @throws Exception the exception
     */
    private void jbInit() throws Exception {
        /** set layout */
        this.setLayout(new BorderLayout());
        this.tabsMain = new JTabbedPane();

        this.model = new Model();
        this.splitPaneMain = new JSplitPane();
        this.statusBar = new StatusBar();

        this.jButtonSettings.setMnemonic(Options.getInstance().getResource("settingsMain.mnemonic").charAt(0));
        this.jButtonSettings.setText(Options.getInstance().getResource("settingsMain.text"));
        this.jButtonSettings.setPreferredSize(new Dimension(100, 30));
        this.jButtonSettings.addActionListener(this);

        this.jButtonThumbnail.setMnemonic(Options.getInstance().getResource("ThumbnailMain.mnemonic").charAt(0));
        this.jButtonThumbnail.setText(Options.getInstance().getResource("ThumbnailMain.text"));
        this.jButtonThumbnail.setPreferredSize(new Dimension(100, 30));
        this.jButtonThumbnail.addActionListener(this);

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

        /** Layout of buttons */
        this.buttonPanel.add(Box.createRigidArea(new Dimension(20, 0)));
        this.buttonPanel.add(this.jButtonSettings);
        this.buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
        //this.buttonPanel.add(this.jButtonThumbnail);
        //this.buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
        //this.buttonPanel.add(this.jButtonDetail);
        //this.buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
        //this.buttonPanel.add(this.spinerRangeWindowLabel);
        //this.buttonPanel.add(Box.createRigidArea(new Dimension(5, 0)));
        //this.buttonPanel.add(this.spinerRangeWindow);
        //this.buttonPanel.add(Box.createRigidArea(new Dimension(this.getWidth()-250, 0)));

        this.mainPanel = new JPanel();
        this.mainPanel.setLayout(new BorderLayout());
        this.mainPanel.setVisible(true);

        this.settingsDialog = new Settings(this);
        this.settingsDialog.setLocation(buttonPanel.getX() + 100, buttonPanel.getY() + 50);
        this.settingsDialog.setVisible(false);

    }

    /**
     * Initialize.
     * 
     * @throws DatabaseException the database exception
     */
    public void initialize() throws DatabaseException {

        /** Initialize progressBar*/
        ProgressOnStart progressBarOnStart = new ProgressOnStart();

        /** Initialize connection pool to Oracle database */
        this.initializeConnectionPool();
        progressBarOnStart.setProgressValueAndTaskOutput(5, "Initialize connection pool");

        /** Initialize Berkeley DB, load (append) data to local database*/
        this.initializeBerkeleyDatabaseAndLoading();
        progressBarOnStart.setProgressValueAndTaskOutput(20, "Initialize local DB, load data");

        /** Initialize Detail panel */
        this.detailJPanel = new DetailPanels(this, this.database, this.statusBar);
        this.detailJPanel.setVisible(false);
        progressBarOnStart.setProgressValueAndTaskOutput(35, "Initialize detail tab");

        /** Initialize History panel */
        this.historyJPanel = new MainPanel(this, this.statusBar);
        this.historyJPanel.setVisible(false);
        progressBarOnStart.setProgressValueAndTaskOutput(40, "Initialize history tab");

        /** Initialize main Top Activity chart panel */
        this.stackedChartMainObject = new StackedChart(this.database);
        this.setThresholdMaxCpu();
        this.chartChartPanel = this.stackedChartMainObject.createChartPanel();
        progressBarOnStart.setProgressValueAndTaskOutput(60, "Initialize Top Activity tab");

        /** Initialize Sqls & Sessions JPanel*/
        this.sqlsAndSessions = new Gantt(this, this.database);

        /** Add stacked area chart and gantt area to collector */
        this.collectorUI.addListenerStart(this.stackedChartMainObject);

        /** Set JSplitPane parameters */
        this.splitPaneMain.setOrientation(JSplitPane.VERTICAL_SPLIT);
        this.splitPaneMain.add(this.chartChartPanel, "top");
        this.splitPaneMain.add(this.sqlsAndSessions, "bottom");
        this.splitPaneMain.setDividerLocation(290);
        this.splitPaneMain.setOneTouchExpandable(true);
        progressBarOnStart.setProgressValueAndTaskOutput(80, "Initialize Top SQL and Top Sessions");

        /** Add sqlsAndSessions and statusBar to Top Activity chart panel listener */
        this.chartChartPanel.addListenerReleaseMouse(this.sqlsAndSessions);
        this.chartChartPanel.addListenerReleaseMouse(this.statusBar);

        /** Add JSplitPane to mainPanel */
        this.mainPanel.add(splitPaneMain, BorderLayout.CENTER);
        this.sqlsAndSessions.repaint();

        /** Load data to detail data sets */
        this.detailJPanel.loadDataToDataSet();
        this.collectorUI.addListenerStart(this.detailJPanel);
        progressBarOnStart.setProgressValueAndTaskOutput(90, "Load data to detail data set");

        /** Add Main, Detail, History tabs */
        this.tabsMain.add(this.mainPanel, Options.getInstance().getResource("tabMain.text"));
        this.tabsMain.add(this.detailJPanel, Options.getInstance().getResource("tabDetail.text"));
        this.tabsMain.add(this.historyJPanel, Options.getInstance().getResource("tabHistory.text"));

        /** Create menu bar */
        this.setJMenuBar(createMenuBar());

        /** Add buttonPanel, tabsMain and statusBar to MainFrame */
        this.getContentPane().add(this.buttonPanel, BorderLayout.NORTH);
        this.getContentPane().add(this.tabsMain, BorderLayout.CENTER);
        this.getContentPane().add(this.statusBar, BorderLayout.SOUTH);

        /** Add changeTabsListener to tabsMain */
        this.tabsMain.addChangeListener(new ChangeTabsListener());
        progressBarOnStart.setProgressValueAndTaskOutput(100, "Done");
        progressBarOnStart.done();
        progressBarOnStart.dispose();
        /** Show main panel */
        this.setTitle();
        this.validate();
        this.setVisible(true);

        /** Start collectors */
        this.collectorStart();
    }

    /**
     * Initialize off line mode.
     * 
     * @throws DatabaseException the database exception
     */
    public void initializeOffline() {

        /** Initialize History panel */
        this.historyJPanel = new MainPanel(this, this.statusBar);
        this.historyJPanel.setVisible(false);

        this.tabsMain.add(this.historyJPanel, Options.getInstance().getResource("tabHistory.text"));

        this.setJMenuBar(createMenuBar());
        this.getContentPane().add(this.buttonPanel, BorderLayout.NORTH);
        this.getContentPane().add(this.tabsMain, BorderLayout.CENTER);
        this.getContentPane().add(this.statusBar, BorderLayout.SOUTH);

        this.tabsMain.addChangeListener(new ChangeTabsListener());
        this.statusBar.updateLabelStringHistory();

        this.jButtonSettings.setEnabled(false);
        this.setTitle("ASH Viewer ::: Off-line mode :::");

        this.validate();
        this.setVisible(true);

    }

    /**
     * Initialize berkeley database.
     */
    private void initializeBerkeleyDatabaseAndLoading() {

        String versionOracleDB = model.getVersionDB();

        if (Options.getInstance().getEditionDb().equalsIgnoreCase("EE")) {

            if (versionOracleDB.equalsIgnoreCase("10g2")) {
                this.database = new Database10g2(this.model);
                this.collectorUI = new Collector10g11gUI(this.database, this.latency);
                this.database.loadToLocalBDB();
                this.database.loadToLocalBDBCollector();
            }

            if (versionOracleDB.equalsIgnoreCase("10g1")) {
                this.database = new Database10g1(this.model);
                this.collectorUI = new Collector10g11gUI(this.database, this.latency);
                this.database.loadToLocalBDB();
                this.database.loadToLocalBDBCollector();
            }

            if (versionOracleDB.equalsIgnoreCase("11g")) {
                this.database = new Database11g1(this.model);
                this.collectorUI = new Collector10g11gUI(this.database, this.latency);
                this.database.loadToLocalBDB();
                this.database.loadToLocalBDBCollector();
            }
            /*if (versionOracleDB.equalsIgnoreCase("11g2")) {
               this.database = new Database11g2(this.model);
               this.collectorUI = new Collector10g11gUI(this.database, this.latency);
               this.database.loadToLocalBDB();
               this.database.loadToLocalBDBCollector();
            }*/
        } else { // SE
            this.database = new Database10g11gSE(this.model);
            this.collectorUI = new Collector9iAndSEUI(this.database, this.latency);
            this.collectorDB = new Collector9iAndSEDB(this.database, this.latency);
            this.database.loadToLocalBDB();
            this.collectorDB.start();
        }

        if (versionOracleDB.equalsIgnoreCase("9i")) {
            this.database = new Database9i(this.model);
            this.collectorUI = new Collector9iAndSEUI(this.database, this.latency);
            this.collectorDB = new Collector9iAndSEDB(this.database, this.latency);
            this.database.loadToLocalBDB();
            this.collectorDB.start();
        }

        if (versionOracleDB.equalsIgnoreCase("8i")) {
            this.database = new Database8i(this.model);
            this.collectorUI = new Collector9iAndSEUI(this.database, this.latency);
            this.collectorDB = new Collector9iAndSEDB(this.database, this.latency);
            this.database.loadToLocalBDB();
            this.collectorDB.start();
        }

        // Save ref. to DatabaseMain
        Options.getInstance().setDatabaseMain(this.database);

    }

    /**
     * Start UI collector
     */
    private void collectorStart() {
        this.collectorUI.start();
    }

    /**
     * Gets the db conn util.
     * 
     * @return the db conn util
     */
    public static DbConnectionUtil getDbConnUtil() {
        return dbConnUtil;
    }

    /**
     * Sets the db conn util.
     * 
     * @param dbConnUtil the new db conn util
     */
    public static void setDbConnUtil(DbConnectionUtil dbConnUtil) {
        MainFrame.dbConnUtil = dbConnUtil;
    }

    /* (non-Javadoc)
     * @see javax.swing.JFrame#processWindowEvent(java.awt.event.WindowEvent)
     */
    @Override
    protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            menuFileExit_actionPerformed(null);
        }
    }

    /**
     * Sets the threshold max cpu.
     */
    private void setThresholdMaxCpu() {
        Double valueSampleTime = 0.0;
        double maxCpu = Double.parseDouble(this.database.getParameter("cpu_count"));
        this.stackedChartMainObject.setThresholdMaxCpu(maxCpu);
        this.detailJPanel.setThresholdMaxCpu(maxCpu);
    }

    /**
     * Sets the title.
     */
    private void setTitle() {

        /** set title of current frame*/
        this.setTitle("ASH Viewer ::: " + dbConnUtil.getDbConnection().getName() + "|"
                + dbConnUtil.getDbConnection().getHost() + "|" + dbConnUtil.getDbConnection().getPort() + "|"
                + dbConnUtil.getDbConnection().getSID() + "|" + dbConnUtil.getDbConnection().getUsername());

        /** load parameters to local BDB */
        this.database.saveParameterToLocalBDB("ASH.name", dbConnUtil.getDbConnection().getName());
        this.database.saveParameterToLocalBDB("ASH.host", dbConnUtil.getDbConnection().getHost());
        this.database.saveParameterToLocalBDB("ASH.port", dbConnUtil.getDbConnection().getPort());
        this.database.saveParameterToLocalBDB("ASH.sid", dbConnUtil.getDbConnection().getSID());
        this.database.saveParameterToLocalBDB("ASH.username", dbConnUtil.getDbConnection().getUsername());
        this.database.saveParameterToLocalBDB("ASH.version", Options.getInstance().getVersionDb());
    }

    /**
     * Initialize connection pool.
     */
    private void initializeConnectionPool() {

        /** init connection parameter */
        String connParam = "jdbc:oracle:thin:@//" + dbConnUtil.getDbConnection().getHost() + ":"
                + dbConnUtil.getDbConnection().getPort() + "/" + dbConnUtil.getDbConnection().getSID();

        /** init connection pool */
        model.connectionPoolInit("oracle.jdbc.pool.OracleDataSource", connParam,
                dbConnUtil.getDbConnection().getUsername(), dbConnUtil.getDbConnection().getPassword());

        /** check errors */
        if (model.getErrorMessage() != null) {
            JOptionPane.showMessageDialog(this, model.getErrorMessage(), "Sql error", JOptionPane.ERROR_MESSAGE);
            model.setErrorMessageNull();
            model = null;
            System.exit(0);
        }

        Options.getInstance().setNameOfConnection(dbConnUtil.getDbConnection().getName());
        Options.getInstance().setVersionDb(model.getVersionDB());
        Options.getInstance().setEditionDb(dbConnUtil.getDbConnection().getEdition());

    }

    /**
     * Dispose alll.
     */
    private void disposeAlll() {
        this.model.closeConnections();
        this.model.closeConnectionPool();
        this.model = null;
        this.buttonPanel = null;
        this.splitPaneMain = null;
    }

    /* (non-Javadoc)
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent e) {
        /** Get action command */
        String str = e.getActionCommand();

        /** Show settings window */
        if (str.equals(Options.getInstance().getResource("settingsMain.text"))) {
            settingsDialog.setModal(true);
            settingsDialog.setVisible(true);
        }
        /** Show thumbnail detail panel*/
        if (str.equals(Options.getInstance().getResource("ThumbnailMain.text"))) {
            Thumbnail thumbnail = new Thumbnail(this, detailJPanel.getThumbnailDetailPanel());
            thumbnail.setModal(true);
            thumbnail.setVisible(true);
        }

    }

    /**
     * Set upper bound of range axis
     * 
     * @param value
     */
    public void setUpperBoundOfRangeAxisTopA(double value) {
        stackedChartMainObject.setUpperBoundOfRangeAxis(value);
    }

    /**
     * Set upper bound of range axis
     * 
     * @param value
     */
    public void setUpperBoundOfRangeAxisDetail(double value) {
        detailJPanel.setUpperBoundOfRangeAxis(value);
    }

    /**
     * Set count for top sql
     * 
     * @param value
     */
    public void setTopSqlsSqlTextTopA(int value) {
        sqlsAndSessions.setTopSqlsSqlText(value);
    }

    /**
     * Select sql plan data from TA
     * 
     * @param isSelectSqlPlan
     */
    public void setSelectSqlPlanTA(boolean isSelectSqlPlan) {
        sqlsAndSessions.setSelectSqlPlan(isSelectSqlPlan);
    }

    /**
     * Set count for top sql
     * 
     * @param value
     */
    public void setTopSqlsSqlTextDetail(int value) {
        this.detailJPanel.setTopSqlsSqlText(value);
    }

    /**
     * Select sql plan data from Detail
     * 
     * @param isSelectSqlPlan
     */
    public void setSelectSqlPlanDetail(boolean isSelectSqlPlan) {
        this.detailJPanel.setSelectSqlPlan(isSelectSqlPlan);
    }

    /**
     * Set range window for collerctorUI
     * 
     * @param value
     */
    public void setcollectorUIRangeWindow(int value) {
        collectorUI.setRangeWindow(value);
        new switchToRangeWinModeAuto().start();
    }

    /**
     * Switch to auto mode (top activity)
     * 
     */
    public void switchToAuto() {
        new switchToAuto().start();
    }

    /**
     * Switch to minimalistic main chart panel
     *
     */
    public void setMinimalistic() {
        new MinimalisticThread().start();
    }

    /**
     * Switch to manual mode (top activity)
     * 
     */
    public void switchToManual() {
        new switchToManual().start();
    }

    /**
     * Change tab listener
     * 
     */
    private final class ChangeTabsListener implements ChangeListener {
        public void stateChanged(ChangeEvent changeEvent) {
            JTabbedPane sourceTabbedPane = (JTabbedPane) changeEvent.getSource();
            int index = sourceTabbedPane.getSelectedIndex();
            if (sourceTabbedPane.getTitleAt(index)
                    .equalsIgnoreCase(Options.getInstance().getResource("tabMain.text"))) {
                statusBar.updateLabelStringTopActivity();
            } else if (sourceTabbedPane.getTitleAt(index)
                    .equalsIgnoreCase(Options.getInstance().getResource("tabDetail.text"))) {
                statusBar.updateLabelStringDetail(detailJPanel.getCurrentTabName());
            } else if (sourceTabbedPane.getTitleAt(index)
                    .equalsIgnoreCase(Options.getInstance().getResource("tabHistory.text"))) {
                statusBar.updateLabelStringHistory();
            }
        }
    }

    class MinimalisticThread extends Thread {

        public void run() {
            stackedChartMainObject.setMinimalistic(Options.getInstance().isMinimalistic());
        }
    }

    /**
     * Switch UI to Auto mode selection
     * 
     */
    class switchToAuto extends Thread {

        @Override
        public void run() {

            double endTime = database.getSysdate();
            double beginTime = endTime - collectorUI.getRangeWindow();

            stackedChartMainObject.setSelectionChart(false);
            stackedChartMainObject.setFlagThresholdBeginTimeAutoSelection(true);

            stackedChartMainObject.setThresholdBeginTimeAutoSelection(beginTime,
                    collectorUI.getRangeWindow() / collectorUI.getK());
            sqlsAndSessions.loadDataToJPanels(beginTime, endTime);
            statusBar.setRange(beginTime, endTime);

            if (!collectorUI.isListenerExist(sqlsAndSessions)) {
                collectorUI.addListenerStart(sqlsAndSessions);
            }
            if (!collectorUI.isListenerExist(statusBar)) {
                collectorUI.addListenerStart(statusBar);
            }

            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    statusBar.setSelection("Auto");
                    statusBar.setRangeWindow("(" + settingsDialog.getSpinerRangeWindowValue() + ")");
                    settingsDialog.setSpinerRangeWindowEnabled(true);
                }
            });
        }
    }

    /**
     * Switch UI to Manual mode selection
     *
     */
    class switchToManual extends Thread {

        @Override
        public void run() {

            stackedChartMainObject.setSelectionChart(true);
            stackedChartMainObject.removeThresholdBeginTimeAutoSelection();
            stackedChartMainObject.setFlagThresholdBeginTimeAutoSelection(false);

            if (collectorUI.isListenerExist(sqlsAndSessions)) {
                collectorUI.removeListenerStart(sqlsAndSessions);
            }
            if (collectorUI.isListenerExist(statusBar)) {
                collectorUI.removeListenerStart(statusBar);
            }

            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    statusBar.setSelection("Manual");
                    statusBar.setRangeWindow("");
                    settingsDialog.setSpinerRangeWindowEnabled(false);
                }
            });
        }
    }

    /**
     *    Load data to egantt charts when change range window
     *
     */
    class switchToRangeWinModeAuto extends Thread {

        @Override
        public void run() {

            double endTime = database.getSysdate();
            double beginTime = endTime - collectorUI.getRangeWindow();

            stackedChartMainObject.setSelectionChart(false);
            stackedChartMainObject.setFlagThresholdBeginTimeAutoSelection(true);

            stackedChartMainObject.setThresholdBeginTimeAutoSelection(beginTime,
                    collectorUI.getRangeWindow() / collectorUI.getK());
            sqlsAndSessions.loadDataToJPanels(beginTime, endTime);
            statusBar.setRange(beginTime, endTime);

            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    statusBar.setRangeWindow("(" + settingsDialog.getSpinerRangeWindowValue() + ")");
                    settingsDialog.setSpinerRangeWindowEnabled(true);
                }
            });
        }
    }

    /**
     * Creates the menu bar.
     * 
     * @return the j menu bar
     */
    private JMenuBar createMenuBar() {
        JMenu menuFile = new JMenu();

        menuFile.setMnemonic(Options.getInstance().getResource("file.mnemonic").charAt(0));
        menuFile.setText(Options.getInstance().getResource("file.text"));
        menuFileExit.setMnemonic(Options.getInstance().getResource("exit.mnemonic").charAt(0));
        menuFileExit.setText(Options.getInstance().getResource("exit.text"));
        menuFileExit.addActionListener(new MainFrame_menuFileExit_ActionAdapter(this));

        menuFile.add(menuFileExit);

        JMenu menuHelp = new JMenu();
        menuHelp.setMnemonic(Options.getInstance().getResource("help.mnemonic").charAt(0));
        menuHelp.setText(Options.getInstance().getResource("help.text"));
        menuHelpAbout.setMnemonic(Options.getInstance().getResource("about.mnemonic").charAt(0));
        menuHelpAbout.setText(Options.getInstance().getResource("about.text"));
        menuHelpAbout.addActionListener(new MainFrame_menuHelpAbout_ActionAdapter(this));

        menuHelp.add(menuHelpAbout);

        JMenuBar bar = new JMenuBar();

        bar.add(menuFile);
        bar.add(menuHelp);

        return bar;
    }

    /**
     * Menu file new conn_action performed.
     * 
     * @param e the e
     */
    private void menuFileNewConn_actionPerformed(ActionEvent e) {
        final ConnectionFrame f = new ConnectionFrame(this);
        Dimension mdiSize = this.getSize();
        Dimension frameSize = f.getSize();
        if (frameSize.height > mdiSize.height) {
            frameSize.height = mdiSize.height;
        }
        if (frameSize.width > mdiSize.width) {
            frameSize.width = mdiSize.width;
        }
        f.setLocation((mdiSize.width - frameSize.width) / 2, (mdiSize.height - frameSize.height) / 2);
        f.setVisible(true);

        new Thread() {
            @Override
            public void run() {
                try {
                    sleep(100);
                } catch (InterruptedException ex1) {
                }
                f.toFront();
                f.setVisible(true);
                f.requestFocus();
            }
        }.start();
    }

    /**
     * Menu file exit_action performed.
     * 
     * @param e the e
     */
    public void menuFileExit_actionPerformed(ActionEvent e) {
        if (JOptionPane.showConfirmDialog(this, Options.getInstance().getResource("quit application?"),
                Options.getInstance().getResource("attention"), JOptionPane.YES_NO_OPTION,
                JOptionPane.QUESTION_MESSAGE) == 0) {
            if (this.collectorUI != null)
                this.collectorUI.stop();
            if (this.database != null)
                this.database.close();
            System.exit(0);
        }
    }

    /**
       * Menu help about_action performed.
       * 
       * @param e the e
       */
    public void menuHelpAbout_actionPerformed(ActionEvent e) {
        AboutBox dlg = new AboutBox(this);
        Dimension dlgSize = dlg.getPreferredSize();
        Dimension frmSize = getSize();
        Point loc = getLocation();
        dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);
        dlg.setModal(true);
        dlg.show();
    }

    /**
     * The Class MainFrame_menuFileExit_ActionAdapter.
     */
    class MainFrame_menuFileExit_ActionAdapter implements ActionListener {

        /** The adaptee. */
        MainFrame adaptee;

        /**
         * Instantiates a new main frame_menu file exit_ action adapter.
         * 
         * @param adaptee the adaptee
         */
        MainFrame_menuFileExit_ActionAdapter(MainFrame adaptee) {
            this.adaptee = adaptee;
        }

        /* (non-Javadoc)
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
         */
        public void actionPerformed(ActionEvent e) {
            adaptee.menuFileExit_actionPerformed(e);
        }
    }

    /**
     * The Class MainFrame_menuHelpAbout_ActionAdapter.
     */
    class MainFrame_menuHelpAbout_ActionAdapter implements ActionListener {

        /** The adaptee. */
        MainFrame adaptee;

        /**
         * Instantiates a new main frame_menu help about_ action adapter.
         * 
         * @param adaptee the adaptee
         */
        MainFrame_menuHelpAbout_ActionAdapter(MainFrame adaptee) {
            this.adaptee = adaptee;
        }

        /* (non-Javadoc)
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
         */
        public void actionPerformed(ActionEvent e) {
            adaptee.menuHelpAbout_actionPerformed(e);
        }
    }
}