/*!
* 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.platform.dataaccess.datasource.wizard.service.agile;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.platform.api.data.DBDatasourceServiceException;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.services.connection.datasource.dbcp.JndiDatasourceService;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class AgileHelper {
public static final String PLUGIN_NAME = "data-access"; //$NON-NLS-1$
private static final String STAGING_SCHEMA = "data-access-staging-schema"; //$NON-NLS-1$
private static final String STAGING_JNDI = "data-access-staging-jndi"; //$NON-NLS-1$
private static final String FILES_PATH = "data-access-files-path"; //$NON-NLS-1$
private static final String TEMP_FILES_PATH = "data-access-tmp-files-path"; //$NON-NLS-1$
private static final String SETTINGS_FILE = PLUGIN_NAME + "/settings.xml"; //$NON-NLS-1$
private static final String DATASOURCE_SOLUTION_STORAGE = "data-access-datasource-solution-storage"; //$NON-NLS-1$
private static final String CSV_SAMPLE_SIZE = "data-access-csv-sample-rows";
private static final Log logger = LogFactory.getLog( AgileHelper.class );
public static String getSchemaName() {
return PentahoSystem.getSystemSetting( SETTINGS_FILE, STAGING_SCHEMA, null );
}
public static String getDatasourceSolutionStorage() {
return PentahoSystem.getSystemSetting( SETTINGS_FILE, DATASOURCE_SOLUTION_STORAGE, "admin" );
}
public static String getDialect( DatabaseMeta meta, String jndiName ) {
String dialect = null;
try {
Connection conn = getConnection( jndiName );
dialect = conn.getMetaData().getDatabaseProductName();
if ( dialect.indexOf( "HSQL" ) >= 0 ) {
dialect = "Hypersonic";
} else if ( dialect.indexOf( "Microsoft SQL" ) >= 0) {
// Hack-around for BACKLOG-845
dialect = "MSSQLNATIVE";
}
conn.close();
} catch ( SQLException e ) {
logger.debug( "Error determining database type from connection", e );
} catch ( DBDatasourceServiceException e ) {
logger.debug( "Error determining database type from connection - getting JNDI connection", e );
}
return dialect;
}
public static String getDialect( DatabaseMeta meta ) {
return getDialect( meta, getJndiName() );
}
public static String generateTableName( String filename ) {
// TODO add other replacements to guarantee a good table name
return filename.replace( '.', '_' );
}
public static String getJndiName() {
return PentahoSystem.getSystemSetting( SETTINGS_FILE, STAGING_JNDI, null );
}
public static int getCsvSampleRowSize() {
String sampleSize = PentahoSystem.getSystemSetting( SETTINGS_FILE, CSV_SAMPLE_SIZE, null );
if ( sampleSize != null ) {
return Integer.valueOf( sampleSize );
} else {
return 100;
}
}
public static DatabaseMeta getDatabaseMeta() {
// get the database settings from configuration
String jndi = getJndiName();
DatabaseMeta databaseMeta = new DatabaseMeta();
databaseMeta.setAccessType( DatabaseMeta.TYPE_ACCESS_JNDI );
databaseMeta.setDBName( jndi );
databaseMeta.setName( jndi );
String dialect = getDialect( databaseMeta );
databaseMeta.setDatabaseType( dialect );
databaseMeta.setQuoteAllFields( true );
return databaseMeta;
}
public static Connection getConnection( String jndiName ) throws DBDatasourceServiceException, SQLException {
JndiDatasourceService jndiService = new JndiDatasourceService();
DataSource ds = jndiService.getDataSource( jndiName );
return ds.getConnection();
}
public static String getFolderPath( String project ) {
String folderPath = PentahoSystem.getSystemSetting( SETTINGS_FILE, FILES_PATH, null );
if ( folderPath != null ) {
folderPath = PentahoSystem.getApplicationContext().getSolutionPath( folderPath + project );
}
return folderPath;
}
public static String getTmpFolderPath( String project ) {
String folderPath = PentahoSystem.getSystemSetting( SETTINGS_FILE, TEMP_FILES_PATH, null );
if ( folderPath != null ) {
folderPath = PentahoSystem.getApplicationContext().getSolutionPath( folderPath + project );
}
return folderPath;
}
public static String getProjectMetadataFolder( String project ) {
return project + "/resources/metadata";
}
}