// ============================================================================ // // Copyright (C) 2006-2012 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 org.talend.designer.core.ui.editor.properties.controllers; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.core.database.EDatabase4DriverClassName; import org.talend.core.database.EDatabaseTypeName; import org.talend.core.database.conn.version.EDatabaseVersion4Drivers; import org.talend.core.model.metadata.builder.database.DriverShim; import org.talend.core.model.metadata.builder.database.ExtractMetaDataUtils; /** * DOC hyWang class global comment. Detailled comment */ public class DbInfo { private String username = null; private String pwd = null; private String url = null; private String driverClassName = null; private String driverJarPath = null; private String dbType = null; private String dbVersion = null; private String trueDBTypeForJDBC = null; private String additionalParams = null; private Connection conn = null; public DbInfo(String dbType, String username, String pwd, String dbVersion, String url, String additionalParams) { this.dbType = dbType; this.username = username; this.pwd = pwd; this.dbVersion = dbVersion; this.url = url; this.additionalParams = additionalParams; generateDriverName(); genarateDriverJarPath(); getConnFromNode(); this.trueDBTypeForJDBC = getTrueDBType(driverClassName, driverJarPath); } public DbInfo(String dbType, String username, String pwd, String dbVersion, String url, String driverJarPath, String additionalParams) { this.dbType = dbType; this.username = username; this.pwd = pwd; this.dbVersion = dbVersion; this.url = url; this.driverJarPath = driverJarPath; generateDriverName(); getConnFromNode(); genarateDriverJarPath(); this.trueDBTypeForJDBC = getTrueDBType(driverClassName, driverJarPath); } public String getTrueDBTypeForJDBC() { return this.trueDBTypeForJDBC; } // hywang add constructor for bug 9594 public DbInfo(String dbType, String username, String pwd, String dbVersion, String url, String driverClassName, String driverJarPath, String additionalParams) { this.dbType = dbType; this.username = username; this.pwd = pwd; this.dbVersion = dbVersion; this.url = url; this.driverClassName = driverClassName; this.driverJarPath = driverJarPath; this.trueDBTypeForJDBC = dbType; this.additionalParams = additionalParams; getConnFromNode(); } public String getUrl() { return this.url; } public String getUsername() { return this.username; } public String getDriverClassName() { return this.driverClassName; } public String getDriverJarPath() { return this.driverJarPath; } public String getDbType() { return this.dbType; } public String getDbVersion() { return this.dbVersion; } public Connection getConn() { return this.conn; } public String getPwd() { return this.pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public void setUsername(String username) { this.username = username; } public void setUrl(String url) { this.url = url; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public void setDriverJarPath(String driverJarPath) { this.driverJarPath = driverJarPath; } public void setDbType(String dbType) { this.dbType = dbType; } public void setDbVersion(String dbVersion) { this.dbVersion = dbVersion; } private void getConnFromNode() { DriverShim wapperDriver = null; try { List list = null; if (dbType.equals(EDatabaseTypeName.GENERAL_JDBC.getDisplayName())) { list = ExtractMetaDataUtils.connect(trueDBTypeForJDBC, url, username, pwd, driverClassName, driverJarPath, dbVersion, additionalParams); } else { // driverJarPath set to null,to reget driverJarPath driverJarPath = ""; //$NON-NLS-N$ list = ExtractMetaDataUtils.connect(dbType, url, username, pwd, driverClassName, driverJarPath, dbVersion, additionalParams); //$NON-NLS-N$ } if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { if (list.get(i) instanceof Connection) { conn = (Connection) list.get(i); } if (list.get(i) instanceof DriverShim) { wapperDriver = (DriverShim) list.get(i); } } } } catch (Exception e) { // e.printStackTrace(); ExceptionHandler.process(e); } finally { // bug 9162 if ((driverClassName.equals(EDatabase4DriverClassName.JAVADB_EMBEDED.getDriverClass()) || dbType.equals(EDatabaseTypeName.JAVADB_EMBEDED.getDisplayName()) || dbType.equals(EDatabaseTypeName.JAVADB_DERBYCLIENT.getDisplayName()) || dbType.equals(EDatabaseTypeName.JAVADB_JCCJDBC.getDisplayName()) || dbType.equals(EDatabaseTypeName.HSQLDB_IN_PROGRESS.getDisplayName()) || dbType .equals(EDatabaseTypeName.GENERAL_JDBC.getDisplayName())) && wapperDriver != null) { try { wapperDriver.connect("jdbc:derby:;shutdown=true", null); //$NON-NLS-1$ } catch (SQLException e) { // exception of shutdown success. no need to catch. } } } } private void generateDriverName() { driverClassName = ExtractMetaDataUtils.getDriverClassByDbType(dbType); } private void genarateDriverJarPath() { // modified by wzhang. when driver has more than one jar. List<String> drivers = EDatabaseVersion4Drivers.getDrivers(dbType, dbVersion); if (drivers.size() == 1) { String driverName = EDatabaseVersion4Drivers.getDriversStr(dbType, dbVersion); if (driverName != null) { driverJarPath = ExtractMetaDataUtils.getJavaLibPath() + driverName; } } else { driverJarPath = null; } } private String getTrueDBType(String className, String driverJar) { return ExtractMetaDataUtils.getDbTypeByClassNameAndDriverJar(className, driverJar); } private String getTrueDBType(String className) { return ExtractMetaDataUtils.getDbTypeByClassName(className); } }