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;
17 import org.opendaylight.mdsal.binding.api.DataBroker;
18 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
19 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
20 import org.opendaylight.transportpce.common.NetworkUtils;
21 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.Network;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.Nodes;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.NodesBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.NodesKey;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.CpToDegree;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.CpToDegreeBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.Mapping;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.MappingBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.MappingKey;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.NodeInfo.OpenroadmVersion;
31 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev200128.network.nodes.NodeInfoBuilder;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
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 @SuppressWarnings("unchecked")
73 public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
75 ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
76 transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object);
77 transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get();
82 // public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
83 // InstanceIdentifier instanceIdentifier,
86 // public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
88 // LogicalDatastoreType logicalDatastoreType,
89 // InstanceIdentifier<? extends DataObject> instanceIdentifier)
90 // throws ExecutionException, InterruptedException {
91 // Future<Optional<DeviceTransaction>> deviceTxFuture =
92 // deviceTransactionManager.getDeviceTransaction(nodeId);
93 // if (!deviceTxFuture.get().isPresent()) {
96 // DeviceTransaction deviceTx = deviceTxFuture.get().get();
97 // com.google.common.base.Optional<? extends DataObject> readOpt
98 // = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
99 // if (!readOpt.isPresent()) {
102 // return readOpt.get();
105 public static Network1 getNullNetwork() {
106 Network1 network = new Network1Builder().setLink(null).build();
107 Optional.of(network);
111 public static Network1 getEmptyNetwork() {
112 Network1 network = new Network1Builder().setLink(new ArrayList<>()).build();
113 Optional.of(network);
117 public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network
118 .rev180226.networks.Network getOverLayNetwork() {
119 List<SupportingNode> supportingNodes1 = new ArrayList<>();
121 .add(new SupportingNodeBuilder()
122 .setNodeRef(new NodeId("node 1"))
123 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
125 NodeBuilder node1Builder = new NodeBuilder()
126 .setNodeId(new NodeId("node 1"))
127 .withKey(new NodeKey(new NodeId("node 1")))
128 .setSupportingNode(supportingNodes1);
129 List<Node> nodes = new ArrayList<>();
130 nodes.add(node1Builder.build());
131 List<SupportingNode> supportingNodes = new ArrayList<>();
133 .add(new SupportingNodeBuilder()
134 .setNodeRef(new NodeId("node 2"))
135 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
137 NodeBuilder node2Builder = new NodeBuilder()
138 .setNodeId(new NodeId("node 2"))
139 .withKey(new NodeKey(new NodeId("node 2")))
140 .setSupportingNode(supportingNodes);
141 nodes.add(node2Builder.build());
142 List<SupportingNode> supportingNodes3 = new ArrayList<>();
144 .add(new SupportingNodeBuilder()
145 .setNodeRef(new NodeId("node 3"))
146 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
148 NodeBuilder node3Builder = new NodeBuilder()
149 .setNodeId(new NodeId("node 3"))
150 .withKey(new NodeKey(new NodeId("node 3")))
151 .setSupportingNode(supportingNodes3);
152 nodes.add(node3Builder.build());
153 List<SupportingNode> supportingNodes4 = new ArrayList<>();
155 .add(new SupportingNodeBuilder()
156 .setNodeRef(new NodeId("node 4"))
157 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
159 NodeBuilder node4Builder = new NodeBuilder()
160 .setNodeId(new NodeId("node 4"))
161 .withKey(new NodeKey(new NodeId("node 4")))
162 .setSupportingNode(supportingNodes4);
163 nodes.add(node4Builder.build());
164 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder
166 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks
169 .setNetworkId(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID));
170 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network network =
171 networkBuilder.build();
172 Optional.of(network);
176 public static Network1 getNetwork() {
177 List<SupportingLink> supportingLinks = new ArrayList<>();
178 SupportingLink supportingLink1 = new SupportingLinkBuilder()
180 .setNetworkRef(new NetworkId("net1"))
182 SupportingLink supportingLink2 = new SupportingLinkBuilder()
184 .setNetworkRef(new NetworkId("net2"))
186 supportingLinks.add(supportingLink1);
187 supportingLinks.add(supportingLink2);
188 List<Link> links = new ArrayList<>();
189 Link link1 = new LinkBuilder()
190 .setLinkId(new LinkId("link 1"))
192 new DestinationBuilder()
193 .setDestNode(new NodeId("node 1"))
194 .setDestTp("dest tp").build())
197 .setSourceNode(new NodeId("node 2"))
198 .setSourceTp("src tp")
200 .setSupportingLink(supportingLinks)
203 Link link2 = new LinkBuilder()
204 .setLinkId(new LinkId("link 2"))
206 new DestinationBuilder()
207 .setDestNode(new NodeId("node 3"))
208 .setDestTp("dest tp")
212 .setSourceNode(new NodeId("node 4"))
213 .setSourceTp("src tp")
215 .setSupportingLink(supportingLinks)
219 Network1 network = new Network1Builder().setLink(links).build();
220 Optional.of(network);
224 public static Network1 getNetwork2() {
225 List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
226 LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
227 .setFiberType(LinkConcatenation.FiberType.Truewave)
228 .setPmd(new FiberPmd(BigDecimal.ONE))
229 .setSRLGId(Long.valueOf(1))
230 .setSRLGLength(Long.valueOf(1))
232 LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
233 .setFiberType(LinkConcatenation.FiberType.Truewave)
234 .setPmd(new FiberPmd(BigDecimal.ONE))
235 .setSRLGId(Long.valueOf(1))
236 .setSRLGLength(Long.valueOf(1))
238 linkConcentationValues.add(linkConcatenation);
239 linkConcentationValues.add(linkConcatenation2);
241 amplifiedLinkValues = new ArrayList<>();
242 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al =
243 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
244 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
245 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
246 .attributes.amplified.link.section.element.section.element.SpanBuilder()
247 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
248 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
249 .setAdministrativeState(AdminStates.InService)
250 .setAutoSpanloss(true)
252 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
253 .setLinkConcatenation(linkConcentationValues)
254 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
255 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
259 .setSectionEltNumber(Integer.valueOf(1)).build();
260 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = new
261 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
262 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
263 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
264 .attributes.amplified.link.section.element.section.element.SpanBuilder()
265 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
266 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
267 .setAdministrativeState(AdminStates.InService)
268 .setAutoSpanloss(true)
270 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
271 .setLinkConcatenation(linkConcentationValues)
272 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
273 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
277 .setSectionEltNumber(Integer.valueOf(1)).build();
278 amplifiedLinkValues.add(al);
279 amplifiedLinkValues.add(al2);
280 Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
281 Augmentation<Link> aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
282 .setAdministrativeState(State.InService)
284 .setLinkLatency(Long.valueOf(123))
285 .setLinkLength(BigDecimal.valueOf(123))
286 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
287 .setOMSAttributes(new OMSAttributesBuilder()
288 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
289 .setOppositeLink(new LinkId("link 1"))
290 .setSpan(new SpanBuilder().build())
291 .setTEMetric(Long.valueOf(123)).build())
292 .setOperationalState(State.InService).build();
293 Augmentation<Link> aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
294 .setAdministrativeState(State.InService)
296 .setLinkLatency(Long.valueOf(123))
297 .setLinkLength(BigDecimal.valueOf(123))
298 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
299 .setOMSAttributes(new OMSAttributesBuilder()
300 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
301 .setOppositeLink(new LinkId("link 1"))
302 .setSpan(new SpanBuilder().build())
303 .setTEMetric(Long.valueOf(123)).build())
304 .setOperationalState(State.InService).build();
306 List<SupportingLink> supportingLinks = new ArrayList<>();
307 SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
308 .setNetworkRef(new NetworkId("net1")).build();
309 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
310 .setNetworkRef(new NetworkId("net1")).build();
311 supportingLinks.add(supportingLink);
312 supportingLinks.add(supportingLink2);
313 List<Link> links = new ArrayList<>();
314 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
315 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
316 .setDestTp("dest tp").build())
317 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
318 .setSourceTp("src tp").build())
319 .setSupportingLink(supportingLinks)
320 .addAugmentation(Link1.class, aug1)
321 .addAugmentation(Link1.class, aug2).build();
323 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
324 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
325 .setDestTp("dest tp").build())
326 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
327 .setSourceTp("src tp").build())
328 .setSupportingLink(supportingLinks).build();
331 Network1 network = new Network1Builder().setLink(links).build();
332 Optional.of(network);
336 public static List<NodeId> getNodeIds() {
337 List<NodeId> nodes = new ArrayList<>();
338 NodeId node = new NodeId("node 1");
339 NodeId node2 = new NodeId("node 1");
340 NodeId node3 = new NodeId("node 1");
341 NodeId node4 = new NodeId("node 1");
349 public static Nodes getNodes(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()
373 .setNodeInfo(new NodeInfoBuilder()
374 .setNodeType(org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes.Xpdr)
375 .setOpenroadmVersion(OpenroadmVersion._121)
377 .setCpToDegree(cpList)
378 .setMapping(mappingList)
383 public static Nodes getNodes2(String nodeId, String mappingKey) {
384 List<CpToDegree> cpList = new ArrayList<>();
385 CpToDegree cp1 = new CpToDegreeBuilder()
386 .setCircuitPackName("circuit name")
387 .setDegreeNumber(Long.valueOf(123))
389 CpToDegree cp2 = new CpToDegreeBuilder()
390 .setCircuitPackName("circuit name")
391 .setDegreeNumber(Long.valueOf(123))
395 List<Mapping> mappingList = new ArrayList<>();
396 Mapping map1 = new MappingBuilder()
397 .setLogicalConnectionPoint("point")
398 .setSupportingCircuitPackName("circuit name")
399 .setSupportingOms("oms")
400 .setSupportingOts("ots")
401 .setSupportingPort("port")
402 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
404 mappingList.add(map1);
405 Nodes nodes = new NodesBuilder()
407 .setNodeInfo(new NodeInfoBuilder()
409 .setOpenroadmVersion(OpenroadmVersion._121)
411 .setCpToDegree(cpList)
412 .setMapping(mappingList)
417 public static Nodes getNodes3(String nodeId, String mappingKey) {
418 List<CpToDegree> cpList = new ArrayList<>();
419 CpToDegree cp1 = new CpToDegreeBuilder()
420 .setCircuitPackName("circuit name")
421 .setDegreeNumber(Long.valueOf(123))
423 CpToDegree cp2 = new CpToDegreeBuilder()
424 .setCircuitPackName("circuit name")
425 .setDegreeNumber(Long.valueOf(123))
429 List<Mapping> mappingList = new ArrayList<>();
430 Mapping map1 = new MappingBuilder()
431 .setLogicalConnectionPoint("point")
432 .setSupportingCircuitPackName("circuit name")
433 .setSupportingOms("oms")
434 .setSupportingOts("ots")
435 .setSupportingPort("port")
436 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
438 mappingList.add(map1);
439 Nodes nodes = new NodesBuilder()
441 .setNodeInfo(new NodeInfoBuilder()
442 .setNodeType(org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes.Rdm)
443 .setOpenroadmVersion(OpenroadmVersion._121)
445 .setCpToDegree(cpList)
446 .setMapping(mappingList)
451 public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
452 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
453 .child(Nodes.class, new NodesKey(nodeId));
454 Nodes nodes = getNodes(nodeId, mappingKey);
455 writeTransaction(dataBroker, nodesIID, nodes);
458 public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
459 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
460 .child(Nodes.class, new NodesKey(nodeId));
461 Nodes nodes = getNodes2(nodeId, mappingKey);
462 writeTransaction(dataBroker, nodesIID, nodes);
465 public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
466 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
467 .child(Nodes.class, new NodesKey(nodeId));
468 Nodes nodes = getNodes3(nodeId, mappingKey);
469 writeTransaction(dataBroker, nodesIID, nodes);