X-Git-Url: http://secure.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/adapters/AdapterFactory.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/adapters/AdapterFactory.java index f26b278..bd05994 100644 --- a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/adapters/AdapterFactory.java +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/adapters/AdapterFactory.java @@ -2,16 +2,57 @@ package com.quantum.adapters; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; import java.util.List; - -import com.quantum.Messages; +import java.util.Map; /** - * @author root * Basically this Factory is a Singleton that is used to return the proper adapter + * @author root */ public class AdapterFactory { + + static class ComparatorImpl implements Comparator { + + public int compare(Object arg0, Object arg1) { + DatabaseAdapter adapter0 = (DatabaseAdapter) arg0; + DatabaseAdapter adapter1 = (DatabaseAdapter) arg1; + + if (adapter0 == null && adapter0 != null) { + return -1; + } else if (adapter0 != null && adapter1 == null) { + return 1; + } else if (adapter0 == null && adapter1 == null) { + return 0; + } else { + return adapter0.getDisplayName().compareTo(adapter1.getDisplayName()); + } + } + } + + static class DriverInfo { + private final String type; + private final String urlPattern; + + DriverInfo(String type) { + this(type, null); + } + DriverInfo(String type, String urlPattern) { + this.type = type; + this.urlPattern = urlPattern; + + } + public String getType() { + return this.type; + } + public String getURLPattern() { + return this.urlPattern; + } + } + public static final String GENERIC = "GENERIC"; //$NON-NLS-1$ + public static final String HSQLDB = "HSQLDB"; //$NON-NLS-1$ public static final String ORACLE = "ORACLE"; //$NON-NLS-1$ public static final String POSTGRES = "POSTGRES"; //$NON-NLS-1$ public static final String MYSQL = "MYSQL"; //$NON-NLS-1$ @@ -20,15 +61,74 @@ public class AdapterFactory { public static final String ADABASD = "ADABASD"; //$NON-NLS-1$ public static final String INFORMIX = "INFORMIX"; //$NON-NLS-1$ public static final String REDBRICK = "REDBRICK"; //$NON-NLS-1$ + public static final String POINTBASE = "POINTBASE"; //$NON-NLS-1$ public static final String SYBASE = "SYBASE"; //$NON-NLS-1$ + public static final String JDBC_ODBC_BRIDGE = "JDBC_ODBC_BRIDGE"; //$NON-NLS-1$ + public static final String MS_SQL_SERVER = "MS_SQL_SERVER"; //$NON-NLS-1$ + public static final String DERBY = "DERBY"; //$NON-NLS-1$ + private static final Map DRIVER_MAP = Collections.synchronizedMap(new HashMap()); + + static { + DRIVER_MAP.put("com.ddtek.jdbc.informix.InformixDriver", new DriverInfo(INFORMIX)); + DRIVER_MAP.put("com.ddtek.jdbc.db2.DB2Driver", new DriverInfo(DB2, "jdbc:datadirect:db2://${hostname}:${port};DatabaseName=${dbname}")); + DRIVER_MAP.put("com.ddtek.jdbc.oracle.OracleDriver", new DriverInfo(ORACLE ,"jdbc:oracle:thin:@{hostname}:{port}:{dbname}")); + DRIVER_MAP.put("com.ddtek.jdbc.sqlserver.SQLServerDriver", new DriverInfo(GENERIC)); + DRIVER_MAP.put("com.ddtek.jdbc.sybase.SybaseDriver", new DriverInfo(SYBASE)); + DRIVER_MAP.put("com.ibm.as400.access.AS400JDBCDriver", new DriverInfo(DB2AS400)); + DRIVER_MAP.put("COM.ibm.db2.jdbc.app.DB2Driver", new DriverInfo(DB2, "jdbc:db2:{dbname}")); + DRIVER_MAP.put("COM.ibm.db2.jdbc.net.DB2Driver", new DriverInfo(DB2, "jdbc:db2://{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("com.inet.ora.OraDriver", new DriverInfo(ORACLE ,"jdbc:oracle:thin:@{hostname}:{port}:{dbname}")); + DRIVER_MAP.put("com.inet.drda.DRDADriver", new DriverInfo(DB2, "jdbc:inetdb2:{hostname}:{port}?database={dbname}")); + DRIVER_MAP.put("com.inet.syb.SybDriver", new DriverInfo(SYBASE)); + DRIVER_MAP.put("com.inet.tds.TdsDriver", new DriverInfo(MS_SQL_SERVER)); + DRIVER_MAP.put("com.informix.jdbc.IfxDriver", new DriverInfo(INFORMIX, "jdbc:informix-sqli://{hostname}:{port}/{dbname}:INFORMIXSERVER={informixserver}")); + DRIVER_MAP.put("com.microsoft.jdbc.sqlserver.SQLServerDriver", new DriverInfo(MS_SQL_SERVER)); + DRIVER_MAP.put("com.mysql.jdbc.Driver", new DriverInfo(MYSQL, "jdbc:mysql://{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("com.pointbase.jdbc.jdbcUniversalDriver", new DriverInfo(POINTBASE, "jdbc:pointbase:server://{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("com.sybase.jdbc.SybDriver", new DriverInfo(SYBASE, "jdbc:sybase:Tds:{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("com.sybase.jdbc2.jdbc.SybDriver", new DriverInfo(SYBASE, "jdbc:sybase:Tds:{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("com.sybase.jdbcx.SybDriver", new DriverInfo(SYBASE, "jdbc:sybase:Tds:{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("net.sourceforge.jtds.jdbc.Driver", new DriverInfo(MS_SQL_SERVER)); + DRIVER_MAP.put("oracle.jdbc.driver.OracleDriver", new DriverInfo(ORACLE ,"jdbc:oracle:thin:@{hostname}:{port}:{dbname}")); + DRIVER_MAP.put("oracle.jdbc.OracleDriver", new DriverInfo(ORACLE ,"jdbc:oracle:thin:@{hostname}:{port}:{dbname}")); + DRIVER_MAP.put("org.gjt.mm.mysql.Driver", new DriverInfo(MYSQL, "jdbc:mysql://{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("org.hsqldb.jdbcDriver", new DriverInfo(HSQLDB)); + DRIVER_MAP.put("org.postgresql.Driver", new DriverInfo(POSTGRES, "jdbc:postgresql://{hostname}:{port}/{dbname}")); + DRIVER_MAP.put("sun.jdbc.odbc.JdbcOdbcDriver", new DriverInfo(JDBC_ODBC_BRIDGE, "jdbc:odbc:{datasource}")); + DRIVER_MAP.put("weblogic.jdbc.informix.InformixDriver", new DriverInfo(INFORMIX)); + DRIVER_MAP.put("weblogic.jdbc.sqlserver.SybaseDriver", new DriverInfo(SYBASE)); + DRIVER_MAP.put("org.apache.derby.jdbc.driver20", new DriverInfo(DERBY, "jdbc:derby:{dbname}")); + DRIVER_MAP.put("org.apache.derby.jdbc.driver30", new DriverInfo(DERBY, "jdbc:derby:{dbname}")); + DRIVER_MAP.put("org.apache.derby.jdbc.EmbeddedDriver", new DriverInfo(DERBY, "jdbc:derby:{dbname}")); + + } + private static AdapterFactory instance; - private ArrayList drivers; + private Map adapters = Collections.synchronizedMap(new HashMap()); private AdapterFactory() { - loadDrivers(); + addAdapter(new GenericAdapter(GENERIC)); + addAdapter(new GenericAdapter(HSQLDB)); + addAdapter(new OracleAdapter()); + addAdapter(new DB2Adapter()); + addAdapter(new DB2AS400Adapter()); + addAdapter(new PostgresAdapter()); + addAdapter(new MySQLAdapter()); + addAdapter(new AdabasDAdapter()); + addAdapter(new InformixAdapter()); + addAdapter(new RedBrickAdapter()); + addAdapter(new GenericAdapter(SYBASE)); + addAdapter(new GenericAdapter(POINTBASE)); + addAdapter(new GenericAdapter(JDBC_ODBC_BRIDGE)); + addAdapter(new MSSQLServerAdapter()); + addAdapter(new GenericAdapter(DERBY)); + } + private void addAdapter(DatabaseAdapter adapter) { + this.adapters.put(adapter.getType(), adapter); } + public static synchronized AdapterFactory getInstance() { if (instance == null) { instance = new AdapterFactory(); @@ -36,58 +136,35 @@ public class AdapterFactory { return instance; } - /** - * Master list of supported drivers - */ - private void loadDrivers() { - drivers = new ArrayList(); - - DriverInfo generic = new DriverInfo(GENERIC, Messages.getString("adapters.generic"), new GenericAdapter()); //$NON-NLS-1$ - DriverInfo oracle = new DriverInfo(ORACLE, Messages.getString("adapters.oracle"), new OracleAdapter()); //$NON-NLS-1$ - DriverInfo db2 = new DriverInfo(DB2, Messages.getString("adapters.db2"), new DB2Adapter()); //$NON-NLS-1$ - DriverInfo db2as400 = new DriverInfo(DB2AS400, Messages.getString("adapters.db2as400"), new DB2AS400Adapter()); //$NON-NLS-1$ - DriverInfo postgres = new DriverInfo(POSTGRES, Messages.getString("adapters.postgres"), new PostgresAdapter()); //$NON-NLS-1$ - DriverInfo mysql = new DriverInfo(MYSQL, Messages.getString("adapters.mysql"), new GenericAdapter()); //$NON-NLS-1$ - DriverInfo adabasd = new DriverInfo(ADABASD, Messages.getString("adapters.adabasd"), new AdabasDAdapter()); //$NON-NLS-1$ - DriverInfo informix = new DriverInfo(INFORMIX, Messages.getString("adapters.informix"), new GenericAdapter()); //$NON-NLS-1$ - DriverInfo redbrick = new DriverInfo(REDBRICK, Messages.getString("adapters.redbrick"), new RedBrickAdapter()); //$NON-NLS-1$ - DriverInfo sybase = new DriverInfo(SYBASE, Messages.getString("adapters.sybase"), new GenericAdapter()); //$NON-NLS-1$ - - drivers.add(generic); - drivers.add(oracle); - drivers.add(db2); - drivers.add(db2as400); - drivers.add(postgres); - drivers.add(mysql); - drivers.add(adabasd); - drivers.add(informix); - drivers.add(redbrick); - drivers.add(sybase); + public DatabaseAdapter getAdapter(String type){ + DatabaseAdapter result = (DatabaseAdapter) this.adapters.get(type); + if (result == null) { + result = (DatabaseAdapter) this.adapters.get(GENERIC); + } + return result == null ? null : result; } - public synchronized DatabaseAdapter getAdapter(String type){ - if (drivers == null) { - loadDrivers(); - } - for (int i = 0; i < drivers.size(); i++) { - DriverInfo info = (DriverInfo) drivers.get(i); - if (type.equals(info.getDriverType())) { - return info.getAdapter(); - } - } - // If its not a recognized driver, we return the generic one - for (int i = 0; i < drivers.size(); i++) { - DriverInfo info = (DriverInfo) drivers.get(i); - if (type.equals(GENERIC)) { - return info.getAdapter(); - } - } - return null; + public DatabaseAdapter[] getDriverList() { + List list = new ArrayList(this.adapters.values()); + Collections.sort(list, new ComparatorImpl()); + return (DatabaseAdapter[]) list.toArray(new DatabaseAdapter[list.size()]); } - public synchronized DriverInfo[] getDriverList() { - List list = new ArrayList(this.drivers); - Collections.sort(list); - return (DriverInfo[]) list.toArray(new DriverInfo[list.size()]); + /** + * + * @param driverClassName + * @return the adapter type, or null if the adapter type is not known + */ + public String getAdapterType(String driverClassName) { + DriverInfo driverInfo = (DriverInfo) DRIVER_MAP.get(driverClassName); + return driverInfo == null ? null : driverInfo.getType(); } + /** + * @param type + * @return + */ + public String getURLPattern(String driverClassName) { + DriverInfo driverInfo = (DriverInfo) DRIVER_MAP.get(driverClassName); + return driverInfo == null ? null : driverInfo.getURLPattern(); + } } \ No newline at end of file