Package org.pentaho.reporting.engine.classic.core.modules.gui.xls

Source Code of org.pentaho.reporting.engine.classic.core.modules.gui.xls.ExcelExportDialog

/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program 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 Lesser General Public License for more details.
*
* Copyright (c) 2001 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors..  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.core.modules.gui.xls;

import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.File;
import java.text.MessageFormat;
import java.util.ResourceBundle;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;

import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.engine.classic.core.modules.gui.base.AbstractExportDialog;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.JStatusBar;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.StatusType;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.action.ActionButton;
import org.pentaho.reporting.libraries.base.config.Configuration;
import org.pentaho.reporting.libraries.base.config.DefaultConfiguration;
import org.pentaho.reporting.libraries.base.util.FilesystemFilter;
import org.pentaho.reporting.libraries.base.util.StringUtils;

/**
* A dialog that is used to prepare the printing of a report into an Excel file.
* <p/>
* The main method to call the dialog is {@link ExcelExportDialog#performQueryForExport(MasterReport ,
* org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.SwingGuiContext)}. Given a report, the dialog is
* shown and if the user approved the dialog, the excel file is saved using the settings made in the dialog.
*
* @author Heiko Evermann
*/
public class ExcelExportDialog extends AbstractExportDialog
{
  /**
   * Internal action class to select a target file.
   */
  private class ActionSelectFile extends AbstractAction
  {
    /**
     * Default constructor.
     */
    protected ActionSelectFile(final ResourceBundle resources)
    {
      putValue(Action.NAME, resources.getString("excelexportdialog.selectFile")); //$NON-NLS-1$
    }

    /**
     * Receives notification that the action has occurred.
     *
     * @param e the action event.
     */
    public void actionPerformed(final ActionEvent e)
    {
      performSelectFile();
    }
  }

  /**
   * Select file action.
   */
  private Action actionSelectFile;

  /**
   * Filename text field.
   */
  private JTextField txFilename;

  /**
   * The strict layout check-box.
   */
  private JCheckBox cbStrictLayout;

  private JStatusBar statusBar;

  /**
   * A file chooser.
   */
  private JFileChooser fileChooser;
  private static final String XLS_FILE_EXTENSION = ".xls"; //$NON-NLS-1$

  /**
   * Creates a new Excel save dialog.
   *
   * @param owner the dialog owner.
   */
  public ExcelExportDialog(final Frame owner)
  {
    super(owner);
    initConstructor();
  }

  /**
   * Creates a new Excel dialog.
   *
   * @param owner the dialog owner.
   */
  public ExcelExportDialog(final Dialog owner)
  {
    super(owner);
    initConstructor();
  }

  /**
   * Creates a new Excel save dialog.  The created dialog is modal.
   */
  public ExcelExportDialog()
  {
    initConstructor();
  }

  protected String getConfigurationSuffix()
  {
    return "_xlsexport"; //$NON-NLS-1$
  }

  /**
   * Initialisation.
   */
  private void initConstructor()
  {
    actionSelectFile = new ActionSelectFile(getResources());
    statusBar = new JStatusBar();
    setTitle(getResources().getString("excelexportdialog.dialogtitle")); //$NON-NLS-1$
    initialize();
    clear();
  }

  public JStatusBar getStatusBar()
  {
    return statusBar;
  }

  /**
   * Returns a single instance of the file selection action.
   *
   * @return the action.
   */
  private Action getActionSelectFile()
  {
    return actionSelectFile;
  }

  /**
   * Initializes the Swing components of this dialog.
   */
  private void initialize()
  {
    final JTabbedPane theTabbedPane = new JTabbedPane();
    theTabbedPane.add(getResources().getString("excelexportdialog.export-settings"), createExportPanel());
    theTabbedPane.add(getResources().getString("excelexportdialog.parameters"), getParametersPanel());
    setContentPane(createContentPane(theTabbedPane));
  }
 
