X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2Ftopology%2FTapiTopologyImpl.java;h=edfa562c0facea57fc96ce2621f0ebd5331719b5;hb=refs%2Fchanges%2F46%2F100646%2F27;hp=aa47df70207c82f6314ca2d6bbf00edc99e7a96d;hpb=32dca3cd3f1894f783980b982ea4aaf527a274e2;p=transportpce.git diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java index aa47df702..edfa562c0 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java @@ -10,6 +10,7 @@ package org.opendaylight.transportpce.tapi.topology; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.ListenableFuture; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -18,6 +19,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @@ -27,16 +29,18 @@ import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.InstanceIdentifiers; import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.tapi.TapiStringConstants; import org.opendaylight.transportpce.tapi.utils.TapiContext; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.MappingKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.NodesKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType; +import org.opendaylight.transportpce.tapi.utils.TapiLink; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.mapping.MappingKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node; @@ -104,7 +108,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.to import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; -import org.opendaylight.yangtools.yang.common.RpcError; +import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; @@ -116,28 +120,30 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService private final DataBroker dataBroker; private final TapiContext tapiContext; private final TopologyUtils topologyUtils; + private final TapiLink tapiLink; - public TapiTopologyImpl(DataBroker dataBroker, TapiContext tapiContext, TopologyUtils topologyUtils) { + public TapiTopologyImpl(DataBroker dataBroker, TapiContext tapiContext, TopologyUtils topologyUtils, + TapiLink tapiLink) { this.dataBroker = dataBroker; this.tapiContext = tapiContext; this.topologyUtils = topologyUtils; + this.tapiLink = tapiLink; } @Override public ListenableFuture> getNodeDetails(GetNodeDetailsInput input) { // TODO Auto-generated method stub // TODO -> maybe we get errors when having CEPs? - Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(input.getTopologyIdOrName().getBytes(Charset.forName("UTF-8"))) - .toString()); + Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName()); // Node id: if roadm -> ROADM+PHOTONIC_MEDIA. if xpdr -> XPDR-XPDR+DSR/OTSi - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(input.getNodeIdOrName().getBytes(Charset.forName("UTF-8"))) - .toString()); + Uuid nodeUuid = getUuidFromIput(input.getNodeIdOrName()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node = this.tapiContext .getTapiNode(topoUuid, nodeUuid); if (node == null) { LOG.error("Invalid TAPI node name"); - return RpcResultBuilder.failed().withError(RpcError.ErrorType.RPC, - "Invalid Tapi Node name").buildFuture(); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Invalid Tapi Node name") + .buildFuture(); } return RpcResultBuilder.success(new GetNodeDetailsOutputBuilder() .setNode(new org.opendaylight.yang.gen.v1.urn @@ -148,9 +154,9 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService @Override public ListenableFuture> getTopologyDetails(GetTopologyDetailsInput input) { // TODO -> Add check for Full T0 Multilayer - if (!TopologyUtils.T0_MULTILAYER.equals(input.getTopologyIdOrName()) - && !TopologyUtils.TPDR_100G.equals(input.getTopologyIdOrName())) { - if (TopologyUtils.T0_FULL_MULTILAYER.equals(input.getTopologyIdOrName())) { + if (!TapiStringConstants.T0_MULTILAYER.equals(input.getTopologyIdOrName()) + && !TapiStringConstants.TPDR_100G.equals(input.getTopologyIdOrName())) { + if (TapiStringConstants.T0_FULL_MULTILAYER.equals(input.getTopologyIdOrName())) { Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(input.getTopologyIdOrName() .getBytes(Charset.forName("UTF-8"))).toString()); Context context = this.tapiContext.getTapiContext(); @@ -160,7 +166,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService if (!(topologyMap != null && topologyMap.containsKey(new TopologyKey(topoUuid)))) { LOG.error("Topology {} not found in datastore", input.getTopologyIdOrName()); return RpcResultBuilder.failed() - .withError(RpcError.ErrorType.RPC, "Invalid Topology name").buildFuture(); + .withError(ErrorType.RPC, "Invalid Topology name") + .buildFuture(); } org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology topology = topologyMap.get(new TopologyKey(topoUuid)); @@ -171,12 +178,13 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService } LOG.error("Invalid TAPI topology name"); return RpcResultBuilder.failed() - .withError(RpcError.ErrorType.RPC, "Invalid Topology name").buildFuture(); + .withError(ErrorType.RPC, "Invalid Topology name") + .buildFuture(); } try { LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyIdOrName()); Topology topology = createAbstractedOtnTopology(); - if (TopologyUtils.TPDR_100G.equals(input.getTopologyIdOrName())) { + if (TapiStringConstants.TPDR_100G.equals(input.getTopologyIdOrName())) { topology = createAbstracted100GTpdrTopology(topology); } return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder().setTopology(topology).build()) @@ -184,7 +192,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService } catch (TapiTopologyException e) { LOG.error("error building TAPI topology"); return RpcResultBuilder.failed() - .withError(RpcError.ErrorType.RPC, "Error building topology").buildFuture(); + .withError(ErrorType.RPC, "Error building topology") + .buildFuture(); } } @@ -199,9 +208,10 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr"))).collect(Collectors.toList()); nep100GTpdrList.addAll(nepList); } - Name topoName = new NameBuilder().setValue(TopologyUtils.TPDR_100G).setValueName("TAPI Topology Name").build(); - Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TopologyUtils.TPDR_100G.getBytes(Charset.forName("UTF-8"))) - .toString()); + Name topoName = new NameBuilder().setValue(TapiStringConstants.TPDR_100G) + .setValueName("TAPI Topology Name").build(); + Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes( + TapiStringConstants.TPDR_100G.getBytes(Charset.forName("UTF-8"))).toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node = createTapiNode(nep100GTpdrList, topoUuid); return new TopologyBuilder() @@ -270,9 +280,9 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService tapiNodeList = new HashMap<>(); Map tapiLinkList = new HashMap<>(); - Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TopologyUtils.T0_MULTILAYER.getBytes(Charset.forName("UTF-8"))) - .toString()); - ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topoUuid); + Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER + .getBytes(Charset.forName("UTF-8"))).toString()); + ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topoUuid, this.tapiLink); Iterator>> it = networkPortMap.entrySet().iterator(); while (it.hasNext()) { String nodeId = it.next().getKey(); @@ -281,8 +291,8 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService tapiLinkList.putAll(tapiFactory.getTapiLinks()); } if (openroadmTopo.nonnullNode().values().stream().filter(nt -> - nt.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1.class) - .getNodeType().equals(OpenroadmNodeType.SRG)).count() > 0) { + nt.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class) + .getNodeType().equals(OpenroadmNodeType.SRG)).count() > 0) { tapiFactory.convertRoadmInfrastructure(); tapiNodeList.putAll(tapiFactory.getTapiNodes()); tapiLinkList.putAll(tapiFactory.getTapiLinks()); @@ -296,7 +306,10 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService tapiFactory.convertLinks(otnLinkMap); tapiLinkList.putAll(tapiFactory.getTapiLinks()); } - Name name = new NameBuilder().setValue(TopologyUtils.T0_MULTILAYER).setValueName("TAPI Topology Name").build(); + Name name = new NameBuilder() + .setValue(TapiStringConstants.T0_MULTILAYER) + .setValueName("TAPI Topology Name") + .build(); return new TopologyBuilder() .setName(Map.of(name.key(), name)) .setUuid(topoUuid) @@ -309,20 +322,18 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService GetNodeEdgePointDetailsInput input) { // TODO Auto-generated method stub // TODO -> maybe we get errors when having CEPs? - Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(input.getTopologyIdOrName().getBytes(Charset.forName("UTF-8"))) - .toString()); + Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName()); // Node id: if roadm -> ROADMid+PHOTONIC_MEDIA. if xpdr -> XPDRid-XPDRnbr+DSR/OTSi - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(input.getNodeIdOrName().getBytes(Charset.forName("UTF-8"))) - .toString()); + Uuid nodeUuid = getUuidFromIput(input.getNodeIdOrName()); // NEP id: if roadm -> ROADMid+PHOTONIC_MEDIA/MC/OTSiMC+TPid. // if xpdr -> XPDRid-XPDRnbr+DSR/eODU/iODU/iOTSi/eOTSi/PHOTONIC_MEDIA+TPid - Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(input.getEpIdOrName().getBytes(Charset.forName("UTF-8"))) - .toString()); + Uuid nepUuid = getUuidFromIput(input.getEpIdOrName()); OwnedNodeEdgePoint nep = this.tapiContext.getTapiNEP(topoUuid, nodeUuid, nepUuid); if (nep == null) { LOG.error("Invalid TAPI nep name"); - return RpcResultBuilder.failed().withError(RpcError.ErrorType.RPC, - "Invalid NEP name").buildFuture(); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Invalid NEP name") + .buildFuture(); } return RpcResultBuilder.success(new GetNodeEdgePointDetailsOutputBuilder() .setNodeEdgePoint(new NodeEdgePointBuilder(nep).build()).build()).buildFuture(); @@ -331,17 +342,16 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService @Override public ListenableFuture> getLinkDetails(GetLinkDetailsInput input) { // TODO Auto-generated method stub - Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(input.getTopologyIdOrName().getBytes(Charset.forName("UTF-8"))) - .toString()); + Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName()); // Link id: same as OR link id - Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes(input.getLinkIdOrName().getBytes(Charset.forName("UTF-8"))) - .toString()); + Uuid linkUuid = getUuidFromIput(input.getLinkIdOrName()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link link = this.tapiContext .getTapiLink(topoUuid, linkUuid); if (link == null) { LOG.error("Invalid TAPI link name"); - return RpcResultBuilder.failed().withError(RpcError.ErrorType.RPC, - "Invalid Link name").buildFuture(); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Invalid Link name") + .buildFuture(); } return RpcResultBuilder.success(new GetLinkDetailsOutputBuilder().setLink(new LinkBuilder(link).build()) .build()).buildFuture(); @@ -356,8 +366,9 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService topologyMap = this.tapiContext.getTopologyContext(); if (topologyMap.isEmpty()) { LOG.error("No topologies exist in tapi context"); - return RpcResultBuilder.failed().withError(RpcError.ErrorType.APPLICATION, - "No topologies exist in tapi context").buildFuture(); + return RpcResultBuilder.failed() + .withError(ErrorType.APPLICATION, "No topologies exist in tapi context") + .buildFuture(); } Map @@ -384,7 +395,7 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService return new NodeBuilder() .setUuid(nodeUuid) .setName(Map.of(name.key(), name)) - .setLayerProtocolName(List.of(LayerProtocolName.ETH)) + .setLayerProtocolName(Set.of(LayerProtocolName.ETH)) .setAdministrativeState(AdministrativeState.UNLOCKED) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) @@ -398,14 +409,14 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService String networkLcp; if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERCLIENT)) { networkLcp = tp.augmentation( - org.opendaylight.yang.gen.v1.http.transportpce.topology.rev210511.TerminationPoint1.class) + org.opendaylight.yang.gen.v1.http.transportpce.topology.rev220123.TerminationPoint1.class) .getAssociatedConnectionMapPort(); } else { networkLcp = tp.getTpId().getValue(); } @NonNull KeyedInstanceIdentifier pmIID = InstanceIdentifier.create( - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.Network.class) + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.Network.class) .child(Nodes.class, new NodesKey(nodeIdPortMap)).child(Mapping.class, new MappingKey(networkLcp)); @NonNull FluentFuture> mappingOpt = dataBroker.newReadOnlyTransaction().read( @@ -492,16 +503,18 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService @Override public ListenableFuture> getServiceInterfacePointDetails(GetServiceInterfacePointDetailsInput input) { - Uuid sipUuid = new Uuid(input.getSipIdOrName()); + Uuid sipUuid = getUuidFromIput(input.getSipIdOrName()); Map sips = this.tapiContext.getTapiContext().getServiceInterfacePoint(); if (sips == null || sips.isEmpty()) { - return RpcResultBuilder.failed().withError(RpcError.ErrorType.RPC, - "No sips in datastore").buildFuture(); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "No sips in datastore") + .buildFuture(); } if (!sips.containsKey(new ServiceInterfacePointKey(sipUuid))) { - return RpcResultBuilder.failed().withError(RpcError.ErrorType.RPC, - "Sip doesnt exist in datastore").buildFuture(); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Sip doesnt exist in datastore") + .buildFuture(); } org.opendaylight.yang.gen.v1.urn .onf.otcc.yang.tapi.common.rev181210.get.service._interface.point.details.output.Sip outSip = @@ -519,8 +532,9 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService Map sips = this.tapiContext.getTapiContext().getServiceInterfacePoint(); if (sips == null || sips.isEmpty()) { - return RpcResultBuilder.failed().withError(RpcError.ErrorType.RPC, - "No sips in datastore").buildFuture(); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "No sips in datastore") + .buildFuture(); } Map outSipMap = new HashMap<>(); for (ServiceInterfacePoint sip : sips.values()) { @@ -537,4 +551,15 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService // TODO --> not yet implemented return null; } + + private Uuid getUuidFromIput(String serviceIdOrName) { + try { + UUID.fromString(serviceIdOrName); + LOG.info("Given attribute {} is a UUID", serviceIdOrName); + return new Uuid(serviceIdOrName); + } catch (IllegalArgumentException e) { + LOG.info("Given attribute {} is not a UUID", serviceIdOrName); + return new Uuid(UUID.nameUUIDFromBytes(serviceIdOrName.getBytes(StandardCharsets.UTF_8)).toString()); + } + } }