// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package net.sourceforge.sqlexplorer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import net.sourceforge.sqlexplorer.dbproduct.DriverManager;
import net.sourceforge.sqlexplorer.dbproduct.ManagedDriver;
import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.ILibraryManagerService;
/**
* DOC qzhang class global comment. Detailled comment <br/>
*
* $Id: talend.epf 1 2006-09-29 17:06:40Z qzhang $
*
*/
public enum EDriverName {
ODBCDEFAULTURL("Generic ODBC", //$NON-NLS-1$
"sun.jdbc.odbc.JdbcOdbcDriver", //$NON-NLS-1$
"-1"), //$NON-NLS-1$
MYSQLDEFAULTURL("Mysql", //$NON-NLS-1$
"org.gjt.mm.mysql.Driver", //$NON-NLS-1$
"-6",
"mysql-connector-java-5.1.22-bin.jar"),
HSQLDEFAULTURL("HSql", //$NON-NLS-1$
"org.hsqldb.jdbcDriver", //$NON-NLS-1$
"-18",
"hsqldb.jar"),
ORACLEDEFAULTURL("Oracle", //$NON-NLS-1$
// MOD scorreia 2008-08-22: oracle.jdbc.driver package is not
// supported anymore: replaced
"oracle.jdbc.OracleDriver", //$NON-NLS-1$
"-4",
"ojdbc14.jar"),
MSSQLDEFAULTURL("MSSQL", //$NON-NLS-1$
"net.sourceforge.jtds.jdbc.Driver", //$NON-NLS-1$
"-11", "jtds-1.2.5.jar"), //$NON-NLS-1$
MSSQL2008URL("MSSQL2008", //$NON-NLS-1$
"com.microsoft.sqlserver.jdbc.SQLServerDriver", //$NON-NLS-1$
"-52", isAboveJDK15() ? "sqljdbc4.jar" : "sqljdbc.jar"), //$NON-NLS-1$
DB2DEFAULTURL("DB2", //$NON-NLS-1$
"com.ibm.db2.jcc.DB2Driver", //$NON-NLS-1$
"-24",
"db2jcc_license_cu.jar",
"db2jcc_license_cisuz.jar",
"db2jcc.jar"),
DB2ZOSDEFAULTURL("DB2", //$NON-NLS-1$
"COM.ibm.db2os390.sqlj.jdbc.DB2SQLJDriver", //$NON-NLS-1$
"-42",
"db2jcc_license_cu.jar",
"db2jcc_license_cisuz.jar",
"db2jcc.jar"),
POSTGRESQLEFAULTURL("PostgreSQL", //$NON-NLS-1$
"org.postgresql.Driver", //$NON-NLS-1$
"-7",
"postgresql-8.1-405.jdbc3.jar"),
INTERBASEDEFAULTURL("Interbase", //$NON-NLS-1$
"interbase.interclient.Driver", //$NON-NLS-1$
"-3",
"interclient.jar"),
SYBASEDEFAULTURL("Sybase", //$NON-NLS-1$
"com.sybase.jdbc3.jdbc.SybDriver", //$NON-NLS-1$
"-9",
"jconn3.jar"),
INFORMIXDEFAULTURL("Informix", //$NON-NLS-1$
"com.informix.jdbc.IfxDriver", //$NON-NLS-1$
"-26",
"ifxjdbc.jar"), //$NON-NLS-1$
FIREBIRDDEFAULTURL("FireBird", //$NON-NLS-1$
"org.firebirdsql.jdbc.FBDriver", //$NON-NLS-1$
"-25",
"jaybird-2.1.1.jar"),
TERADATADEFAULTURL("Teradata",
// MOD klliu 2010-06-04 bug 12819: upgrade jdbc driver class used in sql explorer
"com.teradata.jdbc.TeraDriver",
"-50",
"terajdbc4.jar",
"tdgssconfig.jar"),
SQLITE3DEFAULTURL("SQLite", "org.sqlite.JDBC", "-30", "sqlitejdbc-v056.jar"),
AS400DEFAULTURL("AS400", "com.ibm.as400.access.AS400JDBCDriver", "-51", "jt400_V5R3.jar"),
// MOD klliu bug 14791 add ingres database url and modify default_driver.xml
INGRESDEFAULTURL("Ingres", "ca.ingres.jdbc.IngresDriver", "-88", "iijdbc.jar"),
NETEZZADEFAULTURL("Netezza", "org.netezza.Driver", "-66", "nzjdbc.jar"), //$NON-NLS-1$
VERTICA("Vertica", "com.vertica.Driver", "-70", "vertica_4.1.14_jdk_5.jar"), //$NON-NLS-1$
VERTICA2("Vertica", "com.vertica.jdbc.Driver", "-71", "vertica-jdk5-6.0.0-0.jar"), //$NON-NLS-1$
HIVE("Hive", //$NON-NLS-1$
"org.apache.hadoop.hive.jdbc.HiveDriver", //$NON-NLS-1$
"-55", //$NON-NLS-1$
"hive-jdbc-0.9.0.jar", //$NON-NLS-1$
"hive-metastore-0.9.0.jar", //$NON-NLS-1$
"hive-exec-0.9.0.jar", //$NON-NLS-1$
"hive-service-0.9.0.jar", //$NON-NLS-1$
"libfb303_new.jar", //$NON-NLS-1$
"hadoop-core-1.0.0.jar", //$NON-NLS-1$
"commons-logging-1.0.4.jar", "log4j-1.2.15.jar", "slf4j-api-1.6.1.jar", "slf4j-log4j12-1.6.1.jar") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
;
private final String dbKey;
private final String dbDriver;
private String sqlEid;
private String[] jars;
private static ILibraryManagerService libManagerServic = null;
// MOD gdbu 2011-4-20 bug : 18975
private static Map<String, ArrayList<String>> special_database = new HashMap<String, ArrayList<String>>();
static {
ArrayList spDB = new ArrayList();
spDB.add("com.mysql.jdbc.Driver");//$NON-NLS-1$
special_database.put("org.gjt.mm.mysql.Driver", spDB);//$NON-NLS-1$
// MOD gdbu 2011-6-9 bug : 21854
ArrayList oracleJDBCDB = new ArrayList();
oracleJDBCDB.add("oracle.jdbc.driver.OracleDriver");//$NON-NLS-1$
special_database.put("oracle.jdbc.OracleDriver", oracleJDBCDB);//$NON-NLS-1$
// ~ 21854
// According to the above example we can continue to fill special driverclass name...
}
// ~18975
EDriverName(String dbKey, String dbDriver, String sqlEid, String... jars) {
this.dbKey = dbKey;
this.dbDriver = dbDriver;
this.sqlEid = sqlEid;
this.jars = jars;
}
public String getDBKey() {
return dbKey;
}
/**
* Getter for dbDriver.
*
* @return the dbDriver
*/
public String getDbDriver() {
return dbDriver;
}
/**
* Getter for sqlEid.
*
* @return the sqlEid
*/
public String getSqlEid() {
return this.sqlEid;
}
/**
* DOC qzhang Comment method "getJars".
*
* @return
*/
public LinkedList<String> getJars() {
// find jdbc jar path from 'lib/java'.if not found,find it from "librariesIndex.xml"
LinkedList<String> linkedList = new LinkedList<String>();
if (this.getLibManagerServic() != null) {
boolean jarNotFound = false;
for (String jarName : jars) {
String libPath = libManagerServic.getJarPath(jarName);
if (libPath == null) {
jarNotFound = true;
break;
}
linkedList.add(libPath);
}
if (jarNotFound) {
linkedList.clear();
}
}
return linkedList;
}
public static Boolean isAboveJDK15() {
Float curVersion = Float.parseFloat(StringUtils.substringBeforeLast(System.getProperty("java.version"), "."));
return NumberUtils.compare(curVersion, 1.5) > 0;
}
/**
* DOC qzhang Comment method "getId".
*
* @param string
*/
public static String getId(String driver) {
String id = ODBCDEFAULTURL.sqlEid;
for (EDriverName driverName : values()) {
if (driverName.dbDriver.equalsIgnoreCase(driver)) {
return driverName.sqlEid;
}
}
// MOD gdbu 2011-4-20 bug : 18975
String specID = getDriFromSpecialDB(driver);
if (!specID.equals("")) {
return specID;
}
// ~18975
return id;
}
/**
* MOD gdbu 2011-4-20 bug : 18975
*
* DOC gdbu Comment method "getDriFromSpecialDB".
*
* If the above method : getId() can not return required driverclass, we can return by this method requires the
* driverclass, but only if we have to fill specialdatabase instance
*
* @param driver
* @return driverID
*/
private static String getDriFromSpecialDB(String driver) {
if (driver != null) {
Set<String> kss = special_database.keySet();
for (String ks : kss) {
ArrayList<String> specDb = special_database.get(ks);
for (int i = 0; i < specDb.size(); i++) {
if (specDb.get(i).trim().equals(driver.trim())) {
return getId(ks);
}
}
}
}
// Added yin 20121018 TDQ-6167
// find the driver from the added (unsupported) database
DriverManager driverModel = SQLExplorerPlugin.getDefault().getDriverModel();
for (ManagedDriver mdriver : driverModel.getDrivers()) {
if (driver.equalsIgnoreCase(mdriver.getDriverClassName())) {
return mdriver.getId();
}
}// ~
return "";
}
private ILibraryManagerService getLibManagerServic() {
if (libManagerServic == null) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(ILibraryManagerService.class)) {
libManagerServic = (ILibraryManagerService) GlobalServiceRegister.getDefault().getService(
ILibraryManagerService.class);
}
}
return libManagerServic;
}
}