1 package com.atlassian.plugin.impl;
2
3 import com.atlassian.plugin.JarPluginArtifact;
4 import com.atlassian.plugin.PluginArtifact;
5 import com.atlassian.plugin.PluginArtifactBackedPlugin;
6 import com.atlassian.plugin.classloader.PluginClassLoader;
7 import com.atlassian.plugin.loaders.classloading.DeploymentUnit;
8
9 import java.io.InputStream;
10 import java.net.URL;
11
12 import static com.google.common.base.Preconditions.checkNotNull;
13
14
15
16
17 public class DefaultDynamicPlugin extends AbstractPlugin implements PluginArtifactBackedPlugin
18 {
19 private final PluginArtifact pluginArtifact;
20 private final PluginClassLoader loader;
21
22 public DefaultDynamicPlugin(final DeploymentUnit deploymentUnit, final PluginClassLoader loader)
23 {
24 this(new JarPluginArtifact(deploymentUnit.getPath()), loader);
25 }
26
27 public DefaultDynamicPlugin(final PluginArtifact pluginArtifact, final PluginClassLoader loader)
28 {
29 this.pluginArtifact = checkNotNull(pluginArtifact);
30 this.loader = checkNotNull(loader);
31 }
32
33 public <T> Class<T> loadClass(final String clazz, final Class<?> callingClass) throws ClassNotFoundException
34 {
35 @SuppressWarnings("unchecked")
36 final Class<T> result = (Class<T>) loader.loadClass(clazz);
37 return result;
38 }
39
40 public boolean isUninstallable()
41 {
42 return true;
43 }
44
45 public URL getResource(final String name)
46 {
47 return loader.getResource(name);
48 }
49
50 public InputStream getResourceAsStream(final String name)
51 {
52 return loader.getResourceAsStream(name);
53 }
54
55 public ClassLoader getClassLoader()
56 {
57 return loader;
58 }
59
60
61
62
63
64
65 public boolean isDynamicallyLoaded()
66 {
67 return true;
68 }
69
70
71
72
73 public DeploymentUnit getDeploymentUnit()
74 {
75 return new DeploymentUnit(pluginArtifact.toFile());
76 }
77
78
79
80
81 public PluginArtifact getPluginArtifact()
82 {
83 return pluginArtifact;
84 }
85
86 public boolean isDeleteable()
87 {
88 return true;
89 }
90
91 public boolean isBundledPlugin()
92 {
93 return false;
94 }
95
96 @Override
97 protected void uninstallInternal()
98 {
99 loader.close();
100 }
101 }