All Downloads are FREE. Search and download functionalities are using the official Maven repository.

admin.astor.statistics.StarterStatTable Maven / Gradle / Ivy

//+======================================================================
// $Source:  $
//
// Project:   Tango
//
// Description:  java source code for Tango manager tool..
//
// $Author: pascal_verdier $
//
// Copyright (C) :      2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,
//						European Synchrotron Radiation Facility
//                      BP 220, Grenoble 38043
//                      FRANCE
//
// This file is part of Tango.
//
// Tango 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.
// 
// Tango 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 Tango.  If not, see .
//
// $Revision: 16801 $
//
//-======================================================================


package admin.astor.statistics;

import fr.esrf.Tango.DevFailed;
import fr.esrf.tangoatk.widget.util.ATKGraphicsUtils;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.util.Collections;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.ArrayList;


//===============================================================
/**
 * Class Description:
 * Dialog Class to display data in a JTable inside a JDialog.
 */
//===============================================================


public class StarterStatTable extends JDialog {

    private DataTableModel model;
    private JTable jtable;
    private String[][] data;

    private JFrame parent;
    private JLabel titleLabel;
    private StarterStat starterStat;

    //===============================================================
    /**
     * Creates new form StarterStatTable
     *
     * @param    parent    parent component.
     * @param    title    Widow title.
     * @param    starterStat        specified starter statistics
     */
    //===============================================================
    public StarterStatTable(JFrame parent, String title, StarterStat starterStat) {
        super(parent, false);
        this.parent = parent;
        this.starterStat = starterStat;
        data = starterStat.toTable();
        initComponents();
        initMyComponents(title);
    }
    //===============================================================
    /**
     * Creates new form StarterStatTable
     *
     * @throws fr.esrf.Tango.DevFailed in case of problem to display in table.
     * @param    parent    parent component.
     * @param    hostname the specified host name.
     */
    //===============================================================
    public StarterStatTable(JFrame parent, String hostname) throws DevFailed {
        super(parent, false);
        this.parent = parent;
        this.starterStat = new StarterStat(hostname);
        data = starterStat.toTable();
        initComponents();
        initMyComponents(hostname);
    }

