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