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