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.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;
59 public final class TransactionUtils {
61 private TransactionUtils() {
65 public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
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();
74 // public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
75 // InstanceIdentifier instanceIdentifier,
78 // public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
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()) {
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()) {
94 // return readOpt.get();
97 public static Network1 getNullNetwork() {
98 Network1 network = new Network1Builder().setLink(null).build();
103 public static Network1 getEmptyNetwork() {
104 Network1 network = new Network1Builder().setLink(new ArrayList<>()).build();
105 Optional.of(network);
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();
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();
133 Network1 network = new Network1Builder().setLink(links).build();
134 Optional.of(network);
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))
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))
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)
166 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
167 .setLinkConcatenation(linkConcentationValues)
168 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
169 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
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)
184 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
185 .setLinkConcatenation(linkConcentationValues)
186 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
187 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
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)
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)
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();
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();
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();
245 Network1 network = new Network1Builder().setLink(links).build();
246 Optional.of(network);
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");
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))
269 CpToDegree cp2 = new CpToDegreeBuilder()
270 .setCircuitPackName("circuit name")
271 .setDegreeNumber(Long.valueOf(123))
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"))
284 mappingList.add(map1);
285 Nodes nodes = new NodesBuilder()
287 .setNodeType(NodeTypes.Xpdr)
288 .setCpToDegree(cpList)
289 .setMapping(mappingList)
290 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
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))
301 CpToDegree cp2 = new CpToDegreeBuilder()
302 .setCircuitPackName("circuit name")
303 .setDegreeNumber(Long.valueOf(123))
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"))
316 mappingList.add(map1);
317 Nodes nodes = new NodesBuilder()
320 .setCpToDegree(cpList)
321 .setMapping(mappingList)
322 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
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))
333 CpToDegree cp2 = new CpToDegreeBuilder()
334 .setCircuitPackName("circuit name")
335 .setDegreeNumber(Long.valueOf(123))
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"))
348 mappingList.add(map1);
349 Nodes nodes = new NodesBuilder()
351 .setNodeType(NodeTypes.Rdm)
352 .setCpToDegree(cpList)
353 .setMapping(mappingList)
354 .setOpenroadmVersion(Nodes.OpenroadmVersion._121)
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);
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);
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);