    //===============================================================
    //===============================================================
    private void initComponents() {
        JPanel jPanel1 = new javax.swing.JPanel();
        JButton cancelBtn = new javax.swing.JButton();
        JPanel jPanel2 = new javax.swing.JPanel();
        titleLabel = new javax.swing.JLabel();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                closeDialog(evt);
            }
        });

        cancelBtn.setText("Dismiss");
        cancelBtn.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelBtnActionPerformed(evt);
            }
        });
        jPanel1.add(cancelBtn);

        getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH);
        titleLabel.setFont(new java.awt.Font("Dialog", 1, 18));
        titleLabel.setText("Dialog Title");
        jPanel2.add(titleLabel);

        getContentPane().add(jPanel2, java.awt.BorderLayout.NORTH);
        pack();
    }

    //===============================================================
    //===============================================================
    private void initMyComponents(String title) {
        model = new DataTableModel();

        // Create the table
        jtable = new JTable(model);
        jtable.setRowSelectionAllowed(true);
        jtable.setColumnSelectionAllowed(true);
        jtable.setDragEnabled(true);
        jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jtable.getTableHeader().setFont(new java.awt.Font("Dialog", 1, 14));
        jtable.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                headerTableActionPerformed(evt);
            }
        });
        jtable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tableActionPerformed(evt);
            }
        });

        //	Put it in a scrolled pane
        JScrollPane scrollPane = new JScrollPane(jtable);

        int height = 18 + 18 * data.length;
        if (height > 400) height = 400;

        final int[] width = {180, 180, 70, 130};
        final Enumeration enumeration = jtable.getColumnModel().getColumns();
        TableColumn tc;
        int sp_width = 0;
        for (int i = 0; enumeration.hasMoreElements(); i++) {
            tc = (TableColumn) enumeration.nextElement();
            tc.setPreferredWidth(width[i]);
            sp_width += width[i];
        }
        scrollPane.setPreferredSize(new Dimension(sp_width, height));

        getContentPane().add(scrollPane, BorderLayout.CENTER);
        model.fireTableDataChanged();

        titleLabel.setText(title);
        ATKGraphicsUtils.centerDialog(this);
        pack();
    }

    //===============================================================
    //===============================================================
    private void headerTableActionPerformed(java.awt.event.MouseEvent evt) {

        int column = jtable.getTableHeader().columnAtPoint(
                new Point(evt.getX(), evt.getY()));
        new UsedData().sort(column);
        model.fireTableDataChanged();
    }

    //===============================================================
    //===============================================================
    private void tableActionPerformed(java.awt.event.MouseEvent evt) {
        int column = jtable.columnAtPoint(new Point(evt.getX(), evt.getY()));
        int row = jtable.rowAtPoint(new Point(evt.getX(), evt.getY()));
        //	get selected cell
        //ServerStat  server = filteredServerStatistics.get(row);
        if (evt.getButton() == MouseEvent.BUTTON1) {
            if (evt.getClickCount() == 2) {
                if (column == 0) {    //  Server name

                    String serverName = data[row][0];
                    for (ServerStat serverStat : starterStat) {
                        if (serverStat.name.equals(serverName)) {
                            if (parent != null)
                                new ServerStatisticsPanel(parent, serverName, serverStat).setVisible(true);
                            else
                                new ServerStatisticsPanel(this, serverName, serverStat).setVisible(true);
                            return;
                        }
                    }
                }
            }
        }
    }

    //===============================================================
    //===============================================================
    @SuppressWarnings({"UnusedDeclaration"})
    private void cancelBtnActionPerformed(java.awt.event.ActionEvent evt) {
        doClose();
    }

    //===============================================================
    //===============================================================
    @SuppressWarnings({"UnusedDeclaration"})
    private void closeDialog(java.awt.event.WindowEvent evt) {
        doClose();
    }
    //===============================================================

    /**
     * Closes the dialog
     */
    //===============================================================
    private void doClose() {
        setVisible(false);
        dispose();
        if (parent == null)
            System.exit(0);
    }
    //===============================================================
    //===============================================================

    //===============================================================
    //===============================================================
    public static void main(String[] args) {
        if (args.length == 0) {
            System.err.println("Crate name ?");
            System.exit(0);
        }

        try {
            new StarterStatTable(null, args[0]).setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //===============================================================
    //===============================================================


    //=========================================================================
    /**
     * A class to sort table data
     */
    //=========================================================================
    class UsedData extends ArrayList {
        //======================================================
        //======================================================
        UsedData() {
            //	fill with lines
            for (String[] datum : data)
                add(datum);
        }

        //======================================================
        //======================================================
        void sort(int column) {
            this.column = column;
            //	Sort data
            MyCompare compare = new MyCompare();
            Collections.sort(this, compare);

            for (int i = 0; i < size(); i++)
                data[i] = get(i);
        }

        private int column;
        //======================================================
        /**
         * MyCompare class to sort collection
         */
        //======================================================
        class MyCompare implements Comparator {
            public int compare(String[] array1, String[] array2) {
                String s1 = array1[column];
                String s2 = array2[column];

                //	Check if number
                try {
                    double d1 = Double.parseDouble(s1);
                    double d2 = Double.parseDouble(s2);
                    if (d1==d2) return 0;
                    return ((d1 < d2) ? 1 : -1);
                } catch (NumberFormatException e) { /* */ }

                //	Sort as String
                return s1.compareToIgnoreCase(s2);
            }
        }
    }


    //=========================================================================
    //=========================================================================
    public class DataTableModel extends AbstractTableModel {
        //==========================================================
        //==========================================================
        public int getColumnCount() {
            return data[0].length;
        }

        //==========================================================
        //==========================================================
        public int getRowCount() {
            return data.length;
        }

        //==========================================================
        //==========================================================
        public String getColumnName(int aCol) {
            if (aCol >= getColumnCount())
                return StarterStat.tableHeader[getColumnCount() - 1];
            else
                return StarterStat.tableHeader[aCol];
        }

        //==========================================================
        //==========================================================
        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
        //==========================================================
        //==========================================================
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy