1 package com.atlassian.plugin.classloader;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
6 import java.io.InputStream;
7 import java.io.IOException;
8 import java.net.URL;
9 import java.util.Enumeration;
10
11 import static com.google.common.base.Preconditions.checkNotNull;
12
13
14
15
16 public class DelegationClassLoader extends ClassLoader
17 {
18 private static final Logger log = LoggerFactory.getLogger(DelegationClassLoader.class);
19
20 private ClassLoader delegateClassLoader = DelegationClassLoader.class.getClassLoader();
21
22 public void setDelegateClassLoader(ClassLoader delegateClassLoader)
23 {
24 this.delegateClassLoader = checkNotNull(delegateClassLoader, "Can't set the delegation target to null");
25 if (log.isDebugEnabled())
26 {
27 log.debug("Update class loader delegation from [{}] to [{}]", this.delegateClassLoader, delegateClassLoader);
28 }
29 }
30
31 public Class loadClass(String name) throws ClassNotFoundException
32 {
33 return delegateClassLoader.loadClass(name);
34 }
35
36 public URL getResource(String name)
37 {
38 return delegateClassLoader.getResource(name);
39 }
40
41 @Override
42 public Enumeration<URL> getResources(String name) throws IOException
43 {
44 return delegateClassLoader.getResources(name);
45 }
46
47 public InputStream getResourceAsStream(String name)
48 {
49 return delegateClassLoader.getResourceAsStream(name);
50 }
51
52 public synchronized void setDefaultAssertionStatus(boolean enabled)
53 {
54 delegateClassLoader.setDefaultAssertionStatus(enabled);
55 }
56
57 public synchronized void setPackageAssertionStatus(String packageName, boolean enabled)
58 {
59 delegateClassLoader.setPackageAssertionStatus(packageName, enabled);
60 }
61
62 public synchronized void setClassAssertionStatus(String className, boolean enabled)
63 {
64 delegateClassLoader.setClassAssertionStatus(className, enabled);
65 }
66
67 public synchronized void clearAssertionStatus()
68 {
69 delegateClassLoader.clearAssertionStatus();
70 }
71 }