package org.teiid.designer.datatools;
import org.eclipse.datatools.connectivity.IConnectionProfile;
/**
* @since 8.0
*/
public class JdbcTranslatorHelper {
public static final String VENDOR_KEY = "org.eclipse.datatools.connectivity.db.vendor"; //$NON-NLS-1$
public static final String VERSION_KEY = "org.eclipse.datatools.connectivity.db.version"; //$NON-NLS-1$
public static final String INFORMIX = "informix"; //$NON-NLS-1$
public static final String SYBASE = "sybase"; //$NON-NLS-1$
public static final String TEIID = "teiid"; //$NON-NLS-1$
// NOTE: For PostgreSQL vendor leaves off the QL, so we need to be careful to map this correctly
public static final String POSTGRES = "postgres"; //$NON-NLS-1$
public static final String POSTGRESQL = "postgresql"; //$NON-NLS-1$
public static final String ACCESS = "access"; //$NON-NLS-1$
public static final String HIVE = "hive"; //$NON-NLS-1$
public static final String HSQL = "hsql"; //$NON-NLS-1$
public static final String INGRES = "ingres"; //$NON-NLS-1$
public static final String ORACLE = "oracle"; //$NON-NLS-1$
public static final String MONGODB = "mongodb"; //$NON-NLS-1$
public static final String MYSQL5 = "mysql5"; //$NON-NLS-1$
public static final String JDBC_SIMPLE = "jdbc-simple"; //$NON-NLS-1$
public static final String JDBC_ANSI = "jdbc-ansi"; //$NON-NLS-1$
public static final String SQLSERVER = "sqlserver"; //$NON-NLS-1$
public static final String DB2 = "db2"; //$NON-NLS-1$
public static final String MYSQL = "mysql"; //$NON-NLS-1$
public static final String H2 = "h2"; //$NON-NLS-1$
public static final String DERBY = "derby"; //$NON-NLS-1$
public static final String MODESHAPE = "modeshape"; //$NON-NLS-1$
public static final String FILE = "file"; //$NON-NLS-1$
public static final String LDAP = "ldap"; //$NON-NLS-1$
public static final String LOOPBACK = "loopback"; //$NON-NLS-1$
public static final String SALESFORCE = "salesforce"; //$NON-NLS-1$
public static final String TERADATA = "teradata"; //$NON-NLS-1$
public static final String WS = "ws"; //$NON-NLS-1$
// Teiid Data Source Type names:
//
// connector-jdbc-xa, connector-file, connector-ldap, connector-ws, connector-salesforce, connector-jdbc
//
/**
* Returns the JDBC Simple translator if a vendor-specific one cannot be determined.
*
* @param connectionProfile the {@link IConnectionProfile} whose translator is being requested
* @return the translator name (never <code>null</code>)
*/
public static String getTranslator(IConnectionProfile connectionProfile) {
String vendor = connectionProfile.getBaseProperties().getProperty(VENDOR_KEY);
String version = connectionProfile.getBaseProperties().getProperty(VERSION_KEY);
// Assume that vendor has to be a property
if( vendor != null ) {
if( vendor.toUpperCase().startsWith(INFORMIX.toUpperCase()) ) {
return INFORMIX;
}
if( vendor.toUpperCase().startsWith(ORACLE.toUpperCase()) ) {
return ORACLE;
}
if( vendor.toUpperCase().startsWith("SQL SERVER".toUpperCase()) ) { //$NON-NLS-1$
return SQLSERVER;
}
if( vendor.toUpperCase().startsWith(DERBY.toUpperCase()) ) {
return DERBY;
}
if( vendor.toUpperCase().startsWith(POSTGRES.toUpperCase()) ) {
return POSTGRESQL;
}
if( vendor.toUpperCase().startsWith(SYBASE.toUpperCase()) ) {
return SYBASE;
}
if( vendor.toUpperCase().startsWith(TEIID.toUpperCase()) ) {
return TEIID;
}
if( vendor.toUpperCase().startsWith(DB2.toUpperCase()) ) {
return DB2;
}
if( vendor.toUpperCase().startsWith(MODESHAPE.toUpperCase()) ) {
return MODESHAPE;
}
if( vendor.toUpperCase().startsWith(MYSQL.toUpperCase()) ) {
if( version != null && version.startsWith("5")) { //$NON-NLS-1$
return MYSQL5;
}
return MYSQL;
}
}
return JDBC_SIMPLE;
}
/**
* Attempts to determine a translator name from the provided driverClassName
* @param driverClassName the driver name
* @return the translator name (never <code>null</code>)
*/
public static String getTranslatorFromDriverName(String driverClassName) {
if(driverClassName==null) return JDBC_SIMPLE;
// Attempt name matching for any drivers that are not built-in
if(driverClassName.equals("com.ingres.jdbc.IngresDriver")) { //$NON-NLS-1$
return INGRES;
}
if(driverClassName.equals("org.apache.hive.jdbc.HiveDriver") || driverClassName.equals("org.apache.hadoop.hive.jdbc.HiveDriver")) { //$NON-NLS-1$ //$NON-NLS-2$
return HIVE;
}
if(driverClassName.equals("net.sf.mongodb_jdbc_driver.MongoDbDriver")) { //$NON-NLS-1$
return MONGODB;
}
return JDBC_SIMPLE;
}
/**
* For a given connection profile, this method returns a model processor type based on vendor names similar to
* translator mapping.
*
* Whether or not an actual custom model processor exists is based on what was contributed.
*
* @param connectionProfile
* @return the processor type
*/
public static String getModelProcessorType(IConnectionProfile connectionProfile) {
String vendor = connectionProfile.getBaseProperties().getProperty(VENDOR_KEY);
// Assume that vendor has to be a property
if( vendor != null ) {
if( vendor.toUpperCase().startsWith(INFORMIX.toUpperCase()) ) {
return INFORMIX;
}
if( vendor.toUpperCase().startsWith(ORACLE.toUpperCase()) ) {
return ORACLE;
}
if( vendor.toUpperCase().startsWith("SQL SERVER".toUpperCase()) ) { //$NON-NLS-1$
return SQLSERVER;
}
if( vendor.toUpperCase().startsWith(DERBY.toUpperCase()) ) {
return DERBY;
}
if( vendor.toUpperCase().startsWith(POSTGRES.toUpperCase()) ) {
return POSTGRES;
}
if( vendor.toUpperCase().startsWith(SYBASE.toUpperCase()) ) {
return SYBASE;
}
if( vendor.toUpperCase().startsWith(TEIID.toUpperCase()) ) {
return TEIID;
}
if( vendor.toUpperCase().startsWith(DB2.toUpperCase()) ) {
return DB2;
}
if( vendor.toUpperCase().startsWith(MYSQL.toUpperCase()) ) {
return MYSQL;
}
if( vendor.toUpperCase().startsWith(MODESHAPE.toUpperCase()) ) {
return MODESHAPE;
}
}
return JDBC_SIMPLE;
}
/*
* Strings taken from DTP
*
* DB2 for
derby
informix
ingres
"MaxDB"
MySQL (version 4.0, 4.1, 5.0, 5.1)
oracle
PostgreSQL (8.x)
SQL Server
SQLite
Sybase Adaptive Server Anywhere
Sybase Adaptive Server Enterprise
Teiid
*/
}