/* * 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 - 2013 Object Refinery Ltd, Pentaho Corporation and Contributors.. All rights reserved. */ package org.pentaho.reporting.engine.classic.core.modules.gui.plaintext; import java.awt.BorderLayout; 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.Arrays; 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.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; 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 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.common.StatusType; import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.JStatusBar; import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.action.AbstractFileSelectionAction; import org.pentaho.reporting.engine.classic.core.modules.output.pageable.plaintext.PlainTextPageableModule; import org.pentaho.reporting.engine.classic.core.modules.output.pageable.plaintext.driver.Epson24PinPrinterDriver; import org.pentaho.reporting.engine.classic.core.modules.output.pageable.plaintext.driver.Epson9PinPrinterDriver; import org.pentaho.reporting.engine.classic.core.modules.output.pageable.plaintext.driver.IBMCompatiblePrinterDriver; import org.pentaho.reporting.engine.classic.core.modules.output.pageable.plaintext.helper.PrinterSpecification; import org.pentaho.reporting.engine.classic.core.modules.output.pageable.plaintext.helper.PrinterSpecificationManager; import org.pentaho.reporting.libraries.base.config.Configuration; import org.pentaho.reporting.libraries.base.config.DefaultConfiguration; import org.pentaho.reporting.libraries.base.util.Messages; import org.pentaho.reporting.libraries.base.util.ObjectUtilities; import org.pentaho.reporting.libraries.designtime.swing.KeyedComboBoxModel; import org.pentaho.reporting.libraries.fonts.encoding.EncodingRegistry; import org.pentaho.reporting.libraries.xmlns.common.ParserUtil; /** * A dialog that is used to export reports to plain text. * * @author Thomas Morgner. */ public class PlainTextExportDialog extends AbstractExportDialog { private Messages messages; /** * An action to select a file. */ private class ActionSelectFile extends AbstractFileSelectionAction { private final ResourceBundle resources; /** * Defines an <code>Action</code> object with a default description string and default icon. */ protected ActionSelectFile( final ResourceBundle resources ) { super( PlainTextExportDialog.this ); this.resources = resources; putValue( Action.NAME, resources.getString( "plain-text-exportdialog.selectFile" ) ); //$NON-NLS-1$ } /** * Returns a descriptive text describing the file extension. * * @return the file description. */ protected String getFileDescription() { return resources.getString( "plain-text-exportdialog.fileDescription" ); //$NON-NLS-1$ } /** * Returns the file extension that should be used for the operation. * * @return the file extension. */ protected String getFileExtension() { return PlainTextExportDialog.TXT_FILE_EXTENSION; } /** * Invoked when an action occurs. * * @param e * the action event. */ public void actionPerformed( final ActionEvent e ) { final File selectedFile = performSelectFile( new File( getFilename() ), JFileChooser.SAVE_DIALOG, true ); if ( selectedFile != null ) { setFilename( selectedFile.getPath() ); } } } /** * An action to select a plain printer. */ private class ActionSelectPrinter extends AbstractAction { private int printer; /** * Defines an <code>Action</code> object with a default description string and default icon. */ protected ActionSelectPrinter( final String printerName, final int printer ) { putValue( Action.NAME, printerName ); this.printer = printer; } /** * Invoked when an action occurs. * * @param e * the action event. */ public void actionPerformed( final ActionEvent e ) { setSelectedPrinter( printer ); } } private class SelectEpsonModelAction extends AbstractAction { /** * Defines an <code>Action</code> object with a default description string and default icon. */ protected SelectEpsonModelAction() { } /** * Invoked when an action occurs. */ public void actionPerformed( final ActionEvent e ) { if ( getSelectedPrinter() == PlainTextExportDialog.TYPE_EPSON9_OUTPUT ) { updateEpson9Encoding(); } else if ( getSelectedPrinter() == PlainTextExportDialog.TYPE_EPSON24_OUTPUT ) { updateEpson24Encoding(); } } } private static final String TXT_FILE_EXTENSION = ".txt"; //$NON-NLS-1$ /** * Plain text output. */ public static final int TYPE_PLAIN_OUTPUT = 0; /** * Epson printer output. */ public static final int TYPE_EPSON9_OUTPUT = 1; /** * IBM printer output. */ public static final int TYPE_IBM_OUTPUT = 2; /** * Epson printer output. */ public static final int TYPE_EPSON24_OUTPUT = 3; private static final String[] PRINTER_NAMES = new String[] { "plain-text-exportdialog.printer.plain", //$NON-NLS-1$ "plain-text-exportdialog.printer.epson9", //$NON-NLS-1$ "plain-text-exportdialog.printer.ibm", //$NON-NLS-1$ "plain-text-exportdialog.printer.epson24", //$NON-NLS-1$ }; /** * 6 lines per inch. */ public static final Float LPI_6 = new Float( 6 ); /** * 10 lines per inch. */ public static final Float LPI_10 = new Float( 10 ); /** * 10 characters per inch. */ public static final Float CPI_10 = new Float( 10 ); /** * 12 characters per inch. */ public static final Float CPI_12 = new Float( 12 ); /** * 15 characters per inch. */ public static final Float CPI_15 = new Float( 15 ); /** * 17 characters per inch. */ public static final Float CPI_17 = new Float( 17.14f ); /** * 20 characters per inch. */ public static final Float CPI_20 = new Float( 20 ); /** * A combo-box for selecting the encoding. */ private EncodingSelector encodingSelector; /** * A radio button for selecting plain printer commands. */ private JRadioButton rbPlainPrinterCommandSet; /** * A radio button for selecting Epson 9-pin printer commands. */ private JRadioButton rbEpson9PrinterCommandSet; /** * A radio button for selecting Epson 24-pin printer commands. */ private JRadioButton rbEpson24PrinterCommandSet; /** * A radio button for selecting IBM printer commands. */ private JRadioButton rbIBMPrinterCommandSet; /** * The filename text field. */ private JTextField txFilename; /** * A combo-box for selecting lines per inch. */ private JComboBox cbLinesPerInch; /** * A combo-box for selecting characters per inch. */ private JComboBox cbCharsPerInch; private JComboBox cbEpson9PrinterType; private JComboBox cbEpson24PrinterType; private KeyedComboBoxModel epson9Printers; private KeyedComboBoxModel epson24Printers; private JStatusBar statusBar; private static final String EXPORT_TYPE_CONFIG_KEY = "org.pentaho.reporting.engine.classic.core.modules.gui.plaintext.ExportType"; /** * Creates a non-modal dialog without a title and without a specified Frame owner. A shared, hidden frame will be set * as the owner of the Dialog. */ public PlainTextExportDialog() { init(); } /** * Creates a non-modal dialog without a title with the specified Frame as its owner. * * @param owner * the Frame from which the dialog is displayed */ public PlainTextExportDialog( final Frame owner ) { super( owner ); init(); } /** * Creates a non-modal dialog without a title with the specified Dialog as its owner. * * @param owner * the Dialog from which the dialog is displayed */ public PlainTextExportDialog( final Dialog owner ) { super( owner ); init(); } /** * Initialize the dialog. */ private void init() { setTitle( getResources().getString( "plain-text-exportdialog.dialogtitle" ) ); //$NON-NLS-1$ messages = new Messages( Locale.getDefault(), PlainTextExportGUIModule.BUNDLE_NAME, ObjectUtilities .getClassLoader( PlainTextExportGUIModule.class ) ); epson9Printers = loadEpson9Printers(); epson24Printers = loadEpson24Printers(); cbEpson9PrinterType = new JComboBox( epson9Printers ); cbEpson9PrinterType.addActionListener( new SelectEpsonModelAction() ); cbEpson24PrinterType = new JComboBox( epson24Printers ); cbEpson24PrinterType.addActionListener( new SelectEpsonModelAction() ); statusBar = new JStatusBar(); final Float[] lpiModel = { PlainTextExportDialog.LPI_6, PlainTextExportDialog.LPI_10 }; final Float[] cpiModel = { PlainTextExportDialog.CPI_10, PlainTextExportDialog.CPI_12, PlainTextExportDialog.CPI_15, PlainTextExportDialog.CPI_17, PlainTextExportDialog.CPI_20 }; cbLinesPerInch = new JComboBox( new DefaultComboBoxModel( lpiModel ) ); cbCharsPerInch = new JComboBox( new DefaultComboBoxModel( cpiModel ) ); final String plainPrinterName = getResources().getString( PlainTextExportDialog.PRINTER_NAMES[PlainTextExportDialog.TYPE_PLAIN_OUTPUT] ); final String epson9PrinterName = getResources().getString( PlainTextExportDialog.PRINTER_NAMES[PlainTextExportDialog.TYPE_EPSON9_OUTPUT] ); final String epson24PrinterName = getResources().getString( PlainTextExportDialog.PRINTER_NAMES[PlainTextExportDialog.TYPE_EPSON24_OUTPUT] ); final String ibmPrinterName = getResources().getString( PlainTextExportDialog.PRINTER_NAMES[PlainTextExportDialog.TYPE_IBM_OUTPUT] ); rbPlainPrinterCommandSet = new JRadioButton( new ActionSelectPrinter( plainPrinterName, PlainTextExportDialog.TYPE_PLAIN_OUTPUT ) ); rbEpson9PrinterCommandSet = new JRadioButton( new ActionSelectPrinter( epson9PrinterName, PlainTextExportDialog.TYPE_EPSON9_OUTPUT ) ); rbEpson24PrinterCommandSet = new JRadioButton( new ActionSelectPrinter( epson24PrinterName, PlainTextExportDialog.TYPE_EPSON24_OUTPUT ) ); rbIBMPrinterCommandSet = new JRadioButton( new ActionSelectPrinter( ibmPrinterName, PlainTextExportDialog.TYPE_IBM_OUTPUT ) ); txFilename = new JTextField(); encodingSelector = new EncodingSelector(); final ButtonGroup bg = new ButtonGroup(); bg.add( rbPlainPrinterCommandSet ); bg.add( rbIBMPrinterCommandSet ); bg.add( rbEpson9PrinterCommandSet ); bg.add( rbEpson24PrinterCommandSet ); getFormValidator().registerTextField( txFilename ); getFormValidator().registerButton( rbEpson24PrinterCommandSet ); getFormValidator().registerButton( rbEpson9PrinterCommandSet ); getFormValidator().registerButton( rbIBMPrinterCommandSet ); getFormValidator().registerButton( rbPlainPrinterCommandSet ); final JComponent exportPane = createExportPane(); final Configuration config = ClassicEngineBoot.getInstance().getGlobalConfig(); final boolean advancedSettingsTabAvail = "true" .equals( config .getConfigProperty( "org.pentaho.reporting.engine.classic.core.modules.gui.plaintext.AdvancedSettingsAvailable" ) ); final JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.add( getResources().getString( "plain-text-exportdialog.export-settings" ), exportPane ); //$NON-NLS-1$ tabbedPane.add( getResources().getString( "plain-text-exportdialog.parameters" ), getParametersPanel() ); if ( advancedSettingsTabAvail ) { tabbedPane.add( getResources().getString( "plain-text-exportdialog.advanced-settings" ), createAdvancedPane() ); //$NON-NLS-1$ } setContentPane( createContentPane( tabbedPane ) ); clear(); } private KeyedComboBoxModel loadEpson24Printers() { final KeyedComboBoxModel epsonPrinters = new KeyedComboBoxModel(); final PrinterSpecificationManager spec24Manager = Epson24PinPrinterDriver.loadSpecificationManager(); final String[] printer24Names = spec24Manager.getPrinterNames(); Arrays.sort( printer24Names ); for ( int i = 0; i < printer24Names.length; i++ ) { final PrinterSpecification pspec = spec24Manager.getPrinter( printer24Names[i] ); epsonPrinters.add( pspec, pspec.getDisplayName() ); } return epsonPrinters; } private KeyedComboBoxModel loadEpson9Printers() { final KeyedComboBoxModel epsonPrinters = new KeyedComboBoxModel(); final PrinterSpecificationManager spec9Manager = Epson9PinPrinterDriver.loadSpecificationManager(); final String[] printer9Names = spec9Manager.getPrinterNames(); Arrays.sort( printer9Names ); for ( int i = 0; i < printer9Names.length; i++ ) { final PrinterSpecification pspec = spec9Manager.getPrinter( printer9Names[i] ); epsonPrinters.add( pspec, pspec.getDisplayName() ); } return epsonPrinters; } public JStatusBar getStatusBar() { return statusBar; } /** * Creates the content pane for the export dialog. * * @return the created content pane. */ private JComponent 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( "plain-text-exportdialog.filename" ) ); //$NON-NLS-1$ final JButton btnSelect = new JButton( new ActionSelectFile( getResources() ) ); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.anchor = GridBagConstraints.WEST; gbc.insets = new Insets( 3, 1, 1, 1 ); contentPane.add( lblFileName, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 1; gbc.gridx = 1; gbc.gridy = 0; gbc.ipadx = 120; gbc.gridwidth = 2; gbc.insets = new Insets( 3, 1, 1, 1 ); contentPane.add( txFilename, gbc ); gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.NORTHWEST; gbc.gridx = 3; gbc.gridy = 0; contentPane.add( btnSelect, gbc ); final JPanel advancedOptionsPane = new JPanel(); advancedOptionsPane.setLayout( new BorderLayout() ); advancedOptionsPane.add( contentPane, BorderLayout.NORTH ); return advancedOptionsPane; } /** * Creates the content pane for the export dialog. * * @return the created content pane. */ private JComponent createAdvancedPane() { final JPanel contentPane = new JPanel(); contentPane.setLayout( new GridBagLayout() ); contentPane.setBorder( BorderFactory.createEmptyBorder( 3, 3, 3, 3 ) ); final JLabel lblPrinterSelect = new JLabel( getResources().getString( "plain-text-exportdialog.printer" ) ); //$NON-NLS-1$ final JLabel lblEncoding = new JLabel( getResources().getString( "plain-text-exportdialog.encoding" ) ); //$NON-NLS-1$ final JLabel lblCharsPerInch = new JLabel( getResources().getString( "plain-text-exportdialog.chars-per-inch" ) ); //$NON-NLS-1$ final JLabel lblLinesPerInch = new JLabel( getResources().getString( "plain-text-exportdialog.lines-per-inch" ) ); //$NON-NLS-1$ final JLabel lblFontSettings = new JLabel( getResources().getString( "plain-text-exportdialog.font-settings" ) ); //$NON-NLS-1$ GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.WEST; gbc.gridx = 0; gbc.gridy = 0; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( lblEncoding, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 1; gbc.gridy = 0; gbc.gridwidth = 3; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( encodingSelector, gbc ); gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.WEST; gbc.gridx = 0; gbc.gridy = 1; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( lblPrinterSelect, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 1; gbc.gridy = 1; gbc.gridwidth = 2; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( rbPlainPrinterCommandSet, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 1; gbc.gridy = 2; gbc.gridwidth = 2; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( rbIBMPrinterCommandSet, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 1; gbc.gridy = 3; gbc.gridwidth = 2; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( rbEpson9PrinterCommandSet, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridx = 3; gbc.gridy = 3; gbc.gridwidth = 1; gbc.insets = new Insets( 1, 1, 1, 1 ); gbc.fill = GridBagConstraints.HORIZONTAL; contentPane.add( cbEpson9PrinterType, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 1; gbc.gridy = 4; gbc.gridwidth = 2; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( rbEpson24PrinterCommandSet, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridx = 3; gbc.gridy = 4; gbc.gridwidth = 1; gbc.insets = new Insets( 1, 1, 1, 1 ); gbc.fill = GridBagConstraints.HORIZONTAL; contentPane.add( cbEpson24PrinterType, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.NONE; gbc.weightx = 0; gbc.gridx = 0; gbc.gridy = 6; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( lblFontSettings, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 2; gbc.gridy = 6; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( lblCharsPerInch, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 1; gbc.gridy = 6; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( cbCharsPerInch, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 2; gbc.gridy = 7; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( lblLinesPerInch, gbc ); gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.weightx = 0; gbc.gridx = 1; gbc.gridy = 7; gbc.insets = new Insets( 1, 1, 1, 1 ); contentPane.add( cbLinesPerInch, gbc ); final JPanel advancedOptionsPane = new JPanel(); advancedOptionsPane.setLayout( new BorderLayout() ); advancedOptionsPane.add( contentPane, BorderLayout.NORTH ); return advancedOptionsPane; } protected void updateEpson9Encoding() { final PrinterSpecification spec = (PrinterSpecification) epson9Printers.getSelectedKey(); if ( spec == null ) { encodingSelector.setEncodings( PrinterSpecificationManager.getGenericPrinter(), getGuiContext().getLocale() ); } else { encodingSelector.setEncodings( spec, getGuiContext().getLocale() ); } } protected void updateEpson24Encoding() { final PrinterSpecification spec = (PrinterSpecification) epson9Printers.getSelectedKey(); if ( spec == null ) { encodingSelector.setEncodings( PrinterSpecificationManager.getGenericPrinter(), getGuiContext().getLocale() ); } else { encodingSelector.setEncodings( spec, getGuiContext().getLocale() ); } } /** * Sets the selected printer. * * @param type * the type. */ public void setSelectedPrinter( final int type ) { final Locale locale = getGuiContext().getLocale(); final String oldEncoding = getEncoding(); if ( type == PlainTextExportDialog.TYPE_EPSON9_OUTPUT ) { rbEpson9PrinterCommandSet.setSelected( true ); cbEpson9PrinterType.setEnabled( true ); cbEpson24PrinterType.setEnabled( false ); updateEpson9Encoding(); } else if ( type == PlainTextExportDialog.TYPE_EPSON24_OUTPUT ) { rbEpson24PrinterCommandSet.setSelected( true ); cbEpson24PrinterType.setEnabled( true ); cbEpson9PrinterType.setEnabled( false ); updateEpson24Encoding(); } else if ( type == PlainTextExportDialog.TYPE_IBM_OUTPUT ) { rbIBMPrinterCommandSet.setSelected( true ); cbEpson9PrinterType.setEnabled( false ); cbEpson24PrinterType.setEnabled( false ); encodingSelector.setEncodings( new IBMCompatiblePrinterDriver.GenericIBMPrinterSpecification(), locale ); } else if ( type == PlainTextExportDialog.TYPE_PLAIN_OUTPUT ) { rbPlainPrinterCommandSet.setSelected( true ); cbEpson9PrinterType.setEnabled( false ); cbEpson24PrinterType.setEnabled( false ); encodingSelector.setEncodings( new EncodingSelector.GenericPrinterSpecification(), locale ); } else { throw new IllegalArgumentException(); } if ( oldEncoding != null ) { setEncoding( oldEncoding ); } } /** * Returns the selected printer. * * @return The printer type. */ public int getSelectedPrinter() { if ( rbPlainPrinterCommandSet.isSelected() ) { return PlainTextExportDialog.TYPE_PLAIN_OUTPUT; } if ( rbEpson9PrinterCommandSet.isSelected() ) { return PlainTextExportDialog.TYPE_EPSON9_OUTPUT; } if ( rbEpson24PrinterCommandSet.isSelected() ) { return PlainTextExportDialog.TYPE_EPSON24_OUTPUT; } return PlainTextExportDialog.TYPE_IBM_OUTPUT; } /** * Returns the filename. * * @return the name of the file where to save the file. */ public String getFilename() { return txFilename.getText(); } /** * Defines the filename of the file. * * @param filename * the filename of the file */ public void setFilename( final String filename ) { this.txFilename.setText( filename ); } /** * clears all selections, input fields and set the selected encryption level to none. */ public void clear() { txFilename.setText( "" ); //$NON-NLS-1$ setSelectedPrinter( PlainTextExportDialog.TYPE_PLAIN_OUTPUT ); cbEpson9PrinterType.setEnabled( false ); cbEpson9PrinterType.setSelectedItem( Epson9PinPrinterDriver.getDefaultPrinter() ); cbEpson24PrinterType.setEnabled( false ); cbEpson24PrinterType.setSelectedItem( Epson24PinPrinterDriver.getDefaultPrinter() ); cbCharsPerInch.setSelectedItem( PlainTextExportDialog.CPI_10 ); cbLinesPerInch.setSelectedItem( PlainTextExportDialog.LPI_6 ); setEncoding( EncodingRegistry.getPlatformDefaultEncoding() ); } /** * Returns the lines-per-inch setting. * * @return The lines-per-inch setting. */ public float getLinesPerInch() { final Float i = (Float) cbLinesPerInch.getSelectedItem(); if ( i == null ) { return PlainTextExportDialog.LPI_6.floatValue(); } return i.floatValue(); } /** * Sets the lines per inch. * * @param lpi * the lines per inch. */ public void setLinesPerInch( final float lpi ) { final Float lpiObj = new Float( lpi ); final ComboBoxModel model = cbLinesPerInch.getModel(); for ( int i = 0; i < model.getSize(); i++ ) { if ( lpiObj.equals( model.getElementAt( i ) ) ) { cbLinesPerInch.setSelectedIndex( i ); return; } } throw new IllegalArgumentException( messages.getErrorString( "PlainTextExportDialog.ERROR_0001_NO_SUCH_LPI", String .valueOf( lpi ) ) ); //$NON-NLS-1$ //$NON-NLS-2$ } /** * Returns the characters-per-inch setting. * * @return The characters-per-inch setting. */ public float getCharsPerInch() { final Float i = (Float) cbCharsPerInch.getSelectedItem(); if ( i == null ) { return PlainTextExportDialog.CPI_10.floatValue(); } return i.floatValue(); } /** * Sets the characters per inch. * * @param cpi * the characters per inch. */ public void setCharsPerInch( final float cpi ) { final Float cpiObj = new Float( cpi ); final ComboBoxModel model = cbCharsPerInch.getModel(); for ( int i = 0; i < model.getSize(); i++ ) { if ( cpiObj.equals( model.getElementAt( i ) ) ) { cbCharsPerInch.setSelectedIndex( i ); return; } } throw new IllegalArgumentException( messages.getErrorString( "PlainTextExportDialog.ERROR_0002_NO_SUCH_CPI", String .valueOf( cpi ) ) ); //$NON-NLS-1$ //$NON-NLS-2$ } /** * Returns the encoding. * * @return The encoding. */ public String getEncoding() { return encodingSelector.getSelectedEncoding(); } /** * Sets the encoding. * * @param encoding * the encoding. */ public void setEncoding( final String encoding ) { if ( encoding == null ) { throw new NullPointerException( getResources().getString( "PlainTextExportDialog.ERROR_0003_NULL_ENCODING" ) ); //$NON-NLS-1$ } encodingSelector.setSelectedEncoding( encoding ); } protected void setDialogContents( final Configuration config ) { setEncoding( config.getConfigProperty( PlainTextPageableModule.ENCODING, PlainTextPageableModule.ENCODING_DEFAULT ) ); setSelected9PinPrinterModel( config.getConfigProperty( Epson9PinPrinterDriver.EPSON_9PIN_PRINTER_TYPE, getSelected9PinPrinterModel() ) ); setSelected24PinPrinterModel( config.getConfigProperty( Epson24PinPrinterDriver.EPSON_24PIN_PRINTER_TYPE, getSelected24PinPrinterModel() ) ); final String mode = config.getConfigProperty( EXPORT_TYPE_CONFIG_KEY ); //$NON-NLS-1$ if ( "9pin".equals( mode ) ) { //$NON-NLS-1$ setSelectedPrinter( PlainTextExportDialog.TYPE_EPSON9_OUTPUT ); } else if ( "24pin".equals( mode ) ) { //$NON-NLS-1$ setSelectedPrinter( PlainTextExportDialog.TYPE_EPSON24_OUTPUT ); } else if ( "ibm".equals( mode ) ) { //$NON-NLS-1$ setSelectedPrinter( PlainTextExportDialog.TYPE_IBM_OUTPUT ); } else { setSelectedPrinter( PlainTextExportDialog.TYPE_PLAIN_OUTPUT ); } try { final String lpi = config.getConfigProperty( PlainTextPageableModule.LINES_PER_INCH ); setLinesPerInch( ParserUtil.parseFloat( lpi, 6 ) ); } catch ( IllegalArgumentException e ) { // ignore } try { final String cpi = config.getConfigProperty( PlainTextPageableModule.CHARS_PER_INCH ); setCharsPerInch( ParserUtil.parseFloat( cpi, 10 ) ); } catch ( IllegalArgumentException e ) { // ignore } final String defaultFileName = config.getConfigProperty( "org.pentaho.reporting.engine.classic.core.modules.gui.plaintext.FileName" ); //$NON-NLS-1$ if ( defaultFileName != null ) { setFilename( resolvePath( defaultFileName ).getAbsolutePath() ); } } /** * Stores the input from the dialog into the report configuration of the report. */ protected Configuration grabDialogContents( final boolean full ) { final DefaultConfiguration config = new DefaultConfiguration(); config.setConfigProperty( PlainTextPageableModule.ENCODING, getEncoding() ); config.setConfigProperty( PlainTextPageableModule.CHARS_PER_INCH, String.valueOf( getCharsPerInch() ) ); config.setConfigProperty( PlainTextPageableModule.LINES_PER_INCH, String.valueOf( getLinesPerInch() ) ); config.setConfigProperty( Epson9PinPrinterDriver.EPSON_9PIN_PRINTER_TYPE, getSelected9PinPrinterModel() ); config.setConfigProperty( Epson24PinPrinterDriver.EPSON_24PIN_PRINTER_TYPE, getSelected24PinPrinterModel() ); if ( full ) { switch ( getSelectedPrinter() ) { case PlainTextExportDialog.TYPE_EPSON24_OUTPUT: { config.setConfigProperty( EXPORT_TYPE_CONFIG_KEY, "24pin" ); //$NON-NLS-1$ //$NON-NLS-2$ break; } case PlainTextExportDialog.TYPE_EPSON9_OUTPUT: { config.setConfigProperty( EXPORT_TYPE_CONFIG_KEY, "9pin" ); //$NON-NLS-1$ //$NON-NLS-2$ break; } case PlainTextExportDialog.TYPE_IBM_OUTPUT: { config.setConfigProperty( EXPORT_TYPE_CONFIG_KEY, "ibm" ); //$NON-NLS-1$ //$NON-NLS-2$ break; } case PlainTextExportDialog.TYPE_PLAIN_OUTPUT: { config.setConfigProperty( EXPORT_TYPE_CONFIG_KEY, "plain" ); //$NON-NLS-1$ //$NON-NLS-2$ break; } default: throw new IllegalStateException(); } config.setConfigProperty( "org.pentaho.reporting.engine.classic.core.modules.gui.plaintext.FileName", getFilename() ); //$NON-NLS-1$ } return config; } protected String getConfigurationSuffix() { return "_plaintextexport"; //$NON-NLS-1$ } protected String getResourceBaseName() { return PlainTextExportGUIModule.BUNDLE_NAME; } /** * 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( "plain-text-exportdialog.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( "plain-text-exportdialog.targetIsNoFile" ) ); //$NON-NLS-1$ return false; } if ( f.canWrite() == false ) { getStatusBar().setStatus( StatusType.ERROR, getResources().getString( "plain-text-exportdialog.targetIsNotWritable" ) ); //$NON-NLS-1$ return false; } final String message = MessageFormat.format( getResources().getString( "plain-text-exportdialog.targetOverwriteWarning" ), new Object[] { filename } ); //$NON-NLS-1$ 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 = "plain-text-exportdialog.targetOverwriteConfirmation"; //$NON-NLS-1$ final String key2 = "plain-text-exportdialog.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; } /** * Warning: Might return null! * * @return */ public String getSelected9PinPrinterModel() { return (String) cbEpson9PrinterType.getSelectedItem(); } public String getSelected24PinPrinterModel() { return (String) cbEpson24PrinterType.getSelectedItem(); } public void setSelected9PinPrinterModel( final String selectedPrinterModel ) { final int size = epson9Printers.getSize(); for ( int i = 0; i < size; i++ ) { final PrinterSpecification spec = (PrinterSpecification) epson9Printers.getKeyAt( i ); if ( spec.getDisplayName().equals( selectedPrinterModel ) ) { epson9Printers.setSelectedKey( spec ); return; } } epson9Printers.setSelectedKey( null ); } public void setSelected24PinPrinterModel( final String selectedPrinterModel ) { final int size = epson24Printers.getSize(); for ( int i = 0; i < size; i++ ) { final PrinterSpecification spec = (PrinterSpecification) epson24Printers.getKeyAt( i ); if ( spec.getDisplayName().equals( selectedPrinterModel ) ) { epson24Printers.setSelectedKey( spec ); return; } } epson24Printers.setSelectedKey( null ); } protected String getConfigurationPrefix() { return "org.pentaho.reporting.engine.classic.core.modules.gui.plaintext."; //$NON-NLS-1$ } }