home *** CD-ROM | disk | FTP | other *** search
- package sun.jdbc.odbc;
-
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.DriverPropertyInfo;
- import java.sql.SQLException;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Properties;
-
- public class JdbcOdbcDriver extends JdbcOdbcObject implements JdbcOdbcDriverInterface {
- protected static JdbcOdbc OdbcApi;
- protected static int hEnv;
- protected static int hDbc;
- protected static Hashtable connectionList;
- protected static String nativePrefix;
-
- public JdbcOdbcDriver() {
- OdbcApi = null;
- hEnv = 0;
- hDbc = 0;
- connectionList = new Hashtable();
- nativePrefix = "";
- }
-
- protected synchronized void finalize() {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Driver.finalize");
- }
-
- try {
- if (hDbc != 0) {
- this.disconnect(hDbc);
- this.closeConnection(hDbc);
- hDbc = 0;
- return;
- }
- } catch (SQLException var1) {
- }
-
- }
-
- public synchronized Connection connect(String var1, Properties var2) throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*Driver.connect (" + var1 + ")");
- }
-
- if (!this.acceptsURL(var1)) {
- return null;
- } else {
- if (hDbc != 0) {
- this.disconnect(hDbc);
- this.closeConnection(hDbc);
- hDbc = 0;
- }
-
- if (!this.initialize()) {
- return null;
- } else {
- JdbcOdbcConnection var3 = new JdbcOdbcConnection(OdbcApi, hEnv, this);
- var3.initialize(getSubName(var1), var2, DriverManager.getLoginTimeout());
- var3.setURL(var1);
- return var3;
- }
- }
- }
-
- public boolean acceptsURL(String var1) throws SQLException {
- boolean var2 = false;
- if (this.knownURL(var1) && this.trusted()) {
- var2 = true;
- }
-
- return var2;
- }
-
- public DriverPropertyInfo[] getPropertyInfo(String var1, Properties var2) throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*Driver.getPropertyInfo (" + var1 + ")");
- }
-
- if (!this.acceptsURL(var1)) {
- return null;
- } else if (!this.initialize()) {
- return null;
- } else {
- String var3 = makeConnectionString(var2);
- String var4 = "";
- var4 = this.getConnectionAttributes(getSubName(var1), var3);
- Hashtable var5 = this.getAttributeProperties(var4);
- DriverPropertyInfo[] var6 = new DriverPropertyInfo[var5.size()];
-
- for(int var7 = 0; var7 < var5.size(); ++var7) {
- var6[var7] = (DriverPropertyInfo)var5.get(new Integer(var7));
- }
-
- return var6;
- }
- }
-
- public int getMajorVersion() {
- return 1;
- }
-
- public int getMinorVersion() {
- return 1001;
- }
-
- public boolean jdbcCompliant() {
- return true;
- }
-
- private boolean initialize() throws SQLException {
- boolean var1 = true;
- if (OdbcApi == null) {
- try {
- OdbcApi = new JdbcOdbc(nativePrefix);
- } catch (Exception var3) {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Unable to load JdbcOdbc library");
- }
-
- var1 = false;
- }
- }
-
- if (hEnv == 0) {
- try {
- hEnv = OdbcApi.SQLAllocEnv();
- } catch (Exception var2) {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Unable to allocate environment");
- }
-
- var1 = false;
- }
- }
-
- return var1;
- }
-
- private boolean knownURL(String var1) {
- String var2 = getProtocol(var1);
- if (!var2.equalsIgnoreCase("jdbc")) {
- return false;
- } else {
- var2 = getSubProtocol(var1);
- return var2.equalsIgnoreCase("odbc");
- }
- }
-
- public static String getProtocol(String var0) {
- String var1 = "";
- int var2 = var0.indexOf(58);
- if (var2 >= 0) {
- var1 = var0.substring(0, var2);
- }
-
- return var1;
- }
-
- public static String getSubProtocol(String var0) {
- String var1 = "";
- int var2 = var0.indexOf(58);
- if (var2 >= 0) {
- int var3 = var0.indexOf(58, var2 + 1);
- if (var3 >= 0) {
- var1 = var0.substring(var2 + 1, var3);
- }
- }
-
- return var1;
- }
-
- public static String getSubName(String var0) {
- String var1 = "";
- int var2 = var0.indexOf(58);
- if (var2 >= 0) {
- int var3 = var0.indexOf(58, var2 + 1);
- if (var3 >= 0) {
- var1 = var0.substring(var3 + 1);
- }
- }
-
- return var1;
- }
-
- private boolean trusted() {
- boolean var1 = false;
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("JDBC to ODBC Bridge: Checking security");
- }
-
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- try {
- String var3 = System.getProperty("browser");
- if (var3 != null && var3.equalsIgnoreCase("Netscape Navigator")) {
- nativePrefix = "Netscape_";
- return true;
- }
- } catch (Exception var4) {
- }
-
- try {
- var2.checkWrite("JdbcOdbcSecurityCheck");
- var1 = true;
- } catch (SecurityException var5) {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Security check failed: " + ((Throwable)var5).getMessage());
- }
-
- var1 = false;
- }
- } else {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("No SecurityManager present, assuming trusted application/applet");
- }
-
- var1 = true;
- }
-
- var1 = true;
- return var1;
- }
-
- public String getConnectionAttributes(String var1, String var2) throws SQLException {
- String var3 = "DSN=" + var1 + var2;
- if (hDbc == 0) {
- hDbc = this.allocConnection(hEnv);
- }
-
- String var4 = OdbcApi.SQLBrowseConnect(hDbc, var3);
- if (var4 == null) {
- var4 = "";
- this.disconnect(hDbc);
- this.closeConnection(hDbc);
- hDbc = 0;
- }
-
- return var4;
- }
-
- public Hashtable getAttributeProperties(String var1) {
- int var3 = 0;
- int var4 = 0;
- int var8 = 0;
- Hashtable var15 = new Hashtable();
-
- for(int var16 = var1.length(); var3 < var16; var3 = var4 + 1) {
- boolean var10 = true;
- String var11 = null;
- String var12 = null;
- String[] var13 = null;
- String var14 = null;
- var4 = var1.indexOf(";", var3);
- if (var4 < 0) {
- var4 = var16 + 1;
- }
-
- String var2 = var1.substring(var3, var4);
- int var5 = 0;
- int var6 = var2.indexOf(":", 0);
- int var7 = var2.indexOf("=", 0);
- if (var2.startsWith("*")) {
- var10 = false;
- ++var5;
- }
-
- if (var6 > 0) {
- var11 = var2.substring(var5, var6);
- }
-
- if (var6 > 0 && var7 > 0) {
- var12 = var2.substring(var6 + 1, var7);
- }
-
- if (var7 > 0) {
- var14 = var2.substring(var7 + 1);
- if (var14.equals("?")) {
- var14 = null;
- }
- }
-
- if (var14 != null && var14.startsWith("{")) {
- var13 = listToArray(var14);
- var14 = null;
- }
-
- DriverPropertyInfo var9 = new DriverPropertyInfo(var11, var14);
- var9.description = var12;
- var9.required = var10;
- var9.choices = var13;
- var15.put(new Integer(var8), var9);
- ++var8;
- }
-
- return var15;
- }
-
- protected static String makeConnectionString(Properties var0) {
- String var1 = "";
- Enumeration var2 = var0.propertyNames();
-
- while(var2.hasMoreElements()) {
- String var3 = (String)var2.nextElement();
- String var4 = var0.getProperty(var3);
- if (var3.equalsIgnoreCase("user")) {
- var3 = "UID";
- }
-
- if (var3.equalsIgnoreCase("password")) {
- var3 = "PWD";
- }
-
- if (var4 != null) {
- var1 = var1 + ";" + var3 + "=" + var4;
- }
- }
-
- return var1;
- }
-
- protected static String[] listToArray(String var0) {
- Object var1 = null;
- Hashtable var3 = new Hashtable();
- int var4 = 0;
- int var5 = 1;
- int var6 = 1;
- int var7 = var0.length();
- if (!var0.startsWith("{")) {
- return null;
- } else if (!var0.endsWith("}")) {
- return null;
- } else {
- while(var5 < var7) {
- var6 = var0.indexOf(",", var5);
- if (var6 < 0) {
- var6 = var7 - 1;
- }
-
- String var2 = var0.substring(var5, var6);
- var3.put(new Integer(var4), var2);
- ++var4;
- var5 = var6 + 1;
- }
-
- String[] var8 = new String[var4];
-
- for(int var10 = 0; var10 < var4; ++var10) {
- String var9 = (String)var3.get(new Integer(var10));
- var8[var10] = var9;
- }
-
- return var8;
- }
- }
-
- public int allocConnection(int var1) throws SQLException {
- int var2 = 0;
- var2 = OdbcApi.SQLAllocConnect(var1);
- connectionList.put(new Integer(var2), new Integer(var1));
- return var2;
- }
-
- public void closeConnection(int var1) throws SQLException {
- OdbcApi.SQLFreeConnect(var1);
- Integer var10000 = (Integer)connectionList.remove(new Integer(var1));
- if (connectionList.size() == 0 && hEnv != 0) {
- OdbcApi.SQLFreeEnv(hEnv);
- hEnv = 0;
- }
-
- }
-
- public void disconnect(int var1) throws SQLException {
- OdbcApi.SQLDisconnect(var1);
- }
-
- static {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("JdbcOdbcDriver class loaded");
- }
-
- JdbcOdbcDriver var0 = new JdbcOdbcDriver();
-
- try {
- DriverManager.registerDriver(var0);
- } catch (SQLException var1) {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Unable to register driver");
- }
-
- }
- }
- }
-