package org.opendaylight.transportpce.tapi.topology;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
import org.opendaylight.transportpce.tapi.TapiStringConstants;
import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.network.Nodes;
+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.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.NodeTypes;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.OduSwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev200327.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
-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.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If100GEODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If10GEODU2e;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.If1GEODU0;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCH;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.IfOCHOTU4ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev200327.SupportedIfCapability;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPools;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev230526.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability;
import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev191129.SwitchingPoolTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.mode.attributes.supported.operational.modes.OperationalModeKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
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.NetworkKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
-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.Context;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LAYERPROTOCOLQUALIFIER;
-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.TerminationDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TerminationState;
-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.pac.AvailableCapacityBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.pac.TotalPotentialCapacityBuilder;
-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.ServiceInterfacePointBuilder;
-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.connectivity.context.Connection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey;
-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.context.ConnectivityServiceKey;
-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.EndPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE100GigE;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPE10GigELAN;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.DIGITALSIGNALTYPEGigE;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU0;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU2E;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.ODUTYPEODU4;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.PHOTONICLAYERQUALIFIEROMS;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.PHOTONICLAYERQUALIFIEROTSi;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.ForwardingRule;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RuleType;
-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.NodeRuleGroup;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroupBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.NodeRuleGroupKey;
-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.OwnedNodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePointBuilder;
-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.node.rule.group.NodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.Rule;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.RuleBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.RuleKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristic;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.risk.parameter.pac.RiskCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeBuilder;
-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.TopologyBuilder;
-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.topology.rev181210.transfer.cost.pac.CostCharacteristic;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.cost.pac.CostCharacteristicBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristic;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.transfer.timing.pac.LatencyCharacteristicBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint;
+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.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ContextBuilder;
+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.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.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.ServiceInterfacePointBuilder;
+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.OwnedNodeEdgePoint1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1Builder;
+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.cep.list.ConnectionEndPointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey;
+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.context.ConnectivityServiceKey;
+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.EndPointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.topology.context.topology.node.owned.node.edge.point.CepList;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.topology.context.topology.node.owned.node.edge.point.CepListBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.NOTIFICATIONTYPEATTRIBUTEVALUECHANGE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.NotificationBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.ChangedAttributes;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.ChangedAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.ChangedAttributesKey;
+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.PHOTONICLAYERQUALIFIEROMS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS;
+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.photonic.media.rev221121.context.topology.context.topology.node.owned.node.edge.point.PhotonicMediaNodeEdgePointSpec;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.NodeEdgePointRef;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODEEDGEPOINT;
+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.InterRuleGroup;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.InterRuleGroupKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupKey;
+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.RiskParameterPac;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint;
+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.node.rule.group.NodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.RuleKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristic;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.risk.parameter.pac.RiskCharacteristicBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeBuilder;
+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.TopologyBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristic;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.cost.pac.CostCharacteristicBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristic;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.transfer.timing.pac.LatencyCharacteristicBuilder;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.Notification;
import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
+@Component
public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkModelServiceImpl.class);
+
private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
- .getBytes(Charset.forName("UTF-8"))).toString());
+ .getBytes(StandardCharsets.UTF_8)).toString());
private final NetworkTransactionService networkTransactionService;
- private Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap;
private final R2RTapiLinkDiscovery linkDiscovery;
private final TapiLink tapiLink;
-
- public TapiNetworkModelServiceImpl(final R2RTapiLinkDiscovery linkDiscovery,
- NetworkTransactionService networkTransactionService, TapiLink tapiLink) {
+ private final ConvertORToTapiTopology tapiFactory;
+ private String topologicalMode;
+ private final ConvertORTopoToTapiFullTopo tapiFullFactory;
+ private final NotificationPublishService notificationPublishService;
+ private Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap = new HashMap<>();
+
+ @Activate
+ public TapiNetworkModelServiceImpl(@Reference NetworkTransactionService networkTransactionService,
+ @Reference DeviceTransactionManager deviceTransactionManager,
+ @Reference TapiLink tapiLink,
+ @Reference final NotificationPublishService notificationPublishService) {
this.networkTransactionService = networkTransactionService;
- this.sipMap = new HashMap<>();
- this.linkDiscovery = linkDiscovery;
+ this.linkDiscovery = new R2RTapiLinkDiscovery(networkTransactionService, deviceTransactionManager, tapiLink);
+ this.notificationPublishService = notificationPublishService;
+ this.tapiFactory = new ConvertORToTapiTopology(tapiTopoUuid);
this.tapiLink = tapiLink;
+ this.tapiFullFactory = new ConvertORTopoToTapiFullTopo(tapiTopoUuid, tapiLink);
+ this.topologicalMode = tapiFullFactory.getTopologicalMode();
}
@Override
}
// Transform LCPs into ONEP
Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap =
- new HashMap<>(transformDegToOnep(orNodeId, mapDeg));
- onepMap.putAll(transformSrgToOnep(orNodeId, mapSrg));
-
- // create tapi Node
- Node roadmNode = createRoadmTapiNode(orNodeId, onepMap);
- mergeNodeinTopology(Map.of(roadmNode.key(), roadmNode));
- mergeSipsinContext(this.sipMap);
- // TODO add states corresponding to device config -> based on mapping.
- // This should be possible after Gilles work is merged
-
- // rdm to rdm link creation if neighbour roadm is mounted
- LOG.info("checking if neighbor roadm exists");
- Map<LinkKey, Link> rdm2rdmLinks = this.linkDiscovery.readLLDP(new NodeId(orNodeId), orNodeVersion,
- this.tapiTopoUuid);
- if (!rdm2rdmLinks.isEmpty()) {
- mergeLinkinTopology(rdm2rdmLinks);
+ new HashMap<>(transformSrgToOnep(orNodeId, mapSrg));
+ LOG.debug("CreateTapiNode NetworkModelServiceImpl, TopologicalMode = {}", topologicalMode);
+ LOG.debug("TAPINETWORKMODELSERVICEIMPL call transformSRGtoONEP (OrNodeId {} ", orNodeId);
+ LOG.debug("TAPINETWORKMODELSERVICEIMPL SRG OTSNode of retrieved OnepMap {} ",
+ onepMap.entrySet().stream().filter(e -> e.getValue()
+ .getSupportedCepLayerProtocolQualifierInstances()
+ .contains(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+ .build()))
+ .collect(Collectors.toList()));
+ if (topologicalMode.equals("Full")) {
+ onepMap.putAll(transformDegToOnep(orNodeId, mapDeg));
+ LOG.debug("TAPINETWORKMODELSERVICEIMPL DEG+SRG OTSNode of retrieved OnepMap {} ",
+ onepMap.entrySet().stream().filter(e -> e.getValue()
+ .getSupportedCepLayerProtocolQualifierInstances()
+ .contains(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setNumberOfCepInstances(Uint64.valueOf(1))
+ .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+ .build()))
+ .collect(Collectors.toList()));
+ LOG.debug("TAPINETWORKMODELSERVICEIMPL DEG+SRG complete retrieved OnepMap {} ", onepMap);
+ // create tapi Node
+ Node roadmNode = createRoadmTapiNode(orNodeId, onepMap);
+ mergeNodeinTopology(Map.of(roadmNode.key(), roadmNode));
+ mergeSipsinContext(this.sipMap);
+ // TODO add states corresponding to device config -> based on mapping.
+ // This should be possible after Gilles work is merged
+
+ // rdm to rdm link creation if neighbour roadm is mounted
+ LOG.info("checking if neighbor roadm exists");
+ Map<LinkKey, Link> rdm2rdmLinks = this.linkDiscovery.readLLDP(new NodeId(orNodeId), orNodeVersion,
+ this.tapiTopoUuid);
+ if (!rdm2rdmLinks.isEmpty()) {
+ mergeLinkinTopology(rdm2rdmLinks);
+ }
+ } else {
+ // create tapi Node
+ Node roadmNode = createRoadmTapiNode("ROADMINFRA", onepMap);
+ mergeNodeinTopology(Map.of(roadmNode.key(), roadmNode));
+ mergeSipsinContext(this.sipMap);
+ // TODO add states corresponding to device config -> based on mapping.
+ // This should be possible after Gilles work is merged
}
+
LOG.info("TAPI node for or node {} successfully merged", orNodeId);
} else if (NodeTypes.Xpdr.getIntValue() == node.getNodeInfo().getNodeType().getIntValue()) {
List<Mapping> networkMappings = node.nonnullMapping().values()
Map<Integer, String> xpdrMap = new HashMap<>();
for (Mapping mapping : networkMappings) {
Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
- String nodeId = node.getNodeId() + TapiStringConstants.XPDR + xpdrNb;
+ String nodeId = node.getNodeId() + TapiStringConstants.XXPDR + xpdrNb;
if (!xpdrMap.containsKey(xpdrNb)) {
List<Mapping> xpdrNetMaps = node.nonnullMapping().values()
.stream().filter(k -> k.getLogicalConnectionPoint()
// create switching pool
OduSwitchingPools oorOduSwitchingPool = createSwitchPoolForXpdr(
- mapping.getXponderType().getIntValue(), xpdrClMaps, xpdrNetMaps, xpdrNb);
+ mapping.getXpdrType().getIntValue(), xpdrClMaps, xpdrNetMaps, xpdrNb);
// node transformation
Map<NodeKey, Node> nodeMap = new HashMap<>(transformXpdrToTapiNode(
- nodeId, xpdrClMaps, xpdrNetMaps, mapping.getXponderType(), oorOduSwitchingPool));
+ nodeId, xpdrClMaps, xpdrNetMaps, mapping.getXpdrType(), oorOduSwitchingPool));
// add nodes and sips to tapi context
mergeNodeinTopology(nodeMap);
mergeSipsinContext(this.sipMap);
// Device not managed yet
}
+ @Override
+ public void updateTapiTopology(String nodeId, Mapping mapping) {
+ List<Uuid> uuids = getChangedNodeUuids(nodeId, mapping);
+
+ List<Uuid> changedOneps = updateNeps(mapping, uuids);
+ updateLinks(changedOneps, mapping);
+ sendNotification(changedOneps, mapping);
+
+ LOG.info("Updated TAPI topology successfully.");
+ }
+
+ @SuppressWarnings("rawtypes")
+ private void sendNotification(List<Uuid> changedOneps, Mapping mapping) {
+ Notification notification = new NotificationBuilder()
+ .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE)
+// .setTargetObjectType(ObjectType.NODEEDGEPOINT)
+ //TODO: Change this : modification in Models 2.4 does not provide for Object type Node EdgePoint
+ .setTargetObjectType(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE)
+ .setChangedAttributes(getChangedAttributes(changedOneps, mapping))
+ .setUuid(tapiTopoUuid)
+ .build();
+ try {
+ notificationPublishService.putNotification(notification);
+ } catch (InterruptedException e) {
+ LOG.error("Could not send notification");
+ }
+ }
+
+ private Map<ChangedAttributesKey, ChangedAttributes> getChangedAttributes(List<Uuid> changedOneps,
+ Mapping mapping) {
+ Map<ChangedAttributesKey, ChangedAttributes> changedAttributes = new HashMap<>();
+ for (Uuid nep : changedOneps) {
+ changedAttributes.put(new ChangedAttributesKey(nep.getValue()),
+ new ChangedAttributesBuilder().setValueName(nep.getValue())
+ .setOldValue(mapping.getPortOperState().equals("InService") ? "OutOfService" : "InService")
+ .setNewValue(mapping.getPortOperState())
+ .build());
+ }
+ return changedAttributes;
+ }
+
+ private void updateLinks(List<Uuid> changedOneps, Mapping mapping) {
+ try {
+ InstanceIdentifier<Topology> topoIID = InstanceIdentifier.builder(Context.class)
+ .augmentation(Context1.class).child(TopologyContext.class)
+ .child(Topology.class, new TopologyKey(tapiTopoUuid))
+ .build();
+ Optional<Topology> optTopology = this.networkTransactionService
+ .read(LogicalDatastoreType.OPERATIONAL, topoIID).get();
+ if (optTopology.isEmpty()) {
+ LOG.error("Could not update TAPI links");
+ return;
+ }
+ int nbAffectedLinks = 0;
+ LOG.info("UUIDofAffectedONEPS = {} ", changedOneps.toString());
+ for (Link link : optTopology.orElseThrow().nonnullLink().values()) {
+ List<Uuid> linkNeps = Objects.requireNonNull(link.getNodeEdgePoint()).values().stream()
+ .map(NodeEdgePointRef::getNodeEdgePointUuid).collect(Collectors.toList());
+ LOG.info("LinkEndPointsUUID = {} for link Name {}", linkNeps.toString(), link.getName().toString());
+ if (!Collections.disjoint(changedOneps, linkNeps)) {
+ InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Context.class)
+ .augmentation(Context1.class).child(TopologyContext.class)
+ .child(Topology.class, new TopologyKey(tapiTopoUuid))
+ .child(Link.class, new LinkKey(link.getUuid())).build();
+ Link linkblr = new LinkBuilder().setUuid(link.getUuid())
+ .setAdministrativeState(transformAdminState(mapping.getPortAdminState()))
+ .setOperationalState(transformOperState(mapping.getPortOperState())).build();
+ this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, linkIID, linkblr);
+ nbAffectedLinks++ ;
+ }
+ }
+ LOG.info("AffectedLinksNb = {} ", nbAffectedLinks);
+ this.networkTransactionService.commit().get();
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Could not update TAPI links");
+ }
+ }
+
+ private List<Uuid> updateNeps(Mapping mapping, List<Uuid> uuids) {
+ List<Uuid> changedOneps = new ArrayList<>();
+ for (Uuid nodeUuid : uuids) {
+ try {
+ InstanceIdentifier<Node> nodeIID = InstanceIdentifier.builder(Context.class)
+ .augmentation(Context1.class).child(TopologyContext.class)
+ .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid))
+ .build();
+ Optional<Node> optionalNode = this.networkTransactionService.read(
+ LogicalDatastoreType.OPERATIONAL, nodeIID).get();
+ if (optionalNode.isPresent()) {
+ Node node = optionalNode.orElseThrow();
+ List<OwnedNodeEdgePoint> oneps = node.getOwnedNodeEdgePoint().values().stream()
+ .filter(onep -> ((Name) onep.getName().values().toArray()[0]).getValue()
+ .contains(mapping.getLogicalConnectionPoint())).collect(Collectors.toList());
+ for (OwnedNodeEdgePoint onep : oneps) {
+ changedOneps.add(onep.getUuid());
+ updateSips(mapping, onep);
+ CepList cepList = getUpdatedCeps(mapping, onep);
+ InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
+ .augmentation(Context1.class).child(TopologyContext.class)
+ .child(Topology.class, new TopologyKey(tapiTopoUuid))
+ .child(Node.class, new NodeKey(nodeUuid))
+ .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(onep.getUuid()))
+ .build();
+ OwnedNodeEdgePoint onepblr = new OwnedNodeEdgePointBuilder().setUuid(onep.getUuid())
+ .addAugmentation(new OwnedNodeEdgePoint1Builder().setCepList(cepList).build())
+ .setAdministrativeState(transformAdminState(mapping.getPortAdminState()))
+ .setOperationalState(transformOperState(mapping.getPortOperState())).build();
+ this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, onepblr);
+ LOG.info("UpdatedNEP {} of UUID {} to ADMIN {} OPER {}",
+ onep.getName().toString(), onep.getUuid(),
+ transformAdminState(mapping.getPortAdminState()),
+ transformOperState(mapping.getPortOperState()));
+ }
+ this.networkTransactionService.commit().get();
+ }
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Could not update TAPI NEP");
+ }
+ }
+ return changedOneps;
+ }
+
+ private CepList getUpdatedCeps(Mapping mapping, OwnedNodeEdgePoint onep) {
+ OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
+ Map<ConnectionEndPointKey, ConnectionEndPoint> cepMap = new HashMap<>();
+ if (onep1 != null && onep1.getCepList() != null && onep1.getCepList().getConnectionEndPoint() != null) {
+ for (Map.Entry<ConnectionEndPointKey, ConnectionEndPoint> entry : onep1.getCepList().getConnectionEndPoint()
+ .entrySet()) {
+ ConnectionEndPoint cep = new ConnectionEndPointBuilder(entry.getValue())
+ .setOperationalState(transformOperState(mapping.getPortOperState())).build();
+ cepMap.put(entry.getKey(), cep);
+ }
+ }
+ return new CepListBuilder().setConnectionEndPoint(cepMap).build();
+ }
+
+ private List<Uuid> getChangedNodeUuids(String nodeId, Mapping mapping) {
+ List<Uuid> uuids = new ArrayList<>();
+ if (nodeId.contains("ROADM")) {
+ uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA))
+ .getBytes(StandardCharsets.UTF_8)).toString()));
+ } else if (nodeId.contains("PDR")) {
+ LOG.debug("ANALYSING change in {}", nodeId);
+ int xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
+ String xpdrNodeId = nodeId + TapiStringConstants.XXPDR + xpdrNb;
+ uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.XPDR))
+ .getBytes(StandardCharsets.UTF_8)).toString()));
+ } else {
+ LOG.error("Updating this device is currently not supported");
+ return uuids;
+ }
+ return uuids;
+ }
+
+ private void updateSips(Mapping mapping, OwnedNodeEdgePoint onep) {
+ if (onep.getMappedServiceInterfacePoint() == null
+ || onep.getMappedServiceInterfacePoint().size() == 0) {
+ return;
+ }
+ for (MappedServiceInterfacePoint msip : onep.getMappedServiceInterfacePoint().values()) {
+ InstanceIdentifier<ServiceInterfacePoint> sipIID = InstanceIdentifier
+ .builder(Context.class)
+ .child(ServiceInterfacePoint.class,
+ new ServiceInterfacePointKey(msip.getServiceInterfacePointUuid()))
+ .build();
+ ServiceInterfacePoint sipblr = new ServiceInterfacePointBuilder()
+ .setUuid(msip.getServiceInterfacePointUuid())
+ .setAdministrativeState(transformAdminState(mapping.getPortAdminState()))
+ .setOperationalState(transformOperState(mapping.getPortOperState())).build();
+ this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, sipIID, sipblr);
+ }
+
+ }
+
private Map<NodeKey, Node> transformXpdrToTapiNode(String nodeId, List<Mapping> xpdrClMaps,
List<Mapping> xpdrNetMaps, XpdrNodeTypes xponderType,
OduSwitchingPools oorOduSwitchingPool) {
Map<NodeKey, Node> nodeMap = new HashMap<>();
LOG.info("creation of a DSR/ODU node for {}", nodeId);
- Uuid nodeUuidDsr = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.DSR))
- .getBytes(Charset.forName("UTF-8"))).toString());
+ Uuid nodeUuidDsr = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.XPDR))
+ .getBytes(StandardCharsets.UTF_8)).toString());
Name nameDsr = new NameBuilder().setValueName("dsr/odu node name").setValue(
- String.join("+", nodeId, TapiStringConstants.DSR)).build();
- List<LayerProtocolName> dsrLayerProtocols = Arrays.asList(LayerProtocolName.DSR,
- LayerProtocolName.ODU);
- Node dsrNode = createTapiXpdrNode(Map.of(nameDsr.key(), nameDsr), dsrLayerProtocols,
- nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType, oorOduSwitchingPool);
-
- nodeMap.put(dsrNode.key(), dsrNode);
-
- // node creation [otsi]
- LOG.info("creation of an OTSi node for {}", nodeId);
- Uuid nodeUuidOtsi = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.OTSI))
- .getBytes(Charset.forName("UTF-8"))).toString());
+ String.join("+", nodeId, TapiStringConstants.XPDR)).build();
Name nameOtsi = new NameBuilder().setValueName("otsi node name").setValue(
- String.join("+", nodeId, TapiStringConstants.OTSI)).build();
- List<LayerProtocolName> otsiLayerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA);
- Node otsiNode = createTapiXpdrNode(Map.of(nameOtsi.key(), nameOtsi), otsiLayerProtocols,
- nodeId, nodeUuidOtsi, xpdrClMaps, xpdrNetMaps, xponderType, null);
-
- nodeMap.put(otsiNode.key(), otsiNode);
-
- // transitional link cration between network nep of DSR/ODU node and iNep of otsi node
- LOG.info("creation of transitional links between DSR/ODU and OTSi nodes");
- Map<LinkKey, Link> linkMap = createTapiTransitionalLinks(nodeId, xpdrNetMaps, nodeUuidDsr,
- nodeUuidOtsi);
- mergeLinkinTopology(linkMap);
+ String.join("+", nodeId, TapiStringConstants.XPDR)).build();
+ Name nameNodeType = new NameBuilder().setValueName("Node Type")
+ .setValue(getNodeType(xponderType)).build();
+ Set<LayerProtocolName> dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU,
+ LayerProtocolName.DIGITALOTN, LayerProtocolName.PHOTONICMEDIA);
+ Node dsrNode = createTapiXpdrNode(Map.of(nameDsr.key(), nameDsr, nameOtsi.key(), nameOtsi, nameNodeType.key(),
+ nameNodeType), dsrLayerProtocols, nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType,
+ oorOduSwitchingPool);
+ nodeMap.put(dsrNode.key(), dsrNode);
return nodeMap;
}
switch (xpdrType) {
case 1:
// Tpdr
- return createTpdrSwitchPool();
+ return createTpdrSwitchPool(xpdrNetMaps);
case 2:
// Mux
return createMuxSwitchPool(xpdrClMaps, xpdrNetMaps, xpdrNb);
}
private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> transformSrgToOnep(String orNodeId,
- Map<String, List<Mapping>> mapSrg) {
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
+ Map<String, List<Mapping>> mapSrg) {
+ LOG.debug("CREATENEP transformSrgToOnep, ListOfMapping {}, of NodeId {} ", mapSrg, orNodeId);
+ Map<String, TerminationPoint1> tpMap = new HashMap<>();
+ //List<TerminationPoint> tpList = new ArrayList<>();
for (Map.Entry<String, List<Mapping>> entry : mapSrg.entrySet()) {
// For each srg node. Loop through the LCPs and create neps and sips for PP
for (Mapping m:entry.getValue()) {
- if (!m.getLogicalConnectionPoint().contains("PP")) {
- LOG.info("LCP {} is not an external TP of SRG node", m.getLogicalConnectionPoint());
+ String tpId = m.getLogicalConnectionPoint();
+ String overlayNodeId = String.join("-", orNodeId, tpId.split("\\-")[0]);
+ if (!tpId.contains("PP")) {
+ LOG.info("LCP {} is not an external TP of SRG node", tpId);
continue;
}
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> srgNeps =
- createRoadmNeps(orNodeId, m.getLogicalConnectionPoint(), true,
- transformOperState(m.getPortOperState()), transformAdminState(m.getPortAdminState()));
- onepMap.putAll(srgNeps);
+ int counter = 50;
+ do {
+ counter--;
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ LOG.debug("Waiting until PP is backported in Topology, Exception raised", e);
+ }
+ } while (getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId) == null && counter != 0);
+ if (getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId) != null) {
+ //tpList.add(getNetworkTerminationPointFromDatastore(overlayNodeId, tpId));
+ tpMap.put(tpId, getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId));
+ LOG.debug("LCP {} is not empty for augmentation TP1", tpId);
+ } else {
+ LOG.error("CREATENEP transformSrgToOnep, No Tp1 found in topology for LCP {}, of NodeId {} ",
+ tpId, overlayNodeId);
+ }
+ if (getNetworkTerminationPoint11FromDatastore(overlayNodeId, tpId) != null) {
+ LOG.info("LCP {} is not empty for augmentation TP11", tpId);
+ } else {
+ LOG.error("CREATENEP transformSrgToOnep, No Tp11 found in topology for LCP {}, of NodeId {} ",
+ tpId, overlayNodeId);
+ }
}
}
- return onepMap;
+ LOG.debug("TransformSRGToONep for tps {}, of NodeId {} ",
+ tpMap.entrySet().stream().map(tp -> tp.getKey()).collect(Collectors.toList()).toString(), orNodeId);
+ return populateNepsForRdmNode(orNodeId, tpMap, false, TapiStringConstants.PHTNC_MEDIA_OTS);
}
private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> transformDegToOnep(String orNodeId,
- Map<String, List<Mapping>> mapDeg) {
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
+ Map<String, List<Mapping>> mapDeg) {
+ LOG.debug("CREATENEP transformDegToOnep, ListOfMapping {}, of NodeId {} ",
+ mapDeg.toString(), orNodeId);
+ Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> degOnepMap = new HashMap<>();
+ Map<String, TerminationPoint1> tpMap = new HashMap<>();
+ //List<TerminationPoint> tpList = new ArrayList<>();
for (Map.Entry<String, List<Mapping>> entry : mapDeg.entrySet()) {
// For each degree node. Loop through the LCPs and create neps and sips for TTP
for (Mapping m:entry.getValue()) {
- if (!m.getLogicalConnectionPoint().contains("TTP")) {
- LOG.info("LCP {} is not an external TP of DEGREE node", m.getLogicalConnectionPoint());
+ String tpId = m.getLogicalConnectionPoint();
+ String overlayNodeId = String.join("-", orNodeId, tpId.split("\\-")[0]);
+ if (!tpId.contains("TTP")) {
+ LOG.info("LCP {} is not an external TP of DEGREE node", tpId);
continue;
}
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> degNeps =
- createRoadmNeps(orNodeId, m.getLogicalConnectionPoint(), false,
- transformOperState(m.getPortOperState()), transformAdminState(m.getPortAdminState()));
- onepMap.putAll(degNeps);
+ if (getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId) != null) {
+ //tpList.add(getNetworkTerminationPointFromDatastore(overlayNodeId, tpId));
+ tpMap.put(tpId, getNetworkTerminationPoint1FromDatastore(overlayNodeId, tpId));
+ LOG.info("LCP {} is not empty for augmentation TP1", tpId);
+ } else {
+ LOG.error("CREATENEP transformDegToOnep, No Tp found in topology for LCP {}, of NodeId {} ",
+ tpId, overlayNodeId);
+ }
}
}
- return onepMap;
+ degOnepMap.putAll(populateNepsForRdmNode(orNodeId, tpMap, false, TapiStringConstants.PHTNC_MEDIA_OTS));
+ degOnepMap.putAll(populateNepsForRdmNode(orNodeId, tpMap, false, TapiStringConstants.PHTNC_MEDIA_OMS));
+ return degOnepMap;
}
private List<String> getRoadmNodelist(List<Mapping> mappingList) {
LOG.error("No topology object present. Error deleting node {}", nodeId);
return;
}
- topology = optTopology.get();
+ topology = optTopology.orElseThrow();
} catch (InterruptedException | ExecutionException e) {
LOG.error("Couldnt read tapi topology from datastore", e);
}
return;
}
if (nodeId.contains("ROADM")) {
- // Node is in photonic media layer and UUID can be built from nodeId + PHTN_MEDIA
- Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
- TapiStringConstants.PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString());
- deleteNodeFromTopo(nodeUuid);
+ if (topologicalMode.equals("Full")) {
+ // Node is in photonic media layer and UUID can be built from nodeId + PHTN_MEDIA
+ Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
+ TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)).toString());
+ deleteNodeFromTopo(nodeUuid);
+ } else {
+ LOG.info("Abstracted Topo Mode in TAPI topology Datastore for OR topology representation. Node"
+ + " {} is not represented in the abstraction and will not be deleted", nodeId);
+ }
}
if (nodeId.contains("XPDR") || nodeId.contains("SPDR") || nodeId.contains("MXPDR")) {
// Node is either XPDR, MXPDR or SPDR. Retrieve nodes from topology and check names
LOG.error("No context object present in datastore.");
return;
}
- context = optContext.get();
+ context = optContext.orElseThrow();
} catch (InterruptedException | ExecutionException e) {
LOG.error("Couldnt read tapi context from datastore", e);
}
}
}
- private Node createTapiXpdrNode(Map<NameKey, Name> nameMap, List<LayerProtocolName> layerProtocols,
+ private Node createTapiXpdrNode(Map<NameKey, Name> nameMap, Set<LayerProtocolName> layerProtocols,
String nodeId, Uuid nodeUuid, List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps,
XpdrNodeTypes xponderType, OduSwitchingPools oorOduSwitchingPool) {
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
- Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = new HashMap<>();
+
Map<RuleKey, Rule> ruleList = new HashMap<>();
+ Set<RuleType> ruleTypes = new HashSet<>();
+ ruleTypes.add(RuleType.FORWARDING);
Rule rule = new RuleBuilder()
.setLocalId("forward")
- .setForwardingRule(ForwardingRule.MAYFORWARDACROSSGROUP)
- .setRuleType(RuleType.FORWARDING)
+ .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
+ .setRuleType(ruleTypes)
.build();
ruleList.put(rule.key(), rule);
- if (layerProtocols.contains(LayerProtocolName.DSR)) {
- // neps for dsr/odu layer
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> dsroduNeps =
- createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType);
- onepl.putAll(dsroduNeps);
- nodeRuleGroupList = createNodeRuleGroupForDsrNode(nodeId, oorOduSwitchingPool, ruleList, onepl);
- } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
- // neps for photonic layer
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> phtmdNeps =
- createXpdrPhtnMdNeps(nodeId, xpdrNetMaps);
- onepl.putAll(phtmdNeps);
- nodeRuleGroupList = createNodeRuleGroupForOtsiNode(nodeId, xpdrNetMaps, ruleList);
- } else {
+ if (!(layerProtocols.contains(LayerProtocolName.DSR)
+ && layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA))) {
LOG.error("Undefined LayerProtocolName for {} node {}", nameMap.get(nameMap.keySet().iterator().next())
- .getValueName(), nameMap.get(nameMap.keySet().iterator().next()).getValue());
+ .getValueName(), nameMap.get(nameMap.keySet().iterator().next()).getValue());
}
+ Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
+ onepl.putAll(createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType));
+ Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = createNodeRuleGroupForDsrNode(
+ nodeId, oorOduSwitchingPool, ruleList, onepl);
+ onepl.putAll(createXpdrPhtnMdNeps(nodeId, xpdrNetMaps));
+ LOG.debug("TapiNetworkModelServiceImpl line 721, total NEP map = {}", onepl.toString());
+
// Empty random creation of mandatory fields for avoiding errors....
CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
.setCostAlgorithm("Restricted Shortest Path - RSP")
.setCostName("HOP_COUNT")
- .setCostValue("12345678")
+ .setCostValue(TapiStringConstants.COST_HOP_VALUE)
.build();
LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
- .setFixedLatencyCharacteristic("12345678")
- .setQueingLatencyCharacteristic("12345678")
- .setJitterCharacteristic("12345678")
- .setWanderCharacteristic("12345678")
+ .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
+ .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
+ .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
+ .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
.setTrafficPropertyName("FIXED_LATENCY")
.build();
- return new NodeBuilder()
+ RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
+ .setRiskCharacteristicName("risk characteristic")
+ .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
+ .build();
+ RiskParameterPac riskParamPac = new RiskParameterPacBuilder()
+ .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+ .build();
+ Node builtNode = new NodeBuilder()
.setUuid(nodeUuid)
.setName(nameMap)
.setLayerProtocolName(layerProtocols)
.setDeliveryOrderCharacteristic("delivery order")
.setUnavailableTimeCharacteristic("unavailable time")
.setServerIntegrityProcessCharacteristic("server integrity process")
+ .setRiskParameterPac(riskParamPac)
.build();
+ List<PhotonicMediaNodeEdgePointSpec> pmnepspecList = new ArrayList<>();
+ for (Map.Entry<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> entry :
+ builtNode.getOwnedNodeEdgePoint().entrySet()) {
+ if (!entry.getValue().getSupportedCepLayerProtocolQualifierInstances().stream()
+ .filter(sclpqi -> sclpqi.getLayerProtocolQualifier().equals(PHOTONICLAYERQUALIFIEROTS.VALUE))
+ .collect(Collectors.toList()).isEmpty()
+ && entry.getValue().augmentationOrElseThrow(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang
+ .tapi.photonic.media.rev221121.OwnedNodeEdgePoint1.class) != null
+ && entry.getValue().augmentationOrElseThrow(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi
+ .photonic.media.rev221121.OwnedNodeEdgePoint1.class).getPhotonicMediaNodeEdgePointSpec()
+ != null) {
+ pmnepspecList.add(entry.getValue().augmentationOrElseThrow(org.opendaylight.yang.gen.v1.urn.onf.otcc
+ .yang.tapi.photonic.media.rev221121.OwnedNodeEdgePoint1.class).getPhotonicMediaNodeEdgePointSpec());
+ }
+ }
+ LOG.debug("TapiNetworkModelServiceImpl line 775, List of non empty PMNEPSEC is = {}", pmnepspecList);
+ return builtNode;
}
private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createXpdrPhtnMdNeps(String nodeId,
- List<Mapping> xpdrNetMaps) {
+ List<Mapping> xpdrNetMaps) {
Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
- // iNep creation on otsi node
- for (int i = 0; i < xpdrNetMaps.size(); i++) {
- Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
- (String.join("+", nodeId, TapiStringConstants.I_OTSI,
- xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
- Name onedName = new NameBuilder()
- .setValueName("iNodeEdgePoint")
- .setValue(String.join("+", nodeId, TapiStringConstants.I_OTSI,
- xpdrNetMaps.get(i).getLogicalConnectionPoint()))
- .build();
-
- OwnedNodeEdgePoint onep = createNep(nepUuid1, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
- Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
- true, String.join("+", nodeId, TapiStringConstants.I_OTSI),
- xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
- transformOperState(xpdrNetMaps.get(i).getPortOperState()),
- transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
- onepl.put(onep.key(), onep);
- }
// eNep creation on otsi node
for (int i = 0; i < xpdrNetMaps.size(); i++) {
Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
- (String.join("+", nodeId, TapiStringConstants.E_OTSI,
- xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
+ (String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
+ xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
Name onedName = new NameBuilder()
.setValueName("eNodeEdgePoint")
- .setValue(String.join("+", nodeId, TapiStringConstants.E_OTSI,
+ .setValue(String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS,
xpdrNetMaps.get(i).getLogicalConnectionPoint()))
.build();
- OwnedNodeEdgePoint onep = createNep(nepUuid2, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
+ List<SupportedIfCapability> newSupIfCapList =
+ new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
+ List<String> opModeList = new ArrayList<>();
+ if (xpdrNetMaps.get(i).getSupportedOperationalMode() != null) {
+ opModeList.addAll(xpdrNetMaps.get(i).getSupportedOperationalMode());
+ }
+
+ OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid2, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
- false, String.join("+", nodeId, TapiStringConstants.E_OTSI),
- xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+ true, String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS), newSupIfCapList, opModeList,
transformOperState(xpdrNetMaps.get(i).getPortOperState()),
transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
onepl.put(onep.key(), onep);
}
- // Photonic Media Nep creation on otsi node
+ // OTSi_MC Nep creation on otsi node
for (int i = 0; i < xpdrNetMaps.size(); i++) {
Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
- (String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA,
- xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
+ (String.join("+", nodeId, TapiStringConstants.OTSI_MC,
+ xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
Name onedName = new NameBuilder()
.setValueName("PhotMedNodeEdgePoint")
- .setValue(String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA,
+ .setValue(String.join("+", nodeId, TapiStringConstants.OTSI_MC,
xpdrNetMaps.get(i).getLogicalConnectionPoint()))
.build();
- OwnedNodeEdgePoint onep = createNep(nepUuid3, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
+ List<SupportedIfCapability> newSupIfCapList =
+ new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
+ List<String> opModeList = new ArrayList<>();
+ if (xpdrNetMaps.get(i).getSupportedOperationalMode() != null) {
+ opModeList.addAll(xpdrNetMaps.get(i).getSupportedOperationalMode());
+ }
+
+ OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid3, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
- false, String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA),
- xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+ false, String.join("+", nodeId, TapiStringConstants.OTSI_MC), newSupIfCapList, opModeList,
transformOperState(xpdrNetMaps.get(i).getPortOperState()),
transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
onepl.put(onep.key(), onep);
xpdrClMaps.get(i).getLogicalConnectionPoint()));
Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
(String.join("+", nodeId, TapiStringConstants.DSR,
- xpdrClMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
+ xpdrClMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
NameBuilder nameBldr = new NameBuilder().setValue(String.join("+", nodeId,
TapiStringConstants.DSR, xpdrClMaps.get(i).getLogicalConnectionPoint()));
Name name;
name = nameBldr.setValueName("NodeEdgePoint_C").build();
}
- OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
+ List<SupportedIfCapability> newSupIfCapList =
+ new ArrayList<>(xpdrClMaps.get(i).getSupportedInterfaceCapability());
+
+ OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
Map.of(name.key(), name), LayerProtocolName.DSR, LayerProtocolName.DSR, true,
- String.join("+", nodeId, TapiStringConstants.DSR),
- xpdrClMaps.get(i).getSupportedInterfaceCapability(),
+ String.join("+", nodeId, TapiStringConstants.DSR), newSupIfCapList, null,
transformOperState(xpdrClMaps.get(i).getPortOperState()),
transformAdminState(xpdrClMaps.get(i).getPortAdminState()));
onepl.put(onep.key(), onep);
xpdrNetMaps.get(i).getLogicalConnectionPoint()));
Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
(String.join("+", nodeId, TapiStringConstants.I_ODU,
- xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
+ xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
Name onedName = new NameBuilder()
.setValueName("iNodeEdgePoint_N")
.setValue(String.join("+", nodeId, TapiStringConstants.I_ODU,
xpdrNetMaps.get(i).getLogicalConnectionPoint()))
.build();
- OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
+ List<SupportedIfCapability> newSupIfCapList =
+ new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
+ OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
Map.of(onedName.key(), onedName),
LayerProtocolName.ODU, LayerProtocolName.DSR, true,
- String.join("+", nodeId, TapiStringConstants.I_ODU),
- xpdrNetMaps.get(i).getSupportedInterfaceCapability(),
+ String.join("+", nodeId, TapiStringConstants.I_ODU), newSupIfCapList, null,
transformOperState(xpdrNetMaps.get(i).getPortOperState()),
transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
onepl.put(onep.key(), onep);
xpdrClMaps.get(i).getLogicalConnectionPoint()));
Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
(String.join("+", nodeId, TapiStringConstants.E_ODU,
- xpdrClMaps.get(i).getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString());
+ xpdrClMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString());
Name onedName = new NameBuilder()
.setValueName("eNodeEdgePoint_N")
.setValue(String.join("+", nodeId, TapiStringConstants.E_ODU,
xpdrClMaps.get(i).getLogicalConnectionPoint()))
.build();
- OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
+ List<SupportedIfCapability> newSupIfCapList =
+ new ArrayList<>(xpdrClMaps.get(i).getSupportedInterfaceCapability());
+
+ OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
Map.of(onedName.key(), onedName),
- LayerProtocolName.ODU, LayerProtocolName.DSR, false,
- String.join("+", nodeId, TapiStringConstants.E_ODU),
- xpdrClMaps.get(i).getSupportedInterfaceCapability(),
+ LayerProtocolName.ODU, LayerProtocolName.DSR, true,
+ String.join("+", nodeId, TapiStringConstants.E_ODU), newSupIfCapList, null,
transformOperState(xpdrClMaps.get(i).getPortOperState()),
transformAdminState(xpdrClMaps.get(i).getPortAdminState()));
onepl.put(onep.key(), onep);
return adminState.equals(AdminStates.InService) ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
}
- private OwnedNodeEdgePoint createNep(Uuid nepUuid, String tpid, Map<NameKey, Name> nepNames,
- LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip,
- String keyword,
- List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability,
- OperationalState operState, AdministrativeState adminState) {
+ private OwnedNodeEdgePoint createNep(String nodeId, Uuid nepUuid, String tpid, Map<NameKey, Name> nepNames,
+ LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip, String keyword,
+ List<SupportedIfCapability> sicList, List<String> opModeList,
+ OperationalState operState, AdministrativeState adminState) {
+ List<SupportedInterfaceCapability> sicListTemp = new ArrayList<>();
+ List<OperationalModeKey> keyedOpModeList = new ArrayList<>();
+ for (SupportedIfCapability supInterCapa : sicList) {
+ SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
+ .withKey(new SupportedInterfaceCapabilityKey(supInterCapa))
+ .setIfCapType(supInterCapa)
+ .build();
+ sicListTemp.add(supIfCapa);
+ }
+ Collection<SupportedInterfaceCapability> sicColl = sicListTemp;
OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
.setUuid(nepUuid)
.setLayerProtocolName(nepProtocol)
.setName(nepNames);
if (withSip) {
- onepBldr.setMappedServiceInterfacePoint(createMSIP(1, nepProtocol, tpid, keyword,
- supportedInterfaceCapability, operState, adminState));
+ onepBldr.setMappedServiceInterfacePoint(this.tapiFactory.createMSIP(1, nepProtocol, tpid, keyword,
+ sicColl, operState, adminState));
+ this.sipMap.putAll(tapiFactory.getTapiSips());
}
LOG.debug("Node layer {}", nodeProtocol.getName());
- onepBldr.setSupportedCepLayerProtocolQualifier(createSupportedLayerProtocolQualifier(
- supportedInterfaceCapability, nepProtocol));
- onepBldr.setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
+ onepBldr.setSupportedCepLayerProtocolQualifierInstances(
+ this.tapiFactory.createSupportedCepLayerProtocolQualifier(sicColl, nepProtocol));
+ onepBldr.setDirection(Direction.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
.setAdministrativeState(adminState).setOperationalState(operState)
- .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
- .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
+ .setLifecycleState(LifecycleState.INSTALLED);
+ if (keyword.contains(TapiStringConstants.OTSI_MC) || keyword.contains(TapiStringConstants.PHTNC_MEDIA_OTS)) {
+ if (opModeList == null || opModeList.isEmpty()) {
+ for (SupportedInterfaceCapability sic : sicColl) {
+ String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+ if (("IfOCHOTUCnODUCn").equals(ifCapType) || ("IfOCHOTUCnODUCnUniregen").equals(ifCapType)
+ || ("IfOCHOTUCnODUCnRegen").equals(ifCapType)) {
+ keyedOpModeList.add(new OperationalModeKey("400G"));
+ LOG.warn(TopologyUtils.NOOPMODEDECLARED + "400G rate available", tpid);
+ break;
+ }
+ }
+ keyedOpModeList.add(new OperationalModeKey("100G"));
+ LOG.warn(TopologyUtils.NOOPMODEDECLARED + "100G rate available", tpid);
+ } else {
+ for (String opMode : opModeList) {
+ keyedOpModeList.add(new OperationalModeKey(opMode));
+ }
+ }
+ Map<Double, Double> freqWidthMap = new HashMap<>();
+ if (getNetworkTerminationPointFromDatastore(nodeId, tpid) != null) {
+ freqWidthMap = tapiFactory.getXpdrUsedWavelength(getNetworkTerminationPointFromDatastore(nodeId, tpid));
+ } else {
+ LOG.error("CREATENEP, No Tp found in topology for LCP {}, of NodeId {} ", tpid, nodeId);
+ }
+ onepBldr = tapiFactory.addPayloadStructureAndPhotSpecToOnep(nodeId, freqWidthMap, keyedOpModeList,
+ sicColl, onepBldr, keyword);
+ LOG.debug("TapiNetworkServiceImpl line982, onep = {}", onepBldr.build());
+ }
return onepBldr.build();
}
- private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createRoadmNeps(String orNodeId, String tpId,
- boolean withSip, OperationalState operState,
- AdministrativeState adminState) {
- Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
- // PHOTONIC MEDIA nep
- Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
- TapiStringConstants.PHTNC_MEDIA, tpId)).getBytes(Charset.forName("UTF-8"))).toString());
- Name nepName = new NameBuilder()
- .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint")
- .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA, tpId))
+ private Node createRoadmTapiNode(String orNodeId, Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap) {
+ // UUID and Node Names
+ Uuid nodeUuid;
+ Name nodeNames;
+ if (orNodeId.equals("ROADMINFRA")) {
+ nodeUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.RDM_INFRA
+ .getBytes(Charset.forName("UTF-8"))).toString());
+ nodeNames = new NameBuilder().setValueName("roadm node name").setValue(TapiStringConstants.RDM_INFRA)
.build();
- OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder()
- .setUuid(nepUuid)
- .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
- .setName(Map.of(nepName.key(), nepName))
- .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
- .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
- .setAdministrativeState(adminState).setOperationalState(operState)
- .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
- .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL)
- .build();
- onepMap.put(onep.key(), onep);
-
- // MC nep
- Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
- TapiStringConstants.MC, tpId)).getBytes(Charset.forName("UTF-8"))).toString());
- Name nepName1 = new NameBuilder()
- .setValueName(TapiStringConstants.MC + "NodeEdgePoint")
- .setValue(String.join("+", orNodeId, TapiStringConstants.MC, tpId))
- .build();
- OwnedNodeEdgePointBuilder onepBldr1 = new OwnedNodeEdgePointBuilder()
- .setUuid(nepUuid1)
- .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
- .setName(Map.of(nepName1.key(), nepName1))
- .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
- .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
- .setAdministrativeState(adminState).setOperationalState(operState)
- .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
- .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
- if (withSip) {
- onepBldr1.setMappedServiceInterfacePoint(createMSIP(1, LayerProtocolName.PHOTONICMEDIA,
- tpId, String.join("+", orNodeId, TapiStringConstants.MC), null,
- operState, adminState));
- }
- OwnedNodeEdgePoint onep1 = onepBldr1.build();
- onepMap.put(onep1.key(), onep1);
-
- // OTSiMC nep
- Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, TapiStringConstants.OTSI_MC,
- tpId)).getBytes(Charset.forName("UTF-8"))).toString());
- Name nepName2 = new NameBuilder()
- .setValueName(TapiStringConstants.OTSI_MC + "NodeEdgePoint")
- .setValue(String.join("+", orNodeId, TapiStringConstants.OTSI_MC, tpId))
- .build();
-
- OwnedNodeEdgePoint onep2 = new OwnedNodeEdgePointBuilder()
- .setUuid(nepUuid2)
- .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
- .setName(Map.of(nepName2.key(), nepName2))
- .setSupportedCepLayerProtocolQualifier(List.of(PHOTONICLAYERQUALIFIEROMS.class))
- .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
- .setAdministrativeState(adminState).setOperationalState(operState)
- .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
- .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL)
- .build();
- onepMap.put(onep2.key(), onep2);
- return onepMap;
- }
-
- private Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint>
- createMSIP(int nb, LayerProtocolName layerProtocol, String tpid, String nodeid,
- List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability,
- OperationalState operState, AdministrativeState adminState) {
- Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> msipl = new HashMap<>();
- for (int i = 0; i < nb; i++) {
- Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeid,
- tpid)).getBytes(Charset.forName("UTF-8"))).toString());
- MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder()
- .setServiceInterfacePointUuid(sipUuid).build();
- ServiceInterfacePoint sip = createSIP(sipUuid, layerProtocol, tpid, nodeid, supportedInterfaceCapability,
- operState, adminState);
- this.sipMap.put(sip.key(), sip);
- LOG.info("SIP created {}", sip.getUuid());
- // this.tapiSips.put(sip.key(), sip);
- msipl.put(msip.key(), msip);
+ } else {
+ nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
+ TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)).toString());
+ nodeNames = new NameBuilder().setValueName("roadm node name")
+ .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA)).build();
}
- return msipl;
- }
-
- private ServiceInterfacePoint createSIP(Uuid sipUuid, LayerProtocolName layerProtocol, String tpid, String nodeid,
- List<Class<? extends SupportedIfCapability>> supportedInterfaceCapability,
- OperationalState operState, AdministrativeState adminState) {
- // TODO: what value should be set in total capacity and available capacity
- LOG.info("SIP name = {}", String.join("+", nodeid, tpid));
- Name sipName = new NameBuilder()
- .setValueName("SIP name")
- .setValue(String.join("+", nodeid, tpid))
- .build();
- return new ServiceInterfacePointBuilder()
- .setUuid(sipUuid)
- .setName(Map.of(sipName.key(), sipName))
- .setLayerProtocolName(layerProtocol)
- .setAdministrativeState(adminState)
- .setOperationalState(operState)
- .setLifecycleState(LifecycleState.INSTALLED)
- .setAvailableCapacity(new AvailableCapacityBuilder().build())
- .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().build())
- .setSupportedLayerProtocolQualifier(createSupportedLayerProtocolQualifier(supportedInterfaceCapability,
- layerProtocol))
- .build();
- }
-
- private Node createRoadmTapiNode(String orNodeId, Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> oneplist) {
- // UUID
- Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId,
- TapiStringConstants.PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString());
- // Names
- Name nodeNames = new NameBuilder().setValueName("roadm node name")
- .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA)).build();
+ Name nameNodeType = new NameBuilder().setValueName("Node Type")
+ .setValue(OpenroadmNodeType.ROADM.getName()).build();
// Protocol Layer
- List<LayerProtocolName> layerProtocols = Arrays.asList(LayerProtocolName.PHOTONICMEDIA);
+ Set<LayerProtocolName> layerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
// Empty random creation of mandatory fields for avoiding errors....
CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
.setCostAlgorithm("Restricted Shortest Path - RSP")
.setCostName("HOP_COUNT")
- .setCostValue("12345678")
+ .setCostValue(TapiStringConstants.COST_HOP_VALUE)
.build();
LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
- .setFixedLatencyCharacteristic("12345678")
- .setQueingLatencyCharacteristic("12345678")
- .setJitterCharacteristic("12345678")
- .setWanderCharacteristic("12345678")
+ .setFixedLatencyCharacteristic(TapiStringConstants.COST_HOP_VALUE)
+ .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
+ .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
+ .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
.setTrafficPropertyName("FIXED_LATENCY")
.build();
+ RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
+ .setRiskCharacteristicName("risk characteristic")
+ .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
+ .build();
+ RiskParameterPac riskParamPac = new RiskParameterPacBuilder()
+ .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+ .build();
+ Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap
+ = tapiFactory.createAllNodeRuleGroupForRdmNode(topologicalMode, nodeUuid, orNodeId, onepMap.values());
+ Map<InterRuleGroupKey, InterRuleGroup> interRuleGroupMap
+ = tapiFactory.createInterRuleGroupForRdmNode(topologicalMode, nodeUuid, orNodeId,
+ nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList()));
return new NodeBuilder()
.setUuid(nodeUuid)
- .setName(Map.of(nodeNames.key(), nodeNames))
+ .setName(Map.of(nodeNames.key(), nodeNames, nameNodeType.key(), nameNodeType))
.setLayerProtocolName(layerProtocols)
.setAdministrativeState(AdministrativeState.UNLOCKED)
.setOperationalState(OperationalState.ENABLED)
.setLifecycleState(LifecycleState.INSTALLED)
- .setOwnedNodeEdgePoint(oneplist)
- .setNodeRuleGroup(createNodeRuleGroupForRdmNode(orNodeId, nodeUuid, oneplist.values()))
+ .setOwnedNodeEdgePoint(onepMap)
+ .setNodeRuleGroup(nodeRuleGroupMap)
+ .setInterRuleGroup(interRuleGroupMap)
.setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
.setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
.setErrorCharacteristic("error")
.setDeliveryOrderCharacteristic("delivery order")
.setUnavailableTimeCharacteristic("unavailable time")
.setServerIntegrityProcessCharacteristic("server integrity process")
+ .setRiskParameterPac(riskParamPac)
.build();
}
- private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(String orNodeId, Uuid nodeUuid,
- Collection<OwnedNodeEdgePoint> onepl) {
- Map<NodeEdgePointKey, NodeEdgePoint>
- nepMap = new HashMap<>();
- for (OwnedNodeEdgePoint onep : onepl) {
- NodeEdgePoint nep = new NodeEdgePointBuilder()
- .setTopologyUuid(this.tapiTopoUuid)
- .setNodeUuid(nodeUuid)
- .setNodeEdgePointUuid(onep.key().getUuid())
- .build();
- nepMap.put(nep.key(), nep);
- }
- Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap = new HashMap<>();
- Map<RuleKey, Rule> ruleList = new HashMap<>();
- Rule rule = new RuleBuilder()
- .setLocalId("forward")
- .setForwardingRule(ForwardingRule.MAYFORWARDACROSSGROUP)
- .setRuleType(RuleType.FORWARDING)
- .build();
- ruleList.put(rule.key(), rule);
- NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
- .setUuid(new Uuid(UUID.nameUUIDFromBytes((orNodeId + " node rule group")
- .getBytes(Charset.forName("UTF-8"))).toString()))
- .setRule(ruleList)
- .setNodeEdgePoint(nepMap)
+ private OduSwitchingPools createTpdrSwitchPool(List<Mapping> xpdrNetMaps) {
+ Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
+ int count = 1;
+ for (int i = 1; i <= xpdrNetMaps.size(); i++) {
+ LOG.info("XPDr net LCP = {}", xpdrNetMaps.get(i - 1).getLogicalConnectionPoint());
+ LOG.info("XPDr net associated LCP = {}", xpdrNetMaps.get(i - 1).getConnectionMapLcp());
+ TpId tpid1 = new TpId(xpdrNetMaps.get(i - 1).getLogicalConnectionPoint());
+ TpId tpid2 = new TpId(xpdrNetMaps.get(i - 1).getConnectionMapLcp());
+ Set<TpId> tpList = new HashSet<>();
+ tpList.add(tpid1);
+ tpList.add(tpid2);
+ NonBlockingList nbl = new NonBlockingListBuilder()
+ .setNblNumber(Uint16.valueOf(count))
+ .setTpList(tpList)
.build();
- nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
- return nodeRuleGroupMap;
- }
-
- private Map<LinkKey, Link> createTapiTransitionalLinks(String nodeId, List<Mapping> xpdrNetMaps, Uuid nodeUuidDsr,
- Uuid nodeUuidOtsi) {
- Map<LinkKey, Link> linkMap = new HashMap<>();
- for (Mapping mapping : xpdrNetMaps) {
- Link transiLink = tapiLink.createTapiLink(nodeId, mapping.getLogicalConnectionPoint(), nodeId,
- mapping.getLogicalConnectionPoint(), TapiStringConstants.TRANSITIONAL_LINK, TapiStringConstants.DSR,
- TapiStringConstants.OTSI, TapiStringConstants.I_ODU, TapiStringConstants.I_OTSI,
- "inService", "inService", Arrays.asList(LayerProtocolName.ODU,
- LayerProtocolName.PHOTONICMEDIA),
- Arrays.asList(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()),
- this.tapiTopoUuid);
- linkMap.put(transiLink.key(), transiLink);
+ nblMap.put(nbl.key(), nbl);
+ count++;
}
- // return a map of links and then we can do merge the corresponding link map into the topology context
- return linkMap;
- }
-
- private OduSwitchingPools createTpdrSwitchPool() {
- return new OduSwitchingPoolsBuilder().build();
+ return new OduSwitchingPoolsBuilder()
+ .setNonBlockingList(nblMap)
+ .setSwitchingPoolNumber(Uint16.valueOf(1))
+ .build();
}
private OduSwitchingPools createSwtchSwitchPool(List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps,
Integer xpdrNb) {
- List<TpId> tpl = new ArrayList<>();
+ Set<TpId> tpl = new HashSet<>();
TpId tpId = null;
for (int i = 1; i <= xpdrClMaps.size(); i++) {
tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i);
private OduSwitchingPools createMuxSwitchPool(List<Mapping> xpdrClMaps, List<Mapping> xpdrNetMaps, Integer xpdrNb) {
Map<NonBlockingListKey, NonBlockingList> nbMap = new HashMap<>();
for (int i = 1; i <= xpdrClMaps.size(); i++) {
- List<TpId> tpList = new ArrayList<>();
+ Set<TpId> tpList = new HashSet<>();
TpId tpId = new TpId("XPDR" + xpdrNb + TapiStringConstants.CLIENT + i);
tpList.add(tpId);
tpId = new TpId("XPDR" + xpdrNb + "-NETWORK1");
.build();
}
- private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForOtsiNode(String nodeId,
- List<Mapping> xpdrNetMaps,
- Map<RuleKey, Rule> ruleList) {
- Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap = new HashMap<>();
- // create NodeRuleGroup
- int count = 1;
- for (Mapping tpMapping : xpdrNetMaps) {
- Map<NodeEdgePointKey, NodeEdgePoint> nepList = new HashMap<>();
- NodeEdgePoint inep = new NodeEdgePointBuilder()
- .setTopologyUuid(this.tapiTopoUuid)
- .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
- TapiStringConstants.OTSI)).getBytes(Charset.forName("UTF-8"))).toString()))
- .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
- TapiStringConstants.I_OTSI, tpMapping.getLogicalConnectionPoint()))
- .getBytes(Charset.forName("UTF-8"))).toString()))
- .build();
- NodeEdgePoint enep = new NodeEdgePointBuilder()
- .setTopologyUuid(this.tapiTopoUuid)
- .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
- TapiStringConstants.OTSI)).getBytes(Charset.forName("UTF-8"))).toString()))
- .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
- (String.join("+", nodeId, TapiStringConstants.E_OTSI,
- tpMapping.getLogicalConnectionPoint())).getBytes(Charset.forName("UTF-8"))).toString()))
- .build();
- nepList.put(inep.key(), inep);
- nepList.put(enep.key(), enep);
- // Empty random creation of mandatory fields for avoiding errors....
- CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
- .setCostAlgorithm("Restricted Shortest Path - RSP")
- .setCostName("HOP_COUNT")
- .setCostValue("12345678")
- .build();
- LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
- .setFixedLatencyCharacteristic("12345678")
- .setQueingLatencyCharacteristic("12345678")
- .setJitterCharacteristic("12345678")
- .setWanderCharacteristic("12345678")
- .setTrafficPropertyName("FIXED_LATENCY")
- .build();
- RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
- .setRiskCharacteristicName("risk characteristic")
- .setRiskIdentifierList(List.of("risk identifier1", "risk identifier2"))
- .build();
- NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
- .setUuid(new Uuid(
- UUID.nameUUIDFromBytes(("otsi node rule group " + count).getBytes(Charset.forName("UTF-8")))
- .toString()))
- .setRule(ruleList)
- .setNodeEdgePoint(nepList)
- .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
- .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
- .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
- .build();
- nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
- count++;
- }
- return nodeRuleGroupMap;
- }
-
private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForDsrNode(String nodeId,
- OduSwitchingPools oorOduSwitchingPool,
- Map<RuleKey, Rule> ruleList,
- Map<OwnedNodeEdgePointKey,
- OwnedNodeEdgePoint> onepl) {
+ OduSwitchingPools oorOduSwitchingPool, Map<RuleKey, Rule> ruleList,
+ Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl) {
// create NodeRuleGroup
if (oorOduSwitchingPool == null) {
- LOG.info("TPDR node --> no switching pool");
+ LOG.info("No switching pool created for node = {}", nodeId);
return new HashMap<>();
}
- LOG.info("ONEPL = {}", onepl.values());
+ LOG.debug("ONEPL = {}", onepl.values());
Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap = new HashMap<>();
int count = 1;
for (NonBlockingList nbl : oorOduSwitchingPool.nonnullNonBlockingList().values()) {
LOG.info("EDOU TP = {}", String.join("+", nodeId, TapiStringConstants.E_ODU, tp.getValue()));
LOG.info("DSR TP = {}", String.join("+", nodeId, TapiStringConstants.DSR, tp.getValue()));
Uuid tpUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
- TapiStringConstants.E_ODU, tp.getValue())).getBytes(Charset.forName("UTF-8"))).toString());
+ TapiStringConstants.E_ODU, tp.getValue())).getBytes(StandardCharsets.UTF_8)).toString());
Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
- TapiStringConstants.DSR, tp.getValue())).getBytes(Charset.forName("UTF-8"))).toString());
+ TapiStringConstants.DSR, tp.getValue())).getBytes(StandardCharsets.UTF_8)).toString());
if (onepl.containsKey(new OwnedNodeEdgePointKey(tpUuid))
&& onepl.containsKey(new OwnedNodeEdgePointKey(tp1Uuid))) {
NodeEdgePoint nep1 = new NodeEdgePointBuilder()
.setTopologyUuid(this.tapiTopoUuid)
.setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
(String.join("+", nodeId,TapiStringConstants. DSR))
- .getBytes(Charset.forName("UTF-8"))).toString()))
+ .getBytes(StandardCharsets.UTF_8)).toString()))
.setNodeEdgePointUuid(tp1Uuid)
.build();
NodeEdgePoint nep2 = new NodeEdgePointBuilder()
.setTopologyUuid(this.tapiTopoUuid)
.setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
(String.join("+", nodeId,TapiStringConstants. DSR))
- .getBytes(Charset.forName("UTF-8"))).toString()))
+ .getBytes(StandardCharsets.UTF_8)).toString()))
.setNodeEdgePointUuid(tpUuid)
.build();
nepList.put(nep1.key(), nep1);
CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
.setCostAlgorithm("Restricted Shortest Path - RSP")
.setCostName("HOP_COUNT")
- .setCostValue("12345678")
+ .setCostValue(TapiStringConstants.COST_HOP_VALUE)
.build();
LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
- .setFixedLatencyCharacteristic("12345678")
- .setQueingLatencyCharacteristic("12345678")
- .setJitterCharacteristic("12345678")
- .setWanderCharacteristic("12345678")
+ .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
+ .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
+ .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
+ .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
.setTrafficPropertyName("FIXED_LATENCY")
.build();
RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder()
.setRiskCharacteristicName("risk characteristic")
- .setRiskIdentifierList(List.of("risk identifier1", "risk identifier2"))
+ .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2"))
.build();
NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
.setUuid(new Uuid(
- UUID.nameUUIDFromBytes(("dsr node rule group " + count).getBytes(Charset.forName("UTF-8")))
+ UUID.nameUUIDFromBytes(("dsr node rule group " + count).getBytes(StandardCharsets.UTF_8))
.toString()))
.setRule(ruleList)
.setNodeEdgePoint(nepList)
return nodeRuleGroupMap;
}
- private List<Class<? extends LAYERPROTOCOLQUALIFIER>> createSupportedLayerProtocolQualifier(
- List<Class<? extends SupportedIfCapability>> sicList, LayerProtocolName lpn) {
- if (sicList == null) {
- return List.of(PHOTONICLAYERQUALIFIEROMS.class);
- }
- Map<SupportedInterfaceCapabilityKey, SupportedInterfaceCapability> supIfMap = new HashMap<>();
- LOG.info("SIC list = {}", sicList);
- for (Class<? extends SupportedIfCapability> supInterCapa : sicList) {
- SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
- .withKey(new SupportedInterfaceCapabilityKey(convertSupIfCapa(supInterCapa)))
- .setIfCapType(convertSupIfCapa(supInterCapa))
- .build();
- supIfMap.put(supIfCapa.key(), supIfCapa);
- }
- List<Class<? extends LAYERPROTOCOLQUALIFIER>> sclpqList = new ArrayList<>();
- for (SupportedInterfaceCapability sic : supIfMap.values()) {
- switch (lpn.getName()) {
- case "DSR":
- switch (sic.getIfCapType().getSimpleName()) {
- // TODO: it may be needed to add more cases clauses if the interface capabilities of a
- // port are extended in the config file
- case "If1GEODU0":
- sclpqList.add(ODUTYPEODU0.class);
- sclpqList.add(DIGITALSIGNALTYPEGigE.class);
- break;
- case "If10GEODU2e":
- sclpqList.add(ODUTYPEODU2E.class);
- sclpqList.add(DIGITALSIGNALTYPE10GigELAN.class);
- break;
- case "If10GEODU2":
- sclpqList.add(ODUTYPEODU2.class);
- sclpqList.add(DIGITALSIGNALTYPE10GigELAN.class);
- break;
- case "If10GE":
- sclpqList.add(DIGITALSIGNALTYPE10GigELAN.class);
- break;
- case "If100GEODU4":
- sclpqList.add(DIGITALSIGNALTYPE100GigE.class);
- sclpqList.add(ODUTYPEODU4.class);
- break;
- case "If100GE":
- sclpqList.add(DIGITALSIGNALTYPE100GigE.class);
- break;
- case "IfOCHOTU4ODU4":
- case "IfOCH":
- sclpqList.add(ODUTYPEODU4.class);
- break;
- default:
- LOG.error("IfCapability type not managed");
- break;
- }
- break;
- case "ODU":
- switch (sic.getIfCapType().getSimpleName()) {
- // TODO: it may be needed to add more cases clauses if the interface capabilities of a
- // port are extended in the config file
- case "If1GEODU0":
- sclpqList.add(ODUTYPEODU0.class);
- break;
- case "If10GEODU2e":
- sclpqList.add(ODUTYPEODU2E.class);
- break;
- case "If10GEODU2":
- case "If10GE":
- sclpqList.add(ODUTYPEODU2.class);
- break;
- case "If100GEODU4":
- case "If100GE":
- case "IfOCHOTU4ODU4":
- case "IfOCH":
- sclpqList.add(ODUTYPEODU4.class);
- break;
- default:
- LOG.error("IfCapability type not managed");
- break;
- }
- break;
- case "PHOTONIC_MEDIA":
- if (sic.getIfCapType().getSimpleName().equals("IfOCHOTU4ODU4")
- || sic.getIfCapType().getSimpleName().equals("IfOCH")) {
- sclpqList.add(PHOTONICLAYERQUALIFIEROTSi.class);
- sclpqList.add(PHOTONICLAYERQUALIFIEROMS.class);
- }
- break;
- default:
- LOG.error("Layer Protocol Name is unknown {}", lpn.getName());
- break;
- }
- }
- return sclpqList;
- }
-
- private static Class<? extends SupportedIfCapability> convertSupIfCapa(Class<? extends
- SupportedIfCapability> ifCapType) {
- LOG.info("Interface Capability type = {}", ifCapType.getSimpleName());
- switch (ifCapType.getSimpleName()) {
- case "If100GEODU4":
- return If100GEODU4.class;
- case "IfOCHOTU4ODU4":
- return IfOCHOTU4ODU4.class;
- case "If1GEODU0":
- return If1GEODU0.class;
- case "If10GEODU2e":
- return If10GEODU2e.class;
- case "If10GEODU2":
- return If10GEODU2.class;
- case "If100GE":
- return If100GE.class;
- case "If10GE":
- return If10GE.class;
- case "If1GE":
- return If1GE.class;
- case "IfOCH":
- return IfOCH.class;
+ private String getNodeType(XpdrNodeTypes xponderType) {
+ switch (xponderType.getIntValue()) {
+ case 1:
+ return OpenroadmNodeType.TPDR.getName();
+ case 2:
+ return OpenroadmNodeType.MUXPDR.getName();
+ case 3:
+ return OpenroadmNodeType.SWITCH.getName();
default:
- return null;
+ LOG.info("XpdrType {} not supported", xponderType);
+ break;
}
+ return null;
}
private void mergeNodeinTopology(Map<NodeKey, Node> nodeMap) {
private void updateConnectivityServicesState(Uuid sipUuid, String nodeId) {
// TODO: check if this IID is correct
InstanceIdentifier<ConnectivityContext> connectivitycontextIID = InstanceIdentifier.builder(Context.class)
- .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+ .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
.child(ConnectivityContext.class)
.build();
ConnectivityContext connContext = null;
LOG.error("Couldnt retrieve connectivity context from datastore");
return;
}
- connContext = optConnContext.get();
+ connContext = optConnContext.orElseThrow();
} catch (InterruptedException | ExecutionException e) {
LOG.error("Couldnt read connectivity context from datastore", e);
}
private void updateConnection(Connection updConn) {
// TODO: check if this IID is correct
InstanceIdentifier<Connection> connectionIID = InstanceIdentifier.builder(Context.class)
- .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+ .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
.child(ConnectivityContext.class).child(Connection.class,
new ConnectionKey(updConn.getUuid())).build();
this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, connectionIID, updConn);
private void updateConnectivityService(ConnectivityService updService) {
// TODO: check if this IID is correct
InstanceIdentifier<ConnectivityService> connectivityserviceIID = InstanceIdentifier.builder(Context.class)
- .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+ .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
.child(ConnectivityContext.class).child(ConnectivityService.class,
new ConnectivityServiceKey(updService.getUuid())).build();
this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, connectivityserviceIID, updService);
}
}
+ private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> populateNepsForRdmNode(String nodeId,
+ Map<String, TerminationPoint1> tpMap, boolean withSip, String nepPhotonicSublayer) {
+ // create neps for MC and and Photonic Media OTS/OMS
+ Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
+ for (Map.Entry<String, TerminationPoint1> entry : tpMap.entrySet()) {
+ // Admin and oper state common for all tps
+ OpenroadmTpType tpType = entry.getValue().getTpType();
+ // PHOTONIC MEDIA nep
+ LOG.debug("PHOTO NEP = {}", String.join("+", nodeId, nepPhotonicSublayer,
+ entry.getKey()));
+ SupportedCepLayerProtocolQualifierInstancesBuilder sclpqiBd =
+ new SupportedCepLayerProtocolQualifierInstancesBuilder()
+ .setNumberOfCepInstances(Uint64.valueOf(1));
+ switch (nepPhotonicSublayer) {
+ case TapiStringConstants.PHTNC_MEDIA_OMS:
+ sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE);
+ break;
+ case TapiStringConstants.PHTNC_MEDIA_OTS:
+ sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE);
+ break;
+ case TapiStringConstants.MC:
+ sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIERMC.VALUE);
+ break;
+ case TapiStringConstants.OTSI_MC:
+ sclpqiBd.setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE);
+ break;
+ default:
+ break;
+ }
+
+ List<SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>(List.of(sclpqiBd.build()));
+ OwnedNodeEdgePointBuilder onepBd = new OwnedNodeEdgePointBuilder();
+ if (!nepPhotonicSublayer.equals(TapiStringConstants.MC)
+ && !nepPhotonicSublayer.equals(TapiStringConstants.OTSI_MC)) {
+ Map<Double,Double> usedFreqMap = new HashMap<>();
+ Map<Double,Double> availableFreqMap = new HashMap<>();
+ switch (tpType) {
+ // Whatever is the TP and its type we consider that it is handled in a bidirectional way :
+ // same wavelength(s) used in both direction.
+ case SRGRXPP:
+ case SRGTXPP:
+ case SRGTXRXPP:
+ usedFreqMap = tapiFactory.getPP11UsedWavelength(
+ getNetworkTerminationPoint11FromDatastore(nodeId, entry.getKey()));
+ if (usedFreqMap == null || usedFreqMap.isEmpty()) {
+ availableFreqMap.put(GridConstant.START_EDGE_FREQUENCY * 1E09,
+ GridConstant.START_EDGE_FREQUENCY * 1E09
+ + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06);
+ } else {
+ LOG.debug("EnteringLOOPcreateOTSiMC & MC with usedFreqMap non empty {} for Node {}, tp {}",
+ usedFreqMap.toString(), nodeId, tpMap.toString());
+ onepMap.putAll(populateNepsForRdmNode(nodeId,
+ new HashMap<>(Map.of(entry.getKey(), entry.getValue())),
+ true, TapiStringConstants.MC));
+ onepMap.putAll(populateNepsForRdmNode(nodeId,
+ new HashMap<>(Map.of(entry.getKey(), entry.getValue())),
+ true, TapiStringConstants.OTSI_MC));
+ }
+ break;
+ case DEGREERXTTP:
+ case DEGREETXTTP:
+ case DEGREETXRXTTP:
+ usedFreqMap = tapiFactory.getTTP11UsedFreqMap(
+ getNetworkTerminationPoint11FromDatastore(nodeId, entry.getKey()));
+ availableFreqMap = tapiFactory.getTTP11AvailableFreqMap(
+ getNetworkTerminationPoint11FromDatastore(nodeId, entry.getKey()));
+ break;
+ default:
+ break;
+ }
+ LOG.debug("calling add Photonic NEP spec for Roadm");
+ onepBd = tapiFactory.addPhotSpecToRoadmOnep(nodeId, usedFreqMap, availableFreqMap, onepBd,
+ nepPhotonicSublayer);
+ }
+ AdminStates admin = entry.getValue().getAdministrativeState();
+ State oper = entry.getValue().getOperationalState();
+ Name nepName = new NameBuilder()
+ .setValueName(nepPhotonicSublayer + "NodeEdgePoint")
+ .setValue(String.join("+", nodeId, nepPhotonicSublayer,
+ entry.getKey()))
+ .build();
+ OwnedNodeEdgePoint onep = onepBd
+ .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
+ nepPhotonicSublayer, entry.getKey()))
+ .getBytes(Charset.forName("UTF-8"))).toString()))
+ .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
+ .setName(Map.of(nepName.key(), nepName))
+ .setSupportedCepLayerProtocolQualifierInstances(sclpqiList)
+ .setDirection(Direction.BIDIRECTIONAL)
+ .setLinkPortRole(PortRole.SYMMETRIC)
+ .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName()))
+ .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName()))
+ .setLifecycleState(LifecycleState.INSTALLED)
+ .build();
+ LOG.debug("ROADMNEPPopulation TapiNetworkModelServiceImpl populate NEP {} for Node {}",
+ onep.getName().entrySet(), nodeId);
+ onepMap.put(onep.key(), onep);
+ }
+ LOG.debug("ROADMNEPPopulation FINISH for Node {}", nodeId);
+ return onepMap;
+ }
+
+ /**
+ * Get a network termination point for nodeId and tpId.
+ * @param nodeId String
+ * @param tpId String
+ * @return network termination point, null otherwise
+ */
+ private TerminationPoint getNetworkTerminationPointFromDatastore(String nodeId, String tpId) {
+ InstanceIdentifier<TerminationPoint> tpIID = InstanceIdentifier.builder(Networks.class)
+ .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+ .networks.network.Node.class,
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+ .networks.network.NodeKey(new NodeId(nodeId)))
+ .augmentation(Node1.class)
+ .child(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .networks.network.node.TerminationPoint.class,
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .networks.network.node.TerminationPointKey(new TpId(tpId)))
+ .build();
+ try {
+ Optional<TerminationPoint> tpOptional =
+ networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, tpIID).get();
+ if (tpOptional.isEmpty()) {
+ LOG.error("readMdSal: Error reading tp {} , empty list",tpIID);
+ return null;
+ }
+ LOG.debug("SUCCES getting LCP TP for NodeId {} TpId {} while creating NEP in TapiNetworkModelServiceImpl",
+ nodeId, tpId);
+ LOG.debug(" The Tp in Datastore is as follows {}", tpOptional);
+ return tpOptional.orElseThrow();
+ } catch (ExecutionException | InterruptedException e) {
+ LOG.warn("Exception while getting termination {} for node id {} point from {} topology",
+ tpId, nodeId, NetworkUtils.OVERLAY_NETWORK_ID, e);
+ return null;
+ }
+ }
+
+ /**
+ * Get a network termination point with Common TerminationPoint1 augmentation for nodeId and tpId.
+ * @param nodeId String
+ * @param tpId String
+ * @return network termination point, null otherwise
+ */
+ private TerminationPoint1 getNetworkTerminationPoint1FromDatastore(String nodeId, String tpId) {
+ InstanceIdentifier<TerminationPoint1> tpIID = InstanceIdentifier.builder(Networks.class)
+ .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+ .networks.network.Node.class,
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+ .networks.network.NodeKey(new NodeId(nodeId)))
+ .augmentation(Node1.class)
+ .child(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .networks.network.node.TerminationPoint.class,
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .networks.network.node.TerminationPointKey(new TpId(tpId)))
+ .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
+ .TerminationPoint1.class)
+ .build();
+ try {
+ Optional<TerminationPoint1> tpOptional =
+ networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, tpIID).get();
+ if (tpOptional.isEmpty()) {
+ LOG.error("readMdSal: Error reading tp {} , empty list",tpIID);
+ return null;
+ }
+ LOG.debug("SUCCES getting LCP TP1 for NodeId {} TpId {} while creating NEP in TapiNetworkModelServiceImpl",
+ nodeId, tpId);
+ LOG.debug(" The Tp in Datastore is as follows {}", tpOptional);
+ return tpOptional.orElseThrow();
+ } catch (ExecutionException | InterruptedException e) {
+ LOG.warn("Exception while getting termination {} for node id {} point from {} topology",
+ tpId, nodeId, NetworkUtils.OVERLAY_NETWORK_ID, e);
+ return null;
+ }
+ }
+
+ private org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1
+ getNetworkTerminationPoint11FromDatastore(String nodeId, String tpId) {
+ InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1>
+ tpIID = InstanceIdentifier.builder(Networks.class)
+ .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+ .child(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+ .networks.network.Node.class,
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+ .networks.network.NodeKey(new NodeId(nodeId)))
+ .augmentation(Node1.class)
+ .child(
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .networks.network.node.TerminationPoint.class,
+ new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+ .networks.network.node.TerminationPointKey(new TpId(tpId)))
+ .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1
+ .class)
+ .build();
+ try {
+ Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1>
+ tpOptional = networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, tpIID).get();
+ if (tpOptional.isEmpty()) {
+ LOG.error("readMdSal: Error reading tp {} , empty list",tpIID);
+ return null;
+ }
+ LOG.debug("SUCCESS getting LCP TP11 for NodeId {} TpId {} while creating NEP in TapiNetworkModelServiceImpl"
+ + " The Tp in Datastore is as follows {}",
+ nodeId, tpId, tpOptional.toString());
+ return tpOptional.orElseThrow();
+ } catch (ExecutionException | InterruptedException e) {
+ LOG.warn("Exception while getting termination {} for node id {} point from {} topology",
+ tpId, nodeId, NetworkUtils.OVERLAY_NETWORK_ID, e);
+ return null;
+ }
+ }
+
}