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.mdsal.binding.api.DataBroker;
19 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
20 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
21 import org.opendaylight.transportpce.common.NetworkUtils;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.Network;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.Nodes;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.NodesBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.NodesKey;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.CpToDegree;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.CpToDegreeBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.Mapping;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.MappingBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.MappingKey;
31 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.NodeInfo.OpenroadmVersion;
32 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.NodeInfoBuilder;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.amplified.link.SectionElementBuilder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.OMSAttributesBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.SpanBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeKey;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
55 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
56 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder;
57 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
58 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
59 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
60 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
61 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLink;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLinkBuilder;
63 import org.opendaylight.yangtools.yang.binding.Augmentation;
64 import org.opendaylight.yangtools.yang.binding.DataObject;
65 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
67 public final class TransactionUtils {
69 private TransactionUtils() {
73 @SuppressWarnings("unchecked")
74 public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
76 ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
77 transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object);
78 transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get();
83 // public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
84 // InstanceIdentifier instanceIdentifier,
87 // public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
89 // LogicalDatastoreType logicalDatastoreType,
90 // InstanceIdentifier<? extends DataObject> instanceIdentifier)
91 // throws ExecutionException, InterruptedException {
92 // Future<Optional<DeviceTransaction>> deviceTxFuture =
93 // deviceTransactionManager.getDeviceTransaction(nodeId);
94 // if (!deviceTxFuture.get().isPresent()) {
97 // DeviceTransaction deviceTx = deviceTxFuture.get().get();
98 // com.google.common.base.Optional<? extends DataObject> readOpt
99 // = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
100 // if (!readOpt.isPresent()) {
103 // return readOpt.get();
106 public static Network1 getNullNetwork() {
107 Network1 network = new Network1Builder().setLink(null).build();
108 Optional.of(network);
112 public static Network1 getEmptyNetwork() {
113 Network1 network = new Network1Builder().setLink(new ArrayList<>()).build();
114 Optional.of(network);
118 public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network
119 .rev180226.networks.Network getOverLayNetwork() {
120 List<SupportingNode> supportingNodes1 = new ArrayList<>();
122 .add(new SupportingNodeBuilder()
123 .setNodeRef(new NodeId("node 1"))
124 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
126 NodeBuilder node1Builder = new NodeBuilder()
127 .setNodeId(new NodeId("node 1"))
128 .withKey(new NodeKey(new NodeId("node 1")))
129 .setSupportingNode(supportingNodes1);
130 List<Node> nodes = new ArrayList<>();
131 nodes.add(node1Builder.build());
132 List<SupportingNode> supportingNodes = new ArrayList<>();
134 .add(new SupportingNodeBuilder()
135 .setNodeRef(new NodeId("node 2"))
136 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
138 NodeBuilder node2Builder = new NodeBuilder()
139 .setNodeId(new NodeId("node 2"))
140 .withKey(new NodeKey(new NodeId("node 2")))
141 .setSupportingNode(supportingNodes);
142 nodes.add(node2Builder.build());
143 List<SupportingNode> supportingNodes3 = new ArrayList<>();
145 .add(new SupportingNodeBuilder()
146 .setNodeRef(new NodeId("node 3"))
147 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
149 NodeBuilder node3Builder = new NodeBuilder()
150 .setNodeId(new NodeId("node 3"))
151 .withKey(new NodeKey(new NodeId("node 3")))
152 .setSupportingNode(supportingNodes3);
153 nodes.add(node3Builder.build());
154 List<SupportingNode> supportingNodes4 = new ArrayList<>();
156 .add(new SupportingNodeBuilder()
157 .setNodeRef(new NodeId("node 4"))
158 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
160 NodeBuilder node4Builder = new NodeBuilder()
161 .setNodeId(new NodeId("node 4"))
162 .withKey(new NodeKey(new NodeId("node 4")))
163 .setSupportingNode(supportingNodes4);
164 nodes.add(node4Builder.build());
165 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder
167 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks
170 .setNetworkId(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID));
171 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network network =
172 networkBuilder.build();
173 Optional.of(network);
177 public static Network1 getNetwork() {
178 List<SupportingLink> supportingLinks = new ArrayList<>();
179 SupportingLink supportingLink1 = new SupportingLinkBuilder()
181 .setNetworkRef(new NetworkId("net1"))
183 SupportingLink supportingLink2 = new SupportingLinkBuilder()
185 .setNetworkRef(new NetworkId("net2"))
187 supportingLinks.add(supportingLink1);
188 supportingLinks.add(supportingLink2);
189 List<Link> links = new ArrayList<>();
190 Link link1 = new LinkBuilder()
191 .setLinkId(new LinkId("link 1"))
193 new DestinationBuilder()
194 .setDestNode(new NodeId("node 1"))
195 .setDestTp("dest tp").build())
198 .setSourceNode(new NodeId("node 2"))
199 .setSourceTp("src tp")
201 .setSupportingLink(supportingLinks)
204 Link link2 = new LinkBuilder()
205 .setLinkId(new LinkId("link 2"))
207 new DestinationBuilder()
208 .setDestNode(new NodeId("node 3"))
209 .setDestTp("dest tp")
213 .setSourceNode(new NodeId("node 4"))
214 .setSourceTp("src tp")
216 .setSupportingLink(supportingLinks)
220 Network1 network = new Network1Builder().setLink(links).build();
221 Optional.of(network);
225 public static Network1 getNetwork2() {
226 List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
227 LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
228 .setFiberType(LinkConcatenation.FiberType.Truewave)
229 .setPmd(new FiberPmd(BigDecimal.ONE))
230 .setSRLGId(Long.valueOf(1))
231 .setSRLGLength(Long.valueOf(1))
233 LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
234 .setFiberType(LinkConcatenation.FiberType.Truewave)
235 .setPmd(new FiberPmd(BigDecimal.ONE))
236 .setSRLGId(Long.valueOf(1))
237 .setSRLGLength(Long.valueOf(1))
239 linkConcentationValues.add(linkConcatenation);
240 linkConcentationValues.add(linkConcatenation2);
242 amplifiedLinkValues = new ArrayList<>();
243 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al =
244 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
245 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
246 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
247 .attributes.amplified.link.section.element.section.element.SpanBuilder()
248 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
249 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
250 .setAdministrativeState(AdminStates.InService)
251 .setAutoSpanloss(true)
253 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
254 .setLinkConcatenation(linkConcentationValues)
255 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
256 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
260 .setSectionEltNumber(Integer.valueOf(1)).build();
261 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = new
262 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
263 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
264 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
265 .attributes.amplified.link.section.element.section.element.SpanBuilder()
266 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
267 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
268 .setAdministrativeState(AdminStates.InService)
269 .setAutoSpanloss(true)
271 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
272 .setLinkConcatenation(linkConcentationValues)
273 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
274 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
278 .setSectionEltNumber(Integer.valueOf(1)).build();
279 amplifiedLinkValues.add(al);
280 amplifiedLinkValues.add(al2);
281 Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
282 Augmentation<Link> aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
283 .setAdministrativeState(State.InService)
285 .setLinkLatency(Long.valueOf(123))
286 .setLinkLength(BigDecimal.valueOf(123))
287 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
288 .setOMSAttributes(new OMSAttributesBuilder()
289 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
290 .setOppositeLink(new LinkId("link 1"))
291 .setSpan(new SpanBuilder().build())
292 .setTEMetric(Long.valueOf(123)).build())
293 .setOperationalState(State.InService).build();
294 Augmentation<Link> aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
295 .setAdministrativeState(State.InService)
297 .setLinkLatency(Long.valueOf(123))
298 .setLinkLength(BigDecimal.valueOf(123))
299 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
300 .setOMSAttributes(new OMSAttributesBuilder()
301 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
302 .setOppositeLink(new LinkId("link 1"))
303 .setSpan(new SpanBuilder().build())
304 .setTEMetric(Long.valueOf(123)).build())
305 .setOperationalState(State.InService).build();
307 List<SupportingLink> supportingLinks = new ArrayList<>();
308 SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
309 .setNetworkRef(new NetworkId("net1")).build();
310 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
311 .setNetworkRef(new NetworkId("net1")).build();
312 supportingLinks.add(supportingLink);
313 supportingLinks.add(supportingLink2);
314 List<Link> links = new ArrayList<>();
315 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
316 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
317 .setDestTp("dest tp").build())
318 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
319 .setSourceTp("src tp").build())
320 .setSupportingLink(supportingLinks)
321 .addAugmentation(Link1.class, aug1)
322 .addAugmentation(Link1.class, aug2).build();
324 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
325 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
326 .setDestTp("dest tp").build())
327 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
328 .setSourceTp("src tp").build())
329 .setSupportingLink(supportingLinks).build();
332 Network1 network = new Network1Builder().setLink(links).build();
333 Optional.of(network);
337 public static List<NodeId> getNodeIds() {
338 List<NodeId> nodes = new ArrayList<>();
339 NodeId node = new NodeId("node 1");
340 NodeId node2 = new NodeId("node 1");
341 NodeId node3 = new NodeId("node 1");
342 NodeId node4 = new NodeId("node 1");
350 public static Nodes getNodes(String nodeId, String mappingKey) {
351 List<CpToDegree> cpList = new ArrayList<>();
352 CpToDegree cp1 = new CpToDegreeBuilder()
353 .setCircuitPackName("circuit name")
354 .setDegreeNumber(Long.valueOf(123))
356 CpToDegree cp2 = new CpToDegreeBuilder()
357 .setCircuitPackName("circuit name")
358 .setDegreeNumber(Long.valueOf(123))
362 List<Mapping> mappingList = new ArrayList<>();
363 Mapping map1 = new MappingBuilder()
364 .setLogicalConnectionPoint("point")
365 .setSupportingCircuitPackName("circuit name")
366 .setSupportingOms("oms")
367 .setSupportingOts("ots")
368 .setSupportingPort("port")
369 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
371 mappingList.add(map1);
372 Nodes nodes = new NodesBuilder()
374 .setNodeInfo(new NodeInfoBuilder()
375 .setNodeType(org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes.Xpdr)
376 .setOpenroadmVersion(OpenroadmVersion._121)
378 .setCpToDegree(cpList)
379 .setMapping(mappingList)
384 public static Nodes getNodes2(String nodeId, String mappingKey) {
385 List<CpToDegree> cpList = new ArrayList<>();
386 CpToDegree cp1 = new CpToDegreeBuilder()
387 .setCircuitPackName("circuit name")
388 .setDegreeNumber(Long.valueOf(123))
390 CpToDegree cp2 = new CpToDegreeBuilder()
391 .setCircuitPackName("circuit name")
392 .setDegreeNumber(Long.valueOf(123))
396 List<Mapping> mappingList = new ArrayList<>();
397 Mapping map1 = new MappingBuilder()
398 .setLogicalConnectionPoint("point")
399 .setSupportingCircuitPackName("circuit name")
400 .setSupportingOms("oms")
401 .setSupportingOts("ots")
402 .setSupportingPort("port")
403 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
405 mappingList.add(map1);
406 Nodes nodes = new NodesBuilder()
408 .setNodeInfo(new NodeInfoBuilder()
410 .setOpenroadmVersion(OpenroadmVersion._121)
412 .setCpToDegree(cpList)
413 .setMapping(mappingList)
418 public static Nodes getNodes3(String nodeId, String mappingKey) {
419 List<CpToDegree> cpList = new ArrayList<>();
420 CpToDegree cp1 = new CpToDegreeBuilder()
421 .setCircuitPackName("circuit name")
422 .setDegreeNumber(Long.valueOf(123))
424 CpToDegree cp2 = new CpToDegreeBuilder()
425 .setCircuitPackName("circuit name")
426 .setDegreeNumber(Long.valueOf(123))
430 List<Mapping> mappingList = new ArrayList<>();
431 Mapping map1 = new MappingBuilder()
432 .setLogicalConnectionPoint("point")
433 .setSupportingCircuitPackName("circuit name")
434 .setSupportingOms("oms")
435 .setSupportingOts("ots")
436 .setSupportingPort("port")
437 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
439 mappingList.add(map1);
440 Nodes nodes = new NodesBuilder()
442 .setNodeInfo(new NodeInfoBuilder()
443 .setNodeType(org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes.Rdm)
444 .setOpenroadmVersion(OpenroadmVersion._121)
446 .setCpToDegree(cpList)
447 .setMapping(mappingList)
452 public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
453 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
454 .child(Nodes.class, new NodesKey(nodeId));
455 Nodes nodes = getNodes(nodeId, mappingKey);
456 writeTransaction(dataBroker, nodesIID, nodes);
459 public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
460 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
461 .child(Nodes.class, new NodesKey(nodeId));
462 Nodes nodes = getNodes2(nodeId, mappingKey);
463 writeTransaction(dataBroker, nodesIID, nodes);
466 public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
467 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
468 .child(Nodes.class, new NodesKey(nodeId));
469 Nodes nodes = getNodes3(nodeId, mappingKey);
470 writeTransaction(dataBroker, nodesIID, nodes);