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
20
21
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 }