Package net.datacrow.console.windows.reporting

Source Code of net.datacrow.console.windows.reporting.ReportingDialog

/******************************************************************************
*                                     __                                     *
*                              <-----/@@\----->                              *
*                             <-< <  \\//  > >->                             *
*                               <-<-\ __ /->->                               *
*                               Data /  \ Crow                               *
*                                   ^    ^                                   *
*                              info@datacrow.net                             *
*                                                                            *
*                       This file is part of Data Crow.                      *
*       Data Crow 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 any later version.               *
*                                                                            *
*        Data Crow 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 this program. If not, see http://www.gnu.org/licenses  *
*                                                                            *
******************************************************************************/

package net.datacrow.console.windows.reporting;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Collection;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import net.datacrow.console.ComponentFactory;
import net.datacrow.console.Layout;
import net.datacrow.console.components.DcFileField;
import net.datacrow.console.windows.DcDialog;
import net.datacrow.core.DataCrow;
import net.datacrow.core.DcRepository;
import net.datacrow.core.migration.itemexport.IItemExporterClient;
import net.datacrow.core.resources.DcResources;
import net.datacrow.reporting.ReportDictionaryGenerator;
import net.datacrow.reporting.templates.ReportTemplate;
import net.datacrow.reporting.templates.ReportTemplates;
import net.datacrow.reporting.transformers.XmlTransformer;
import net.datacrow.reporting.transformers.XmlTransformers;
import net.datacrow.settings.DcSettings;
import net.datacrow.util.DcSwingUtilities;
import net.datacrow.util.launcher.FileLauncher;

import org.apache.log4j.Logger;

public class ReportingDialog extends DcDialog implements IItemExporterClient, ActionListener, ItemListener {

    private static Logger logger = Logger.getLogger(ReportingDialog.class.getName());
   
    private XmlTransformer transformer;

    private ReportSettingsPanel panelSettings = new ReportSettingsPanel();
   
    private JButton buttonRun = ComponentFactory.getButton(DcResources.getText("lblRun"));
    private JButton buttonStop = ComponentFactory.getButton(DcResources.getText("lblStop"));
    private JButton buttonClose = ComponentFactory.getButton(DcResources.getText("lblClose"));
    private JButton buttonResults = ComponentFactory.getButton(DcResources.getText("lblOpenReport"));

    private JComboBox cbTemplates = ComponentFactory.getComboBox();
    private JComboBox cbTransformer = ComponentFactory.getComboBox();

    private JTextArea textLog = ComponentFactory.getTextArea();
    private JProgressBar progressBar = new JProgressBar();
    private DcFileField fileField;
   
    private List<String> items;

    public ReportingDialog(List<String> items) {
        super(DataCrow.mainFrame);

        new ReportDictionaryGenerator().generate();
       
        try {
            this.items = items;
           
            setHelpIndex("dc.reports");
   
            fileField = ComponentFactory.getFileField(true, false, null);
            buildDialog();

        } catch (Exception exp) {
            logger.error(DcResources.getText("msgFailedToOpen", exp.getMessage()), exp);
            DcSwingUtilities.displayErrorMessage(DcResources.getText("msgFailedToOpen", exp.getMessage()));
        }
       
        setModal(true);
    }

    private void saveDefaults() {
        DcSettings.set(DcRepository.Settings.stReportingDialogSize, getSize());
        DcSettings.set(DcRepository.Settings.stReportFile, fileField.getFilename());
    }
   
    @Override
    public void notifyMessage(String message) {
        if (textLog != null) {
            textLog.insert(message + '\n', 0);
            textLog.setCaretPosition(0);
        }
    }

    @Override
    public void notifyProcessed() {
        progressBar.setValue(progressBar.getValue() + 1);
    }

    @Override
    public void notifyStarted(int count) {
        progressBar.setValue(0);
        progressBar.setMaximum(count);
        allowActions(false);
    }

    @Override
    public void notifyStopped() {
        allowActions(true);
    }

    public void allowActions(boolean b) {
        if (buttonRun != null) {
            buttonRun.setEnabled(b);
            buttonResults.setEnabled(b);
        }
    }

    private void showResults() {
      File file = fileField.getFile();
        if (file != null && file.exists()) {
            try {
              FileLauncher launcher = new FileLauncher(file);
              launcher.launch();
            } catch (Exception e) {
                String msg = DcResources.getText("msgErrorWhileOpeningX", new String[] {file.toString(), e.getMessage()});
                DcSwingUtilities.displayWarningMessage(msg);
                logger.error(msg, e);
            }
        } else {
            DcSwingUtilities.displayWarningMessage("msgCouldNotOpenReport");
        }
    }