  private JPanel createExportPanel()
  {
    final JPanel contentPane = new JPanel();
    contentPane.setLayout(new GridBagLayout());
    contentPane.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));

    final JLabel lblFileName = new JLabel(getResources().getString(
        "excelexportdialog.filename")); //$NON-NLS-1$
    final JButton btnSelect = new ActionButton(getActionSelectFile());

    txFilename = new JTextField();
    cbStrictLayout = new JCheckBox(getResources().getString(
        "excelexportdialog.strict-layout")); //$NON-NLS-1$

    getFormValidator().registerButton(cbStrictLayout);
    getFormValidator().registerTextField(txFilename);

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.insets = new Insets(3, 1, 1, 5);
    contentPane.add(lblFileName, gbc);

    gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.weightx = 1;
    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.ipadx = 120;
    gbc.insets = new Insets(3, 1, 1, 1);
    contentPane.add(txFilename, gbc);

    gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.weightx = 1;
    gbc.gridx = 1;
    gbc.gridy = 1;
    gbc.ipadx = 120;
    gbc.insets = new Insets(1, 1, 1, 1);
    contentPane.add(cbStrictLayout, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.NORTHWEST;
    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.gridheight = 2;
    contentPane.add(btnSelect, gbc);

    gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 2;
    gbc.gridwidth = 2;
    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.fill = GridBagConstraints.REMAINDER;
    gbc.insets = new Insets(10, 1, 1, 1);
    contentPane.add(new JPanel(), gbc);
   
    return contentPane;
  }

  /**
   * Returns the filename of the excel file.
   *
   * @return the name of the file where to save the excel file.
   */
  public String getFilename()
  {
    return txFilename.getText();
  }

  /**
   * Defines the filename of the excel file.
   *
   * @param filename the filename of the excel file
   */
  public void setFilename(final String filename)
  {
    this.txFilename.setText(filename);
  }

  /**
   * Returns the setting of the 'strict layout' check-box.
   *
   * @return A boolean.
   */
  public boolean isStrictLayout()
  {
    return cbStrictLayout.isSelected();
  }

  /**
   * Sets the 'strict-layout' check-box.
   *
   * @param strictLayout the new setting.
   */
  public void setStrictLayout(final boolean strictLayout)
  {
    cbStrictLayout.setSelected(strictLayout);
  }

  /**
   * Clears all selections and input fields.
   */
  public void clear()
  {
    txFilename.setText(""); //$NON-NLS-1$
    cbStrictLayout.setSelected(false);
  }

  /**
   * Selects a file to use as target for the report processing.
   */
  protected void performSelectFile()
  {
    if (fileChooser == null)
    {
      fileChooser = new JFileChooser();
      final FilesystemFilter filter = new FilesystemFilter(ExcelExportDialog.XLS_FILE_EXTENSION,
          getResources().getString("excelexportdialog.excel-file-description")); //$NON-NLS-1$
      fileChooser.addChoosableFileFilter(filter);
      fileChooser.setMultiSelectionEnabled(false);
    }

    final File file = new File(getFilename());
    fileChooser.setCurrentDirectory(file);
    fileChooser.setSelectedFile(file);
    final int option = fileChooser.showSaveDialog(this);
    if (option == JFileChooser.APPROVE_OPTION)
    {
      final File selFile = fileChooser.getSelectedFile();
      String selFileName = selFile.getAbsolutePath();

      // Test if ends on xls
      if (StringUtils.endsWithIgnoreCase(selFileName, ExcelExportDialog.XLS_FILE_EXTENSION) == false)
      {
        selFileName = selFileName + ExcelExportDialog.XLS_FILE_EXTENSION;
      }
      setFilename(selFileName);
    }
  }

  /**
   * Validates the contents of the dialog's input fields. If the selected file exists, it is also checked for validity.
   *
   * @return true, if the input is valid, false otherwise
   */
  public boolean performValidate()
  {
    getStatusBar().clear();

    final String filename = getFilename();
    if (filename.trim().length() == 0)
    {
      getStatusBar().setStatus(StatusType.ERROR,
          getResources().getString("excelexportdialog.targetIsEmpty")); //$NON-NLS-1$
      return false;
    }
    final File f = new File(filename);
    if (f.exists())
    {
      if (f.isFile() == false)
      {
        getStatusBar().setStatus(StatusType.ERROR,
            getResources().getString("excelexportdialog.targetIsNoFile")); //$NON-NLS-1$
        return false;
      }
      if (f.canWrite() == false)
      {
        getStatusBar().setStatus(StatusType.ERROR,
            getResources().getString("excelexportdialog.targetIsNotWritable")); //$NON-NLS-1$
        return false;
      }
      final String message = MessageFormat.format(getResources().getString
          ("excelexportdialog.targetExistsWarning"), //$NON-NLS-1$
          new Object[]{filename});
      getStatusBar().setStatus(StatusType.WARNING, message);
    }
    return true;
  }

  protected boolean performConfirm()
  {
    final String filename = getFilename();
    final File f = new File(filename);
    if (f.exists())
    {
      final String key1 = "excelexportdialog.targetOverwriteConfirmation"; //$NON-NLS-1$
      final String key2 = "excelexportdialog.targetOverwriteTitle"; //$NON-NLS-1$
      if (JOptionPane.showConfirmDialog(this,
          MessageFormat.format(getResources().getString(key1),
              new Object[]{getFilename()}),
          getResources().getString(key2),
          JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)
          == JOptionPane.NO_OPTION)
      {
        return false;
      }
    }
    return true;
  }

  /**
   * Initialises the Excel export dialog from the settings in the report configuration.
   *
   * @param config the report configuration.
   */
  protected void setDialogContents(final Configuration config)
  {
    final String strict = config.getConfigProperty(
        "org.pentaho.reporting.engine.classic.core.modules.output.table.xls.StrictLayout"); //$NON-NLS-1$
    setStrictLayout("true".equals(strict)); //$NON-NLS-1$

    final String defaultFileName = config.getConfigProperty
        ("org.pentaho.reporting.engine.classic.core.modules.gui.xls.FileName"); //$NON-NLS-1$
    if (defaultFileName != null)
    {
      setFilename(resolvePath(defaultFileName).getAbsolutePath());
    }
  }

  /**
   * Returns a new (and not connected to the default config from the job) configuration containing all properties from
   * the dialog.
   *
   * @param full
   * @return
   */
  protected Configuration grabDialogContents(final boolean full)
  {
    final DefaultConfiguration p = new DefaultConfiguration();

    if (full)
    {
      p.setProperty("org.pentaho.reporting.engine.classic.core.modules.gui.xls.FileName", getFilename()); //$NON-NLS-1$
    }
    p.setConfigProperty("org.pentaho.reporting.engine.classic.core.modules.output.table.xls.StrictLayout",
        String.valueOf(isStrictLayout())); //$NON-NLS-1$
    return p;
  }

  protected String getResourceBaseName()
  {
    return ExcelExportPlugin.BASE_RESOURCE_CLASS;
  }

  protected String getConfigurationPrefix()
  {
    return "org.pentaho.reporting.engine.classic.core.modules.gui.xls."; //$NON-NLS-1$
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.modules.gui.xls.ExcelExportDialog

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.