fix deprecated openroadm interfaces/objects
[transportpce.git] / networkmodel / src / main / java / org / opendaylight / transportpce / networkmodel / util / OpenRoadmNetwork.java
1 /*
2  * Copyright © 2016 AT&T 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.transportpce.networkmodel.util;
10
11 import com.google.common.collect.ImmutableList;
12 import java.util.concurrent.ExecutionException;
13 import java.util.concurrent.TimeUnit;
14 import java.util.concurrent.TimeoutException;
15
16 import org.opendaylight.mdsal.binding.api.DataBroker;
17 import org.opendaylight.mdsal.binding.api.WriteTransaction;
18 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
19 import org.opendaylight.transportpce.common.NetworkUtils;
20 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev191115.network.nodes.NodeInfo;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.NetworkTypes1Builder;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.networks.network.network.types.OpenroadmCommonNetworkBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev181130.Node1;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev181130.Node1Builder;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkKey;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey;
39 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
40 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44
45 public final class OpenRoadmNetwork {
46
47     private static final Logger LOG = LoggerFactory.getLogger(OpenRoadmNetwork.class);
48
49     private OpenRoadmNetwork() {
50         // utility class
51     }
52
53     /**
54      * This public method creates the OpenRoadmNetwork Layer and posts it to the
55      * controller.
56      *
57      * @param controllerdb controller databroker
58      */
59     public static void createOpenRoadmNetworkLayer(DataBroker controllerdb) {
60         try {
61             Network openRoadmNetwork = createOpenRoadmNetwork();
62             InstanceIdentifierBuilder<Network> nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class,
63                 new NetworkKey(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)));
64             WriteTransaction wrtx = controllerdb.newWriteOnlyTransaction();
65             wrtx.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), openRoadmNetwork);
66             wrtx.commit().get(1, TimeUnit.SECONDS);
67             LOG.info("OpenRoadm-Network created successfully.");
68         } catch (ExecutionException | TimeoutException | InterruptedException e) {
69             LOG.warn("Failed to create OpenRoadm-Network", e);
70         }
71     }
72
73     /**
74      * Create single node entry for OpenRoadmNetwork.
75      *
76      * @param nodeId node ID
77      * @param nodeInfo some important and general data from device
78      *
79      * @return node
80      */
81     public static Node createNode(String nodeId, NodeInfo nodeInfo) {
82
83         NodeBuilder nodeBldr = new NodeBuilder();
84         NodeId nwNodeId = new NodeId(nodeId);
85         nodeBldr.setNodeId(nwNodeId);
86         nodeBldr.withKey(new NodeKey(nwNodeId));
87         Node1Builder node1bldr = new Node1Builder();
88         org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder node2bldr =
89             new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1Builder();
90
91         /*
92          * Recognize the node type: 1:ROADM, 2:XPONDER
93          */
94         switch (nodeInfo.getNodeType().getIntValue()) {
95             case 1:
96                 node2bldr.setNodeType(OpenroadmNodeType.ROADM);
97                 break;
98             case 2:
99                 node2bldr.setNodeType(OpenroadmNodeType.XPONDER);
100                 break;
101             default:
102                 LOG.error("No correponsding type for the value: {}", nodeInfo.getNodeType().getName());
103                 break;
104         }
105
106         // Sets IP, Model and Vendor information fetched from the deviceInfo
107         if (nodeInfo.getNodeIpAddress() != null) {
108             node1bldr.setIp(nodeInfo.getNodeIpAddress());
109         }
110         if (nodeInfo.getNodeModel() != null) {
111             node1bldr.setModel(nodeInfo.getNodeModel());
112         }
113         if (nodeInfo.getNodeVendor() != null) {
114             node1bldr.setVendor(nodeInfo.getNodeVendor());
115         }
116
117         // Sets the value of Network-ref and Node-ref as a part of the supporting node
118         // attribute
119         SupportingNodeBuilder supportbldr = new SupportingNodeBuilder();
120         supportbldr.withKey(new SupportingNodeKey(new NetworkId(NetworkUtils.CLLI_NETWORK_ID),
121             new NodeId(nodeInfo.getNodeClli())));
122         supportbldr.setNetworkRef(new NetworkId(NetworkUtils.CLLI_NETWORK_ID));
123         supportbldr.setNodeRef(new NodeId(nodeInfo.getNodeClli()));
124         nodeBldr.setSupportingNode(ImmutableList.of(supportbldr.build()));
125
126         // Augment to the main node builder
127         nodeBldr.addAugmentation(Node1.class, node1bldr.build());
128         nodeBldr.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1.class,
129             node2bldr.build());
130         return nodeBldr.build();
131     }
132
133     /**
134      * Create empty OpenROADM network.
135      */
136     private static Network createOpenRoadmNetwork() {
137         NetworkBuilder openrdmnwBuilder = new NetworkBuilder();
138         NetworkId nwId = new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID);
139         openrdmnwBuilder.setNetworkId(nwId);
140         openrdmnwBuilder.withKey(new NetworkKey(nwId));
141         // sets network type to OpenRoadmNetwork
142         NetworkTypes1Builder openRoadmNetworkTypesBldr = new NetworkTypes1Builder();
143         openRoadmNetworkTypesBldr.setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build());
144         NetworkTypesBuilder openrdmnwTypeBuilder = new NetworkTypesBuilder();
145         openrdmnwTypeBuilder.addAugmentation(NetworkTypes1.class, openRoadmNetworkTypesBldr.build());
146         openrdmnwBuilder.setNetworkTypes(openrdmnwTypeBuilder.build());
147         return openrdmnwBuilder.build();
148     }
149 }