*/\r
package org.opendaylight.controller.sal.core.impl.notify;\r
\r
+import java.util.Collection;\r
import java.util.Collections;\r
-import java.util.HashMap;\r
import java.util.HashSet;\r
-import java.util.List;\r
import java.util.Map;\r
import java.util.Map.Entry;\r
import java.util.Set;\r
import org.opendaylight.controller.sal.core.api.notify.NotificationProviderService;\r
import org.opendaylight.controller.sal.core.api.notify.NotificationService;\r
import org.opendaylight.controller.sal.core.impl.BrokerServiceImpl;\r
-import org.opendaylight.controller.sal.core.impl.Utils;\r
import org.opendaylight.controller.sal.core.spi.BrokerModule;\r
import org.opendaylight.controller.yang.common.QName;\r
import org.opendaylight.controller.yang.data.api.CompositeNode;\r
import org.slf4j.Logger;\r
import org.slf4j.LoggerFactory;\r
\r
-\r
+import com.google.common.collect.HashMultimap;\r
+import com.google.common.collect.ImmutableSet;\r
+import com.google.common.collect.Multimap;\r
\r
public class NotificationModule implements BrokerModule {\r
private static Logger log = LoggerFactory\r
.getLogger(NotificationModule.class);\r
\r
- private Map<QName, List<NotificationListener>> listeners = new HashMap<QName, List<NotificationListener>>();\r
+ private Multimap<QName, NotificationListener> listeners = HashMultimap\r
+ .create();\r
+\r
+ private static final Set<Class<? extends BrokerService>> providedServices = ImmutableSet\r
+ .of((Class<? extends BrokerService>) NotificationService.class,\r
+ NotificationProviderService.class);\r
\r
@Override\r
public Set<Class<? extends BrokerService>> getProvidedServices() {\r
- // FIXME Refactor\r
- Set<Class<? extends BrokerService>> ret = new HashSet<Class<? extends BrokerService>>();\r
- ret.add(NotificationService.class);\r
- ret.add(NotificationProviderService.class);\r
- return ret;\r
+ return providedServices;\r
}\r
\r
@Override\r
\r
private void sendNotification(CompositeNode notification) {\r
QName type = notification.getNodeType();\r
- List<NotificationListener> toNotify = listeners.get(type);\r
+ Collection<NotificationListener> toNotify = listeners.get(type);\r
log.info("Publishing notification " + type);\r
\r
if (toNotify == null) {\r
private class NotificationConsumerSessionImpl extends BrokerServiceImpl\r
implements NotificationService {\r
\r
- Map<QName, List<NotificationListener>> consumerListeners = new HashMap<QName, List<NotificationListener>>();\r
+ private Multimap<QName, NotificationListener> consumerListeners = HashMultimap\r
+ .create();\r
private boolean closed = false;\r
\r
@Override\r
throw new IllegalArgumentException("Listener must not be null.");\r
}\r
\r
- Utils.addToMap(consumerListeners, notification, listener);\r
- Utils.addToMap(listeners, notification, listener);\r
+ consumerListeners.put(notification, listener);\r
+ listeners.put(notification, listener);\r
log.info("Registered listener for notification: " + notification);\r
}\r
\r
if (listener == null) {\r
throw new IllegalArgumentException("Listener must not be null.");\r
}\r
- Utils.removeFromMap(consumerListeners, notification, listener);\r
- Utils.removeFromMap(listeners, notification, listener);\r
+ consumerListeners.remove(notification, listener);\r
+ listeners.remove(notification, listener);\r
}\r
\r
@Override\r
public void closeSession() {\r
closed = true;\r
- Set<Entry<QName, List<NotificationListener>>> toRemove = consumerListeners\r
- .entrySet();\r
- for (Entry<QName, List<NotificationListener>> entry : toRemove) {\r
- listeners.get(entry.getKey()).removeAll(entry.getValue());\r
+ Map<QName, Collection<NotificationListener>> toRemove = consumerListeners\r
+ .asMap();\r
+ for (Entry<QName, Collection<NotificationListener>> entry : toRemove\r
+ .entrySet()) {\r
+ listeners.remove(entry.getKey(), entry.getValue());\r
}\r
}\r
\r
return Collections.emptySet();\r
}\r
}\r
-