1 package org.opendaylight.openflowplugin.openflow.md.util;
3 import java.math.BigInteger;
6 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
7 import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdatedBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
20 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
24 public class InventoryDataServiceUtil {
25 private final static Logger LOG = LoggerFactory.getLogger(InventoryDataServiceUtil.class);
27 public final static String OF_URI_PREFIX = "openflow:";
29 * Get an InstanceIdentifier for the Nodes class that is the root of the
30 * inventory tree We use this alot, so its worth keeping around
32 private static InstanceIdentifier<Nodes> nodesIdentifier = InstanceIdentifier.builder().node(Nodes.class)
35 public static Nodes checkForNodes() {
37 LOG.error("Before Nodes - nodes: " + nodes);
39 nodes = (Nodes) OFSessionUtil.getSessionManager().getDataProviderService()
40 .readOperationalData(nodesIdentifier);
41 } catch (Exception e) {
43 "Caught exception from OFSessionUtil.getSessionManager().getDataProviderService().readOperationalData",
46 LOG.error("After Nodes- nodes: " + nodes);
50 public static List<Node> readAllNodes() {
51 Nodes nodes = (Nodes) OFSessionUtil.getSessionManager().getDataProviderService()
52 .readOperationalData(nodesIdentifier);
53 return nodes.getNode();
56 public static Node readNode(InstanceIdentifier<Node> instance) {
57 return (Node) OFSessionUtil.getSessionManager().getDataProviderService().readOperationalData(instance);
60 public static Node readNode(NodeRef nodeRef) {
61 return readNode((InstanceIdentifier<Node>) nodeRef.getValue());
64 public static Node readNode(NodeKey nodeKey) {
65 return readNode(nodeKeyToInstanceIdentifier(nodeKey));
68 public static Node readNode(NodeId nodeId) {
69 return readNode(new NodeKey(nodeId));
72 public static Node readNodeByDataPath(BigInteger datapathId) {
73 return (Node) OFSessionUtil.getSessionManager().getDataProviderService()
74 .readOperationalData(identifierFromDatapathId(datapathId));
77 public static void putNode(Node node) {
78 DataModificationTransaction transaction = OFSessionUtil.getSessionManager().getDataProviderService()
80 transaction.putOperationalData(nodesIdentifier, node);
84 public static void putNodeConnector(InstanceIdentifier<Node> instance, NodeConnector nodeConnector) {
85 DataModificationTransaction transaction = OFSessionUtil.getSessionManager().getDataProviderService()
87 transaction.putOperationalData(instance, nodeConnector);
91 public static void putNodeConnector(NodeKey nodeKey, NodeConnector nodeConnector) {
92 InstanceIdentifier<Node> instance = nodeKeyToInstanceIdentifier(nodeKey);
93 putNodeConnector(instance, nodeConnector);
96 public static void putNodeConnector(NodeId nodeId, NodeConnector nodeConnector) {
97 putNodeConnector(new NodeKey(nodeId), nodeConnector);
100 public static void putNodeConnector(BigInteger datapathId, NodeConnector nodeConnector) {
101 putNodeConnector(new NodeId(OF_URI_PREFIX + datapathId), nodeConnector);
104 public static InstanceIdentifier<Node> identifierFromDatapathId(BigInteger datapathId) {
105 NodeKey nodeKey = nodeKeyFromDatapathId(datapathId);
106 return InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).toInstance();
109 public static NodeKey nodeKeyFromDatapathId(BigInteger datapathId) {
110 return new NodeKey(nodeIdFromDatapathId(datapathId));
113 public static NodeUpdatedBuilder nodeUpdatedBuilderFromDataPathId(BigInteger datapathId) {
114 NodeUpdatedBuilder builder = new NodeUpdatedBuilder();
115 builder.setId(nodeIdFromDatapathId(datapathId));
116 builder.setNodeRef(nodeRefFromNodeKey(new NodeKey(builder.getId())));
120 public static NodeId nodeIdFromDatapathId(BigInteger datapathId) {
121 // FIXME: Convert to textual representation of datapathID
122 String current = datapathId.toString();
123 return new NodeId(OF_URI_PREFIX + current);
126 public static Long dataPathIdFromNodeId(NodeId nodeId) {
127 String dpids = nodeId.getValue().replace(OF_URI_PREFIX, "");
128 Long dpid = Long.decode(dpids);
132 public static NodeRef nodeRefFromNode(Node node) {
133 return nodeRefFromNodeKey(node.getKey());
136 public static NodeRef nodeRefFromNodeKey(NodeKey nodeKey) {
137 return new NodeRef(nodeKeyToInstanceIdentifier(nodeKey));
140 public static InstanceIdentifier<Node> nodeKeyToInstanceIdentifier(NodeKey nodeKey) {
141 return InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey).toInstance();
144 public static InstanceIdentifier<Node> nodeIdToInstanceIdentifier(NodeId nodeId) {
145 return nodeKeyToInstanceIdentifier(new NodeKey(nodeId));
148 public static NodeConnectorId nodeConnectorIdfromDatapathPortNo(BigInteger datapathid, Long portNo) {
149 return new NodeConnectorId(OF_URI_PREFIX + datapathid + ":" + portNo);
152 public static Long portNumberfromNodeConnectorId(NodeConnectorId ncId) {
153 String[] split = ncId.getValue().split(":");
154 String portNoString = split[split.length-1];
155 Long portNo = Long.decode(portNoString);
160 public static NodeConnectorRef nodeConnectorRefFromDatapathIdPortno(BigInteger datapathId, Long portNo) {
161 return new NodeConnectorRef(nodeConnectorInstanceIdentifierFromDatapathIdPortno(datapathId, portNo));
164 public static InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifierFromDatapathIdPortno(
165 BigInteger datapathId, Long portNo) {
166 NodeId nodeId = nodeIdFromDatapathId(datapathId);
167 NodeConnectorId nodeConnectorId = nodeConnectorIdfromDatapathPortNo(datapathId, portNo);
168 return InstanceIdentifier.builder(Nodes.class) //
169 .child(Node.class, new NodeKey(nodeId)) //
170 .child(NodeConnector.class, new NodeConnectorKey(nodeConnectorId)).toInstance();
173 public static NodeConnectorUpdatedBuilder nodeConnectorUpdatedBuilderFromDatapathIdPortNo(BigInteger datapathId, Long portNo) {
174 NodeConnectorUpdatedBuilder builder = new NodeConnectorUpdatedBuilder();
175 builder.setId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathId,portNo));
176 builder.setNodeConnectorRef(InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(datapathId,portNo));
180 public static NodeConnectorBuilder nodeConnectorBuilderFromDatapathIdPortNo(BigInteger datapathId, Long portNo) {
181 NodeConnectorBuilder builder = new NodeConnectorBuilder();
182 builder.setId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathId,portNo));