Package org.gephi.desktop.statistics

Source Code of org.gephi.desktop.statistics.StatisticsFrontEnd

/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>,
Patick J. McSweeney <pjmcswee@syr.edu>
Website : http://www.gephi.org

This file is part of Gephi.

Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

Gephi 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 Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with Gephi.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.desktop.statistics;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.gephi.statistics.spi.Statistics;
import org.gephi.statistics.spi.StatisticsBuilder;
import org.gephi.statistics.api.StatisticsController;
import org.gephi.statistics.api.StatisticsModel;
import org.gephi.statistics.spi.StatisticsUI;
import org.gephi.ui.components.SimpleHTMLReport;
import org.gephi.utils.longtask.spi.LongTask;
import org.gephi.utils.longtask.api.LongTaskListener;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.util.ImageUtilities;
import org.openide.util.Lookup;
import org.openide.util.NbBundle;
import org.openide.windows.WindowManager;

/**
*
* @author Mathieu Bastian
* @author Patick J. McSweeney
*/
public class StatisticsFrontEnd extends javax.swing.JPanel {

    private StatisticsUI statisticsUI;
    private final String RUN;
    private final String CANCEL;
    private final ImageIcon RUN_ICON;
    private final ImageIcon STOP_ICON;
    private Statistics currentStatistics;
    private StatisticsModel currentModel;

    //Img
    ;

    public StatisticsFrontEnd(StatisticsUI ui) {
        initComponents();
        RUN = NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.runStatus.run");
        CANCEL = NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.runStatus.cancel");
        initUI(ui);

        runButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if (runButton.getText().equals(RUN)) {
                    run();
                } else {
                    cancel();
                }
            }
        });

        reportButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                showReport();
            }
        });

        RUN_ICON = ImageUtilities.loadImageIcon("org/gephi/desktop/statistics/resources/run.png", false);
        STOP_ICON = ImageUtilities.loadImageIcon("org/gephi/desktop/statistics/resources/stop.png", false);
    }

    private void initUI(StatisticsUI ui) {
        this.statisticsUI = ui;
        displayLabel.setText(ui.getDisplayName());
        busyLabel.setVisible(false);
        runButton.setEnabled(false);
        runButton.setText(RUN);
        //runButton.setIcon(RUN_ICON);
        reportButton.setEnabled(false);
    }

    public void refreshModel(StatisticsModel model) {
        currentModel = model;
        if (model == null) {
            runButton.setText(RUN);
            //runButton.setIcon(RUN_ICON);
            runButton.setEnabled(false);
            busyLabel.setBusy(false);
            busyLabel.setVisible(false);
            reportButton.setEnabled(false);
            resultLabel.setText("");
            currentStatistics = null;
            return;
        }
        runButton.setEnabled(true);
        if (model.isRunning(statisticsUI)) {
            runButton.setText(CANCEL);
            //runButton.setIcon(STOP_ICON);
            busyLabel.setVisible(true);
            busyLabel.setBusy(true);
            reportButton.setEnabled(false);
            resultLabel.setText("");
            if (currentStatistics == null) {
                currentStatistics = currentModel.getRunning(statisticsUI);
            }
        } else {
            runButton.setText(RUN);
            //runButton.setIcon(RUN_ICON);
            busyLabel.setBusy(false);
            busyLabel.setVisible(false);
            currentStatistics = null;
            refreshResult(model);
        }
    }

    private void refreshResult(StatisticsModel model) {
        //Find a computed stats
        String result = model.getResult(statisticsUI);

        if (result != null) {
            resultLabel.setText(result);
        } else {
            resultLabel.setText("");
        }

        String report = model.getReport(statisticsUI.getStatisticsClass());
        reportButton.setEnabled(report != null);
    }

    private void run() {
        //Create Statistics
        StatisticsController controller = Lookup.getDefault().lookup(StatisticsController.class);
        StatisticsBuilder builder = controller.getBuilder(statisticsUI.getStatisticsClass());
        currentStatistics = builder.getStatistics();
        if (currentStatistics != null) {
            LongTaskListener listener = new LongTaskListener() {

                public void taskFinished(LongTask task) {
                    showReport();
                }
            };

            JPanel settingsPanel = statisticsUI.getSettingsPanel();
            if (settingsPanel != null) {
                statisticsUI.setup(currentStatistics);
                DialogDescriptor dd = new DialogDescriptor(settingsPanel, NbBundle.getMessage(StatisticsTopComponent.class, "StatisticsFrontEnd.settingsPanel.title", builder.getName()));
                if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) {
                    statisticsUI.unsetup();
                    controller.execute(currentStatistics, listener);
                }
            } else {
                statisticsUI.setup(currentStatistics);
                controller.execute(currentStatistics, listener);
            }
        }
    }

    private void cancel() {
        if (currentStatistics != null && currentStatistics instanceof LongTask) {
            LongTask longTask = (LongTask) currentStatistics;
            longTask.cancel();
        }
    }

    private void showReport() {
        final String report = currentModel.getReport(statisticsUI.getStatisticsClass());
        if (report != null) {
            SwingUtilities.invokeLater(new Runnable() {

                public void run() {
                    SimpleHTMLReport dialog = new SimpleHTMLReport(WindowManager.getDefault().getMainWindow(), report);
                }
            });
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        busyLabel = new org.jdesktop.swingx.JXBusyLabel(new Dimension(16, 16));
        displayLabel = new javax.swing.JLabel();
        resultLabel = new javax.swing.JLabel();
        toolbar = new javax.swing.JToolBar();
        runButton = new javax.swing.JButton();
        reportButton = new javax.swing.JButton();

        setOpaque(false);
        setLayout(new java.awt.GridBagLayout());

        busyLabel.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.busyLabel.text")); // NOI18N
        busyLabel.setMinimumSize(new java.awt.Dimension(16, 16));
        busyLabel.setPreferredSize(new java.awt.Dimension(16, 16));
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        add(busyLabel, gridBagConstraints);

        displayLabel.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.displayLabel.text")); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 0);
        add(displayLabel, gridBagConstraints);

        resultLabel.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.resultLabel.text")); // NOI18N
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 3);
        add(resultLabel, gridBagConstraints);

        toolbar.setFloatable(false);
        toolbar.setRollover(true);
        toolbar.setOpaque(false);

        runButton.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.runButton.text")); // NOI18N
        runButton.setFocusable(false);
        runButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        runButton.setOpaque(false);
        runButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        toolbar.add(runButton);

        reportButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/statistics/resources/report.png"))); // NOI18N
        reportButton.setToolTipText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.reportButton.toolTipText")); // NOI18N
        reportButton.setFocusable(false);
        reportButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        reportButton.setOpaque(false);
        reportButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        toolbar.add(reportButton);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 3;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
        add(toolbar, gridBagConstraints);
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private org.jdesktop.swingx.JXBusyLabel busyLabel;
    private javax.swing.JLabel displayLabel;
    private javax.swing.JButton reportButton;
    private javax.swing.JLabel resultLabel;
    private javax.swing.JButton runButton;
    private javax.swing.JToolBar toolbar;
    // End of variables declaration//GEN-END:variables
}
TOP

Related Classes of org.gephi.desktop.statistics.StatisticsFrontEnd

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.