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
82
83
84 log.debug("Ignoring discardPlugin({}, version {}) as delegate is not a DiscardablePluginLoader",
85 plugin.getKey(), plugin.getPluginInformation().getVersion());
86 }
87 }
88 }