introduce ordm v2.2.1 support for OLM and renderer
[transportpce.git] / olm / src / test / java / org / opendaylight / transportpce / olm / util / TransactionUtils.java
1 /*
2  * Copyright © 2018 Orange Systems, Inc. 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.olm.util;
10
11 import java.math.BigDecimal;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.Map;
16 import java.util.Optional;
17
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.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.Network;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.Nodes;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesKey;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegree;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegreeBuilder;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingKey;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.FiberPmd;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.RatioDB;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.amplified.link.SectionElementBuilder;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenation;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.span.attributes.LinkConcatenationBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.Link1Builder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.OMSAttributesBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.networks.network.link.oms.attributes.SpanBuilder;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLink;
54 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SupportingLinkBuilder;
55 import org.opendaylight.yangtools.yang.binding.Augmentation;
56 import org.opendaylight.yangtools.yang.binding.DataObject;
57 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
58
59 public final class TransactionUtils {
60
61     private TransactionUtils() {
62
63     }
64
65     public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
66         DataObject object) {
67         ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
68         transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object, true);
69         transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get();
70         return true;
71     }
72
73 //
74 //    public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
75 //        InstanceIdentifier instanceIdentifier,
76 //        DataObject object)
77
78 //    public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
79 //                                  String nodeId,
80 //                                  LogicalDatastoreType logicalDatastoreType,
81 //                                  InstanceIdentifier<? extends DataObject> instanceIdentifier)
82 //            throws ExecutionException, InterruptedException {
83 //        Future<Optional<DeviceTransaction>> deviceTxFuture =
84 //                deviceTransactionManager.getDeviceTransaction(nodeId);
85 //        if (!deviceTxFuture.get().isPresent()) {
86 //            return null;
87 //        }
88 //        DeviceTransaction deviceTx = deviceTxFuture.get().get();
89 //        com.google.common.base.Optional<? extends DataObject> readOpt
90 //                = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
91 //        if (!readOpt.isPresent()) {
92 //            return null;
93 //        }
94 //        return readOpt.get();
95 //    }
96
97     public static Network1 getNullNetwork() {
98         Network1 network = new Network1Builder().setLink(null).build();
99         Optional.of(network);
100         return network;
101     }
102
103     public static Network1 getEmptyNetwork() {
104         Network1 network = new Network1Builder().setLink(new ArrayList<>()).build();
105         Optional.of(network);
106         return network;
107     }
108
109     public static Network1 getNetwork() {
110         List<SupportingLink> supportingLinks = new ArrayList<>();
111         SupportingLink supportingLink1 = new SupportingLinkBuilder().setLinkRef("ref1")
112             .setNetworkRef(new NetworkId("net1")).build();
113         SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
114             .setNetworkRef(new NetworkId("net2")).build();
115         supportingLinks.add(supportingLink1);
116         supportingLinks.add(supportingLink2);
117         List<Link> links = new ArrayList<>();
118         Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
119             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
120                 .setDestTp("dest tp").build())
121             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
122                 .setSourceTp("src tp").build())
123             .setSupportingLink(supportingLinks).build();
124
125         Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
126             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
127                 .setDestTp("dest tp").build())
128             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
129                 .setSourceTp("src tp").build())
130             .setSupportingLink(supportingLinks).build();
131         links.add(link1);
132         links.add(link2);
133         Network1 network = new Network1Builder().setLink(links).build();
134         Optional.of(network);
135         return network;
136     }
137
138     public static Network1 getNetwork2() {
139         List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
140         LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
141             .setFiberType(LinkConcatenation.FiberType.Truewave)
142             .setPmd(new FiberPmd(BigDecimal.ONE))
143             .setSRLGId(Long.valueOf(1))
144             .setSRLGLength(Long.valueOf(1))
145             .build();
146         LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
147             .setFiberType(LinkConcatenation.FiberType.Truewave)
148             .setPmd(new FiberPmd(BigDecimal.ONE))
149             .setSRLGId(Long.valueOf(1))
150             .setSRLGLength(Long.valueOf(1))
151             .build();
152         linkConcentationValues.add(linkConcatenation);
153         linkConcentationValues.add(linkConcatenation2);
154         List<org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink>
155             amplifiedLinkValues = new ArrayList<>();
156         org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al = new
157             org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
158                 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
159                 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
160                     .attributes.amplified.link.section.element.section.element.SpanBuilder()
161                         .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
162                                 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
163                                     .setAdministrativeState(AdminStates.InService)
164                                     .setAutoSpanloss(true)
165                                     .setClfi("clfi")
166                                     .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
167                                     .setLinkConcatenation(linkConcentationValues)
168                                     .setSpanlossBase(new RatioDB(BigDecimal.ONE))
169                                     .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
170                                     .build())
171                     .build())
172                 .build())
173             .setSectionEltNumber(Integer.valueOf(1)).build();
174         org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes.AmplifiedLink al2 = new
175             org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link.attributes
176                 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
177                 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
178                      .attributes.amplified.link.section.element.section.element.SpanBuilder()
179                         .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.amplified.link
180                                 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
181                                     .setAdministrativeState(AdminStates.InService)
182                                     .setAutoSpanloss(true)
183                                     .setClfi("clfi")
184                                     .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
185                                     .setLinkConcatenation(linkConcentationValues)
186                                     .setSpanlossBase(new RatioDB(BigDecimal.ONE))
187                                     .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
188                                     .build())
189                                     .build())
190             .build())
191             .setSectionEltNumber(Integer.valueOf(1)).build();
192         amplifiedLinkValues.add(al);
193         amplifiedLinkValues.add(al2);
194         Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
195         Augmentation<Link> aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
196             .setAdministrativeState(State.InService)
197             .setAmplified(true)
198             .setLinkLatency(Long.valueOf(123))
199             .setLinkLength(BigDecimal.valueOf(123))
200             .setLinkType(OpenroadmLinkType.ROADMTOROADM)
201             .setOMSAttributes(new OMSAttributesBuilder()
202                 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
203                 .setOppositeLink(new LinkId("link 1"))
204                 .setSpan(new SpanBuilder().build())
205                 .setTEMetric(Long.valueOf(123)).build())
206             .setOperationalState(State.InService).build();
207         Augmentation<Link> aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
208             .setAdministrativeState(State.InService)
209             .setAmplified(true)
210             .setLinkLatency(Long.valueOf(123))
211             .setLinkLength(BigDecimal.valueOf(123))
212             .setLinkType(OpenroadmLinkType.ROADMTOROADM)
213             .setOMSAttributes(new OMSAttributesBuilder()
214                 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
215                 .setOppositeLink(new LinkId("link 1"))
216                 .setSpan(new SpanBuilder().build())
217                 .setTEMetric(Long.valueOf(123)).build())
218             .setOperationalState(State.InService).build();
219
220         List<SupportingLink> supportingLinks = new ArrayList<>();
221         SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
222             .setNetworkRef(new NetworkId("net1")).build();
223         SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
224             .setNetworkRef(new NetworkId("net1")).build();
225         supportingLinks.add(supportingLink);
226         supportingLinks.add(supportingLink2);
227         List<Link> links = new ArrayList<>();
228         Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
229             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
230                 .setDestTp("dest tp").build())
231             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
232                 .setSourceTp("src tp").build())
233             .setSupportingLink(supportingLinks)
234             .addAugmentation(Link1.class, aug1)
235             .addAugmentation(Link1.class, aug2).build();
236
237         Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
238             .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
239                 .setDestTp("dest tp").build())
240             .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
241                 .setSourceTp("src tp").build())
242             .setSupportingLink(supportingLinks).build();
243         links.add(link1);
244         links.add(link2);
245         Network1 network = new Network1Builder().setLink(links).build();
246         Optional.of(network);
247         return network;
248     }
249
250     public static List<NodeId> getNodeIds() {
251         List<NodeId> nodes = new ArrayList<>();
252         NodeId node = new NodeId("node 1");
253         NodeId node2 = new NodeId("node 1");
254         NodeId node3 = new NodeId("node 1");
255         NodeId node4 = new NodeId("node 1");
256         nodes.add(node);
257         nodes.add(node2);
258         nodes.add(node3);
259         nodes.add(node4);
260         return nodes;
261     }
262
263     public static Nodes getNodes(String nodeId, String mappingKey) {
264         List<CpToDegree> cpList = new ArrayList<>();
265         CpToDegree cp1 = new CpToDegreeBuilder()
266             .setCircuitPackName("circuit name")
267             .setDegreeNumber(Long.valueOf(123))
268             .build();
269         CpToDegree cp2 = new CpToDegreeBuilder()
270             .setCircuitPackName("circuit name")
271             .setDegreeNumber(Long.valueOf(123))
272             .build();
273         cpList.add(cp1);
274         cpList.add(cp2);
275         List<Mapping> mappingList = new ArrayList<>();
276         Mapping map1 = new MappingBuilder()
277             .setLogicalConnectionPoint("point")
278             .setSupportingCircuitPackName("circuit name")
279             .setSupportingOms("oms")
280             .setSupportingOts("ots")
281             .setSupportingPort("port")
282             .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
283             .build();
284         mappingList.add(map1);
285         Nodes nodes = new NodesBuilder()
286             .setNodeId(nodeId)
287             .setNodeType(NodeTypes.Xpdr)
288             .setCpToDegree(cpList)
289             .setMapping(mappingList)
290             .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
291             .build();
292         return nodes;
293     }
294
295     public static Nodes getNodes2(String nodeId, String mappingKey) {
296         List<CpToDegree> cpList = new ArrayList<>();
297         CpToDegree cp1 = new CpToDegreeBuilder()
298             .setCircuitPackName("circuit name")
299             .setDegreeNumber(Long.valueOf(123))
300             .build();
301         CpToDegree cp2 = new CpToDegreeBuilder()
302             .setCircuitPackName("circuit name")
303             .setDegreeNumber(Long.valueOf(123))
304             .build();
305         cpList.add(cp1);
306         cpList.add(cp2);
307         List<Mapping> mappingList = new ArrayList<>();
308         Mapping map1 = new MappingBuilder()
309             .setLogicalConnectionPoint("point")
310             .setSupportingCircuitPackName("circuit name")
311             .setSupportingOms("oms")
312             .setSupportingOts("ots")
313             .setSupportingPort("port")
314             .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
315             .build();
316         mappingList.add(map1);
317         Nodes nodes = new NodesBuilder()
318             .setNodeId(nodeId)
319             .setNodeType(null)
320             .setCpToDegree(cpList)
321             .setMapping(mappingList)
322             .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
323             .build();
324         return nodes;
325     }
326
327     public static Nodes getNodes3(String nodeId, String mappingKey) {
328         List<CpToDegree> cpList = new ArrayList<>();
329         CpToDegree cp1 = new CpToDegreeBuilder()
330             .setCircuitPackName("circuit name")
331             .setDegreeNumber(Long.valueOf(123))
332             .build();
333         CpToDegree cp2 = new CpToDegreeBuilder()
334             .setCircuitPackName("circuit name")
335             .setDegreeNumber(Long.valueOf(123))
336             .build();
337         cpList.add(cp1);
338         cpList.add(cp2);
339         List<Mapping> mappingList = new ArrayList<>();
340         Mapping map1 = new MappingBuilder()
341             .setLogicalConnectionPoint("point")
342             .setSupportingCircuitPackName("circuit name")
343             .setSupportingOms("oms")
344             .setSupportingOts("ots")
345             .setSupportingPort("port")
346             .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
347             .build();
348         mappingList.add(map1);
349         Nodes nodes = new NodesBuilder()
350             .setNodeId(nodeId)
351             .setNodeType(NodeTypes.Rdm)
352             .setCpToDegree(cpList)
353             .setMapping(mappingList)
354             .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
355             .build();
356         return nodes;
357     }
358
359     public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
360         InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
361             .child(Nodes.class, new NodesKey(nodeId));
362         Nodes nodes = getNodes(nodeId, mappingKey);
363         writeTransaction(dataBroker, nodesIID, nodes);
364     }
365
366     public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
367         InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
368             .child(Nodes.class, new NodesKey(nodeId));
369         Nodes nodes = getNodes2(nodeId, mappingKey);
370         writeTransaction(dataBroker, nodesIID, nodes);
371     }
372
373     public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
374         InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
375             .child(Nodes.class, new NodesKey(nodeId));
376         Nodes nodes = getNodes3(nodeId, mappingKey);
377         writeTransaction(dataBroker, nodesIID, nodes);
378     }
379
380 }