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.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);
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 List<SupportingNode> supportingNodes1 = new ArrayList<>();
120 .add(new SupportingNodeBuilder()
121 .setNodeRef(new NodeId("node 1"))
122 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
124 NodeBuilder node1Builder = new NodeBuilder()
125 .setNodeId(new NodeId("node 1"))
126 .withKey(new NodeKey(new NodeId("node 1")))
127 .setSupportingNode(supportingNodes1);
128 List<Node> nodes = new ArrayList<>();
129 nodes.add(node1Builder.build());
130 List<SupportingNode> supportingNodes = new ArrayList<>();
132 .add(new SupportingNodeBuilder()
133 .setNodeRef(new NodeId("node 2"))
134 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
136 NodeBuilder node2Builder = new NodeBuilder()
137 .setNodeId(new NodeId("node 2"))
138 .withKey(new NodeKey(new NodeId("node 2")))
139 .setSupportingNode(supportingNodes);
140 nodes.add(node2Builder.build());
141 List<SupportingNode> supportingNodes3 = new ArrayList<>();
143 .add(new SupportingNodeBuilder()
144 .setNodeRef(new NodeId("node 3"))
145 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
147 NodeBuilder node3Builder = new NodeBuilder()
148 .setNodeId(new NodeId("node 3"))
149 .withKey(new NodeKey(new NodeId("node 3")))
150 .setSupportingNode(supportingNodes3);
151 nodes.add(node3Builder.build());
152 List<SupportingNode> supportingNodes4 = new ArrayList<>();
154 .add(new SupportingNodeBuilder()
155 .setNodeRef(new NodeId("node 4"))
156 .setNetworkRef(new NetworkId(NetworkUtils.UNDERLAY_NETWORK_ID))
158 NodeBuilder node4Builder = new NodeBuilder()
159 .setNodeId(new NodeId("node 4"))
160 .withKey(new NodeKey(new NodeId("node 4")))
161 .setSupportingNode(supportingNodes4);
162 nodes.add(node4Builder.build());
163 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.NetworkBuilder
165 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks
168 .setNetworkId(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID));
169 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network network =
170 networkBuilder.build();
171 Optional.of(network);
175 public static Network1 getNetwork() {
176 List<SupportingLink> supportingLinks = new ArrayList<>();
177 SupportingLink supportingLink1 = new SupportingLinkBuilder()
179 .setNetworkRef(new NetworkId("net1"))
181 SupportingLink supportingLink2 = new SupportingLinkBuilder()
183 .setNetworkRef(new NetworkId("net2"))
185 supportingLinks.add(supportingLink1);
186 supportingLinks.add(supportingLink2);
187 List<Link> links = new ArrayList<>();
188 Link link1 = new LinkBuilder()
189 .setLinkId(new LinkId("link 1"))
191 new DestinationBuilder()
192 .setDestNode(new NodeId("node 1"))
193 .setDestTp("dest tp").build())
196 .setSourceNode(new NodeId("node 2"))
197 .setSourceTp("src tp")
199 .setSupportingLink(supportingLinks)
202 Link link2 = new LinkBuilder()
203 .setLinkId(new LinkId("link 2"))
205 new DestinationBuilder()
206 .setDestNode(new NodeId("node 3"))
207 .setDestTp("dest tp")
211 .setSourceNode(new NodeId("node 4"))
212 .setSourceTp("src tp")
214 .setSupportingLink(supportingLinks)
218 Network1 network = new Network1Builder().setLink(links).build();
219 Optional.of(network);
223 public static Network1 getNetwork2() {
224 List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
225 LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
226 .setFiberType(LinkConcatenation.FiberType.Truewave)
227 .setPmd(new FiberPmd(BigDecimal.ONE))
228 .setSRLGId(Long.valueOf(1))
229 .setSRLGLength(Long.valueOf(1))
231 LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
232 .setFiberType(LinkConcatenation.FiberType.Truewave)
233 .setPmd(new FiberPmd(BigDecimal.ONE))
234 .setSRLGId(Long.valueOf(1))
235 .setSRLGLength(Long.valueOf(1))
237 linkConcentationValues.add(linkConcatenation);
238 linkConcentationValues.add(linkConcatenation2);
240 amplifiedLinkValues = new ArrayList<>();
241 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al =
242 new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
243 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
244 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
245 .attributes.amplified.link.section.element.section.element.SpanBuilder()
246 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
247 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
248 .setAdministrativeState(AdminStates.InService)
249 .setAutoSpanloss(true)
251 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
252 .setLinkConcatenation(linkConcentationValues)
253 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
254 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
258 .setSectionEltNumber(Integer.valueOf(1)).build();
259 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = new
260 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
261 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
262 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
263 .attributes.amplified.link.section.element.section.element.SpanBuilder()
264 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
265 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
266 .setAdministrativeState(AdminStates.InService)
267 .setAutoSpanloss(true)
269 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
270 .setLinkConcatenation(linkConcentationValues)
271 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
272 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
276 .setSectionEltNumber(Integer.valueOf(1)).build();
277 amplifiedLinkValues.add(al);
278 amplifiedLinkValues.add(al2);
279 Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
280 Augmentation<Link> aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
281 .setAdministrativeState(State.InService)
283 .setLinkLatency(Long.valueOf(123))
284 .setLinkLength(BigDecimal.valueOf(123))
285 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
286 .setOMSAttributes(new OMSAttributesBuilder()
287 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
288 .setOppositeLink(new LinkId("link 1"))
289 .setSpan(new SpanBuilder().build())
290 .setTEMetric(Long.valueOf(123)).build())
291 .setOperationalState(State.InService).build();
292 Augmentation<Link> aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
293 .setAdministrativeState(State.InService)
295 .setLinkLatency(Long.valueOf(123))
296 .setLinkLength(BigDecimal.valueOf(123))
297 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
298 .setOMSAttributes(new OMSAttributesBuilder()
299 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
300 .setOppositeLink(new LinkId("link 1"))
301 .setSpan(new SpanBuilder().build())
302 .setTEMetric(Long.valueOf(123)).build())
303 .setOperationalState(State.InService).build();
305 List<SupportingLink> supportingLinks = new ArrayList<>();
306 SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
307 .setNetworkRef(new NetworkId("net1")).build();
308 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
309 .setNetworkRef(new NetworkId("net1")).build();
310 supportingLinks.add(supportingLink);
311 supportingLinks.add(supportingLink2);
312 List<Link> links = new ArrayList<>();
313 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
314 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
315 .setDestTp("dest tp").build())
316 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
317 .setSourceTp("src tp").build())
318 .setSupportingLink(supportingLinks)
319 .addAugmentation(Link1.class, aug1)
320 .addAugmentation(Link1.class, aug2).build();
322 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
323 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
324 .setDestTp("dest tp").build())
325 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
326 .setSourceTp("src tp").build())
327 .setSupportingLink(supportingLinks).build();
330 Network1 network = new Network1Builder().setLink(links).build();
331 Optional.of(network);
335 public static List<NodeId> getNodeIds() {
336 List<NodeId> nodes = new ArrayList<>();
337 NodeId node = new NodeId("node 1");
338 NodeId node2 = new NodeId("node 1");
339 NodeId node3 = new NodeId("node 1");
340 NodeId node4 = new NodeId("node 1");
348 public static Nodes getNodes(String nodeId, String mappingKey) {
349 List<CpToDegree> cpList = new ArrayList<>();
350 CpToDegree cp1 = new CpToDegreeBuilder()
351 .setCircuitPackName("circuit name")
352 .setDegreeNumber(Long.valueOf(123))
354 CpToDegree cp2 = new CpToDegreeBuilder()
355 .setCircuitPackName("circuit name")
356 .setDegreeNumber(Long.valueOf(123))
360 List<Mapping> mappingList = new ArrayList<>();
361 Mapping map1 = new MappingBuilder()
362 .setLogicalConnectionPoint("point")
363 .setSupportingCircuitPackName("circuit name")
364 .setSupportingOms("oms")
365 .setSupportingOts("ots")
366 .setSupportingPort("port")
367 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
369 mappingList.add(map1);
370 Nodes nodes = new NodesBuilder()
372 .setNodeType(NodeTypes.Xpdr)
373 .setCpToDegree(cpList)
374 .setMapping(mappingList)
375 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
380 public static Nodes getNodes2(String nodeId, String mappingKey) {
381 List<CpToDegree> cpList = new ArrayList<>();
382 CpToDegree cp1 = new CpToDegreeBuilder()
383 .setCircuitPackName("circuit name")
384 .setDegreeNumber(Long.valueOf(123))
386 CpToDegree cp2 = new CpToDegreeBuilder()
387 .setCircuitPackName("circuit name")
388 .setDegreeNumber(Long.valueOf(123))
392 List<Mapping> mappingList = new ArrayList<>();
393 Mapping map1 = new MappingBuilder()
394 .setLogicalConnectionPoint("point")
395 .setSupportingCircuitPackName("circuit name")
396 .setSupportingOms("oms")
397 .setSupportingOts("ots")
398 .setSupportingPort("port")
399 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
401 mappingList.add(map1);
402 Nodes nodes = new NodesBuilder()
405 .setCpToDegree(cpList)
406 .setMapping(mappingList)
407 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
412 public static Nodes getNodes3(String nodeId, String mappingKey) {
413 List<CpToDegree> cpList = new ArrayList<>();
414 CpToDegree cp1 = new CpToDegreeBuilder()
415 .setCircuitPackName("circuit name")
416 .setDegreeNumber(Long.valueOf(123))
418 CpToDegree cp2 = new CpToDegreeBuilder()
419 .setCircuitPackName("circuit name")
420 .setDegreeNumber(Long.valueOf(123))
424 List<Mapping> mappingList = new ArrayList<>();
425 Mapping map1 = new MappingBuilder()
426 .setLogicalConnectionPoint("point")
427 .setSupportingCircuitPackName("circuit name")
428 .setSupportingOms("oms")
429 .setSupportingOts("ots")
430 .setSupportingPort("port")
431 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
433 mappingList.add(map1);
434 Nodes nodes = new NodesBuilder()
436 .setNodeType(NodeTypes.Rdm)
437 .setCpToDegree(cpList)
438 .setMapping(mappingList)
439 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
444 public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
445 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
446 .child(Nodes.class, new NodesKey(nodeId));
447 Nodes nodes = getNodes(nodeId, mappingKey);
448 writeTransaction(dataBroker, nodesIID, nodes);
451 public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
452 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
453 .child(Nodes.class, new NodesKey(nodeId));
454 Nodes nodes = getNodes2(nodeId, mappingKey);
455 writeTransaction(dataBroker, nodesIID, nodes);
458 public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
459 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
460 .child(Nodes.class, new NodesKey(nodeId));
461 Nodes nodes = getNodes3(nodeId, mappingKey);
462 writeTransaction(dataBroker, nodesIID, nodes);