View Javadoc

1   package com.atlassian.plugin.loaders;
2   
3   import com.atlassian.plugin.ModuleDescriptorFactory;
4   import com.atlassian.plugin.Plugin;
5   import com.atlassian.plugin.PluginArtifact;
6   import com.atlassian.plugin.PluginException;
7   import com.atlassian.plugin.PluginParseException;
8   
9   import com.google.common.collect.ForwardingObject;
10  
11  import org.slf4j.Logger;
12  import org.slf4j.LoggerFactory;
13  
14  import static com.google.common.base.Preconditions.checkNotNull;
15  
16  public class ForwardingPluginLoader extends ForwardingObject implements DynamicPluginLoader, DiscardablePluginLoader
17  {
18      private static final Logger log = LoggerFactory.getLogger(ForwardingPluginLoader.class);
19  
20      private final PluginLoader delegate;
21  
22      public ForwardingPluginLoader(PluginLoader delegate)
23      {
24          this.delegate = checkNotNull(delegate);
25      }
26  
27      @Override
28      protected final PluginLoader delegate()
29      {
30          return delegate;
31      }
32  
33      @Override
34      public Iterable<Plugin> loadAllPlugins(ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException
35      {
36          return delegate().loadAllPlugins(moduleDescriptorFactory);
37      }
38  
39      @Override
40      public Iterable<Plugin> loadFoundPlugins(ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException
41      {
42          return delegate().loadFoundPlugins(moduleDescriptorFactory);
43      }
44  
45      @Override
46      public boolean supportsAddition()
47      {
48          return delegate().supportsAddition();
49      }
50  
51      @Override
52      public boolean supportsRemoval()
53      {
54          return delegate().supportsRemoval();
55      }
56  
57      @Override
58      public void removePlugin(Plugin plugin) throws PluginException
59      {
60          delegate().removePlugin(plugin);
61      }
62  
63      @Override
64      public boolean isDynamicPluginLoader()
65      {
66          return delegate().isDynamicPluginLoader();
67      }
68  
69      @Override
70      public String canLoad(PluginArtifact pluginArtifact) throws PluginParseException
71      {
72          if (isDynamicPluginLoader())
73          {
74              return ((DynamicPluginLoader)delegate()).canLoad(pluginArtifact);
75          }
76          else
77          {
78              throw new IllegalStateException("Should not call on non-dynamic plugin loader");
79          }
80      }
81  
82      @Override
83      public void discardPlugin(final Plugin plugin)
84      {
85          final PluginLoader delegate = delegate();
86          if (delegate instanceof DiscardablePluginLoader)
87          {
88              ((DiscardablePluginLoader) delegate).discardPlugin(plugin);
89          }
90          else
91          {
92              // We ignore the discard, but we log because (in the short term) this is more likely to
93              // be a PluginLoader which should really be a DiscardablePluginLoader then one which is
94              // legitimately ignoring discardPlugin.
95              log.debug("Ignoring discardPlugin({}, version {}) as delegate is not a DiscardablePluginLoader",
96                  plugin.getKey(), plugin.getPluginInformation().getVersion());
97          }
98      }
99  }