/*
* 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.csv;
import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.File;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot;
import org.pentaho.reporting.engine.classic.core.modules.gui.base.AbstractExportDialog;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.EncodingComboBoxModel;
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.StatusType;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.action.ActionButton;
import org.pentaho.reporting.engine.classic.core.modules.output.csv.CSVProcessor;
import org.pentaho.reporting.engine.classic.core.modules.output.table.csv.CSVTableModule;
import org.pentaho.reporting.libraries.base.config.Configuration;
import org.pentaho.reporting.libraries.base.config.DefaultConfiguration;
import org.pentaho.reporting.libraries.base.config.ModifiableConfiguration;
import org.pentaho.reporting.libraries.base.util.FilesystemFilter;
import org.pentaho.reporting.libraries.base.util.StringUtils;
import org.pentaho.reporting.libraries.fonts.encoding.EncodingRegistry;
/**
* A dialog for exporting a report to CSV format.
*
* @author Thomas Morgner.
*/
public class CSVDataExportDialog extends AbstractExportDialog
{
// /**
// * The 'CSV encoding' property key.
// */
// public static final String CSV_OUTPUT_ENCODING
// = "org.pentaho.reporting.engine.classic.core.modules.gui.csv.Encoding"; //$NON-NLS-1$
/**
* A default value of the 'CSV encoding' property key.
*/
public static final String CSV_OUTPUT_ENCODING_DEFAULT =
EncodingRegistry.getPlatformDefaultEncoding();
/**
* 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();
}
}
/**
* 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("csvexportdialog.selectFile")); //$NON-NLS-1$
}
/**
* Receives notification that the action has occurred.
*
* @param e the action event.
*/
public void actionPerformed(final ActionEvent e)
{
performSelectFile();
}
}
/**
* Filename text field.
*/
private JTextField txFilename;
/**
* The encoding combo-box.
*/
private JComboBox cbEncoding;
/**
* The encoding model.
*/
private EncodingComboBoxModel encodingModel;
private JCheckBox cbxEnableReportHeader;
private JCheckBox cbxEnableReportFooter;
private JCheckBox cbxEnableGroupHeader;
private JCheckBox cbxEnableGroupFooter;
private JCheckBox cbxEnableItemband;
private JCheckBox cbxWriteStateColumns;
/**
* The columnnames-as-first-row layout check-box.
*/
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 JStatusBar statusBar;
/**
* A file chooser.
*/
private JFileChooser fileChooser;
private static final String COMMA_SEPARATOR = ","; //$NON-NLS-1$
private static final String SEMICOLON_SEPARATOR = ";"; //$NON-NLS-1$
private static final String TAB_SEPARATOR = "\t"; //$NON-NLS-1$
private static final String CSV_FILE_EXTENSION = ".csv"; //$NON-NLS-1$
/**
* Creates a new CSV export dialog.
*
* @param owner the dialog owner.
*/
public CSVDataExportDialog(final Frame owner)
{
super(owner);
initConstructor();
}
/**
* Creates a new CSV export dialog.
*
* @param owner the dialog owner.
*/
public CSVDataExportDialog(final Dialog owner)
{
super(owner);
initConstructor();
}
/**
* Creates a new CSV export dialog. The created dialog is modal.
*/
public CSVDataExportDialog()
{
initConstructor();
}
/**
* Initialisation.
*/
private void initConstructor()
{
statusBar = new JStatusBar();
setTitle(getResources().getString("csvexportdialog.dialogtitle")); //$NON-NLS-1$
initialize();
clear();
getFormValidator().setEnabled(true);
}
public JStatusBar getStatusBar()
{
return statusBar;
}
protected String getResourceBaseName()
{
return CSVDataExportPlugin.BASE_RESOURCE_CLASS;
}
/**
* Initializes the Swing components of this dialog.
*/
private void initialize()
{
cbxWriteStateColumns = new JCheckBox
(getResources().getString("csvexportdialog.write-state-columns")); //$NON-NLS-1$
cbxColumnNamesAsFirstRow = new JCheckBox
(getResources().getString("cvsexportdialog.export.columnnames")); //$NON-NLS-1$
getFormValidator().registerButton(cbxColumnNamesAsFirstRow);
cbxEnableReportHeader =
new JCheckBox(getResources().getString("csvexportdialog.enable-report-header")); //$NON-NLS-1$
cbxEnableReportFooter =
new JCheckBox(getResources().getString("csvexportdialog.enable-report-footer")); //$NON-NLS-1$
cbxEnableItemband =
new JCheckBox(getResources().getString("csvexportdialog.enable-itemband")); //$NON-NLS-1$
cbxEnableGroupHeader =
new JCheckBox(getResources().getString("csvexportdialog.enable-group-header")); //$NON-NLS-1$
cbxEnableGroupFooter =
new JCheckBox(getResources().getString("csvexportdialog.enable-group-footer")); //$NON-NLS-1$
getFormValidator().registerButton(cbxEnableGroupFooter);
getFormValidator().registerButton(cbxEnableGroupHeader);
getFormValidator().registerButton(cbxEnableItemband);
getFormValidator().registerButton(cbxEnableReportFooter);
getFormValidator().registerButton(cbxEnableReportHeader);
txFilename = new JTextField();
txFilename.setColumns(30);
encodingModel = EncodingComboBoxModel.createDefaultModel(Locale.getDefault());
encodingModel.sort();
cbEncoding = new JComboBox(encodingModel);
final JPanel exportPane = createExportPane();
final JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add(getResources().getString("csvexportdialog.export-settings"), exportPane); //$NON-NLS-1$
tabbedPane.add(getResources().getString("csvexportdialog.parameters"), getParametersPanel()); //$NON-NLS-1$
final Configuration config = ClassicEngineBoot.getInstance().getGlobalConfig();
if ("true".equals(config.getConfigProperty(
"org.pentaho.reporting.engine.classic.core.modules.gui.csv.data.AdvancedSettingsAvailable")))
{
tabbedPane.add(getResources().getString("csvexportdialog.advanced-settings"),
createAdvancedOptionsPanel()); //$NON-NLS-1$
}
setContentPane(createContentPane(tabbedPane));
getFormValidator().registerTextField(txFilename);
getFormValidator().registerComboBox(cbEncoding);
}
private JPanel createAdvancedOptionsPanel()
{
final JPanel advancedOptionsPane = new JPanel();
advancedOptionsPane.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1;
gbc.weightx = 1;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 3;
gbc.insets = new Insets(10, 1, 1, 1);
advancedOptionsPane.add(createExportOptionsPanel(), gbc);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1;
gbc.weightx = 1;
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 3;
gbc.insets = new Insets(10, 1, 1, 1);
advancedOptionsPane.add(createSeparatorPanel(), gbc);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.weighty = 1;
gbc.weightx = 1;
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 3;
gbc.insets = new Insets(10, 1, 1, 1);
advancedOptionsPane.add(createExportTypePanel(), gbc);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.REMAINDER;
gbc.insets = new Insets(10, 1, 1, 1);
advancedOptionsPane.add(new JPanel(), gbc);
return advancedOptionsPane;
}
private JPanel createExportPane()
{
final JPanel contentPane = new JPanel();
contentPane.setLayout(new GridBagLayout());
contentPane.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
final JLabel lblFileName = new JLabel(getResources().getString(
"csvexportdialog.filename")); //$NON-NLS-1$
final JButton btnSelect = new ActionButton(new ActionSelectFile(
getResources()));
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.gridwidth = 1;
gbc.insets = new Insets(3, 1, 5, 1);
contentPane.add(txFilename, gbc);
gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.gridx = 2;
gbc.gridy = 0;
gbc.gridheight = 2;
gbc.insets = new Insets(1, 5, 5, 1);
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;
}
/**
* Creates a panel for the export type.
*
* @return The panel.
*/
private JPanel createExportTypePanel()
{
// separator panel
final JPanel exportTypePanel = new JPanel();
exportTypePanel.setLayout(new BorderLayout());
final TitledBorder tb =
new TitledBorder(getResources().getString(
"csvexportdialog.exported-bands")); //$NON-NLS-1$
exportTypePanel.setBorder(tb);
final JPanel rowTypePanel = new JPanel();
rowTypePanel.setLayout(new GridLayout(2, 3, 5, 2));
rowTypePanel.add(cbxEnableReportHeader);
rowTypePanel.add(cbxEnableGroupHeader);
rowTypePanel.add(cbxEnableItemband);
rowTypePanel.add(cbxEnableReportFooter);
rowTypePanel.add(cbxEnableGroupFooter);
exportTypePanel.add(rowTypePanel, BorderLayout.WEST);
return exportTypePanel;
}
/**
* Creates a panel for the export type.
*
* @return The panel.
*/
private JPanel createExportOptionsPanel()
{
// separator panel
final JPanel exportTypePanel = new JPanel();
exportTypePanel.setLayout(new GridBagLayout());
final JLabel lblEncoding = new JLabel(getResources().getString(
"csvexportdialog.encoding")); //$NON-NLS-1$
final TitledBorder tb =
new TitledBorder(getResources().getString(
"csvexportdialog.export-options")); //$NON-NLS-1$
exportTypePanel.setBorder(tb);
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(1, 1, 1, 5);
exportTypePanel.add(lblEncoding, gbc);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 0;
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.insets = new Insets(5, 1, 1, 1);
exportTypePanel.add(cbEncoding, gbc);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 0;
gbc.gridx = 1;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.insets = new Insets(5, 1, 1, 1);
exportTypePanel.add(cbxColumnNamesAsFirstRow, gbc);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.WEST;
gbc.weightx = 0;
gbc.gridx = 1;
gbc.gridy = 2;
gbc.gridwidth = 1;
gbc.insets = new Insets(1, 1, 1, 1);
exportTypePanel.add(cbxWriteStateColumns, gbc);
return exportTypePanel;
}
/**
* 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(getResources().getString(
"csvexportdialog.separatorchar")); //$NON-NLS-1$
separatorPanel.setBorder(tb);
rbSeparatorTab = new JRadioButton(getResources().getString(
"csvexportdialog.separator.tab")); //$NON-NLS-1$
rbSeparatorColon = new JRadioButton(getResources().getString(
"csvexportdialog.separator.colon")); //$NON-NLS-1$
rbSeparatorSemicolon = new JRadioButton(getResources().getString(
"csvexportdialog.separator.semicolon")); //$NON-NLS-1$
rbSeparatorOther = new JRadioButton(getResources().getString(
"csvexportdialog.separator.other")); //$NON-NLS-1$
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);
txSeparatorOther.setColumns(5);
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.insets = new Insets(1, 1, 1, 1);
separatorPanel.add(txSeparatorOther, gbc);
return separatorPanel;
}
/**
* Returns the export file name.
*
* @return The file name.
*/
public String getFilename()
{
return txFilename.getText();
}
/**
* Sets the export file name.
*
* @param filename the file name.
*/
public void setFilename(final String filename)
{
this.txFilename.setText(filename);
}
/**
* Clears all selections, input fields and sets the selected encryption level to none.
*/
public void clear()
{
txFilename.setText(""); //$NON-NLS-1$
cbEncoding.setSelectedIndex(encodingModel.indexOf
(EncodingRegistry.getPlatformDefaultEncoding()));
rbSeparatorColon.setSelected(true);
cbxColumnNamesAsFirstRow.setSelected(false);
performSeparatorSelection();
}
/**
* 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 ModifiableConfiguration config = new DefaultConfiguration();
config.setConfigProperty(CSVProcessor.CSV_SEPARATOR, getSeparatorString());
config.setConfigProperty(CSVProcessor.CSV_DATAROWNAME, String.valueOf(isColumnNamesAsFirstRow()));
config.setConfigProperty(CSVProcessor.CSV_ENCODING, getEncoding());
config.setConfigProperty(CSVProcessor.CSV_ENABLE_GROUPFOOTERS, String.valueOf(isEnableGroupFooter()));
config.setConfigProperty(CSVProcessor.CSV_ENABLE_GROUPHEADERS, String.valueOf(isEnableGroupHeader()));
config.setConfigProperty(CSVProcessor.CSV_ENABLE_ITEMBANDS, String.valueOf(isEnableItembands()));
config.setConfigProperty(CSVProcessor.CSV_ENABLE_REPORTFOOTER, String.valueOf(isEnableReportFooter()));
config.setConfigProperty(CSVProcessor.CSV_ENABLE_REPORTHEADER, String.valueOf(isEnableReportHeader()));
config.setConfigProperty
("org.pentaho.reporting.engine.classic.core.modules.gui.csv.FileName", getFilename()); //$NON-NLS-1$
config.setConfigProperty(CSVProcessor.CSV_WRITE_STATECOLUMNS, "false"); //$NON-NLS-1$
return config;
}
/**
* Initialises the CSV export dialog from the settings in the report configuration.
*
* @param config the report configuration.
*/
protected void setDialogContents(final Configuration config)
{
// the CSV separator has two sources, either the data CSV or the
// table CSV. As we have only one input field for that property,
// we use a cascading schema to resolve this. The data oriented
// separator is preferred ...
final String tableCSVSeparator = config.getConfigProperty(CSVTableModule.SEPARATOR,
CSVDataExportDialog.COMMA_SEPARATOR);
setSeparatorString(config.getConfigProperty(CSVProcessor.CSV_SEPARATOR, tableCSVSeparator));
final String colNames = config.getConfigProperty(CSVProcessor.CSV_DATAROWNAME, "false"); //$NON-NLS-1$
setColumnNamesAsFirstRow("true".equals(colNames)); //$NON-NLS-1$
final String encoding = config.getConfigProperty(CSVProcessor.CSV_ENCODING,
CSVDataExportDialog.CSV_OUTPUT_ENCODING_DEFAULT);
encodingModel.ensureEncodingAvailable(encoding);
setEncoding(encoding);
final String stateCols = config.getConfigProperty(CSVProcessor.CSV_WRITE_STATECOLUMNS, "false"); //$NON-NLS-1$
setWriteStateColumns("true".equals(stateCols)); //$NON-NLS-1$
final String enableReportHeader = config.getConfigProperty(CSVProcessor.CSV_ENABLE_REPORTHEADER,
"false"); //$NON-NLS-1$
setEnableReportHeader("true".equals(enableReportHeader)); //$NON-NLS-1$
final String enableReportFooter = config.getConfigProperty(CSVProcessor.CSV_ENABLE_REPORTFOOTER,
"false"); //$NON-NLS-1$
setEnableReportFooter("true".equals(enableReportFooter)); //$NON-NLS-1$
final String enableGroupHeader = config.getConfigProperty(CSVProcessor.CSV_ENABLE_GROUPHEADERS,
"false"); //$NON-NLS-1$
setEnableGroupHeader("true".equals(enableGroupHeader)); //$NON-NLS-1$
final String enableGroupFooter = config.getConfigProperty(CSVProcessor.CSV_ENABLE_GROUPFOOTERS,
"false"); //$NON-NLS-1$
setEnableGroupFooter("true".equals(enableGroupFooter)); //$NON-NLS-1$
final String enableItemBand = config.getConfigProperty(CSVProcessor.CSV_ENABLE_ITEMBANDS, "false"); //$NON-NLS-1$
setEnableItembands("true".equals(enableItemBand)); //$NON-NLS-1$
final String defaultFileName = config.getConfigProperty(
"org.pentaho.reporting.engine.classic.core.modules.gui.csv.FileName"); //$NON-NLS-1$
if (defaultFileName != null)
{
setFilename(resolvePath(defaultFileName).getAbsolutePath());
}
else
{
setFilename(""); //$NON-NLS-1$
}
}
/**
* Returns the separator string, which is controlled by the selection of radio buttons.
*
* @return The separator string.
*/
public String getSeparatorString()
{
if (rbSeparatorColon.isSelected())
{
return CSVDataExportDialog.COMMA_SEPARATOR;
}
if (rbSeparatorSemicolon.isSelected())
{
return CSVDataExportDialog.SEMICOLON_SEPARATOR;
}
if (rbSeparatorTab.isSelected())
{
return CSVDataExportDialog.TAB_SEPARATOR;
}
if (rbSeparatorOther.isSelected())
{
return txSeparatorOther.getText();
}
return ""; //$NON-NLS-1$
}
/**
* Sets the separator string.
*
* @param s the separator.
*/
public void setSeparatorString(final String s)
{
if (s == null)
{
rbSeparatorOther.setSelected(true);
txSeparatorOther.setText(""); //$NON-NLS-1$
}
else if (s.equals(CSVDataExportDialog.COMMA_SEPARATOR))
{
rbSeparatorColon.setSelected(true);
}
else if (s.equals(CSVDataExportDialog.SEMICOLON_SEPARATOR))
{
rbSeparatorSemicolon.setSelected(true);
}
else if (s.equals(CSVDataExportDialog.TAB_SEPARATOR))
{
rbSeparatorTab.setSelected(true);
}
else
{
rbSeparatorOther.setSelected(true);
txSeparatorOther.setText(s);
}
performSeparatorSelection();
}
/**
* Returns the encoding.
*
* @return The encoding.
*/
public String getEncoding()
{
if (cbEncoding.getSelectedIndex() == -1)
{
return EncodingRegistry.getPlatformDefaultEncoding();
}
else
{
return encodingModel.getEncoding(cbEncoding.getSelectedIndex());
}
}
/**
* Sets the encoding.
*
* @param encoding the encoding.
*/
public void setEncoding(final String encoding)
{
cbEncoding.setSelectedIndex(encodingModel.indexOf(encoding));
}
/**
* 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
(CSVDataExportDialog.CSV_FILE_EXTENSION, getResources().getString(
"csvexportdialog.csv-file-description")); //$NON-NLS-1$
fileChooser.addChoosableFileFilter(filter);
fileChooser.setMultiSelectionEnabled(false);
}
fileChooser.setSelectedFile(new File(getFilename()));
final int option = fileChooser.showSaveDialog(this);
if (option == JFileChooser.APPROVE_OPTION)
{
final File selFile = fileChooser.getSelectedFile();
String selFileName = selFile.getAbsolutePath();
// Test if ends on csv
if (StringUtils.endsWithIgnoreCase(selFileName,
CSVDataExportDialog.CSV_FILE_EXTENSION) == false)
{
selFileName = selFileName + CSVDataExportDialog.CSV_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 <code>true</code> if the input is valid, <code>false</code> otherwise
*/
protected boolean performValidate()
{
getStatusBar().clear();
final String filename = getFilename();
if (filename.trim().length() == 0)
{
getStatusBar().setStatus(StatusType.ERROR,
getResources().getString("csvexportdialog.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("csvexportdialog.targetIsNoFile")); //$NON-NLS-1$
return false;
}
if (f.canWrite() == false)
{
getStatusBar().setStatus(StatusType.ERROR,
getResources().getString("csvexportdialog.targetIsNotWritable")); //$NON-NLS-1$
return false;
}
final String message = MessageFormat.format(getResources().getString
("csvexportdialog.targetExistsWarning"), //$NON-NLS-1$
new Object[]{filename});
getStatusBar().setStatus(StatusType.WARNING, message);
}
if (cbxEnableGroupFooter.isSelected() == false &&
cbxEnableGroupHeader.isSelected() == false &&
cbxEnableReportFooter.isSelected() == false &&
cbxEnableReportHeader.isSelected() == false &&
cbxEnableItemband.isSelected() == false)
{
getStatusBar().setStatus(StatusType.ERROR,
getResources().getString("csvexportdialog.noContentForExport")); //$NON-NLS-1$
return false;
}
return true;
}
protected boolean performConfirm()
{
final File f = new File(getFilename());
if (f.exists())
{
final String key1 = "csvexportdialog.targetOverwriteConfirmation"; //$NON-NLS-1$
final String key2 = "csvexportdialog.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;
}
/**
* 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);
}
public boolean isWriteStateColumns()
{
return cbxWriteStateColumns.isSelected();
}
public void setWriteStateColumns(final boolean writeStateColumns)
{
this.cbxWriteStateColumns.setSelected(writeStateColumns);
}
public boolean isEnableGroupFooter()
{
return cbxEnableGroupFooter.isSelected();
}
public void setEnableGroupFooter(final boolean enableGroupFooter)
{
this.cbxEnableGroupFooter.setSelected(enableGroupFooter);
}
public boolean isEnableGroupHeader()
{
return cbxEnableGroupHeader.isSelected();
}
public void setEnableGroupHeader(final boolean enableGroupHeader)
{
this.cbxEnableGroupHeader.setSelected(enableGroupHeader);
}
public boolean isEnableItembands()
{
return cbxEnableItemband.isSelected();
}
public void setEnableItembands(final boolean enableItembands)
{
this.cbxEnableItemband.setSelected(enableItembands);
}
public boolean isEnableReportFooter()
{
return cbxEnableReportFooter.isSelected();
}
public void setEnableReportFooter(final boolean enableReportFooter)
{
this.cbxEnableReportFooter.setSelected(enableReportFooter);
}
public boolean isEnableReportHeader()
{
return cbxEnableReportHeader.isSelected();
}
public void setEnableReportHeader(final boolean enableReportHeader)
{
this.cbxEnableReportHeader.setSelected(enableReportHeader);
}
protected String getConfigurationSuffix()
{
return "_csvexport"; //$NON-NLS-1$
}
protected String getConfigurationPrefix()
{
return "org.pentaho.reporting.engine.classic.core.modules.gui.csv."; //$NON-NLS-1$
}
}