/* * Copyright © 2018 Orange Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.transportpce.olm.util; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.Network; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.Nodes; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.NodesKey; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegree; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.CpToDegreeBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.MappingKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.FiberPmd; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.RatioDB; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.State; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.amplified.link.SectionElementBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.span.attributes.LinkConcatenation; import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.span.attributes.LinkConcatenationBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.Link1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.OMSAttributesBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.oms.attributes.AmplifiedLinkBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev170929.network.link.oms.attributes.SpanBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev170929.OpenroadmLinkType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NodeId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1Builder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.LinkBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.DestinationBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SourceBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SupportingLink; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.link.SupportingLinkBuilder; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; public final class TransactionUtils { private TransactionUtils() { } public static boolean writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier, DataObject object) { ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object, true); transaction.commit();// submit(Timeouts.DATASTORE_WRITE, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT).get(); return true; } // // public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType, // InstanceIdentifier instanceIdentifier, // DataObject object) // public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager, // String nodeId, // LogicalDatastoreType logicalDatastoreType, // InstanceIdentifier instanceIdentifier) // throws ExecutionException, InterruptedException { // Future> deviceTxFuture = // deviceTransactionManager.getDeviceTransaction(nodeId); // if (!deviceTxFuture.get().isPresent()) { // return null; // } // DeviceTransaction deviceTx = deviceTxFuture.get().get(); // com.google.common.base.Optional readOpt // = deviceTx.read(logicalDatastoreType, instanceIdentifier).get(); // if (!readOpt.isPresent()) { // return null; // } // return readOpt.get(); // } public static Network1 getNullNetwork() { Network1 network = new Network1Builder().setLink(null).build(); Optional.of(network); return network; } public static Network1 getEmptyNetwork() { Network1 network = new Network1Builder().setLink(new ArrayList<>()).build(); Optional.of(network); return network; } public static Network1 getNetwork() { List supportingLinks = new ArrayList<>(); SupportingLink supportingLink1 = new SupportingLinkBuilder().setLinkRef("ref1") .setNetworkRef(new NetworkId("net1")).build(); SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2") .setNetworkRef(new NetworkId("net2")).build(); supportingLinks.add(supportingLink1); supportingLinks.add(supportingLink2); List links = new ArrayList<>(); Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1")) .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1")) .setDestTp("dest tp").build()) .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2")) .setSourceTp("src tp").build()) .setSupportingLink(supportingLinks).build(); Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2")) .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3")) .setDestTp("dest tp").build()) .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4")) .setSourceTp("src tp").build()) .setSupportingLink(supportingLinks).build(); links.add(link1); links.add(link2); Network1 network = new Network1Builder().setLink(links).build(); Optional.of(network); return network; } public static Network1 getNetwork2() { List linkConcentationValues = new ArrayList<>(); LinkConcatenation linkConcatenation = new LinkConcatenationBuilder() .setFiberType(LinkConcatenation.FiberType.Truewave) .setPmd(new FiberPmd(BigDecimal.ONE)) .setSRLGId(Long.valueOf(1)) .setSRLGLength(Long.valueOf(1)) .build(); LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder() .setFiberType(LinkConcatenation.FiberType.Truewave) .setPmd(new FiberPmd(BigDecimal.ONE)) .setSRLGId(Long.valueOf(1)) .setSRLGLength(Long.valueOf(1)) .build(); linkConcentationValues.add(linkConcatenation); linkConcentationValues.add(linkConcatenation2); List amplifiedLinkValues = new ArrayList<>(); org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink al = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link .attributes.amplified.link.section.element.section.element.SpanBuilder() .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link .attributes.amplified.link.section.element.section.element.span.SpanBuilder() .setAdministrativeState(State.InService) .setAutoSpanloss(true) .setClfi("clfi") .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE)) .setLinkConcatenation(linkConcentationValues) .setSpanlossBase(new RatioDB(BigDecimal.ONE)) .setSpanlossCurrent(new RatioDB(BigDecimal.ONE)) .build()) .build()) .build()) .setSectionEltNumber(Integer.valueOf(1)).build(); org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes.AmplifiedLink al2 = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link.attributes .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder() .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link .attributes.amplified.link.section.element.section.element.SpanBuilder() .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev170929.amplified.link .attributes.amplified.link.section.element.section.element.span.SpanBuilder() .setAdministrativeState(State.InService) .setAutoSpanloss(true) .setClfi("clfi") .setEngineeredSpanloss(new RatioDB(BigDecimal.ONE)) .setLinkConcatenation(linkConcentationValues) .setSpanlossBase(new RatioDB(BigDecimal.ONE)) .setSpanlossCurrent(new RatioDB(BigDecimal.ONE)) .build()) .build()) .build()) .setSectionEltNumber(Integer.valueOf(1)).build(); amplifiedLinkValues.add(al); amplifiedLinkValues.add(al2); Map>, Augmentation> map = Collections.emptyMap(); Augmentation aug1 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123)) .setAdministrativeState(State.InService) .setAmplified(true) .setLinkLatency(Long.valueOf(123)) .setLinkLength(BigDecimal.valueOf(123)) .setLinkType(OpenroadmLinkType.ROADMTOROADM) .setOMSAttributes(new OMSAttributesBuilder() .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build()) .setOppositeLink(new LinkId("link 1")) .setSpan(new SpanBuilder().build()) .setTEMetric(Long.valueOf(123)).build()) .setOperationalState(State.InService).build(); Augmentation aug2 = new Link1Builder().setAdministrativeGroup(Long.valueOf(123)) .setAdministrativeState(State.InService) .setAmplified(true) .setLinkLatency(Long.valueOf(123)) .setLinkLength(BigDecimal.valueOf(123)) .setLinkType(OpenroadmLinkType.ROADMTOROADM) .setOMSAttributes(new OMSAttributesBuilder() .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build()) .setOppositeLink(new LinkId("link 1")) .setSpan(new SpanBuilder().build()) .setTEMetric(Long.valueOf(123)).build()) .setOperationalState(State.InService).build(); List supportingLinks = new ArrayList<>(); SupportingLink supportingLink = new SupportingLinkBuilder().setLinkRef("ref1") .setNetworkRef(new NetworkId("net1")).build(); SupportingLink supportingLink2 = new SupportingLinkBuilder().setLinkRef("ref2") .setNetworkRef(new NetworkId("net1")).build(); supportingLinks.add(supportingLink); supportingLinks.add(supportingLink2); List links = new ArrayList<>(); Link link1 = new LinkBuilder().setLinkId(new LinkId("link 1")) .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 1")) .setDestTp("dest tp").build()) .setSource(new SourceBuilder().setSourceNode(new NodeId("node 2")) .setSourceTp("src tp").build()) .setSupportingLink(supportingLinks) .addAugmentation(Link1.class, aug1) .addAugmentation(Link1.class, aug2).build(); Link link2 = new LinkBuilder().setLinkId(new LinkId("link 2")) .setDestination(new DestinationBuilder().setDestNode(new NodeId("node 3")) .setDestTp("dest tp").build()) .setSource(new SourceBuilder().setSourceNode(new NodeId("node 4")) .setSourceTp("src tp").build()) .setSupportingLink(supportingLinks).build(); links.add(link1); links.add(link2); Network1 network = new Network1Builder().setLink(links).build(); Optional.of(network); return network; } public static List getNodeIds() { List nodes = new ArrayList<>(); NodeId node = new NodeId("node 1"); NodeId node2 = new NodeId("node 1"); NodeId node3 = new NodeId("node 1"); NodeId node4 = new NodeId("node 1"); nodes.add(node); nodes.add(node2); nodes.add(node3); nodes.add(node4); return nodes; } public static Nodes getNodes(String nodeId, String mappingKey) { List cpList = new ArrayList<>(); CpToDegree cp1 = new CpToDegreeBuilder() .setCircuitPackName("circuit name") .setDegreeNumber(Long.valueOf(123)) .build(); CpToDegree cp2 = new CpToDegreeBuilder() .setCircuitPackName("circuit name") .setDegreeNumber(Long.valueOf(123)) .build(); cpList.add(cp1); cpList.add(cp2); List mappingList = new ArrayList<>(); Mapping map1 = new MappingBuilder() .setLogicalConnectionPoint("point") .setSupportingCircuitPackName("circuit name") .setSupportingOms("oms") .setSupportingOts("ots") .setSupportingPort("port") .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null")) .build(); mappingList.add(map1); Nodes nodes = new NodesBuilder() .setNodeId(nodeId) .setNodeType(NodeTypes.Xpdr) .setCpToDegree(cpList) .setMapping(mappingList) .build(); return nodes; } public static Nodes getNodes2(String nodeId, String mappingKey) { List cpList = new ArrayList<>(); CpToDegree cp1 = new CpToDegreeBuilder() .setCircuitPackName("circuit name") .setDegreeNumber(Long.valueOf(123)) .build(); CpToDegree cp2 = new CpToDegreeBuilder() .setCircuitPackName("circuit name") .setDegreeNumber(Long.valueOf(123)) .build(); cpList.add(cp1); cpList.add(cp2); List mappingList = new ArrayList<>(); Mapping map1 = new MappingBuilder() .setLogicalConnectionPoint("point") .setSupportingCircuitPackName("circuit name") .setSupportingOms("oms") .setSupportingOts("ots") .setSupportingPort("port") .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null")) .build(); mappingList.add(map1); Nodes nodes = new NodesBuilder() .setNodeId(nodeId) .setNodeType(null) .setCpToDegree(cpList) .setMapping(mappingList) .build(); return nodes; } public static Nodes getNodes3(String nodeId, String mappingKey) { List cpList = new ArrayList<>(); CpToDegree cp1 = new CpToDegreeBuilder() .setCircuitPackName("circuit name") .setDegreeNumber(Long.valueOf(123)) .build(); CpToDegree cp2 = new CpToDegreeBuilder() .setCircuitPackName("circuit name") .setDegreeNumber(Long.valueOf(123)) .build(); cpList.add(cp1); cpList.add(cp2); List mappingList = new ArrayList<>(); Mapping map1 = new MappingBuilder() .setLogicalConnectionPoint("point") .setSupportingCircuitPackName("circuit name") .setSupportingOms("oms") .setSupportingOts("ots") .setSupportingPort("port") .withKey(new MappingKey((mappingKey != null) ? mappingKey : "null")) .build(); mappingList.add(map1); Nodes nodes = new NodesBuilder() .setNodeId(nodeId) .setNodeType(NodeTypes.Rdm) .setCpToDegree(cpList) .setMapping(mappingList) .build(); return nodes; } public static void writeNodeTransaction(String nodeId, DataBroker dataBroker, String mappingKey) { InstanceIdentifier nodesIID = InstanceIdentifier.create(Network.class) .child(Nodes.class, new NodesKey(nodeId)); Nodes nodes = getNodes(nodeId, mappingKey); writeTransaction(dataBroker, nodesIID, nodes); } public static void writeNodeTransaction2(String nodeId, DataBroker dataBroker, String mappingKey) { InstanceIdentifier nodesIID = InstanceIdentifier.create(Network.class) .child(Nodes.class, new NodesKey(nodeId)); Nodes nodes = getNodes2(nodeId, mappingKey); writeTransaction(dataBroker, nodesIID, nodes); } public static void writeNodeTransaction3(String nodeId, DataBroker dataBroker, String mappingKey) { InstanceIdentifier nodesIID = InstanceIdentifier.create(Network.class) .child(Nodes.class, new NodesKey(nodeId)); Nodes nodes = getNodes3(nodeId, mappingKey); writeTransaction(dataBroker, nodesIID, nodes); } }