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.PluginAccessor;
6   import com.atlassian.plugin.PluginException;
7   import com.atlassian.plugin.PluginParseException;
8   import com.atlassian.plugin.util.ClassLoaderUtils;
9   
10  import java.io.IOException;
11  import java.net.URL;
12  import java.util.ArrayList;
13  import java.util.Collection;
14  import java.util.Enumeration;
15  import java.util.List;
16  
17  import org.slf4j.Logger;
18  import org.slf4j.LoggerFactory;
19  
20  /**
21   * Loads plugins from the classpath
22   */
23  public class ClassPathPluginLoader implements PluginLoader
24  {
25      private static Logger log = LoggerFactory.getLogger(ClassPathPluginLoader.class);
26  
27      private final String fileNameToLoad;
28      private List<Plugin> plugins;
29  
30      public ClassPathPluginLoader()
31      {
32          this(PluginAccessor.Descriptor.FILENAME);
33      }
34  
35      public ClassPathPluginLoader(final String fileNameToLoad)
36      {
37          this.fileNameToLoad = fileNameToLoad;
38      }
39  
40      private void loadClassPathPlugins(final ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException
41      {
42          URL url = null;
43          final Enumeration<URL> pluginDescriptorFiles;
44          plugins = new ArrayList<Plugin>();
45  
46          try
47          {
48              pluginDescriptorFiles = ClassLoaderUtils.getResources(fileNameToLoad, this.getClass());
49          }
50          catch (final IOException e)
51          {
52              log.error("Could not load classpath plugins: " + e, e);
53              return;
54          }
55  
56          while (pluginDescriptorFiles.hasMoreElements())
57          {
58              url = pluginDescriptorFiles.nextElement();
59              plugins.addAll(new SinglePluginLoader(url).loadAllPlugins(moduleDescriptorFactory));
60          }
61      }
62  
63      public Collection<Plugin> loadAllPlugins(final ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException
64      {
65          if (plugins == null)
66          {
67              loadClassPathPlugins(moduleDescriptorFactory);
68          }
69  
70          return plugins;
71      }
72  
73      public boolean supportsRemoval()
74      {
75          return false;
76      }
77  
78      public boolean supportsAddition()
79      {
80          return false;
81      }
82  
83      public Collection<Plugin> addFoundPlugins(final ModuleDescriptorFactory moduleDescriptorFactory)
84      {
85          throw new UnsupportedOperationException("This PluginLoader does not support addition.");
86      }
87  
88      public void removePlugin(final Plugin plugin) throws PluginException
89      {
90          throw new PluginException("This PluginLoader does not support removal.");
91      }
92  }