org.ash.gui.ASHrawdata.java Source code

Java tutorial

Introduction

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

Source

/*
 *-------------------
 * The ASHReport.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 com.sleepycat.je.DatabaseException;
import org.ash.database.ASHDatabase;
import org.ash.history.ASHDatabaseH;
import org.ash.util.ProgressBarUtil;
import org.jdesktop.swingx.JXTable;
import org.jfree.ui.NumberCellRenderer;
import org.joda.time.DateTime;
import org.joda.time.Period;

import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class ASHrawdata extends JPanel {

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

    /** The root. */
    private JFrame root;

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

    /** The date format. */
    private DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    /**
     * Constructor.
     *
     * @param rootFrame0
     * @param database0
     */
    public ASHrawdata(JFrame rootFrame0, ASHDatabaseH database0, double begin, double end) {

        super();
        setLayout(new GridLayout(1, 1, 3, 3));

        this.database = database0;
        this.root = rootFrame0;

        this.main = new JPanel();
        this.main.setLayout(new BorderLayout());

        this.add(this.main);

        // Create empty panel
        JPanel ashReport = new JPanel();
        ashReport.setLayout(new GridLayout(1, 1, 3, 3));

        // The button panel
        JToolBar buttonPanel;
        buttonPanel = new JToolBar("PanelButton");
        buttonPanel.setFloatable(false);
        buttonPanel.setBorder(new EtchedBorder());

        // get ASH Report button
        JButton getASHReportButton = new JButton();
        getASHReportButton.setText("Get ASH raw data in table");
        getASHReportButton.setPreferredSize(new Dimension(100, 30));
        getASHReportButton.setActionCommand("ASHrawdata");

        ButtonPlanActionListener buttonListener = new ButtonPlanActionListener(ashReport, getASHReportButton,
                database, begin, end);

        getASHReportButton.addActionListener(buttonListener);

        // Layout of buttons
        buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
        buttonPanel.add(getASHReportButton);
        buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
        buttonPanel.add(new JLabel(
                dateFormat.format(begin) + " <<" + getPeriod(begin, end) + ">> " + dateFormat.format(end)));

        // Add buttonPanel, main
        this.main.add(buttonPanel, BorderLayout.NORTH);
        this.main.add(ashReport, BorderLayout.CENTER);
    }

    private class ButtonPlanActionListener implements ActionListener {
        JPanel panelASHReport;
        JButton getASHReportButton;
        ASHDatabaseH database;
        double begin;
        double end;

        public ButtonPlanActionListener(final JPanel tabsSQLPlan, final JButton getASHReportButton,
                final ASHDatabaseH database, final double begin, final double end) {
            super();
            this.panelASHReport = tabsSQLPlan;
            this.getASHReportButton = getASHReportButton;
            this.database = database;
            this.begin = begin;
            this.end = end;
        }

        public void actionPerformed(final ActionEvent e) {
            /** Get action command */
            final String str = e.getActionCommand();

            if (str.equalsIgnoreCase("ASHrawdata")) {
                getASHReport();
            }
        }

        private void getASHReport() {

            //Disable getASHReportButton
            //getASHReportButton.setEnabled(false);

            // Clear tabbedpane
            JPanel panelLoading = createProgressBar("Loading, please wait...");
            panelASHReport.removeAll();
            panelASHReport.add(panelLoading);

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

                    /*----------------------*/
                    JXTable table;
                    DefaultTableModel model;
                    try {
                        model = database.getASHRawData(begin, end);

                        table = new JXTable(model);

                        table.setColumnControlVisible(true);
                        table.setHorizontalScrollEnabled(true);

                        JPanel p = new JPanel(new BorderLayout());

                        JScrollPane tableRawDataPane = new JScrollPane(
                                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
                        tableRawDataPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);

                        tableRawDataPane.setViewportView(table);
                        tableRawDataPane.setVerticalScrollBar(tableRawDataPane.getVerticalScrollBar());

                        p.add(tableRawDataPane);
                        p.setBorder(BorderFactory.createCompoundBorder(new TitledBorder("Selected Items: "),
                                new EmptyBorder(4, 4, 4, 4)));

                        /*----------------------*/

                        panelASHReport.removeAll();
                        panelASHReport.add(p);

                        root.repaint();

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

                }
            };
            t.start();
        }
    }

    /**
     * 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;
    }

    /**
     * Get period in mm, dd, hh, ss
     * @param begind
     * @param endd
     * @return
     */
    private String getPeriod(double begind, double endd) {
        String out = "";
        Double beginD = begind;
        Double endD = endd;
        DateTime start = new DateTime(beginD.longValue());
        DateTime end = new DateTime(endD.longValue());

        Period period = new Period(start, end);

        if (period.getMonths() > 0)
            out = period.getMonths() + " m. ";
        if (period.getDays() > 0)
            out = out + period.getDays() + " d. ";
        if (period.getHours() > 0)
            out = out + period.getHours() + " h. ";
        if (period.getMinutes() > 0)
            out = out + period.getMinutes() + " min. ";
        if (period.getSeconds() > 0)
            out = out + period.getSeconds() + " sec. ";

        return out;
    }

}