Revert "RESTCONF notification fixes"
This reverts commit 05c2c76eec9bbe553c3b4eeb9dcbb2175a25e3c2.
Change-Id: Ia92aa928ac9b6672cb229795ed4ea47f51bbafc2
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
index 31b3298..7866587 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
@@ -25,8 +25,8 @@
/**
* Handles the notification event.
*
- * @param deviceId restconf device identifier
- * @param event event payload
+ * @param deviceId restconf device identifier
+ * @param eventJsonString the json string representation of the event
*/
- void handleNotificationEvent(DeviceId deviceId, T event);
+ void handleNotificationEvent(DeviceId deviceId, T eventJsonString);
}
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 4cf9fe0..772aaea 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,48 +31,29 @@
* 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);
-
- //TODO: To be removed once the caller to this API is updated.
- @Deprecated void enableNotifications(DeviceId device, String request, String mediaType,
- RestConfNotificationEventListener callBackListener);
+ RestConfNotificationEventListener callBackListener);
/**
- * Registers a listener for notification events that occur to restconf
+ * Register a listener for notification events that occur to restconf
* devices.
*
- * @param deviceId identifier of the device to which the listener is attached
+ * @param deviceId the deviceId
* @param listener the listener to notify
*/
void addNotificationListener(DeviceId deviceId,
- RestconfNotificationEventListener listener);
+ RestConfNotificationEventListener listener);
/**
- * Unregisters the listener for the device.
+ * Unregister the listener for the device.
*
- * @param deviceId identifier of the device for which the listener
- * is to be removed
- * @param listener listener to be removed
+ * @param deviceId the deviceId
*/
- void removeNotificationListener(DeviceId deviceId,
- RestconfNotificationEventListener listener);
-
- //TODO: temporarily keep this API for backward compatibility.
- @Deprecated void removeNotificationListener(DeviceId deviceId);
-
- /**
- * 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);
+ void removeNotificationListener(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
deleted file mode 100644
index 230724b..0000000
--- a/protocols/restconf/client/api/src/main/java/org/onosproject/protocol/restconf/RestconfNotificationEventListener.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.protocol.restconf;
-
-import org.onosproject.net.DeviceId;
-
-/**
- * Notifies providers about incoming RESTCONF notification events.
- */
-public interface RestconfNotificationEventListener<T> {
-
- /**
- * Handles the notification event.
- *
- * @param deviceId restconf device identifier
- * @param event event payload
- */
- void handleNotificationEvent(DeviceId deviceId, T event);
-}
diff --git a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java b/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
index 77e87ef..ce6335b 100644
--- a/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
+++ b/protocols/restconf/client/ctl/src/main/java/org/onosproject/protocol/restconf/ctl/RestConfSBControllerImpl.java
@@ -15,6 +15,16 @@
*/
package org.onosproject.protocol.restconf.ctl;
+import java.io.InputStream;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.Response;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -28,23 +38,11 @@
import org.onosproject.protocol.rest.RestSBDevice;
import org.onosproject.protocol.restconf.RestConfNotificationEventListener;
import org.onosproject.protocol.restconf.RestConfSBController;
-import org.onosproject.protocol.restconf.RestconfNotificationEventListener;
import org.onosproject.yms.ych.YangProtocolEncodingFormat;
import org.onosproject.yms.ymsm.YmsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.GenericType;
-import javax.ws.rs.core.Response;
-import java.io.InputStream;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
/**
* The implementation of RestConfSBController.
*/
@@ -64,8 +62,8 @@
private static final String RESOURCE_PATH_PREFIX = "/data/";
private static final String NOTIFICATION_PATH_PREFIX = "/streams/";
- private Map<DeviceId, Set<RestconfNotificationEventListener>>
- restconfNotificationListenerMap = new ConcurrentHashMap<>();
+ private Map<DeviceId, RestConfNotificationEventListener>
+ restconfNotificationListenerMap = new ConcurrentHashMap<>();
private Map<DeviceId, GetChunksRunnable> runnableTable = new ConcurrentHashMap<>();
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -170,13 +168,8 @@
@Override
public void enableNotifications(DeviceId device, String request,
- String mediaType,
- RestconfNotificationEventListener listener) {
-
- if (isNotificationEnabled(device)) {
- log.warn("enableNotifications: already enabled on device: {}", device);
- return;
- }
+ String mediaType,
+ RestConfNotificationEventListener listener) {
request = discoverRootResource(device) + NOTIFICATION_PATH_PREFIX
+ request;
@@ -189,17 +182,11 @@
executor.execute(runnable);
}
- @Override
- public void enableNotifications(DeviceId device, String request,
- String mediaType,
- RestConfNotificationEventListener callBackListener) {
- //TODO: to be removed once the call to the API is updated.
- }
-
public void stopNotifications(DeviceId device) {
+
runnableTable.get(device).terminate();
runnableTable.remove(device);
- restconfNotificationListenerMap.remove(device);
+ removeNotificationListener(device);
log.debug("Stop sending notifications for device URI: " + device.uri().toString());
}
@@ -216,9 +203,9 @@
}
/**
- * @param request request
+ * @param request request
* @param mediaType media type
- * @param device device identifier
+ * @param device device identifier
*/
public GetChunksRunnable(String request, String mediaType,
DeviceId device) {
@@ -231,8 +218,8 @@
public void run() {
WebTarget wt = getWebTarget(device, request);
Response clientResp = wt.request(mediaType).get();
- Set<RestconfNotificationEventListener> listeners =
- restconfNotificationListenerMap.get(device);
+ RestConfNotificationEventListener listener = restconfNotificationListenerMap
+ .get(device);
final ChunkedInput<String> chunkedInput = (ChunkedInput<String>) clientResp
.readEntity(new GenericType<ChunkedInput<String>>() {
});
@@ -246,12 +233,10 @@
chunk = chunkedInput.read();
if (chunk != null) {
if (running) {
- for (RestconfNotificationEventListener listener : listeners) {
- listener.handleNotificationEvent(device, chunk);
- }
+ listener.handleNotificationEvent(device, chunk);
} else {
log.trace("the requesting client is no more interested "
- + "to receive such notifications.");
+ + "to receive such notifications.");
}
} else {
log.trace("The received notification chunk is null. do not continue any more.");
@@ -271,35 +256,15 @@
@Override
public void addNotificationListener(DeviceId deviceId,
- RestconfNotificationEventListener listener) {
- Set<RestconfNotificationEventListener> listeners =
- restconfNotificationListenerMap.get(deviceId);
- if (listeners == null) {
- listeners = new HashSet<>();
- }
-
- listeners.add(listener);
-
- this.restconfNotificationListenerMap.put(deviceId, listeners);
- }
-
- @Override
- public void removeNotificationListener(DeviceId deviceId,
- RestconfNotificationEventListener listener) {
- Set<RestconfNotificationEventListener> listeners =
- restconfNotificationListenerMap.get(deviceId);
- if (listeners != null) {
- listeners.remove(listener);
+ RestConfNotificationEventListener listener) {
+ if (!restconfNotificationListenerMap.containsKey(deviceId)) {
+ this.restconfNotificationListenerMap.put(deviceId, listener);
}
}
@Override
public void removeNotificationListener(DeviceId deviceId) {
- //TODO: This API is obsolete.
- return;
+ this.restconfNotificationListenerMap.remove(deviceId);
}
- public boolean isNotificationEnabled(DeviceId deviceId) {
- return runnableTable.containsKey(deviceId);
- }
}