View Javadoc
1   package com.atlassian.plugin.osgi.factory.descriptor;
2   
3   import com.atlassian.plugin.Permissions;
4   import com.atlassian.plugin.Plugin;
5   import com.atlassian.plugin.PluginParseException;
6   import com.atlassian.plugin.RequirePermission;
7   import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
8   import com.atlassian.plugin.descriptors.CannotDisable;
9   import com.atlassian.plugin.module.ModuleFactory;
10  import com.atlassian.plugin.osgi.module.BeanPrefixModuleFactory;
11  import org.dom4j.Element;
12  
13  import javax.annotation.Nonnull;
14  
15  /**
16   * Module descriptor for components. Shouldn't be directly used outside providing read-only information.
17   *
18   * @since 2.2.0
19   */
20  @CannotDisable
21  @RequirePermission(Permissions.EXECUTE_JAVA)
22  public class ComponentModuleDescriptor extends AbstractModuleDescriptor<Object> {
23      public ComponentModuleDescriptor() {
24          super(ModuleFactory.LEGACY_MODULE_FACTORY);
25      }
26  
27      @Override
28      public void init(@Nonnull Plugin plugin, @Nonnull Element element) throws PluginParseException {
29          super.init(plugin, element);
30          checkPermissions();
31      }
32  
33      @Override
34      protected void loadClass(Plugin plugin, String clazz) throws PluginParseException {
35          try {
36              // this should have been done once by the plugin container so should never throw exception.
37              this.moduleClass = plugin.loadClass(clazz, null);
38          } catch (ClassNotFoundException e) {
39              throw new PluginParseException("cannot load component class", e);
40          }
41      }
42  
43      @Override
44      public Object getModule() {
45          return new BeanPrefixModuleFactory().createModule(getKey(), this);
46      }
47  }