Adding IdManager/LockManager and related Changes
[vpnservice.git] / interfacemgr / interfacemgr-impl / src / main / java / org / opendaylight / vpnservice / interfacemgr / commons / InterfaceManagerCommonUtils.java
1 /*
2  * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.interfacemgr.commons;
10
11 import com.google.common.base.Optional;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.idmanager.IdManager;
15 import org.opendaylight.vpnservice.interfacemgr.IfmConstants;
16 import org.opendaylight.vpnservice.interfacemgr.IfmUtil;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.opendaylight.yangtools.yang.common.RpcResult;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 import java.math.BigInteger;
33 import java.util.concurrent.ExecutionException;
34 import java.util.concurrent.Future;
35
36 public class InterfaceManagerCommonUtils {
37     private static final Logger LOG = LoggerFactory.getLogger(InterfaceManagerCommonUtils.class);
38     public static NodeConnector getNodeConnectorFromInventoryOperDS(NodeConnectorId nodeConnectorId,
39                                                                     DataBroker dataBroker) {
40         NodeId nodeId = IfmUtil.getNodeIdFromNodeConnectorId(nodeConnectorId);
41         InstanceIdentifier<NodeConnector> ncIdentifier = InstanceIdentifier.builder(Nodes.class)
42                 .child(Node.class, new NodeKey(nodeId))
43                 .child(NodeConnector.class, new NodeConnectorKey(nodeConnectorId)).build();
44
45         Optional<NodeConnector> nodeConnectorOptional = IfmUtil.read(LogicalDatastoreType.OPERATIONAL,
46                 ncIdentifier, dataBroker);
47         if (!nodeConnectorOptional.isPresent()) {
48             return null;
49         }
50         return nodeConnectorOptional.get();
51     }
52
53     /*public static void addInterfaceEntryToInventoryOperDS(NodeConnectorId nodeConnectorId, long lporttag, String interfaceName,
54                                                           DataBroker dataBroker, WriteTransaction t) {
55         NodeId nodeId = IfmUtil.getNodeIdFromNodeConnectorId(nodeConnectorId);
56         TunnelInterfaceInventoryInfoKey tunnelInterfaceInventoryInfoKey = new TunnelInterfaceInventoryInfoKey(lporttag);
57         InstanceIdentifier<TunnelInterfaceInventoryInfo> inventoryIdentifier = InstanceIdentifier.builder(Nodes.class)
58                 .child(Node.class, new NodeKey(nodeId))
59                 .augmentation(TunnelInterfaceNames.class)
60                 .child(TunnelInterfaceInventoryInfo.class, tunnelInterfaceInventoryInfoKey).build();
61         TunnelInterfaceInventoryInfoBuilder builder = new TunnelInterfaceInventoryInfoBuilder().setKey(tunnelInterfaceInventoryInfoKey)
62                 .setTunIntfName(interfaceName);
63         t.put(LogicalDatastoreType.OPERATIONAL, inventoryIdentifier, builder.build(), true);
64     }
65
66     public static void removeInterfaceEntryFromInventoryOperDS(NodeConnectorId nodeConnectorId, long lporttag,
67                                                                String interfaceName, DataBroker dataBroker,
68                                                                WriteTransaction t) {
69         NodeId nodeId = IfmUtil.getNodeIdFromNodeConnectorId(nodeConnectorId);
70         TunnelInterfaceInventoryInfoKey tunnelInterfaceInventoryInfoKey = new TunnelInterfaceInventoryInfoKey(lporttag);
71         InstanceIdentifier<TunnelInterfaceInventoryInfo> inventoryIdentifier = InstanceIdentifier.builder(Nodes.class)
72                 .child(Node.class, new NodeKey(nodeId))
73                 .augmentation(TunnelInterfaceNames.class)
74                 .child(TunnelInterfaceInventoryInfo.class, tunnelInterfaceInventoryInfoKey).build();
75         t.delete(LogicalDatastoreType.OPERATIONAL, inventoryIdentifier);
76     }
77
78     public static void removeInterfaceEntryFromInventoryOperDS(NodeConnectorId nodeConnectorId, long lporttag,
79                                                                DataBroker dataBroker) {
80         WriteTransaction t = dataBroker.newWriteOnlyTransaction();
81         NodeId nodeId = IfmUtil.getNodeIdFromNodeConnectorId(nodeConnectorId);
82         TunnelInterfaceInventoryInfoKey tunnelInterfaceInventoryInfoKey = new TunnelInterfaceInventoryInfoKey(lporttag);
83         InstanceIdentifier<TunnelInterfaceInventoryInfo> inventoryIdentifier = InstanceIdentifier.builder(Nodes.class)
84                 .child(Node.class, new NodeKey(nodeId))
85                 .augmentation(TunnelInterfaceNames.class)
86                 .child(TunnelInterfaceInventoryInfo.class, tunnelInterfaceInventoryInfoKey).build();
87         t.delete(LogicalDatastoreType.OPERATIONAL, inventoryIdentifier);
88         t.submit(); // This is a Best-Effort Deletion. If Node is already removed, this may fail.
89     } */
90
91     public static InstanceIdentifier<Interface> getInterfaceIdentifier(InterfaceKey interfaceKey) {
92         InstanceIdentifier.InstanceIdentifierBuilder<Interface> interfaceInstanceIdentifierBuilder =
93                 InstanceIdentifier.builder(Interfaces.class).child(Interface.class, interfaceKey);
94         return interfaceInstanceIdentifierBuilder.build();
95     }
96
97     public static Interface getInterfaceFromConfigDS(InterfaceKey interfaceKey, DataBroker dataBroker) {
98         InstanceIdentifier<Interface> interfaceId = getInterfaceIdentifier(interfaceKey);
99         Optional<Interface> interfaceOptional = IfmUtil.read(LogicalDatastoreType.CONFIGURATION, interfaceId, dataBroker);
100         if (!interfaceOptional.isPresent()) {
101             return null;
102         }
103
104         return interfaceOptional.get();
105     }
106
107     public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface getInterfaceStateFromOperDS(String interfaceName, DataBroker dataBroker) {
108         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> ifStateId =
109                 IfmUtil.buildStateInterfaceId(interfaceName);
110         Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> ifStateOptional =
111                 IfmUtil.read(LogicalDatastoreType.OPERATIONAL, ifStateId, dataBroker);
112         if (!ifStateOptional.isPresent()) {
113             return null;
114         }
115
116         return ifStateOptional.get();
117     }
118
119     public static String getJobKey(String dpId, String portName) {
120         String jobKey = "";
121         if (dpId != null && !"".equals(dpId)) {
122             jobKey = dpId.toString() + ":";
123         }
124         jobKey = jobKey + portName;
125         return jobKey;
126     }
127
128     public static String getJobKey(BigInteger dpId, String portName) {
129         String jobKey = "";
130         if (dpId != null && dpId.longValue() != 0) {
131             jobKey = dpId.toString() + ":";
132         }
133         jobKey = jobKey + portName;
134         return jobKey;
135     }
136 }