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,
62                                              final ModuleDescriptorFactory moduleDescriptorFactory) {
63          return delegate().createModule(plugin, module, moduleDescriptorFactory);
64      }
65  
66      @Override
67      public String canLoad(PluginArtifact pluginArtifact) throws PluginParseException {
68          if (isDynamicPluginLoader()) {
69              return ((DynamicPluginLoader) delegate()).canLoad(pluginArtifact);
70          } else {
71              throw new IllegalStateException("Should not call on non-dynamic plugin loader");
72          }
73      }
74  
75      @Override
76      public void discardPlugin(final Plugin plugin) {
77          final PluginLoader delegate = delegate();
78          if (delegate instanceof DiscardablePluginLoader) {
79              ((DiscardablePluginLoader) delegate).discardPlugin(plugin);
80          } else {
81              // We ignore the discard, but we log because (in the short term) this is more likely to
82              // be a PluginLoader which should really be a DiscardablePluginLoader then one which is
83              // legitimately ignoring discardPlugin.
84              log.debug("Ignoring discardPlugin({}, version {}) as delegate is not a DiscardablePluginLoader",
85                      plugin.getKey(), plugin.getPluginInformation().getVersion());
86          }
87      }
88  }