View Javadoc

1   package com.atlassian.plugin.classloader;
2   
3   import org.apache.commons.logging.Log;
4   import org.apache.commons.logging.LogFactory;
5   
6   import java.io.InputStream;
7   import java.net.URL;
8   
9   /**
10   * A class loader that delegates to another class loader.
11   */
12  public class DelegationClassLoader extends ClassLoader
13  {
14      private static final Log log = LogFactory.getLog(DelegationClassLoader.class);
15  
16      private ClassLoader delegateClassLoader = DelegationClassLoader.class.getClassLoader();
17  
18      public void setDelegateClassLoader(ClassLoader delegateClassLoader)
19      {
20          if (delegateClassLoader == null)
21          {
22              throw new IllegalArgumentException("Can't set the delegation target to null");
23          }
24          if (log.isDebugEnabled())
25          {
26              log.debug("Update class loader delegation from [" + this.delegateClassLoader +
27                      "] to [" + delegateClassLoader + "]");
28          }
29          this.delegateClassLoader = delegateClassLoader;
30      }
31  
32      public Class loadClass(String name) throws ClassNotFoundException
33      {
34          return delegateClassLoader.loadClass(name);
35      }
36  
37      public URL getResource(String name)
38      {
39          return delegateClassLoader.getResource(name);
40      }
41  
42      public InputStream getResourceAsStream(String name)
43      {
44          return delegateClassLoader.getResourceAsStream(name);
45      }
46  
47      public synchronized void setDefaultAssertionStatus(boolean enabled)
48      {
49          delegateClassLoader.setDefaultAssertionStatus(enabled);
50      }
51  
52      public synchronized void setPackageAssertionStatus(String packageName, boolean enabled)
53      {
54          delegateClassLoader.setPackageAssertionStatus(packageName, enabled);
55      }
56  
57      public synchronized void setClassAssertionStatus(String className, boolean enabled)
58      {
59          delegateClassLoader.setClassAssertionStatus(className, enabled);
60      }
61  
62      public synchronized void clearAssertionStatus()
63      {
64          delegateClassLoader.clearAssertionStatus();
65      }
66  }