Bug 499: Added support for old DOM Broker APIs.
[controller.git] / opendaylight / md-sal / compatibility / sal-compatibility / src / main / java / org / opendaylight / controller / sal / compatibility / InventoryMapping.java
1 /**
2  * Copyright (c) 2013 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 package org.opendaylight.controller.sal.compatibility;
9
10 import org.eclipse.xtend2.lib.StringConcatenation;
11 import org.eclipse.xtext.xbase.lib.Conversions;
12 import org.eclipse.xtext.xbase.lib.IterableExtensions;
13 import org.opendaylight.controller.sal.core.Node;
14 import org.opendaylight.controller.sal.core.NodeConnector;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
21 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem;
23 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
25
26 import java.util.List;
27
28 @SuppressWarnings("all")
29 public class InventoryMapping {
30   public static NodeConnector toAdNodeConnector(final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector> identifier) {
31     final List<PathArgument> path = identifier.getPath();
32     final PathArgument lastPathArgument = IterableExtensions.<PathArgument>last(path);
33     final NodeConnectorKey tpKey = ((IdentifiableItem<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector,NodeConnectorKey>) lastPathArgument).getKey();
34     return InventoryMapping.nodeConnectorFromId(tpKey.getId().getValue());
35   }
36   
37   public static Node toAdNode(final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> identifier) {
38     final List<PathArgument> path = identifier.getPath();
39     final PathArgument lastPathArgument = IterableExtensions.<PathArgument>last(path);
40     final NodeKey tpKey = ((IdentifiableItem<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node,NodeKey>) lastPathArgument).getKey();
41     return InventoryMapping.nodeFromNodeId(tpKey.getId().getValue());
42   }
43   
44   public static NodeRef toNodeRef(final Node node) {
45     final NodeId nodeId = new NodeId(InventoryMapping.toNodeId(node));
46     final NodeKey nodeKey = new NodeKey(nodeId);
47     final InstanceIdentifierBuilder<? extends Object> builder = InstanceIdentifier.builder();
48     final InstanceIdentifierBuilder<Nodes> nodes = builder.<Nodes>node(Nodes.class);
49     final InstanceIdentifierBuilder<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> child =
50             nodes.<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node, NodeKey>child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node.class, nodeKey);
51     final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> path = child.toInstance();
52     return new NodeRef(path);
53   }
54   
55   public static NodeKey toNodeKey(final Node node) {
56     final NodeId nodeId = new NodeId(InventoryMapping.toNodeId(node));
57     return new NodeKey(nodeId);
58   }
59   
60   public static NodeConnectorKey toNodeConnectorKey(final NodeConnector nc) {
61     final NodeConnectorId nodeConnectorId = new NodeConnectorId(InventoryMapping.toNodeConnectorId(nc));
62     return new NodeConnectorKey(nodeConnectorId);
63   }
64   
65   public static String toNodeId(final Node node) {
66     final StringConcatenation builder = new StringConcatenation();
67     builder.append("ad-sal:");
68     builder.append(node.getType(), "");
69     builder.append("::");
70     builder.append(node.getNodeIDString(), "");
71     return builder.toString();
72   }
73   
74   public static String toNodeConnectorId(final NodeConnector nc) {
75     final StringConcatenation builder = new StringConcatenation();
76     builder.append(InventoryMapping.toNodeId(nc.getNode()), "");
77     builder.append("::");
78     builder.append(nc.getNodeConnectorIDString(), "");
79     return builder.toString();
80   }
81   
82   public static Node nodeFromNodeId(final String nodeId) {
83     final String[] split = nodeId.split("::");
84     return InventoryMapping.nodeFromString(split);
85   }
86   
87   public static NodeConnector nodeConnectorFromId(final String invId) {
88     final String[] split = invId.split("::");
89     return InventoryMapping.nodeConnectorFromString(split);
90   }
91   
92   private static NodeConnector nodeConnectorFromString(final String[] string) {
93     final List<String> subList = ((List<String>)Conversions.doWrapArray(string)).subList(0, 1);
94     final Node node = InventoryMapping.nodeFromString(((String[])Conversions.unwrapArray(subList, String.class)));
95     final String index3 = string[2];
96     return NodeConnector.fromStringNoNode(index3, node);
97   }
98   
99   private static Node nodeFromString(final String[] strings) {
100       String index0 = strings[0];
101       final String type = index0.substring(6);
102       String id = strings[1];
103       return Node.fromString(type, id);
104   }
105 }