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 com.atlassian.util.concurrent.LazyReference;
11 import com.atlassian.util.concurrent.NotNull;
12 import org.dom4j.Element;
13
14 @RequirePermission(Permissions.EXECUTE_JAVA)
15 public class EventListenerModuleDescriptor extends AbstractModuleDescriptor<Object>
16 {
17 private final EventPublisher eventPublisher;
18
19 private LazyReference<Object> moduleObj = new LazyReference<Object>()
20 {
21 @Override
22 protected Object create() throws Exception
23 {
24 return moduleFactory.createModule(moduleClassName, EventListenerModuleDescriptor.this);
25 }
26 };
27
28 public EventListenerModuleDescriptor(ModuleFactory moduleFactory, EventPublisher eventPublisher)
29 {
30 super(moduleFactory);
31 this.eventPublisher = eventPublisher;
32 }
33
34 @Override
35 public void init(@NotNull Plugin plugin, @NotNull Element element) throws PluginParseException
36 {
37 super.init(plugin, element);
38 checkPermissions();
39 }
40
41 @Override
42 public Object getModule()
43 {
44 return moduleObj.get();
45 }
46
47 @Override
48 public void enabled()
49 {
50 super.enabled();
51 eventPublisher.register(getModule());
52 }
53
54 public void disabled()
55 {
56 eventPublisher.unregister(getModule());
57 super.disabled();
58 }
59 }