Source code: com/vinculum/processeditor/jdbcClassLoader.java
1 /* * ** ** BEGIN LICENSE BLOCK * ** **
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3 *
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
8 *
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
12 * License.
13 *
14 * The Original Code is Vinculum Open Source.
15 *
16 * The Initial Developer of the Original Code is
17 * Gerard Toonstra.
18 * Portions created by the Initial Developer are Copyright (C) 2003
19 * the Initial Developer. All Rights Reserved.
20 *
21 * Contributor(s):
22 *
23 * Alternatively, the contents of this file may be used under the terms of
24 * either the GNU General Public License Version 2 or later (the "GPL"), or
25 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26 * in which case the provisions of the GPL or the LGPL are applicable instead
27 * of those above. If you wish to allow use of your version of this file only
28 * under the terms of either the GPL or the LGPL, and not to allow others to
29 * use your version of this file under the terms of the MPL, indicate your
30 * decision by deleting the provisions above and replace them with the notice
31 * and other provisions required by the GPL or the LGPL. If you do not delete
32 * the provisions above, a recipient may use your version of this file under
33 * the terms of any one of the MPL, the GPL or the LGPL.
34 *
35 * ** ** * END LICENSE BLOCK * ** **
36 */
37
38 /***************************************************************************
39 $RCSfile: jdbcClassLoader.java,v $ - description
40 -------------------
41 begin : $Date: 2003/07/08 08:02:06 $
42 copyright : Vinculum (C) 2002
43 author : $Author: chiraz $
44 ***************************************************************************/
45
46 /* $Log: jdbcClassLoader.java,v $
47 /* Revision 1.1.1.1 2003/07/08 08:02:06 chiraz
48 /* egg
49 /* */
50
51 package com.vinculum.processeditor;
52
53 import java.io.File;
54 import java.net.MalformedURLException;
55 import java.net.URL;
56 import java.net.URLClassLoader;
57 import java.sql.Driver;
58 import java.sql.SQLException;
59 import java.util.HashMap;
60 import java.util.Map;
61
62 import org.eclipse.core.internal.resources.IManager;
63 import org.eclipse.core.runtime.CoreException;
64 import org.eclipse.core.runtime.IProgressMonitor;
65
66 public class jdbcClassLoader implements IManager
67 {
68 private class ClassLoader extends URLClassLoader
69 {
70 public ClassLoader(URL[] urls, java.lang.ClassLoader parent)
71 {
72 super(urls, parent);
73 }
74
75 public void addURL(URL url)
76 {
77 URL[] urls = getURLs();
78 for (int i = 0; i < urls.length; i++)
79 {
80 if (urls[i].equals(url))
81 return;
82 }
83 super.addURL(url);
84 }
85 }
86
87 private ClassLoader loader;
88 private Map drivers;
89
90 public ClassLoader getDriverClassLoader(URL[] urls)
91 {
92 if (loader == null)
93 {
94 loader = new ClassLoader(urls, ProcesseditorPlugin.getDefault().getDescriptor().getPluginClassLoader());
95 }
96 else
97 {
98 for (int i = 0; i < urls.length; i++)
99 {
100 loader.addURL(urls[i]);
101 }
102 }
103 return loader;
104 }
105
106 public Driver getDriver(String driverClassName, String url)
107 throws Exception
108 {
109 if (drivers == null)
110 drivers = new HashMap();
111
112 Driver driver = (Driver) drivers.get(url);
113 if (driver == null)
114 {
115 try
116 {
117 Class driverClass = loader != null ?
118 loader.loadClass(driverClassName) : Class.forName(driverClassName);
119
120 if (driverClass != null)
121 {
122 driver = (Driver) driverClass.newInstance();
123 drivers.put(url, driver);
124 }
125 }
126 catch (ClassNotFoundException e)
127 {
128 throw new Exception("No such Driver " + driverClassName); //$NON-NLS-1$
129 }
130 catch (Throwable t)
131 {
132 throw new Exception("Couldn't create Driver instance of:" + driverClassName); //$NON-NLS-1$
133 }
134 }
135
136 Throwable ex = null;
137 try
138 {
139 if (driver.acceptsURL(url))
140 return driver;
141 }
142 catch (SQLException e)
143 {
144 ex = e;
145 }
146 throw new Exception("No suitable driver"); //$NON-NLS-1$
147 }
148
149 public void startup(IProgressMonitor monitor) throws CoreException
150 {
151
152 }
153
154 public void shutdown(IProgressMonitor monitor) throws CoreException
155 {
156
157 }
158 }