Package org.pentaho.reporting.engine.classic.demo.ancient.demo.csv

Source Code of org.pentaho.reporting.engine.classic.demo.ancient.demo.csv.CSVUserInputPanel$LoadCSVDataAction

/*
* 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.demo.ancient.demo.csv;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Locale;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.FormValidator;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.JStatusBar;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.LengthLimitingDocument;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.action.AbstractActionDowngrade;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.action.ActionButton;
import org.pentaho.reporting.engine.classic.core.modules.misc.tablemodel.CSVTableModelProducer;
import org.pentaho.reporting.engine.classic.demo.util.DemoController;
import org.pentaho.reporting.libraries.base.util.FilesystemFilter;
import org.pentaho.reporting.libraries.base.util.IOUtils;
import org.pentaho.reporting.libraries.base.util.ObjectUtilities;
import org.pentaho.reporting.libraries.base.util.ResourceBundleSupport;

/**
* Demo that show how to use <code>CSVTableModelProducer</code> to generate <code>TableModel</code> for JFreeReport
* input data.
* <p/>
* This version allows the user to enter data directly.
*
* @see CSVTableModelProducer
*/
public class CSVUserInputPanel extends JPanel
{
  /**
   * Internal action class to confirm the dialog and to validate the input.
   */
  private class ActionSelectSeparator extends AbstractAction
  {
    /**
     * Default constructor.
     */
    protected ActionSelectSeparator()
    {
    }

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


  private class CSVDialogValidator extends FormValidator
  {
    protected CSVDialogValidator()
    {
      super();
    }

    public boolean performValidate()
    {
      return CSVUserInputPanel.this.performValidate();
    }

    public Action getConfirmAction()
    {
      return CSVUserInputPanel.this.getController().getExportAction();
    }
  }

  private class LoadCSVDataAction extends AbstractActionDowngrade
  {
    protected LoadCSVDataAction()
    {
      putValue(Action.NAME, "Select");
    }

    public void actionPerformed(final ActionEvent e)
    {
      performLoadFile();
    }
  }

  public static final String RESOURCE_BASE =
      "org.pentaho.reporting.engine.classic.demo.resources.demo-resources";

  private static final String COMMA_SEPARATOR = ",";
  private static final String SEMICOLON_SEPARATOR = ";";
  private static final String TAB_SEPARATOR = "\t";
  private static final String CSV_FILE_EXTENSION = ".csv";

  private JTextArea txDataArea;
  private JCheckBox cbxColumnNamesAsFirstRow;

  /**
   * A radio button for tab separators.
   */
  private JRadioButton rbSeparatorTab;

  /**
   * A radio button for colon separators.
   */
  private JRadioButton rbSeparatorColon;

  /**
   * A radio button for semi-colon separators.
   */
  private JRadioButton rbSeparatorSemicolon;

  /**
   * A radio button for other separators.
   */
  private JRadioButton rbSeparatorOther;

  /**
   * A text field for the 'other' separator.
   */
  private JTextField txSeparatorOther;

  private FormValidator formValidator;
  private DemoController controller;
  private ResourceBundleSupport resources;
  private JFileChooser fileChooser;

  /**
   * Creates the demo workspace.
   */
  public CSVUserInputPanel(final DemoController controler)
  {
    this.controller = controler;
    this.resources = new ResourceBundleSupport(Locale.getDefault(), RESOURCE_BASE,
        ObjectUtilities.getClassLoader(CSVUserInputPanel.class));
    this.formValidator = new CSVDialogValidator();

    setLayout(new BorderLayout());
    add(createDataArea(), BorderLayout.CENTER);
    add(createSeparatorPanel(), BorderLayout.SOUTH);
  }

