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.openflowplugin.impl.device;
11 import java.util.HashMap;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
15 import org.opendaylight.openflowplugin.impl.util.DeviceStateUtil;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
17 import org.opendaylight.yangtools.concepts.Registration;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
22 * Created by Martin Bobak <mbobak@cisco.com> on 2.6.2015.
24 public class DeviceTransactionChainManagerProvider {
27 private static final Logger LOG = LoggerFactory.getLogger(DeviceTransactionChainManagerProvider.class);
28 private final Map<NodeId, TransactionChainManager> txChManagers = new HashMap<>();
29 private final DataBroker dataBroker;
31 public DeviceTransactionChainManagerProvider(final DataBroker dataBroker) {
32 this.dataBroker = dataBroker;
35 public TransactionChainManagerRegistration provideTransactionChainManager(final ConnectionContext connectionContext) {
36 final NodeId nodeId = connectionContext.getNodeId();
37 TransactionChainManager transactionChainManager;
38 boolean ownedByCurrentContext = false;
40 transactionChainManager = txChManagers.get(nodeId);
41 if (null == transactionChainManager) {
42 LOG.info("Creating new transaction chain for device {}", nodeId.toString());
43 Registration registration = new Registration() {
45 public void close() throws Exception {
46 txChManagers.remove(nodeId);
49 transactionChainManager = new TransactionChainManager(dataBroker,
50 DeviceStateUtil.createNodeInstanceIdentifier(connectionContext.getNodeId()),
52 txChManagers.put(nodeId, transactionChainManager);
53 ownedByCurrentContext = true;
56 TransactionChainManagerRegistration transactionChainManagerRegistration = new TransactionChainManagerRegistration(ownedByCurrentContext, transactionChainManager);
57 return transactionChainManagerRegistration;
60 public final class TransactionChainManagerRegistration {
61 private final TransactionChainManager transactionChainManager;
62 private final boolean ownedByConnectionContext;
64 private TransactionChainManagerRegistration(final boolean ownedByConnectionContext, final TransactionChainManager transactionChainManager) {
65 this.transactionChainManager = transactionChainManager;
66 this.ownedByConnectionContext = ownedByConnectionContext;
69 public boolean ownedByInvokingConnectionContext() {
70 return ownedByConnectionContext;
73 public TransactionChainManager getTransactionChainManager() {
74 return transactionChainManager;