View Javadoc
1   package com.atlassian.event.legacy;
2   
3   import com.atlassian.event.Event;
4   import com.atlassian.event.EventListener;
5   import com.atlassian.event.EventManager;
6   import com.atlassian.event.api.EventPublisher;
7   import com.google.common.collect.Maps;
8   import org.apache.commons.lang.StringUtils;
9   
10  import java.util.Map;
11  
12  import static com.google.common.base.Preconditions.checkNotNull;
13  
14  /**
15   * This is a legacy event manager that implements the now deprecated {@link com.atlassian.event.EventManager} interface. It relies on the
16   * {@link com.atlassian.event.api.EventPublisher} to actually publish the events.
17   *
18   * @since 2.0.0
19   * @deprecated since 2.0.0
20   */
21  public final class LegacyEventManager implements EventManager {
22      private final EventPublisher delegateEventPublisher;
23  
24      /**
25       * We need to keep this map of legacy listeners with their keys to be able to support un-registring with a specific key.
26       */
27      private final Map<String, EventListener> legacyListeners = Maps.newHashMap();
28  
29      public LegacyEventManager(EventPublisher delegateEventPublisher) {
30          this.delegateEventPublisher = checkNotNull(delegateEventPublisher);
31      }
32  
33      public void publishEvent(Event event) {
34          delegateEventPublisher.publish(checkNotNull(event));
35      }
36  
37      public void registerListener(String listenerKey, EventListener listener) {
38          checkListenerKey(listenerKey);
39          checkNotNull(listener);
40  
41          synchronized (legacyListeners) {
42              final EventListener registeredListener = legacyListeners.get(listenerKey);
43              if (registeredListener != null) {
44                  delegateEventPublisher.unregister(registeredListener);
45              }
46              legacyListeners.put(listenerKey, listener);
47              delegateEventPublisher.register(listener);
48          }
49      }
50  
51      public void unregisterListener(String listenerKey) {
52          checkListenerKey(listenerKey);
53          synchronized (legacyListeners) {
54              final EventListener listener = legacyListeners.get(listenerKey);
55              if (listener != null) {
56                  delegateEventPublisher.unregister(listener);
57              }
58          }
59      }
60  
61      private static void checkListenerKey(String listenerKey) {
62          if (StringUtils.isEmpty(listenerKey)) {
63              throw new IllegalArgumentException("listenerKey must not be empty");
64          }
65      }
66  }