Adding event sink & dispatcher abstractions.
Increased strength of the provider & service types.
diff --git a/net/api/src/main/java/org/onlab/onos/event/EventSinkBroker.java b/net/api/src/main/java/org/onlab/onos/event/EventSinkBroker.java
new file mode 100644
index 0000000..7be9562
--- /dev/null
+++ b/net/api/src/main/java/org/onlab/onos/event/EventSinkBroker.java
@@ -0,0 +1,45 @@
+package org.onlab.onos.event;
+
+import java.util.Set;
+
+/**
+ * Abstraction of an event sink broker capable of tracking sinks based on
+ * their event class.
+ */
+public interface EventSinkBroker {
+
+ /**
+ * Adds the specified sink for the given event class.
+ *
+ * @param eventClass event class
+ * @param sink event sink
+ * @param <E> type of event
+ */
+ <E extends Event> void addSink(Class<E> eventClass, EventSink<E> sink);
+
+ /**
+ * Removes the sink associated with the given event class.
+ *
+ * @param eventClass event class
+ * @param <E> type of event
+ */
+ <E extends Event> void removeSink(Class<E> eventClass);
+
+ /**
+ * Returns the event sink associated with the specified event class.
+ *
+ * @param eventClass event class
+ * @param <E> type of event
+ * @return event sink or null if none found
+ */
+ <E extends Event> EventSink<E> getSink(Class<E> eventClass);
+
+ /**
+ * Returns the set of all event classes for which sinks are presently
+ * registered.
+ *
+ * @return set of event classes
+ */
+ Set<Class<? extends Event>> getSinks();
+
+}