/*! * 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) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.ui.datasources.pmd; import org.pentaho.reporting.engine.classic.core.designtime.DesignTimeContext; import org.pentaho.reporting.engine.classic.core.designtime.DesignTimeUtil; import org.pentaho.reporting.engine.classic.extensions.datasources.pmd.PmdConnectionProvider; import org.pentaho.reporting.engine.classic.extensions.datasources.pmd.SimplePmdDataFactory; import org.pentaho.reporting.libraries.base.util.FilesystemFilter; import org.pentaho.reporting.libraries.base.util.IOUtils; import org.pentaho.reporting.libraries.base.util.StringUtils; import org.pentaho.reporting.libraries.designtime.swing.CommonDialog; import org.pentaho.reporting.libraries.designtime.swing.VerticalLayout; import org.pentaho.reporting.libraries.designtime.swing.filechooser.CommonFileChooser; import org.pentaho.reporting.libraries.designtime.swing.filechooser.FileChooserService; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileFilter; import java.awt.*; import java.awt.event.ActionEvent; import java.io.File; /** * @author David Kincade */ public class SimplePmdDataSourceEditor extends CommonDialog { private class BrowseAction extends AbstractAction { protected BrowseAction() { putValue( Action.NAME, Messages.getString( "PmdDataSourceEditor.Browse.Name" ) ); } public void actionPerformed( final ActionEvent e ) { final File initiallySelectedFile; final File reportContextFile = DesignTimeUtil.getContextAsFile( context.getReport() ); if ( StringUtils.isEmpty( filenameField.getText(), true ) == false ) { if ( reportContextFile != null ) { initiallySelectedFile = new File( reportContextFile.getParentFile(), filenameField.getText() ); } else { initiallySelectedFile = new File( filenameField.getText() ); } } else { initiallySelectedFile = null; // NON-NLS } final FileFilter[] fileFilters = new FileFilter[] { new FilesystemFilter( new String[] { ".xmi" }, // NON-NLS Messages.getString( "PmdDataSourceEditor.XmiFileName" ) + " (*.xmi)", true ) }; // NON-NLS final CommonFileChooser fileChooser = FileChooserService.getInstance().getFileChooser( "xmifile" ); fileChooser.setSelectedFile( initiallySelectedFile ); fileChooser.setFilters( fileFilters ); if ( fileChooser.showDialog( SimplePmdDataSourceEditor.this, JFileChooser.OPEN_DIALOG ) == false ) { return; } final File file = fileChooser.getSelectedFile(); if ( file == null ) { return; } final String path; if ( reportContextFile != null ) { path = IOUtils.getInstance().createRelativePath( file.getPath(), reportContextFile.getAbsolutePath() ); } else { path = file.getPath(); } filenameField.setText( path ); } } private class DomainTextFieldDocumentListener implements DocumentListener { public void insertUpdate( final DocumentEvent e ) { update(); } public void removeUpdate( final DocumentEvent e ) { update(); } public void changedUpdate( final DocumentEvent e ) { update(); } private void update() { updateComponents(); } } private class FilenameDocumentListener implements DocumentListener { public void insertUpdate( final DocumentEvent e ) { updateComponents(); } public void removeUpdate( final DocumentEvent e ) { updateComponents(); } public void changedUpdate( final DocumentEvent e ) { updateComponents(); } } private JTextField domainIdTextField; private JTextField filenameField; private DesignTimeContext context; public SimplePmdDataSourceEditor( final DesignTimeContext context ) { init( context ); } public SimplePmdDataSourceEditor( final DesignTimeContext context, final Dialog owner ) { super( owner ); init( context ); } public SimplePmdDataSourceEditor( final DesignTimeContext context, final Frame owner ) { super( owner ); init( context ); } private void init( final DesignTimeContext context ) { if ( context == null ) { throw new NullPointerException(); } this.context = context; setModal( true ); setTitle( Messages.getString( "PmdDataSourceEditor.Title" ) ); filenameField = new JTextField( null, 0 ); filenameField.setColumns( 30 ); filenameField.getDocument().addDocumentListener( new FilenameDocumentListener() ); domainIdTextField = new JTextField( null, 0 ); domainIdTextField.setColumns( 35 ); domainIdTextField.getDocument().addDocumentListener( new DomainTextFieldDocumentListener() ); super.init(); } protected String getDialogId() { return "PmdDataSourceEditor.Simple"; } protected Component createContentPane() { final JPanel filePanel = new JPanel(); filePanel.setLayout( new BoxLayout( filePanel, BoxLayout.X_AXIS ) ); filePanel.add( filenameField ); filePanel.add( new JButton( new BrowseAction() ) ); final JPanel queryConfigurationPanel = new JPanel(); queryConfigurationPanel.setLayout( new VerticalLayout( 5, VerticalLayout.BOTH, VerticalLayout.TOP ) ); queryConfigurationPanel.add( new JLabel( Messages.getString( "PmdDataSourceEditor.XmiFileLabel" ) ) ); queryConfigurationPanel.add( filePanel ); queryConfigurationPanel.add( new JLabel( Messages.getString( "PmdDataSourceEditor.DomainId" ) ) ); queryConfigurationPanel.add( domainIdTextField ); final JPanel contentPanel = new JPanel( new BorderLayout() ); contentPanel.add( queryConfigurationPanel, BorderLayout.CENTER ); contentPanel.setBorder( BorderFactory.createEmptyBorder( 5, 5, 5, 5 ) ); return contentPanel; } public SimplePmdDataFactory performConfiguration( final SimplePmdDataFactory dataFactory ) { // Load the current configuration if ( dataFactory != null ) { filenameField.setText( dataFactory.getXmiFile() ); domainIdTextField.setText( dataFactory.getDomainId() ); } // Prepare the data and the enable the proper buttons updateComponents(); // Enable the dialog pack(); setLocationRelativeTo( getParent() ); if ( !performEdit() ) { return null; } return createDataFactory(); } private SimplePmdDataFactory createDataFactory() { final SimplePmdDataFactory returnDataFactory = new SimplePmdDataFactory(); returnDataFactory.setXmiFile( filenameField.getText() ); returnDataFactory.setDomainId( domainIdTextField.getText() ); returnDataFactory.setConnectionProvider( new PmdConnectionProvider() ); return returnDataFactory; } protected void updateComponents() { final boolean isFileSelected = !StringUtils.isEmpty( filenameField.getText(), true ); domainIdTextField.setEnabled( isFileSelected ); } }