1 package com.atlassian.plugin.impl;
2
3 import com.atlassian.plugin.JarPluginArtifact;
4 import com.atlassian.plugin.PluginArtifact;
5 import com.atlassian.plugin.classloader.PluginClassLoader;
6 import com.atlassian.plugin.loaders.classloading.DeploymentUnit;
7
8 import java.io.InputStream;
9 import java.net.URL;
10
11 import static com.google.common.base.Preconditions.checkNotNull;
12
13
14
15
16 public class DefaultDynamicPlugin extends AbstractPlugin {
17 private final PluginClassLoader loader;
18
19 public DefaultDynamicPlugin(final DeploymentUnit deploymentUnit, final PluginClassLoader loader) {
20 this(new JarPluginArtifact(deploymentUnit.getPath()), loader);
21 }
22
23 public DefaultDynamicPlugin(final PluginArtifact pluginArtifact, final PluginClassLoader loader) {
24 super(checkNotNull(pluginArtifact));
25 this.loader = checkNotNull(loader);
26 }
27
28 public <T> Class<T> loadClass(final String clazz, final Class<?> callingClass) throws ClassNotFoundException {
29 @SuppressWarnings("unchecked")
30 final Class<T> result = (Class<T>) loader.loadClass(clazz);
31 return result;
32 }
33
34 public boolean isUninstallable() {
35 return true;
36 }
37
38 public URL getResource(final String name) {
39 return loader.getResource(name);
40 }
41
42 public InputStream getResourceAsStream(final String name) {
43 return loader.getResourceAsStream(name);
44 }
45
46 public ClassLoader getClassLoader() {
47 return loader;
48 }
49
50
51
52
53
54
55 public boolean isDynamicallyLoaded() {
56 return true;
57 }
58
59 public boolean isDeleteable() {
60 return true;
61 }
62
63 @Override
64 protected void uninstallInternal() {
65 loader.close();
66 }
67 }