X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fsal%2Fsal-binding-broker-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fimpl%2FNotificationBrokerImpl.xtend;fp=opendaylight%2Fsal%2Fyang-prototype%2Fsal%2Fsal-binding-broker-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fimpl%2FNotificationBrokerImpl.xtend;h=da1ba79997d16a910ccafe023076e72db460ae7c;hb=42183ad5bfefff7d6de9df467cdaa600a450af29;hp=0000000000000000000000000000000000000000;hpb=f3bdffc96f0c221111faeef07db2a6b975f56463;p=controller.git diff --git a/opendaylight/sal/yang-prototype/sal/sal-binding-broker-impl/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.xtend b/opendaylight/sal/yang-prototype/sal/sal-binding-broker-impl/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.xtend new file mode 100644 index 0000000000..da1ba79997 --- /dev/null +++ b/opendaylight/sal/yang-prototype/sal/sal-binding-broker-impl/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.xtend @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.sal.binding.impl + +import org.opendaylight.controller.sal.binding.api.NotificationProviderService +import org.opendaylight.yangtools.yang.binding.Notification +import com.google.common.collect.Multimap +import org.opendaylight.controller.sal.binding.api.NotificationListener +import com.google.common.collect.HashMultimap +import java.util.concurrent.ExecutorService +import java.util.Collection + +class NotificationBrokerImpl implements NotificationProviderService { + + val Multimap, NotificationListener> listeners; + val ExecutorService executor; + + new(ExecutorService executor) { + listeners = HashMultimap.create() + this.executor = executor; + } + + override addNotificationListener(Class notificationType, + NotificationListener listener) { + listeners.put(notificationType, listener) + } + + override removeNotificationListener(Class notificationType, + NotificationListener listener) { + listeners.remove(notificationType, listener) + } + + override notify(Notification notification) { + notification.notificationTypes.forEach [ + listeners.get(it as Class)?.notifyAll(notification) + ] + } + + def getNotificationTypes(Notification notification) { + notification.class.interfaces.filter[it != Notification && Notification.isAssignableFrom(it)] + } + + def notifyAll(Collection> listeners, Notification notification) { + listeners.forEach[(it as NotificationListener).onNotification(notification)] + } +}