X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/util/JarUtil.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/util/JarUtil.java new file mode 100644 index 0000000..c30bdad --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/util/JarUtil.java @@ -0,0 +1,93 @@ +package com.quantum.util; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.sql.Driver; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + + +/** + * @author BC Holmes + */ +public class JarUtil { + + private static Hashtable classLoaderCache = new Hashtable(); + + public static Driver loadDriver(String driverFile, String className) { + Driver result = null; + try { + File file = new File(driverFile); + if (file.exists() && file.isFile()) { + URLClassLoader loader = getURLClassLoader(file); + Class driverClass = loader.loadClass(className); + try { + result = (Driver) driverClass.newInstance(); + } catch (ClassCastException e) { + } + } + } catch (MalformedURLException e) { + } catch (ClassNotFoundException e) { + } catch (InstantiationException e) { + } catch (IllegalAccessException e) { + } + return result; + } + + public static String[] getAllDriverNames(String driverFile) { + List list = new ArrayList(); + try { + File file = new File(driverFile); + URLClassLoader loader = getURLClassLoader(file); + JarFile jar = new JarFile(file); + for (Enumeration e = jar.entries(); e.hasMoreElements(); ) { + JarEntry entry = (JarEntry) e.nextElement(); + String className = getClassNameFromFileName(entry.getName()); + if (className != null) { + try { + Class driverClass = loader.loadClass(className); + if (Driver.class.isAssignableFrom(driverClass)) { + list.add(className); + } + } catch (ClassNotFoundException ex) { + } + } + } + } catch (IOException e) { + } + return (String[]) list.toArray(new String[list.size()]); + } + + private static String getClassNameFromFileName(String name) { + String result = null; + if (name.endsWith(".class")) { + result = name.substring(0, name.length()-6).replace('/', '.').replace('\\', '.' ); + } + return result; + } + + /** + * @param file + * @return + * @throws MalformedURLException + */ + private static URLClassLoader getURLClassLoader(File file) throws MalformedURLException { + String driverFile = file.getAbsolutePath(); + URLClassLoader loader = + (URLClassLoader) classLoaderCache.get(driverFile); + if (loader == null) { + URL urls[] = new URL[1]; + urls[0] = file.toURL(); + loader = new URLClassLoader(urls); + classLoaderCache.put(driverFile, loader); + } + return loader; + } +}