001: /*
002: * This file is part of the QuickServer library
003: * Copyright (C) 2003-2005 QuickServer.org
004: *
005: * Use, modification, copying and distribution of this software is subject to
006: * the terms and conditions of the GNU Lesser General Public License.
007: * You should have received a copy of the GNU LGP License along with this
008: * library; if not, you can download a copy from <http://www.quickserver.org/>.
009: *
010: * For questions, suggestions, bug-reports, enhancement-requests etc.
011: * visit http://www.quickserver.org
012: *
013: */
014:
015: package org.quickserver.util;
016:
017: import java.util.*;
018: import java.io.*;
019: import java.net.*;
020: import org.quickserver.util.io.*;
021: import java.util.logging.*;
022:
023: /**
024: * A utility class to load class.
025: * @author Akshathkumar Shetty
026: * @since 1.3.2
027: */
028: public class ClassUtil {
029: private static Logger logger = Logger.getLogger(ClassUtil.class
030: .getName());
031:
032: /**
033: * Tries to load the classes present in the array
034: * passed has second parameter from
035: * the ClassLoader passed has first parameter.
036: * Returns the HashMap of all the classed successfully loaded.
037: * @param classLoader ClassLoader used to find the class
038: * @param classes[] array of classes to load.
039: */
040: public static Map loadClass(ClassLoader classLoader,
041: String classNames[]) throws Exception {
042: Class classloded = null;
043: HashMap classHash = new HashMap();
044: for (int i = 0; i < classNames.length; i++) {
045: try {
046: classloded = classLoader.loadClass(classNames[i]);
047: classHash.put(classNames[i], classloded);
048: } catch (Exception e) {
049: logger.warning("Could not load classes : " + e);
050: }
051: }
052: return classHash;
053: }
054:
055: /**
056: * Returns the ClassLoader to all the jars present in the
057: * dir passed has first parameter.
058: * @param jarDir path to the directory containing the jars
059: */
060: public static ClassLoader getClassLoaderFromJars(String jarDir)
061: throws Exception {
062: logger.fine("Getting ClassLoader for jars in " + jarDir);
063: File file = new File(jarDir);
064: ArrayList list = new ArrayList();
065:
066: File jars[] = file.listFiles(new JarFileList());
067: for (int j = 0; j < jars.length; j++) {
068: list.add(jars[j].toURL());
069: }
070:
071: Object array[] = list.toArray();
072: URL jarurl[] = new URL[array.length];
073: for (int i = 0; i < array.length; i++) {
074: jarurl[i] = (URL) array[i];
075: }
076:
077: URLClassLoader classLoader = URLClassLoader.newInstance(jarurl);
078: return classLoader;
079: }
080:
081: /**
082: * Returns the ClassLoader to a jar
083: * @since 1.3.3
084: */
085: public static ClassLoader getClassLoaderFromJar(String jarPath)
086: throws Exception {
087: File file = new File(jarPath);
088: logger.fine("Getting ClassLoader for "
089: + file.getCanonicalPath());
090: URL jarurl[] = { file.toURL() };
091: URLClassLoader classLoader = URLClassLoader.newInstance(jarurl);
092: return classLoader;
093: }
094:
095: /**
096: * Returns the ClassLoader
097: * @since 1.3.3
098: */
099: public static ClassLoader getClassLoader(String path)
100: throws Exception {
101: File file = new File(path);
102: if (file.canRead() == false) {
103: logger.warning("Could not read path: " + path);
104: return null;
105: }
106: if (file.isDirectory())
107: return getClassLoaderFromJars(path);
108: else
109: return getClassLoaderFromJar(path);
110: }
111: }
|