2 * Copyright © 2018 Orange 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.transportpce.olm.util;
11 import java.math.BigDecimal;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
16 import java.util.Optional;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
20 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
21 import org.opendaylight.transportpce.common.NetworkUtils;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.Network;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.Nodes;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesKey;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegree;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegreeBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingKey;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.amplified.link.SectionElementBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.OMSAttributesBuilder;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.SpanBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLink;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLinkBuilder;
62 import org.opendaylight.yangtools.yang.binding.Augmentation;
63 import org.opendaylight.yangtools.yang.binding.DataObject;
64 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
66 public final class TransactionUtils {
68 private TransactionUtils() {
72 public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
74 ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
75 transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object, true);
76 transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get();
81 // public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
82 // InstanceIdentifier instanceIdentifier,
85 // public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
87 // LogicalDatastoreType logicalDatastoreType,
88 // InstanceIdentifier<? extends DataObject> instanceIdentifier)
89 // throws ExecutionException, InterruptedException {
90 // Future<Optional<DeviceTransaction>> deviceTxFuture =
91 // deviceTransactionManager.getDeviceTransaction(nodeId);
92 // if (!deviceTxFuture.get().isPresent()) {
95 // DeviceTransaction deviceTx = deviceTxFuture.get().get();
96 // com.google.common.base.Optional<? extends DataObject> readOpt
97 // = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
98 // if (!readOpt.isPresent()) {
101 // return readOpt.get();
104 public static Network1 getNullNetwork() {
105 Network1 network = new Network1Builder().setLink(null).build();
106 Optional.of(network);
110 public static Network1 getEmptyNetwork() {
111 Network1 network = new Network1Builder().setLink(new ArrayList<>()).build();
112 Optional.of(network);
116 public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network
117 .rev180226.networks.Network getOverLayNetwork() {
118 NodeBuilder node1Builder = new NodeBuilder();
119 node1Builder.setNodeId(new NodeId("node 1"));
120 node1Builder.withKey(new NodeKey(new NodeId("node 1")));
121 List<SupportingNode> supportingNodes1 = new ArrayList<>();
122 supportingNodes1.add(new SupportingNodeBuilder().setNodeRef(new NodeId("node 1"))
123 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)).build());
124 node1Builder.setSupportingNode(supportingNodes1);
125 List<Node> nodes = new ArrayList<>();
126 nodes.add(node1Builder.build());
127 NodeBuilder node2Builder = new NodeBuilder();
128 node2Builder.setNodeId(new NodeId("node 2"));
129 node2Builder.withKey(new NodeKey(new NodeId("node 2")));
130 List<SupportingNode> supportingNodes = new ArrayList<>();
131 supportingNodes.add(new SupportingNodeBuilder().setNodeRef(new NodeId("node 2"))
132 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)).build());
133 node2Builder.setSupportingNode(supportingNodes);
134 nodes.add(node2Builder.build());
135 NodeBuilder node3Builder = new NodeBuilder();
136 node3Builder.setNodeId(new NodeId("node 3"));
137 node3Builder.withKey(new NodeKey(new NodeId("node 3")));
138 List<SupportingNode> supportingNodes3 = new ArrayList<>();
139 supportingNodes3.add(new SupportingNodeBuilder().setNodeRef(new NodeId("node 3"))
140 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)).build());
141 node3Builder.setSupportingNode(supportingNodes3);
142 nodes.add(node3Builder.build());
143 NodeBuilder node4Builder = new NodeBuilder();
144 node4Builder.setNodeId(new NodeId("node 4"));
145 node4Builder.withKey(new NodeKey(new NodeId("node 4")));
146 List<SupportingNode> supportingNodes4 = new ArrayList<>();
147 supportingNodes4.add(new SupportingNodeBuilder().setNodeRef(new NodeId("node 4"))
148 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID)).build());
149 node4Builder.setSupportingNode(supportingNodes4);
150 nodes.add(node4Builder.build());
151 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
152 .networks.NetworkBuilder networkBuilder =
153 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network
154 .rev180226.networks.NetworkBuilder();
155 networkBuilder.setNode(nodes);
156 networkBuilder.setNetworkId(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID));
157 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
158 .networks.Network network = networkBuilder.build();
159 Optional.of(network);
163 public static Network1 getNetwork() {
164 List<SupportingLink> supportingLinks = new ArrayList<>();
165 SupportingLink supportingLink1 = new SupportingLinkBuilder().setLinkRef("ref1")
166 .setNetworkRef(new NetworkId("net1")).build();
167 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
168 .setNetworkRef(new NetworkId("net2")).build();
169 supportingLinks.add(supportingLink1);
170 supportingLinks.add(supportingLink2);
171 List<Link> links = new ArrayList<>();
172 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
173 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
174 .setDestTp("dest tp").build())
175 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
176 .setSourceTp("src tp").build())
177 .setSupportingLink(supportingLinks).build();
179 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
180 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
181 .setDestTp("dest tp").build())
182 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
183 .setSourceTp("src tp").build())
184 .setSupportingLink(supportingLinks).build();
187 Network1 network = new Network1Builder().setLink(links).build();
188 Optional.of(network);
192 public static Network1 getNetwork2() {
193 List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
194 LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
195 .setFiberType(LinkConcatenation.FiberType.Truewave)
196 .setPmd(new FiberPmd(BigDecimal.ONE))
197 .setSRLGId(Long.valueOf(1))
198 .setSRLGLength(Long.valueOf(1))
200 LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
201 .setFiberType(LinkConcatenation.FiberType.Truewave)
202 .setPmd(new FiberPmd(BigDecimal.ONE))
203 .setSRLGId(Long.valueOf(1))
204 .setSRLGLength(Long.valueOf(1))
206 linkConcentationValues.add(linkConcatenation);
207 linkConcentationValues.add(linkConcatenation2);
209 amplifiedLinkValues = new ArrayList<>();
210 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al =
211 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
212 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
213 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
214 .attributes.amplified.link.section.element.section.element.SpanBuilder()
215 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
216 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
217 .setAdministrativeState(AdminStates.InService)
218 .setAutoSpanloss(true)
220 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
221 .setLinkConcatenation(linkConcentationValues)
222 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
223 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
227 .setSectionEltNumber(Integer.valueOf(1)).build();
228 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = new
229 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
230 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
231 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
232 .attributes.amplified.link.section.element.section.element.SpanBuilder()
233 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
234 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
235 .setAdministrativeState(AdminStates.InService)
236 .setAutoSpanloss(true)
238 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
239 .setLinkConcatenation(linkConcentationValues)
240 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
241 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
245 .setSectionEltNumber(Integer.valueOf(1)).build();
246 amplifiedLinkValues.add(al);
247 amplifiedLinkValues.add(al2);
248 Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
249 Augmentation<Link> aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
250 .setAdministrativeState(State.InService)
252 .setLinkLatency(Long.valueOf(123))
253 .setLinkLength(BigDecimal.valueOf(123))
254 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
255 .setOMSAttributes(new OMSAttributesBuilder()
256 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
257 .setOppositeLink(new LinkId("link 1"))
258 .setSpan(new SpanBuilder().build())
259 .setTEMetric(Long.valueOf(123)).build())
260 .setOperationalState(State.InService).build();
261 Augmentation<Link> aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
262 .setAdministrativeState(State.InService)
264 .setLinkLatency(Long.valueOf(123))
265 .setLinkLength(BigDecimal.valueOf(123))
266 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
267 .setOMSAttributes(new OMSAttributesBuilder()
268 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
269 .setOppositeLink(new LinkId("link 1"))
270 .setSpan(new SpanBuilder().build())
271 .setTEMetric(Long.valueOf(123)).build())
272 .setOperationalState(State.InService).build();
274 List<SupportingLink> supportingLinks = new ArrayList<>();
275 SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
276 .setNetworkRef(new NetworkId("net1")).build();
277 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
278 .setNetworkRef(new NetworkId("net1")).build();
279 supportingLinks.add(supportingLink);
280 supportingLinks.add(supportingLink2);
281 List<Link> links = new ArrayList<>();
282 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
283 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
284 .setDestTp("dest tp").build())
285 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
286 .setSourceTp("src tp").build())
287 .setSupportingLink(supportingLinks)
288 .addAugmentation(Link1.class, aug1)
289 .addAugmentation(Link1.class, aug2).build();
291 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
292 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
293 .setDestTp("dest tp").build())
294 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
295 .setSourceTp("src tp").build())
296 .setSupportingLink(supportingLinks).build();
299 Network1 network = new Network1Builder().setLink(links).build();
300 Optional.of(network);
304 public static List<NodeId> getNodeIds() {
305 List<NodeId> nodes = new ArrayList<>();
306 NodeId node = new NodeId("node 1");
307 NodeId node2 = new NodeId("node 1");
308 NodeId node3 = new NodeId("node 1");
309 NodeId node4 = new NodeId("node 1");
317 public static Nodes getNodes(String nodeId, String mappingKey) {
318 List<CpToDegree> cpList = new ArrayList<>();
319 CpToDegree cp1 = new CpToDegreeBuilder()
320 .setCircuitPackName("circuit name")
321 .setDegreeNumber(Long.valueOf(123))
323 CpToDegree cp2 = new CpToDegreeBuilder()
324 .setCircuitPackName("circuit name")
325 .setDegreeNumber(Long.valueOf(123))
329 List<Mapping> mappingList = new ArrayList<>();
330 Mapping map1 = new MappingBuilder()
331 .setLogicalConnectionPoint("point")
332 .setSupportingCircuitPackName("circuit name")
333 .setSupportingOms("oms")
334 .setSupportingOts("ots")
335 .setSupportingPort("port")
336 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
338 mappingList.add(map1);
339 Nodes nodes = new NodesBuilder()
341 .setNodeType(NodeTypes.Xpdr)
342 .setCpToDegree(cpList)
343 .setMapping(mappingList)
344 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
349 public static Nodes getNodes2(String nodeId, String mappingKey) {
350 List<CpToDegree> cpList = new ArrayList<>();
351 CpToDegree cp1 = new CpToDegreeBuilder()
352 .setCircuitPackName("circuit name")
353 .setDegreeNumber(Long.valueOf(123))
355 CpToDegree cp2 = new CpToDegreeBuilder()
356 .setCircuitPackName("circuit name")
357 .setDegreeNumber(Long.valueOf(123))
361 List<Mapping> mappingList = new ArrayList<>();
362 Mapping map1 = new MappingBuilder()
363 .setLogicalConnectionPoint("point")
364 .setSupportingCircuitPackName("circuit name")
365 .setSupportingOms("oms")
366 .setSupportingOts("ots")
367 .setSupportingPort("port")
368 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
370 mappingList.add(map1);
371 Nodes nodes = new NodesBuilder()
374 .setCpToDegree(cpList)
375 .setMapping(mappingList)
376 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
381 public static Nodes getNodes3(String nodeId, String mappingKey) {
382 List<CpToDegree> cpList = new ArrayList<>();
383 CpToDegree cp1 = new CpToDegreeBuilder()
384 .setCircuitPackName("circuit name")
385 .setDegreeNumber(Long.valueOf(123))
387 CpToDegree cp2 = new CpToDegreeBuilder()
388 .setCircuitPackName("circuit name")
389 .setDegreeNumber(Long.valueOf(123))
393 List<Mapping> mappingList = new ArrayList<>();
394 Mapping map1 = new MappingBuilder()
395 .setLogicalConnectionPoint("point")
396 .setSupportingCircuitPackName("circuit name")
397 .setSupportingOms("oms")
398 .setSupportingOts("ots")
399 .setSupportingPort("port")
400 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
402 mappingList.add(map1);
403 Nodes nodes = new NodesBuilder()
405 .setNodeType(NodeTypes.Rdm)
406 .setCpToDegree(cpList)
407 .setMapping(mappingList)
408 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
413 public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
414 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
415 .child(Nodes.class, new NodesKey(nodeId));
416 Nodes nodes = getNodes(nodeId, mappingKey);
417 writeTransaction(dataBroker, nodesIID, nodes);
420 public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
421 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
422 .child(Nodes.class, new NodesKey(nodeId));
423 Nodes nodes = getNodes2(nodeId, mappingKey);
424 writeTransaction(dataBroker, nodesIID, nodes);
427 public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
428 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
429 .child(Nodes.class, new NodesKey(nodeId));
430 Nodes nodes = getNodes3(nodeId, mappingKey);
431 writeTransaction(dataBroker, nodesIID, nodes);