1   package com.atlassian.plugin.osgi.factory;
2   
3   import com.atlassian.plugin.ModuleDescriptor;
4   import com.atlassian.plugin.ModuleDescriptorFactory;
5   import com.atlassian.plugin.PluginParseException;
6   import com.atlassian.plugin.descriptors.UnrecognisedModuleDescriptor;
7   
8   import org.apache.log4j.Logger;
9   
10  /**
11   * Module descriptor factory for deferred modules.  Turns every request for a module descriptor into a deferred
12   * module so be sure that this factory is last in a list of factories.
13   *
14   * @since 2.1.2
15   * @see {@link UnrecognisedModuleDescriptor}
16   */
17  class UnrecognisedModuleDescriptorFallbackFactory implements ModuleDescriptorFactory
18  {
19      private static final Logger log = Logger.getLogger(UnrecognisedModuleDescriptorFallbackFactory.class);
20      public static final String DESCRIPTOR_TEXT = "Support for this module is not currently installed.";
21  
22      public UnrecognisedModuleDescriptor getModuleDescriptor(final String type) throws PluginParseException, IllegalAccessException, InstantiationException, ClassNotFoundException
23      {
24          log.info("Unknown module descriptor of type " + type + " registered as an unrecognised descriptor.");
25          final UnrecognisedModuleDescriptor descriptor = new UnrecognisedModuleDescriptor();
26          descriptor.setErrorText(DESCRIPTOR_TEXT);
27          return descriptor;
28      }
29  
30      public boolean hasModuleDescriptor(final String type)
31      {
32          return true;
33      }
34  
35      public Class<? extends ModuleDescriptor<?>> getModuleDescriptorClass(final String type)
36      {
37          return UnrecognisedModuleDescriptor.class;
38      }
39  }