Adding some base-classes to eliminate event and listener boiler-plate code throughout a number of subsystems.

Refactored all core components to take advantage of this; apps remain to be done.

Change-Id: Ib0935ba07ff81b0fa032534004ec9ac6187cbf22
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java
index 455ed68..5a89ccb 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/config/NetworkConfigService.java
@@ -17,6 +17,7 @@
 
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.annotations.Beta;
+import org.onosproject.event.ListenerService;
 
 import java.util.Set;
 
@@ -26,7 +27,8 @@
  * should act on or configure the network.
  */
 @Beta
-public interface NetworkConfigService {
+public interface NetworkConfigService
+    extends ListenerService<NetworkConfigEvent, NetworkConfigListener> {
 
     /**
      * Returns the set of subject classes for which configuration may be
@@ -140,17 +142,4 @@
      */
     <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass);
 
-    /**
-     * Adds the specified network config listener.
-     *
-     * @param listener network config listener
-     */
-    void addListener(NetworkConfigListener listener);
-
-    /**
-     * Removes the specified network config listener.
-     *
-     * @param listener network config listener
-     */
-    void removeListener(NetworkConfigListener listener);
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java
index 612fbc7..02052c3 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/resource/label/LabelResourceService.java
@@ -4,6 +4,7 @@
 import java.util.Set;
 
 import com.google.common.annotations.Beta;
+import org.onosproject.event.ListenerService;
 import org.onosproject.net.DeviceId;
 
 import com.google.common.collect.Multimap;
@@ -12,7 +13,8 @@
  * Service for providing label resource allocation.
  */
 @Beta
-public interface LabelResourceService {
+public interface LabelResourceService
+    extends ListenerService<LabelResourceEvent, LabelResourceListener> {
 
     /**
      * Returns labels from resource pool by a specific device id.
@@ -95,17 +97,4 @@
      */
     LabelResourcePool getGlobalLabelResourcePool();
 
-    /**
-     * Adds the specified label resource listener.
-     *
-     * @param listener label resource listener
-     */
-    void addListener(LabelResourceListener listener);
-
-    /**
-     * Removes the specified label resource listener.
-     *
-     * @param listener label resource listener
-     */
-    void removeListener(LabelResourceListener listener);
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelService.java
index a495955..2a10a4c 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelService.java
@@ -19,6 +19,7 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.event.ListenerService;
 import org.onosproject.incubator.net.tunnel.Tunnel.Type;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.DeviceId;
@@ -27,7 +28,8 @@
  * Service for interacting with the inventory of tunnels.
  */
 @Beta
-public interface TunnelService {
+public interface TunnelService
+    extends ListenerService<TunnelEvent, TunnelListener> {
 
     /**
      * Borrows a specific tunnel. Annotations parameter is reserved.If there
@@ -196,17 +198,4 @@
      */
     Iterable<Tunnel> getTunnels(DeviceId deviceId);
 
-    /**
-     * Adds the specified tunnel listener.
-     *
-     * @param listener tunnel listener
-     */
-    void addListener(TunnelListener listener);
-
-    /**
-     * Removes the specified tunnel listener.
-     *
-     * @param listener tunnel listener
-     */
-    void removeListener(TunnelListener listener);
 }