/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.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 General Public License for more details.
*
* Copyright 2005 - 2008 Pentaho Corporation. All rights reserved.
*
* Created Aug 29, 2005
* @author wseyler
*/
package org.pentaho.platform.engine.services.connection;
import java.util.Properties;
import org.pentaho.commons.connection.IPentahoConnection;
import org.pentaho.platform.api.engine.ILogger;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.api.engine.ObjectFactoryException;
import org.pentaho.platform.engine.core.system.IPentahoLoggingConnection;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.services.messages.Messages;
import org.pentaho.platform.util.logging.Logger;
/**
* @author wseyler
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class PentahoConnectionFactory {
private static final String CONNECTION_PREFIX = "connection-"; //$NON-NLS-1$
/**
* @param datasourceType
* valid type is defined as SQL_DATASOURCE or MDX_DATASOURCE
* @return a connection object that can be queried against.
*/
public static IPentahoConnection getConnection(final String datasourceType, final IPentahoSession session,
final ILogger logger) {
/*
* TODO - This is where the "connection factory" action occurs. Based on
* if the datasourceType, location, username, or password have changed
* then we create a new one.
*/
return getConnection(datasourceType, (Properties) null, session, logger);
}
/**
* @param datasourceType
* valid type is defined as SQL_DATASOURCE or MDX_DATASOURCE
* @param connectStr -
* In the case of SQL_DATASOURCE, the name of the JNDI connection
* to use. Or in the case of MDX_DATASOURCE a properly formatted
* connection String.
* @return a connection object that can be queried against.
*/
public static IPentahoConnection getConnection(final String datasourceType, final String connectStr,
final IPentahoSession session, final ILogger logger) {
Properties props = new Properties();
props.put(IPentahoConnection.JNDI_NAME_KEY, connectStr);
return getConnection(datasourceType, props, session, logger);
}
/**
* @param datasourceType
* valid types are defined as SQL_DATASOURCE, MDX_DATASOURCE and
* XML_DATASOURCE
* @param location -
* A string specfic to the location and type of datasource. For
* an SQL instance it would be the URL string required by the
* implementing driver.
* @param userName
* @param password
* @return a connection object that can be queried against.
*/
public static IPentahoConnection getConnection(final String datasourceType, final String driver,
final String location, final String userName, final String password, final IPentahoSession session,
final ILogger logger) {
Properties props = new Properties();
if (driver != null) {
props.put(IPentahoConnection.DRIVER_KEY, driver);
}
if (location != null) {
props.put(IPentahoConnection.LOCATION_KEY, location);
}
if (userName != null) {
props.put(IPentahoConnection.USERNAME_KEY, userName);
}
if (password != null) {
props.put(IPentahoConnection.PASSWORD_KEY, password);
}
return getConnection(datasourceType, props, session, logger);
}
/**
*
* @param datasourceType
* @param properties can be null
* @param session can be null
* @param logger
* @return
*/
public static IPentahoConnection getConnection(final String datasourceType, Properties properties,
final IPentahoSession session, final ILogger logger) {
/*
* TODO - This is where the "connection factory" action occurs. Based on
* if the datasourceType, location, username, or password have changed
* then we create a new one.
*/
String key = CONNECTION_PREFIX + datasourceType;
IPentahoConnection connection = null;
try {
connection = PentahoSystem.getObjectFactory().get(IPentahoConnection.class, key, session);
if (connection instanceof IPentahoLoggingConnection) {
((IPentahoLoggingConnection) connection).setLogger(logger);
}
connection.setProperties(properties);
} catch (ObjectFactoryException e) {
Logger.error(PentahoSystem.class.getName(), Messages.getInstance().getErrorString(
"PentahoConnectionFactory.ERROR_0001_COULD_NOT_CREATE_CONNECTION", key), e); //$NON-NLS-1$
}
return connection;
}
}