001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.util;
018:
019: import java.io.File;
020: import java.io.IOException;
021: import java.net.MalformedURLException;
022: import java.net.URL;
023:
024: /**
025: * A collection of class management utility methods.
026: *
027: * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
028: * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
029: * @version CVS $Id: ClassUtils.java 433543 2006-08-22 06:22:54Z crossley $
030: */
031: public class ClassUtils {
032:
033: /**
034: * Create a new instance given a class name
035: *
036: * @param className A class name
037: * @return A new instance
038: * @exception Exception If an instantiation error occurs
039: */
040: public static Object newInstance(String className) throws Exception {
041: return ClassUtils.loadClass(className).newInstance();
042: }
043:
044: /**
045: * Load a class given its name.
046: * BL: We wan't to use a known ClassLoader--hopefully the hierarchy
047: * is set correctly.
048: *
049: * @param className A class name
050: * @return The class pointed to by <code>className</code>
051: * @exception ClassNotFoundException If a loading error occurs
052: */
053: public static Class loadClass(String className)
054: throws ClassNotFoundException {
055: return ClassUtils.getClassLoader().loadClass(className);
056: }
057:
058: /**
059: * Return a resource URL.
060: * BL: if this is command line operation, the classloading issues
061: * are more sane. During servlet execution, we explicitly set
062: * the ClassLoader.
063: *
064: * @return The context classloader.
065: * @exception MalformedURLException If a loading error occurs
066: */
067: public static URL getResource(String resource)
068: throws MalformedURLException {
069: return ClassUtils.getClassLoader().getResource(resource);
070: }
071:
072: /**
073: * Return the context classloader.
074: * BL: if this is command line operation, the classloading issues
075: * are more sane. During servlet execution, we explicitly set
076: * the ClassLoader.
077: *
078: * @return The context classloader.
079: */
080: public static ClassLoader getClassLoader() {
081: return Thread.currentThread().getContextClassLoader();
082: }
083:
084: /**
085: * Tests if a class implements a given interface
086: *
087: * @return true if class implements given interface.
088: * @deprecated Will be removed 2 versions after 2.1.5
089: */
090: public static boolean implements Interface(String className,
091: String iface) throws Exception {
092: Class class1 = ClassUtils.loadClass(className);
093: Class class2 = ClassUtils.loadClass(iface);
094: return ClassUtils.implements Interface(class1, class2);
095: }
096:
097: /**
098: * Tests if a class implements a given interface
099: *
100: * @return true if class implements given interface.
101: * @deprecated Will be removed 2 versions after 2.1.5
102: */
103: public static boolean implements Interface(Class class1, Class iface) {
104: return iface.isAssignableFrom(class1);
105: }
106:
107: /**
108: * Determine the last modification date for this
109: * class file or its enclosing library
110: *
111: * @param aClass A class whose last modification date is queried
112: * @return The time the given class was last modified
113: * @exception IOException IOError
114: * @exception IllegalArgumentException The class was not loaded from a file
115: * or directory
116: * @deprecated Will be removed 2 versions after 2.1.5
117: */
118: public static long lastModified(Class aClass) throws IOException,
119: IllegalArgumentException {
120: URL url = aClass.getProtectionDomain().getCodeSource()
121: .getLocation();
122:
123: if (!url.getProtocol().equals("file")) {
124: throw new IllegalArgumentException(
125: "Class was not loaded from a file url");
126: }
127:
128: File directory = new File(url.getFile());
129: if (!directory.isDirectory()) {
130: throw new IllegalArgumentException(
131: "Class was not loaded from a directory");
132: }
133:
134: String className = aClass.getName();
135: String basename = className.substring(className
136: .lastIndexOf(".") + 1);
137:
138: File file = new File(directory, basename + ".class");
139:
140: return file.lastModified();
141: }
142:
143: /**
144: * Gets the absolute pathname of the class file
145: * containing the specified class name, as prescribed
146: * by the current classpath.
147: *
148: * @param aClass Name of the class.
149: * @deprecated Will be removed 2 versions after 2.1.5
150: */
151: public static String which(Class aClass) {
152: String path = null;
153: try {
154: path = aClass.getProtectionDomain().getCodeSource()
155: .getLocation().toString();
156: } catch (Throwable t) {
157: }
158: return path;
159: }
160:
161: }
|