    private File getTarget(String extension) throws FileNotFoundException {
        File target = fileField.getFile();
       
        if (target == null)
            throw new FileNotFoundException();
       
        String filename = target.toString();
        if (!filename.toLowerCase().endsWith(extension.toLowerCase())) {
           
            if (filename.lastIndexOf(".") > 0)
                filename = filename.substring(0, filename.lastIndexOf("."));
           
            target = new File(filename + "." + extension);
            fileField.setFile(target);
        }
       
        return target;
    }
   
    private void createReport() {
        try {
            transformer = (XmlTransformer) cbTransformer.getSelectedItem();
            ReportTemplate template = (ReportTemplate) cbTemplates.getSelectedItem();
            panelSettings.saveSettings(template.getProperties(), true);
            transformer.transform(this, items, getTarget(transformer.getFileType()), template);

            allowActions(false);
           
        } catch (FileNotFoundException fnfe) {
            DcSwingUtilities.displayWarningMessage("msgSelectTargetFile");
        } catch (Throwable t) {
            DcSwingUtilities.displayWarningMessage(DcResources.getText("msgCreateReportFailedUnexpect", t.toString()));
        }
    }

    private void cancel() {
        if (transformer != null)
            transformer.cancel();
       
        allowActions(true);
    }

    @Override
    public void close() {
        saveDefaults();
        saveReportFileProperties((ReportTemplate) cbTemplates.getSelectedItem());
       
        cancel();

        if (items != null) {
            items.clear();
            items = null;
        }
       
        transformer = null;
        panelSettings = null;
        buttonRun = null;
        buttonStop = null;
        buttonClose = null;
        buttonResults = null;
        cbTemplates = null;
        cbTransformer = null;
        textLog = null;
        progressBar = null;
        fileField = null;
       
        super.close();
    }
   
    private void applyReportFileProperties(ReportTemplate reportFile) {
        if (reportFile != null)
            panelSettings.applySettings(reportFile.getProperties());
    }
   
    private void saveReportFileProperties(ReportTemplate reportFile) {
        if (reportFile != null)
            panelSettings.saveSettings(reportFile.getProperties(), true);
    }   
   
    private void applyReportSelection() {
        if (cbTransformer.isEnabled() && cbTransformer.getSelectedIndex() > -1) {
           
            cbTemplates.removeItemListener(this);
           
            XmlTransformer transformer = (XmlTransformer) cbTransformer.getSelectedItem();
            cbTemplates.removeAllItems();
            Collection<ReportTemplate> templates =
                new ReportTemplates(true).getReportFiles(transformer.getType());
           
            for (ReportTemplate rt : templates)
                cbTemplates.addItem(rt);
           
            cbTemplates.setSelectedIndex(0);
            applyReportFileProperties((ReportTemplate) cbTemplates.getSelectedItem());
        }
       
        cbTemplates.addItemListener(this);
    }
   
