X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2Fconnectivity%2FConnectivityUtils.java;h=8e803a65aa1ba945e8d41b1780cbfc0a3e283794;hb=4dde94b79766072a2381fa81db68d99fd0ae2915;hp=f4f12205753ce59726810fb103d9c68264ad1002;hpb=b0715d1ebf9280df4e39de69d4bc3bc3164267b6;p=transportpce.git diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java index f4f122057..8e803a65a 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java @@ -7,6 +7,8 @@ */ package org.opendaylight.transportpce.tapi.connectivity; +import java.math.BigDecimal; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; @@ -25,11 +27,11 @@ import org.opendaylight.transportpce.tapi.TapiStringConstants; import org.opendaylight.transportpce.tapi.utils.GenericServiceEndpoint; import org.opendaylight.transportpce.tapi.utils.ServiceEndpointType; import org.opendaylight.transportpce.tapi.utils.TapiContext; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.equipment.types.rev191129.OpticTypes; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType; @@ -63,52 +65,61 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdes import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.BandwidthProfileBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ProtectionRole; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ServiceType; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnection; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnectionBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnectionKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.end.point.ClientNodeEdgePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.end.point.ClientNodeEdgePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityService; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.Connection; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.CapacityBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.ServiceInterfacePointBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.ConnectivityConstraint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePointKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Context; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.TotalSizeBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ProtectionRole; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ServiceType; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnection; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.Connection; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectivityConstraint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectivityConstraintBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.CapacityBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.ServiceInterfacePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIERMC; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint64; @@ -125,9 +136,9 @@ public final class ConnectivityUtils { private final ServiceDataStoreOperations serviceDataStoreOperations; private final TapiContext tapiContext; private Map sipMap; - private final Map + private final Map< + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey, + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection> connectionFullMap; // this variable is for complete connection objects private final NetworkTransactionService networkTransactionService; private Connection topConnRdmRdm; @@ -249,26 +260,6 @@ public final class ConnectivityUtils { .build(); } - private static ServiceAEnd getServiceAEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) { - if (sepA.getType().equals(ServiceEndpointType.SERVICEAEND)) { - return new ServiceAEndBuilder(sepA.getValue()).build(); - } else if (sepZ.getType().equals(ServiceEndpointType.SERVICEAEND)) { - return new ServiceAEndBuilder(sepZ.getValue()).build(); - } else { - return null; - } - } - - private static ServiceZEnd getServiceZEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) { - if (sepA.getType().equals(ServiceEndpointType.SERVICEZEND)) { - return new ServiceZEndBuilder(sepA.getValue()).build(); - } else if (sepZ.getType().equals(ServiceEndpointType.SERVICEZEND)) { - return new ServiceZEndBuilder(sepZ.getValue()).build(); - } else { - return null; - } - } - public void setSipMap(Map sips) { this.sipMap = sips; } @@ -301,7 +292,10 @@ public final class ConnectivityUtils { .build(); // Connection creation Map connMap = - createConnectionsFromService(serviceAEnd, serviceZEnd, pathDescription); + createConnectionsFromService(pathDescription, mapServiceLayerToAend(serviceAEnd)); + LOG.debug("connectionMap for service {} = {} ", name.toString(), connMap.toString()); + ConnectivityConstraint conConstr = + new ConnectivityConstraintBuilder().setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build(); // TODO: full connectivity service?? With constraints and the rest of fields... return new ConnectivityServiceBuilder() .setAdministrativeState(AdministrativeState.UNLOCKED) @@ -309,55 +303,17 @@ public final class ConnectivityUtils { .setLifecycleState(LifecycleState.INSTALLED) .setUuid(new Uuid(UUID.nameUUIDFromBytes(service.getServiceName().getBytes(StandardCharsets.UTF_8)) .toString())) - .setServiceLayer(mapServiceLayer(serviceAEnd.getServiceFormat(), endPoint1, endPoint2)) - .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY) - .setConnectivityDirection(ForwardingDirection.BIDIRECTIONAL) + .setLayerProtocolName(mapServiceLayer(serviceAEnd.getServiceFormat(), endPoint1, endPoint2)) + .setConnectivityConstraint(conConstr) + .setDirection(ForwardingDirection.BIDIRECTIONAL) .setName(Map.of(name.key(), name)) .setConnection(connMap) .setEndPoint(endPointMap) .build(); } - private LayerProtocolName mapServiceLayer(ServiceFormat serviceFormat, EndPoint endPoint1, EndPoint endPoint2) { - switch (serviceFormat) { - case OC: - case OTU: - return LayerProtocolName.PHOTONICMEDIA; - case ODU: - return LayerProtocolName.ODU; - case Ethernet: - String node1 = endPoint1.getLocalId(); - String node2 = endPoint2.getLocalId(); - if (getOpenroadmType(node1).equals(OpenroadmNodeType.TPDR) - && getOpenroadmType(node2).equals(OpenroadmNodeType.TPDR)) { - return LayerProtocolName.ETH; - } - return LayerProtocolName.DSR; - default: - LOG.info("Service layer mapping not supported for {}", serviceFormat.getName()); - } - return null; - } - - private OpenroadmNodeType getOpenroadmType(String nodeName) { - LOG.info("Node name = {}", nodeName); - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",nodeName, TapiStringConstants.DSR)) - .getBytes(StandardCharsets.UTF_8)).toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node tapiNode - = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); - if (tapiNode != null) { - return OpenroadmNodeType.forName(tapiNode.getName().get(new NameKey("Node Type")) - .getValue()); - } - return null; - } - - private Map createConnectionsFromService( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEnd - serviceAEnd, - org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceZEnd - serviceZEnd, - PathDescription pathDescription) { + public Map createConnectionsFromService(PathDescription pathDescription, + LayerProtocolName lpn) { Map connectionServMap = new HashMap<>(); // build lists with ROADM nodes, XPDR/MUX/SWITCH nodes, ROADM DEG TTPs, ROADM SRG TTPs, XPDR CLIENT TTPs // and XPDR NETWORK TTPs (if any). From the path description. This will help to build the uuid of the CEPs @@ -444,15 +400,14 @@ public final class ConnectivityUtils { } // create corresponding CEPs and Connections. Connections should be added to the corresponding context // CEPs must be included in the topology context as an augmentation for each ONEP!! - ServiceFormat serviceFormat = serviceAEnd.getServiceFormat(); // should be equal to serviceZEnd // TODO -> Maybe we dont need to create the connections and ceps if the previous service doesnt exist?? // As mentioned above, for 100GbE service creation there are ROADMs in the path description. // What are the configurations needed here? No OTU, ODU... what kind of cross connections is needed? // this needs to be changed // TODO: OpenROADM getNodeType from the NamesList to verify what needs to be created OpenroadmNodeType openroadmNodeType = getOpenRoadmNodeType(xpdrNodelist); - switch (serviceFormat) { - case OC: + switch (lpn) { + case PHOTONICMEDIA: // Identify number of ROADMs // - XC Connection between MC CEPs mapped from MC NEPs (within a roadm) // - XC Connection between OTSiMC CEPs mapped from OTSiMC NEPs (within a roadm) @@ -460,18 +415,12 @@ public final class ConnectivityUtils { // - Top Connection OTSiMC betwwen OTSiMC CEPs of extreme roadms connectionServMap.putAll(createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist, edgeRoadm1, edgeRoadm2)); - break; - case OTU: - // Identify number of ROADMs between XPDRs and check if OC is created - // - XC Connection between MC CEPs mapped from MC NEPs (within a roadm) - // - Top Connection MC betwwen MC CEPs of different roadms - // - XC Connection between OTSiMC CEPs mapped from OTSiMC NEPs (within a roadm) - // - Top Connection OTSiMC betwwen OTSiMC CEPs of different roadms - connectionServMap.putAll(createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist, - edgeRoadm1, edgeRoadm2)); - // - XC Connection OTSi betwwen iOTSi y eOTSi of xpdr - // - Top connection OTSi between network ports of xpdrs in the Photonic media layer -> i_OTSi - connectionServMap.putAll(createXpdrCepsAndConnectionsPht(xpdrNetworkTplist, xpdrNodelist)); + if (!pathDescription.getAToZDirection().getAToZ().values().stream().findFirst().orElseThrow().getId() + .contains("ROADM")) { + // - XC Connection OTSi betwwen iOTSi y eOTSi of xpdr + // - Top connection OTSi between network ports of xpdrs in the Photonic media layer -> i_OTSi + connectionServMap.putAll(createXpdrCepsAndConnectionsPht(xpdrNetworkTplist, xpdrNodelist)); + } this.topConnRdmRdm = null; break; case ODU: @@ -483,7 +432,7 @@ public final class ConnectivityUtils { this.topConnXpdrXpdrPhtn = null; } break; - case Ethernet: + case ETH: // Check if OC, OTU and ODU are created if (openroadmNodeType.equals(OpenroadmNodeType.TPDR)) { LOG.info("WDM ETH service"); @@ -497,9 +446,15 @@ public final class ConnectivityUtils { connectionServMap)); this.topConnXpdrXpdrPhtn = null; } + break; + case DSR: + LOG.info("OTN XGE/ODUe service"); + // - XC connection between iODU and eODU + // - Top connection between eODU ports + // - Top connection between DSR ports if (openroadmNodeType.equals(OpenroadmNodeType.SWITCH)) { // TODO: We create both ODU and DSR because there is no ODU service creation for the switch - // - XC Connection OTSi betwwen iODU and eODU of xpdr + // - XC Connection OTSi between iODU and eODU of xpdr // - Top connection in the ODU layer, between xpdr eODU ports (?) connectionServMap.putAll(createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist, xpdrNodelist)); @@ -515,9 +470,192 @@ public final class ConnectivityUtils { default: LOG.error("Service type format not supported"); } + LOG.debug("CONNSERVERMAP = {}", connectionServMap.toString()); return connectionServMap; } + public void updateTopologyWithNep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, OwnedNodeEdgePoint onep) { + // TODO: verify this is correct. Should we identify the context IID with the context UUID?? + InstanceIdentifier onepIID = InstanceIdentifier.builder(Context.class) + .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class) + .child(Topology.class, new TopologyKey(topoUuid)) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class, + new NodeKey(nodeUuid)) + .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) + .build(); + try { + Optional optionalOnep = this.networkTransactionService.read( + LogicalDatastoreType.OPERATIONAL, onepIID).get(); + if (optionalOnep.isPresent()) { + LOG.error("ONEP is already present in datastore"); + return; + } + // merge in datastore + this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, + onep); + this.networkTransactionService.commit().get(); + LOG.info("NEP {} added successfully.", onep.getName().toString()); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Couldnt put NEP {} in topology, error = ", onep.getName().toString(), e); + } + } + + public Map getConnectionFullMap() { + return this.connectionFullMap; + } + + public ServiceCreateInput createORServiceInput(CreateConnectivityServiceInput input, Uuid serviceUuid) { + // TODO: not taking into account all the constraints. Only using EndPoints and Connectivity Constraint. + Map + endPointMap = input.getEndPoint(); + ConnectionType connType = null; + ServiceFormat serviceFormat = null; + String nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), + TapiStringConstants.XPDR); + String nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow().getLocalId(), + TapiStringConstants.XPDR); + LOG.info("NodeAid = {}", nodeAid); + LOG.info("NodeZid = {}", nodeZid); + //switch (constraint.getServiceLayer().getIntValue()) { + switch (input.getLayerProtocolName().getIntValue()) { + case 0: + LOG.info("ODU"); + connType = ConnectionType.Infrastructure; + serviceFormat = ServiceFormat.ODU; + break; + case 1: + LOG.info("ETH, no need to create OTU and ODU"); + connType = ConnectionType.Service; + serviceFormat = ServiceFormat.Ethernet; + break; + case 2: + LOG.info("DSR, need to create OTU and ODU"); + connType = ConnectionType.Service; + serviceFormat = ServiceFormat.Ethernet; + break; + case 3: + LOG.info("PHOTONIC"); + connType = getConnectionTypePhtnc(endPointMap.values()); + serviceFormat = getServiceFormatPhtnc(endPointMap.values()); + LOG.debug("Node a photonic = {}", nodeAid); + LOG.debug("Node z photonic = {}", nodeZid); + break; + default: + LOG.info("Service type {} not supported", input.getLayerProtocolName().getName()); + } + // Requested Capacity for connectivity service + Uint64 capacity = Uint64.valueOf(Math.abs( + input.getConnectivityConstraint().getRequestedCapacity().getTotalSize().getValue().intValue())); + // map endpoints into service end points. Map the type of service from TAPI to OR + ServiceAEnd serviceAEnd = tapiEndPointToServiceAPoint(endPointMap.values().stream().findFirst().orElseThrow(), + serviceFormat, nodeAid, capacity, input.getLayerProtocolName()); + ServiceZEnd serviceZEnd = tapiEndPointToServiceZPoint(endPointMap.values().stream().skip(1).findFirst() + .orElseThrow(), serviceFormat, nodeZid, capacity, input.getLayerProtocolName()); + if (serviceAEnd == null || serviceZEnd == null) { + LOG.error("Couldnt map endpoints to service end"); + return null; + } + LOG.info("Service a end = {}", serviceAEnd); + LOG.info("Service z end = {}", serviceZEnd); + return new ServiceCreateInputBuilder() + .setServiceAEnd(serviceAEnd) + .setServiceZEnd(serviceZEnd) + .setConnectionType(connType) + .setServiceName(serviceUuid.getValue()) + .setCommonId("common id") + .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request-1") + .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url") + .setRequestSystemId("appname") + .build()) + .setCustomer("customer") + .setDueDate(DateAndTime.getDefaultInstance("2018-06-15T00:00:01Z")) + .setOperatorContact("pw1234") + .build(); + } + + private static ServiceAEnd getServiceAEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) { + if (sepA.getType().equals(ServiceEndpointType.SERVICEAEND)) { + return new ServiceAEndBuilder(sepA.getValue()).build(); + } + if (sepZ.getType().equals(ServiceEndpointType.SERVICEAEND)) { + return new ServiceAEndBuilder(sepZ.getValue()).build(); + } + return null; + } + + private static ServiceZEnd getServiceZEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) { + if (sepA.getType().equals(ServiceEndpointType.SERVICEZEND)) { + return new ServiceZEndBuilder(sepA.getValue()).build(); + } + if (sepZ.getType().equals(ServiceEndpointType.SERVICEZEND)) { + return new ServiceZEndBuilder(sepZ.getValue()).build(); + } + return null; + } + + private LayerProtocolName mapServiceLayerToAend( + org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEnd + serviceAEnd) { + ServiceFormat serviceFormat = serviceAEnd.getServiceFormat(); + switch (serviceFormat) { + case OC: + case OTU: + return LayerProtocolName.PHOTONICMEDIA; + case ODU: + return LayerProtocolName.ODU; + case Ethernet: + if (getOpenroadmType(serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort() + .getPortDeviceName()).equals(OpenroadmNodeType.TPDR)) { + return LayerProtocolName.ETH; + } + return LayerProtocolName.DSR; + default: + LOG.info("Service layer mapping not supported for {}", serviceFormat.getName()); + } + return null; + } + + private LayerProtocolName mapServiceLayer(ServiceFormat serviceFormat, EndPoint endPoint1, EndPoint endPoint2) { + switch (serviceFormat) { + case OC: + case OTU: + return LayerProtocolName.PHOTONICMEDIA; + case ODU: + return LayerProtocolName.ODU; + case Ethernet: + String node1 = endPoint1.getLocalId(); + String node2 = endPoint2.getLocalId(); + if (getOpenroadmType(node1).equals(OpenroadmNodeType.TPDR) + && getOpenroadmType(node2).equals(OpenroadmNodeType.TPDR)) { + return LayerProtocolName.ETH; + } + return LayerProtocolName.DSR; + default: + LOG.info("Service layer mapping not supported for {}", serviceFormat.getName()); + } + return null; + } + + private OpenroadmNodeType getOpenroadmType(String nodeName) { + LOG.info("Node name = {}", nodeName); + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",nodeName, TapiStringConstants.XPDR)) + .getBytes(StandardCharsets.UTF_8)).toString()); + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node tapiNode + = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); + if (tapiNode != null) { + return OpenroadmNodeType.forName(tapiNode.getName().get(new NameKey("Node Type")) + .getValue()); + } + return null; + } + private Map createXpdrCepsAndConnectionsEth(List xpdrClientTplist, List xpdrNodelist, Map lowerConn) { @@ -529,7 +667,7 @@ public final class ConnectivityUtils { xcMap.put(conn.key(), conn); } Map connServMap = new HashMap<>(); - Map cepMapDsr = new HashMap<>(); // Create 1 cep per Xpdr in the CLIENT // 1 top connection DSR between the CLIENT xpdrs @@ -537,9 +675,10 @@ public final class ConnectivityUtils { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, + TapiStringConstants.XPDR, netCep1); cepMapDsr.put(netCep1.key(), netCep1); } @@ -549,7 +688,7 @@ public final class ConnectivityUtils { .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow(); // DSR top connection between edge xpdr CLIENT DSR - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connectionDsr = createTopConnection(spcXpdr1, spcXpdr2, cepMapDsr, TapiStringConstants.DSR, LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn); this.connectionFullMap.put(connectionDsr.key(), connectionDsr); @@ -565,9 +704,9 @@ public final class ConnectivityUtils { List xpdrNetworkTplist, List xpdrNodelist) { Map connServMap = new HashMap<>(); - Map cepMapDsr = new HashMap<>(); - Map cepMapOdu = new HashMap<>(); // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will // be added to the lower connection of a top connection @@ -579,23 +718,24 @@ public final class ConnectivityUtils { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, - LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + ConnectionEndPoint clientCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.DSR); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, + clientCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.DSR, - netCep2); + ConnectionEndPoint clientCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.XPDR, + clientCep2); String spcXpdrNetwork = getAssociatedNetworkPort(spcXpdrClient, xpdrNetworkTplist); ConnectionEndPoint netCep3 = getAssociatediODUCep(spcXpdrNetwork); - cepMapDsr.put(netCep1.key(), netCep1); - cepMapOdu.put(netCep2.key(), netCep2); + cepMapDsr.put(clientCep1.key(), clientCep1); + cepMapOdu.put(clientCep2.key(), clientCep2); // Create x connection between I_ODU and E_ODU within xpdr - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrClient, spcXpdrNetwork, + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection + connection = createXCBetweenCeps(clientCep2, netCep3, spcXpdrClient, spcXpdrNetwork, TapiStringConstants.ODU, LayerProtocolName.ODU); this.connectionFullMap.put(connection.key(), connection); @@ -610,7 +750,7 @@ public final class ConnectivityUtils { String spcXpdr2 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connectionOdu = createTopConnection(spcXpdr1, spcXpdr2, cepMapOdu, TapiStringConstants.E_ODU, LayerProtocolName.ODU, xcMap, this.topConnXpdrXpdrOdu); this.connectionFullMap.put(connectionOdu.key(), connectionOdu); @@ -621,7 +761,7 @@ public final class ConnectivityUtils { LowerConnection lowerConn = new LowerConnectionBuilder().setConnectionUuid(connectionOdu.getUuid()).build(); xcMap.put(lowerConn.key(), lowerConn); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connectionDsr = createTopConnection(spcXpdr1, spcXpdr2, cepMapDsr, TapiStringConstants.DSR, LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn); this.connectionFullMap.put(connectionDsr.key(), connectionDsr); @@ -636,7 +776,7 @@ public final class ConnectivityUtils { private Map createXpdrCepsAndConnectionsOdu(List xpdrNetworkTplist, List xpdrNodelist) { Map connServMap = new HashMap<>(); - Map cepMap = new HashMap<>(); // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will // be added to the lower connection of a top connection @@ -649,8 +789,8 @@ public final class ConnectivityUtils { String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.XPDR, netCep1); cepMap.put(netCep1.key(), netCep1); @@ -661,7 +801,7 @@ public final class ConnectivityUtils { .get(0))).findFirst().orElseThrow(); String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_ODU, LayerProtocolName.ODU, xcMap, this.topConnXpdrXpdrPhtn); this.connectionFullMap.put(connection.key(), connection); @@ -676,59 +816,50 @@ public final class ConnectivityUtils { private Map createXpdrCepsAndConnectionsPht(List xpdrNetworkTplist, List xpdrNodelist) { - Map connServMap = new HashMap<>(); - Map cepMap = new HashMap<>(); + // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will // be added to the lower connection of a top connection - Map xcMap = new HashMap<>(); - + Map cepMap = new HashMap<>(); // create ceps and x connections within xpdr for (String xpdr:xpdrNodelist) { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); // There should be 1 network tp per xpdr - // TODO photonic media model should be updated to have the corresponding CEPs. I will just create - // 3 different MC CEPs giving different IDs to show that they are different - // Create 3 CEPs for each xpdr otsi node and the corresponding cross connection matchin the NEPs - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.OTSI, - netCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.E_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.E_OTSI, TapiStringConstants.OTSI, + // Just create 2 different CEPs (1 OTS + 1 OTSI_MC) + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, netCep1); + ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.OTSI_MC, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.OTSI_MC, TapiStringConstants.XPDR, netCep2); - ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, - netCep3); +// ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, +// TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); +// putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, +// netCep3); + cepMap.put(netCep1.key(), netCep1); cepMap.put(netCep2.key(), netCep2); - cepMap.put(netCep3.key(), netCep3); +// cepMap.put(netCep3.key(), netCep3); - // Create x connection between I_OTSi and E_OTSi within xpdr - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrNetwork, spcXpdrNetwork, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - this.connectionFullMap.put(connection.key(), connection); - - // Create X connection that will be added to the service object - LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); - xcMap.put(conn.key(), conn); } - // OTSi top connection between edge I_OTSI Xpdr + + // OTSi top connection between edge OTSI_MC Xpdr + Map xcMap = new HashMap<>(); String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(0))).findFirst().orElseThrow(); String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection - connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_OTSI, + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection + connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA, xcMap, this.topConnRdmRdm); this.connectionFullMap.put(connection.key(), connection); - // OTSi top connection that will be added to the service object + // OTSi top connection that will be added to the service object + Map connServMap = new HashMap<>(); Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); connServMap.put(conn.key(), conn); this.topConnXpdrXpdrPhtn = conn; @@ -741,7 +872,7 @@ public final class ConnectivityUtils { List rdmNodelist, String edgeRoadm1, String edgeRoadm2) { // TODO: will need to check if things exist already or not - Map cepMap = new HashMap<>(); // create ceps and x connections within roadm Map xcLowerMap = new HashMap<>(); @@ -758,8 +889,8 @@ public final class ConnectivityUtils { // Create 3 CEPs for each AD and DEG and the corresponding cross connections, matching the NEPs // created in the topology creation // add CEPs to the topology to the corresponding ONEP - ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA, adCep1); + ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS, adCep1); ConnectionEndPoint adCep2 = createCepRoadm(spcRdmAD, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.MC, adCep2); ConnectionEndPoint adCep3 = createCepRoadm(spcRdmAD, TapiStringConstants.OTSI_MC); @@ -771,12 +902,15 @@ public final class ConnectivityUtils { String spcRdmDEG = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree port of ROADm {} = {}", roadm, spcRdmDEG); - ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA, degCep1); + ConnectionEndPoint degCep0 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS, degCep0); + ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS, degCep1); ConnectionEndPoint degCep2 = createCepRoadm(spcRdmDEG, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.MC, degCep2); ConnectionEndPoint degCep3 = createCepRoadm(spcRdmDEG, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.OTSI_MC, degCep3); + cepMap.put(degCep0.key(), degCep0); cepMap.put(degCep1.key(), degCep1); cepMap.put(degCep2.key(), degCep2); cepMap.put(degCep3.key(), degCep3); @@ -784,12 +918,12 @@ public final class ConnectivityUtils { LOG.info("Going to create cross connections for ROADM {}", roadm); // Create X connections between MC and OTSi_MC for full map org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection1 + .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connection1 = createXCBetweenCeps(adCep2, degCep2, spcRdmAD, spcRdmDEG, TapiStringConstants.MC, LayerProtocolName.PHOTONICMEDIA); LOG.info("Cross connection 1 created = {}", connection1.toString()); org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection2 + .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connection2 = createXCBetweenCeps(adCep3, degCep3, spcRdmAD, spcRdmDEG, TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA); LOG.info("Cross connection 2 created = {}", connection2.toString()); @@ -807,12 +941,15 @@ public final class ConnectivityUtils { String spcRdmDEG1 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree 1 port of ROADm {} = {}", roadm, spcRdmDEG1); - ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA, deg1Cep1); + ConnectionEndPoint deg1Cep0 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS, deg1Cep0); + ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS, deg1Cep1); ConnectionEndPoint deg1Cep2 = createCepRoadm(spcRdmDEG1, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.MC, deg1Cep2); ConnectionEndPoint deg1Cep3 = createCepRoadm(spcRdmDEG1, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.OTSI_MC, deg1Cep3); + cepMap.put(deg1Cep0.key(), deg1Cep0); cepMap.put(deg1Cep1.key(), deg1Cep1); cepMap.put(deg1Cep2.key(), deg1Cep2); cepMap.put(deg1Cep3.key(), deg1Cep3); @@ -821,12 +958,15 @@ public final class ConnectivityUtils { .orElseThrow(); LOG.info("Degree 2 port of ROADm {} = {}", roadm, spcRdmDEG2); - ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA, deg2Cep1); + ConnectionEndPoint deg2Cep0 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS, deg2Cep0); + ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS, deg2Cep1); ConnectionEndPoint deg2Cep2 = createCepRoadm(spcRdmDEG2, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.MC, deg2Cep2); ConnectionEndPoint deg2Cep3 = createCepRoadm(spcRdmDEG2, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.OTSI_MC, deg2Cep3); + cepMap.put(deg2Cep0.key(), deg2Cep0); cepMap.put(deg2Cep1.key(), deg2Cep1); cepMap.put(deg2Cep2.key(), deg2Cep2); cepMap.put(deg2Cep3.key(), deg2Cep3); @@ -834,12 +974,12 @@ public final class ConnectivityUtils { LOG.info("Going to create cross connections for ROADM {}", roadm); // Create X connections between MC and OTSi_MC for full map org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection1 + .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connection1 = createXCBetweenCeps(deg1Cep2, deg2Cep2, spcRdmDEG1, spcRdmDEG2, TapiStringConstants.MC, LayerProtocolName.PHOTONICMEDIA); LOG.info("Cross connection 1 created = {}", connection1.toString()); org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection2 + .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connection2 = createXCBetweenCeps(deg1Cep3, deg2Cep3, spcRdmDEG1, spcRdmDEG2, TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA); LOG.info("Cross connection 2 created = {}", connection2.toString()); @@ -859,7 +999,7 @@ public final class ConnectivityUtils { String spcRdmAD2 = rdmAddDropTplist.stream().filter(adp -> adp.contains(edgeRoadm2)).findFirst().orElseThrow(); // MC top connection between edge roadms LOG.info("Going to created top connection between MC"); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connection = createTopConnection(spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.MC, LayerProtocolName.PHOTONICMEDIA, xcLowerMap, null); this.connectionFullMap.put(connection.key(), connection); @@ -875,7 +1015,7 @@ public final class ConnectivityUtils { // OTSiMC top connection between edge roadms LOG.info("Going to created top connection between OTSiMC"); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection connection1 = createTopConnection(spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA, topLowerMap, null); this.connectionFullMap.put(connection1.key(), connection1); @@ -888,54 +1028,48 @@ public final class ConnectivityUtils { return connServMap; } - private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection createTopConnection(String tp1, String tp2, Map cepMap, String qual, LayerProtocolName topPortocol, Map xcMap, Connection additionalLowerConn) { // find cep for each AD MC of roadm 1 and 2 LOG.info("Top connection name = {}", String.join("+", "TOP", tp1, tp2, qual)); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ConnectionEndPoint adCep1 = + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ConnectionEndPoint adCep1 = cepMap.get(new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey( + .onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPointKey( new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", tp1.split("\\+")[0], qual, tp1.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString()))); LOG.info("ADCEP1 = {}", adCep1); org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cep1 = + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep1 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(adCep1.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep1.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep1.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ConnectionEndPoint adCep2 = + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ConnectionEndPoint adCep2 = cepMap.get(new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey( + .onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPointKey( new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", tp2.split("\\+")[0], qual, tp2.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString()))); LOG.info("ADCEP2 = {}", adCep2); org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cep2 = + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep2 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(adCep2.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep2.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep2.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); Map ceps = new HashMap<>(); + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint> ceps = new HashMap<>(); ceps.put(cep1.key(), cep1); ceps.put(cep2.key(), cep2); Name connName = new NameBuilder() @@ -948,7 +1082,7 @@ public final class ConnectivityUtils { new LowerConnectionBuilder().setConnectionUuid(additionalLowerConn.getConnectionUuid()).build()); } return new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder() + .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionBuilder() .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "TOP", tp1, tp2, qual)) .getBytes(StandardCharsets.UTF_8)).toString())) .setName(Map.of(connName.key(), connName)) @@ -961,39 +1095,33 @@ public final class ConnectivityUtils { .build(); } - private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection + private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection createXCBetweenCeps(ConnectionEndPoint cep1, ConnectionEndPoint cep2, String tp1, String tp2, String qual, LayerProtocolName xcProtocol) { LOG.info("Creation cross connection between: {} and {}", tp1, tp2); LOG.info("Cross connection name = {}", String.join("+", "XC", tp1, tp2, qual)); - LOG.info("CEP1 = {}", cep1.getClientNodeEdgePoint()); - LOG.info("CEP2 = {}", cep2.getClientNodeEdgePoint()); + LOG.debug("Parent NEP of CEP1 = {}", cep1.getParentNodeEdgePoint().toString()); + LOG.debug("Parent NEP CEP2 = {}", cep2.getParentNodeEdgePoint().toString()); org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cepServ1 = + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cepServ1 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(cep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(cep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(cep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) - .setConnectionEndPointUuid(cep1.getUuid()) - .build(); + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(cep1.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(cep1.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(cep1.getParentNodeEdgePoint().getTopologyUuid()) + .setConnectionEndPointUuid(cep1.getUuid()) + .build(); org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cepServ2 = + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cepServ2 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(cep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(cep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(cep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) - .setConnectionEndPointUuid(cep2.getUuid()) - .build(); + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(cep2.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(cep2.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(cep2.getParentNodeEdgePoint().getTopologyUuid()) + .setConnectionEndPointUuid(cep2.getUuid()) + .build(); Map ceps = new HashMap<>(); + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint> ceps = new HashMap<>(); ceps.put(cepServ1.key(), cepServ1); ceps.put(cepServ2.key(), cepServ2); Name connName = new NameBuilder() @@ -1002,7 +1130,7 @@ public final class ConnectivityUtils { .build(); // TODO: lower connection, supported link....... return new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder() + .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionBuilder() .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "XC", tp1, tp2, qual)) .getBytes(StandardCharsets.UTF_8)).toString())) .setName(Map.of(connName.key(), connName)) @@ -1021,12 +1149,45 @@ public final class ConnectivityUtils { .setValue(String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])) .build(); - ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder() .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], - qualifier)).getBytes(StandardCharsets.UTF_8)) + TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(StandardCharsets.UTF_8)).toString())) + .build(); + String clientQualifier = ""; + switch (qualifier) { + case TapiStringConstants.PHTNC_MEDIA_OTS: + clientQualifier = TapiStringConstants.PHTNC_MEDIA_OMS; + break; + case TapiStringConstants.PHTNC_MEDIA_OMS: + clientQualifier = TapiStringConstants.MC; + OwnedNodeEdgePoint onepMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1], + false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier); + putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1], TapiStringConstants.MC, onepMC); + break; + case TapiStringConstants.MC: + clientQualifier = TapiStringConstants.OTSI_MC; + OwnedNodeEdgePoint onepOTSiMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1], + false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier); + putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1], + TapiStringConstants.OTSI_MC, onepOTSiMC); + break; + default: + LOG.debug("not currently handling client NEP for OTSiMC CEP {}", + String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])); + break; + } + ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], + clientQualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], + TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)) .toString())) .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(StandardCharsets.UTF_8)).toString())) @@ -1037,13 +1198,16 @@ public final class ConnectivityUtils { .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) - .setClientNodeEdgePoint(Map.of(cnep.key(), cnep)) + .setParentNodeEdgePoint(pnep) .setName(Map.of(cepName.key(), cepName)) .setConnectionPortRole(PortRole.SYMMETRIC) - .setConnectionPortDirection(PortDirection.BIDIRECTIONAL) + .setDirection(Direction.BIDIRECTIONAL) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA); + if (!(TapiStringConstants.OTSI_MC.equals(qualifier))) { + cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)); + } return cepBldr.build(); } @@ -1054,12 +1218,41 @@ public final class ConnectivityUtils { .setValue(String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])) .build(); - ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder() .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], - nodeLayer)).getBytes(StandardCharsets.UTF_8)) + TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(StandardCharsets.UTF_8)).toString())) + .build(); + String clientQualifier = ""; + String clientNodeLayer = TapiStringConstants.PHTNC_MEDIA; + switch (qualifier) { + case TapiStringConstants.PHTNC_MEDIA_OTS: + clientQualifier = TapiStringConstants.OTSI_MC; + break; + case TapiStringConstants.OTSI_MC: + clientQualifier = TapiStringConstants.E_ODU; + clientNodeLayer = TapiStringConstants.ODU; + break; + case TapiStringConstants.E_ODU: + clientQualifier = TapiStringConstants.DSR; + clientNodeLayer = TapiStringConstants.DSR; + break; + default : + LOG.debug("no client CEP for DSR NEP {}", + String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])); + break; + } + ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], + clientQualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], + TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8)) .toString())) .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(StandardCharsets.UTF_8)).toString())) @@ -1070,13 +1263,16 @@ public final class ConnectivityUtils { .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) - .setClientNodeEdgePoint(Map.of(cnep.key(), cnep)) + .setParentNodeEdgePoint(pnep) .setName(Map.of(cepName.key(), cepName)) .setConnectionPortRole(PortRole.SYMMETRIC) - .setConnectionPortDirection(PortDirection.BIDIRECTIONAL) + .setDirection(Direction.BIDIRECTIONAL) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) .setLayerProtocolName(cepProtocol); + if (!(TapiStringConstants.DSR.equals(qualifier))) { + cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)); + } return cepBldr.build(); } @@ -1106,8 +1302,8 @@ public final class ConnectivityUtils { default: LOG.error("Service Format not supported"); } - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name name = - new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder() + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name name = + new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameBuilder() .setValueName("OpenROADM info") .setValue(String.join("-", serviceZEnd.getClli(), serviceZEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort() @@ -1120,16 +1316,16 @@ public final class ConnectivityUtils { .build()) .setName(Map.of(name.key(), name)) .setAdministrativeState(AdministrativeState.UNLOCKED) - .setDirection(PortDirection.BIDIRECTIONAL) + .setDirection(Direction.BIDIRECTIONAL) .setLifecycleState(LifecycleState.INSTALLED) .setOperationalState(OperationalState.ENABLED) .setLayerProtocolName(layerProtocols) .setCapacity(new CapacityBuilder() .setTotalSize(new TotalSizeBuilder() - .setValue(Uint64.valueOf(serviceZEnd.getServiceRate())) - .setUnit(CapacityUnit.GBPS) + .setValue(Decimal64.valueOf(BigDecimal.valueOf(serviceZEnd.getServiceRate().doubleValue()))) + .setUnit(CAPACITYUNITGBPS.VALUE) .build()) - .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile +// .setBandwidthProfile(new BandwidthProfileBuilder().build()) .build()) .setProtectionRole(ProtectionRole.WORK) .setRole(PortRole.SYMMETRIC) @@ -1164,8 +1360,8 @@ public final class ConnectivityUtils { default: LOG.error("Service Format not supported"); } - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name name = - new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder() + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name name = + new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameBuilder() .setValueName("OpenROADM info") .setValue(String.join("-", serviceAEnd.getClli(), serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort() @@ -1178,16 +1374,16 @@ public final class ConnectivityUtils { .build()) .setName(Map.of(name.key(), name)) .setAdministrativeState(AdministrativeState.UNLOCKED) - .setDirection(PortDirection.BIDIRECTIONAL) + .setDirection(Direction.BIDIRECTIONAL) .setLifecycleState(LifecycleState.INSTALLED) .setOperationalState(OperationalState.ENABLED) .setLayerProtocolName(layerProtocols) .setCapacity(new CapacityBuilder() .setTotalSize(new TotalSizeBuilder() - .setValue(Uint64.valueOf(serviceAEnd.getServiceRate())) - .setUnit(CapacityUnit.GBPS) + .setValue(Decimal64.valueOf(BigDecimal.valueOf(serviceAEnd.getServiceRate().doubleValue()))) + .setUnit(CAPACITYUNITGBPS.VALUE) .build()) - .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile +// .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile .build()) .setProtectionRole(ProtectionRole.WORK) .setRole(PortRole.SYMMETRIC) @@ -1210,7 +1406,7 @@ public final class ConnectivityUtils { LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.MC, tp.getTpId())); for (ServiceInterfacePoint sip:this.sipMap.values()) { if (!sip.getUuid().equals(sipUuid)) { - LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); + LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); continue; } zendUuid = sip.getUuid(); @@ -1259,7 +1455,7 @@ public final class ConnectivityUtils { } for (ServiceInterfacePoint sip:this.sipMap.values()) { if (!sip.getUuid().equals(sipUuid)) { - LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); + LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); continue; } zendUuid = sip.getUuid(); @@ -1287,7 +1483,7 @@ public final class ConnectivityUtils { tp.getTpId())); for (ServiceInterfacePoint sip:this.sipMap.values()) { if (!sip.getUuid().equals(sipUuid)) { - LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); + LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); continue; } aendUuid = sip.getUuid(); @@ -1336,7 +1532,7 @@ public final class ConnectivityUtils { } for (ServiceInterfacePoint sip:this.sipMap.values()) { if (!sip.getUuid().equals(sipUuid)) { - LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); + LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue()); continue; } aendUuid = sip.getUuid(); @@ -1371,11 +1567,18 @@ public final class ConnectivityUtils { this.tapiContext.updateTopologyWithCep(topoUuid, nodeUuid, nepUuid, cep); } - public Map - getConnectionFullMap() { - return this.connectionFullMap; + + private void putRdmNepInTopologyContext(String orNodeId, String orTpId, String qual, OwnedNodeEdgePoint onep) { + LOG.info("NEP id before Merge = {}", String.join("+", orNodeId, qual, orTpId)); + LOG.info("Node of NEP id before Merge = {}", String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA)); + // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep + Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(Charset.forName("UTF-8"))).toString()); + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA) + .getBytes(Charset.forName("UTF-8"))).toString()); + Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", orNodeId, qual, orTpId) + .getBytes(Charset.forName("UTF-8"))).toString()); + updateTopologyWithNep(topoUuid, nodeUuid, nepUuid, onep); } private String getIdBasedOnModelVersion(String nodeid) { @@ -1383,91 +1586,9 @@ public final class ConnectivityUtils { nodeid.split("-")[1]) : nodeid.split("-")[0]; } - public ServiceCreateInput createORServiceInput(CreateConnectivityServiceInput input, Uuid serviceUuid) { - // TODO: not taking into account all the constraints. Only using EndPoints and Connectivity Constraint. - Map - endPointMap = input.getEndPoint(); - ConnectivityConstraint constraint = input.getConnectivityConstraint(); - ConnectionType connType = null; - ServiceFormat serviceFormat = null; - String nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.DSR); - String nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow().getLocalId(), - TapiStringConstants.DSR); - LOG.debug("Node a = {}", nodeAid); - LOG.debug("Node z = {}", nodeZid); - switch (constraint.getServiceLayer().getIntValue()) { - case 0: - LOG.info("ODU"); - connType = ConnectionType.Infrastructure; - serviceFormat = ServiceFormat.ODU; - break; - case 1: - LOG.info("ETH, no need to create OTU and ODU"); - connType = ConnectionType.Service; - serviceFormat = ServiceFormat.Ethernet; - break; - case 2: - LOG.info("DSR, need to create OTU and ODU"); - connType = ConnectionType.Service; - serviceFormat = ServiceFormat.Ethernet; - break; - case 3: - LOG.info("PHOTONIC"); - connType = getConnectionTypePhtnc(endPointMap.values()); - serviceFormat = getServiceFormatPhtnc(endPointMap.values()); - if (serviceFormat.equals(ServiceFormat.OC)) { - nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.PHTNC_MEDIA); - nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow() - .getLocalId(), TapiStringConstants.PHTNC_MEDIA); - } else { - nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.OTSI); - nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow() - .getLocalId(), TapiStringConstants.OTSI); - } - LOG.debug("Node a photonic = {}", nodeAid); - LOG.debug("Node z photonic = {}", nodeZid); - break; - default: - LOG.info("Service type {} not supported", constraint.getServiceLayer().getName()); - } - // Requested Capacity for connectivity service - Uint64 capacity = input.getConnectivityConstraint().getRequestedCapacity().getTotalSize().getValue(); - // map endpoints into service end points. Map the type of service from TAPI to OR - ServiceAEnd serviceAEnd = tapiEndPointToServiceAPoint(endPointMap.values().stream().findFirst().orElseThrow(), - serviceFormat, nodeAid, capacity, constraint.getServiceLayer()); - ServiceZEnd serviceZEnd = tapiEndPointToServiceZPoint(endPointMap.values().stream().skip(1).findFirst() - .orElseThrow(), serviceFormat, nodeZid, capacity, constraint.getServiceLayer()); - if (serviceAEnd == null || serviceZEnd == null) { - LOG.error("Couldnt map endpoints to service end"); - return null; - } - LOG.info("Service a end = {}", serviceAEnd); - LOG.info("Service z end = {}", serviceZEnd); - return new ServiceCreateInputBuilder() - .setServiceAEnd(serviceAEnd) - .setServiceZEnd(serviceZEnd) - .setConnectionType(connType) - .setServiceName(serviceUuid.getValue()) - .setCommonId("common id") - .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request-1") - .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url") - .setRequestSystemId("appname") - .build()) - .setCustomer("customer") - .setDueDate(DateAndTime.getDefaultInstance("2018-06-15T00:00:01Z")) - .setOperatorContact("pw1234") - .build(); - } - private ServiceZEnd tapiEndPointToServiceZPoint( org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint endPoint, + .onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint endPoint, ServiceFormat serviceFormat, String nodeZid, Uint64 capacity, LayerProtocolName serviceLayer) { // TODO -> change way this is being created. The name includes only SPDR-SA1-XPDR1. // Not the rest which is needed in the txPortDeviceName. @@ -1475,7 +1596,7 @@ public final class ConnectivityUtils { Uuid sipUuid = endPoint.getServiceInterfacePoint().getServiceInterfacePointUuid(); // Todo -> need to find the NEP associated to that SIP Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeZid.getBytes(StandardCharsets.UTF_8)).toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node = + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); if (node == null) { LOG.error("Node not found in datastore"); @@ -1497,7 +1618,15 @@ public final class ConnectivityUtils { LOG.error("Nep not found in datastore"); return null; } - String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); + String nodeName = ""; + for (Map.Entry entry: + endPoint.getName().entrySet()) { + if (!("Node Type").equals(entry.getValue().getValueName())) { + nodeName = entry.getValue().getValue(); + } + } +// String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]); String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue(); String txPortDeviceName = nepName.split("\\+")[0]; @@ -1572,7 +1701,7 @@ public final class ConnectivityUtils { private ServiceAEnd tapiEndPointToServiceAPoint( org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint endPoint, + .onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint endPoint, ServiceFormat serviceFormat, String nodeAid, Uint64 capacity, LayerProtocolName serviceLayer) { // TODO -> change way this is being created. The name includes only SPDR-SA1-XPDR1. // Not the rest which is needed in the txPortDeviceName. @@ -1580,7 +1709,8 @@ public final class ConnectivityUtils { Uuid sipUuid = endPoint.getServiceInterfacePoint().getServiceInterfacePointUuid(); // Todo -> need to find the NEP associated to that SIP Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeAid.getBytes(StandardCharsets.UTF_8)).toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node = + LOG.info("NodeA {} Uuid is {}", nodeAid, nodeUuid); + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); if (node == null) { LOG.error("Node not found in datastore"); @@ -1602,7 +1732,15 @@ public final class ConnectivityUtils { LOG.error("Nep not found in datastore"); return null; } - String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); + String nodeName = ""; + for (Map.Entry entry: + endPoint.getName().entrySet()) { + if (!("Node Type").equals(entry.getValue().getValueName())) { + nodeName = entry.getValue().getValue(); + } + } +// String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]); String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue(); String txPortDeviceName = nepName.split("\\+")[0]; @@ -1677,7 +1815,7 @@ public final class ConnectivityUtils { } private ConnectionType getConnectionTypePhtnc(Collection endPoints) { + .onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint> endPoints) { if (endPoints.stream().anyMatch(ep -> ep.getName().values().stream() .anyMatch(name -> name.getValue().contains("ROADM")))) { // EndPoints are ROADMs @@ -1688,7 +1826,7 @@ public final class ConnectivityUtils { } private ServiceFormat getServiceFormatPhtnc(Collection endPoints) { + .onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint> endPoints) { if (endPoints.stream().anyMatch(ep -> ep.getName().values().stream() .anyMatch(name -> name.getValue().contains("ROADM")))) { // EndPoints are ROADMs @@ -1700,7 +1838,7 @@ public final class ConnectivityUtils { private ConnectionEndPoint getAssociatediODUCep(String spcXpdrNetwork) { Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0], - TapiStringConstants.DSR).getBytes(StandardCharsets.UTF_8))).toString()); + TapiStringConstants.XPDR).getBytes(StandardCharsets.UTF_8))).toString()); Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0], TapiStringConstants.I_ODU, spcXpdrNetwork.split("\\+")[1]).getBytes(StandardCharsets.UTF_8))) .toString()); @@ -1754,19 +1892,19 @@ public final class ConnectivityUtils { private OpenroadmNodeType getOpenRoadmNodeType(List xpdrNodelist) { List openroadmNodeTypeList = new ArrayList<>(); for (String xpdrNode:xpdrNodelist) { - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.DSR)) + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.XPDR)) .getBytes(StandardCharsets.UTF_8)).toString()); InstanceIdentifier nodeIID = InstanceIdentifier.builder( + .onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeIID = InstanceIdentifier.builder( Context.class).augmentation(org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.topology.rev181210.Context1.class).child(TopologyContext.class) + .onf.otcc.yang.tapi.topology.rev221121.Context1.class).child(TopologyContext.class) .child(Topology.class, new TopologyKey(this.tapiTopoUuid)) - .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class, + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class, new NodeKey(nodeUuid)).build(); try { - Optional optNode + Optional optNode = this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, nodeIID).get(); - if (!optNode.isPresent()) { + if (optNode.isEmpty()) { return null; } OpenroadmNodeType openroadmNodeType = OpenroadmNodeType.forName(optNode.orElseThrow().getName().get( @@ -1786,4 +1924,41 @@ public final class ConnectivityUtils { } return openroadmNodeTypeList.get(0); } + + private OwnedNodeEdgePoint createRoadmNep(String orNodeId, String tpId, + boolean withSip, OperationalState operState, AdministrativeState adminState, String nepPhotonicSublayer) { + + //TODO : complete implementation with SIP + Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, nepPhotonicSublayer, + tpId)).getBytes(StandardCharsets.UTF_8)).toString()); + Name nepName = new NameBuilder() + .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint") + .setValue(String.join("+", orNodeId, nepPhotonicSublayer, tpId)) + .build(); + List sclpqiList = new ArrayList<>(); + if (TapiStringConstants.MC.equals(nepPhotonicSublayer)) { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIERMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } else { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } + OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder() + .setUuid(nepUuid) + .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA) + .setName(Map.of(nepName.key(), nepName)) + .setSupportedCepLayerProtocolQualifierInstances(sclpqiList) + .setDirection(Direction.BIDIRECTIONAL) + .setLinkPortRole(PortRole.SYMMETRIC) + .setAdministrativeState(adminState).setOperationalState(operState) + .setLifecycleState(LifecycleState.INSTALLED) + .build(); + + return onep; + } + }