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
93
94
95 log.debug("Ignoring discardPlugin({}, version {}) as delegate is not a DiscardablePluginLoader",
96 plugin.getKey(), plugin.getPluginInformation().getVersion());
97 }
98 }
99 }