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.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   * A dynamically loaded plugin is loaded through the plugin class loader.
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       * This plugin is dynamically loaded, so returns true.
62       *
63       * @return true
64       */
65      public boolean isDynamicallyLoaded()
66      {
67          return true;
68      }
69  
70      /**
71       * @deprecated Since 2.2.0, use {@link #getPluginArtifact()} instead
72       */
73      public DeploymentUnit getDeploymentUnit()
74      {
75          return new DeploymentUnit(pluginArtifact.toFile());
76      }
77  
78      /**
79       * @since 2.2.0
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 }