  private JComponent createDataArea()
  {
    txDataArea = new JTextArea();
    cbxColumnNamesAsFirstRow = new JCheckBox("First Row contains Column-Names");

    final JLabel lbDataArea = new JLabel("CSV-Data");
    final JLabel lbLoadData = new JLabel("Load Data from File");
    final ActionButton btLoadData = new ActionButton(new LoadCSVDataAction());

    final JPanel dataPanel = new JPanel();
    dataPanel.setLayout(new GridBagLayout());

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = 2;
    gbc.insets = new Insets(1, 1, 1, 1);
    dataPanel.add(lbDataArea, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.insets = new Insets(1, 1, 1, 1);
    gbc.weightx = 1;
    gbc.weighty = 1;
    gbc.gridwidth = 2;
    dataPanel.add(txDataArea, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.gridx = 0;
    gbc.gridy = 2;
    gbc.insets = new Insets(1, 1, 1, 1);
    dataPanel.add(lbLoadData, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.EAST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.gridx = 1;
    gbc.gridy = 2;
    gbc.insets = new Insets(1, 1, 1, 1);
    dataPanel.add(btLoadData, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.gridx = 0;
    gbc.gridy = 3;
    gbc.insets = new Insets(1, 1, 1, 1);
    dataPanel.add(cbxColumnNamesAsFirstRow, gbc);

    formValidator.registerButton(cbxColumnNamesAsFirstRow);

    return dataPanel;
  }

  public DemoController getController()
  {
    return controller;
  }

  /**
   * Validates the contents of the dialog's input fields. If the selected file exists, it is also checked for validity.
   *
   * @return <code>true</code> if the input is valid, <code>false</code> otherwise
   */
  protected boolean performValidate()
  {
    final JStatusBar statusBar = controller.getStatusBar();
    statusBar.clear();

    return true;
  }

  protected FormValidator getFormValidator()
  {
    return formValidator;
  }

  /**
   * Creates a separator panel.
   *
   * @return The panel.
   */
  private JPanel createSeparatorPanel()
  {
    // separator panel
    final JPanel separatorPanel = new JPanel();
    separatorPanel.setLayout(new GridBagLayout());

    final TitledBorder tb =
        new TitledBorder(resources.getString("csvdemodialog.separatorchar"));
    separatorPanel.setBorder(tb);

    rbSeparatorTab = new JRadioButton(resources.getString("csvdemodialog.separator.tab"));
    rbSeparatorColon = new JRadioButton(resources.getString("csvdemodialog.separator.colon"));
    rbSeparatorSemicolon = new JRadioButton(resources.getString("csvdemodialog.separator.semicolon"));
    rbSeparatorOther = new JRadioButton(resources.getString("csvdemodialog.separator.other"));

    getFormValidator().registerButton(rbSeparatorColon);
    getFormValidator().registerButton(rbSeparatorOther);
    getFormValidator().registerButton(rbSeparatorSemicolon);
    getFormValidator().registerButton(rbSeparatorTab);

    final ButtonGroup btg = new ButtonGroup();
    btg.add(rbSeparatorTab);
    btg.add(rbSeparatorColon);
    btg.add(rbSeparatorSemicolon);
    btg.add(rbSeparatorOther);

    final Action selectAction = new ActionSelectSeparator();
    rbSeparatorTab.addActionListener(selectAction);
    rbSeparatorColon.addActionListener(selectAction);
    rbSeparatorSemicolon.addActionListener(selectAction);
    rbSeparatorOther.addActionListener(selectAction);

    final LengthLimitingDocument ldoc = new LengthLimitingDocument(1);
    txSeparatorOther = new JTextField();
    txSeparatorOther.setDocument(ldoc);
    getFormValidator().registerTextField(txSeparatorOther);


    GridBagConstraints gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.insets = new Insets(1, 1, 1, 1);
    separatorPanel.add(rbSeparatorTab, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.insets = new Insets(1, 1, 1, 1);
    separatorPanel.add(rbSeparatorColon, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.gridx = 0;
    gbc.gridy = 2;
    gbc.insets = new Insets(1, 1, 1, 1);
    separatorPanel.add(rbSeparatorSemicolon, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.weightx = 0;
    gbc.gridx = 0;
    gbc.gridy = 3;
    gbc.insets = new Insets(1, 1, 1, 1);
    separatorPanel.add(rbSeparatorOther, gbc);

    gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.WEST;
    gbc.fill = GridBagConstraints.NONE;
    gbc.weightx = 1;
    gbc.gridx = 1;
    gbc.gridy = 3;
    gbc.ipadx = 120;
    gbc.insets = new Insets(1, 1, 1, 1);
    separatorPanel.add(txSeparatorOther, gbc);

    return separatorPanel;
  }

  /**
   * Enables or disables the 'other' separator text field.
   */
  protected void performSeparatorSelection()
  {
    if (rbSeparatorOther.isSelected())
    {
      txSeparatorOther.setEnabled(true);
    }
    else
    {
      txSeparatorOther.setEnabled(false);
    }
  }

  public boolean isColumnNamesAsFirstRow()
  {
    return cbxColumnNamesAsFirstRow.isSelected();
  }

  public void setColumnNamesAsFirstRow(final boolean colsAsFirstRow)
  {
    cbxColumnNamesAsFirstRow.setSelected(colsAsFirstRow);
  }


  /**
   * Selects a file to use as target for the report processing.
   */
  protected void performLoadFile()
  {
    if (fileChooser == null)
    {
      fileChooser = new JFileChooser();
      fileChooser.addChoosableFileFilter(new FilesystemFilter
          (CSV_FILE_EXTENSION, resources.getString("csvdemodialog.csv-file-description")));
      fileChooser.setMultiSelectionEnabled(false);
    }

    final int option = fileChooser.showOpenDialog(this);
    if (option == JFileChooser.APPROVE_OPTION)
    {
      final File selFile = fileChooser.getSelectedFile();
      // now load the file
      try
      {
        final BufferedReader in = new BufferedReader(new FileReader(selFile));
        final StringWriter out = new StringWriter((int) selFile.length());
        IOUtils.getInstance().copyWriter(in, out);
        in.close();
        txDataArea.setText(out.toString());
      }
      catch (IOException ioe)
      {
        controller.getStatusBar().setStatusText("Failed to load CSV file: " + ioe.getLocalizedMessage());
      }
    }
  }

  public String getData()
  {
    return txDataArea.getText();
  }

  /**
   * Returns the separator string, which is controlled by the selection of radio buttons.
   *
   * @return The separator string.
   */
  public String getSeparatorString()
  {
    if (rbSeparatorColon.isSelected())
    {
      return COMMA_SEPARATOR;
    }
    if (rbSeparatorSemicolon.isSelected())
    {
      return SEMICOLON_SEPARATOR;
    }
    if (rbSeparatorTab.isSelected())
    {
      return TAB_SEPARATOR;
    }
    if (rbSeparatorOther.isSelected())
    {
      return txSeparatorOther.getText();
    }
    return "";
  }

  /**
   * Sets the separator string.
   *
   * @param s the separator.
   */
  public void setSeparatorString(final String s)
  {
    if (s == null)
    {
      rbSeparatorOther.setSelected(true);
      txSeparatorOther.setText("");
    }
    else if (s.equals(COMMA_SEPARATOR))
    {
      rbSeparatorColon.setSelected(true);
    }
    else if (s.equals(SEMICOLON_SEPARATOR))
    {
      rbSeparatorSemicolon.setSelected(true);
    }
    else if (s.equals(TAB_SEPARATOR))
    {
      rbSeparatorTab.setSelected(true);
    }
    else
    {
      rbSeparatorOther.setSelected(true);
      txSeparatorOther.setText(s);
    }
    performSeparatorSelection();
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.demo.ancient.demo.csv.CSVUserInputPanel$LoadCSVDataAction

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.