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