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.types.rev161014.NodeTypes;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.FiberPmd;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.RatioDB;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.State;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.amplified.link.SectionElementBuilder;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.span.attributes.LinkConcatenation;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.span.attributes.LinkConcatenationBuilder;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.OMSAttributesBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.oms.attributes.AmplifiedLinkBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.oms.attributes.SpanBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmLinkType;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1Builder;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkBuilder;
50 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.DestinationBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SourceBuilder;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SupportingLink;
53 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SupportingLinkBuilder;
54 import org.opendaylight.yangtools.yang.binding.Augmentation;
55 import org.opendaylight.yangtools.yang.binding.DataObject;
56 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
58 public final class TransactionUtils {
60 private TransactionUtils() {
64 public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
66 ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
67 transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object, true);
68 transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get();
73 // public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
74 // InstanceIdentifier instanceIdentifier,
77 // public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
79 // LogicalDatastoreType logicalDatastoreType,
80 // InstanceIdentifier<? extends DataObject> instanceIdentifier)
81 // throws ExecutionException, InterruptedException {
82 // Future<Optional<DeviceTransaction>> deviceTxFuture =
83 // deviceTransactionManager.getDeviceTransaction(nodeId);
84 // if (!deviceTxFuture.get().isPresent()) {
87 // DeviceTransaction deviceTx = deviceTxFuture.get().get();
88 // com.google.common.base.Optional<? extends DataObject> readOpt
89 // = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
90 // if (!readOpt.isPresent()) {
93 // return readOpt.get();
96 public static Network1 getNullNetwork() {
97 Network1 network = new Network1Builder().setLink(null).build();
102 public static Network1 getEmptyNetwork() {
103 Network1 network = new Network1Builder().setLink(new ArrayList<>()).build();
104 Optional.of(network);
108 public static Network1 getNetwork() {
109 List<SupportingLink> supportingLinks = new ArrayList<>();
110 SupportingLink supportingLink1 = new SupportingLinkBuilder().setLinkRef("ref1")
111 .setNetworkRef(new NetworkId("net1")).build();
112 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
113 .setNetworkRef(new NetworkId("net2")).build();
114 supportingLinks.add(supportingLink1);
115 supportingLinks.add(supportingLink2);
116 List<Link> links = new ArrayList<>();
117 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
118 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
119 .setDestTp("dest tp").build())
120 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
121 .setSourceTp("src tp").build())
122 .setSupportingLink(supportingLinks).build();
124 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
125 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
126 .setDestTp("dest tp").build())
127 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
128 .setSourceTp("src tp").build())
129 .setSupportingLink(supportingLinks).build();
132 Network1 network = new Network1Builder().setLink(links).build();
133 Optional.of(network);
137 public static Network1 getNetwork2() {
138 List<LinkConcatenation> linkConcentationValues = new ArrayList<>();
139 LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
140 .setFiberType(LinkConcatenation.FiberType.Truewave)
141 .setPmd(new FiberPmd(BigDecimal.ONE))
142 .setSRLGId(Long.valueOf(1))
143 .setSRLGLength(Long.valueOf(1))
145 LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
146 .setFiberType(LinkConcatenation.FiberType.Truewave)
147 .setPmd(new FiberPmd(BigDecimal.ONE))
148 .setSRLGId(Long.valueOf(1))
149 .setSRLGLength(Long.valueOf(1))
151 linkConcentationValues.add(linkConcatenation);
152 linkConcentationValues.add(linkConcatenation2);
153 List<org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink>
154 amplifiedLinkValues = new ArrayList<>();
155 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink al = new
156 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes
157 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
158 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
159 .attributes.amplified.link.section.element.section.element.SpanBuilder()
160 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
161 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
162 .setAdministrativeState(State.InService)
163 .setAutoSpanloss(true)
165 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
166 .setLinkConcatenation(linkConcentationValues)
167 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
168 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
172 .setSectionEltNumber(Integer.valueOf(1)).build();
173 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink al2 = new
174 org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes
175 .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
176 .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
177 .attributes.amplified.link.section.element.section.element.SpanBuilder()
178 .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link
179 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
180 .setAdministrativeState(State.InService)
181 .setAutoSpanloss(true)
183 .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE))
184 .setLinkConcatenation(linkConcentationValues)
185 .setSpanlossBase(new RatioDB(BigDecimal.ONE))
186 .setSpanlossCurrent(new RatioDB(BigDecimal.ONE))
190 .setSectionEltNumber(Integer.valueOf(1)).build();
191 amplifiedLinkValues.add(al);
192 amplifiedLinkValues.add(al2);
193 Map<Class<? extends Augmentation<Link>>, Augmentation<Link>> map = Collections.emptyMap();
194 Augmentation<Link> aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
195 .setAdministrativeState(State.InService)
197 .setLinkLatency(Long.valueOf(123))
198 .setLinkLength(BigDecimal.valueOf(123))
199 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
200 .setOMSAttributes(new OMSAttributesBuilder()
201 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
202 .setOppositeLink(new LinkId("link 1"))
203 .setSpan(new SpanBuilder().build())
204 .setTEMetric(Long.valueOf(123)).build())
205 .setOperationalState(State.InService).build();
206 Augmentation<Link> aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123))
207 .setAdministrativeState(State.InService)
209 .setLinkLatency(Long.valueOf(123))
210 .setLinkLength(BigDecimal.valueOf(123))
211 .setLinkType(OpenroadmLinkType.ROADMTOROADM)
212 .setOMSAttributes(new OMSAttributesBuilder()
213 .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
214 .setOppositeLink(new LinkId("link 1"))
215 .setSpan(new SpanBuilder().build())
216 .setTEMetric(Long.valueOf(123)).build())
217 .setOperationalState(State.InService).build();
219 List<SupportingLink> supportingLinks = new ArrayList<>();
220 SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1")
221 .setNetworkRef(new NetworkId("net1")).build();
222 SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2")
223 .setNetworkRef(new NetworkId("net1")).build();
224 supportingLinks.add(supportingLink);
225 supportingLinks.add(supportingLink2);
226 List<Link> links = new ArrayList<>();
227 Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1"))
228 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1"))
229 .setDestTp("dest tp").build())
230 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2"))
231 .setSourceTp("src tp").build())
232 .setSupportingLink(supportingLinks)
233 .addAugmentation(Link1.class, aug1)
234 .addAugmentation(Link1.class, aug2).build();
236 Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2"))
237 .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3"))
238 .setDestTp("dest tp").build())
239 .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4"))
240 .setSourceTp("src tp").build())
241 .setSupportingLink(supportingLinks).build();
244 Network1 network = new Network1Builder().setLink(links).build();
245 Optional.of(network);
249 public static List<NodeId> getNodeIds() {
250 List<NodeId> nodes = new ArrayList<>();
251 NodeId node = new NodeId("node 1");
252 NodeId node2 = new NodeId("node 1");
253 NodeId node3 = new NodeId("node 1");
254 NodeId node4 = new NodeId("node 1");
262 public static Nodes getNodes(String nodeId, String mappingKey) {
263 List<CpToDegree> cpList = new ArrayList<>();
264 CpToDegree cp1 = new CpToDegreeBuilder()
265 .setCircuitPackName("circuit name")
266 .setDegreeNumber(Long.valueOf(123))
268 CpToDegree cp2 = new CpToDegreeBuilder()
269 .setCircuitPackName("circuit name")
270 .setDegreeNumber(Long.valueOf(123))
274 List<Mapping> mappingList = new ArrayList<>();
275 Mapping map1 = new MappingBuilder()
276 .setLogicalConnectionPoint("point")
277 .setSupportingCircuitPackName("circuit name")
278 .setSupportingOms("oms")
279 .setSupportingOts("ots")
280 .setSupportingPort("port")
281 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
283 mappingList.add(map1);
284 Nodes nodes = new NodesBuilder()
286 .setNodeType(NodeTypes.Xpdr)
287 .setCpToDegree(cpList)
288 .setMapping(mappingList)
293 public static Nodes getNodes2(String nodeId, String mappingKey) {
294 List<CpToDegree> cpList = new ArrayList<>();
295 CpToDegree cp1 = new CpToDegreeBuilder()
296 .setCircuitPackName("circuit name")
297 .setDegreeNumber(Long.valueOf(123))
299 CpToDegree cp2 = new CpToDegreeBuilder()
300 .setCircuitPackName("circuit name")
301 .setDegreeNumber(Long.valueOf(123))
305 List<Mapping> mappingList = new ArrayList<>();
306 Mapping map1 = new MappingBuilder()
307 .setLogicalConnectionPoint("point")
308 .setSupportingCircuitPackName("circuit name")
309 .setSupportingOms("oms")
310 .setSupportingOts("ots")
311 .setSupportingPort("port")
312 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
314 mappingList.add(map1);
315 Nodes nodes = new NodesBuilder()
318 .setCpToDegree(cpList)
319 .setMapping(mappingList)
324 public static Nodes getNodes3(String nodeId, String mappingKey) {
325 List<CpToDegree> cpList = new ArrayList<>();
326 CpToDegree cp1 = new CpToDegreeBuilder()
327 .setCircuitPackName("circuit name")
328 .setDegreeNumber(Long.valueOf(123))
330 CpToDegree cp2 = new CpToDegreeBuilder()
331 .setCircuitPackName("circuit name")
332 .setDegreeNumber(Long.valueOf(123))
336 List<Mapping> mappingList = new ArrayList<>();
337 Mapping map1 = new MappingBuilder()
338 .setLogicalConnectionPoint("point")
339 .setSupportingCircuitPackName("circuit name")
340 .setSupportingOms("oms")
341 .setSupportingOts("ots")
342 .setSupportingPort("port")
343 .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null"))
345 mappingList.add(map1);
346 Nodes nodes = new NodesBuilder()
348 .setNodeType(NodeTypes.Rdm)
349 .setCpToDegree(cpList)
350 .setMapping(mappingList)
355 public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) {
356 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
357 .child(Nodes.class, new NodesKey(nodeId));
358 Nodes nodes = getNodes(nodeId, mappingKey);
359 writeTransaction(dataBroker, nodesIID, nodes);
362 public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) {
363 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
364 .child(Nodes.class, new NodesKey(nodeId));
365 Nodes nodes = getNodes2(nodeId, mappingKey);
366 writeTransaction(dataBroker, nodesIID, nodes);
369 public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) {
370 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
371 .child(Nodes.class, new NodesKey(nodeId));
372 Nodes nodes = getNodes3(nodeId, mappingKey);
373 writeTransaction(dataBroker, nodesIID, nodes);