1 package org.opendaylight.controller.md.sal.common.impl;
3 import java.util.Collections;
4 import java.util.EventListener;
5 import java.util.HashSet;
7 import java.util.concurrent.ConcurrentHashMap;
9 import static com.google.common.base.Preconditions.*;
11 import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
12 import org.opendaylight.yangtools.concepts.ListenerRegistration;
14 public class ListenerRegistry<T extends EventListener> {
16 final Set<ListenerRegistration<T>> listeners;
17 final Set<ListenerRegistration<T>> unmodifiableView;
19 public ListenerRegistry() {
20 listeners = new HashSet<>();
21 unmodifiableView = Collections.unmodifiableSet(listeners);
24 public Iterable<ListenerRegistration<T>> getListeners() {
25 return unmodifiableView;
29 public ListenerRegistration<T> register(T listener) {
30 checkNotNull(listener, "Listener should not be null.");
31 ListenerRegistrationImpl<T> ret = new ListenerRegistrationImpl<T>(listener);
37 @SuppressWarnings("rawtypes")
38 private void remove(ListenerRegistrationImpl registration) {
39 listeners.remove(registration);
42 private class ListenerRegistrationImpl<P extends EventListener> //
43 extends AbstractObjectRegistration<P> //
44 implements ListenerRegistration<P> {
46 public ListenerRegistrationImpl(P instance) {
51 protected void removeRegistration() {
52 ListenerRegistry.this.remove(this);