/*! * 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.olap4j; import org.pentaho.reporting.engine.classic.core.designtime.DesignTimeContext; import org.pentaho.reporting.engine.classic.extensions.datasources.olap4j.connections.DriverConnectionProvider; import org.pentaho.reporting.engine.classic.extensions.datasources.olap4j.connections.JndiConnectionProvider; import org.pentaho.reporting.engine.classic.extensions.datasources.olap4j.connections.OlapConnectionProvider; import org.pentaho.reporting.libraries.base.util.ObjectUtilities; import org.pentaho.reporting.libraries.designtime.swing.LibSwingUtil; import org.pentaho.reporting.ui.datasources.jdbc.connection.DriverConnectionDefinition; import org.pentaho.reporting.ui.datasources.jdbc.connection.JdbcConnectionDefinition; import org.pentaho.reporting.ui.datasources.jdbc.connection.JndiConnectionDefinition; import org.pentaho.reporting.ui.datasources.jdbc.ui.ConnectionPanel; import org.pentaho.reporting.ui.datasources.jdbc.ui.DataSourceDialogModel; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.util.Properties; public class OlapConnectionPanel extends ConnectionPanel { private class EditSecurityAction extends AbstractAction { /** * Defines an <code>Action</code> object with a default description string and default icon. */ private EditSecurityAction() { putValue( Action.NAME, Messages.getString( "ConnectionPanel.EditSecurityAction.Name" ) ); } /** * Invoked when an action occurs. */ public void actionPerformed( final ActionEvent e ) { final DesignTimeContext designTimeContext = getDesignTimeContext(); final DataSourceDialogModel dialogModel = getDialogModel(); if ( securityDialog == null ) { final Window window = LibSwingUtil.getWindowAncestor( OlapConnectionPanel.this ); if ( window instanceof Frame ) { securityDialog = new Olap4JSecurityDialog( (Frame) window, designTimeContext ); } else if ( window instanceof Dialog ) { securityDialog = new Olap4JSecurityDialog( (Dialog) window, designTimeContext ); } else { securityDialog = new Olap4JSecurityDialog( designTimeContext ); } } securityDialog.setRoleField( roleField ); securityDialog.setJdbcPasswordField( dialogModel.getJdbcPasswordField() ); securityDialog.setJdbcUserField( dialogModel.getJdbcUserField() ); if ( securityDialog.performEdit() ) { roleField = securityDialog.getRoleField(); dialogModel.setJdbcUserField( securityDialog.getJdbcUserField() ); dialogModel.setJdbcPasswordField( securityDialog.getJdbcPasswordField() ); } } } private Olap4JSecurityDialog securityDialog; private String roleField; public OlapConnectionPanel( final DataSourceDialogModel aDialogModel, final DesignTimeContext designTimeContext ) { super( aDialogModel, designTimeContext ); initPanel(); } public JdbcConnectionDefinition createConnectionDefinition( final OlapConnectionProvider currentJNDISource ) { final DataSourceDialogModel dialogModel = getDialogModel(); if ( currentJNDISource instanceof DriverConnectionProvider ) { final DriverConnectionProvider dcp = (DriverConnectionProvider) currentJNDISource; final ListModel model = dialogModel.getConnections(); for ( int i = 0; i < model.getSize(); i++ ) { final JdbcConnectionDefinition definition = (JdbcConnectionDefinition) model.getElementAt( i ); if ( definition instanceof DriverConnectionDefinition == false ) { continue; } final DriverConnectionDefinition dcd = (DriverConnectionDefinition) definition; if ( ObjectUtilities.equal( dcd.getUsername(), dcp.getProperty( "JdbcUser" ) ) && ObjectUtilities.equal( dcd.getPassword(), dcp.getProperty( "JdbcPassword" ) ) && ObjectUtilities.equal( dcd.getConnectionString(), dcp.getProperty( "Jdbc" ) ) && ObjectUtilities.equal( dcd.getDriverClass(), dcp.getProperty( "JdbcDrivers" ) ) && ObjectUtilities.equal( dcd.getName(), dcp.getProperty( "::pentaho-reporting::name" ) ) ) { return definition; } } String customName = dcp.getProperty( "::pentaho-reporting::name" ); if ( customName == null ) { customName = Messages.getString( "Olap4JDataSourceEditor.CustomConnection" ); } final String[] strings = dcp.getPropertyNames(); final Properties p = new Properties(); for ( int i = 0; i < strings.length; i++ ) { final String string = strings[ i ]; p.put( string, dcp.getProperty( string ) ); } return new DriverConnectionDefinition ( customName, dcp.getDriver(), dcp.getUrl(), dcp.getProperty( "user" ), dcp.getProperty( "password" ), dcp.getProperty( "::pentaho-reporting::hostname" ), dcp.getProperty( "::pentaho-reporting::database-name" ), dcp.getProperty( "::pentaho-reporting::database-type" ), dcp.getProperty( "::pentaho-reporting::port" ), p ); } if ( currentJNDISource instanceof JndiConnectionProvider ) { final JndiConnectionProvider jcp = (JndiConnectionProvider) currentJNDISource; final ListModel model = dialogModel.getConnections(); for ( int i = 0; i < model.getSize(); i++ ) { final JdbcConnectionDefinition definition = (JdbcConnectionDefinition) model.getElementAt( i ); if ( definition instanceof JndiConnectionDefinition == false ) { continue; } final JndiConnectionDefinition dcd = (JndiConnectionDefinition) definition; if ( ObjectUtilities.equal( dcd.getJndiName(), jcp.getConnectionPath() ) ) { return dcd; } } return new JndiConnectionDefinition( Messages.getString( "Olap4JDataSourceEditor.CustomConnection" ), jcp.getConnectionPath(), null, jcp.getUsername(), jcp.getPassword() ); } return null; } public String getRoleField() { return roleField; } public void setRoleField( final String roleField ) { this.roleField = roleField; } protected Action createEditSecurityAction() { return new EditSecurityAction(); } }