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