Replace Preconditions.CheckNotNull per RequireNonNull
[bgpcep.git] / bgp / bmp-impl / src / main / java / org / opendaylight / protocol / bmp / impl / app / RouterSessionManager.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.protocol.bmp.impl.app;
10
11 import static java.util.Objects.requireNonNull;
12
13 import java.util.Map;
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;
26
27 final class RouterSessionManager implements BmpSessionListenerFactory, AutoCloseable {
28
29     private static final Logger LOG = LoggerFactory.getLogger(RouterSessionManager.class);
30
31     private final Map<RouterId, BmpRouter> sessionListeners = new ConcurrentHashMap<>();
32
33     private final YangInstanceIdentifier yangRoutersId;
34     private final DOMDataBroker domDataBroker;
35     private final RIBExtensionConsumerContext extensions;
36     private final BindingCodecTree tree;
37
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;
43         this.tree = tree;
44     }
45
46     @Override
47     public BmpSessionListener getSessionListener() {
48         return new BmpRouterImpl(this);
49     }
50
51     private synchronized boolean isSessionExist(final BmpRouter sessionListener) {
52         requireNonNull(sessionListener);
53         return this.sessionListeners.containsKey(requireNonNull(sessionListener.getRouterId()));
54     }
55
56     synchronized boolean addSessionListener(final BmpRouter sessionListener) {
57         if (isSessionExist(sessionListener)) {
58             LOG.warn("Session listener for router {} was already added.", sessionListener.getRouterId());
59             return false;
60         }
61         this.sessionListeners.put(sessionListener.getRouterId(), sessionListener);
62         return true;
63     }
64
65     synchronized void removeSessionListener(final BmpRouter sessionListener) {
66         if (!isSessionExist(sessionListener)) {
67             LOG.warn("Session listener for router {} was already removed.", sessionListener.getRouterId());
68             return;
69         }
70         this.sessionListeners.remove(sessionListener.getRouterId());
71     }
72
73     @Override
74     public void close() throws Exception {
75         for (final BmpRouter sessionListener : this.sessionListeners.values()) {
76             sessionListener.close();
77         }
78     }
79
80     YangInstanceIdentifier getRoutersYangIId() {
81         return this.yangRoutersId;
82     }
83
84     DOMDataBroker getDomDataBroker() {
85         return this.domDataBroker;
86     }
87
88     RIBExtensionConsumerContext getExtensions() {
89         return this.extensions;
90     }
91
92     BindingCodecTree getCodecTree() {
93         return this.tree;
94     }
95
96 }