blob: 4ca3c3ca61828a2ffe2304e33866161028fbf802 [file] [log] [blame]
tomd7356722014-08-26 01:07:39 -07001package org.onlab.onos.event;
2
3import com.google.common.collect.ImmutableSet;
4
5import java.util.Map;
6import java.util.Set;
7import java.util.concurrent.ConcurrentHashMap;
8
9import static com.google.common.base.Preconditions.checkArgument;
10import static com.google.common.base.Preconditions.checkNotNull;
11
12/**
13 * Base implementation of event sink broker.
14 */
15public class AbstractEventSinkBroker implements EventSinkBroker {
16
17 private final Map<Class<? extends Event>, EventSink<? extends Event>> sinks =
18 new ConcurrentHashMap<>();
19
20 @Override
21 public <E extends Event> void addSink(Class<E> eventClass, EventSink<E> sink) {
22 checkNotNull(eventClass, "Event class cannot be null");
23 checkNotNull(sink, "Event sink cannot be null");
24 checkArgument(!sinks.containsKey(eventClass),
25 "Event sink already registered for %s", eventClass.getName());
26 sinks.put(eventClass, sink);
27 }
28
29 @Override
30 public <E extends Event> void removeSink(Class<E> eventClass) {
31 checkNotNull(eventClass, "Event class cannot be null");
32 checkArgument(sinks.remove(eventClass) != null,
33 "Event sink not registered for %s", eventClass.getName());
34 }
35
36 @Override
37 @SuppressWarnings("unchecked")
38 public <E extends Event> EventSink<E> getSink(Class<E> eventClass) {
39 return (EventSink<E>) sinks.get(eventClass);
40 }
41
42 @Override
43 public Set<Class<? extends Event>> getSinks() {
44 return ImmutableSet.copyOf(sinks.keySet());
45 }
46}