View Javadoc
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   * A dynamically loaded plugin is loaded through the plugin class loader.
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       * This plugin is dynamically loaded, so returns true.
52       *
53       * @return true
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  }