package org.teiid.designer.teiidimporter.ui.panels; import java.util.Collection; import java.util.Properties; import org.eclipse.datatools.connectivity.IConnectionProfile; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; import org.teiid.designer.teiidimporter.ui.UiConstants; import org.teiid.designer.ui.common.UiConstants.ConnectionProfileIds; /** * Lookup the translator name given the IConnectionProfile * @since 8.1 */ @SuppressWarnings("javadoc") public class TranslatorHelper implements UiConstants { 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 GOOGLE_SOURCE_PROPERTY_KEY_AUTH_METHOD = "AuthMethod"; //$NON-NLS-1$ public static final String GOOGLE_SOURCE_PROPERTY_VALUE_AUTH_CLIENT_LOGIN = "ClientLogin"; //$NON-NLS-1$ public static final String GOOGLE_SOURCE_PROPERTY_VALUE_AUTH_OAUTH2 = "OAuth2"; //$NON-NLS-1$ public static final String GOOGLE_SOURCE_PROPERTY_KEY_REFRESH_TOKEN = "RefreshToken"; //$NON-NLS-1$ public static final String GOOGLE_SOURCE_PROPERTY_KEY_USERNAME = "Username"; //$NON-NLS-1$ public static final String GOOGLE_SOURCE_PROPERTY_KEY_PASSWORD = "Password"; //$NON-NLS-1$ public static final String TEIID_FILE_DRIVER = "teiid-connector-file.rar"; //$NON-NLS-1$ public static final String TEIID_GOOGLE_DRIVER = "teiid-connector-google.rar"; //$NON-NLS-1$ public static final String TEIID_INFINISPAN_DRIVER = "teiid-connector-infinispan.rar"; //$NON-NLS-1$ public static final String TEIID_LDAP_DRIVER = "teiid-connector-ldap.rar"; //$NON-NLS-1$ public static final String TEIID_SALESORCE_DRIVER = "teiid-connector-salesforce.rar"; //$NON-NLS-1$ public static final String TEIID_WEBSERVICE_DRIVER = "teiid-connector-ws.rar"; //$NON-NLS-1$ public static final String TEIID_FILE_DRIVER_84UP = "file"; //$NON-NLS-1$ public static final String TEIID_GOOGLE_DRIVER_84UP = "google"; //$NON-NLS-1$ public static final String TEIID_INFINISPAN_DRIVER_84UP = "infinispan"; //$NON-NLS-1$ public static final String TEIID_LDAP_DRIVER_84UP = "ldap"; //$NON-NLS-1$ public static final String TEIID_SALESORCE_DRIVER_84UP = "salesforce"; //$NON-NLS-1$ public static final String TEIID_WEBSERVICE_DRIVER_84UP = "webservice"; //$NON-NLS-1$ public static final String TEIID_MONGODB_DRIVER_84UP = "mongodb"; //$NON-NLS-1$ public static final String TEIID_FILE_DRIVER_DISPLAYNAME = "FlatFile"; //$NON-NLS-1$ public static final String TEIID_GOOGLE_DRIVER_DISPLAYNAME = "Google"; //$NON-NLS-1$ public static final String TEIID_INFINISPAN_DRIVER_DISPLAYNAME = "Infinispan"; //$NON-NLS-1$ public static final String TEIID_LDAP_DRIVER_DISPLAYNAME = "LDAP"; //$NON-NLS-1$ public static final String TEIID_SALESORCE_DRIVER_DISPLAYNAME = "Salesforce"; //$NON-NLS-1$ public static final String TEIID_WEBSERVICE_DRIVER_DISPLAYNAME = "WebService"; //$NON-NLS-1$ public static final String TEIID_GOOGLE_CLASS = "org.teiid.resource.adapter.google.SpreadsheetManagedConnectionFactory"; //$NON-NLS-1$ public static final String ACCESS = "access"; //$NON-NLS-1$ public static final String DB2 = "db2"; //$NON-NLS-1$ public static final String DERBY = "derby"; //$NON-NLS-1$ public static final String FILE = "file"; //$NON-NLS-1$ public static final String GOOGLE_SPREADSHEET = "google-spreadsheet"; //$NON-NLS-1$ public static final String H2 = "h2"; //$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 HANA = "hana"; //$NON-NLS-1$ public static final String INFINISPAN = "infinispan-cache"; //$NON-NLS-1$ public static final String INFORMIX = "informix"; //$NON-NLS-1$ public static final String INGRES = "ingres"; //$NON-NLS-1$ public static final String INGRES93 = "ingres93"; //$NON-NLS-1$ public static final String INTERSYSTEMS_CACHE = "intersystems-cache"; //$NON-NLS-1$ public static final String JDBC_ANSI = "jdbc-ansi"; //$NON-NLS-1$ public static final String JDBC_SIMPLE = "jdbc-simple"; //$NON-NLS-1$ public static final String JPA2 = "jpa2"; //$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 MAP_CACHE = "map-cache"; //$NON-NLS-1$ public static final String METAMATRIX = "metamatrix"; //$NON-NLS-1$ public static final String MODESHAPE = "modeshape"; //$NON-NLS-1$ public static final String MONGODB = "mongodb"; //$NON-NLS-1$ public static final String MYSQL = "mysql"; //$NON-NLS-1$ public static final String MYSQL5 = "mysql5"; //$NON-NLS-1$ public static final String NETEZZA = "netezza"; //$NON-NLS-1$ public static final String OLAP = "olap"; //$NON-NLS-1$ public static final String ORACLE = "oracle"; //$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 SALESFORCE = "salesforce"; //$NON-NLS-1$ public static final String SQLSERVER = "sqlserver"; //$NON-NLS-1$ public static final String SYBASE = "sybase"; //$NON-NLS-1$ public static final String TEIID = "teiid"; //$NON-NLS-1$ public static final String TERADATA = "teradata"; //$NON-NLS-1$ public static final String WS = "ws"; //$NON-NLS-1$ public static final String URL_DB2 = "jdbc:db2://<host>:50000/<dbName>"; //$NON-NLS-1$ public static final String URL_DERBY = "jdbc:derby://<host>:1527/<dbName>;create=true"; //$NON-NLS-1$ public static final String URL_INFORMIX = "jdbc:informix-sqli://<host>:1526/<dbName>:INFORMIXSERVER=server"; //$NON-NLS-1$ public static final String URL_INGRES = "jdbc:ingres://<host>:117/<dbName>"; //$NON-NLS-1$ public static final String URL_MODESHAPE = "jdbc:jcr:http://<host>:8080/modeshape-rest/"; //$NON-NLS-1$ public static final String URL_MYSQL = "jdbc:mysql://<host>:3306/<dbName>"; //$NON-NLS-1$ public static final String URL_ORACLETHIN = "jdbc:oracle:thin:@<host>:1521:<dbName>"; //$NON-NLS-1$ public static final String URL_POSTGRES = "jdbc:postgresql://<host>:5432/<dbName>"; //$NON-NLS-1$ public static final String URL_SQLSERVER = "jdbc:sqlserver://<host>:1433;databaseName=<dbName>"; //$NON-NLS-1$ public static final String URL_TEIID = "jdbc:teiid:<vdbName>@mms://<host>:31000"; //$NON-NLS-1$ public static final String URL_JDBC = "jdbc://<host>:<port>"; //$NON-NLS-1$ public static final String URL_SAP_HANA = "jdbc:sap://<host>:3<instance number>15"; //$NON-NLS-1$ /** * Get the best fit translator, given the driverName and list of translator names * @param driverName the driver name * @param translatorNames the list of current translators * @param teiidVersion the Teiid Version * @return the best fit translator for the provided driver */ public static String getTranslator(String driverName, Collection<String> translatorNames, ITeiidServerVersion teiidVersion) { CoreArgCheck.isNotEmpty(driverName,"driverName is Empty"); //$NON-NLS-1$ CoreArgCheck.isNotEmpty(translatorNames,"translatorNames is Empty"); //$NON-NLS-1$ boolean isTeiid84OrHigher = isTeiid84OrHigher(teiidVersion); if(!isTeiid84OrHigher) { if(driverName.equals(TEIID_FILE_DRIVER) && translatorNames.contains(FILE)) { return FILE; } if(driverName.equals(TEIID_GOOGLE_DRIVER) && translatorNames.contains(GOOGLE_SPREADSHEET)) { return GOOGLE_SPREADSHEET; } if(driverName.equals(TEIID_INFINISPAN_DRIVER) && translatorNames.contains(INFINISPAN)) { return INFINISPAN; } if(driverName.equals(TEIID_LDAP_DRIVER) && translatorNames.contains(LDAP)) { return LDAP; } if(driverName.equals(TEIID_SALESORCE_DRIVER) && translatorNames.contains(SALESFORCE)) { return SALESFORCE; } if(driverName.equals(TEIID_WEBSERVICE_DRIVER) && translatorNames.contains(WS)) { return WS; } } else { if(driverName.equals(TEIID_FILE_DRIVER_84UP) && translatorNames.contains(FILE)) { return FILE; } if(driverName.equals(TEIID_GOOGLE_DRIVER_84UP) && translatorNames.contains(GOOGLE_SPREADSHEET)) { return GOOGLE_SPREADSHEET; } if(driverName.equals(TEIID_INFINISPAN_DRIVER_84UP) && translatorNames.contains(INFINISPAN)) { return INFINISPAN; } if(driverName.equals(TEIID_LDAP_DRIVER_84UP) && translatorNames.contains(LDAP)) { return LDAP; } if(driverName.equals(TEIID_SALESORCE_DRIVER_84UP) && translatorNames.contains(SALESFORCE)) { return SALESFORCE; } if(driverName.equals(TEIID_WEBSERVICE_DRIVER_84UP) && translatorNames.contains(WS)) { return WS; } if(driverName.equals(TEIID_MONGODB_DRIVER_84UP) && translatorNames.contains(MONGODB)) { return MONGODB; } } // Attempt name matching to guess any drivers that are not built in. String driverNameLC = driverName.toLowerCase(); if(driverNameLC.startsWith("derby")) { //$NON-NLS-1$ return DERBY; } if(driverNameLC.startsWith("mysql")) { //$NON-NLS-1$ return MYSQL; } if(driverNameLC.startsWith("ojdbc")) { //$NON-NLS-1$ return ORACLE; } if(driverNameLC.startsWith("db2")) { //$NON-NLS-1$ return DB2; } if(driverNameLC.startsWith("postgresql")) { //$NON-NLS-1$ return POSTGRESQL; } if(driverNameLC.startsWith("sqljdbc")) { //$NON-NLS-1$ return SQLSERVER; } if(driverNameLC.startsWith("teiid")) { //$NON-NLS-1$ return TEIID; } if(driverNameLC.startsWith("modeshape")) { //$NON-NLS-1$ return MODESHAPE; } if(driverNameLC.startsWith("ifxjdbc")) { //$NON-NLS-1$ return INFORMIX; } if(driverNameLC.startsWith("iijdbc")) { //$NON-NLS-1$ return INGRES; } if(driverNameLC.startsWith("jconn")) { //$NON-NLS-1$ return SYBASE; } if(driverNameLC.contains("hive")) { //$NON-NLS-1$ return HIVE; } if(driverNameLC.contains("ngdbc")) { //$NON-NLS-1$ return HANA; } return JDBC_ANSI; } /** * Test whether the version is 8.4 or higher. (.rar deployments were changed in 8.4) * We assume false, and may not be able to determine - if wildcards are used. * @param teiidVersion the Teiid Instance version * @return 'true' if the version is 8.4 or higher, 'false' if lower or unknown */ public static boolean isTeiid84OrHigher(ITeiidServerVersion teiidVersion) { CoreArgCheck.isNotNull(teiidVersion,"teiidVersion is null"); //$NON-NLS-1$ try { // Seven or lower String major = teiidVersion.getMajor(); if(Integer.parseInt(major) <= 7) { return false; } // Nine or higher if(Integer.parseInt(major) >= 9) { return true; } // Version 8 - check minor version String minor = teiidVersion.getMinor(); if(Integer.parseInt(minor) >=4 ) { return true; } } catch (Exception e) { UTIL.log(e); return false; } return false; } /** * Get the URL Template given a driver name * @param driverName the driver name * @return the URL Template */ public static String getUrlTemplate(String driverName) { CoreArgCheck.isNotEmpty(driverName,"driverName is Empty"); //$NON-NLS-1$ if(driverName.startsWith("derby")) { //$NON-NLS-1$ return URL_DERBY; } if(driverName.startsWith("mysql")) { //$NON-NLS-1$ return URL_MYSQL; } if(driverName.startsWith("ojdbc")) { //$NON-NLS-1$ return URL_ORACLETHIN; } if(driverName.startsWith("db2")) { //$NON-NLS-1$ return URL_DB2; } if(driverName.startsWith("postgresql")) { //$NON-NLS-1$ return URL_POSTGRES; } if(driverName.startsWith("sqljdbc")) { //$NON-NLS-1$ return URL_SQLSERVER; } if(driverName.startsWith("ifxjdbc")) { //$NON-NLS-1$ return URL_INFORMIX; } if(driverName.startsWith("iijdbc")) { //$NON-NLS-1$ return URL_INGRES; } if(driverName.startsWith("teiid")) { //$NON-NLS-1$ return URL_TEIID; } if(driverName.startsWith("modeshape")) { //$NON-NLS-1$ return URL_MODESHAPE; } if( driverName.startsWith("sap") || driverName.contains("ngdbc")) { //$NON-NLS-1$ //$NON-NLS-2$ return URL_SAP_HANA; } return URL_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) { Properties baseProps = connectionProfile.getBaseProperties(); String providerId = connectionProfile.getProviderId(); if(providerId!=null) { if(providerId.equalsIgnoreCase(ConnectionProfileIds.CATEGORY_SALESFORCE_CONNECTION)) { return SALESFORCE; } else if(providerId.equalsIgnoreCase(ConnectionProfileIds.CATEGORY_LDAP_CONNECTION)) { return LDAP; } } String vendor = baseProps.getProperty(VENDOR_KEY); String version = baseProps.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(MYSQL.toUpperCase()) ) { if( version != null && version.startsWith("5")) { //$NON-NLS-1$ return MYSQL5; } return MYSQL; } } return JDBC_SIMPLE; } }