X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-restconf-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fbroker%2Fimpl%2FNotificationServiceImpl.java;h=c08f329f0d81d694e8c4f97a04fd2dfe69c25468;hb=5aa8f995feede44d69bc26e70a67e6c44b01c758;hp=a0162395f57c6a88f529ab407d2ebe8578e194e3;hpb=474d4daf958336effcf4f419843d9d659a27bce5;p=controller.git diff --git a/opendaylight/md-sal/sal-restconf-broker/src/main/java/org/opendaylight/controller/sal/restconf/broker/impl/NotificationServiceImpl.java b/opendaylight/md-sal/sal-restconf-broker/src/main/java/org/opendaylight/controller/sal/restconf/broker/impl/NotificationServiceImpl.java index a0162395f5..c08f329f0d 100644 --- a/opendaylight/md-sal/sal-restconf-broker/src/main/java/org/opendaylight/controller/sal/restconf/broker/impl/NotificationServiceImpl.java +++ b/opendaylight/md-sal/sal-restconf-broker/src/main/java/org/opendaylight/controller/sal/restconf/broker/impl/NotificationServiceImpl.java @@ -7,112 +7,56 @@ */ package org.opendaylight.controller.sal.restconf.broker.impl; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import com.google.common.collect.Multimaps; -import com.google.common.collect.SetMultimap; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutorService; + import org.opendaylight.controller.sal.binding.api.NotificationListener; import org.opendaylight.controller.sal.binding.api.NotificationService; import org.opendaylight.controller.sal.restconf.broker.listeners.RemoteNotificationListener; import org.opendaylight.controller.sal.restconf.broker.tools.RemoteStreamTools; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.remote.rev140114.QName; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.remote.rev140114.SalRemoteService; +import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.restconf.client.api.RestconfClientContext; import org.opendaylight.yangtools.restconf.client.api.event.EventStreamInfo; import org.opendaylight.yangtools.yang.binding.Notification; public class NotificationServiceImpl implements NotificationService { - private SalRemoteService salRemoteService; - private RestconfClientContext restconfClientContext; - - private final Multimap,NotificationListener> listeners; - private ExecutorService _executor; + private final SalRemoteService salRemoteService; + private final RestconfClientContext restconfClientContext; public NotificationServiceImpl(RestconfClientContext restconfClienetContext){ this.restconfClientContext = restconfClienetContext; this.salRemoteService = this.restconfClientContext.getRpcServiceContext(SalRemoteService.class).getRpcService(); - - HashMultimap,NotificationListener> _create = HashMultimap., NotificationListener>create(); - SetMultimap,NotificationListener> _synchronizedSetMultimap = Multimaps., NotificationListener>synchronizedSetMultimap(_create); - this.listeners = _synchronizedSetMultimap; - - } - public ExecutorService getExecutor() { - return this._executor; - } - - public void setExecutor(final ExecutorService executor) { - this._executor = executor; - } - - @Override - public void addNotificationListener(Class notificationType, NotificationListener listener) { - this.listeners.put(notificationType, listener); - } - - @Override - public void addNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener listener) { - UnsupportedOperationException _unsupportedOperationException = new UnsupportedOperationException("Deprecated method. Use registerNotificationListener instead."); - throw _unsupportedOperationException; - } - - @Override - public void removeNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener listener) { - UnsupportedOperationException _unsupportedOperationException = new UnsupportedOperationException( - "Deprecated method. Use RegisterNotificationListener returned value to close registration."); - throw _unsupportedOperationException; } @Override - public void removeNotificationListener(Class notificationType, NotificationListener listener) { - this.listeners.remove(notificationType, listener); - } - - @Override - public Registration> registerNotificationListener(Class notificationType, NotificationListener listener) { + public ListenerRegistration> registerNotificationListener(Class notificationType, NotificationListener listener) { //TODO implementation using sal-remote List notifications = new ArrayList(); notifications.add(new QName(notificationType.toString())); String notificationStreamName = RemoteStreamTools.createNotificationStream(salRemoteService, notifications); final Map desiredEventStream = RemoteStreamTools.createEventStream(restconfClientContext, notificationStreamName); RemoteNotificationListener remoteNotificationListener = new RemoteNotificationListener(listener); - ListenerRegistration listenerRegistration = restconfClientContext.getEventStreamContext(desiredEventStream.get(desiredEventStream.get(notificationStreamName))).registerNotificationListener(remoteNotificationListener); - SalNotificationRegistration salNotificationRegistration = new SalNotificationRegistration(listenerRegistration); - return salNotificationRegistration; + + final ListenerRegistration listenerRegistration = restconfClientContext.getEventStreamContext(desiredEventStream.get(desiredEventStream.get(notificationStreamName))) + .registerNotificationListener(remoteNotificationListener); + + return new AbstractListenerRegistration>(listener) { + @Override + protected void removeRegistration() { + listenerRegistration.close(); + } + }; } @Override - public Registration registerNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener listener) { + public ListenerRegistration registerNotificationListener(org.opendaylight.yangtools.yang.binding.NotificationListener listener) { //TODO implementation using sal-remote String notificationStreamName = RemoteStreamTools.createNotificationStream(salRemoteService, null); final Map desiredEventStream = RemoteStreamTools.createEventStream(restconfClientContext, notificationStreamName); - ListenerRegistration listenerRegistration = restconfClientContext.getEventStreamContext(desiredEventStream.get(desiredEventStream.get(notificationStreamName))).registerNotificationListener(listener); - return listenerRegistration; + return restconfClientContext.getEventStreamContext(desiredEventStream.get(desiredEventStream.get(notificationStreamName))).registerNotificationListener(listener); } - - private class SalNotificationRegistration implements Registration>{ - private Registration registration; - - public SalNotificationRegistration(ListenerRegistration listenerRegistration){ - this.registration = listenerRegistration; - } - - @Override - public NotificationListener getInstance() { - return this.getInstance(); - } - - @Override - public void close() throws Exception { - this.registration.close(); - } - } - - }