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