RESTCONF notification changes

* Added a callback function mechanism to the RESTCONF notification
  listener. Applications can register their callbacks to a listener.
  This is to allow multiple SB providers share one generic listener.
  while still being able to process app-specific events.
* Created a default RESTCONF notification listener implementation.
* Refactored TE provider code to allow TE-topology and TE-tunnel share one
  RESTCONF event listener

Change-Id: I26dc4972683fcda3eefacde131353312809aa95e
diff --git a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java
index 772aaea..bb565f2 100644
--- a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java
+++ b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfSBController.java
@@ -31,29 +31,41 @@
      * callBackListener upon receiving notifications to notify the requester
      * about notifications.
      *
-     *
-     * @param device device to make the request to
-     * @param request url of the request
-     * @param mediaType format to retrieve the content in
+     * @param device           device to make the request to
+     * @param request          url of the request
+     * @param mediaType        format to retrieve the content in
      * @param callBackListener method to call when notifications arrives
      */
     void enableNotifications(DeviceId device, String request, String mediaType,
-                          RestConfNotificationEventListener callBackListener);
+                             RestconfNotificationEventListener callBackListener);
 
     /**
-     * Register a listener for notification events that occur to restconf
+     * Registers a listener for notification events that occur to restconf
      * devices.
      *
-     * @param deviceId the deviceId
+     * @param deviceId identifier of the device to which the listener is attached
      * @param listener the listener to notify
      */
     void addNotificationListener(DeviceId deviceId,
-                                 RestConfNotificationEventListener listener);
+                                 RestconfNotificationEventListener listener);
 
     /**
-     * Unregister the listener for the device.
+     * Unregisters the listener for the device.
      *
-     * @param deviceId the deviceId
+     * @param deviceId identifier of the device for which the listener
+     *                 is to be removed
+     * @param listener listener to be removed
      */
-    void removeNotificationListener(DeviceId deviceId);
+    void removeNotificationListener(DeviceId deviceId,
+                                    RestconfNotificationEventListener listener);
+
+    /**
+     * Returns true if a listener has been installed to listen to RESTCONF
+     * notifications sent from a particular device.
+     *
+     * @param deviceId identifier of the device from which the notifications
+     *                 are generated
+     * @return true if listener is installed; false otherwise
+     */
+    boolean isNotificationEnabled(DeviceId deviceId);
 }
diff --git a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfNotificationEventListener.java b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestconfNotificationEventListener.java
similarity index 76%
rename from protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfNotificationEventListener.java
rename to protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestconfNotificationEventListener.java
index 7866587..230724b 100644
--- a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestConfNotificationEventListener.java
+++ b/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestconfNotificationEventListener.java
@@ -20,13 +20,13 @@
 /**
  * Notifies providers about incoming RESTCONF notification events.
  */
-public interface RestConfNotificationEventListener<T> {
+public interface RestconfNotificationEventListener<T> {
 
     /**
      * Handles the notification event.
      *
-     * @param deviceId        restconf device identifier
-     * @param eventJsonString the json string representation of the event
+     * @param deviceId restconf device identifier
+     * @param event    event payload
      */
-    void handleNotificationEvent(DeviceId deviceId, T eventJsonString);
+    void handleNotificationEvent(DeviceId deviceId, T event);
 }