001: /* ====================================================================
002: * The QueryForm License, Version 1.1
003: *
004: * Copyright (c) 1998 - 2003 David F. Glasser. All rights
005: * reserved.
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by
022: * David F. Glasser."
023: * Alternately, this acknowledgment may appear in the software itself,
024: * if and wherever such third-party acknowledgments normally appear.
025: *
026: * 4. The names "QueryForm" and "David F. Glasser" must
027: * not be used to endorse or promote products derived from this
028: * software without prior written permission. For written
029: * permission, please contact dglasser@pobox.com.
030: *
031: * 5. Products derived from this software may not be called "QueryForm",
032: * nor may "QueryForm" appear in their name, without prior written
033: * permission of David F. Glasser.
034: *
035: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL DAVID F. GLASSER, THE APACHE SOFTWARE
039: * FOUNDATION OR ITS CONTRIBUTORS, OR ANY AUTHORS OR DISTRIBUTORS
040: * OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This product includes software developed by the
051: * Apache Software Foundation (http://www.apache.org/).
052: *
053: * ====================================================================
054: *
055: * $Source: /cvsroot/qform/qform/src/org/glasser/sql/DriverClassList.java,v $
056: * $Revision: 1.6 $
057: * $Author: dglasser $
058: * $Date: 2005/06/06 03:04:43 $
059: *
060: * --------------------------------------------------------------------
061: */
062: package org.glasser.sql;
063:
064: import java.sql.*;
065: import java.util.*;
066: import org.glasser.util.ExtensionClassLoader;
067:
068: public class DriverClassList {
069:
070: /**
071: * This is a list of driver class names that were collected through a google
072: * search for "Class.forName" and "driver".
073: */
074: private final static String[] driverList = { "acs.jdbc.Driver",
075: "com.experlog.universe.Driver",
076: "com.ibm.db2.jcc.DB2Driver",
077: "COM.ibm.db2.jdbc.app.DB2Driver",
078: "com.informix.jdbc.IfxDriver",
079: "com.intellidimension.jdbc.Driver",
080: "com.microsoft.jdbc.sqlserver.SQLServerDriver",
081: "com.mysql.jdbc.Driver",
082: "com.newatlanta.jturbo.driver.Driver",
083: "com.novell.sql.LDAPDriver",
084: "com.sap.dbtech.jdbc.DriverSapDB",
085: "com.sybase.jdbc.SybDriver", "gwe.sql.gweMysqlDriver",
086: "ids.sql.IDSDriver",
087: "in.co.daffodil.db.jdbc.DaffodilDBDriver",
088: "in.co.daffodil.db.rmi.RmiDaffodilDBDriver",
089: "interbase.interclient.Driver", "jdbc.sqlmx.SQLmxDriver",
090: "oracle.jdbc.driver.OracleDriver",
091: "org.enhydra.instantdb.jdbc.idbDriver",
092: "org.gjt.mm.mysql.Driver", "org.postgresql.Driver",
093: "postgres95.pgDriver", "postgresql.Driver",
094: "sun.jdbc.odbc.JdbcOdbcDriver", "weblogic.jdbc.jts.Driver",
095: "org.hsqldb.jdbcDriver", "org.firebirdsql.jdbc.FBDriver" };
096:
097: private static String[] availableDrivers = null;
098:
099: public static String[] getDriverClassNames() {
100: return (String[]) driverList.clone();
101: }
102:
103: public static String[] getAvailableDriverClassNames() {
104:
105: ClassLoader extensionLoader = ExtensionClassLoader
106: .getSingleton();
107:
108: if (availableDrivers == null) {
109: ArrayList foundDriverClasses = new ArrayList();
110: for (int j = 0; j < driverList.length; j++) {
111: try {
112: extensionLoader.loadClass(driverList[j]);
113: foundDriverClasses.add(driverList[j]);
114: } catch (ClassNotFoundException ex) {
115: continue;
116: }
117: }
118:
119: availableDrivers = (String[]) foundDriverClasses
120: .toArray(new String[foundDriverClasses.size()]);
121: }
122:
123: return (String[]) availableDrivers.clone();
124:
125: }
126:
127: public static void main(String[] args) throws Exception {
128: String[] availableDrivers = getAvailableDriverClassNames();
129: for (int j = 0; j < availableDrivers.length; j++) {
130: System.out.println("--" + availableDrivers[j]);
131: }
132: }
133:
134: private final static String[][] driverClassToEditableTypeMappings = { {
135: "oracle.jdbc.driver.OracleDriver", "1111" } };
136:
137: private final static HashMap driverClassToEditableTypeMap = new HashMap();
138:
139: static {
140:
141: for (int j = 0; j < driverClassToEditableTypeMappings.length; j++) {
142: String[] row = driverClassToEditableTypeMappings[j];
143: String types = row[1];
144: StringTokenizer st = new StringTokenizer(types);
145: HashSet setForDriverClass = new HashSet();
146: while (st.hasMoreTokens()) {
147: setForDriverClass.add(new Integer(st.nextToken()));
148: }
149: driverClassToEditableTypeMap.put(row[0], setForDriverClass);
150: }
151: }
152:
153: public static Set getEditableTypes(String driverClassName) {
154: return (Set) driverClassToEditableTypeMap.get(driverClassName);
155: }
156:
157: }
|