2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.protocol.bmp.impl.app;
11 import static java.util.Objects.requireNonNull;
14 import java.util.concurrent.ConcurrentHashMap;
15 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
16 import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
17 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
18 import org.opendaylight.protocol.bmp.api.BmpSessionListener;
19 import org.opendaylight.protocol.bmp.api.BmpSessionListenerFactory;
20 import org.opendaylight.protocol.bmp.impl.spi.BmpRouter;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev150512.RouterId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.monitor.rev150512.routers.Router;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 final class RouterSessionManager implements BmpSessionListenerFactory, AutoCloseable {
29 private static final Logger LOG = LoggerFactory.getLogger(RouterSessionManager.class);
31 private final Map<RouterId, BmpRouter> sessionListeners = new ConcurrentHashMap<>();
33 private final YangInstanceIdentifier yangRoutersId;
34 private final DOMDataBroker domDataBroker;
35 private final RIBExtensionConsumerContext extensions;
36 private final BindingCodecTree tree;
38 public RouterSessionManager(final YangInstanceIdentifier yangMonitorId, final DOMDataBroker domDataBroker,
39 final RIBExtensionConsumerContext extensions, final BindingCodecTree tree) {
40 this.domDataBroker = domDataBroker;
41 this.yangRoutersId = YangInstanceIdentifier.builder(yangMonitorId).node(Router.QNAME).build();
42 this.extensions = extensions;
47 public BmpSessionListener getSessionListener() {
48 return new BmpRouterImpl(this);
51 private synchronized boolean isSessionExist(final BmpRouter sessionListener) {
52 requireNonNull(sessionListener);
53 return this.sessionListeners.containsKey(requireNonNull(sessionListener.getRouterId()));
56 synchronized boolean addSessionListener(final BmpRouter sessionListener) {
57 if (isSessionExist(sessionListener)) {
58 LOG.warn("Session listener for router {} was already added.", sessionListener.getRouterId());
61 this.sessionListeners.put(sessionListener.getRouterId(), sessionListener);
65 synchronized void removeSessionListener(final BmpRouter sessionListener) {
66 if (!isSessionExist(sessionListener)) {
67 LOG.warn("Session listener for router {} was already removed.", sessionListener.getRouterId());
70 this.sessionListeners.remove(sessionListener.getRouterId());
74 public void close() throws Exception {
75 for (final BmpRouter sessionListener : this.sessionListeners.values()) {
76 sessionListener.close();
80 YangInstanceIdentifier getRoutersYangIId() {
81 return this.yangRoutersId;
84 DOMDataBroker getDomDataBroker() {
85 return this.domDataBroker;
88 RIBExtensionConsumerContext getExtensions() {
89 return this.extensions;
92 BindingCodecTree getCodecTree() {