/*! * 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.engine.classic.core.modules.gui.base; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dialog; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.Locale; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.BorderFactory; import javax.swing.InputMap; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.KeyStroke; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.reporting.engine.classic.core.MasterReport; import org.pentaho.reporting.engine.classic.core.ReportDataFactoryException; import org.pentaho.reporting.engine.classic.core.ReportProcessingException; import org.pentaho.reporting.engine.classic.core.parameters.DefaultParameterContext; import org.pentaho.reporting.engine.classic.core.parameters.ParameterAttributeNames; import org.pentaho.reporting.engine.classic.core.parameters.ParameterDefinitionEntry; import org.pentaho.reporting.engine.classic.core.parameters.ReportParameterDefinition; import org.pentaho.reporting.engine.classic.core.util.ReportParameterValues; import org.pentaho.reporting.libraries.base.util.ObjectUtilities; import org.pentaho.reporting.libraries.base.util.ResourceBundleSupport; import org.pentaho.reporting.libraries.designtime.swing.LibSwingUtil; /** * @author Ezequiel Cuellar */ public class PreviewParametersDialog extends JDialog { public class OkAction extends AbstractAction { public OkAction() { putValue( Action.NAME, messages.getString( "PreviewParametersDialog.Ok" ) ); } public void actionPerformed( final ActionEvent aEvt ) { final ReportParameterValues properties = parametersPanel.getReportParameterValues(); if ( properties != null ) { final ReportParameterValues reportParameters = masterReport.getParameterValues(); final String[] strings = properties.getColumnNames(); for ( int i = 0; i < strings.length; i++ ) { final String propertyName = strings[i]; reportParameters.put( propertyName, properties.get( propertyName ) ); } } confirmed = true; dispose(); } } public class CancelAction extends AbstractAction { public CancelAction() { putValue( Action.NAME, messages.getString( "PreviewParametersDialog.Cancel" ) ); } public void actionPerformed( final ActionEvent aEvt ) { confirmed = false; dispose(); } } private static final Log logger = LogFactory.getLog( PreviewParametersDialog.class ); private MasterReport masterReport; private ParameterReportControllerPane parametersPanel; private boolean confirmed; private ResourceBundleSupport messages; private PreviewParametersDialog.OkAction confirmAction; public PreviewParametersDialog( final Frame parent, final MasterReport report ) { super( parent ); initialize( report ); } public PreviewParametersDialog( final Dialog parent, final MasterReport report ) { super( parent ); initialize( report ); } public PreviewParametersDialog( final MasterReport report ) { initialize( report ); } private void initialize( final MasterReport report ) { if ( report == null ) { throw new NullPointerException(); } masterReport = report; messages = new ResourceBundleSupport( Locale.getDefault(), SwingPreviewModule.BUNDLE_NAME, ObjectUtilities .getClassLoader( PreviewParametersDialog.class ) ); confirmAction = new OkAction(); setTitle( messages.getString( "PreviewParametersDialog.Title" ) ); setDefaultCloseOperation( JDialog.DISPOSE_ON_CLOSE ); final JPanel contentPane = new JPanel(); contentPane.setLayout( new BorderLayout() ); contentPane.add( createParametersPanel(), BorderLayout.CENTER ); contentPane.add( createButtonsPanel(), BorderLayout.SOUTH ); setContentPane( contentPane ); final InputMap inputMap = contentPane.getInputMap(); final ActionMap actionMap = contentPane.getActionMap(); inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_ENTER, 0 ), "confirm" ); // NON-NLS inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_ESCAPE, 0 ), "cancel" ); // NON-NLS actionMap.put( "confirm", new OkAction() ); // NON-NLS actionMap.put( "cancel", new CancelAction() ); // NON-NLS setModal( true ); pack(); LibSwingUtil.centerDialogInParent( this ); } private JPanel createButtonsPanel() { final JButton okButton = new JButton( confirmAction ); okButton.setDefaultCapable( true ); final JPanel buttonsPanel = new JPanel(); buttonsPanel.setLayout( new FlowLayout( FlowLayout.RIGHT, 5, 5 ) ); buttonsPanel.setBorder( BorderFactory.createMatteBorder( 1, 0, 0, 0, Color.LIGHT_GRAY ) ); buttonsPanel.add( okButton ); buttonsPanel.add( new JButton( new CancelAction() ) ); return buttonsPanel; } private JPanel createParametersPanel() { parametersPanel = new ParameterReportControllerPane(); try { parametersPanel.setReport( masterReport ); } catch ( ReportProcessingException e ) { parametersPanel.setErrorMessage( e.getMessage() ); logger.error( "Failed to query parameters", e ); // NON-NLS } parametersPanel.hideControls(); final JPanel carrierPanel = new JPanel( new BorderLayout() ); carrierPanel.setBorder( BorderFactory.createEmptyBorder( 10, 10, 10, 10 ) ); carrierPanel.add( parametersPanel, BorderLayout.NORTH ); return carrierPanel; } public boolean isConfirmed() { return confirmed; } private static boolean isAllParametersHidden( final MasterReport report, final ReportParameterDefinition parameterDefinition ) { try { final DefaultParameterContext parameterContext = new DefaultParameterContext( report ); try { final ParameterDefinitionEntry[] entries = parameterDefinition.getParameterDefinitions(); for ( int i = 0; i < entries.length; i++ ) { final ParameterDefinitionEntry entry = entries[i]; if ( "true".equals( entry.getParameterAttribute( ParameterAttributeNames.Core.NAMESPACE, ParameterAttributeNames.Core.HIDDEN, parameterContext ) ) == false ) { return false; } } } finally { parameterContext.close(); } return true; } catch ( ReportDataFactoryException e ) { return false; } catch ( ReportProcessingException e ) { return false; } } public static boolean process( final Window parent, final MasterReport masterReport ) { if ( masterReport == null ) { throw new NullPointerException(); } final ReportParameterDefinition parameterDefinition = masterReport.getParameterDefinition(); if ( parameterDefinition.getParameterCount() == 0 ) { return true; } if ( isAllParametersHidden( masterReport, parameterDefinition ) ) { return true; } final PreviewParametersDialog parametersDialog; if ( parent instanceof Frame ) { parametersDialog = new PreviewParametersDialog( (Frame) parent, masterReport ); } else if ( parent instanceof Dialog ) { parametersDialog = new PreviewParametersDialog( (Dialog) parent, masterReport ); } else { parametersDialog = new PreviewParametersDialog( masterReport ); } parametersDialog.setVisible( true ); return parametersDialog.isConfirmed(); } }