    private void buildDialog() {
        //**********************************************************
        //Input Panel
        //**********************************************************
        JPanel panelInput = new JPanel();
        panelInput.setLayout(Layout.getGBL());
        panelInput.add(fileField,  Layout.getGBC( 0, 0, 1, 1, 1.0, 1.0
                      ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                       new Insets( 5, 5, 5, 5), 0, 0));
       
        fileField.setValue(DcSettings.getString(DcRepository.Settings.stReportFile));
       
        panelInput.setBorder(ComponentFactory.getTitleBorder(DcResources.getText("lblTargetFile")));       
       
        //**********************************************************
        //Report Type
        //**********************************************************
        JPanel panelReport = new JPanel(false);
        panelReport.setLayout(Layout.getGBL());

        cbTransformer.setActionCommand("applyReport");
        cbTransformer.addActionListener(this);

        for (XmlTransformer transformer : XmlTransformers.getTransformers())
            cbTransformer.addItem(transformer);

        JLabel lblTransformers = ComponentFactory.getLabel(DcResources.getText("lblReportFormat"));
       
        panelReport.add(lblTransformers,Layout.getGBC( 1, 0, 1, 1, 1.0, 1.0
                       ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                        new Insets( 5, 5, 5, 5), 0, 0));
        panelReport.add(cbTransformer,  Layout.getGBC( 2, 0, 1, 1, 1.0, 1.0
                       ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                        new Insets( 5, 5, 5, 5), 0, 0));
        panelReport.add(cbTemplates,      Layout.getGBC( 1, 1, 2, 1, 1.0, 1.0
                       ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                        new Insets( 5, 5, 5, 5), 0, 0));
       
        panelReport.setBorder(ComponentFactory.getTitleBorder(DcResources.getText("lblReportSelection")));

      //**********************************************************
        //Actions Panel
        //**********************************************************
        JPanel panelActions = new JPanel();
        panelActions.setLayout(Layout.getGBL());

        buttonRun.setActionCommand("createReport");
        buttonRun.addActionListener(this);
        buttonStop.setActionCommand("cancel");
        buttonStop.addActionListener(this);
        buttonResults.setActionCommand("showResults");
        buttonResults.addActionListener(this);
        buttonClose.setActionCommand("close");
        buttonClose.addActionListener(this);

        buttonResults.setMnemonic(KeyEvent.VK_O);

        panelActions.add(buttonRun,  Layout.getGBC( 0, 0, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                 new Insets( 5, 5, 5, 5), 0, 0));
        panelActions.add(buttonStop,    Layout.getGBC( 1, 0, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                 new Insets( 5, 5, 5, 5), 0, 0));
        panelActions.add(buttonResults,   Layout.getGBC( 2, 0, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                 new Insets( 5, 5, 5, 5), 0, 0));
        panelActions.add(buttonClose,     Layout.getGBC( 4, 0, 1, 1, 1.0, 1.0
                ,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
                 new Insets( 5, 5, 5, 5), 0, 0));

        //**********************************************************
        //Progress panel
        //**********************************************************
        JPanel panelProgress = new JPanel();
        panelProgress.setLayout(Layout.getGBL());
        panelProgress.add(progressBar, Layout.getGBC( 0, 1, 1, 1, 1.0, 1.0
                         ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                          new Insets(5, 5, 5, 5), 0, 0));

        //**********************************************************
        //Log Panel
        //**********************************************************
        JPanel panelLog = new JPanel();
        panelLog.setLayout(Layout.getGBL());

        JScrollPane scroller = new JScrollPane(textLog);
        scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        panelLog.add(scroller, Layout.getGBC( 0, 1, 1, 1, 1.0, 1.0
                    ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                     new Insets(5, 5, 5, 5), 0, 0));

        panelLog.setBorder(ComponentFactory.getTitleBorder(DcResources.getText("lblLog")));

        //**********************************************************
        //Main Panel
        //**********************************************************
        this.getContentPane().setLayout(Layout.getGBL());
       
       
        JPanel panel = new JPanel();
        panel.add(panelSettings);
        panel.setBorder(ComponentFactory.getTitleBorder(DcResources.getText("lblSettings")));

        this.getContentPane().add(
                panelReport,    Layout.getGBC( 0, 0, 1, 1, 20.0, 20.0
               ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                new Insets( 5, 5, 5, 5), 0, 0));
        this.getContentPane().add(
                panel,          Layout.getGBC( 1, 0, 1, 2, 1.0, 1.0
               ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                new Insets( 5, 5, 5, 5), 0, 0));
        this.getContentPane().add(
                panelInput,     Layout.getGBC( 0, 1, 1, 1, 1.0, 1.0
               ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                new Insets( 5, 5, 5, 5), 0, 0));
        this.getContentPane().add(
                panelActions,   Layout.getGBC( 0, 3, 2, 1, 1.0, 1.0
               ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE,
                new Insets( 0, 0, 0, 0), 0, 0));
        this.getContentPane().add(
                panelProgress,  Layout.getGBC( 0, 4, 2, 1, 1.0, 1.0
               ,GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL,
                new Insets( 0, 0, 0, 0), 0, 0));
        this.getContentPane().add(
                panelLog,       Layout.getGBC( 0, 5, 2, 1, 40.0, 40.0
               ,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
                new Insets( 0, 5, 0, 5), 0, 0));
       
        this.setResizable(true);
        this.pack();
       
        Dimension size = DcSettings.getDimension(DcRepository.Settings.stReportingDialogSize);
        setSize(size);

        setCenteredLocation();
        applyReportSelection();
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        if (ae.getActionCommand().equals("showResults"))
            showResults();
        else if (ae.getActionCommand().equals("close"))
            close();
        else if (ae.getActionCommand().equals("cancel"))
            cancel();
        else if (ae.getActionCommand().equals("createReport"))
            createReport();     
        else if (ae.getActionCommand().equals("applyReport"))
            applyReportSelection();     
    }

    @Override
    public void itemStateChanged(ItemEvent ie) {
        if (ie.getStateChange() == ItemEvent.SELECTED)
            applyReportFileProperties((ReportTemplate) ie.getItem());   
       
        if (ie.getStateChange() == ItemEvent.DESELECTED)
            saveReportFileProperties((ReportTemplate) ie.getItem());
    }
}
TOP

Related Classes of net.datacrow.console.windows.reporting.ReportingDialog

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.