View Javadoc
1   package com.atlassian.plugin.eventlistener.descriptors;
2   
3   import com.atlassian.event.api.EventPublisher;
4   import com.atlassian.plugin.Permissions;
5   import com.atlassian.plugin.Plugin;
6   import com.atlassian.plugin.PluginParseException;
7   import com.atlassian.plugin.RequirePermission;
8   import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
9   import com.atlassian.plugin.module.ModuleFactory;
10  import io.atlassian.util.concurrent.LazyReference;
11  import org.dom4j.Element;
12  
13  import javax.annotation.Nonnull;
14  
15  @RequirePermission(Permissions.EXECUTE_JAVA)
16  public class EventListenerModuleDescriptor extends AbstractModuleDescriptor<Object> {
17  
18      /**
19       * This is fallback property in case if registration by module descriptor somehow failed to work.
20       * <p>
21       * It will restore old behaviour when registration happening by module.
22       */
23      static final String FALLBACK_MODE = "EventListenerModuleDescriptor.Fallback.Mode";
24  
25      private final EventPublisher eventPublisher;
26  
27      private LazyReference<Object> moduleObj = new LazyReference<Object>() {
28          @Override
29          protected Object create() throws Exception {
30              return moduleFactory.createModule(moduleClassName, EventListenerModuleDescriptor.this);
31          }
32      };
33  
34      public EventListenerModuleDescriptor(ModuleFactory moduleFactory, EventPublisher eventPublisher) {
35          super(moduleFactory);
36          this.eventPublisher = eventPublisher;
37      }
38  
39      @Override
40      public void init(@Nonnull Plugin plugin, @Nonnull Element element) throws PluginParseException {
41          super.init(plugin, element);
42          checkPermissions();
43      }
44  
45      @Override
46      public Object getModule() {
47          return moduleObj.get();
48      }
49  
50      @Override
51      public void enabled() {
52          super.enabled();
53  
54          if (Boolean.getBoolean(FALLBACK_MODE)) {
55              eventPublisher.register(getModule());
56          } else {
57              eventPublisher.register(this);
58          }
59      }
60  
61      public void disabled() {
62          if (Boolean.getBoolean(FALLBACK_MODE)) {
63              eventPublisher.unregister(getModule());
64          } else {
65              eventPublisher.unregister(this);
66          }
67  
68          super.disabled();
69      }
70  }