Add perltidy to pre-commit linters 82/111382/4 master
authorguillaume.lambert <guillaume.lambert@orange.com>
Sun, 14 Apr 2024 18:36:35 +0000 (20:36 +0200)
committerGuillaume Lambert <guillaume.lambert@orange.com>
Wed, 17 Apr 2024 07:16:55 +0000 (07:16 +0000)
Signed-off-by: guillaume.lambert <guillaume.lambert@orange.com>
Change-Id: Ie20eb4bc885383deb304363eb8053f8161b3ada1

482 files changed:
.pre-commit-config.yaml
api/pom.xml
api/src/main/yang/nbi-notifications@2023-07-28.yang [moved from api/src/main/yang/nbi-notifications@2021-10-13.yang with 81% similarity]
api/src/main/yang/service_path/transportpce-common-types@2023-05-01.yang [moved from api/src/main/yang/service_path/transportpce-common-types@2022-09-26.yang with 87% similarity]
api/src/main/yang/service_path/transportpce-pathDescription@2023-05-01.yang [moved from api/src/main/yang/service_path/transportpce-pathDescription@2021-07-05.yang with 80% similarity]
api/src/main/yang/service_path/transportpce-pce@2024-02-05.yang [moved from api/src/main/yang/service_path/transportpce-pce@2022-08-08.yang with 89% similarity]
api/src/main/yang/tapi@2023-07-28.yang [moved from api/src/main/yang/tapi@2018-09-28.yang with 90% similarity]
api/src/main/yang/transportpce-networkutils@2022-06-30.yang
api/src/main/yang/transportpce-portmapping@2023-12-21.yang [moved from api/src/main/yang/transportpce-portmapping@2022-09-22.yang with 97% similarity]
api/src/main/yang/transportpce-stub@2023-02-28.yang
api/src/main/yang/transportpce-tapinetworkutils@2023-07-28.yang [moved from api/src/main/yang/transportpce-tapinetworkutils@2021-04-08.yang with 94% similarity]
artifacts/pom.xml
common/pom.xml
common/src/main/java/org/opendaylight/transportpce/common/InstanceIdentifiers.java
common/src/main/java/org/opendaylight/transportpce/common/catalog/CatalogUtils.java
common/src/main/java/org/opendaylight/transportpce/common/catalog/PenaltiesComparator.java
common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java
common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl.java
common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl121.java
common/src/main/java/org/opendaylight/transportpce/common/crossconnect/CrossConnectImpl221.java
common/src/main/java/org/opendaylight/transportpce/common/fixedflex/GridUtils.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/MappingUtils.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/MappingUtilsImpl.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMapping.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingImpl.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion121.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion221.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion710.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/SortPort121ByName.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/SortPort221ByName.java
common/src/main/java/org/opendaylight/transportpce/common/mapping/SortPort710ByName.java
common/src/main/java/org/opendaylight/transportpce/common/network/RequestProcessor.java
common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfaceException.java
common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl221.java
common/src/main/java/org/opendaylight/transportpce/common/openroadminterfaces/OpenRoadmInterfacesImpl710.java
common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java
common/src/test/java/org/opendaylight/transportpce/common/catalog/CatalogUtilsTest.java
common/src/test/java/org/opendaylight/transportpce/common/fixedflex/GridUtilsTest.java
common/src/test/java/org/opendaylight/transportpce/common/mapping/MappingUtilsImplTest.java
common/src/test/java/org/opendaylight/transportpce/common/mapping/PortMappingImplTest.java
common/src/test/java/org/opendaylight/transportpce/common/mapping/PortMappingVersion121Test.java
common/src/test/java/org/opendaylight/transportpce/common/service/ServiceTypeTest.java
common/src/test/resources/apidocCatalog12_0-OptSpecV5_1.json [moved from common/src/test/resources/apidocCatalog10_1OptSpecV5_1.json with 87% similarity]
common/src/test/resources/expected_string.json
debug_tools/netconf_TCP_SSH_hijackingproxy.pl
debug_tools/netconf_terminal.pl
dmaap-client/pom.xml
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/impl/DmaapClientProvider.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsHandler.java [moved from dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsListenerImpl.java with 63% similarity]
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/EventsApi.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/LgxSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/PortSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/PublishNotificationProcessServiceModule.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/PublishNotificationProcessServiceSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/RxDirectionSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/ServiceAEndSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/ServiceZEndSerializer.java
dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/resource/config/TxDirectionSerializer.java
dmaap-client/src/test/java/org/opendaylight/transportpce/dmaap/client/impl/DmaapClientProviderTest.java
dmaap-client/src/test/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsHandlerTest.java [moved from dmaap-client/src/test/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsListenerImplTest.java with 84% similarity]
docs/conf.py
docs/tox-guide.rst
features/features-transportpce/pom.xml
features/odl-transportpce-dmaap-client/pom.xml
features/odl-transportpce-inventory/pom.xml
features/odl-transportpce-nbinotifications/pom.xml
features/odl-transportpce-swagger/pom.xml [deleted file]
features/odl-transportpce-tapi/pom.xml
features/odl-transportpce/pom.xml
features/pom.xml
inventory/pom.xml
inventory/src/main/java/org/opendaylight/transportpce/inventory/INode.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/INode121.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/INode221.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/listener/ClliNetworkChangeListener.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/listener/DeviceConfigListener.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/listener/DeviceListener.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/listener/OverlayNetworkChangeListener.java
inventory/src/main/java/org/opendaylight/transportpce/inventory/listener/UnderlayNetworkChangeListener.java
inventory/src/main/resources/org.ops4j.datasource-transporpce.cfg
karaf/pom.xml
karaf/src/main/assembly/ressources/post_install_for_tests.sh
lighty/build.sh
lighty/build_lighty_core.sh
lighty/pom.xml
lighty/src/main/java/io/lighty/controllers/tpce/Main.java
lighty/src/main/java/io/lighty/controllers/tpce/exception/TechnicalException.java
lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java
lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java
nbinotifications/pom.xml
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java [deleted file]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsProvider.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/CreateNotificationSubscriptionServiceImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/DeleteNotificationSubscriptionServiceImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationListImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationSubscriptionServiceDetailsImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationSubscriptionServiceListImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationsAlarmServiceImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationsProcessServiceImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetSupportedNotificationTypesImpl.java [new file with mode: 0644]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsHandler.java [moved from nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImpl.java with 64% similarity]
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceDeserializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceSerializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceDeserializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceSerializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationDeserializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/serialization/TapiNotificationSerializer.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/NbiNotificationsUtils.java
nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/TopicManager.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/consumer/SubscriberTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsProviderTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsHandlerTest.java [moved from nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImplTest.java with 80% similarity]
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/producer/PublisherTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceDeserializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationAlarmServiceSerializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceDeserializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationServiceSerializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceDeserializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceSerializerTest.java
nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java
nbinotifications/src/test/resources/event.json
nbinotifications/src/test/resources/expected_event.json
nbinotifications/src/test/resources/expected_tapi_event.json
nbinotifications/src/test/resources/tapi_event.json
networkmodel/pom.xml
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetConfTopologyListener.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkModelProvider.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/OrdLink.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/R2RLinkDiscovery.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/NodeRegistration.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/dto/OtnTopoNode.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/AlarmNotificationListener.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/AlarmNotificationListener221.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/AlarmNotificationListener710.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/DeOperationsListener.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/DeOperationsListener221.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/DeOperationsListener710.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/DeviceListener121.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/DeviceListener221.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/DeviceListener710.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/LldpListener.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/LldpListener221.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/LldpListener710.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/PortMappingListener.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/ServiceHandlerListener.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/TcaListener.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/TcaListener221.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/listeners/TcaListener710.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/FrequenciesService.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/FrequenciesServiceImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/ClliNetwork.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmNetwork.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopology.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopology.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/TopologyUtils.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/util/TpceNetwork.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetConfTopologyListenerTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkModelProviderTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java [new file with mode: 0644]
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/listeners/DeviceListener121Test.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/listeners/DeviceListener221Test.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/listeners/DeviceListener710Test.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/listeners/PortMappingListenerTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/service/FrequenciesServiceTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/ClliNetworkTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmNetworkTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmOtnTopologyTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/OpenRoadmTopologyTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/TpceNetworkTest.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/JsonUtil.java
networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/util/test/NetworkmodelTestUtil.java
networkmodel/src/test/resources/openroadm-topology.xml
olm/pom.xml
olm/src/main/java/org/opendaylight/transportpce/olm/OlmPowerServiceRpcImpl.java
olm/src/main/java/org/opendaylight/transportpce/olm/OlmProvider.java [deleted file]
olm/src/main/java/org/opendaylight/transportpce/olm/power/PowerMgmtImpl.java
olm/src/main/java/org/opendaylight/transportpce/olm/power/PowerMgmtVersion710.java
olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/CalculateSpanlossBaseImpl.java [new file with mode: 0644]
olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/CalculateSpanlossCurrentImpl.java [new file with mode: 0644]
olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/GetPmImpl.java [new file with mode: 0644]
olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerResetImpl.java [new file with mode: 0644]
olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerSetupImpl.java [new file with mode: 0644]
olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerTurndownImpl.java [new file with mode: 0644]
olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java
olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils.java
olm/src/test/java/org/opendaylight/transportpce/olm/OlmPowerServiceRpcImplTest.java
olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtPowerMockTest.java [deleted file]
olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtTest.java
olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplSpanLossBaseTest.java
olm/src/test/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImplTest.java
olm/src/test/java/org/opendaylight/transportpce/olm/stub/MountPointServiceStub.java [deleted file]
olm/src/test/java/org/opendaylight/transportpce/olm/stub/MountPointStub.java [deleted file]
olm/src/test/java/org/opendaylight/transportpce/olm/stub/OlmServiceStub.java [deleted file]
olm/src/test/java/org/opendaylight/transportpce/olm/util/OlmPowerServiceRpcImplUtil.java
olm/src/test/java/org/opendaylight/transportpce/olm/util/OlmTransactionUtils.java
olm/src/test/java/org/opendaylight/transportpce/olm/util/OtsPmHolderTest.java
olm/src/test/java/org/opendaylight/transportpce/olm/util/TransactionUtils.java
pce/pom.xml
pce/src/main/java/org/opendaylight/transportpce/pce/PceComplianceCheck.java
pce/src/main/java/org/opendaylight/transportpce/pce/PcePathDescription.java
pce/src/main/java/org/opendaylight/transportpce/pce/PceSendingPceRPCs.java
pce/src/main/java/org/opendaylight/transportpce/pce/SortPortsByName.java
pce/src/main/java/org/opendaylight/transportpce/pce/constraints/OperatorConstraints.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/constraints/PceConstraintsCalc.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyResult.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyServiceImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyTopoImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/utils/AToZComparator.java
pce/src/main/java/org/opendaylight/transportpce/pce/gnpy/utils/ZToAComparator.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/InAlgoPathValidator.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/PceGraph.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/PceGraphEdge.java
pce/src/main/java/org/opendaylight/transportpce/pce/graph/PostAlgoPathValidator.java
pce/src/main/java/org/opendaylight/transportpce/pce/impl/CancelResourceReserveImpl.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/impl/PathComputationRequestImpl.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/impl/PathComputationRerouteRequestImpl.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/impl/PceProvider.java [deleted file]
pce/src/main/java/org/opendaylight/transportpce/pce/impl/PceServiceRPCImpl.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/MapUtils.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNode.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceResult.java
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/ClientPreference.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/Factory.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/NoPreference.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/Preference.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/PreferenceFactory.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/service/PathComputationService.java
pce/src/main/java/org/opendaylight/transportpce/pce/service/PathComputationServiceImpl.java
pce/src/test/java/org/opendaylight/transportpce/pce/PcePathDescriptionTests.java
pce/src/test/java/org/opendaylight/transportpce/pce/PceSendingPceRPCsTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/constraints/OperatorConstraintsTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/gnpy/GnpyUtilitiesImplTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphEdgeTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/graph/PceGraphTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceProviderTest.java [deleted file]
pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceServiceRPCImplTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculationTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLinkTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOpticalNodeTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/PceOtnNodeTest.java
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/port/ClientPreferenceTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/port/PreferenceFactoryTest.java [new file with mode: 0644]
pce/src/test/java/org/opendaylight/transportpce/pce/utils/JsonUtil.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/NodeUtils.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestData.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/PceTestUtils.java
pce/src/test/java/org/opendaylight/transportpce/pce/utils/TransactionUtils.java
pce/src/test/resources/apidocCatalog12_0-OptSpecV5_1.json [moved from pce/src/test/resources/apidocCatalog10_1OptSpecV5_1.json with 87% similarity]
pce/src/test/resources/spectrum-filling-rule1.json [new file with mode: 0644]
pom.xml
renderer/pom.xml
renderer/src/main/java/org/opendaylight/transportpce/renderer/ModelMappingUtils.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java [deleted file]
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface121.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface221.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterface710.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmInterfaceFactory.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtnInterface221.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadmOtnInterface710.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererService.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperations.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/notification/Notification.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/notification/NotificationSender.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/servicepath/ServiceListTopology.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/DeviceRenderingTask.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/NetworkDeviceRenderingRollbackTask.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/OlmPowerSetupRollbackTask.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/OlmPowerSetupTask.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/OlmPowerTurnDownTask.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/ResultMessage.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/RollbackResultMessage.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/Connection.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/DeviceInterface.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/Transaction.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Delete.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/DeleteService.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/DeleteSubscriber.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/FailedRollbackResult.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Result.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Subscriber.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/History.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/NonStickHistoryMemory.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/TransactionHistory.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/CreateOtsOmsImpl.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/OtnServicePathImpl.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/RendererRPCImpl.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/RendererRollbackImpl.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServiceDeleteImpl.java [new file with mode: 0644]
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServiceImplementationRequestImpl.java [moved from renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/TransportPCEServicePathRPCImpl.java with 50% similarity]
renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServicePathImpl.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/RendererProviderTest.java [deleted file]
renderer/src/test/java/org/opendaylight/transportpce/renderer/openroadminterface/OpenRoadMInterface221Test.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImplCreateOtsOmsTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/ConnectionTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/DeviceInterfaceTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/TransactionHistoryTest.java [new file with mode: 0644]
renderer/src/test/java/org/opendaylight/transportpce/renderer/rpcs/DeviceRendererRPCImplTest.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java [deleted file]
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/MountPointUtils.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDataUtils.java
renderer/src/test/java/org/opendaylight/transportpce/renderer/utils/ServiceDeleteDataUtils.java
servicehandler/pom.xml
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/CatalogInput.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/DowngradeConstraints.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/ModelMappingUtils.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/ServiceInput.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/catalog/CatalogDataStoreOperations.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/catalog/CatalogDataStoreOperationsImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/catalog/CatalogMapper.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/AddOpenroadmOperationalModesToCatalogImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/AddSpecificOperationalModesToCatalogImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceCreateImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceDeleteImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceFeasibilityCheckImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceHandlerProvider.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceReconfigureImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceRerouteImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceRestorationImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProvider.java [deleted file]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/TempServiceCreateImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/TempServiceDeleteImpl.java [new file with mode: 0644]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelNotificationHandler.java [moved from servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImpl.java with 90% similarity]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceNotificationHandler.java [moved from servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceListenerImpl.java with 80% similarity]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererNotificationHandler.java [moved from servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java with 64% similarity]
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/ServiceListener.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/PCEServiceWrapper.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/RendererServiceWrapper.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperations.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/utils/CatalogDataUtils.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/CatalogValidation.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/ServiceCreateValidation.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/CheckCoherencyHardSoft.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheck.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerServiceResiliencyCheck.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheck.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/DowngradeConstraintsTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/ModelMappingUtilsTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServiceHandlerProviderTest.java [new file with mode: 0644]
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImplTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProviderTest.java [deleted file]
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelNotificationHandlerTest.java [moved from servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/listeners/NetworkModelListenerImplTest.java with 95% similarity]
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/listeners/ServiceListenerTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/service/PCEServiceWrapperTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/service/RendererServiceWrapperTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/service/ServiceDataStoreOperationsImplTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/utils/ConstraintsUtils.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/utils/ModelMappingUtils.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/utils/ServiceDataUtils.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/ServiceCreateValidationTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/CheckCoherencyServiceResiliencyTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerComplianceCheckTest.java
servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/validation/checks/ServicehandlerTxRxCheckTest.java
tapi/pom.xml
tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/TapiStringConstants.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImpl.java [deleted file]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/CreateConnectivityServiceImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/DeleteConnectivityServiceImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/DeleteTapiLinkImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectionDetailsImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectivityServiceDetailsImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectivityServiceListImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetLinkDetailsImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetNodeDetailsImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetNodeEdgePointDetailsImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetServiceInterfacePointDetailsImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetServiceInterfacePointListImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetTopologyDetailsImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetTopologyListImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/InitRoadmRoadmTapiLinkImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/InitXpdrRdmTapiLinkImpl.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelNotificationHandler.java [moved from tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelListenerImpl.java with 87% similarity]
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceListenerImpl.java [deleted file]
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceNotificationHandler.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererNotificationHandler.java [moved from tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererListenerImpl.java with 84% similarity]
tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiServiceNotificationHandler.java [moved from tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiServiceHandlerListenerImpl.java with 61% similarity]
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopo.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertTapiTopoToAbstracted.java [new file with mode: 0644]
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetconfTopologyListener.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelService.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkUtilsImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiPortMappingListener.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java [deleted file]
tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/GenericServiceEndpoint.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/MappingUtils.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiContext.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiInitialORMapping.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLink.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiListener.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/validation/CreateConnectivityServiceValidation.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/validation/checks/ConnConstraintCheck.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/validation/checks/EndPointCheck.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/validation/checks/ResilienceConstraintCheck.java
tapi/src/main/java/org/opendaylight/transportpce/tapi/validation/checks/TopoConstraintCheck.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImplTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/provider/TapiProviderTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToFullTapiTopoTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopoTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplExceptionTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TapiConnectivityDataUtils.java
tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TapiTopologyDataUtils.java
test-common/pom.xml
test-common/src/main/java/org/opendaylight/transportpce/test/AbstractDeviceTest.java
test-common/src/main/java/org/opendaylight/transportpce/test/DataStoreContextImpl.java
test-common/src/main/java/org/opendaylight/transportpce/test/DeviceWrapper.java
test-common/src/main/java/org/opendaylight/transportpce/test/converter/AbstractDataObjectConverter.java
test-common/src/main/java/org/opendaylight/transportpce/test/converter/DataObjectConverter.java
test-common/src/main/java/org/opendaylight/transportpce/test/converter/JSONDataObjectConverter.java
test-common/src/main/java/org/opendaylight/transportpce/test/converter/XMLDataObjectConverter.java
test-common/src/main/java/org/opendaylight/transportpce/test/stub/MountPointServiceStub.java
test-common/src/main/java/org/opendaylight/transportpce/test/stub/MountPointStub.java
test-common/src/main/java/org/opendaylight/transportpce/test/utils/TopologyDataUtils.java
tests/Xtesting/Dockerfile [new file with mode: 0644]
tests/Xtesting/INSTALL.txt [new file with mode: 0644]
tests/Xtesting/patch.diff [new file with mode: 0644]
tests/Xtesting/requirements.yml [new file with mode: 0644]
tests/Xtesting/site.yml [new file with mode: 0644]
tests/Xtesting/testcases.yaml [new file with mode: 0644]
tests/build_controller.sh
tests/build_karaf_for_tests.sh
tests/install_honeynode.sh
tests/install_lightynode.sh [new file with mode: 0755]
tests/install_sims.sh [new file with mode: 0755]
tests/lightynode/.gitkeep [new file with mode: 0644]
tests/requirements.txt
tests/sample_configs/honeynode-topo-3-RDM.json [new file with mode: 0644]
tests/sample_configs/openroadm/1.2.1/oper-ROADMA-full.xml
tests/sample_configs/openroadm/1.2.1/oper-ROADMA.xml
tests/sample_configs/openroadm/1.2.1/oper-ROADMB.xml
tests/sample_configs/openroadm/1.2.1/oper-ROADMC-full.xml
tests/sample_configs/openroadm/1.2.1/oper-ROADMC.xml
tests/sample_configs/openroadm/7.1/oper-ROADMA.xml
tests/sample_configs/openroadm/7.1/oper-ROADMB.xml
tests/sample_configs/openroadm/7.1/oper-ROADMC.xml
tests/sample_configs/portmapping-3-RDM-221.json [new file with mode: 0644]
tests/transportpce_tests/1.2.1/test02_topo_portmapping.py
tests/transportpce_tests/1.2.1/test05_olm.py
tests/transportpce_tests/1.2.1/test06_end2end.py
tests/transportpce_tests/2.2.1/test01_portmapping.py
tests/transportpce_tests/2.2.1/test02_topo_portmapping.py
tests/transportpce_tests/2.2.1/test09_olm.py
tests/transportpce_tests/2.2.1/test12_end2end.py
tests/transportpce_tests/7.1/test04_renderer_regen_mode.py
tests/transportpce_tests/common/simulators.py
tests/transportpce_tests/common/test_utils.py
tests/transportpce_tests/hybrid/test01_device_change_notifications.py
tests/transportpce_tests/hybrid/test02_B100G_end2end.py
tests/transportpce_tests/hybrid/test03_autonomous_reroute.py
tests/transportpce_tests/pce/test01_pce.py
tests/transportpce_tests/pce/test04_pce_bug_fix.py [new file with mode: 0644]
tests/transportpce_tests/tapi/test01_abstracted_topology.py
tests/transportpce_tests/tapi/test02_full_topology.py
tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py
tests/transportpce_tests/with_docker/test02_nbinotifications.py
tests/transportpce_tests/with_docker/test03_tapi_nbinotifications.py
tox.ini

index e2513a9137ec63ec05c175b762b977a714621703..10afcad1105ea8314ae71c9cfde0ef307c02d97d 100644 (file)
@@ -4,7 +4,7 @@ repos:
     rev: v4.3.0
     hooks:
       - id: trailing-whitespace
-        exclude: '^ordmodels/'
+        exclude: '^ordmodels/|.diff$'
         # ordmodels trailing blanks shall preferably be fixed in OpenROADM upstream repo
 
   - repo: https://github.com/jorisroovers/gitlint
@@ -28,3 +28,8 @@ repos:
       - id: autopep8
         args: ['--in-place', '--max-line-length=120']
 
+  - repo: https://github.com/perltidy/perltidy
+    rev: '20240202.05'
+    hooks:
+      - id: perltidy
+        stages: [commit]
index 39ce51249d3710a4d260f38aed139a3685f8c86a..954873ca1e9b4109920e852c7012cd2b114f398c 100644 (file)
@@ -12,17 +12,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-api</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -52,7 +52,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
@@ -60,15 +60,15 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>tapi-2.1.1</artifactId>
+      <artifactId>tapi-2.4.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
similarity index 81%
rename from api/src/main/yang/nbi-notifications@2021-10-13.yang
rename to api/src/main/yang/nbi-notifications@2023-07-28.yang
index e55b7816b9135a512fda8c58fd4903bf9417ec44..b4bf64fa7a3260bee270969741b76899070882a4 100644 (file)
@@ -1,5 +1,5 @@
 module nbi-notifications {
-  yang-version 1;
+  yang-version 1.1;
   namespace "nbi-notifications";
   prefix nbinotifications;
 
@@ -12,13 +12,20 @@ module nbi-notifications {
   import org-openroadm-common-state-types {
     prefix org-openroadm-common-state-types;
   }
+  import org-openroadm-resource {
+    prefix org-openroadm-resource;
+  }
   import tapi-common {
     prefix tapi-common;
-    revision-date 2018-12-10;
+    revision-date 2022-11-21;
    }
   import tapi-notification {
     prefix tapi-notification;
-    revision-date 2018-12-10;
+    revision-date 2022-11-21;
+  }
+  import tapi-fm {
+    prefix tapi-fm;
+    revision-date 2022-11-21;
   }
 
   organization
@@ -29,11 +36,26 @@ module nbi-notifications {
     "YANG definitions for using REST API in NBI notifications module. Copyright
      (c) 2020 ORANGE and others. All rights reserved.";
 
+  revision "2023-07-28" {
+    description
+      "Migration towards TAPI 2.4";
+  }
+
+  revision 2023-07-26 {
+      description
+        "Adding service-rpc-result data details to the publish-notification-process-service";
+  }
+
   revision 2021-10-13 {
     description
       "Implement new models, RPC for TAPI service notification";
   }
 
+  revision 2023-07-26 {
+      description
+        "Adding service-rpc-result data details to the publish-notification-process-service";
+  }
+
   revision 2021-08-13 {
     description
       "Rename the groupings, containers and RPCs";
@@ -90,8 +112,29 @@ module nbi-notifications {
       description
         "Operational State: Actual state of service";
     }
+    leaf is-temp-service {
+      type boolean;
+      default "false";
+      description
+        "Used to indicate if the it is a temp-service or not";
+    }
+    container aToZ {
+      when "../is-temp-service = 'true'" {
+        description
+            "a-to-z is only used for temp-service-cerate";
+        }
+        uses org-openroadm-resource:common-och-otsi-attributes;
+        uses org-openroadm-resource:path-computation-outputs;
+    }
+    container zToA {
+      when "../is-temp-service = 'true'" {
+        description
+              "a-to-z is only used for temp-service-cerate";
+        }
+      uses org-openroadm-resource:common-och-otsi-attributes;
+      uses org-openroadm-resource:path-computation-outputs;
+    }
   }
-
   grouping notification-alarm-service {
     leaf message {
       type string;
@@ -118,13 +161,24 @@ module nbi-notifications {
     }
   }
 
+  grouping alarm-tca-info {
+    container alarm-info {
+      uses tapi-fm:alarm-info;
+      description "none";
+    }
+    container tca-info {
+      uses tapi-fm:tca-info;
+      description "none";
+    }
+  }
+
   grouping notification-tapi-service {
       leaf notification-type {
         type tapi-notification:notification-type;
         description "none";
       }
       leaf target-object-type {
-        type tapi-notification:object-type;
+        type tapi-common:object-type;
         description "none";
       }
       leaf target-object-identifier {
@@ -155,6 +209,11 @@ module nbi-notifications {
         type tapi-common:layer-protocol-name;
         description "none";
       }
+      leaf layer-protocol-qualifier {
+        type tapi-common:layer-protocol-qualifier;
+        config false;
+        description "none";
+        }
       list changed-attributes {
         key 'value-name';
         uses tapi-notification:name-and-value-change;
@@ -169,15 +228,8 @@ module nbi-notifications {
         type string;
         description "none";
       }
-      container tca-info {
-        uses tapi-notification:tca-info;
-        description "none";
-      }
-      container alarm-info {
-        uses tapi-notification:alarm-info;
-        description "none";
-      }
-      uses tapi-common:resource-spec;
+      uses alarm-tca-info;
+      uses tapi-common:global-class;
       description "none";
     }
 
@@ -287,6 +339,7 @@ module nbi-notifications {
       description
         "Topic where to send the notification service";
     }
+    uses alarm-tca-info;
     uses tapi-notification:notification;
   }
 }
similarity index 87%
rename from api/src/main/yang/service_path/transportpce-common-types@2022-09-26.yang
rename to api/src/main/yang/service_path/transportpce-common-types@2023-05-01.yang
index 81a158a3200d373edb4de577973c18db93de3626..b99be357a098a5ac264236e6b17e278075fcf0d1 100644 (file)
@@ -10,6 +10,15 @@ module transportpce-common-types {
     prefix org-openroadm-common-types;
     revision-date 2018-10-19;
   }
+  import org-openroadm-common-link-types {
+      prefix org-openroadm-common-link-types;
+  }
+  import org-openroadm-common-optical-channel-types {
+      prefix org-openroadm-common-optical-channel-types;
+  }
+  import org-openroadm-otn-common-types {
+      prefix org-openroadm-otn-common-types;
+  }
 
   revision 2022-09-26 {
     description
@@ -691,4 +700,62 @@ module transportpce-common-types {
          the destination";
     }
   }
+
+  grouping service-result-rpc-common-parameters {
+          leaf central-frequency {
+                type org-openroadm-common-optical-channel-types:frequency-THz;
+                description
+                    "Assigned central-frquency in THz";
+          }
+          leaf width {
+                type org-openroadm-common-optical-channel-types:frequency-GHz;
+                description
+                    "Assigned frequency width (transponder/NMC)";
+          }
+          leaf optical-operational-mode {
+                type string;
+                description
+                    "Operation mode ID selected by the PCE";
+          }
+          leaf rx-estimated-osnr {
+                type org-openroadm-common-link-types:ratio-dB;
+                description
+                     "Estimated OSNR for the path";
+          }
+          leaf rx-estimated-gsnr {
+                type org-openroadm-common-link-types:ratio-dB;
+                description
+                     "Estimated Generalized SNR (including non linear impairments) for the path";
+          }
+          leaf max-output-power {
+                type org-openroadm-common-link-types:ratio-dB;
+                description
+                  "Maximum output-power";
+          }
+          leaf min-output-power {
+            type org-openroadm-common-link-types:ratio-dB;
+            description
+              "Minimum output-power";
+          }
+          leaf min-trib-slot {
+              type org-openroadm-otn-common-types:opucn-trib-slot-def;
+              description
+                  "Minimum trib slots in the form of 'A.B',
+                  where A and B correspond to port-number and trib-slots respectively";
+          }
+          leaf max-trib-slot {
+              type org-openroadm-otn-common-types:opucn-trib-slot-def;
+              description
+                  "Maximum trib slots in the form of 'A.B',
+                  where A and B correspond to port-number and trib-slots respectively";
+          }
+          leaf rate {
+            type uint32;
+            mandatory true;
+          }
+          leaf modulation-format {
+            type string;
+            // enum ?
+          }
+    }
 }
similarity index 80%
rename from api/src/main/yang/service_path/transportpce-pathDescription@2021-07-05.yang
rename to api/src/main/yang/service_path/transportpce-pathDescription@2023-05-01.yang
index 6ef1b510611a19a8d6505059be02065f05fd1bd1..e567e97501d0fa5c06668a2e27062cb013c5dfad 100644 (file)
@@ -5,13 +5,12 @@ module transportpce-pathDescription {
   import org-openroadm-common-optical-channel-types {
     prefix org-openroadm-common-optical-channel-types;
   }
-
   import org-openroadm-common-state-types {
     prefix org-openroadm-common-state-types;
     revision-date 2019-11-29;
   }
-  import org-openroadm-otn-common-types {
-    prefix org-openroadm-otn-common-types;
+  import transportpce-common-types {
+    prefix transportpce-common-types;
   }
 
   organization
@@ -49,6 +48,10 @@ module transportpce-pathDescription {
       ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
       POSSIBILITY OF SUCH DAMAGE";
 
+  revision 2023-05-01 {
+      description
+        "Version 1.7. Add central frequency and spectral width parameters";
+    }
   revision 2021-07-05 {
     description
       "Version 1.6.4. To add a list of trib-slots and complex-trib-slots
@@ -134,26 +137,7 @@ module transportpce-pathDescription {
          description
          "Maximum frequency in THz.";
       }
-      leaf min-trib-slot {
-          type org-openroadm-otn-common-types:opucn-trib-slot-def;
-          description
-              "Minimum trib slots in the form of 'A.B',
-              where A and B correspond to port-number and trib-slots respectively";
-      }
-      leaf max-trib-slot {
-          type org-openroadm-otn-common-types:opucn-trib-slot-def;
-          description
-              "Maximum trib slots in the form of 'A.B',
-              where A and B correspond to port-number and trib-slots respectively";
-      }
-      leaf rate {
-        type uint32;
-        mandatory true;
-      }
-      leaf modulation-format {
-        type string;
-        // enum ?
-      }
+      uses transportpce-common-types:service-result-rpc-common-parameters;
       list aToZ {
         key "id";
         leaf id {
@@ -178,26 +162,7 @@ module transportpce-pathDescription {
          description
          "Maximum frequency in THz.";
       }
-      leaf min-trib-slot {
-          type org-openroadm-otn-common-types:opucn-trib-slot-def;
-          description
-              "Minimum trib slots in the form of 'A.B',
-              where A and B correspond to port-number and trib-slots respectively";
-      }
-      leaf max-trib-slot {
-          type org-openroadm-otn-common-types:opucn-trib-slot-def;
-          description
-              "Maximum trib slots in the form of 'A.B',
-              where A and B correspond to port-number and trib-slots respectively";
-      }
-      leaf rate {
-        type uint32;
-        mandatory true;
-      }
-      leaf modulation-format {
-        type string;
-        // enum ?
-      }
+      uses transportpce-common-types:service-result-rpc-common-parameters;
       list zToA {
         key "id";
         leaf id {
similarity index 89%
rename from api/src/main/yang/service_path/transportpce-pce@2022-08-08.yang
rename to api/src/main/yang/service_path/transportpce-pce@2024-02-05.yang
index fce8723c5f38e0e4802d5ba0ea57f21239f5d80c..cecc2b99290807f511e134195be8c12701e6fb41 100644 (file)
@@ -54,10 +54,20 @@ module transportpce-pce {
       POSSIBILITY OF SUCH DAMAGE";
 
 
+  revision 2024-02-05 {
+      description
+        "Add customer-name to path-computation-request input to check in controller-customization if the customer's
+        services need specific handling";
+  }
+  revision 2023-09-25 {
+      description
+        "Add pce-constraint-mode enum to be able to disinguish the way to manage node include constraints inside the
+         PCE module";
+  }
   revision 2022-08-08 {
-    description
-      "Implement the RPC path-computation-reroute-request (only for reroute purposes) that computes a service path of
-      an existing service in order to reroute it";
+      description
+        "Implement the RPC path-computation-reroute-request (only for reroute purposes) that computes a service path of
+        an existing service in order to reroute it";
   }
   revision 2022-06-15 {
     description
@@ -89,6 +99,17 @@ module transportpce-pce {
       "Version 1.5";
   }
 
+  typedef pce-constraint-mode {
+    type enumeration {
+      enum loose {
+        value 1;
+      }
+      enum strict {
+        value 2;
+      }
+    }
+  }
+
   grouping stubpce-path-description {
     leaf path-name {
       type string;
@@ -167,6 +188,13 @@ module transportpce-pce {
            e.g., CLFI, CLCI, etc. This is reported against the service, but
            may not get reflected in the service in the network.";
       }
+      leaf customer-name {
+        type string;
+        description
+          "name of the customer that may be declared in controller-customization,
+          to define a specific way to handle constraints associated with this
+          customer.";
+      }
       leaf resource-reserve {
         type boolean;
         mandatory true;
similarity index 90%
rename from api/src/main/yang/tapi@2018-09-28.yang
rename to api/src/main/yang/tapi@2023-07-28.yang
index 831bc70a304fb3e26cf89f30816fae649f2cb9bb..6255ca59e42b1c3a5454a1d0afdd5b156bf7a18d 100644 (file)
@@ -1,15 +1,15 @@
 module tapi {
-  yang-version 1;
+  yang-version 1.1;
   namespace "urn:opendaylight:params:xml:ns:yang:tapi";
   prefix tapi;
 
   import tapi-topology {
     prefix tapi-topology;
-    revision-date 2018-12-10;
+    revision-date 2022-11-21;
   }
   import tapi-common {
     prefix tapi-common;
-    revision-date 2018-12-10;
+    revision-date 2022-11-21;
   }
   import org-openroadm-common-service-types {
     prefix org-openroadm-common-service-types;
@@ -25,6 +25,10 @@ module tapi {
      Thouenon ( gilles.thouenon@orange.com ) Christophe Betoule ( christophe.betoule@orange.com
      )";
 
+  revision "2023-07-28" {
+    description
+      "Second revision of TAPI model for migration towards TAPI 2.4";
+  }
   revision 2018-09-28 {
     description
       "Initial revision of TAPI model for internal use";
index 1e58eef1d9739bc22cd95c3f44ed65d21a4287b8..90fc4ed2af60e57fe7b30cbfc4b0d35980df6fc4 100644 (file)
@@ -13,7 +13,7 @@ module transportpce-networkutils {
   }
   import org-openroadm-common-network {
     prefix cnet;
-    revision-date 2021-12-10;
+    revision-date 2023-05-26;
   }
 
   revision 2022-06-30 {
similarity index 97%
rename from api/src/main/yang/transportpce-portmapping@2022-09-22.yang
rename to api/src/main/yang/transportpce-portmapping@2023-12-21.yang
index 15d6461880100dbc3ae45499f4f3c5c7fdd3be0f..307bf3be3cda57f130409e11eb0f97f0a11dec69 100644 (file)
@@ -25,7 +25,7 @@ module transportpce-portmapping {
   }
   import org-openroadm-port-types {
     prefix org-openroadm-port-types;
-    revision-date 2020-12-11;
+    revision-date 2023-05-26;
   }
 
 
@@ -39,6 +39,10 @@ module transportpce-portmapping {
      authors: Dhruv Bhardwaj ( db929a@att.com ) Shweta Vachhani ( sv111y@att.com )
               Balagangadhar Bathula ( bb4341@att.com )";
 
+  revision 2023-12-21 {
+    description
+       "Add leaflist supported-operational-mode to lcp";
+  }
   revision 2022-09-22 {
     description
        "Add initial support to regenerators functionality; Modify the attribute
@@ -253,6 +257,11 @@ module transportpce-portmapping {
           base org-openroadm-port-types:supported-if-capability;
         }
       }
+      leaf-list supported-operational-mode {
+        type string;
+        description
+          "List of operational-mode supported by the port";
+      }
       uses mpdr-restrictions-grp;
       uses regen-profiles-grp;
       leaf xpdr-type {
index 6e8acc94622ec475f877b637aedd45b0bfb63127..8da14c9d1c116c3772106a3e95915fc3a8684c14 100644 (file)
@@ -5,7 +5,7 @@ module transportpce-stub {
 
   import transportpce-pathDescription {
     prefix transportpce-pathDescription;
-    revision-date 2021-07-05;
+    revision-date 2023-05-01;
   }
 
 
similarity index 94%
rename from api/src/main/yang/transportpce-tapinetworkutils@2021-04-08.yang
rename to api/src/main/yang/transportpce-tapinetworkutils@2023-07-28.yang
index 60481c7f9f541fca232fb72eea067b45352b887c..8374d90722ed3db5327a07cceea5ad683194c129 100644 (file)
@@ -1,11 +1,11 @@
 module transportpce-tapinetworkutils {
-  yang-version 1;
+  yang-version 1.1;
   namespace "http://org/opendaylight/transportpce/tapinetworkutils";
   prefix "org-opendaylight-transportpce-tapinetworkutils";
 
   import tapi-common {
     prefix tapi-common;
-    revision-date 2018-12-10;
+    revision-date 2022-11-21;
   }
 
   organization
@@ -38,6 +38,10 @@ module transportpce-tapinetworkutils {
       ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
       POSSIBILITY OF SUCH DAMAGE";
 
+  revision "2023-07-28" {
+    description
+      "Second revision of tapi networkutils model for migration towards TAPI 2.4";
+  }
   revision "2021-04-08" {
     description
       "Initial revision of tapi networkutils model. Used as the transportpce-networkutils model to
index 15eac0c2a7410c1ed727a7fa550dfe620b1c2848..a7f3cfc8a586968a82960cff13d38a922494b987 100644 (file)
@@ -13,13 +13,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-artifacts</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <dependencyManagement>
@@ -129,13 +129,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
         <type>xml</type>
         <classifier>features</classifier>
       </dependency>
-      <dependency>
-        <groupId>${project.groupId}</groupId>
-        <artifactId>odl-transportpce-swagger</artifactId>
-        <version>${project.version}</version>
-        <type>xml</type>
-        <classifier>features</classifier>
-      </dependency>
     </dependencies>
   </dependencyManagement>
-</project>
\ No newline at end of file
+</project>
index 92fdc2228f49ca0d55df8228a34c4d67bf9526ce..6b07f24e7b749e5cf664d7c1440bc3512406a85a 100644 (file)
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-common</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -35,7 +35,7 @@
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.4</version>
+        <version>7.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
@@ -57,7 +57,7 @@
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <groupId>org.opendaylight.netconf</groupId>
       <artifactId>netconf-topology</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
index cfb6b499576851f3690d825db0c08a542cb9e314..b5578babef1d59b9f4544f0827bc5cff0752c363 100644 (file)
@@ -8,7 +8,7 @@
 
 package org.opendaylight.transportpce.common;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1;
 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;
@@ -19,7 +19,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
 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.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.network.topology.topology.topology.types.TopologyNetconf;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev231121.network.topology.topology.topology.types.TopologyNetconf;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
index cbaed88af44eeacbf3e0fc5655983ca0a8042ced..bfe60609b361339a79409b35e28a5bcc7d5556b6 100644 (file)
@@ -17,30 +17,30 @@ import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.catalog.CatalogConstant.CatalogNodeType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.ImpairmentType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.amplifier.parameters.Amplifier;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.OpenroadmOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.SpecificOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.Amplifiers;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.Roadms;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.XpondersPluggables;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.xponders.pluggables.XponderPluggableOpenroadmOperationalMode;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.xponders.pluggables.XponderPluggableOpenroadmOperationalModeKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.specific.operational.modes.SpecificOperationalMode;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.specific.operational.modes.SpecificOperationalModeKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.common.amplifier.drop.parameters.OpenroadmOperationalMode;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.common.amplifier.drop.parameters.OpenroadmOperationalModeKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.roadm.add.parameters.Add;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.roadm.add.parameters.add.AddOpenroadmOperationalMode;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.roadm.add.parameters.add.AddOpenroadmOperationalModeKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.roadm.drop.parameters.Drop;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.roadm.express.parameters.Express;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.transponder.parameters.Penalties;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.transponder.parameters.PenaltiesKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.transponder.parameters.TXOOBOsnrKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.power.mask.MaskPowerVsPin;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.power.mask.MaskPowerVsPinKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OperationalModeCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.ImpairmentType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.amplifier.parameters.Amplifier;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.OpenroadmOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.SpecificOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.Amplifiers;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.Roadms;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.XpondersPluggables;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.xponders.pluggables.XponderPluggableOpenroadmOperationalMode;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.xponders.pluggables.XponderPluggableOpenroadmOperationalModeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.specific.operational.modes.SpecificOperationalMode;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.specific.operational.modes.SpecificOperationalModeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.roadm.add.parameters.Add;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.roadm.add.parameters.add.AddOpenroadmOperationalMode;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.roadm.add.parameters.add.AddOpenroadmOperationalModeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.roadm.drop.parameters.Drop;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.roadm.drop.parameters.drop.OpenroadmOperationalMode;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.roadm.drop.parameters.drop.OpenroadmOperationalModeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.roadm.express.parameters.Express;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.transponder.parameters.Penalties;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.transponder.parameters.PenaltiesKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.transponder.parameters.TXOOBOsnrKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.power.mask.MaskPowerVsPin;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.power.mask.MaskPowerVsPinKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OperationalModeCatalog;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -552,10 +552,10 @@ public class CatalogUtils {
                     .child(Express.class)
                     .child(
                         org.opendaylight.yang.gen.v1.http
-                            .org.openroadm.operational.mode.catalog.rev211210
+                            .org.openroadm.operational.mode.catalog.rev230526
                             .operational.mode.roadm.express.parameters.express.OpenroadmOperationalMode.class,
                         new org.opendaylight.yang.gen.v1.http
-                            .org.openroadm.operational.mode.catalog.rev211210
+                            .org.openroadm.operational.mode.catalog.rev230526
                             .operational.mode.roadm.express.parameters.express.OpenroadmOperationalModeKey(
                                 operationalModeId))
                     .build();
@@ -595,7 +595,12 @@ public class CatalogUtils {
                     .child(OpenroadmOperationalModes.class)
                     .child(Amplifiers.class)
                     .child(Amplifier.class)
-                    .child(OpenroadmOperationalMode.class, new OpenroadmOperationalModeKey(operationalModeId))
+                    .child(
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
+                            .operational.mode.amplifier.parameters.amplifier.OpenroadmOperationalMode.class,
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
+                            .operational.mode.amplifier.parameters.amplifier.OpenroadmOperationalModeKey(
+                                    operationalModeId))
                     .build();
                 try {
                     var omOptional = networkTransactionService
@@ -745,10 +750,10 @@ public class CatalogUtils {
                     .child(Express.class)
                     .child(
                         org.opendaylight.yang.gen.v1.http
-                            .org.openroadm.operational.mode.catalog.rev211210
+                            .org.openroadm.operational.mode.catalog.rev230526
                             .operational.mode.roadm.express.parameters.express.OpenroadmOperationalMode.class,
                         new org.opendaylight.yang.gen.v1.http
-                            .org.openroadm.operational.mode.catalog.rev211210
+                            .org.openroadm.operational.mode.catalog.rev230526
                             .operational.mode.roadm.express.parameters.express.OpenroadmOperationalModeKey(
                                 operationalModeId))
                     .build();
index 55f805d023e785038d4960066f48276a5a1f6e67..37595655cbef1b55e02cf5d3a136ff5e091a39b6 100644 (file)
@@ -7,12 +7,13 @@
  */
 package org.opendaylight.transportpce.common.catalog;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Comparator;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.transponder.parameters.Penalties;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.transponder.parameters.Penalties;
 
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class PenaltiesComparator implements Comparator<Penalties>, Serializable {
index 9142166339e611a007ddf5373dc1a61dc707e170..e87d0a10326c0b089351df55af556508721ef4db 100755 (executable)
@@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamW
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
@@ -65,18 +65,18 @@ public class JsonStringConverter<T extends DataObject> {
          */
 
         JSONCodecFactory codecFactory = supplier
-                .getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext());
+                .getShared(bindingDOMCodecServices.getRuntimeContext().modelContext());
         try (Writer writer = new StringWriter();
                 JsonWriter jsonWriter = JsonWriterFactory.createJsonWriter(writer, 4)) {
             EffectiveStatementInference rootNode = SchemaInferenceStack
-                .of(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext())
+                .of(bindingDOMCodecServices.getRuntimeContext().modelContext())
                 .toInference();
-            rootNode.getEffectiveModelContext();
-            rootNode.getEffectiveModelContext();
+            rootNode.modelContext();
+            rootNode.modelContext();
             NormalizedNodeStreamWriter jsonStreamWriter = JSONNormalizedNodeStreamWriter
                 .createExclusiveWriter(codecFactory, rootNode, EffectiveModelContext.NAME.getNamespace(), jsonWriter);
             try (NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(jsonStreamWriter)) {
-                nodeWriter.write(bindingDOMCodecServices.toNormalizedNode(id, dataObject).getValue());
+                nodeWriter.write(bindingDOMCodecServices.toNormalizedDataObject(id, dataObject).node());
                 nodeWriter.flush();
             }
             JsonObject asJsonObject = JsonParser.parseString(writer.toString()).getAsJsonObject();
@@ -116,16 +116,16 @@ public class JsonStringConverter<T extends DataObject> {
     private T createDataObjectFromReader(YangInstanceIdentifier path, Reader inputReader,
                                          JSONCodecFactorySupplier supplier) {
 
-        NormalizedNodeResult result = new NormalizedNodeResult();
+        NormalizationResultHolder result = new NormalizationResultHolder();
         try (JsonReader reader = new JsonReader(inputReader);
              NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
              JsonParserStream jsonParser = JsonParserStream
                      .create(
                              streamWriter,
                              supplier.getShared(bindingDOMCodecServices
-                                     .getRuntimeContext().getEffectiveModelContext()))) {
+                                     .getRuntimeContext().modelContext()))) {
             jsonParser.parse(reader);
-            return (T) bindingDOMCodecServices.fromNormalizedNode(path, result.getResult()).getValue();
+            return (T) bindingDOMCodecServices.fromNormalizedNode(path, result.getResult().data()).getValue();
         } catch (IOException e) {
             LOG.warn("An error occured during parsing input reader", e);
             return null;
index 7babab074d3c96113583b1117ca1cc19d3612f79..b9a12e5881a760ef2a3949324dc9813d255293e8 100644 (file)
@@ -32,7 +32,6 @@ public class CrossConnectImpl implements CrossConnect {
 
     private static final Logger LOG = LoggerFactory.getLogger(CrossConnectImpl.class);
 
-    protected CrossConnect crossConnect;
     private final MappingUtils mappingUtils;
     private CrossConnectImpl121 crossConnectImpl121;
     private CrossConnectImpl221 crossConnectImpl221;
@@ -56,7 +55,6 @@ public class CrossConnectImpl implements CrossConnect {
         this.crossConnectImpl121 = crossConnectImpl121;
         this.crossConnectImpl221 = crossConnectImpl221;
         this.crossConnectImpl710 = crossConnectImpl710;
-        this.crossConnect = null;
     }
 
     public Optional<?> getCrossConnect(String nodeId, String connectionNumber) {
index 90f85e18e7a92dcc89041327840233761e2d1651..7b2ee2a1c231a8107ab9601f4ddd679297455027 100644 (file)
@@ -16,7 +16,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.Timeouts;
@@ -27,10 +27,10 @@ import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.PowerDBm;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrail;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.DestinationBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.connection.SourceBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.get.connection.port.trail.output.Ports;
@@ -59,40 +59,39 @@ public class CrossConnectImpl121 {
                 Timeouts.DEVICE_READ_TIMEOUT_UNIT);
     }
 
-    public Optional<String> postCrossConnect(String deviceId, String srcTp, String destTp,
-            SpectrumInformation spectrumInformation) {
-        RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder();
-        String connectionNumber = spectrumInformation.getIdentifierFromParams(srcTp, destTp);
-        rdmConnBldr.setConnectionNumber(connectionNumber);
-        rdmConnBldr.setWavelengthNumber(spectrumInformation.getWaveLength());
-        rdmConnBldr.setOpticalControlMode(OpticalControlMode.Off);
-        rdmConnBldr.setSource(new SourceBuilder().setSrcIf(spectrumInformation.getIdentifierFromParams(srcTp))
-                .build());
-        rdmConnBldr.setDestination(new DestinationBuilder()
-                .setDstIf(spectrumInformation.getIdentifierFromParams(destTp))
-                .build());
-        InstanceIdentifier<RoadmConnections> rdmConnectionIID = InstanceIdentifier
-            .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
-            .child(RoadmConnections.class, new RoadmConnectionsKey(rdmConnBldr.getConnectionNumber()))
-            .build();
-
+    public Optional<String> postCrossConnect(
+            String deviceId, String srcTp, String destTp, SpectrumInformation spectrumInformation) {
         Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId);
         DeviceTransaction deviceTx;
         try {
             Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-            if (deviceTxOpt.isPresent()) {
-                deviceTx = deviceTxOpt.orElseThrow();
-            } else {
+            if (deviceTxOpt.isEmpty()) {
                 LOG.error("Device transaction for device {} was not found!", deviceId);
                 return Optional.empty();
             }
+            deviceTx = deviceTxOpt.orElseThrow();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error("Unable to obtain device transaction for device {}!", deviceId, e);
             return Optional.empty();
         }
-
+        String connectionNumber = spectrumInformation.getIdentifierFromParams(srcTp, destTp);
+        RoadmConnections rdmConn = new RoadmConnectionsBuilder()
+            .setConnectionNumber(connectionNumber)
+            .setWavelengthNumber(spectrumInformation.getWaveLength())
+            .setOpticalControlMode(OpticalControlMode.Off)
+            .setSource(
+                new SourceBuilder().setSrcIf(spectrumInformation.getIdentifierFromParams(srcTp)).build())
+            .setDestination(
+                new DestinationBuilder().setDstIf(spectrumInformation.getIdentifierFromParams(destTp)).build())
+            .build();
         // post the cross connect on the device
-        deviceTx.merge(LogicalDatastoreType.CONFIGURATION, rdmConnectionIID, rdmConnBldr.build());
+        deviceTx.merge(
+            LogicalDatastoreType.CONFIGURATION,
+            InstanceIdentifier
+                .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
+                .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber))
+                .build(),
+            rdmConn);
         FluentFuture<? extends @NonNull CommitInfo> commit =
                 deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
         try {
@@ -102,19 +101,15 @@ public class CrossConnectImpl121 {
                     spectrumInformation.getHigherSpectralSlotNumber());
             return Optional.of(connectionNumber);
         } catch (InterruptedException | ExecutionException e) {
-            LOG.warn("Failed to post {}. Exception: ", rdmConnBldr.build(), e);
+            LOG.warn("Failed to post {}. Exception: ", rdmConn, e);
         }
         return Optional.empty();
     }
 
     public List<String> deleteCrossConnect(String deviceId, String connectionNumber) {
-        List<String> interfList = new ArrayList<>();
         Optional<RoadmConnections> xc = getCrossConnect(deviceId, connectionNumber);
         //Check if cross connect exists before delete
-        if (xc.isPresent()) {
-            interfList.add(xc.orElseThrow().getSource().getSrcIf());
-            interfList.add(xc.orElseThrow().getDestination().getDstIf());
-        } else {
+        if (xc.isEmpty()) {
             LOG.warn("Cross connect does not exist, halting delete");
             return null;
         }
@@ -122,17 +117,15 @@ public class CrossConnectImpl121 {
         DeviceTransaction deviceTx;
         try {
             Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-            if (deviceTxOpt.isPresent()) {
-                deviceTx = deviceTxOpt.orElseThrow();
-            } else {
+            if (deviceTxOpt.isEmpty()) {
                 LOG.error("Device transaction for device {} was not found!", deviceId);
                 return null;
             }
+            deviceTx = deviceTxOpt.orElseThrow();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error("Unable to obtain device transaction for device {}!", deviceId, e);
             return null;
         }
-
         // post the cross connect on the device
         deviceTx.delete(LogicalDatastoreType.CONFIGURATION, generateRdmConnectionIID(connectionNumber));
         FluentFuture<? extends @NonNull CommitInfo> commit =
@@ -140,7 +133,9 @@ public class CrossConnectImpl121 {
         try {
             commit.get();
             LOG.info("Roadm connection successfully deleted ");
-            return interfList;
+            return new ArrayList<>(List.of(
+                xc.orElseThrow().getSource().getSrcIf(),
+                xc.orElseThrow().getDestination().getDstIf()));
         } catch (InterruptedException | ExecutionException e) {
             LOG.warn("Failed to delete {}", connectionNumber, e);
         }
@@ -150,46 +145,41 @@ public class CrossConnectImpl121 {
 
     public List<Ports> getConnectionPortTrail(String nodeId, String srcTp, String destTp,
             int lowerSpectralSlotNumber, int higherSpectralSlotNumber) throws OpenRoadmInterfaceException {
-        String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR,
-                String.valueOf(lowerSpectralSlotNumber), String.valueOf(higherSpectralSlotNumber));
-        String connectionName = generateConnectionNumber(srcTp, destTp, spectralSlotName);
         Optional<MountPoint> mountPointOpt = deviceTransactionManager.getDeviceMountPoint(nodeId);
-        List<Ports> ports = null;
-        MountPoint mountPoint;
-        if (mountPointOpt.isPresent()) {
-            mountPoint = mountPointOpt.orElseThrow();
-        } else {
+        if (mountPointOpt.isEmpty()) {
             LOG.error("Failed to obtain mount point for device {}!", nodeId);
             return Collections.emptyList();
         }
-        final Optional<RpcConsumerRegistry> service = mountPoint.getService(RpcConsumerRegistry.class);
-        if (!service.isPresent()) {
+        String connectionName = generateConnectionNumber(srcTp, destTp,
+            String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR,
+                String.valueOf(lowerSpectralSlotNumber), String.valueOf(higherSpectralSlotNumber)));
+        MountPoint mountPoint = mountPointOpt.orElseThrow();
+        final Optional<RpcService> service = mountPoint.getService(RpcService.class);
+        if (service.isEmpty()) {
             LOG.error("Failed to get RpcService for node {}", nodeId);
         }
-        final OrgOpenroadmDeviceService rpcService = service.orElseThrow()
-            .getRpcService(OrgOpenroadmDeviceService.class);
-        final GetConnectionPortTrailInputBuilder portTrainInputBuilder = new GetConnectionPortTrailInputBuilder();
-        portTrainInputBuilder.setConnectionNumber(connectionName);
-        final Future<RpcResult<GetConnectionPortTrailOutput>> portTrailOutput = rpcService.getConnectionPortTrail(
-                portTrainInputBuilder.build());
-        if (portTrailOutput != null) {
-            try {
-                RpcResult<GetConnectionPortTrailOutput> connectionPortTrailOutputRpcResult = portTrailOutput.get();
-                GetConnectionPortTrailOutput connectionPortTrailOutput = connectionPortTrailOutputRpcResult.getResult();
-                if (connectionPortTrailOutput == null) {
-                    throw new OpenRoadmInterfaceException(String.format("RPC get connection port trail called on"
-                            + " node %s returned null!", nodeId));
-                }
-                LOG.info("Getting port trail for node {}'s connection number {}", nodeId, connectionName);
-                ports = connectionPortTrailOutput.getPorts();
-                for (Ports port : ports) {
-                    LOG.info("{} - Circuit pack {} - Port {}", nodeId, port.getCircuitPackName(), port.getPortName());
-                }
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.warn("Exception caught", e);
-            }
-        } else {
+        final GetConnectionPortTrail rpcService = service.orElseThrow().getRpc(GetConnectionPortTrail.class);
+        final Future<RpcResult<GetConnectionPortTrailOutput>> portTrailOutput = rpcService.invoke(
+                new GetConnectionPortTrailInputBuilder().setConnectionNumber(connectionName).build());
+        if (portTrailOutput == null) {
             LOG.warn("Port trail is null in getConnectionPortTrail for nodeId {}", nodeId);
+            return Collections.emptyList();
+        }
+        List<Ports> ports = null;
+        try {
+            RpcResult<GetConnectionPortTrailOutput> connectionPortTrailOutputRpcResult = portTrailOutput.get();
+            GetConnectionPortTrailOutput connectionPortTrailOutput = connectionPortTrailOutputRpcResult.getResult();
+            if (connectionPortTrailOutput == null) {
+                throw new OpenRoadmInterfaceException(String.format(
+                    "RPC get connection port trail called on node %s returned null!", nodeId));
+            }
+            LOG.info("Getting port trail for node {}'s connection number {}", nodeId, connectionName);
+            ports = connectionPortTrailOutput.getPorts();
+            for (Ports port : ports) {
+                LOG.info("{} - Circuit pack {} - Port {}", nodeId, port.getCircuitPackName(), port.getPortName());
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.warn("Exception caught", e);
         }
         return ports != null ? ports : Collections.emptyList();
     }
@@ -205,52 +195,50 @@ public class CrossConnectImpl121 {
     }
 
     public boolean setPowerLevel(String deviceId, OpticalControlMode mode, Decimal64 powerValue, String ctNumber) {
-
         Optional<RoadmConnections> rdmConnOpt = getCrossConnect(deviceId, ctNumber);
-        if (rdmConnOpt.isPresent()) {
-            RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder(rdmConnOpt.orElseThrow())
-                    .setOpticalControlMode(mode);
-            if (powerValue != null) {
-                rdmConnBldr.setTargetOutputPower(new PowerDBm(powerValue));
-            }
-            RoadmConnections newRdmConn = rdmConnBldr.build();
-
-            Future<Optional<DeviceTransaction>> deviceTxFuture =
-                    deviceTransactionManager.getDeviceTransaction(deviceId);
-            DeviceTransaction deviceTx;
-            try {
-                Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-                if (deviceTxOpt.isPresent()) {
-                    deviceTx = deviceTxOpt.orElseThrow();
-                } else {
-                    LOG.error("Transaction for device {} was not found!", deviceId);
-                    return false;
-                }
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Unable to get transaction for device {}!", deviceId, e);
+        if (rdmConnOpt.isEmpty()) {
+            LOG.warn("Roadm-Connection is null in set power level ({})", ctNumber);
+            return false;
+        }
+        RoadmConnections newRdmConn =
+            powerValue == null
+                ? new RoadmConnectionsBuilder(rdmConnOpt.orElseThrow())
+                    .setOpticalControlMode(mode)
+                    .build()
+                : new RoadmConnectionsBuilder(rdmConnOpt.orElseThrow())
+                    .setOpticalControlMode(mode)
+                    .setTargetOutputPower(new PowerDBm(powerValue))
+                    .build();
+        Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId);
+        DeviceTransaction deviceTx;
+        try {
+            Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
+            if (deviceTxOpt.isEmpty()) {
+                LOG.error("Transaction for device {} was not found!", deviceId);
                 return false;
             }
-
-            // post the cross connect on the device
-            InstanceIdentifier<RoadmConnections> roadmConnIID = InstanceIdentifier
+            deviceTx = deviceTxOpt.orElseThrow();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Unable to get transaction for device {}!", deviceId, e);
+            return false;
+        }
+        // post the cross connect on the device
+        deviceTx.merge(
+            LogicalDatastoreType.CONFIGURATION,
+            InstanceIdentifier
                 .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
                 .child(RoadmConnections.class, new RoadmConnectionsKey(ctNumber))
-                .build();
-            deviceTx.merge(LogicalDatastoreType.CONFIGURATION, roadmConnIID, newRdmConn);
-            FluentFuture<? extends @NonNull CommitInfo> commit =
-                deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
-            try {
-                commit.get();
-                LOG.info("Roadm connection power level successfully set ");
-                return true;
-            } catch (InterruptedException | ExecutionException ex) {
-                LOG.warn("Failed to post {}", newRdmConn, ex);
-            }
-
-        } else {
-            LOG.warn("Roadm-Connection is null in set power level ({})", ctNumber);
+                .build(),
+            newRdmConn);
+        FluentFuture<? extends @NonNull CommitInfo> commit =
+            deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
+        try {
+            commit.get();
+            LOG.info("Roadm connection power level successfully set ");
+            return true;
+        } catch (InterruptedException | ExecutionException ex) {
+            LOG.warn("Failed to post {}", newRdmConn, ex);
         }
         return false;
     }
-
 }
index 3ff9537feaf79845e435baf200e42b683a644ca4..ea0dfef20329bfc716b3275474125f809d5ce482 100644 (file)
@@ -16,7 +16,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.Timeouts;
@@ -27,11 +27,11 @@ import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.OpticalControlMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PowerDBm;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.GetConnectionPortTrail;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.GetConnectionPortTrailInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.GetConnectionPortTrailOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OduConnection.Direction;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceData;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.connection.DestinationBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.connection.SourceBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.get.connection.port.trail.output.Ports;
@@ -67,49 +67,49 @@ public class CrossConnectImpl221 {
                 Timeouts.DEVICE_READ_TIMEOUT_UNIT);
     }
 
-    public Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org
-            .openroadm.device.OduConnection> getOtnCrossConnect(String deviceId, String connectionNumber) {
+    public Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019
+                .org.openroadm.device.container.org.openroadm.device.OduConnection> getOtnCrossConnect(
+            String deviceId, String connectionNumber) {
         //TODO Change it to Operational later for real device
         return deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.CONFIGURATION,
                 generateOduConnectionIID(connectionNumber), Timeouts.DEVICE_READ_TIMEOUT,
                 Timeouts.DEVICE_READ_TIMEOUT_UNIT);
     }
 
-    public Optional<String> postCrossConnect(String deviceId, String srcTp, String destTp,
-                                             SpectrumInformation spectrumInformation) {
-        String connectionNumber = spectrumInformation.getIdentifierFromParams(srcTp, destTp);
-        RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder()
-                .setConnectionName(connectionNumber)
-                .setOpticalControlMode(OpticalControlMode.Off)
-                .setSource(new SourceBuilder()
-                        .setSrcIf(spectrumInformation.getIdentifierFromParams(srcTp,"nmc"))
-                        .build())
-                .setDestination(new DestinationBuilder()
-                        .setDstIf(spectrumInformation.getIdentifierFromParams(destTp,"nmc"))
-                        .build());
-
-        InstanceIdentifier<RoadmConnections> rdmConnectionIID = InstanceIdentifier
-            .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
-            .child(RoadmConnections.class, new RoadmConnectionsKey(rdmConnBldr.getConnectionName()))
-            .build();
-
+    public Optional<String> postCrossConnect(
+            String deviceId, String srcTp, String destTp, SpectrumInformation spectrumInformation) {
         Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId);
         DeviceTransaction deviceTx;
         try {
             Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-            if (deviceTxOpt.isPresent()) {
-                deviceTx = deviceTxOpt.orElseThrow();
-            } else {
+            if (deviceTxOpt.isEmpty()) {
                 LOG.error(DEV_TRANSACTION_NOT_FOUND, deviceId);
                 return Optional.empty();
             }
+            deviceTx = deviceTxOpt.orElseThrow();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error(UNABLE_DEV_TRANSACTION, deviceId, e);
             return Optional.empty();
         }
-
+        String connectionNumber = spectrumInformation.getIdentifierFromParams(srcTp, destTp);
+        RoadmConnections rdmConn = new RoadmConnectionsBuilder()
+                .setConnectionName(connectionNumber)
+                .setOpticalControlMode(OpticalControlMode.Off)
+                .setSource(new SourceBuilder()
+                        .setSrcIf(spectrumInformation.getIdentifierFromParams(srcTp,"nmc"))
+                        .build())
+                .setDestination(new DestinationBuilder()
+                        .setDstIf(spectrumInformation.getIdentifierFromParams(destTp,"nmc"))
+                        .build())
+                .build();
         // post the cross connect on the device
-        deviceTx.merge(LogicalDatastoreType.CONFIGURATION, rdmConnectionIID, rdmConnBldr.build());
+        deviceTx.merge(
+            LogicalDatastoreType.CONFIGURATION,
+            InstanceIdentifier
+                .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
+                .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber))
+                .build(),
+            rdmConn);
         FluentFuture<? extends @NonNull CommitInfo> commit =
                 deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
         try {
@@ -119,51 +119,49 @@ public class CrossConnectImpl221 {
                     spectrumInformation.getHigherSpectralSlotNumber());
             return Optional.of(connectionNumber);
         } catch (InterruptedException | ExecutionException e) {
-            LOG.warn("Failed to post {}. Exception: ", rdmConnBldr.build(), e);
+            LOG.warn("Failed to post {}. Exception: ", rdmConn, e);
         }
         return Optional.empty();
     }
 
-
     public List<String> deleteCrossConnect(String deviceId, String connectionName, boolean isOtn) {
         List<String> interfList = new ArrayList<>();
         Optional<RoadmConnections> xc = getCrossConnect(deviceId, connectionName);
-        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org
-                .openroadm.device.OduConnection> otnXc = getOtnCrossConnect(deviceId, connectionName);
         //Check if cross connect exists before delete
         if (xc.isPresent()) {
             interfList.add(xc.orElseThrow().getSource().getSrcIf());
             interfList.add(xc.orElseThrow().getDestination().getDstIf());
             interfList.add(xc.orElseThrow().getSource().getSrcIf().replace("nmc", "mc"));
             interfList.add(xc.orElseThrow().getDestination().getDstIf().replace("nmc", "mc"));
-        } else if (otnXc.isPresent()) {
+        } else {
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019
+                    .org.openroadm.device.container.org.openroadm.device.OduConnection> otnXc =
+                getOtnCrossConnect(deviceId, connectionName);
+            if (otnXc.isEmpty()) {
+                LOG.warn("Cross connect {} does not exist, halting delete", connectionName);
+                return null;
+            }
             interfList.add(otnXc.orElseThrow().getSource().getSrcIf());
             interfList.add(otnXc.orElseThrow().getDestination().getDstIf());
-        } else {
-            LOG.warn("Cross connect {} does not exist, halting delete", connectionName);
-            return null;
         }
         Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId);
         DeviceTransaction deviceTx;
         try {
             Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-            if (deviceTxOpt.isPresent()) {
-                deviceTx = deviceTxOpt.orElseThrow();
-            } else {
+            if (deviceTxOpt.isEmpty()) {
                 LOG.error(DEV_TRANSACTION_NOT_FOUND, deviceId);
                 return null;
             }
+            deviceTx = deviceTxOpt.orElseThrow();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error(UNABLE_DEV_TRANSACTION, deviceId, e);
             return null;
         }
 
         // post the cross connect on the device
-        if (isOtn) {
-            deviceTx.delete(LogicalDatastoreType.CONFIGURATION, generateOduConnectionIID(connectionName));
-        } else {
-            deviceTx.delete(LogicalDatastoreType.CONFIGURATION, generateRdmConnectionIID(connectionName));
-        }
+        deviceTx.delete(
+            LogicalDatastoreType.CONFIGURATION,
+            isOtn ? generateOduConnectionIID(connectionName) : generateRdmConnectionIID(connectionName));
         FluentFuture<? extends @NonNull CommitInfo> commit =
                 deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
         try {
@@ -177,99 +175,95 @@ public class CrossConnectImpl221 {
     }
 
 
-    public List<Ports> getConnectionPortTrail(String nodeId, String srcTp, String destTp,
-                                              int lowerSpectralSlotNumber, int higherSpectralSlotNumber)
+    public List<Ports> getConnectionPortTrail(
+            String nodeId, String srcTp, String destTp, int lowerSpectralSlotNumber, int higherSpectralSlotNumber)
             throws OpenRoadmInterfaceException {
-        String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR,
-                String.valueOf(lowerSpectralSlotNumber),
-                String.valueOf(higherSpectralSlotNumber));
-        String connectionName = generateConnectionName(srcTp, destTp, spectralSlotName);
         Optional<MountPoint> mountPointOpt = deviceTransactionManager.getDeviceMountPoint(nodeId);
         List<Ports> ports = null;
-        MountPoint mountPoint;
-        if (mountPointOpt.isPresent()) {
-            mountPoint = mountPointOpt.orElseThrow();
-        } else {
+        if (mountPointOpt.isEmpty()) {
             LOG.error("Failed to obtain mount point for device {}!", nodeId);
             return Collections.emptyList();
         }
-        final Optional<RpcConsumerRegistry> service = mountPoint.getService(RpcConsumerRegistry.class);
-        if (!service.isPresent()) {
+        MountPoint mountPoint = mountPointOpt.orElseThrow();
+        final Optional<RpcService> service = mountPoint.getService(RpcService.class);
+        if (service.isEmpty()) {
             LOG.error("Failed to get RpcService for node {}", nodeId);
         }
-        final OrgOpenroadmDeviceService rpcService = service.orElseThrow()
-            .getRpcService(OrgOpenroadmDeviceService.class);
-        final GetConnectionPortTrailInputBuilder portTrainInputBuilder = new GetConnectionPortTrailInputBuilder();
-        portTrainInputBuilder.setConnectionName(connectionName);
-        final Future<RpcResult<GetConnectionPortTrailOutput>> portTrailOutput = rpcService.getConnectionPortTrail(
-                portTrainInputBuilder.build());
-        if (portTrailOutput != null) {
-            try {
-                RpcResult<GetConnectionPortTrailOutput> connectionPortTrailOutputRpcResult = portTrailOutput.get();
-                GetConnectionPortTrailOutput connectionPortTrailOutput = connectionPortTrailOutputRpcResult.getResult();
-                if (connectionPortTrailOutput == null) {
-                    throw new OpenRoadmInterfaceException(String.format("RPC get connection port trail called on"
-                            + " node %s returned null!", nodeId));
-                }
-                LOG.info("Getting port trail for node {}'s connection number {}", nodeId, connectionName);
-                ports = connectionPortTrailOutput.getPorts();
-                for (Ports port : ports) {
-                    LOG.info("{} - Circuit pack {} - Port {}", nodeId, port.getCircuitPackName(), port.getPortName());
-                }
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.warn("Exception caught", e);
-            }
-        } else {
+        String connectionName = generateConnectionName(srcTp, destTp,
+            String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR,
+                String.valueOf(lowerSpectralSlotNumber), String.valueOf(higherSpectralSlotNumber)));
+        GetConnectionPortTrail rpcService = service.orElseThrow().getRpc(GetConnectionPortTrail.class);
+        final Future<RpcResult<GetConnectionPortTrailOutput>> portTrailOutput = rpcService.invoke(
+                new GetConnectionPortTrailInputBuilder()
+                    .setConnectionName(connectionName)
+                    .build());
+        if (portTrailOutput == null) {
             LOG.warn("Port trail is null in getConnectionPortTrail for nodeId {}", nodeId);
+            return Collections.emptyList();
+        }
+        try {
+            RpcResult<GetConnectionPortTrailOutput> connectionPortTrailOutputRpcResult = portTrailOutput.get();
+            GetConnectionPortTrailOutput connectionPortTrailOutput = connectionPortTrailOutputRpcResult.getResult();
+            if (connectionPortTrailOutput == null) {
+                throw new OpenRoadmInterfaceException(String.format(
+                    "RPC get connection port trail called on node %s returned null!", nodeId));
+            }
+            LOG.info("Getting port trail for node {}'s connection number {}", nodeId, connectionName);
+            ports = connectionPortTrailOutput.getPorts();
+            for (Ports port : ports) {
+                LOG.info("{} - Circuit pack {} - Port {}", nodeId, port.getCircuitPackName(), port.getPortName());
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.warn("Exception caught", e);
         }
-        return ports != null ? ports : Collections.emptyList();
+        return ports == null ? Collections.emptyList() : ports;
     }
 
 
     public boolean setPowerLevel(String deviceId, OpticalControlMode mode, Decimal64 powerValue, String ctName) {
         Optional<RoadmConnections> rdmConnOpt = getCrossConnect(deviceId, ctName);
-        if (rdmConnOpt.isPresent()) {
-            RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder(rdmConnOpt.orElseThrow());
-            rdmConnBldr.setOpticalControlMode(mode);
-            if (powerValue != null) {
-                rdmConnBldr.setTargetOutputPower(new PowerDBm(powerValue));
-            }
-            RoadmConnections newRdmConn = rdmConnBldr.build();
-
-            Future<Optional<DeviceTransaction>> deviceTxFuture =
-                    deviceTransactionManager.getDeviceTransaction(deviceId);
-            DeviceTransaction deviceTx;
-            try {
-                Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-                if (deviceTxOpt.isPresent()) {
-                    deviceTx = deviceTxOpt.orElseThrow();
-                } else {
-                    LOG.error("Transaction for device {} was not found!", deviceId);
-                    return false;
-                }
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Unable to get transaction for device {}!", deviceId, e);
+        if (rdmConnOpt.isEmpty()) {
+            LOG.warn("Roadm-Connection is null in set power level ({})", ctName);
+            return false;
+        }
+        RoadmConnections newRdmConn =
+            powerValue == null
+                ? new RoadmConnectionsBuilder(rdmConnOpt.orElseThrow())
+                    .setOpticalControlMode(mode)
+                    .build()
+                : new RoadmConnectionsBuilder(rdmConnOpt.orElseThrow())
+                    .setOpticalControlMode(mode)
+                    .setTargetOutputPower(new PowerDBm(powerValue))
+                    .build();
+        Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId);
+        DeviceTransaction deviceTx;
+        try {
+            Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
+            if (deviceTxOpt.isEmpty()) {
+                LOG.error("Transaction for device {} was not found!", deviceId);
                 return false;
             }
-
-            // post the cross connect on the device
-            InstanceIdentifier<RoadmConnections> roadmConnIID = InstanceIdentifier
+            deviceTx = deviceTxOpt.orElseThrow();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Unable to get transaction for device {}!", deviceId, e);
+            return false;
+        }
+        // post the cross connect on the device
+        deviceTx.merge(
+            LogicalDatastoreType.CONFIGURATION,
+            InstanceIdentifier
                 .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
                 .child(RoadmConnections.class, new RoadmConnectionsKey(ctName))
-                .build();
-            deviceTx.merge(LogicalDatastoreType.CONFIGURATION, roadmConnIID, newRdmConn);
-            FluentFuture<? extends @NonNull CommitInfo> commit =
-                    deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
-            try {
-                commit.get();
-                LOG.info("Roadm connection power level successfully set ");
-                return true;
-            } catch (InterruptedException | ExecutionException ex) {
-                LOG.warn("Failed to post {}", newRdmConn, ex);
-            }
-
-        } else {
-            LOG.warn("Roadm-Connection is null in set power level ({})", ctName);
+                .build(),
+            newRdmConn);
+        FluentFuture<? extends @NonNull CommitInfo> commit =
+                deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
+        try {
+            commit.get();
+            LOG.info("Roadm connection power level successfully set ");
+            return true;
+        } catch (InterruptedException | ExecutionException ex) {
+            LOG.warn("Failed to post {}", newRdmConn, ex);
         }
         return false;
     }
@@ -294,42 +288,43 @@ public class CrossConnectImpl221 {
 
     public Optional<String> postOtnCrossConnect(List<String> createdOduInterfaces, Nodes node) {
         String deviceId = node.getNodeId();
-        List<String> sortedCreatedOduInterfaces = new ArrayList<>(createdOduInterfaces);
-        sortedCreatedOduInterfaces.sort((s1,s2) -> s1.compareTo(s2));
-        String srcTp = sortedCreatedOduInterfaces.get(0);
-        String dstTp = sortedCreatedOduInterfaces.get(1);
-        // Strip the service name from the src and dst
-        String oduXConnectionName = srcTp.split(":")[0] + "-x-" + dstTp.split(":")[0];
-        OduConnectionBuilder oduConnectionBuilder = new OduConnectionBuilder()
-                .setConnectionName(oduXConnectionName)
-                .setDestination(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.odu.connection
-                        .DestinationBuilder().setDstIf(dstTp).build())
-                .setSource(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.odu.connection
-                        .SourceBuilder().setSrcIf(srcTp).build())
-                .setDirection(Direction.Bidirectional);
-
-        InstanceIdentifier<OduConnection> oduConnectionIID = InstanceIdentifier
-            .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
-            .child(OduConnection.class, new OduConnectionKey(oduConnectionBuilder.getConnectionName()))
-            .build();
-
         Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(deviceId);
         DeviceTransaction deviceTx;
         try {
             Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-            if (deviceTxOpt.isPresent()) {
-                deviceTx = deviceTxOpt.orElseThrow();
-            } else {
+            if (deviceTxOpt.isEmpty()) {
                 LOG.error(DEV_TRANSACTION_NOT_FOUND, deviceId);
                 return Optional.empty();
             }
+            deviceTx = deviceTxOpt.orElseThrow();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error(UNABLE_DEV_TRANSACTION, deviceId, e);
             return Optional.empty();
         }
-
+        List<String> sortedCreatedOduInterfaces = new ArrayList<>(createdOduInterfaces);
+        sortedCreatedOduInterfaces.sort((s1,s2) -> s1.compareTo(s2));
+        String srcTp = sortedCreatedOduInterfaces.get(0);
+        String dstTp = sortedCreatedOduInterfaces.get(1);
+        // Strip the service name from the src and dst
+        String oduXConnectionName = srcTp.split(":")[0] + "-x-" + dstTp.split(":")[0];
+        OduConnection oduConnection = new OduConnectionBuilder()
+                .setConnectionName(oduXConnectionName)
+                .setDestination(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019
+                        .odu.connection.DestinationBuilder().setDstIf(dstTp).build())
+                .setSource(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019
+                        .odu.connection.SourceBuilder().setSrcIf(srcTp).build())
+                .setDirection(Direction.Bidirectional)
+                .build();
         // post the cross connect on the device
-        deviceTx.merge(LogicalDatastoreType.CONFIGURATION, oduConnectionIID, oduConnectionBuilder.build());
+        deviceTx.merge(
+            LogicalDatastoreType.CONFIGURATION,
+            InstanceIdentifier
+                .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
+                .child(OduConnection.class, new OduConnectionKey(oduXConnectionName))
+                .build(),
+            oduConnection);
         FluentFuture<? extends @NonNull CommitInfo> commit =
                 deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
         try {
@@ -337,8 +332,8 @@ public class CrossConnectImpl221 {
             LOG.info("Otn-connection successfully created: {}", oduXConnectionName);
             return Optional.of(oduXConnectionName);
         } catch (InterruptedException | ExecutionException e) {
-            LOG.warn("Failed to post {}.", oduConnectionBuilder.build(), e);
+            LOG.warn("Failed to post {}.", oduConnection, e);
         }
         return Optional.empty();
     }
-}
\ No newline at end of file
+}
index ceb99ef5652c69aad6867befdb929d7ded1d0181..e6e89839e29754994c69322bc8470af6d107dd33 100644 (file)
@@ -14,12 +14,12 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyGHz;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyGHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMaps;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsKey;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -106,9 +106,10 @@ public final class GridUtils {
      * Get the spectrum width for rate and modulation format.
      * @param rate Uint32
      * @param modulationFormat ModulationFormat
-     * @return spectrum width in GHz
+     * @return spectrum width in GHz compatible with models 10.1
      */
-    public static FrequencyGHz getWidthFromRateAndModulationFormat(Uint32 rate, ModulationFormat modulationFormat) {
+    public static FrequencyGHz getWidthFromRateAndModulationFormat(Uint32 rate,
+            ModulationFormat modulationFormat) {
         String width = GridConstant.FREQUENCY_WIDTH_TABLE.get(rate, modulationFormat);
         if (width == null) {
             LOG.warn("No width found for service rate {} and modulation format {}, set width to 40", rate,
@@ -122,11 +123,10 @@ public final class GridUtils {
      * Get central frequency of spectrum.
      * @param minFrequency BigDecimal
      * @param maxFrequency BigDecimal
-     * @return central frequency in THz
+     * @return central frequency in THz compatible with models 10.1
      */
     public static FrequencyTHz getCentralFrequency(BigDecimal minFrequency, BigDecimal maxFrequency) {
         return new FrequencyTHz(Decimal64.valueOf(computeCentralFrequency(minFrequency, maxFrequency)));
-
     }
 
     /**
@@ -204,8 +204,9 @@ public final class GridUtils {
         if (input.getCenterFreq() != null) {
             spectrumInformation.setCenterFrequency(input.getCenterFreq().getValue().decimalValue());
         } else {
-            spectrumInformation.setCenterFrequency(GridUtils.getCentralFrequency(spectrumInformation.getMinFrequency(),
-                            spectrumInformation.getMaxFrequency()).getValue().decimalValue());
+            spectrumInformation.setCenterFrequency(GridUtils.getCentralFrequency(
+                    spectrumInformation.getMinFrequency(),
+                    spectrumInformation.getMaxFrequency()).getValue().decimalValue());
         }
         if (input.getNmcWidth() != null) {
             spectrumInformation.setWidth(input.getNmcWidth().getValue().decimalValue()
index 41946e372d45247bfaf8c7dcbee9022d7d631804..8696b92844fcbbc1effa9ad8b12778676fa2577a 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.transportpce.common.mapping;
 
 import java.util.List;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilities;
 
 public interface MappingUtils {
 
index 28e485848eae9dd7f144f7056e166d60b397018a..b91104798d9a9f18bb2a812730fe7cd97b3cb05d 100644 (file)
@@ -18,22 +18,23 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.StringConstants;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GEODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2e;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If1GEODU0;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If400GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCH;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOtsiOtsigroup;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GE;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GEODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GE;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GEODU2;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GEODU2e;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If1GEODU0;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If400GE;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCH;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOtsiOtsigroup;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -49,6 +50,8 @@ public final class MappingUtilsImpl implements MappingUtils {
     private static final ImmutableMap<String, SupportedIfCapability> CAP_TYPE_MAP =
         ImmutableMap.<String, SupportedIfCapability>builder()
             .put("If400GE{qname=(http://org/openroadm/port/types?revision=2020-03-27)if-400GE}", If400GE.VALUE)
+            .put("IfOTU4ODU4{qname=(http://org/openroadm/port/types?revision=2020-03-27)if-OTU4-ODU4}",
+                    IfOTU4ODU4.VALUE)
             .put("IfOtsiOtsigroup{qname=(http://org/openroadm/port/types?revision=2020-03-27)if-otsi-otsigroup}",
                 IfOtsiOtsigroup.VALUE)
             .put("IfOCH{qname=(http://org/openroadm/port/types?revision=2018-10-19)if-OCH}", IfOCH.VALUE)
index 78c53cff7d4d4286998f0f71bae925b1240cf36b..e5a9b66747b93d4f85c6022d1ff834e78396e828 100644 (file)
@@ -11,9 +11,9 @@ package org.opendaylight.transportpce.common.mapping;
 
 import java.util.List;
 import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
index 85b3eeb6af7aa0ad440a1892d1adebfa3f8d64a4..e488777be0cf5b66b0c2c0b7054c6f8312a81b12 100644 (file)
@@ -22,14 +22,14 @@ import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilitiesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilitiesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
index 37016acb0aaad253b60d81df9dc1f4ac8a0cb73d..970f0abc972f485306f4ad32bae4b7a54b8225e3 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.transportpce.common.mapping;
 
 import com.google.common.util.concurrent.FluentFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -30,20 +31,20 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.NetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegree;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.Direction;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.CircuitPack;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData;
@@ -421,7 +422,7 @@ public class PortMappingVersion121 {
         return null;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "SLF4J_UNKNOWN_ARRAY",
         justification = "False positive")
     private Map<Integer, Degree> getDegreesMap(String deviceId, Info ordmInfo) {
@@ -650,7 +651,7 @@ public class PortMappingVersion121 {
 
     private Mapping createNewXpdrMapping(String nodeId, Ports port, String circuitPackName,
             String logicalConnectionPoint, String partnerLcp) {
-        Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability> supportedIntf =
+        Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability> supportedIntf =
             new HashSet<>();
         for (String sup: getSupIfCapList(port)) {
             if (MappingUtilsImpl.convertSupIfCapa(sup) != null) {
index 2c0386d3ad5bffe5716f97e61946120aa326eac8..6587d99834ba5d437d6f03d3257b6880ead86ce1 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.transportpce.common.mapping;
 
 import com.google.common.util.concurrent.FluentFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -30,29 +31,29 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.NetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilitiesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilitiesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcpBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcpKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.switching.pool.lcp.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.switching.pool.lcp.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.switching.pool.lcp.NonBlockingListKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegree;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilitiesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.SwitchingPoolLcp;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.SwitchingPoolLcpBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.SwitchingPoolLcpKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.switching.pool.lcp.NonBlockingList;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.switching.pool.lcp.NonBlockingListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.switching.pool.lcp.NonBlockingListKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.Direction;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PortQual;
@@ -574,7 +575,7 @@ public class PortMappingVersion221 {
         return null;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "SLF4J_UNKNOWN_ARRAY",
         justification = "False positive")
     private Map<Integer, Degree> getDegreesMap(String deviceId, Info ordmInfo) {
@@ -899,7 +900,7 @@ public class PortMappingVersion221 {
 
     private Mapping createNewXpdrMapping(String nodeId, Ports port, String circuitPackName,
             String logicalConnectionPoint, String partnerLcp, XpdrNodeTypes xpdrNodeType) {
-        Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability> supportedIntf =
+        Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability> supportedIntf =
             new HashSet<>();
         for (String sup: getSupIfCapList(port)) {
             if (MappingUtilsImpl.convertSupIfCapa(sup) != null) {
index 567a6f9949d389d94f793f69dbe375b9616c14b2..c632c734e8bd2fa54586175945d7fa902339b061 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.transportpce.common.mapping;
 
 import com.google.common.util.concurrent.FluentFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -32,31 +33,31 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.NetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilitiesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilitiesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mpdr.restrictions.grp.MpdrRestrictionsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.regen.profiles.grp.RegenProfilesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcpBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.SwitchingPoolLcpKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.switching.pool.lcp.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.switching.pool.lcp.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.switching.pool.lcp.switching.pool.lcp.NonBlockingListKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegree;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilitiesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mpdr.restrictions.grp.MpdrRestrictionsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.regen.profiles.grp.RegenProfilesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.SwitchingPoolLcp;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.SwitchingPoolLcpBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.SwitchingPoolLcpKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.switching.pool.lcp.NonBlockingList;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.switching.pool.lcp.NonBlockingListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.switching.pool.lcp.switching.pool.lcp.NonBlockingListKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.alarm.pm.types.rev191129.Direction;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.CircuitPack;
@@ -654,7 +655,7 @@ public class PortMappingVersion710 {
         return mcCapabilityProfiles;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "SLF4J_UNKNOWN_ARRAY",
         justification = "False positive")
     private Map<Integer, Degree> getDegreesMap(String deviceId, Info ordmInfo) {
@@ -1049,12 +1050,15 @@ public class PortMappingVersion710 {
         }
         Collection<SupportedInterfaceCapability> supIntfCapaList = getSupIntfCapaList(port);
         if (supIntfCapaList != null) {
-            Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability>
+            Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability>
                     supportedIntf = new HashSet<>();
             Set<String> regenProfiles = new HashSet<>();
-            SupportedInterfaceCapability sic1 = null;
             for (SupportedInterfaceCapability sic : supIntfCapaList) {
-                supportedIntf.add(MappingUtilsImpl.convertSupIfCapa(sic.getIfCapType().toString()));
+                // Here it could add null values and cause a null pointer exception
+                // Especially when the MappingUtilsImpl does not contain required supported-if-cap
+                if (MappingUtilsImpl.convertSupIfCapa(sic.getIfCapType().toString()) != null) {
+                    supportedIntf.add(MappingUtilsImpl.convertSupIfCapa(sic.getIfCapType().toString()));
+                }
                 LOG.debug("This the xpdr-type {}", xpdrNodeType.getName());
                 // Here we use both types of Regen (bi/uni). Though initial support is only for bi-directional regen
                 if (xpdrNodeType == XpdrNodeTypes.Regen || xpdrNodeType == XpdrNodeTypes.RegenUni) {
@@ -1065,26 +1069,25 @@ public class PortMappingVersion710 {
                     LOG.info("Regen-profiles {}", sic.getOtsigroupCapabilityProfileName());
                     regenProfiles.addAll(sic.getOtsigroupCapabilityProfileName());
                 }
-                sic1 = sic;
+                if (port.getPortQual() == PortQual.SwitchClient
+                        && sic.getOtnCapability() != null) {
+                    // Here we assume all the supported-interfaces has the support same rates, and the
+                    // trib-slot numbers are assumed to be the same
+                    String mxpProfileName = sic.getOtnCapability().getMpdrClientRestriction().get(0)
+                            .getMuxpProfileName().stream().findFirst().orElseThrow();
+                    // From this muxponder-profile get the min-trib-slot and the max-trib-slot
+                    LOG.info("{}: Muxp-profile used for trib information {}", nodeId, mxpProfileName);
+                    // This provides the tribSlot information from muxProfile
+                    List<OpucnTribSlotDef> minMaxOpucnTribSlots = getOpucnTribSlots(nodeId, mxpProfileName);
+                    mpBldr.setMpdrRestrictions(
+                            new MpdrRestrictionsBuilder()
+                                    .setMinTribSlot(minMaxOpucnTribSlots.get(0))
+                                    .setMaxTribSlot(minMaxOpucnTribSlots.get(1))
+                                    .build());
+                }
             }
             mpBldr.setRegenProfiles(new RegenProfilesBuilder().setRegenProfile(regenProfiles).build())
                     .setSupportedInterfaceCapability(supportedIntf);
-            if (port.getPortQual() == PortQual.SwitchClient
-                && !sic1.getOtnCapability().getMpdrClientRestriction().isEmpty()) {
-                // Here we assume all the supported-interfaces has the support same rates, and the
-                // trib-slot numbers are assumed to be the same
-                String mxpProfileName = sic1.getOtnCapability().getMpdrClientRestriction().get(0).getMuxpProfileName()
-                    .stream().findFirst().orElseThrow();
-                // From this muxponder-profile get the min-trib-slot and the max-trib-slot
-                LOG.info("{}: Muxp-profile used for trib information {}", nodeId, mxpProfileName);
-                // This provides the tribSlot information from muxProfile
-                List<OpucnTribSlotDef> minMaxOpucnTribSlots = getOpucnTribSlots(nodeId, mxpProfileName);
-                mpBldr.setMpdrRestrictions(
-                    new MpdrRestrictionsBuilder()
-                        .setMinTribSlot(minMaxOpucnTribSlots.get(0))
-                        .setMaxTribSlot(minMaxOpucnTribSlots.get(1))
-                        .build());
-            }
         }
         if (port.getAdministrativeState() != null) {
             mpBldr.setPortAdminState(port.getAdministrativeState().name());
index 21166d099f4dccdac32118a5a0ef1846f2a7410d..76b0d8d97ea85d66b8039521779f719cbc1459a4 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.common.mapping;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Comparator;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.Port;
@@ -19,7 +20,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.Port;
  *
  */
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class SortPort121ByName implements Comparator<Port>, Serializable {
index de16646ff313dced3c76c86193dc9a1b27d234b2..565d980008cc03344c384bf3ea1219cc2f75f66d 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.common.mapping;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Comparator;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.Port;
@@ -19,7 +20,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.Port;
  *
  */
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class SortPort221ByName implements Comparator<Port>, Serializable {
index 82fae03f9e30a11491611f544696e55edde63bca..b9f8a88417fde41cd2a78f3ee74bd1f114b2fbdd 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.common.mapping;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Comparator;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.Port;
@@ -18,7 +19,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.Port;
  *
  */
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class SortPort710ByName implements Comparator<Port>, Serializable {
index d3a61a69b7bbeb603c530c9d83567842c0f7dee4..8a4780ca104bb107ab4ede0c0f88cb070e966322 100644 (file)
@@ -11,6 +11,7 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.ListenableFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -28,7 +29,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(value = "UL_UNRELEASED_LOCK_EXCEPTION_PATH",
+@SuppressFBWarnings(value = "UL_UNRELEASED_LOCK_EXCEPTION_PATH",
     justification = "This appears to be doing exactly the right thing with the finally-clause to release the lock")
 public class RequestProcessor {
 
index 6f77b56544c2bdde79496b68f4523d056fe8820e..2f476fcdd4a6132896309e243052ac5c3fa0afb4 100644 (file)
@@ -8,8 +8,10 @@
 
 package org.opendaylight.transportpce.common.openroadminterfaces;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class OpenRoadmInterfaceException extends Exception {
index 16f9714260f2a1fcd503ecf4f51d3ea12c2d1f5b..6ff1015d4da11de216ede44a8aff10c4c0acd38e 100755 (executable)
@@ -21,7 +21,7 @@ import org.opendaylight.transportpce.common.device.DeviceTransaction;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.PortsKey;
index 563f1c906df6b01293e43c60bab14e47663264dc..836bdf35fb6e496c44e2ecf20eb004ae1b38ce41 100644 (file)
@@ -21,7 +21,7 @@ import org.opendaylight.transportpce.common.device.DeviceTransaction;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.pack.Ports;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.pack.PortsKey;
index 368e81c13397db7929638a2c7235ecb88945b582..6055a71385338c51c4f1ed7651cbf1dd1574ec08 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.transportpce.common.service;
 
 import java.util.Map;
 import org.opendaylight.transportpce.common.StringConstants;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -30,6 +30,12 @@ public final class ServiceTypes {
                 if (Uint32.valueOf(100).equals(serviceRate)) {
                     return StringConstants.SERVICE_TYPE_100GE_T;
                 }
+                if (Uint32.valueOf(200).equals(serviceRate)) {
+                    return StringConstants.SERVICE_TYPE_OTUC2;
+                }
+                if (Uint32.valueOf(300).equals(serviceRate)) {
+                    return StringConstants.SERVICE_TYPE_OTUC3;
+                }
                 if (Uint32.valueOf(400).equals(serviceRate)) {
                     return StringConstants.SERVICE_TYPE_400GE;
                 }
index 4ed48cf97a848baa371b2e3716af5192fbd55bab..e1d977858c14b0b78f1e78e8baaa49e1383b037c 100644 (file)
@@ -30,7 +30,7 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.converter.DataObjectConverter;
 import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OperationalModeCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OperationalModeCatalog;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory;
 
 public class CatalogUtilsTest extends AbstractTest {
     private static final Logger LOG = LoggerFactory.getLogger(CatalogUtilsTest.class);
-    private static final String CATALOG_FILE = "src/test/resources/apidocCatalog10_1OptSpecV5_1.json";
+    private static final String CATALOG_FILE = "src/test/resources/apidocCatalog12_0-OptSpecV5_1.json";
 
     private static OperationalModeCatalog omCatalog;
     private static Map<String, Double> outputImpairments = new HashMap<>();
index 00df8dbfad234482b70b45f255203b878cf6b3aa..d6526e3ef739bde9c50fdd1b685dd2c403481da0 100644 (file)
@@ -20,11 +20,11 @@ import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.ServiceRateConstant;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyGHz;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyGHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMaps;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsKey;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
index 53814468b1fe2fda38264ddec3b0146e927d096f..82689ddfa805e764f4be75520f8d24fc86b53a35 100644 (file)
@@ -28,7 +28,7 @@ import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.converter.DataObjectConverter;
 import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
index c5cea9fca4399e50aec8cd0221df34d14844ad23..119bcf28958040bdf875c06d7268ebffaa45b90e 100644 (file)
@@ -26,16 +26,16 @@ import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.test.DataStoreContext;
 import org.opendaylight.transportpce.test.DataStoreContextImpl;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public class PortMappingImplTest {
index 0251229911a9efaf03dbbcc1cd87d10868ce9110..a91af2c79952084bceb5fda03b757e6ec187bed1 100644 (file)
@@ -34,10 +34,10 @@ import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.test.DataStoreContext;
 import org.opendaylight.transportpce.test.DataStoreContextImpl;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.NetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.NetworkBuilder;
+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.types.rev161014.Direction;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData;
index a0703fea995521f5a2ae290027a76de8f74ccae1..c2b5bf5ef515e52829950a509accadcc63bce7f0 100644 (file)
@@ -13,8 +13,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.junit.jupiter.api.Test;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
 import org.opendaylight.yangtools.yang.common.Uint32;
similarity index 87%
rename from common/src/test/resources/apidocCatalog10_1OptSpecV5_1.json
rename to common/src/test/resources/apidocCatalog12_0-OptSpecV5_1.json
index 413c6f5cdf486359f9ef6d1ae26122dc15d1c6f4..830322c4f1e1f8a768e01845df09e8bc3026722a 100644 (file)
                         "openroadm-operational-mode-id": "OR-W-300G-oFEC-63.1Gbd",
                         "baud-rate": "63.1",
                         "line-rate": "378.8",
-                        "modulation-format": "dp-qam16",
+                        "modulation-format": "dp-qam8",
                         "min-TX-osnr": "37.000",
                         "TX-OOB-osnr": {
                             "WR-openroadm-operational-mode-id": "MW-WR-core",
                         "openroadm-operational-mode-id": "OR-W-400G-oFEC-63.1Gbd",
                         "baud-rate": "63.1",
                         "line-rate": "505.1",
-                        "modulation-format": "dp-qam8",
+                        "modulation-format": "dp-qam16",
                         "min-TX-osnr": "37.000",
                         "TX-OOB-osnr": {
                             "WR-openroadm-operational-mode-id": "MW-WR-core",
             },
             "amplifiers": {
                 "Amplifier": {
-                    "min-gain": "0.000",
-                    "max-gain": "27.000",
-                    "max-extended-gain": "31.000",
-                    "mask-gain-ripple-vs-tilt": [
-                        {
-                            "lower-boundary": "-4",
-                            "upper-boundary": "-1",
-                            "C": "-0.50",
-                            "D": "1.00"
-                        },
-                        {
-                            "lower-boundary": "-1",
-                            "upper-boundary": "0",
-                            "C": "0.50",
-                            "D": "2.00"
-                        }
-                    ],
                     "openroadm-operational-mode": [
                         {
                             "openroadm-operational-mode-id": "MWi-standard",
                                 "C": "-1.07100000",
                                 "D": "28.99000000"
                             },
-                            "per-channel-Pout-min": "-9.000",
-                            "per-channel-Pout-max": "2.000"
+                            "mask-power-vs-pin": [
+                                {
+                                    "lower-boundary": "0",
+                                    "upper-boundary": "6",
+                                    "C": "1.00000000",
+                                    "D": "-9.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "6",
+                                    "upper-boundary": "8",
+                                    "C": "-0.00000000",
+                                    "D": "-3.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "8",
+                                    "upper-boundary": "23",
+                                    "C": "0.33333334",
+                                    "D": "-5.66666667",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "23",
+                                    "upper-boundary": "31",
+                                    "C": "0.00000000",
+                                    "D": "2.00000000",
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "min-gain": "0.000",
+                            "max-gain": "27.000",
+                            "max-extended-gain": "31.000",
+                             "mask-gain-ripple-vs-tilt": [
+                                {
+                                    "lower-boundary": "-4",
+                                    "upper-boundary": "-1",
+                                    "C": "-0.50",
+                                    "D": "1.00"
+                                },
+                                {
+                                    "lower-boundary": "-1",
+                                    "upper-boundary": "0",
+                                    "C": "0.50",
+                                    "D": "2.00"
+                                }
+                            ]
                         },
                         {
                             "openroadm-operational-mode-id": "MWi-low-noise",
                                 "C": "-0.58890000",
                                 "D": "37.62000000"
                             },
-                            "per-channel-Pout-min": "-9.000",
-                            "per-channel-Pout-max": "2.000"
+                            "mask-power-vs-pin": [
+                                {
+                                    "lower-boundary": "0",
+                                    "upper-boundary": "6",
+                                    "C": "1.00000000",
+                                    "D": "-9.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "6",
+                                    "upper-boundary": "8",
+                                    "C": "-0.00000000",
+                                    "D": "-3.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "8",
+                                    "upper-boundary": "23",
+                                    "C": "0.33333334",
+                                    "D": "-5.66666667",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "23",
+                                    "upper-boundary": "31",
+                                    "C": "0.00000000",
+                                    "D": "2.00000000",
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "min-gain": "0.000",
+                            "max-gain": "27.000",
+                            "max-extended-gain": "31.000",
+                             "mask-gain-ripple-vs-tilt": [
+                                {
+                                    "lower-boundary": "-4",
+                                    "upper-boundary": "-1",
+                                    "C": "-0.50",
+                                    "D": "1.00"
+                                },
+                                {
+                                    "lower-boundary": "-1",
+                                    "upper-boundary": "0",
+                                    "C": "0.50",
+                                    "D": "2.00"
+                                }
+                            ]
                         }
                     ]
                 }
             }
         }
     }
-}
+}
\ No newline at end of file
index 624584c5e6ed5e76c463129b704634dc690bd3ce..820331c4a8893aecb429baca92d6edabe7d7cd58 100644 (file)
@@ -1 +1 @@
-{"gnpy-api:request":{"topology":{"connections":[{"from_node":"127.0.0.51","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"127.0.0.31"},{"from_node":"127.0.0.10","to_node":"243.0.0.1"},{"from_node":"243.0.0.1","to_node":"127.0.0.30"},{"from_node":"127.0.0.20","to_node":"127.0.0.21"},{"from_node":"127.0.0.20","to_node":"243.0.0.2"},{"from_node":"243.0.0.2","to_node":"127.0.0.10"},{"from_node":"127.0.0.20","to_node":"243.0.0.3"},{"from_node":"243.0.0.3","to_node":"127.0.0.50"},{"from_node":"127.0.0.40","to_node":"127.0.0.41"},{"from_node":"127.0.0.40","to_node":"243.0.0.4"},{"from_node":"243.0.0.4","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"243.0.0.5"},{"from_node":"243.0.0.5","to_node":"127.0.0.30"},{"from_node":"127.0.0.31","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"127.0.0.51"},{"from_node":"127.0.0.20","to_node":"243.0.0.6"},{"from_node":"243.0.0.6","to_node":"127.0.0.30"},{"from_node":"127.0.0.30","to_node":"243.0.0.7"},{"from_node":"243.0.0.7","to_node":"127.0.0.40"},{"from_node":"127.0.0.11","to_node":"127.0.0.10"},{"from_node":"127.0.0.30","to_node":"243.0.0.8"},{"from_node":"243.0.0.8","to_node":"127.0.0.10"},{"from_node":"127.0.0.40","to_node":"243.0.0.9"},{"from_node":"243.0.0.9","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"243.0.0.10"},{"from_node":"243.0.0.10","to_node":"127.0.0.50"},{"from_node":"127.0.0.50","to_node":"243.0.0.11"},{"from_node":"243.0.0.11","to_node":"127.0.0.20"},{"from_node":"127.0.0.50","to_node":"243.0.0.12"},{"from_node":"243.0.0.12","to_node":"127.0.0.40"},{"from_node":"127.0.0.21","to_node":"127.0.0.20"},{"from_node":"127.0.0.41","to_node":"127.0.0.40"},{"from_node":"127.0.0.30","to_node":"243.0.0.13"},{"from_node":"243.0.0.13","to_node":"127.0.0.20"},{"from_node":"127.0.0.10","to_node":"127.0.0.11"},{"from_node":"127.0.0.10","to_node":"243.0.0.14"},{"from_node":"243.0.0.14","to_node":"127.0.0.20"}],"elements":[{"uid":"127.0.0.11","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-1"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.10","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-1"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.51","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-5"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.50","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-5"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.31","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-3"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.30","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-3"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.21","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-2"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.40","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-4"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.20","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-2"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.41","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-4"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"243.0.0.12","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.11","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.10","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.14","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.13","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":140.0,"con_out":0.0,"loss_coef":0.21}},{"uid":"243.0.0.8","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.9","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.4","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.5","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.6","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":140.0,"con_out":0.0,"loss_coef":0.21}},{"uid":"243.0.0.7","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.1","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.2","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.3","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}}]},"service":{"path-request":[{"request-id":"2","bidirectional":false,"dst-tp-id":"ZHN0VHBJZA\u003d\u003d","src-tp-id":"c3JjVHBJZA\u003d\u003d","path-constraints":{"te-bandwidth":{"spacing":50000000000.0,"trx_mode":"W100G","trx_type":"openroadm-beta1","effective-freq-slot":[{"N":0,"M":4}],"path_bandwidth":100.0,"technology":"flexi-grid"}},"source":"127.0.0.11","explicit-route-objects":{"route-object-include-exclude":[{"index":0,"num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.20"},"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero"},{"index":1,"num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.30"},"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero"}]},"destination":"127.0.0.41"}]}}}
\ No newline at end of file
+{"gnpy-api:request":{"topology":{"connections":[{"from_node":"127.0.0.51","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"127.0.0.31"},{"from_node":"127.0.0.10","to_node":"243.0.0.1"},{"from_node":"243.0.0.1","to_node":"127.0.0.30"},{"from_node":"127.0.0.20","to_node":"127.0.0.21"},{"from_node":"127.0.0.20","to_node":"243.0.0.2"},{"from_node":"243.0.0.2","to_node":"127.0.0.10"},{"from_node":"127.0.0.20","to_node":"243.0.0.3"},{"from_node":"243.0.0.3","to_node":"127.0.0.50"},{"from_node":"127.0.0.40","to_node":"127.0.0.41"},{"from_node":"127.0.0.40","to_node":"243.0.0.4"},{"from_node":"243.0.0.4","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"243.0.0.5"},{"from_node":"243.0.0.5","to_node":"127.0.0.30"},{"from_node":"127.0.0.31","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"127.0.0.51"},{"from_node":"127.0.0.20","to_node":"243.0.0.6"},{"from_node":"243.0.0.6","to_node":"127.0.0.30"},{"from_node":"127.0.0.30","to_node":"243.0.0.7"},{"from_node":"243.0.0.7","to_node":"127.0.0.40"},{"from_node":"127.0.0.11","to_node":"127.0.0.10"},{"from_node":"127.0.0.30","to_node":"243.0.0.8"},{"from_node":"243.0.0.8","to_node":"127.0.0.10"},{"from_node":"127.0.0.40","to_node":"243.0.0.9"},{"from_node":"243.0.0.9","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"243.0.0.10"},{"from_node":"243.0.0.10","to_node":"127.0.0.50"},{"from_node":"127.0.0.50","to_node":"243.0.0.11"},{"from_node":"243.0.0.11","to_node":"127.0.0.20"},{"from_node":"127.0.0.50","to_node":"243.0.0.12"},{"from_node":"243.0.0.12","to_node":"127.0.0.40"},{"from_node":"127.0.0.21","to_node":"127.0.0.20"},{"from_node":"127.0.0.41","to_node":"127.0.0.40"},{"from_node":"127.0.0.30","to_node":"243.0.0.13"},{"from_node":"243.0.0.13","to_node":"127.0.0.20"},{"from_node":"127.0.0.10","to_node":"127.0.0.11"},{"from_node":"127.0.0.10","to_node":"243.0.0.14"},{"from_node":"243.0.0.14","to_node":"127.0.0.20"}],"elements":[{"uid":"127.0.0.11","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-1"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.10","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-1"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.21","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-2"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.40","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-4"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.51","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-5"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.50","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-5"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.20","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-2"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.31","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-3"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.30","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"OpenROADM-3"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20.0}},{"uid":"127.0.0.41","metadata":{"location":{"latitude":0.0,"longitude":0.0,"region":"XPONDER-4"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"243.0.0.12","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.11","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.10","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.14","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.13","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":140.0,"con_out":0.0,"loss_coef":0.21}},{"uid":"243.0.0.8","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.9","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.4","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.5","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.6","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":140.0,"con_out":0.0,"loss_coef":0.21}},{"uid":"243.0.0.7","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.1","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.12}},{"uid":"243.0.0.2","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":100.0,"con_out":0.0,"loss_coef":0.29}},{"uid":"243.0.0.3","metadata":{"location":{"latitude":0.0,"city":"N/A","longitude":0.0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0.0,"con_in":0.0,"length":60.0,"con_out":0.0,"loss_coef":0.12}}]},"service":{"path-request":[{"request-id":"2","bidirectional":false,"dst-tp-id":"ZHN0VHBJZA\u003d\u003d","src-tp-id":"c3JjVHBJZA\u003d\u003d","path-constraints":{"te-bandwidth":{"trx_type":"openroadm-beta1","effective-freq-slot":[{"N":0,"M":4}],"spacing":50000000000.0,"path_bandwidth":100.0,"trx_mode":"W100G","technology":"flexi-grid"}},"source":"127.0.0.11","explicit-route-objects":{"route-object-include-exclude":[{"index":0,"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero","num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.20"}},{"index":1,"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero","num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.30"}}]},"destination":"127.0.0.41"}]}}}
\ No newline at end of file
index e4799d66c30f68a916e739f67dbe1e9aa94ecf0a..a7125b35a0c74804cdce30388736010566d2db98 100755 (executable)
@@ -12,6 +12,7 @@
 
 use strict;
 use warnings;
+
 #use diagnostics;  #uncomment this line for more details when encountering warnings
 use Net::OpenSSH;
 use FileHandle;
@@ -20,15 +21,19 @@ use Getopt::Long qw(:config no_ignore_case bundling);
 use IO::Socket;
 use Net::hostent;
 
-my ($host, $help, $usage,  $proxy_port, $login, $password, $kidpid, $ssh_subsocket, $simpleproxy,
-    $pid, $ssh_handle, $client, $server, $capabilities, $hello_message, $verbose);
+my (
+    $host,        $help,         $usage,         $proxy_port,
+    $login,       $password,     $kidpid,        $ssh_subsocket,
+    $simpleproxy, $pid,          $ssh_handle,    $client,
+    $server,      $capabilities, $hello_message, $verbose
+);
 
-GetOptions (
-    "h|help" =>\$help,
-    "p|port=i"=>\$proxy_port,
-    "s|simpleproxy" =>\$simpleproxy,
-    "v|verbose" =>\$verbose,
-    "C|capabilities=s"=>\$capabilities
+GetOptions(
+    "h|help"           => \$help,
+    "p|port=i"         => \$proxy_port,
+    "s|simpleproxy"    => \$simpleproxy,
+    "v|verbose"        => \$verbose,
+    "C|capabilities=s" => \$capabilities
 );
 $usage = "
 USAGE: netconf_TCP_SSH_hijackproxy.pl [-h|--help] [-p|--port <port_number>] [-s|--simpleproxy] [-v|--verbose] [-C|--capabilities <custom_hello_file.xml>] <[login[:password]@]host[:port]> [login] [password]
@@ -59,39 +64,42 @@ if ($help) {
     exit(0);
 }
 
-unless (@ARGV >= 1) {
+unless ( @ARGV >= 1 ) {
     print $usage;
     exit(0);
 }
 
-($host, $login, $password) = @ARGV;
+( $host, $login, $password ) = @ARGV;
 
 #netconf default port is no 22 but 830
-if ($host !~ /:[0-9]+$/) { $host.=':830'; }
+if ( $host !~ /:[0-9]+$/ ) { $host .= ':830'; }
 
-if (!defined($proxy_port)) { $proxy_port = 9000; }
+if ( !defined($proxy_port) ) { $proxy_port = 9000; }
 
-my $connection_string=$host;
+my $connection_string = $host;
 if ($password) {
-   $connection_string=$login.":".$password."@".$connection_string;
-} elsif ($login) {
-   $connection_string=$login."@".$connection_string;
+    $connection_string = $login . ":" . $password . "@" . $connection_string;
+}
+elsif ($login) {
+    $connection_string = $login . "@" . $connection_string;
 }
 
 #retrieving hello custom file if any
-if ((!defined ($simpleproxy))&&(defined ($capabilities))) {
-    open(CAPABILITIES,'<',$capabilities) or die ("can not open $capabilities") ;
+if ( ( !defined($simpleproxy) ) && ( defined($capabilities) ) ) {
+    open( CAPABILITIES, '<', $capabilities )
+      or die("can not open $capabilities");
     while (<CAPABILITIES>) {
         $hello_message .= $_;
     }
-    chop $hello_message; # removing EOF
-    $hello_message.="]]>]]>";
+    chop $hello_message;    # removing EOF
+    $hello_message .= "]]>]]>";
     close(CAPABILITIES);
 }
 
 # the following regex are used to modify some part of the server messages relayed to the client
 # you can adapt it to your needs, some examples have been commented.
-my %regex_hash=(
+my %regex_hash = (
+
 # replace oo-device v1.2 by v1.2.1
 #   'module=org-openroadm-device&amp;revision=2016-10-14.*<\/capability>'=>'s/&amp;revision=2016-10-14/&amp;revision=2017-02-06/',
 #   '<schema><identifier>org-openroadm-device<\/identifier><version>2016-10-14'=>'s@<schema><identifier>org-openroadm-device</identifier><version>2016-10-14@<schema><identifier>org-openroadm-device</identifier><version>2017-02-06@',
@@ -100,105 +108,119 @@ my %regex_hash=(
 # add the ietf-netconf capability to the hello handshake - without it, ODL netconf mountpoints can not work
 #    '<\/capabilities>'=>'s@</capabilities>@\n<capability>urn:ietf:params:xml:ns:yang:ietf-netconf?module=ietf-netconf&amp;revision=2011-06-01</capability>\n</capabilities>@',
 # add the right notifications capabilities to the hello handshake + provide another solution for the ietf-netconf capability
-    '<\/capabilities>'=>'s@</capabilities>@\n<capability>urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&amp;revision=2008-07-14</capability>\n<capability>urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&amp;revision=2008-07-14</capability>\n<capability>urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;revision=2011-06-01</capability>\n</capabilities>@'
+    '<\/capabilities>' =>
+'s@</capabilities>@\n<capability>urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&amp;revision=2008-07-14</capability>\n<capability>urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&amp;revision=2008-07-14</capability>\n<capability>urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;revision=2011-06-01</capability>\n</capabilities>@'
 );
 
-if (defined ($simpleproxy)) { %regex_hash=(); }
+if ( defined($simpleproxy) ) { %regex_hash = (); }
 
 my %compiled_regex_hash;
-foreach my $keyword (keys %regex_hash){
-    eval ('$compiled_regex_hash{$keyword}= qr/'.$keyword.'/;');
+foreach my $keyword ( keys %regex_hash ) {
+    eval( '$compiled_regex_hash{$keyword}= qr/' . $keyword . '/;' );
 }
 
-$server = IO::Socket::INET->new( Proto     => 'tcp',
-                                 LocalPort => $proxy_port,
-                                 Listen    => SOMAXCONN,
-                                 Reuse     => 1);
+$server = IO::Socket::INET->new(
+    Proto     => 'tcp',
+    LocalPort => $proxy_port,
+    Listen    => SOMAXCONN,
+    Reuse     => 1
+);
 die "can't setup server" unless $server;
 print STDERR "[Proxy server $0 accepting clients: Ctrl-C to stop]\n";
 
+while ( $client = $server->accept() ) {
+    $client->autoflush(1);
+    my $hostinfo = gethostbyaddr( $client->peeraddr );
+    printf STDERR "[Incoming connection from %s]\n",
+      $hostinfo->name || $client->peerhost;
 
-while ($client = $server->accept()) {
-  $client->autoflush(1);
-  my $hostinfo = gethostbyaddr($client->peeraddr);
-  printf STDERR "[Incoming connection from %s]\n", $hostinfo->name || $client->peerhost;
+    print STDERR "[relaying to " . $connection_string . "]\n";
 
+    $ssh_handle = Net::OpenSSH->new(
+        $connection_string,
+        master_opts         => [ -o => 'StrictHostKeyChecking=no' ],
+        timeout             => 500,
+        kill_ssh_on_timeout => 500
+    );
 
-print STDERR "[relaying to ".$connection_string."]\n";
+    #netconf requires a specific socket
+    ( $ssh_subsocket, $pid ) =
+      $ssh_handle->open2socket( { ssh_opts => '-s' }, 'netconf' );
+    die "can't establish connection: exiting\n" unless defined($ssh_subsocket);
 
-$ssh_handle = Net::OpenSSH->new($connection_string,
-                                master_opts => [-o => 'StrictHostKeyChecking=no'],
-                                timeout => 500, kill_ssh_on_timeout => 500);
+    print STDERR "[Connected]\n";
 
-#netconf requires a specific socket
-($ssh_subsocket, $pid) = $ssh_handle->open2socket({ssh_opts => '-s'}, 'netconf');
-die "can't establish connection: exiting\n" unless defined($ssh_subsocket);
+    # split the program into two processes, identical twins
+    die "can't fork: $!" unless defined( $kidpid = fork() );
 
-print STDERR "[Connected]\n";
+    $| = 1;
 
-# split the program into two processes, identical twins
-die "can't fork: $!" unless defined($kidpid = fork());
+# the if{} block runs only in the parent process (server output relayed to the client)
+    if ( !$kidpid ) {
 
-$|=1;
+        # copy the socket to standard output
+        my $buf;
 
-# the if{} block runs only in the parent process (server output relayed to the client)
-if (!$kidpid) {
+        if ( defined($hello_message) ) {
 
-    # copy the socket to standard output
-    my $buf;
+            #retrieve the server hello but do not relay it
+            while ( my $nread = sysread( $ssh_subsocket, $buf, 400 ) ) {
+                $ssh_subsocket->flush();
+                if ( $buf =~ /]]>]]>/ ) { last }
+            }
+
+            #send a custom hello message instead
+            print $client $hello_message;
+            if ( defined($verbose) ) { print STDOUT $hello_message; }
+        }
 
-    if (defined ($hello_message)) {
-        #retrieve the server hello but do not relay it
-        while (my $nread = sysread($ssh_subsocket,$buf,400)) {
+#while (<$ssh_subsocket>) {
+#buffer seems not totally flushed when using the usual syntax above (nor when using autoflush)
+        while ( my $nread = sysread( $ssh_subsocket, $buf, 400 ) ) {
+            foreach my $keyword ( keys %regex_hash ) {
+                if ( $buf =~ $compiled_regex_hash{$keyword} ) {
+                    print STDERR 'found regex '
+                      . $keyword
+                      . ": replacing '\n"
+                      . $buf
+                      . "\n' by '\n";
+                    eval( '$buf =~ ' . $regex_hash{$keyword} . ';' );
+                    print STDERR $buf . "\n'\n";
+                }
+            }
+            print $client $buf;
             $ssh_subsocket->flush();
-            if ($buf =~ /]]>]]>/) { last };
-        };
-        #send a custom hello message instead
-        print $client $hello_message;
-        if (defined($verbose))  { print STDOUT  $hello_message; }
-    }
+            if ( defined($verbose) ) { print STDOUT $buf; }
 
-    #while (<$ssh_subsocket>) {
-    #buffer seems not totally flushed when using the usual syntax above (nor when using autoflush)
-    while (my $nread = sysread($ssh_subsocket,$buf,400)) {
-        foreach my $keyword (keys %regex_hash){
-           if($buf =~ $compiled_regex_hash{$keyword}){
-               print STDERR 'found regex '.$keyword.": replacing '\n".$buf."\n' by '\n";
-               eval ('$buf =~ '.$regex_hash{$keyword}.';');
-               print STDERR $buf."\n'\n";
-           }
         }
-        print $client $buf;
-        $ssh_subsocket->flush();
-        if (defined($verbose))  { print STDOUT  $buf; }
 
-    };
+        kill( "TERM", $kidpid );    # send SIGTERM to child
+    }
 
-    kill("TERM", $kidpid);              # send SIGTERM to child
-}
 # the else{} block runs only in the child process (client input relayed to the server)
-else {
-
-   $ssh_subsocket->autoflush(1);
-   sleep 1;                             # wait needed for ensuring STDOUT buffer is not melt
-   my $buf;
-
-   #while (defined (my $buf = <$client>)) {
-   #usual syntax above used in verbose mode results into flush problems
-   while (my $nread = sysread($client,$buf,400)) {
-      print $ssh_subsocket $buf;
-      $client->flush();
-      if (defined($verbose))  { print STDOUT  $buf; }
-   }continue {}
+    else {
+
+        $ssh_subsocket->autoflush(1);
+        sleep 1;    # wait needed for ensuring STDOUT buffer is not melt
+        my $buf;
+
+        #while (defined (my $buf = <$client>)) {
+        #usual syntax above used in verbose mode results into flush problems
+        while ( my $nread = sysread( $client, $buf, 400 ) ) {
+            print $ssh_subsocket $buf;
+            $client->flush();
+            if ( defined($verbose) ) { print STDOUT $buf; }
+        }
+        continue { }
 
-   close $client;
+        close $client;
 
-}
+    }
 
-$|=0;
+    $| = 0;
 
-sleep 2;
-kill("TERM", $kidpid);                  # send SIGTERM to child
+    sleep 2;
+    kill( "TERM", $kidpid );    # send SIGTERM to child
 
 }
 
index 789fe187e183bf3fea16b65e27260e280a17e043..78367550b35cd6bc4abd28c2af2860372e916081 100755 (executable)
 
 use strict;
 use warnings;
+
 #use diagnostics;  #uncomment this line for more details when encountering warnings
 use Net::OpenSSH;
 use FileHandle;
 use Getopt::Long qw(:config no_ignore_case bundling);
 
-my ($host, $help, $usage,  $capabilities, $login, $password, $kidpid, $hello_message);
-
+my ( $host, $help, $usage, $capabilities, $login, $password, $kidpid,
+    $hello_message );
 
-GetOptions (
-    "h|help" =>\$help,
-    "C|capabilities=s"=>\$capabilities
+GetOptions(
+    "h|help"           => \$help,
+    "C|capabilities=s" => \$capabilities
 );
 $usage = "
 USAGE: netconf_terminal.pl [-h|--help] [-C|--capabilities <custom_hello_file.xml>] <[login[:password]@]host[:port]> [login] [password]
@@ -43,39 +44,42 @@ if ($help) {
     exit(0);
 }
 
-unless (@ARGV >= 1) {
+unless ( @ARGV >= 1 ) {
     print $usage;
     exit(0);
 }
 
-($host, $login, $password) = @ARGV;
+( $host, $login, $password ) = @ARGV;
 
 #netconf default port is no 22 but 830
-if ($host !~ /:[0-9]+$/) {
-    $host.=':830';
+if ( $host !~ /:[0-9]+$/ ) {
+    $host .= ':830';
 }
 
-my $connection_string=$host;
+my $connection_string = $host;
 if ($password) {
-   $connection_string=$login.":".$password."@".$connection_string;
-} elsif ($login) {
-   $connection_string=$login."@".$connection_string;
+    $connection_string = $login . ":" . $password . "@" . $connection_string;
+}
+elsif ($login) {
+    $connection_string = $login . "@" . $connection_string;
 }
 
 #retrieving hello custom file if any
-if (defined ($capabilities)) {
-    open(CAPABILITIES,'<',$capabilities) or die ("can not open $capabilities") ;
+if ( defined($capabilities) ) {
+    open( CAPABILITIES, '<', $capabilities )
+      or die("can not open $capabilities");
     while (<CAPABILITIES>) {
         $hello_message .= $_;
     }
-    chop $hello_message; # removing EOF
-    $hello_message.="\n]]>]]>\n";
+    chop $hello_message;    # removing EOF
+    $hello_message .= "\n]]>]]>\n";
     close(CAPABILITIES);
 }
+
 #otherwise using a basic hello message
 #EXI extension is not advertised by default since difficult to handle manually
-else{
-    $hello_message='<?xml version="1.0" encoding="utf-8"?>
+else {
+    $hello_message = '<?xml version="1.0" encoding="utf-8"?>
 <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
 <capabilities>
 <capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;revision=2010-10-04</capability>
@@ -90,61 +94,65 @@ else{
 <capability>urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&amp;revision=2013-07-15</capability>
 </capabilities>
 </hello>';
-    $hello_message.="\n]]>]]>\n";
+    $hello_message .= "\n]]>]]>\n";
 }
 
+print STDERR "connecting to " . $connection_string . "\n";
 
-print STDERR "connecting to ".$connection_string."\n";
-
-my $ssh_handle= Net::OpenSSH->new($connection_string,
-                                  master_opts => [-o => 'StrictHostKeyChecking=no'],
-                                  timeout => 500, kill_ssh_on_timeout => 500);
+my $ssh_handle = Net::OpenSSH->new(
+    $connection_string,
+    master_opts         => [ -o => 'StrictHostKeyChecking=no' ],
+    timeout             => 500,
+    kill_ssh_on_timeout => 500
+);
 
 #netconf requires a specific socket
-my ($ssh_subsocket, $pid) = $ssh_handle->open2socket({ssh_opts => '-s'}, 'netconf');
+my ( $ssh_subsocket, $pid ) =
+  $ssh_handle->open2socket( { ssh_opts => '-s' }, 'netconf' );
 die "can't establish connection: exiting\n" unless defined($ssh_subsocket);
 
 print STDERR "[Connected]\n";
 
 # split the program into two processes, identical twins
-die "can't fork: $!" unless defined($kidpid = fork());
-
+die "can't fork: $!" unless defined( $kidpid = fork() );
 
 # the if{} block runs only in the parent process (terminal output)
-if (!$kidpid) {
+if ( !$kidpid ) {
 
-    $|=1;
+    $| = 1;
 
     # copy the socket to standard output
     my $buf;
     my $nread;
-    #while (<$ssh_subsocket>) {
-    #buffer seems not totally flushed when using the syntax above (nor when using autoflush)
-    while ($nread = sysread($ssh_subsocket,$buf,150)) {
+
+#while (<$ssh_subsocket>) {
+#buffer seems not totally flushed when using the syntax above (nor when using autoflush)
+    while ( $nread = sysread( $ssh_subsocket, $buf, 150 ) ) {
         print $buf;
         $ssh_subsocket->flush();
-    };
+    }
 
     print;
-    kill("TERM", $kidpid);                  # send SIGTERM to child
+    kill( "TERM", $kidpid );    # send SIGTERM to child
 }
+
 # the else{} block runs only in the child process (terminal input)
 else {
 
-   $ssh_subsocket->autoflush(1);
-   sleep 1;                                 # wait needed for ensuring STDOUT buffer is not melt
+    $ssh_subsocket->autoflush(1);
+    sleep 1;    # wait needed for ensuring STDOUT buffer is not melt
 
-   if (defined ($hello_message)) {
-       print $ssh_subsocket $hello_message;
-       sleep 1;
-   }
+    if ( defined($hello_message) ) {
+        print $ssh_subsocket $hello_message;
+        sleep 1;
+    }
 
-   while (defined (my $line = <STDIN>)) {
-      print $ssh_subsocket $line;
-   }
+    while ( defined( my $line = <STDIN> ) ) {
+        print $ssh_subsocket $line;
+    }
 
 }
 
 sleep 2;
-kill("TERM", $kidpid);                      # send SIGTERM to child
+kill( "TERM", $kidpid );    # send SIGTERM to child
 exit;
index b6faaa33eb97bc9d5b9c195a9830ab6802607ee1..f3da0a7efcdc8d00a77c460b650c8be9097c7510 100644 (file)
@@ -9,18 +9,18 @@
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-dmaap-client</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
   <description>client to send message to Dmaap message router</description>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
index 51742f2c82eeac1acbc93bbf947ec819cb828fd0..45b0850727bea033893f74bb478cb13c19c49138 100644 (file)
@@ -8,9 +8,8 @@
 package org.opendaylight.transportpce.dmaap.client.impl;
 
 import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.transportpce.dmaap.client.listener.NbiNotificationsListenerImpl;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.transportpce.dmaap.client.listener.NbiNotificationsHandler;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
@@ -33,7 +32,7 @@ public class DmaapClientProvider {
     }
 
     private static final Logger LOG = LoggerFactory.getLogger(DmaapClientProvider.class);
-    private ListenerRegistration<NbiNotificationsListener> listenerRegistration;
+    private Registration listenerRegistration;
 
     @Activate
     public DmaapClientProvider(@Reference NotificationService notificationService, Configuration config) {
@@ -42,8 +41,8 @@ public class DmaapClientProvider {
 
     public DmaapClientProvider(NotificationService notificationService, String baseUrl,
             String username, String password) {
-        listenerRegistration = notificationService.registerNotificationListener(
-                new NbiNotificationsListenerImpl(baseUrl, username, password));
+        final var listener = new NbiNotificationsHandler(baseUrl, username, password);
+        listenerRegistration = notificationService.registerCompositeListener(listener.getCompositeListener());
         LOG.info("DmaapClientProvider Session Initiated");
     }
 
similarity index 63%
rename from dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsListenerImpl.java
rename to dmaap-client/src/main/java/org/opendaylight/transportpce/dmaap/client/listener/NbiNotificationsHandler.java
index fcf0b000dd8c80e88ab4c782e025cc2b4af76c93..07812c168eb168febc3aa76333da28b1244448d1 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.dmaap.client.listener;
 
+import java.util.Set;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
@@ -14,22 +15,22 @@ import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.glassfish.jersey.client.proxy.WebResourceFactory;
 import org.glassfish.jersey.jackson.JacksonFeature;
 import org.glassfish.jersey.logging.LoggingFeature;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.dmaap.client.resource.EventsApi;
 import org.opendaylight.transportpce.dmaap.client.resource.config.JsonConfigurator;
 import org.opendaylight.transportpce.dmaap.client.resource.model.CreatedEvent;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
-    private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsListenerImpl.class);
+public class NbiNotificationsHandler {
+    private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsHandler.class);
     private String topic = "unauthenticated.TPCE";
     private EventsApi api;
 
-    public NbiNotificationsListenerImpl(String baseUrl, String username, String password) {
+    public NbiNotificationsHandler(String baseUrl, String username, String password) {
         LOG.info("Dmaap server {} for user {}", baseUrl, username);
         Client client = ClientBuilder.newClient();
         if (username != null && username.isBlank() && password != null && !password.isBlank()) {
@@ -43,8 +44,18 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
 
     }
 
-    @Override
-    public void onPublishNotificationProcessService(PublishNotificationProcessService notification) {
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(
+                PublishNotificationProcessService.class, this::onPublishNotificationProcessService),
+            new CompositeListener.Component<>(
+                PublishNotificationAlarmService.class, this::onPublishNotificationAlarmService),
+            new CompositeListener.Component<>(
+                PublishTapiNotificationService.class, this::onPublishTapiNotificationService)
+        ));
+    }
+
+    void onPublishNotificationProcessService(PublishNotificationProcessService notification) {
         try {
             CreatedEvent response = api.sendEvent(topic, notification);
             LOG.info("Response received {}", response);
@@ -54,11 +65,9 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
 
     }
 
-    @Override
-    public void onPublishNotificationAlarmService(PublishNotificationAlarmService notification) {
+    private void onPublishNotificationAlarmService(PublishNotificationAlarmService notification) {
     }
 
-    @Override
-    public void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
+    private void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
     }
 }
index 4284f8656dcd40659e7f17f77ea8be230a86a3e1..7fc5955f011ef64bcb47ccdf1d658dd7522c6dab 100644 (file)
@@ -14,7 +14,7 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import org.opendaylight.transportpce.dmaap.client.resource.model.CreatedEvent;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
 
 @Path("/events")
 public interface EventsApi {
index 3997ff3e58f7fbc9dc049dcd63f5d42ffc58df7d..59080914bca1786dca6a23e9b013d6c5ea47a7a0 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.Lgx;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.Lgx;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 0f9c8a12277dd04bd40a0abf59eecd73a52c4884..e1472b0e1c407a9b49270e4beb6444c6351a349a 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.Port;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.Port;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 5ae404b156b91ddf10d5944c7af8d8abb208ba31..c16b395210c747cca0bf040b30bbd76d368552be 100644 (file)
@@ -9,13 +9,13 @@ package org.opendaylight.transportpce.dmaap.client.resource.config;
 
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.datatype.jsr310.PackageVersion;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.Lgx;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.Port;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.Lgx;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.Port;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEnd;
 
 //This class is a temporary workaround while waiting jackson
 //support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 5361e3fa00fec5b16588ca83c2d5792cadbc0fa3..b48db260759b7974b5ea049160cf23abc788722b 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 234ed21517098e1a18c4246016893f9120df438a..99324f7180448f2e4731d942cf6163dfe19fa104 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirection;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 3d48bf57e2466fac24d5ece0c4c1c3789d112189..edb2583b7ebd77fbef63291d8e526adc9437baf6 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEnd;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index b31bf5db62fbfd03e71351212828093f078a3c65..bcefe867766cc973981984ac052d9f0d23d56c4c 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEnd;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 2df5a2c6429f61b32f98bd59900e8c10cf07a40e..bb644f7786e9b73d0934bc3571e78d6a4bef15c4 100644 (file)
@@ -11,7 +11,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 import java.io.IOException;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirection;
 
 // This class is a temporary workaround while waiting jackson
 // support in yang tools https://git.opendaylight.org/gerrit/c/yangtools/+/94852
index 79f7edcf3ee0b9a4164dd08a73e7e9295c041652..93c7940fa080ccb754b1be3135d3ee0bf7a6d835 100644 (file)
@@ -16,7 +16,6 @@ import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.transportpce.dmaap.client.listener.NbiNotificationsListenerImpl;
 
 
 public class DmaapClientProviderTest {
@@ -33,7 +32,7 @@ public class DmaapClientProviderTest {
     void testInitRegisterNbiNotificationsToRpcRegistry() {
         new DmaapClientProvider(notificationService, "http://localhost", "username", "password");
         verify(notificationService, times(1))
-            .registerNotificationListener(Mockito.any(NbiNotificationsListenerImpl.class));
+            .registerCompositeListener(Mockito.any(NotificationService.CompositeListener.class));
     }
 
 }
@@ -22,23 +22,22 @@ import org.glassfish.jersey.test.TestProperties;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.dmaap.client.resource.EventsApiStub;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEndBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
 import org.slf4j.LoggerFactory;
 
-public class NbiNotificationsListenerImplTest extends JerseyTest {
+public class NbiNotificationsHandlerTest extends JerseyTest {
     @Override
     protected Application configure() {
         enable(TestProperties.LOG_TRAFFIC);
@@ -48,11 +47,11 @@ public class NbiNotificationsListenerImplTest extends JerseyTest {
 
     @Test
     void onPublishNotificationServiceTest() {
-        Logger logger = (Logger) LoggerFactory.getLogger(NbiNotificationsListenerImpl.class);
+        Logger logger = (Logger) LoggerFactory.getLogger(NbiNotificationsHandler.class);
         ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
         listAppender.start();
         logger.addAppender(listAppender);
-        NbiNotificationsListener listener = new NbiNotificationsListenerImpl("http://localhost:9998", null, null);
+        NbiNotificationsHandler listener = new NbiNotificationsHandler("http://localhost:9998", null, null);
         PublishNotificationProcessService notification = new PublishNotificationProcessServiceBuilder()
                 .setCommonId("CommonId")
                 .setMessage("Service implemented")
index 0eae088536aa042748898abbfc46033b1e264919..24e2e6d0a651e806a480bde8f48fc399e8dbeecb 100644 (file)
@@ -14,6 +14,8 @@ from docs_conf.conf import *
 linkcheck_ignore = [
     # Ignore dmaap sample URL
     'https://dmaap-mr:30226',
+    # LFN CI connectivy issue with tox wiki URL
+    'https://tox.wiki',
     # OpenROADM white paper often has connectivity issues from the Gate
     'https://0201.nccdn.net/1_2/000/000/134/c50/Open-ROADM-MSA-release-2-Device-White-paper-v1-1.pdf'
 ]
index 2ba005c69d90b6f3c93ca3dc7efa4cfad7addb0b..6473ffb064e78acc286e12da022f2488deb53744 100644 (file)
@@ -42,7 +42,7 @@ Tox configuration
 -----------------
 
 `Tox` configuration is written in the `tox.ini` file at the root folder of the Git project.
-Please read `tox official documentation <https://tox.readthedocs.io/>`_ for more details.
+Please read `tox official documentation <https://tox.wiki/>`_ for more details.
 For tox users, the most important parameter in the `[tox]` section is `envlist`.
 It specifies which profiles to run by default (i.e. when tox is called without the option `-e`).
 The option `-e` overrides this parameter and allows to choose which profiles to run.
index bbcd7a94f0103a08fd72fb0c7f40ba5d3ce704be..4c91daabfb397eebcf011bf1c8210df42bec4742 100644 (file)
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>feature-repo-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>features-transportpce</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: TransportPCE :: Features</name>
 
@@ -65,11 +65,5 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
       <classifier>features</classifier>
       <type>xml</type>
     </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>odl-transportpce-swagger</artifactId>
-      <classifier>features</classifier>
-      <type>xml</type>
-    </dependency>
   </dependencies>
 </project>
index 50cef56f61977db58901548bb6f75d9b0741436d..c584e675ff1a72994692b1c12c18d92e7c6dbc6b 100644 (file)
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-dmaap-client</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: dmaap-client</name>
 
index 94a277eb1fccf6511af4d8482dee1449ec5f320f..3ef6613991db240eb0e97ffddf95adbe0c0cf452 100644 (file)
@@ -9,20 +9,20 @@
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-inventory</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: Inventory</name>
 
   <properties>
-    <mdsal.version>11.0.7</mdsal.version>
-    <netconf.version>5.0.4</netconf.version>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <mdsal.version>13.0.1</mdsal.version>
+    <netconf.version>7.0.4</netconf.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
     <transportpce.db.host>localhost:3306</transportpce.db.host>
     <transportpce.db.database>transportpce</transportpce.db.database>
     <transportpce.db.username>root</transportpce.db.username>
       <classifier>features</classifier>
       <type>xml</type>
     </dependency>
-    <dependency>
+    <!--dependency>
       <groupId>org.opendaylight.netconf</groupId>
       <artifactId>odl-netconf-mapping-api</artifactId>
       <classifier>features</classifier>
       <type>xml</type>
-    </dependency>
+    </dependency-->
     <dependency>
       <groupId>org.opendaylight.transportpce</groupId>
       <artifactId>transportpce-inventory</artifactId>
index 8fa209c38d3548ca4b2faa17785363fe90191232..42810dcf9d7a9842fdd0d4513928e2e0562aafe5 100644 (file)
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-nbinotifications</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: nbinotifications</name>
 
diff --git a/features/odl-transportpce-swagger/pom.xml b/features/odl-transportpce-swagger/pom.xml
deleted file mode 100644 (file)
index 6054220..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright © 2021 Orange and others. All rights reserved.
-
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.opendaylight.odlparent</groupId>
-    <artifactId>single-feature-parent</artifactId>
-    <version>12.0.3</version>
-    <relativePath/>
-  </parent>
-
-  <groupId>org.opendaylight.transportpce</groupId>
-  <artifactId>odl-transportpce-swagger</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
-  <packaging>feature</packaging>
-  <name>OpenDaylight :: transportpce :: swagger</name>
-
-  <properties>
-    <netconf.version>5.0.4</netconf.version>
-    <configfile.directory>etc/opendaylight/karaf</configfile.directory>
-    <skip.karaf.featureTest>false</skip.karaf.featureTest>
-  </properties>
-
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.opendaylight.netconf</groupId>
-        <artifactId>netconf-artifacts</artifactId>
-        <version>${netconf.version}</version>
-        <type>pom</type>
-        <scope>import</scope>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.opendaylight.netconf</groupId>
-      <artifactId>odl-mdsal-apidocs</artifactId>
-      <classifier>features</classifier>
-      <type>xml</type>
-    </dependency>
-  </dependencies>
-</project>
index b4bcfe26585796e5ab647e4ac62ea0f52b5ad8c7..378a45a63ed354764f865d5d6cbbe6726681edfd 100644 (file)
@@ -12,20 +12,20 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce-tapi</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce :: tapi</name>
 
   <properties>
-    <mdsal.version>11.0.7</mdsal.version>
-    <netconf.version>5.0.4</netconf.version>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <mdsal.version>13.0.1</mdsal.version>
+    <netconf.version>7.0.4</netconf.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
     <skip.karaf.featureTest>false</skip.karaf.featureTest>
   </properties>
 
@@ -41,7 +41,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
       <dependency>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>mdsal-artifacts</artifactId>
-        <version>11.0.7</version>
+        <version>13.0.1</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
@@ -58,7 +58,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>odl-tapi-2.1.1-models</artifactId>
+      <artifactId>odl-tapi-2.4.0-models</artifactId>
       <classifier>features</classifier>
       <type>xml</type>
     </dependency>
index 14e942f365b869f8118091e1c6516bfe3536bdf4..2e0798deedbfd63b40208be3fbf94aeb42e75bcc 100644 (file)
@@ -12,19 +12,19 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>single-feature-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>odl-transportpce</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>feature</packaging>
   <name>OpenDaylight :: transportpce</name>
 
   <properties>
-    <netconf.version>5.0.4</netconf.version>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <netconf.version>7.0.4</netconf.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
     <configfile.directory>etc/opendaylight/karaf</configfile.directory>
     <skip.karaf.featureTest>false</skip.karaf.featureTest>
   </properties>
index 3efdda4f80a00841a7be0fddf8ec919e3419bbd4..1d79b7023cdc37bd1259a0adff2e26cdc1c803c3 100644 (file)
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>features-aggregator</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <name>${project.artifactId}</name>
   <packaging>pom</packaging>
 
@@ -29,6 +29,24 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <module>odl-transportpce-inventory</module>
     <module>odl-transportpce-nbinotifications</module>
     <module>odl-transportpce-dmaap-client</module>
-    <module>odl-transportpce-swagger</module>
   </modules>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-install-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>
index b19e6532625f1ed26f66317552a6a4f9d7bc88bb..176dcbed457e7831a18e2f28c5ce02a1fd4f8915 100644 (file)
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-inventory</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -35,7 +35,7 @@
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.4</version>
+        <version>7.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>yang-binding</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-binding-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.netconf</groupId>
-      <artifactId>sal-netconf-connector</artifactId>
+      <artifactId>netconf-client-mdsal</artifactId>
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
index 368f4020301ce6061a0f02fa9c94434a4e91dde2..e1fd3cfe921fa07acc41c53c22084d85c9aa985a 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.transportpce.inventory;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -16,7 +17,7 @@ import javax.sql.DataSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING",
     justification = "TODO review the SQL statement generation process")
 public class INode {
index bce48a2da045f298b44134e32674466381bda119..def34d0e9eb0665543d0c36e200965f957b23da7 100644 (file)
@@ -13,6 +13,7 @@ import static org.opendaylight.transportpce.inventory.utils.StringUtils.getCurre
 import static org.opendaylight.transportpce.inventory.utils.StringUtils.prepareDashString;
 import static org.opendaylight.transportpce.inventory.utils.StringUtils.prepareEmptyString;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -83,7 +84,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING",
     justification = "TODO review the SQL statement generation process")
 public class INode121 {
index 5827dc25aa595afb7b5c2283c2955b54e78ee52a..f42261759dfbf70be54cd5e664cc074c17eb9c5b 100644 (file)
@@ -12,6 +12,7 @@ import static org.opendaylight.transportpce.inventory.utils.StringUtils.getCurre
 import static org.opendaylight.transportpce.inventory.utils.StringUtils.prepareDashString;
 import static org.opendaylight.transportpce.inventory.utils.StringUtils.prepareEmptyString;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -79,7 +80,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING",
     justification = "TODO review the SQL statement generation process")
 public class INode221 {
index 4cf13e80f3863c4a967d604e315d4b0046b78800..490952c962cd5387081f5877a8433634933c0eaa 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.transportpce.inventory.listener;
 
-import java.util.Collection;
+import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
@@ -19,7 +19,7 @@ public class ClliNetworkChangeListener implements DataTreeChangeListener<Network
     private static final Logger LOG = LoggerFactory.getLogger(ClliNetworkChangeListener.class);
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Network>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Network>> changes) {
         LOG.info("Clli network changed {}", changes);
     }
 
index 6e4ccfad917b3c13010d363236b1b1cdd86ce5a3..837f225dd31414509100fff6bf926f953d98c32f 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.transportpce.inventory.listener;
 
 import java.util.Collection;
@@ -18,8 +17,8 @@ import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.inventory.DeviceInventory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.ConnectionOper.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev231121.NetconfNode;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,24 +42,24 @@ public class DeviceConfigListener implements DataTreeChangeListener<Node> {
     }
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
 
         //LOG.debug("testing np1: {}", changes.toString());
         String openROADMversion = "";
         List<DataTreeModification<Node>> changesWithoutDefaultNetconfNode = getRealDevicesOnly(changes);
         for (DataTreeModification<Node> device : changesWithoutDefaultNetconfNode) {
             DataObjectModification<Node> rootNode = device.getRootNode();
-            String nodeId = rootNode.getDataAfter().key().getNodeId().getValue();
+            String nodeId = rootNode.dataAfter().key().getNodeId().getValue();
 
             LOG.debug("nodeId {}", nodeId);
 
-            NetconfNode netconfNode = rootNode.getDataAfter().augmentation(NetconfNode.class);
+            NetconfNode netconfNode = rootNode.dataAfter().augmentation(NetconfNode.class);
             ConnectionStatus connectionStatus =
                     netconfNode.getConnectionStatus();
             long count = netconfNode.getAvailableCapabilities().getAvailableCapability().stream()
                     .filter(cp -> cp.getCapability().contains(StringConstants.OPENROADM_DEVICE_MODEL_NAME))
                     .count();
-            LOG.debug("DCL Modification Type {}", device.getRootNode().getModificationType().toString());
+            LOG.debug("DCL Modification Type {}", device.getRootNode().modificationType());
             LOG.debug("DCL Capability Count {}", count);
             LOG.debug("DCL Connection Status {}", connectionStatus);
             if (isCreate(device) || isUpdate(device)) {
@@ -112,16 +111,16 @@ public class DeviceConfigListener implements DataTreeChangeListener<Node> {
      */
     private static List<DataTreeModification<Node>> getRealDevicesOnly(Collection<DataTreeModification<Node>> changes) {
         return changes.stream()
-                .filter(change -> (change.getRootNode().getDataAfter() != null
+                .filter(change ->
+                    (change.getRootNode().dataAfter() != null
                         && !StringConstants.DEFAULT_NETCONF_NODEID
-                        .equalsIgnoreCase(change.getRootNode().getDataAfter().key().getNodeId().getValue())
-                        && change.getRootNode().getDataAfter().augmentation(NetconfNode.class) != null)
-                        || (change.getRootNode().getDataBefore() != null
-                        && !StringConstants.DEFAULT_NETCONF_NODEID.equalsIgnoreCase(
-                        change.getRootNode().getDataBefore().key().getNodeId().getValue())
-                        && change.getRootNode().getDataBefore().augmentation(NetconfNode.class) != null
-
-                )).collect(Collectors.toList());
+                            .equalsIgnoreCase(change.getRootNode().dataAfter().key().getNodeId().getValue())
+                        && change.getRootNode().dataAfter().augmentation(NetconfNode.class) != null)
+                    || (change.getRootNode().dataBefore() != null
+                        && !StringConstants.DEFAULT_NETCONF_NODEID
+                            .equalsIgnoreCase(change.getRootNode().dataBefore().key().getNodeId().getValue())
+                        && change.getRootNode().dataBefore().augmentation(NetconfNode.class) != null))
+                .collect(Collectors.toList());
     }
 
     /**
@@ -129,8 +128,8 @@ public class DeviceConfigListener implements DataTreeChangeListener<Node> {
      *
      */
     private static boolean isCreate(DataTreeModification<Node> change) {
-        return change.getRootNode().getDataBefore() == null && change.getRootNode().getDataAfter() != null
-                && ModificationType.WRITE.equals(change.getRootNode().getModificationType());
+        return change.getRootNode().dataBefore() == null && change.getRootNode().dataAfter() != null
+                && ModificationType.WRITE.equals(change.getRootNode().modificationType());
     }
 
     /**
@@ -138,7 +137,7 @@ public class DeviceConfigListener implements DataTreeChangeListener<Node> {
      *
      */
     private static boolean isUpdate(DataTreeModification<Node> change) {
-        return ModificationType.SUBTREE_MODIFIED.equals(change.getRootNode().getModificationType());
+        return ModificationType.SUBTREE_MODIFIED.equals(change.getRootNode().modificationType());
     }
 
     /**
@@ -146,7 +145,7 @@ public class DeviceConfigListener implements DataTreeChangeListener<Node> {
      *
      */
     private static boolean isDelete(DataTreeModification<Node> change) {
-        return change.getRootNode().getDataBefore() != null && change.getRootNode().getDataAfter() == null
-                && ModificationType.DELETE.equals(change.getRootNode().getModificationType());
+        return change.getRootNode().dataBefore() != null && change.getRootNode().dataAfter() == null
+                && ModificationType.DELETE.equals(change.getRootNode().modificationType());
     }
 }
index 3ba26dfe48a82ecec611a87df8749a37241967d8..7e51845b56dea9916d4a349d1c3c7e5ec6732e79 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.transportpce.inventory.listener;
 
 import java.util.Collection;
@@ -17,8 +16,8 @@ import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.inventory.DeviceInventory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.ConnectionOper.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev231121.NetconfNode;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -42,22 +41,22 @@ public class DeviceListener implements DataTreeChangeListener<Node> {
     }
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
         //LOG.debug("testing np1: {}", changes.toString());
         String openROADMversion = "";
         List<DataTreeModification<Node>> changesWithoutDefaultNetconfNode = getRealDevicesOnly(changes);
         for (DataTreeModification<Node> device : changesWithoutDefaultNetconfNode) {
-            String nodeId = device.getRootNode().getDataAfter().key().getNodeId().getValue();
-            NetconfNode netconfNode = device.getRootNode().getDataAfter().augmentation(NetconfNode.class);
+            String nodeId = device.getRootNode().dataAfter().key().getNodeId().getValue();
+            NetconfNode netconfNode = device.getRootNode().dataAfter().augmentation(NetconfNode.class);
             ConnectionStatus connectionStatus = netconfNode.getConnectionStatus();
             long count = netconfNode.getAvailableCapabilities().getAvailableCapability().stream()
                     .filter(cp -> cp.getCapability().contains(StringConstants.OPENROADM_DEVICE_MODEL_NAME))
                     .count();
-            LOG.debug("DL Modification Type {}", device.getRootNode().getModificationType().toString());
+            LOG.debug("DL Modification Type {}", device.getRootNode().modificationType());
             LOG.debug("DL Capability Count {}", count);
             LOG.debug("DL Connection Status {}", connectionStatus);
-            LOG.debug("DL device.getRootNode().getDataBefore() {}", device.getRootNode().getDataBefore());
-            LOG.debug("DL device.getRootNode().getDataAfter() {}", device.getRootNode().getDataAfter());
+            LOG.debug("DL device.getRootNode().getDataBefore() {}", device.getRootNode().dataBefore());
+            LOG.debug("DL device.getRootNode().getDataAfter() {}", device.getRootNode().dataAfter());
 
             if (isCreate(device)) {
                 LOG.info("Node {} was created", nodeId);
@@ -112,16 +111,16 @@ public class DeviceListener implements DataTreeChangeListener<Node> {
      */
     private static List<DataTreeModification<Node>> getRealDevicesOnly(Collection<DataTreeModification<Node>> changes) {
         return changes.stream()
-                .filter(change -> (change.getRootNode().getDataAfter() != null
+                .filter(change ->
+                    (change.getRootNode().dataAfter() != null
                         && !StringConstants.DEFAULT_NETCONF_NODEID
-                        .equalsIgnoreCase(change.getRootNode().getDataAfter().key().getNodeId().getValue())
-                        && change.getRootNode().getDataAfter().augmentation(NetconfNode.class) != null)
-                        || (change.getRootNode().getDataBefore() != null
-                        && !StringConstants.DEFAULT_NETCONF_NODEID.equalsIgnoreCase(
-                        change.getRootNode().getDataBefore().key().getNodeId().getValue())
-                        && change.getRootNode().getDataBefore().augmentation(NetconfNode.class) != null
-
-                )).collect(Collectors.toList());
+                            .equalsIgnoreCase(change.getRootNode().dataAfter().key().getNodeId().getValue())
+                        && change.getRootNode().dataAfter().augmentation(NetconfNode.class) != null)
+                    || (change.getRootNode().dataBefore() != null
+                        && !StringConstants.DEFAULT_NETCONF_NODEID
+                            .equalsIgnoreCase(change.getRootNode().dataBefore().key().getNodeId().getValue())
+                        && change.getRootNode().dataBefore().augmentation(NetconfNode.class) != null))
+                .collect(Collectors.toList());
     }
 
     /**
@@ -129,7 +128,7 @@ public class DeviceListener implements DataTreeChangeListener<Node> {
      *
      */
     private static boolean isCreate(DataTreeModification<Node> change) {
-        return change.getRootNode().getModificationType().toString().equalsIgnoreCase("WRITE");
+        return change.getRootNode().modificationType().toString().equalsIgnoreCase("WRITE");
     }
 
     /**
@@ -137,7 +136,7 @@ public class DeviceListener implements DataTreeChangeListener<Node> {
      *
      */
     private static boolean isDelete(DataTreeModification<Node> change) {
-        return change.getRootNode().getDataBefore() != null && change.getRootNode().getDataAfter() == null
-                && ModificationType.DELETE.equals(change.getRootNode().getModificationType());
+        return change.getRootNode().dataBefore() != null && change.getRootNode().dataAfter() == null
+                && ModificationType.DELETE.equals(change.getRootNode().modificationType());
     }
-}
\ No newline at end of file
+}
index 26fd56d13ea4b1cedd327cab4c61fb75aa6c99a5..49977639466cfe754483af8e3922360361ed0e6c 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.transportpce.inventory.listener;
 
-import java.util.Collection;
+import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
@@ -19,8 +19,7 @@ public class OverlayNetworkChangeListener implements DataTreeChangeListener<Netw
     private static final Logger LOG = LoggerFactory.getLogger(OverlayNetworkChangeListener.class);
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Network>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Network>> changes) {
         LOG.info("Overlay network changed {}", changes);
     }
-
 }
index 19b87fae1ef8e996de1881a8da64fe144dd21604..35691482b527d9aaab286e6b40f6815e3791ac22 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.transportpce.inventory.listener;
 
-import java.util.Collection;
+import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
@@ -19,7 +19,7 @@ public class UnderlayNetworkChangeListener implements DataTreeChangeListener<Net
     private static final Logger LOG = LoggerFactory.getLogger(UnderlayNetworkChangeListener.class);
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Network>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Network>> changes) {
         LOG.info("Underlay network changed {}", changes);
     }
 
index e48d393362b66770b89da301ae5f3b14f9314982..fb1e2550df106213aab67d6652d0449a546ede06 100644 (file)
@@ -3,5 +3,4 @@ url=jdbc:mariadb://${transportpce.db.host}/${transportpce.db.database}?useUnicod
 pool=dbcp2
 user=${transportpce.db.username}
 password=${transportpce.db.password}
-databaseName=${transportpce.db.database}
 dataSourceName=transportpce
\ No newline at end of file
index 65794815f63533d5c96dc20282ce1454ad8b7c91..b5ea8c0e3dae8de5b62a3529b28ab980259c0f2e 100644 (file)
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>karaf4-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-karaf</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>${project.artifactId}</name>
 
@@ -80,14 +80,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
       <type>xml</type>
       <scope>runtime</scope>
     </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>odl-transportpce-swagger</artifactId>
-      <version>${project.version}</version>
-      <classifier>features</classifier>
-      <type>xml</type>
-      <scope>runtime</scope>
-    </dependency>
   </dependencies>
 
   <build>
index 86e32826dce2b780300d393239928aa3d55fe20e..40f3545d0d92314fcdd9b713e4787ed3d0abedba 100755 (executable)
@@ -8,6 +8,8 @@ sed 's/8181/ODL_RESTCONF_PORT/' ../etc/jetty.xml > jetty_template.xml
 sed 's/8101/ODL_SHELL_PORT/' ../etc/org.apache.karaf.shell.cfg > org.apache.karaf.shell._template.cfg
 sed -e 's/1099/ODL_RMI_REGISTRY_PORT/' -e 's/44444/ODL_RMI_SERVER_PORT/' ../etc/org.apache.karaf.management.cfg > org.apache.karaf.management._template.cfg
 
+sed 's/^#persistent=true/persistent=false/' ../system/org/opendaylight/controller/sal-clustering-config/*/sal-clustering-config-*-datastore.cfg > ../etc/org.opendaylight.controller.cluster.datastore.cfg
+
 sed -i'_' -e '1 a\
 \
 . \$(dirname \$0)/\.\./\.\./\.\./\.\./tests/reflectwarn.sh\
index 07e582fb57813c8f823c0b85885e19b6e3caa29a..15b00b37cc8b5594b6bdd89c2be319dbae74b615 100755 (executable)
@@ -2,6 +2,7 @@
 
 cd $(dirname "$0")
 export JDK_JAVA_OPTIONS="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED"
-#./build_lighty_core.sh
-mvn clean install -B -U -q -Dmaven.javadoc.skip=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -s ../tests/odl_settings.xml
+# uncomment the following line when related artifacts are not avaible on mvn central yet
+./build_lighty_core.sh
+mvn clean install -B -U -q -Dmaven.javadoc.skip=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -s ../tests/odl_settings.xml -DskipTests
 unzip -q target/tpce-bin.zip -d target
index 68edd424c211605d50290c243eac0dffc9149d38..a454111352476ddcf0e34e18cf053bc54614afc3 100755 (executable)
@@ -2,9 +2,9 @@
 
 cd $(dirname "$0")
 cd ..
-git clone https://github.com/PantheonTechnologies/lighty-core.git
-cd lighty-core
+git clone https://github.com/PANTHEONtech/lighty.git lighty-repo
+cd lighty-repo
 git checkout main
-#git checkout 18.0.x
+#git checkout 19.x
 export JDK_JAVA_OPTIONS="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED"
-mvn clean install -B -U -q -DskipTests -Dmaven.javadoc.skip=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+mvn clean install -B -U -q -DskipTests -s ../tests/odl_settings.xml -Dmaven.javadoc.skip=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
index ea2023d2d968ad9808865336450837d2fe058197..5bba36530e08789706a704d526e0dfa17465e0a8 100644 (file)
   <parent>
     <groupId>io.lighty.core</groupId>
     <artifactId>lighty-app-parent</artifactId>
-    <version>18.0.0</version>
+    <version>20.0.0-SNAPSHOT</version>
     <relativePath/>
   </parent>
 
   <groupId>io.lighty.controllers</groupId>
   <artifactId>tpce</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>jar</packaging>
 
   <properties>
     <application.main.class>io.lighty.controllers.tpce.Main</application.main.class>
     <application.attach.zip>true</application.attach.zip>
     <maven.deploy.skip>true</maven.deploy.skip>
-    <transportpce.version>8.0.0-SNAPSHOT</transportpce.version>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.version>10.0.0-SNAPSHOT</transportpce.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -62,7 +62,7 @@
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>tapi-2.1.1</artifactId>
+      <artifactId>tapi-2.4.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce</groupId>
     </dependency>
     <dependency>
       <groupId>io.lighty.modules</groupId>
-      <artifactId>lighty-swagger</artifactId>
+      <artifactId>lighty-openapi</artifactId>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
index 49108c73d3f5161ec60b196cc9fde2f6739678fc..f7521205a17ed8320d52c1c19574060079c7222b 100644 (file)
@@ -26,8 +26,8 @@ import io.lighty.modules.southbound.netconf.impl.NetconfSBPlugin;
 import io.lighty.modules.southbound.netconf.impl.NetconfTopologyPluginBuilder;
 import io.lighty.modules.southbound.netconf.impl.config.NetconfConfiguration;
 import io.lighty.modules.southbound.netconf.impl.util.NetconfConfigUtils;
+import io.lighty.openapi.OpenApiLighty;
 import io.lighty.server.LightyServerBuilder;
-import io.lighty.swagger.SwaggerLighty;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.nio.file.Files;
@@ -163,7 +163,7 @@ public class Main {
                 new InetSocketAddress(restConfConfiguration.getInetAddress(), restConfConfiguration.getHttpPort()));
         CommunityRestConfBuilder communityRestConfBuilder = CommunityRestConfBuilder.from(
                 RestConfConfigUtils.getRestConfConfiguration(restConfConfiguration, lightyController.getServices()));
-        SwaggerLighty swagger = new SwaggerLighty(restConfConfiguration, jettyServerBuilder,
+        OpenApiLighty swagger = new OpenApiLighty(restConfConfiguration, jettyServerBuilder,
                 lightyController.getServices());
         swagger.start().get();
 
index 44aa827ecb468d45c0fc7392521b2e00101d79e8..29391fdf2d658126a263c6f97f81a09804e286b2 100644 (file)
@@ -7,7 +7,9 @@
  */
 package io.lighty.controllers.tpce.exception;
 
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class TechnicalException extends RuntimeException {
index db80fd3c0286b2465a4548af672ec9adbfc7b496..bed1ccba9ff996e7166596d37bf55adb7e67ce87 100644 (file)
@@ -9,6 +9,12 @@ package io.lighty.controllers.tpce.module;
 
 import io.lighty.core.controller.api.AbstractLightyModule;
 import io.lighty.core.controller.api.LightyServices;
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
@@ -32,19 +38,18 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
+import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
-import org.opendaylight.transportpce.olm.OlmProvider;
 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
-import org.opendaylight.transportpce.pce.impl.PceProvider;
+import org.opendaylight.transportpce.pce.impl.PceServiceRPCImpl;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
-import org.opendaylight.transportpce.renderer.RendererProvider;
 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
 // Adding OTN interface
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
@@ -54,26 +59,25 @@ import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererS
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.NotificationSender;
 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
-import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
+import org.opendaylight.transportpce.renderer.rpcs.RendererRPCImpl;
 import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperationsImpl;
+import org.opendaylight.transportpce.servicehandler.impl.ServiceHandlerProvider;
 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
-import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
-import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
-import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
-import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
-import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
+import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelNotificationHandler;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
 import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -86,20 +90,15 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
     // because implementation has additional public methods ...
     private final DeviceTransactionManagerImpl deviceTransactionManager;
     private final NetworkTransactionService networkTransaction;
-    // pce beans
-    private final PceProvider pceProvider;
     // network model beans
     private final NetworkModelProvider networkModelProvider;
-    // OLM beans
-    private final OlmProvider olmProvider;
-    // renderer beans
-    private final RendererProvider rendererProvider;
     // service-handler beans
-    private final ServicehandlerProvider servicehandlerProvider;
+    private final ServiceHandlerProvider servicehandlerProvider;
     // T-api
     private TapiProvider tapiProvider;
     // nbi-notifications beans
     private NbiNotificationsProvider nbiNotificationsProvider;
+    private List<Registration> rpcRegistrations = new ArrayList<>();
 
     public TransportPCEImpl(
             LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
@@ -107,108 +106,142 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
         LOG.info("Initializing transaction providers ...");
         deviceTransactionManager =
             new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(), MAX_TIME_FOR_TRANSACTION);
-        var lgServBDB = lightyServices.getBindingDataBroker();
-        networkTransaction = new NetworkTransactionImpl(lgServBDB);
+        DataBroker dataBroker = lightyServices.getBindingDataBroker();
+        networkTransaction = new NetworkTransactionImpl(dataBroker);
 
         LOG.info("Creating network-model beans ...");
-        PortMapping portMapping = initPortMapping(lightyServices);
-        var lgServBNPS = lightyServices.getBindingNotificationPublishService();
-        NetworkModelService networkModelService = new NetworkModelServiceImpl(
-                lgServBDB,
-                deviceTransactionManager, networkTransaction, portMapping,
-                lgServBNPS);
-        new NetConfTopologyListener(
-                networkModelService, lgServBDB, deviceTransactionManager, portMapping);
+        PortMapping portMapping = initPortMapping(dataBroker);
+        NotificationPublishService notificationPublishService = lightyServices.getBindingNotificationPublishService();
+        NetworkModelService networkModelService = new NetworkModelServiceImpl(dataBroker, deviceTransactionManager,
+                networkTransaction, portMapping, notificationPublishService);
+        new NetConfTopologyListener(networkModelService, dataBroker, deviceTransactionManager, portMapping);
         new PortMappingListener(networkModelService);
-        var lgServRPS = lightyServices.getRpcProviderService();
-        var lgServNS = lightyServices.getNotificationService();
-        networkModelProvider = new NetworkModelProvider(
-                networkTransaction,
-                lgServBDB,
-                lgServRPS,
-                networkModelService, deviceTransactionManager, portMapping,
-                lgServNS,
-                new FrequenciesServiceImpl(lgServBDB));
+
+        RpcProviderService rpcProviderService = lightyServices.getRpcProviderService();
+        NotificationService notificationService = lightyServices.getNotificationService();
+        new NetworkUtilsImpl(dataBroker, rpcProviderService);
+        networkModelProvider = new NetworkModelProvider(networkTransaction, dataBroker, networkModelService,
+                deviceTransactionManager, portMapping, notificationService, new FrequenciesServiceImpl(dataBroker));
 
         LOG.info("Creating PCE beans ...");
         // TODO: pass those parameters through command line
         PathComputationService pathComputationService = new PathComputationServiceImpl(
                 networkTransaction,
-                lgServBNPS,
+                notificationPublishService,
                 new GnpyConsumerImpl(
                     "http://127.0.0.1:8008", "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer()),
                 portMapping);
-        pceProvider = new PceProvider(lgServRPS, pathComputationService);
+        rpcRegistrations.add(new PceServiceRPCImpl(rpcProviderService, pathComputationService).getRegisteredRpc());
 
         LOG.info("Creating OLM beans ...");
-        MappingUtils mappingUtils = new MappingUtilsImpl(lgServBDB);
+        MappingUtils mappingUtils = new MappingUtilsImpl(dataBroker);
         CrossConnect crossConnect = initCrossConnect(mappingUtils);
         OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
-        TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(
+        OlmPowerServiceRpcImpl olmPowerServiceRpc = new OlmPowerServiceRpcImpl(
             new OlmPowerServiceImpl(
-                lgServBDB,
-                new PowerMgmtImpl(
-                    openRoadmInterfaces, crossConnect, deviceTransactionManager,
-                    portMapping, Long.valueOf(olmtimer1).longValue(), Long.valueOf(olmtimer2).longValue()),
-                deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces));
-        olmProvider = new OlmProvider(lgServRPS, olmPowerServiceRpc);
+                    dataBroker,
+                    new PowerMgmtImpl(
+                            openRoadmInterfaces,
+                            crossConnect,
+                            deviceTransactionManager,
+                            portMapping,
+                            Long.valueOf(olmtimer1).longValue(),
+                            Long.valueOf(olmtimer2).longValue()),
+                    deviceTransactionManager,
+                    portMapping,
+                    mappingUtils,
+                    openRoadmInterfaces),
+            rpcProviderService);
+        rpcRegistrations.add(olmPowerServiceRpc.getRegisteredRpc());
+
         LOG.info("Creating renderer beans ...");
-        initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
+        new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
         DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
-                lgServBDB,
-                deviceTransactionManager, openRoadmInterfaces, crossConnect,
-                mappingUtils, portMapping);
+                dataBroker,
+                deviceTransactionManager,
+                openRoadmInterfaces,
+                crossConnect,
+                mappingUtils,
+                portMapping);
         OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(
-                crossConnect, openRoadmInterfaces, deviceTransactionManager, mappingUtils, portMapping);
-        rendererProvider = initRenderer(
-                lightyServices, olmPowerServiceRpc, deviceRendererService, otnDeviceRendererService, portMapping);
+                crossConnect,
+                openRoadmInterfaces,
+                deviceTransactionManager,
+                mappingUtils,
+                portMapping);
+        //FIXME: need mdsal.binding;api.RpcService from LightyServices
+        RpcService rpcService = lightyServices.getRpcService();
+        RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(
+                deviceRendererService, otnDeviceRendererService, dataBroker,
+                new NotificationSender(notificationPublishService),
+                portMapping,
+                rpcService);
+        rpcRegistrations.add(new DeviceRendererRPCImpl(
+                        lightyServices.getRpcProviderService(),
+                        deviceRendererService,
+                        otnDeviceRendererService)
+                    .getRegisteredRpc());
+        rpcRegistrations.add(new RendererRPCImpl(
+                rendererServiceOperations,
+                lightyServices.getRpcProviderService())
+            .getRegisteredRpc());
 
         LOG.info("Creating service-handler beans ...");
-        RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(
-                deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
-                lgServBDB,
-                lgServBNPS,
-                portMapping);
-        ServiceDataStoreOperations serviceDataStoreOperations =
-            new ServiceDataStoreOperationsImpl(lgServBDB);
-        RendererListenerImpl rendererListenerImpl =
-            new RendererListenerImpl(pathComputationService, lgServBNPS, networkModelService);
-        PceListenerImpl pceListenerImpl = new PceListenerImpl(
+        ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(dataBroker);
+        RendererNotificationHandler rendererListener =
+            new RendererNotificationHandler(pathComputationService, notificationPublishService, networkModelService);
+        PceNotificationHandler pceListenerImpl = new PceNotificationHandler(
                 rendererServiceOperations, pathComputationService,
-                lgServBNPS, serviceDataStoreOperations);
-        NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
-                lgServBNPS, serviceDataStoreOperations);
-        OrgOpenroadmServiceService servicehandler = new ServicehandlerImpl(
-                pathComputationService, rendererServiceOperations,
-                lgServBNPS, pceListenerImpl,
-                rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations,
-                new CatalogDataStoreOperationsImpl(networkTransaction));
-        servicehandlerProvider = new ServicehandlerProvider(
-                lgServBDB, lgServRPS,
-                lgServNS, serviceDataStoreOperations, pceListenerImpl,
-                rendererListenerImpl, networkModelListenerImpl, lgServBNPS,
-                servicehandler,
-                new ServiceListener(
-                    servicehandler, serviceDataStoreOperations, lgServBNPS));
+                notificationPublishService, serviceDataStoreOperations);
+        NetworkModelNotificationHandler networkListener = new NetworkModelNotificationHandler(
+                notificationPublishService, serviceDataStoreOperations);
+        ServicehandlerImpl servicehandler = new ServicehandlerImpl(
+                rpcProviderService,
+                serviceDataStoreOperations,
+                pceListenerImpl,
+                rendererListener,
+                networkListener,
+                new CatalogDataStoreOperationsImpl(networkTransaction),
+                pathComputationService,
+                rendererServiceOperations,
+                notificationPublishService);
+        rpcRegistrations.add(servicehandler.getRegisteredRpc());
+        servicehandlerProvider = new ServiceHandlerProvider(
+                dataBroker,
+                notificationService,
+                serviceDataStoreOperations,
+                pceListenerImpl,
+                rendererListener,
+                networkListener,
+                new ServiceListener(rpcService, serviceDataStoreOperations, notificationPublishService));
+
         if (activateTapi) {
             LOG.info("Creating tapi beans ...");
             TapiLink tapiLink = new TapiLinkImpl(networkTransaction);
-            new TapiNetworkUtilsImpl(networkTransaction, tapiLink);
-            tapiProvider = initTapi(
-                    lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
-                    new TapiNetworkModelListenerImpl(
-                        networkTransaction, lgServBNPS),
-                    tapiLink,
+            new TapiNetworkUtilsImpl(rpcProviderService, networkTransaction, tapiLink);
+            tapiProvider = new TapiProvider(
+                    dataBroker,
+                    rpcProviderService,
+                    rpcService,
+                    notificationService,
+                    notificationPublishService,
+                    networkTransaction,
+                    serviceDataStoreOperations,
+                    new TapiNetworkModelNotificationHandler(networkTransaction, notificationPublishService),
                     new TapiNetworkModelServiceImpl(
-                        networkTransaction, deviceTransactionManager, tapiLink,
-                        lgServBNPS));
+                            networkTransaction,
+                            deviceTransactionManager,
+                            tapiLink,
+                            notificationPublishService));
+            rpcRegistrations.addAll(tapiProvider.getRegisteredRpcs());
         }
         if (activateNbiNotification) {
             LOG.info("Creating nbi-notifications beans ...");
             nbiNotificationsProvider = new NbiNotificationsProvider(
-                    null, null, lgServRPS,
-                    lgServNS, lightyServices.getAdapterContext().currentSerializer(),
-                    networkTransaction);
+                    rpcProviderService,
+                    notificationService,
+                    lightyServices.getAdapterContext().currentSerializer(),
+                    networkTransaction, null);
         }
     }
 
@@ -235,62 +268,23 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
             LOG.info("Shutting down service-handler provider ...");
         }
         servicehandlerProvider.close();
-        LOG.info("Shutting down renderer provider ...");
-        rendererProvider.close();
-        LOG.info("Shutting down OLM provider ...");
-        olmProvider.close();
         LOG.info("Shutting down network-model provider ...");
         networkModelProvider.close();
-        LOG.info("Shutting down PCE provider ...");
-        pceProvider.close();
         LOG.info("Shutting down transaction providers ...");
         deviceTransactionManager.preDestroy();
+        LOG.info("Closing registered RPCs...");
+        for (Registration reg : rpcRegistrations) {
+            reg.close();
+        }
         LOG.info("Shutdown done.");
         return true;
     }
 
-    private TapiProvider initTapi(
-            LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
-            NetworkTransactionService networkTransactionService, ServiceDataStoreOperations serviceDataStoreOperations,
-            TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl, TapiLink tapiLink,
-            TapiNetworkModelService tapiNetworkModelService) {
-        return new TapiProvider(
-            lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
-            lightyServices.getNotificationService(), lightyServices.getBindingNotificationPublishService(),
-            networkTransactionService, servicehandler, serviceDataStoreOperations,
-            new TapiNetworkUtilsImpl(networkTransactionService, tapiLink),
-            tapiNetworkModelListenerImpl, tapiNetworkModelService);
-    }
-
-    private RendererProvider initRenderer(
-            LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
-            DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
-            PortMapping portMapping) {
-        return new RendererProvider(
-            lightyServices.getRpcProviderService(), deviceRendererService,
-            otnDeviceRendererService,
-            new DeviceRendererRPCImpl(deviceRendererService, otnDeviceRendererService),
-            new TransportPCEServicePathRPCImpl(
-                new RendererServiceOperationsImpl(
-                    deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
-                    lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
-                    portMapping)));
-    }
-
-    private OpenRoadmInterfaceFactory initOpenRoadmFactory(
-            MappingUtils mappingUtils, OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
-        return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
-    }
-
-    private PortMapping initPortMapping(LightyServices lightyServices) {
-        PortMappingVersion710 portMappingVersion710 =
-            new PortMappingVersion710(lightyServices.getBindingDataBroker(), deviceTransactionManager);
-        PortMappingVersion221 portMappingVersion221 =
-            new PortMappingVersion221(lightyServices.getBindingDataBroker(), deviceTransactionManager);
-        PortMappingVersion121 portMappingVersion121 =
-            new PortMappingVersion121(lightyServices.getBindingDataBroker(), deviceTransactionManager);
-        return new PortMappingImpl(
-            lightyServices.getBindingDataBroker(), portMappingVersion710, portMappingVersion221, portMappingVersion121);
+    private PortMapping initPortMapping(DataBroker dataBroker) {
+        PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(dataBroker, deviceTransactionManager);
+        PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(dataBroker, deviceTransactionManager);
+        PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(dataBroker, deviceTransactionManager);
+        return new PortMappingImpl(dataBroker, portMappingVersion710, portMappingVersion221, portMappingVersion121);
     }
 
     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
@@ -300,18 +294,15 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
             new OpenRoadmInterfacesImpl221(deviceTransactionManager, portMapping);
         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 =
             new OpenRoadmInterfacesImpl710(deviceTransactionManager, portMapping);
-        return new OpenRoadmInterfacesImpl(
-            deviceTransactionManager, mappingUtils,
-            openRoadmInterfacesImpl121, openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
-
+        return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
+                openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
     }
 
     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
         CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
-        return new CrossConnectImpl(
-            deviceTransactionManager, mappingUtils,
-            crossConnectImpl121, crossConnectImpl221, crossConnectImpl710);
+        return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121,
+                crossConnectImpl221, crossConnectImpl710);
     }
 }
index e69d1d56bc017edd56c4dcaaff8b5a41a125466a..e75bdb1f741b9532864f4bf6e5cf21a7a7229349 100644 (file)
@@ -92,20 +92,20 @@ public final class TPCEUtils {
             org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev200327.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.user.mgmt.rev191129.$YangModuleInfoImpl.getInstance(),
 
-            // common models 10.1
+            // common models 13.1
             org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev210924.$YangModuleInfoImpl
                 .getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.$YangModuleInfoImpl
                 .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.$YangModuleInfoImpl
                 .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.phy.codes.rev210528.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.phy.codes.rev220527.$YangModuleInfoImpl
                 .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev230526.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.$YangModuleInfoImpl
             .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev210924.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev220325.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev230526.$YangModuleInfoImpl.getInstance(),
 
             // device models 1.2.1 and 2.2.1
             org.opendaylight.yang.gen.v1.http.org.openroadm.database.rev161014.$YangModuleInfoImpl.getInstance(),
@@ -235,53 +235,53 @@ public final class TPCEUtils {
             // network models
             org.opendaylight.yang.gen.v1.http.org.openroadm.amplifier.rev210924.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev211210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.external.pluggable.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev230526.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.external.pluggable.rev230526.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev211210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev230526.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.$YangModuleInfoImpl
                     .getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.roadm.rev191129.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev211210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev230526.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.$YangModuleInfoImpl
                     .getInstance(),
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.$YangModuleInfoImpl
                     .getInstance(),
 
             // service models
-            org.opendaylight.yang.gen.v1.http.org.openroadm.ber.test.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.ber.test.rev230526.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.common.ber.test.rev200529.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.$YangModuleInfoImpl
                 .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.controller.customization.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.controller.customization.rev230526.$YangModuleInfoImpl
                 .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.$YangModuleInfoImpl
                 .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.$YangModuleInfoImpl
                 .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.$YangModuleInfoImpl.getInstance(),
 
             // tapi models
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.oam.rev181210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.oam.rev221121.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.path.computation.rev181210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.path.computation.rev221121.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.eth.rev181210.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.eth.rev221121.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.$YangModuleInfoImpl
                     .getInstance(),
 
             // API models / opendaylight
@@ -291,11 +291,11 @@ public final class TPCEUtils {
                     .getInstance(),
             org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728
                     .$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004
                     .$YangModuleInfoImpl.getInstance(),
@@ -310,9 +310,9 @@ public final class TPCEUtils {
             org.opendaylight.yang.gen.v1.gnpy.gnpy.eqpt.config.rev220221.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev220615.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.gnpy.path.rev220615.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221
                     .$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501
                     .$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
                     .$YangModuleInfoImpl.getInstance(),
@@ -335,9 +335,9 @@ public final class TPCEUtils {
                      .$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206
                      .$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.$YangModuleInfoImpl
                     .getInstance());
 
     private static final Set<YangModuleInfo> TPCE_YANG_MODEL = Stream.concat(
index fc906a904fa87716b29fd7da9a6b4eacf2c2328d..99c5a51946ae799a6b52f52dbadbc0b9d1d8e686 100644 (file)
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-nbinotifications</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
-    <kafka.version>3.0.0</kafka.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
+    <kafka.version>3.7.0</kafka.version>
   </properties>
 
   <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>tapi-2.1.1</artifactId>
+      <artifactId>tapi-2.4.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
     <!-- Testing Dependencies -->
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
       <artifactId>jackson-databind</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.skyscreamer</groupId>
+      <artifactId>jsonassert</artifactId>
+      <version>1.5.1</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java
deleted file mode 100644 (file)
index c1ea557..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright © 2020 Orange, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.nbinotifications.impl;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ExecutionException;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.transportpce.nbinotifications.consumer.Subscriber;
-import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceDeserializer;
-import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceDeserializer;
-import org.opendaylight.transportpce.nbinotifications.serialization.TapiNotificationDeserializer;
-import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceInput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceInput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
-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.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.DeleteNotificationSubscriptionServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.DeleteNotificationSubscriptionServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.DeleteNotificationSubscriptionServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceListInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceListOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationSubscriptionServiceListOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetSupportedNotificationTypesInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetSupportedNotificationTypesOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetSupportedNotificationTypesOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.UpdateNotificationSubscriptionServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.UpdateNotificationSubscriptionServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.output.SubscriptionService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.output.SubscriptionServiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service.list.output.SubscriptionServiceKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.context.NotifSubscription;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.context.NotifSubscriptionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.context.NotifSubscriptionKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.subscription.service.SubscriptionFilter;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.subscription.service.SubscriptionFilterBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.ErrorType;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class NbiNotificationsImpl implements NbiNotificationsService, TapiNotificationService {
-    private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsImpl.class);
-    private final JsonStringConverter<NotificationProcessService> converterService;
-    private final JsonStringConverter<NotificationAlarmService> converterAlarmService;
-    private final JsonStringConverter<NotificationTapiService> converterTapiService;
-    private final String server;
-    private final NetworkTransactionService networkTransactionService;
-    private final TopicManager topicManager;
-
-    public NbiNotificationsImpl(JsonStringConverter<NotificationProcessService> converterService,
-                                JsonStringConverter<NotificationAlarmService> converterAlarmService,
-                                JsonStringConverter<NotificationTapiService> converterTapiService, String server,
-                                NetworkTransactionService networkTransactionService, TopicManager topicManager) {
-        this.converterService = converterService;
-        this.converterAlarmService = converterAlarmService;
-        this.converterTapiService = converterTapiService;
-        this.server = server;
-        this.networkTransactionService = networkTransactionService;
-        this.topicManager = topicManager;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetNotificationsProcessServiceOutput>> getNotificationsProcessService(
-            GetNotificationsProcessServiceInput input) {
-        LOG.info("RPC getNotificationsService received");
-        if (input == null || input.getIdConsumer() == null || input.getGroupId() == null) {
-            LOG.warn("Missing mandatory params for input {}", input);
-            return RpcResultBuilder.success(new GetNotificationsProcessServiceOutputBuilder().build()).buildFuture();
-        }
-        Subscriber<NotificationProcessService, NotificationsProcessService> subscriber = new Subscriber<>(
-                input.getIdConsumer(), input.getGroupId(), server, converterService,
-                NotificationServiceDeserializer.class);
-        List<NotificationsProcessService> notificationServiceList = subscriber
-                .subscribe(input.getConnectionType().getName(), NotificationsProcessService.QNAME);
-        return RpcResultBuilder.success(new GetNotificationsProcessServiceOutputBuilder()
-                .setNotificationsProcessService(notificationServiceList).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetNotificationsAlarmServiceOutput>> getNotificationsAlarmService(
-            GetNotificationsAlarmServiceInput input) {
-        LOG.info("RPC getNotificationsAlarmService received");
-        if (input == null || input.getIdConsumer() == null || input.getGroupId() == null) {
-            LOG.warn("Missing mandatory params for input {}", input);
-            return RpcResultBuilder.success(new GetNotificationsAlarmServiceOutputBuilder().build()).buildFuture();
-        }
-        Subscriber<NotificationAlarmService, NotificationsAlarmService> subscriber = new Subscriber<>(
-                input.getIdConsumer(), input.getGroupId(), server, converterAlarmService,
-                NotificationAlarmServiceDeserializer.class);
-        List<NotificationsAlarmService> notificationAlarmServiceList = subscriber
-                .subscribe("alarm" + input.getConnectionType().getName(), NotificationsAlarmService.QNAME);
-        return RpcResultBuilder.success(new GetNotificationsAlarmServiceOutputBuilder()
-                .setNotificationsAlarmService(notificationAlarmServiceList).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetSupportedNotificationTypesOutput>>
-            getSupportedNotificationTypes(GetSupportedNotificationTypesInput input) {
-        NotificationContext notificationContext = getNotificationContext();
-        if (notificationContext == null) {
-            return RpcResultBuilder.<GetSupportedNotificationTypesOutput>failed()
-                .withError(ErrorType.APPLICATION, "Couldnt get Notification Context from Datastore")
-                .buildFuture();
-        }
-        if (notificationContext.getNotifSubscription() == null) {
-            return RpcResultBuilder.success(new GetSupportedNotificationTypesOutputBuilder()
-                .setSupportedNotificationTypes(new HashSet<>())
-                .setSupportedObjectTypes(new HashSet<>()).build()).buildFuture();
-        }
-        Set<NotificationType> notificationTypeList = new HashSet<>();
-        Set<ObjectType> objectTypeList = new HashSet<>();
-        for (NotifSubscription notifSubscription:notificationContext.getNotifSubscription().values()) {
-            if (notifSubscription.getSupportedNotificationTypes() != null) {
-                notificationTypeList.addAll(notifSubscription.getSupportedNotificationTypes());
-            }
-            if (notifSubscription.getSupportedObjectTypes() != null) {
-                objectTypeList.addAll(notifSubscription.getSupportedObjectTypes());
-            }
-        }
-        return RpcResultBuilder.success(new GetSupportedNotificationTypesOutputBuilder()
-            .setSupportedNotificationTypes(notificationTypeList)
-            .setSupportedObjectTypes(objectTypeList).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>>
-            createNotificationSubscriptionService(CreateNotificationSubscriptionServiceInput input) {
-        for (Uuid uuid:input.getSubscriptionFilter().getRequestedObjectIdentifier()) {
-            LOG.info("Adding T-API topic: {} to Kafka server", uuid.getValue());
-            this.topicManager.addTapiTopic(uuid.getValue());
-        }
-        SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
-            .setName(input.getSubscriptionFilter().getName())
-            .setLocalId(input.getSubscriptionFilter().getLocalId())
-            .setIncludeContent(input.getSubscriptionFilter().getIncludeContent())
-            .setRequestedNotificationTypes(input.getSubscriptionFilter().getRequestedNotificationTypes())
-            .setRequestedLayerProtocols(input.getSubscriptionFilter().getRequestedLayerProtocols())
-            .setRequestedObjectIdentifier(input.getSubscriptionFilter().getRequestedObjectIdentifier())
-            .setRequestedObjectTypes(input.getSubscriptionFilter().getRequestedObjectTypes())
-            .build();
-        Uuid notifSubscriptionUuid = new Uuid(UUID.randomUUID().toString());
-        SubscriptionService subscriptionService = new SubscriptionServiceBuilder()
-            .setSubscriptionFilter(subscriptionFilter)
-            .setSubscriptionState(input.getSubscriptionState())
-            .setUuid(notifSubscriptionUuid)
-            .build();
-
-        NotifSubscriptionKey notifSubscriptionKey = new NotifSubscriptionKey(notifSubscriptionUuid);
-        Set<NotificationType> notificationTypes = (subscriptionFilter.getRequestedNotificationTypes() != null)
-            ? subscriptionFilter.getRequestedNotificationTypes()
-            : new HashSet<>(List.of(NotificationType.ALARMEVENT));
-        Set<ObjectType> objectTypes = (subscriptionFilter.getRequestedObjectTypes() != null)
-            ? subscriptionFilter.getRequestedObjectTypes()
-            : new HashSet<>(List.of(ObjectType.CONNECTIVITYSERVICE));
-        NotifSubscription notifSubscription = new NotifSubscriptionBuilder()
-            .setSubscriptionState(subscriptionService.getSubscriptionState())
-            .setSubscriptionFilter(subscriptionService.getSubscriptionFilter())
-            .setUuid(notifSubscriptionUuid)
-            .setSupportedNotificationTypes(notificationTypes)
-            .setSupportedObjectTypes(objectTypes)
-            .setName(subscriptionService.getName())
-            .build();
-        NotificationContext notificationContext = getNotificationContext();
-        Map<NotifSubscriptionKey, NotifSubscription> notifSubscriptions = new HashMap<>();
-        if (notificationContext != null && notificationContext.getNotifSubscription() != null) {
-            notifSubscriptions.putAll(notificationContext.getNotifSubscription());
-        }
-        notifSubscriptions.put(notifSubscriptionKey, notifSubscription);
-        NotificationContext notificationContext1 = new NotificationContextBuilder()
-            .setNotification(notificationContext == null ? new HashMap<>() : notificationContext.getNotification())
-            .setNotifSubscription(notifSubscriptions)
-            .build();
-        if (!updateNotificationContext(notificationContext1)) {
-            LOG.error("Failed to update Notification context");
-            return RpcResultBuilder.<CreateNotificationSubscriptionServiceOutput>failed()
-                .withError(ErrorType.RPC, "Failed to update notification context").buildFuture();
-        }
-        CreateNotificationSubscriptionServiceOutput serviceOutput =
-            new CreateNotificationSubscriptionServiceOutputBuilder()
-                .setSubscriptionService(subscriptionService)
-                .build();
-        return RpcResultBuilder.success(serviceOutput).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<UpdateNotificationSubscriptionServiceOutput>>
-            updateNotificationSubscriptionService(UpdateNotificationSubscriptionServiceInput input) {
-        // TODO --> Not yet implemented
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<DeleteNotificationSubscriptionServiceOutput>>
-            deleteNotificationSubscriptionService(DeleteNotificationSubscriptionServiceInput input) {
-        try {
-            if (input == null || input.getSubscriptionIdOrName() == null) {
-                LOG.warn("Missing mandatory params for input {}", input);
-                return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
-                    .withError(ErrorType.RPC, "Missing input parameters").buildFuture();
-            }
-            Uuid notifSubsUuid = getUuidFromIput(input.getSubscriptionIdOrName());
-            InstanceIdentifier<NotifSubscription> notifSubscriptionIID = InstanceIdentifier.builder(Context.class)
-                .augmentation(Context1.class).child(NotificationContext.class).child(NotifSubscription.class,
-                    new NotifSubscriptionKey(notifSubsUuid)).build();
-            Optional<NotifSubscription> optionalNotifSub = this.networkTransactionService.read(
-                LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID).get();
-
-            if (!optionalNotifSub.isPresent()) {
-                return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
-                    .withError(ErrorType.APPLICATION,
-                        "Notification subscription doesnt exist").buildFuture();
-            }
-            NotifSubscription notifSubscription = optionalNotifSub.orElseThrow();
-            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID);
-            this.networkTransactionService.commit().get();
-            for (Uuid objectUuid:notifSubscription.getSubscriptionFilter().getRequestedObjectIdentifier()) {
-                this.topicManager.deleteTapiTopic(objectUuid.getValue());
-            }
-            return RpcResultBuilder.success(new DeleteNotificationSubscriptionServiceOutputBuilder().build())
-                .buildFuture();
-        } catch (InterruptedException | ExecutionException | NoSuchElementException e) {
-            LOG.error("Failed to delete Notification subscription service", e);
-        }
-        return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
-            .withError(ErrorType.APPLICATION,
-                "Failed to delete notification subscription service").buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetNotificationSubscriptionServiceDetailsOutput>>
-            getNotificationSubscriptionServiceDetails(GetNotificationSubscriptionServiceDetailsInput input) {
-        if (input == null || input.getSubscriptionIdOrName() == null) {
-            LOG.warn("Missing mandatory params for input {}", input);
-            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Missing input parameters").buildFuture();
-        }
-        Uuid notifSubsUuid = getUuidFromIput(input.getSubscriptionIdOrName());
-        NotificationContext notificationContext = getNotificationContext();
-        if (notificationContext == null) {
-            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
-                .withError(ErrorType.APPLICATION, "Notification context is empty")
-                .buildFuture();
-        }
-        if (notificationContext.getNotifSubscription() == null) {
-            return RpcResultBuilder.success(new GetNotificationSubscriptionServiceDetailsOutputBuilder()
-                .setSubscriptionService(new org.opendaylight.yang.gen.v1
-                    .urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service
-                        .details.output.SubscriptionServiceBuilder().build()).build()).buildFuture();
-        }
-        if (!notificationContext.getNotifSubscription().containsKey(new NotifSubscriptionKey(notifSubsUuid))) {
-            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
-                .withError(ErrorType.APPLICATION,
-                    "Notification subscription service doesnt exist").buildFuture();
-        }
-        return RpcResultBuilder.success(new GetNotificationSubscriptionServiceDetailsOutputBuilder()
-            .setSubscriptionService(new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service.details.output
-                .SubscriptionServiceBuilder(notificationContext.getNotifSubscription().get(
-                    new NotifSubscriptionKey(notifSubsUuid))).build()).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetNotificationSubscriptionServiceListOutput>>
-            getNotificationSubscriptionServiceList(GetNotificationSubscriptionServiceListInput input) {
-        NotificationContext notificationContext = getNotificationContext();
-        if (notificationContext == null) {
-            return RpcResultBuilder.<GetNotificationSubscriptionServiceListOutput>failed()
-                .withError(ErrorType.APPLICATION, "Notification context is empty")
-                .buildFuture();
-        }
-        if (notificationContext.getNotifSubscription() == null) {
-            return RpcResultBuilder.success(new GetNotificationSubscriptionServiceListOutputBuilder()
-                .setSubscriptionService(new HashMap<>()).build()).buildFuture();
-        }
-        Map<SubscriptionServiceKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang
-            .tapi.notification.rev181210.get.notification.subscription.service.list.output.SubscriptionService>
-                notifSubsMap = new HashMap<>();
-        for (NotifSubscription notifSubscription:notificationContext.getNotifSubscription().values()) {
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang
-                .tapi.notification.rev181210.get.notification.subscription.service.list.output.SubscriptionService
-                    subscriptionService = new org.opendaylight.yang.gen.v1
-                        .urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.subscription.service
-                            .list.output.SubscriptionServiceBuilder(notifSubscription).build();
-            notifSubsMap.put(subscriptionService.key(), subscriptionService);
-        }
-        return RpcResultBuilder.success(new GetNotificationSubscriptionServiceListOutputBuilder()
-            .setSubscriptionService(notifSubsMap).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetNotificationListOutput>> getNotificationList(GetNotificationListInput input) {
-        try {
-            LOG.info("RPC getNotificationList received");
-            if (input == null || input.getSubscriptionIdOrName() == null) {
-                LOG.warn("Missing mandatory params for input {}", input);
-                return RpcResultBuilder.<GetNotificationListOutput>failed().withError(ErrorType.RPC,
-                    "Missing input parameters").buildFuture();
-            }
-            Uuid notifSubsUuid = getUuidFromIput(input.getSubscriptionIdOrName());
-            InstanceIdentifier<NotifSubscription> notifSubscriptionIID = InstanceIdentifier.builder(Context.class)
-                .augmentation(Context1.class).child(NotificationContext.class).child(NotifSubscription.class,
-                    new NotifSubscriptionKey(notifSubsUuid)).build();
-            Optional<NotifSubscription> optionalNotifSub = this.networkTransactionService.read(
-                LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID).get();
-
-            if (!optionalNotifSub.isPresent()) {
-                return RpcResultBuilder.<GetNotificationListOutput>failed()
-                    .withError(ErrorType.APPLICATION,
-                        "Notification subscription doesnt exist").buildFuture();
-            }
-            NotifSubscription notifSubscription = optionalNotifSub.orElseThrow();
-            List<Notification> notificationTapiList = new ArrayList<>();
-            for (Uuid objectUuid:notifSubscription.getSubscriptionFilter().getRequestedObjectIdentifier()) {
-                if (!this.topicManager.getTapiTopicMap().containsKey(objectUuid.getValue())) {
-                    LOG.warn("Topic doesnt exist for {}", objectUuid.getValue());
-                    continue;
-                }
-                LOG.info("Going to get notifications for topic {}", objectUuid.getValue());
-                Subscriber<NotificationTapiService, Notification> subscriber = new Subscriber<>(
-                    objectUuid.getValue(), objectUuid.getValue(), server, converterTapiService,
-                    TapiNotificationDeserializer.class);
-                notificationTapiList.addAll(subscriber.subscribe(objectUuid.getValue(), Notification.QNAME));
-            }
-            LOG.info("TAPI notifications = {}", notificationTapiList);
-            Map<NotificationKey, Notification> notificationMap = new HashMap<>();
-            for (Notification notif:notificationTapiList) {
-                notificationMap.put(notif.key(), notif);
-            }
-            return RpcResultBuilder.success(new GetNotificationListOutputBuilder()
-                .setNotification(notificationMap).build()).buildFuture();
-        } catch (InterruptedException | ExecutionException | NoSuchElementException e) {
-            LOG.error("Failed to get Notifications from Kafka", e);
-        }
-        return RpcResultBuilder.<GetNotificationListOutput>failed()
-            .withError(ErrorType.APPLICATION,
-                "Notifications couldnt be retrieved from Kafka server").buildFuture();
-    }
-
-    private NotificationContext getNotificationContext() {
-        LOG.info("Getting tapi notification context");
-        try {
-            InstanceIdentifier<NotificationContext> notificationcontextIID =
-                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
-                    .child(NotificationContext.class).build();
-            Optional<NotificationContext> notificationContextOptional
-                = this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, notificationcontextIID).get();
-            if (!notificationContextOptional.isPresent()) {
-                LOG.error("Could not get TAPI notification context");
-                return null;
-            }
-            return notificationContextOptional.orElseThrow();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Could not get TAPI notification context");
-        }
-        return null;
-    }
-
-    private boolean updateNotificationContext(NotificationContext notificationContext1) {
-        try {
-            InstanceIdentifier<NotificationContext> notificationcontextIID =
-                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
-                    .child(NotificationContext.class).build();
-            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, notificationcontextIID,
-                notificationContext1);
-            this.networkTransactionService.commit().get();
-            return true;
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Could not update TAPI notification context");
-        }
-        return false;
-    }
-
-    private Uuid getUuidFromIput(String serviceIdOrName) {
-        try {
-            UUID.fromString(serviceIdOrName);
-            LOG.info("Given attribute {} is a UUID", serviceIdOrName);
-            return new Uuid(serviceIdOrName);
-        } catch (IllegalArgumentException e) {
-            LOG.info("Given attribute {} is not a UUID", serviceIdOrName);
-            return new Uuid(UUID.nameUUIDFromBytes(serviceIdOrName.getBytes(StandardCharsets.UTF_8)).toString());
-        }
-    }
-}
index ac4c6ef8e61660e4d9b4e32a496e9185fa2c98dc..6c61bfa25ecf1c4c166d34c426e805ff9443b1fa 100644 (file)
@@ -7,26 +7,35 @@
  */
 package org.opendaylight.transportpce.nbinotifications.impl;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsListenerImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.CreateNotificationSubscriptionServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.DeleteNotificationSubscriptionServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationListImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationSubscriptionServiceDetailsImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationSubscriptionServiceListImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationsAlarmServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationsProcessServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetSupportedNotificationTypesImpl;
+import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsHandler;
 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
 import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+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.notification.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
@@ -48,10 +57,11 @@ public class NbiNotificationsProvider {
     }
 
     private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsProvider.class);
-    private static Map<String, Publisher<NotificationProcessService>> publishersServiceMap =  new HashMap<>();
-    private static Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap =  new HashMap<>();
-    private ListenerRegistration<NbiNotificationsListener> listenerRegistration;
-    private List<ObjectRegistration<NbiNotificationsImpl>> rpcRegistrations = new ArrayList<>();
+    private Map<String, Publisher<NotificationProcessService>> publishersServiceMap;
+    private Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap;
+    private Registration listenerRegistration;
+    private Registration rpcRegistration;
+    private NetworkTransactionService networkTransactionService;
 
     @Activate
     public NbiNotificationsProvider(@Reference RpcProviderService rpcProviderService,
@@ -66,6 +76,7 @@ public class NbiNotificationsProvider {
     public NbiNotificationsProvider(String subscriberServer, String publisherServer,
             RpcProviderService rpcProviderService, NotificationService notificationService,
             BindingDOMCodecServices bindingDOMCodecServices, NetworkTransactionService networkTransactionService) {
+        this.networkTransactionService = networkTransactionService;
         List<String> publishersServiceList = List.of("PceListener", "ServiceHandlerOperations", "ServiceHandler",
                 "RendererListener");
         TopicManager topicManager = TopicManager.getInstance();
@@ -87,17 +98,27 @@ public class NbiNotificationsProvider {
         }
         JsonStringConverter<NotificationTapiService> converterTapiService =
                 new JsonStringConverter<>(bindingDOMCodecServices);
-        LOG.info("baozhi tapi converter: {}", converterTapiService);
+        LOG.info("tapi converter: {}", converterTapiService);
         topicManager.setTapiConverter(converterTapiService);
 
-        NbiNotificationsImpl nbiImpl = new NbiNotificationsImpl(converterService, converterAlarmService,
-            converterTapiService, subscriberServer, networkTransactionService, topicManager);
-        rpcRegistrations.add(rpcProviderService.registerRpcImplementation(NbiNotificationsService.class, nbiImpl));
-        rpcRegistrations.add(rpcProviderService.registerRpcImplementation(TapiNotificationService.class, nbiImpl));
-        NbiNotificationsListenerImpl nbiNotificationsListener = new NbiNotificationsListenerImpl(
-                topicManager.getProcessTopicMap(), topicManager.getAlarmTopicMap(), topicManager.getTapiTopicMap());
-        listenerRegistration = notificationService.registerNotificationListener(nbiNotificationsListener);
-        topicManager.setNbiNotificationsListener(nbiNotificationsListener);
+        rpcRegistration = rpcProviderService.registerRpcImplementations(
+                new GetNotificationsProcessServiceImpl(converterService, subscriberServer),
+                new GetNotificationsAlarmServiceImpl(converterAlarmService, subscriberServer),
+                new GetSupportedNotificationTypesImpl(this),
+                new CreateNotificationSubscriptionServiceImpl(this, topicManager),
+                new DeleteNotificationSubscriptionServiceImpl(networkTransactionService, topicManager),
+                new GetNotificationSubscriptionServiceDetailsImpl(this),
+                new GetNotificationSubscriptionServiceListImpl(this),
+                new GetNotificationListImpl(converterTapiService, subscriberServer, networkTransactionService,
+                        topicManager));
+
+        NbiNotificationsHandler notificationsListener = new NbiNotificationsHandler(
+            topicManager.getProcessTopicMap(), topicManager.getAlarmTopicMap(), topicManager.getTapiTopicMap());
+        listenerRegistration = notificationService.registerCompositeListener(
+            notificationsListener.getCompositeListener());
+        topicManager.setNbiNotificationsListener(notificationsListener);
+        publishersServiceMap = topicManager.getProcessTopicMap();
+        publishersAlarmMap = topicManager.getAlarmTopicMap();
         LOG.info("NbiNotificationsProvider Session Initiated");
     }
 
@@ -112,8 +133,45 @@ public class NbiNotificationsProvider {
         for (Publisher<NotificationAlarmService> publisherAlarm : publishersAlarmMap.values()) {
             publisherAlarm.close();
         }
-        rpcRegistrations.forEach(reg -> reg.close());
+        rpcRegistration.close();
         listenerRegistration.close();
         LOG.info("NbiNotificationsProvider Closed");
     }
+
+    public NotificationContext getNotificationContext() {
+        LOG.info("Getting tapi notification context");
+        try {
+            Optional<NotificationContext> notificationContextOptional = this.networkTransactionService.read(
+                    LogicalDatastoreType.OPERATIONAL,
+                    InstanceIdentifier.builder(Context.class)
+                        .augmentation(Context1.class).child(NotificationContext.class)
+                        .build())
+                .get();
+            if (notificationContextOptional.isPresent()) {
+                return notificationContextOptional.orElseThrow();
+            }
+            LOG.debug("notification context is empty");
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Caught exception getting Notification Context", e);
+        }
+        LOG.error("Could not get TAPI notification context");
+        return null;
+    }
+
+    public boolean updateNotificationContext(NotificationContext notificationContext1) {
+        try {
+            this.networkTransactionService.merge(
+                    LogicalDatastoreType.OPERATIONAL,
+                    InstanceIdentifier.builder(Context.class)
+                        .augmentation(Context1.class).child(NotificationContext.class)
+                        .build(),
+                    notificationContext1);
+            this.networkTransactionService.commit().get();
+            return true;
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Could not update TAPI notification context");
+        }
+        return false;
+    }
+
 }
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/CreateNotificationSubscriptionServiceImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/CreateNotificationSubscriptionServiceImpl.java
new file mode 100644 (file)
index 0000000..b6b79f7
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
+import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
+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.notification.rev221121.CreateNotificationSubscriptionService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.output.SubscriptionService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.output.SubscriptionServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscription;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscriptionBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscriptionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.Notification;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotificationKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilter;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterBuilder;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class CreateNotificationSubscriptionServiceImpl implements CreateNotificationSubscriptionService {
+    private static final Logger LOG = LoggerFactory.getLogger(CreateNotificationSubscriptionServiceImpl.class);
+
+    private NbiNotificationsProvider nbiNotifications;
+    private final TopicManager topicManager;
+
+    public CreateNotificationSubscriptionServiceImpl(NbiNotificationsProvider nbiNotifications,
+            TopicManager topicManager) {
+        this.nbiNotifications = nbiNotifications;
+        this.topicManager = topicManager;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>> invoke(
+            CreateNotificationSubscriptionServiceInput input) {
+        for (Uuid uuid : input.getSubscriptionFilter().getRequestedObjectIdentifier()) {
+            LOG.info("Adding T-API topic: {} to Kafka server", uuid.getValue());
+            this.topicManager.addTapiTopic(uuid.getValue());
+        }
+        Uuid notifSubscriptionUuid = new Uuid(UUID.randomUUID().toString());
+        SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
+            .setName(input.getSubscriptionFilter().getName())
+            .setLocalId(input.getSubscriptionFilter().getLocalId())
+            .setIncludeContent(input.getSubscriptionFilter().getIncludeContent())
+            .setRequestedNotificationTypes(input.getSubscriptionFilter().getRequestedNotificationTypes())
+            .setRequestedLayerProtocols(input.getSubscriptionFilter().getRequestedLayerProtocols())
+            .setRequestedObjectIdentifier(input.getSubscriptionFilter().getRequestedObjectIdentifier())
+            .setRequestedObjectTypes(input.getSubscriptionFilter().getRequestedObjectTypes())
+            .build();
+        SubscriptionService subscriptionService = new SubscriptionServiceBuilder()
+            .setUuid(notifSubscriptionUuid)
+            .setSubscriptionFilter(new HashMap<>(Map.of(subscriptionFilter.key(), subscriptionFilter)))
+            .setSubscriptionState(input.getSubscriptionState())
+            .build();
+        Map<NotifSubscriptionKey, NotifSubscription> notifSubscriptions = new HashMap<>(Map.of(
+            new NotifSubscriptionKey(notifSubscriptionUuid),
+            new NotifSubscriptionBuilder()
+                .setSubscriptionState(subscriptionService.getSubscriptionState())
+                .setSubscriptionFilter(subscriptionService.getSubscriptionFilter())
+                .setUuid(notifSubscriptionUuid)
+//            Following 2 items are no more in notification-context with T-API 2.4
+//              .setSupportedNotificationTypes(notificationTypes)
+//              .setSupportedObjectTypes(objectTypes)
+                .setName(subscriptionService.getName())
+                .build()));
+        Map<NotificationKey, Notification> notifications;
+        NotificationContext notificationContext = nbiNotifications.getNotificationContext();
+        if (notificationContext == null) {
+            notifications = new HashMap<>();
+        } else {
+            notifications = notificationContext.getNotification();
+            var subsc = notificationContext.getNotifSubscription();
+            if (subsc != null) {
+                notifSubscriptions.putAll(subsc);
+            }
+        }
+        if (nbiNotifications.updateNotificationContext(
+                new NotificationContextBuilder()
+                    .setNotification(notifications)
+                    .setNotifSubscription(notifSubscriptions)
+                    .build())) {
+            return RpcResultBuilder
+                .success(
+                    new CreateNotificationSubscriptionServiceOutputBuilder()
+                        .setSubscriptionService(subscriptionService)
+                        .build())
+                .buildFuture();
+        }
+        LOG.error("Failed to update Notification context");
+        return RpcResultBuilder.<CreateNotificationSubscriptionServiceOutput>failed()
+            .withError(ErrorType.RPC, "Failed to update notification context")
+            .buildFuture();
+    }
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/DeleteNotificationSubscriptionServiceImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/DeleteNotificationSubscriptionServiceImpl.java
new file mode 100644 (file)
index 0000000..726d9c6
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
+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.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.DeleteNotificationSubscriptionService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.DeleteNotificationSubscriptionServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.DeleteNotificationSubscriptionServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.DeleteNotificationSubscriptionServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscription;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscriptionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilter;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DeleteNotificationSubscriptionServiceImpl implements DeleteNotificationSubscriptionService {
+    private static final Logger LOG = LoggerFactory.getLogger(DeleteNotificationSubscriptionServiceImpl.class);
+
+    private final NetworkTransactionService networkTransactionService;
+    private final TopicManager topicManager;
+
+    public DeleteNotificationSubscriptionServiceImpl(
+            NetworkTransactionService networkTransactionService, TopicManager topicManager) {
+        this.networkTransactionService = networkTransactionService;
+        this.topicManager = topicManager;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<DeleteNotificationSubscriptionServiceOutput>> invoke(
+            DeleteNotificationSubscriptionServiceInput input) {
+        try {
+            if (input == null || input.getUuid() == null) {
+                LOG.warn("Missing mandatory params for input {}", input);
+                return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
+                    .withError(ErrorType.RPC, "Missing input parameters")
+                    .buildFuture();
+            }
+            Uuid notifSubsUuid = input.getUuid();
+            InstanceIdentifier<NotifSubscription> notifSubscriptionIID = InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class)
+                .child(NotificationContext.class)
+                .child(NotifSubscription.class, new NotifSubscriptionKey(notifSubsUuid))
+                .build();
+            Optional<NotifSubscription> optionalNotifSub = this.networkTransactionService
+                .read(LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID)
+                .get();
+            if (optionalNotifSub.isEmpty()) {
+                return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
+                    .withError(ErrorType.APPLICATION, "Notification subscription doesnt exist")
+                    .buildFuture();
+            }
+            NotifSubscription notifSubscription = optionalNotifSub.orElseThrow();
+            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, notifSubscriptionIID);
+            this.networkTransactionService.commit().get();
+            for (Map.Entry<SubscriptionFilterKey, SubscriptionFilter> sfEntry :
+                    notifSubscription.getSubscriptionFilter().entrySet()) {
+                for (Uuid objectUuid:sfEntry.getValue().getRequestedObjectIdentifier()) {
+                    this.topicManager.deleteTapiTopic(objectUuid.getValue());
+                }
+            }
+            return RpcResultBuilder
+                .success(new DeleteNotificationSubscriptionServiceOutputBuilder().build())
+                .buildFuture();
+        } catch (InterruptedException | ExecutionException | NoSuchElementException e) {
+            LOG.error("Failed to delete Notification subscription service", e);
+        }
+        return RpcResultBuilder.<DeleteNotificationSubscriptionServiceOutput>failed()
+            .withError(ErrorType.APPLICATION, "Failed to delete notification subscription service")
+            .buildFuture();
+    }
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationListImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationListImpl.java
new file mode 100644 (file)
index 0000000..acfc4bf
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.nbinotifications.consumer.Subscriber;
+import org.opendaylight.transportpce.nbinotifications.serialization.TapiNotificationDeserializer;
+import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+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.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationList;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.Notification;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.NotificationKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscription;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscriptionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilter;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetNotificationListImpl implements GetNotificationList {
+    private static final Logger LOG = LoggerFactory.getLogger(GetNotificationListImpl.class);
+
+    private final JsonStringConverter<NotificationTapiService> converterTapiService;
+    private final String server;
+    private final NetworkTransactionService networkTransactionService;
+    private final TopicManager topicManager;
+
+    public GetNotificationListImpl(JsonStringConverter<NotificationTapiService> converterTapiService, String server,
+            NetworkTransactionService networkTransactionService, TopicManager topicManager) {
+        this.converterTapiService = converterTapiService;
+        this.server = server;
+        this.networkTransactionService = networkTransactionService;
+        this.topicManager = topicManager;
+    }
+
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationListOutput>> invoke(GetNotificationListInput input) {
+        try {
+            LOG.info("RPC getNotificationList received");
+            if (input == null || input.getSubscriptionId() == null) {
+                LOG.warn("Missing mandatory params for input {}", input);
+                return RpcResultBuilder.<GetNotificationListOutput>failed()
+                    .withError(ErrorType.RPC, "Missing input parameters")
+                    .buildFuture();
+            }
+            Uuid notifSubsUuid = input.getSubscriptionId();
+            Optional<NotifSubscription> optionalNotifSub = this.networkTransactionService
+                .read(
+                    LogicalDatastoreType.OPERATIONAL,
+                    InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
+                        .child(NotificationContext.class)
+                        .child(NotifSubscription.class, new NotifSubscriptionKey(notifSubsUuid))
+                        .build())
+                .get();
+            if (optionalNotifSub.isEmpty()) {
+                return RpcResultBuilder.<GetNotificationListOutput>failed()
+                    .withError(ErrorType.APPLICATION, "Notification subscription doesnt exist")
+                    .buildFuture();
+            }
+            NotifSubscription notifSubscription = optionalNotifSub.orElseThrow();
+            List<Notification> notificationTapiList = new ArrayList<>();
+            for (Map.Entry<SubscriptionFilterKey, SubscriptionFilter> sfEntry :
+                    notifSubscription.getSubscriptionFilter().entrySet()) {
+                for (Uuid objectUuid:sfEntry.getValue().getRequestedObjectIdentifier()) {
+                    if (!this.topicManager.getTapiTopicMap().containsKey(objectUuid.getValue())) {
+                        LOG.warn("Topic doesnt exist for {}", objectUuid.getValue());
+                        continue;
+                    }
+                    LOG.info("Going to get notifications for topic {}", objectUuid.getValue());
+                    Subscriber<NotificationTapiService, Notification> subscriber = new Subscriber<>(
+                        objectUuid.getValue(), objectUuid.getValue(), server, converterTapiService,
+                        TapiNotificationDeserializer.class);
+                    notificationTapiList.addAll(subscriber.subscribe(objectUuid.getValue(), Notification.QNAME));
+                }
+            }
+            LOG.info("TAPI notifications = {}", notificationTapiList);
+            Map<NotificationKey, Notification> notificationMap = new HashMap<>();
+            for (Notification notif:notificationTapiList) {
+                notificationMap.put(notif.key(), notif);
+            }
+            return RpcResultBuilder
+                .success(new GetNotificationListOutputBuilder().setNotification(notificationMap).build())
+                .buildFuture();
+        } catch (InterruptedException | ExecutionException | NoSuchElementException e) {
+            LOG.error("Failed to get Notifications from Kafka", e);
+        }
+        return RpcResultBuilder.<GetNotificationListOutput>failed()
+            .withError(ErrorType.APPLICATION, "Notifications couldnt be retrieved from Kafka server")
+            .buildFuture();
+    }
+
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationSubscriptionServiceDetailsImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationSubscriptionServiceDetailsImpl.java
new file mode 100644 (file)
index 0000000..e054bf4
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
+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.notification.rev221121.GetNotificationSubscriptionServiceDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationSubscriptionServiceDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationSubscriptionServiceDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationSubscriptionServiceDetailsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.subscription.service.details.output.SubscriptionServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscriptionKey;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetNotificationSubscriptionServiceDetailsImpl implements GetNotificationSubscriptionServiceDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetNotificationSubscriptionServiceDetailsImpl.class);
+
+    private NbiNotificationsProvider nbiNotifications;
+
+    public GetNotificationSubscriptionServiceDetailsImpl(NbiNotificationsProvider nbiNotifications) {
+        this.nbiNotifications = nbiNotifications;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationSubscriptionServiceDetailsOutput>> invoke(
+            GetNotificationSubscriptionServiceDetailsInput input) {
+        if (input == null || input.getUuid() == null) {
+            LOG.warn("Missing mandatory params for input {}", input);
+            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Missing input parameters")
+                .buildFuture();
+        }
+        Uuid notifSubsUuid = input.getUuid();
+        NotificationContext notificationContext = nbiNotifications.getNotificationContext();
+        if (notificationContext == null) {
+            return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
+                .withError(ErrorType.APPLICATION, "Notification context is empty")
+                .buildFuture();
+        }
+        var subsc = notificationContext.getNotifSubscription();
+        if (subsc == null) {
+            return RpcResultBuilder
+                .success(
+                    new GetNotificationSubscriptionServiceDetailsOutputBuilder()
+                        .setSubscriptionService(new SubscriptionServiceBuilder().build())
+                        .build())
+                .buildFuture();
+        }
+        if (subsc.containsKey(new NotifSubscriptionKey(notifSubsUuid))) {
+            return RpcResultBuilder
+                .success(
+                    new GetNotificationSubscriptionServiceDetailsOutputBuilder()
+                        .setSubscriptionService(
+                            new SubscriptionServiceBuilder(subsc.get(new NotifSubscriptionKey(notifSubsUuid))).build())
+                        .build())
+                .buildFuture();
+        }
+        return RpcResultBuilder.<GetNotificationSubscriptionServiceDetailsOutput>failed()
+            .withError(ErrorType.APPLICATION, "Notification subscription service doesnt exist")
+            .buildFuture();
+
+    }
+
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationSubscriptionServiceListImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationSubscriptionServiceListImpl.java
new file mode 100644 (file)
index 0000000..b533ac9
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.HashMap;
+import java.util.Map;
+import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationSubscriptionServiceList;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationSubscriptionServiceListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationSubscriptionServiceListOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationSubscriptionServiceListOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.subscription.service.list.output.SubscriptionService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.subscription.service.list.output.SubscriptionServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.subscription.service.list.output.SubscriptionServiceKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.context.NotifSubscription;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+
+public class GetNotificationSubscriptionServiceListImpl implements GetNotificationSubscriptionServiceList {
+
+    private NbiNotificationsProvider nbiNotifications;
+
+    public GetNotificationSubscriptionServiceListImpl(NbiNotificationsProvider nbiNotifications) {
+        this.nbiNotifications = nbiNotifications;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationSubscriptionServiceListOutput>> invoke(
+            GetNotificationSubscriptionServiceListInput input) {
+        NotificationContext notificationContext = nbiNotifications.getNotificationContext();
+        if (notificationContext == null) {
+            return RpcResultBuilder.<GetNotificationSubscriptionServiceListOutput>failed()
+                .withError(ErrorType.APPLICATION, "Notification context is empty")
+                .buildFuture();
+        }
+        if (notificationContext.getNotifSubscription() == null) {
+            return RpcResultBuilder
+                .success(new GetNotificationSubscriptionServiceListOutputBuilder()
+                    .setSubscriptionService(new HashMap<>())
+                    .build())
+                .buildFuture();
+        }
+        Map<SubscriptionServiceKey, SubscriptionService> notifSubsMap = new HashMap<>();
+        for (NotifSubscription notifSubscription:notificationContext.getNotifSubscription().values()) {
+            SubscriptionService subscriptionService = new SubscriptionServiceBuilder(notifSubscription).build();
+            notifSubsMap.put(subscriptionService.key(), subscriptionService);
+        }
+        return RpcResultBuilder
+            .success(
+                new GetNotificationSubscriptionServiceListOutputBuilder().setSubscriptionService(notifSubsMap).build())
+            .buildFuture();
+    }
+
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationsAlarmServiceImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationsAlarmServiceImpl.java
new file mode 100644 (file)
index 0000000..6dd1256
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.transportpce.nbinotifications.consumer.Subscriber;
+import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceDeserializer;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsAlarmServiceInput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsAlarmServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsAlarmServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetNotificationsAlarmServiceImpl implements GetNotificationsAlarmService {
+    private static final Logger LOG = LoggerFactory.getLogger(GetNotificationsAlarmServiceImpl.class);
+
+    private final JsonStringConverter<NotificationAlarmService> converterAlarmService;
+    private final String server;
+
+    public GetNotificationsAlarmServiceImpl(JsonStringConverter<NotificationAlarmService> converterAlarmService,
+            String server) {
+        this.converterAlarmService = converterAlarmService;
+        this.server = server;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationsAlarmServiceOutput>> invoke(
+            GetNotificationsAlarmServiceInput input) {
+        LOG.info("RPC getNotificationsAlarmService received");
+        if (input == null || input.getIdConsumer() == null || input.getGroupId() == null) {
+            LOG.warn("Missing mandatory params for input {}", input);
+            return RpcResultBuilder.success(new GetNotificationsAlarmServiceOutputBuilder().build()).buildFuture();
+        }
+        return RpcResultBuilder
+            .success(new GetNotificationsAlarmServiceOutputBuilder()
+                .setNotificationsAlarmService(
+                    new Subscriber<NotificationAlarmService, NotificationsAlarmService>(
+                            input.getIdConsumer(), input.getGroupId(), server, converterAlarmService,
+                            NotificationAlarmServiceDeserializer.class)
+                        .subscribe("alarm" + input.getConnectionType().getName(), NotificationsAlarmService.QNAME))
+                .build())
+            .buildFuture();
+    }
+
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationsProcessServiceImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetNotificationsProcessServiceImpl.java
new file mode 100644 (file)
index 0000000..67e092b
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.converter.JsonStringConverter;
+import org.opendaylight.transportpce.nbinotifications.consumer.Subscriber;
+import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceDeserializer;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsProcessServiceInput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsProcessServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsProcessServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetNotificationsProcessServiceImpl implements GetNotificationsProcessService {
+    private static final Logger LOG = LoggerFactory.getLogger(GetNotificationsProcessServiceImpl.class);
+
+    private final JsonStringConverter<NotificationProcessService> converterService;
+    private final String server;
+
+    public GetNotificationsProcessServiceImpl(JsonStringConverter<NotificationProcessService> converterService,
+            String server) {
+        this.converterService = converterService;
+        this.server = server;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNotificationsProcessServiceOutput>> invoke(
+            GetNotificationsProcessServiceInput input) {
+        LOG.info("RPC getNotificationsService received");
+        if (input == null || input.getIdConsumer() == null || input.getGroupId() == null) {
+            LOG.warn("Missing mandatory params for input {}", input);
+            return RpcResultBuilder.success(new GetNotificationsProcessServiceOutputBuilder().build()).buildFuture();
+        }
+        return RpcResultBuilder
+            .success(
+                new GetNotificationsProcessServiceOutputBuilder()
+                    .setNotificationsProcessService(
+                        new Subscriber<NotificationProcessService, NotificationsProcessService>(
+                                input.getIdConsumer(), input.getGroupId(), server, converterService,
+                                NotificationServiceDeserializer.class)
+                            .subscribe(input.getConnectionType().getName(), NotificationsProcessService.QNAME))
+                    .build())
+            .buildFuture();
+    }
+}
diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetSupportedNotificationTypesImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/rpc/GetSupportedNotificationTypesImpl.java
new file mode 100644 (file)
index 0000000..91dc75c
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.nbinotifications.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.HashSet;
+import java.util.Set;
+import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPEPROFILE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPESERVICEINTERFACEPOINT;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPETAPICONTEXT;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTION;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIONENDPOINT;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetSupportedNotificationTypes;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetSupportedNotificationTypesInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetSupportedNotificationTypesOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetSupportedNotificationTypesOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.NOTIFICATIONTYPE;
+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.NOTIFICATIONTYPEOBJECTCREATION;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.NOTIFICATIONTYPEOBJECTDELETION;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPEINTERRULEGROUP;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPELINK;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODE;
+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.TOPOLOGYOBJECTTYPENODERULEGROUP;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+
+public class GetSupportedNotificationTypesImpl implements GetSupportedNotificationTypes {
+
+    private NbiNotificationsProvider nbiNotifications;
+
+    public GetSupportedNotificationTypesImpl(NbiNotificationsProvider nbiNotifications) {
+        this.nbiNotifications = nbiNotifications;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetSupportedNotificationTypesOutput>> invoke(
+            GetSupportedNotificationTypesInput input) {
+        NotificationContext notificationContext = nbiNotifications.getNotificationContext();
+        if (notificationContext == null) {
+            return RpcResultBuilder.<GetSupportedNotificationTypesOutput>failed()
+                .withError(ErrorType.APPLICATION, "Couldnt get Notification Context from Datastore")
+                .buildFuture();
+        }
+        //TAPI 2.4 removes supported notification types from notif-subscription list and notification-context
+        //No way to store what notification types are supported
+        //Considers that by default all notification are supported
+        Set<NOTIFICATIONTYPE> notificationTypeList = new HashSet<>();
+        notificationTypeList.add(NOTIFICATIONTYPEOBJECTCREATION.VALUE);
+        notificationTypeList.add(NOTIFICATIONTYPEOBJECTDELETION.VALUE);
+        notificationTypeList.add(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE);
+//
+//        if (notificationContext.getNotifSubscription() == null) {
+//            return RpcResultBuilder.success(new GetSupportedNotificationTypesOutputBuilder()
+//                .setSupportedNotificationTypes(new HashSet<>())
+//                .setSupportedObjectTypes(new HashSet<>()).build()).buildFuture();
+//        }
+//        Set<NOTIFICATIONTYPE> notificationTypeList = new HashSet<>();
+
+        //TAPI 2.4 removes supported object types from notif-subscription list and notification-context
+        //No way to store what object types are supported
+        //Considers that by default all object are supported
+        Set<OBJECTTYPE> objectTypeList = new HashSet<>();
+        objectTypeList.add(OBJECTTYPESERVICEINTERFACEPOINT.VALUE);
+        objectTypeList.add(OBJECTTYPETAPICONTEXT.VALUE);
+        objectTypeList.add(OBJECTTYPEPROFILE.VALUE);
+        objectTypeList.add(TOPOLOGYOBJECTTYPENODE.VALUE);
+        objectTypeList.add(TOPOLOGYOBJECTTYPELINK.VALUE);
+        objectTypeList.add(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE);
+        objectTypeList.add(TOPOLOGYOBJECTTYPENODERULEGROUP.VALUE);
+        objectTypeList.add(TOPOLOGYOBJECTTYPEINTERRULEGROUP.VALUE);
+        objectTypeList.add(CONNECTIVITYOBJECTTYPE.VALUE);
+        objectTypeList.add(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE);
+        objectTypeList.add(CONNECTIVITYOBJECTTYPECONNECTIONENDPOINT.VALUE);
+        objectTypeList.add(CONNECTIVITYOBJECTTYPECONNECTION.VALUE);
+//        for (NotifSubscription notifSubscription:notificationContext.getNotifSubscription().values()) {
+//            if (notifSubscription.getSupportedNotificationTypes() != null) {
+//                notificationTypeList.addAll(notifSubscription.getSupportedNotificationTypes());
+//            }
+//            if (notifSubscription.getSupportedObjectTypes() != null) {
+//                objectTypeList.addAll(notifSubscription.getSupportedObjectTypes());
+//            }
+//        }
+        return RpcResultBuilder.success(new GetSupportedNotificationTypesOutputBuilder()
+            .setSupportedNotificationTypes(notificationTypeList)
+            .setSupportedObjectTypes(objectTypeList).build()).buildFuture();
+    }
+
+}
@@ -8,28 +8,29 @@
 package org.opendaylight.transportpce.nbinotifications.listener;
 
 import java.util.Map;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
 import org.opendaylight.transportpce.nbinotifications.utils.NbiNotificationsUtils;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
-    private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsListenerImpl.class);
+public class NbiNotificationsHandler {
+    private static final Logger LOG = LoggerFactory.getLogger(NbiNotificationsHandler.class);
     private Map<String, Publisher<NotificationProcessService>> publishersServiceMap;
     private Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap;
     private Map<String, Publisher<NotificationTapiService>> tapiPublisherMap;
 
-    public NbiNotificationsListenerImpl(Map<String, Publisher<NotificationProcessService>> publishersServiceMap,
+    public NbiNotificationsHandler(Map<String, Publisher<NotificationProcessService>> publishersServiceMap,
                                         Map<String, Publisher<NotificationAlarmService>> publishersAlarmMap,
                                         Map<String, Publisher<NotificationTapiService>> tapiPublisherMap) {
         this.publishersServiceMap = publishersServiceMap;
@@ -37,8 +38,18 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
         this.tapiPublisherMap = tapiPublisherMap;
     }
 
-    @Override
-    public void onPublishNotificationProcessService(PublishNotificationProcessService notification) {
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(
+                PublishNotificationProcessService.class, this::onPublishNotificationProcessService),
+            new CompositeListener.Component<>(
+                PublishNotificationAlarmService.class, this::onPublishNotificationAlarmService),
+            new CompositeListener.Component<>(
+                PublishTapiNotificationService.class, this::onPublishTapiNotificationService)
+        ));
+    }
+
+    void onPublishNotificationProcessService(PublishNotificationProcessService notification) {
         LOG.info("Receiving request for publishing notification service");
         String publisherName = notification.getPublisherName();
         if (!publishersServiceMap.containsKey(publisherName)) {
@@ -46,7 +57,7 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
             return;
         }
         Publisher<NotificationProcessService> publisher = publishersServiceMap.get(publisherName);
-        publisher.sendEvent(new NotificationProcessServiceBuilder()
+        NotificationProcessServiceBuilder notificationProcessServiceBuilder = new NotificationProcessServiceBuilder()
                 .setCommonId(notification.getCommonId())
                 .setConnectionType(notification.getConnectionType())
                 .setMessage(notification.getMessage())
@@ -54,12 +65,21 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
                 .setResponseFailed(notification.getResponseFailed())
                 .setServiceAEnd(notification.getServiceAEnd())
                 .setServiceName(notification.getServiceName())
-                .setServiceZEnd(notification.getServiceZEnd())
-                        .build(), notification.getConnectionType().getName());
+                .setServiceZEnd(notification.getServiceZEnd());
+
+        if (notification.getIsTempService() == null || !notification.getIsTempService()) {
+            publisher.sendEvent(notificationProcessServiceBuilder
+                .build(), notification.getConnectionType().getName());
+        } else {
+            // A-to-Z and Z-to-A containers are only needed for temp-service-create notification
+            publisher.sendEvent(notificationProcessServiceBuilder
+                    .setAToZ(notification.getAToZ())
+                    .setZToA(notification.getZToA())
+                    .build(), notification.getConnectionType().getName());
+        }
     }
 
-    @Override
-    public void onPublishNotificationAlarmService(PublishNotificationAlarmService notification) {
+    void onPublishNotificationAlarmService(PublishNotificationAlarmService notification) {
         LOG.info("Receiving request for publishing notification alarm service");
         String publisherName = notification.getPublisherName();
         if (!publishersAlarmMap.containsKey(publisherName)) {
@@ -75,8 +95,7 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener {
                         .build(), "alarm" + notification.getConnectionType().getName());
     }
 
-    @Override
-    public void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
+    void onPublishTapiNotificationService(PublishTapiNotificationService notification) {
         LOG.info("Receiving request for publishing TAPI notification");
         String topic = notification.getTopic();
         if (!tapiPublisherMap.containsKey(topic)) {
index 4f0d19fcaae2ffea7cc785c1139382d871cba006..018e7f3bd4e6c82303da6ad92cfb18792ef8e109 100644 (file)
@@ -11,9 +11,9 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Deserializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
index 9816d9f6ff7cd70f4463210463bd575a15c30f16..2d403abc3f5a915fcdab281a3f09acd1c7a39971 100644 (file)
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Serializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
index 73e979310683355c0eb86d17e5dd4eaf5cb21d55..1a6f996f6119e162ce739f5eb6f88969210806a9 100644 (file)
@@ -11,9 +11,9 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Deserializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
@@ -51,7 +51,7 @@ public class NotificationServiceDeserializer implements Deserializer<Notificatio
             return null;
         }
         LOG.info("Reading event {}", mappedString);
-        return new NotificationsProcessServiceBuilder()
+        NotificationsProcessServiceBuilder notificationsProcessServiceBuilder = new NotificationsProcessServiceBuilder()
                 .setCommonId(mappedString.getCommonId())
                 .setConnectionType(mappedString.getConnectionType())
                 .setMessage(mappedString.getMessage())
@@ -59,8 +59,14 @@ public class NotificationServiceDeserializer implements Deserializer<Notificatio
                 .setResponseFailed(mappedString.getResponseFailed())
                 .setServiceName(mappedString.getServiceName())
                 .setServiceAEnd(mappedString.getServiceAEnd())
-                .setServiceZEnd(mappedString.getServiceZEnd())
-                .build();
+                .setServiceZEnd(mappedString.getServiceZEnd());
+        if (mappedString.getIsTempService()) {
+            return notificationsProcessServiceBuilder
+                    .setAToZ(mappedString.getAToZ())
+                    .setZToA(mappedString.getZToA())
+                    .build();
+        }
+        return notificationsProcessServiceBuilder.build();
     }
 
 }
index 8090ccd268f8538027a56aec5999465d5520f321..55c9c1c7d8451c20e32f1cef182afacfce193bab 100644 (file)
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Serializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
index c4317f34db974f0c21a57086c1ee83efbd73bca6..ac08d836927a89463fc8fdfac10a12f331072435 100644 (file)
@@ -12,23 +12,21 @@ import java.util.HashMap;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Deserializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-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.notification.rev181210.get.notification.list.output.Notification;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfoBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfoKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AlarmInfoBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TcaInfoBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+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.notification.rev221121.get.notification.list.output.Notification;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.NotificationBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.AdditionalInfo;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.AdditionalInfoBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.AdditionalInfoKey;
+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.notification.rev221121.notification.TargetObjectName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameKey;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
@@ -56,10 +54,10 @@ public class TapiNotificationDeserializer implements Deserializer<Notification>
         }
         String value = new String(data, StandardCharsets.UTF_8);
         // The message published is
-        // org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService
+        // org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService
         // we have to map it to
         // org.opendaylight.yang.gen.v1
-        // .urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification
+        // .urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.Notification
         NotificationTapiService mappedString = converter.createDataObjectFromJsonString(
             YangInstanceIdentifier.of(NotificationTapiService.QNAME), value, JSONCodecFactorySupplier.RFC7951);
         if (mappedString == null) {
@@ -73,7 +71,7 @@ public class TapiNotificationDeserializer implements Deserializer<Notification>
         LOG.info("Transforming TAPI notification for getNotificationList rpc");
         Map<AdditionalInfoKey, AdditionalInfo> addInfoMap = new HashMap<>();
         if (mappedString.getAdditionalInfo() != null) {
-            for (org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo
+            for (org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.AdditionalInfo
                     addInfo:mappedString.getAdditionalInfo().values()) {
                 AdditionalInfo transAddInfo = new AdditionalInfoBuilder()
                     .setValue(addInfo.getValue())
@@ -85,7 +83,7 @@ public class TapiNotificationDeserializer implements Deserializer<Notification>
         Map<ChangedAttributesKey, ChangedAttributes> changedAttMap = new HashMap<>();
         if (mappedString.getChangedAttributes() != null) {
             for (org.opendaylight.yang.gen.v1
-                    .nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes changedAtt:mappedString
+                    .nbi.notifications.rev230728.notification.tapi.service.ChangedAttributes changedAtt:mappedString
                         .getChangedAttributes().values()) {
                 ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build();
                 changedAttMap.put(transChangedAtt.key(), transChangedAtt);
@@ -101,16 +99,18 @@ public class TapiNotificationDeserializer implements Deserializer<Notification>
         Map<TargetObjectNameKey, TargetObjectName> targetObjNameMap = new HashMap<>();
         if (mappedString.getTargetObjectName() != null) {
             for (org.opendaylight.yang.gen.v1
-                    .nbi.notifications.rev211013.notification.tapi.service.TargetObjectName
+                    .nbi.notifications.rev230728.notification.tapi.service.TargetObjectName
                         targetObjectName:mappedString.getTargetObjectName().values()) {
                 TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build();
                 targetObjNameMap.put(transTargetObjName.key(), transTargetObjName);
             }
         }
+
+//       In TAPI 2.4 get-notifcation-list, there is no more alarm-info and Tca-info
         LOG.info("Notification uuid = {}", mappedString.getUuid().getValue());
         return new NotificationBuilder()
-            .setAlarmInfo(mappedString.getAlarmInfo() == null ? null
-                : new AlarmInfoBuilder(mappedString.getAlarmInfo()).build())
+//            .setAlarmInfo(mappedString.getAlarmInfo() == null ? null
+//                : new AlarmInfoBuilder(mappedString.getAlarmInfo()).build())
             .setAdditionalText(mappedString.getAdditionalText())
             .setAdditionalInfo(addInfoMap)
             .setNotificationType(mappedString.getNotificationType())
@@ -123,8 +123,8 @@ public class TapiNotificationDeserializer implements Deserializer<Notification>
             .setTargetObjectIdentifier(mappedString.getTargetObjectIdentifier())
             .setTargetObjectName(targetObjNameMap)
             .setTargetObjectType(mappedString.getTargetObjectType())
-            .setTcaInfo(mappedString.getTcaInfo() == null ? null
-                : new TcaInfoBuilder(mappedString.getTcaInfo()).build())
+//            .setTcaInfo(mappedString.getTcaInfo() == null ? null
+//                : new TcaInfoBuilder(mappedString.getTcaInfo()).build())
             .setUuid(mappedString.getUuid())
             .build();
     }
index 7525fcfec3cca8bef97bd2f904c6eb63edd4becb..38bcce0099239cc6c058109ab59bb65ec6a5986c 100644 (file)
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import org.apache.kafka.common.serialization.Serializer;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.slf4j.Logger;
index 219f5288f73070200a9798fe30723ca7f25d7c86..582aaa02d37289838eaf70b668b892abeb41317a 100644 (file)
@@ -13,22 +13,20 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoKey;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AlarmInfoBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesKey;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectName;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameKey;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TcaInfoBuilder;
-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.NameKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.AdditionalInfo;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.AdditionalInfoBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.AdditionalInfoKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.ChangedAttributes;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.ChangedAttributesBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.ChangedAttributesKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.TargetObjectName;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.tapi.service.TargetObjectNameKey;
+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.NameKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -70,9 +68,9 @@ public final class NbiNotificationsUtils {
                         e -> new TargetObjectNameKey(e.getValueName()),
                         e -> new TargetObjectNameBuilder(e).build()));
         LOG.info("Notification uuid = {}", notification.getUuid());
+
         return new NotificationTapiServiceBuilder()
-                .setAlarmInfo(notification.getAlarmInfo() == null ? null
-                        : new AlarmInfoBuilder(notification.getAlarmInfo()).build())
+                .setAlarmInfo(notification.getAlarmInfo())
                 .setAdditionalText(notification.getAdditionalText())
                 .setAdditionalInfo(addInfoMap)
                 .setNotificationType(notification.getNotificationType())
@@ -85,8 +83,7 @@ public final class NbiNotificationsUtils {
                 .setTargetObjectIdentifier(notification.getTargetObjectIdentifier())
                 .setTargetObjectName(targetObjNameMap)
                 .setTargetObjectType(notification.getTargetObjectType())
-                .setTcaInfo(notification.getTcaInfo() == null ? null
-                        : new TcaInfoBuilder(notification.getTcaInfo()).build())
+                .setTcaInfo(notification.getTcaInfo())
                 .setUuid(notification.getUuid())
                 .build();
     }
index dad51171fcf151036b72de4d31bd357183b9e876..89dc7cbb3be1eb151bf0dc7ccd0142545bf197f3 100644 (file)
@@ -10,14 +10,14 @@ package org.opendaylight.transportpce.nbinotifications.utils;
 import java.util.HashMap;
 import java.util.Map;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
-import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsListenerImpl;
+import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsHandler;
 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceSerializer;
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceSerializer;
 import org.opendaylight.transportpce.nbinotifications.serialization.TapiNotificationSerializer;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,7 +29,7 @@ public final class TopicManager {
     private Map<String, Publisher<NotificationTapiService>> tapiPublisherMap = new HashMap<>();
     private String publisherServer;
     private JsonStringConverter<NotificationTapiService> tapiConverter;
-    private NbiNotificationsListenerImpl nbiNotificationsListener;
+    private NbiNotificationsHandler nbiNotificationsListener;
     private Map<String, Publisher<NotificationAlarmService>> alarmPublisherMap = new HashMap<>();
     private Map<String, Publisher<NotificationProcessService>> processPublisherMap = new HashMap<>();
     private JsonStringConverter<NotificationProcessService> processConverter;
@@ -42,7 +42,7 @@ public final class TopicManager {
         return instance;
     }
 
-    public void setNbiNotificationsListener(NbiNotificationsListenerImpl nbiNotificationsListener) {
+    public void setNbiNotificationsListener(NbiNotificationsHandler nbiNotificationsListener) {
         this.nbiNotificationsListener = nbiNotificationsListener;
     }
 
index 5c5f6690f9032e0195af148e175c1f60074c894d..af6fdca091e3e627ee3f8825d4a037e839f587cd 100644 (file)
@@ -23,12 +23,12 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.Notification;
 
 public class SubscriberTest extends AbstractTest {
     private static final String TOPIC = "topic";
index ec2a5b38873af4f6e7a4ade1202dffdebfbabd91..4bb418e842280fa8f8d035feec6167d5941ce69f 100644 (file)
@@ -15,99 +15,116 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.concurrent.ExecutionException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.CreateNotificationSubscriptionServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationListImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationsAlarmServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationsProcessServiceImpl;
 import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils;
 import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsAlarmServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotificationsProcessServiceOutput;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsAlarmServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsAlarmServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsProcessServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.GetNotificationsProcessServiceOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListOutput;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
+@ExtendWith(MockitoExtension.class)
 public class NbiNotificationsImplTest extends AbstractTest {
-    private NbiNotificationsImpl nbiNotificationsImpl;
+
+    @Mock
+    RpcProviderService rpcProviderRegistry;
+    @Mock
+    private NotificationService notificationService;
+
+    private NbiNotificationsProvider nbiNotifications;
     public static NetworkTransactionService networkTransactionService;
     private TopicManager topicManager;
+    private JsonStringConverter<NotificationProcessService> converterProcess;
+    private JsonStringConverter<NotificationAlarmService> converterAlarm;
+    private JsonStringConverter<NotificationTapiService> converterTapi;
 
     @BeforeEach
     void setUp() throws ExecutionException, InterruptedException {
         topicManager = TopicManager.getInstance();
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-        JsonStringConverter<NotificationProcessService> converter = new JsonStringConverter<>(
-                getDataStoreContextUtil().getBindingDOMCodecServices());
-        JsonStringConverter<NotificationAlarmService> converterAlarm = new JsonStringConverter<>(
-                getDataStoreContextUtil().getBindingDOMCodecServices());
-        JsonStringConverter<NotificationTapiService> converterTapi = new JsonStringConverter<>(
-            getDataStoreContextUtil().getBindingDOMCodecServices());
+        converterProcess = new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices());
+        converterAlarm = new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices());
+        converterTapi = new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices());
         topicManager.setTapiConverter(converterTapi);
         NotificationServiceDataUtils.createTapiContext(networkTransactionService);
 
-        nbiNotificationsImpl = new NbiNotificationsImpl(converter, converterAlarm, converterTapi,
-            "localhost:8080", networkTransactionService, topicManager);
+        nbiNotifications = new NbiNotificationsProvider("localhost:8080", "localhost:8080",
+                rpcProviderRegistry, notificationService, getDataStoreContextUtil().getBindingDOMCodecServices(),
+                networkTransactionService);
     }
 
     @Test
     void getNotificationsServiceEmptyDataTest() throws InterruptedException, ExecutionException {
         ListenableFuture<RpcResult<GetNotificationsProcessServiceOutput>> result =
-                nbiNotificationsImpl.getNotificationsProcessService(
-                        new GetNotificationsProcessServiceInputBuilder().build());
+            new GetNotificationsProcessServiceImpl(converterProcess, "localhost:8080")
+                .invoke(new GetNotificationsProcessServiceInputBuilder().build());
         assertNull(result.get().getResult().getNotificationsProcessService(), "Should be null");
     }
 
     @Test
     void getNotificationsServiceTest() throws InterruptedException, ExecutionException {
-        GetNotificationsProcessServiceInputBuilder builder = new GetNotificationsProcessServiceInputBuilder()
-                .setGroupId("groupId")
-                .setIdConsumer("consumerId")
-                .setConnectionType(ConnectionType.Service);
         ListenableFuture<RpcResult<GetNotificationsProcessServiceOutput>> result =
-                nbiNotificationsImpl.getNotificationsProcessService(builder.build());
+            new GetNotificationsProcessServiceImpl(converterProcess, "localhost:8080")
+                .invoke(new GetNotificationsProcessServiceInputBuilder()
+                    .setGroupId("groupId")
+                    .setIdConsumer("consumerId")
+                    .setConnectionType(ConnectionType.Service)
+                    .build());
         assertNull(result.get().getResult().getNotificationsProcessService(), "Should be null");
     }
 
     @Test
     void getNotificationsAlarmServiceTest() throws InterruptedException, ExecutionException {
-        GetNotificationsAlarmServiceInputBuilder builder = new GetNotificationsAlarmServiceInputBuilder()
-                .setGroupId("groupId")
-                .setIdConsumer("consumerId")
-                .setConnectionType(ConnectionType.Service);
         ListenableFuture<RpcResult<GetNotificationsAlarmServiceOutput>> result =
-                nbiNotificationsImpl.getNotificationsAlarmService(builder.build());
+            new GetNotificationsAlarmServiceImpl(converterAlarm, "localhost:8080")
+                .invoke(new GetNotificationsAlarmServiceInputBuilder()
+                    .setGroupId("groupId")
+                    .setIdConsumer("consumerId")
+                    .setConnectionType(ConnectionType.Service)
+                    .build());
         assertNull(result.get().getResult().getNotificationsAlarmService(), "Should be null");
     }
 
     @Test
     void createTapiNotificationSubscriptionServiceTest() throws InterruptedException, ExecutionException {
-        CreateNotificationSubscriptionServiceInputBuilder builder
-            = NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder();
         ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>> result =
-            nbiNotificationsImpl.createNotificationSubscriptionService(builder.build());
+            new CreateNotificationSubscriptionServiceImpl(nbiNotifications, topicManager)
+                .invoke(NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder().build());
         assertNotNull(result.get().getResult().getSubscriptionService().getUuid().toString(),
             "Should receive UUID for subscription service");
     }
 
     @Test
     void getTapiNotificationsServiceTest() throws InterruptedException, ExecutionException {
-        CreateNotificationSubscriptionServiceInputBuilder builder
-            = NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder();
         ListenableFuture<RpcResult<CreateNotificationSubscriptionServiceOutput>> result =
-            nbiNotificationsImpl.createNotificationSubscriptionService(builder.build());
-        GetNotificationListInputBuilder builder1 = new GetNotificationListInputBuilder()
-            .setTimePeriod("Time Period")
-            .setSubscriptionIdOrName(result.get().getResult().getSubscriptionService().getUuid().getValue());
-        ListenableFuture<RpcResult<GetNotificationListOutput>> result1 =
-            nbiNotificationsImpl.getNotificationList(builder1.build());
-        assertNull(result1.get().getResult().getNotification(), "Should be null");
+                new CreateNotificationSubscriptionServiceImpl(nbiNotifications, topicManager)
+            .invoke(NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder().build());
+        ListenableFuture<RpcResult<GetNotificationListOutput>> result2 =
+            new GetNotificationListImpl(converterTapi, "localhost:8080", networkTransactionService, topicManager)
+                .invoke(new GetNotificationListInputBuilder()
+                    .setTimeRange(null)
+                    .setSubscriptionId(result.get().getResult().getSubscriptionService().getUuid())
+                    .build());
+        assertNull(result2.get().getResult().getNotification(), "Should be null");
     }
 }
index 68a93c3289bf0fda9a19a061db25a9e6d06a9ebe..bed0d1ccde3ecf60cced51ddbf698e9c1dfe5698 100644 (file)
@@ -19,9 +19,17 @@ import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.transportpce.nbinotifications.listener.NbiNotificationsListenerImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.CreateNotificationSubscriptionServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.DeleteNotificationSubscriptionServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationListImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationSubscriptionServiceDetailsImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationSubscriptionServiceListImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationsAlarmServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetNotificationsProcessServiceImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.GetSupportedNotificationTypesImpl;
 import org.opendaylight.transportpce.test.AbstractTest;
 
+
 public class NbiNotificationsProviderTest  extends AbstractTest {
     public static NetworkTransactionService networkTransactionService;
 
@@ -38,12 +46,19 @@ public class NbiNotificationsProviderTest  extends AbstractTest {
     @Test
     void initTest() {
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
-        NbiNotificationsProvider provider = new NbiNotificationsProvider("localhost:8080", "localhost:8080",
+        new NbiNotificationsProvider("localhost:8080", "localhost:8080",
                 rpcProviderRegistry, notificationService, getDataStoreContextUtil().getBindingDOMCodecServices(),
                 networkTransactionService);
-        verify(rpcProviderRegistry, times(2))
-                .registerRpcImplementation(any(), any(NbiNotificationsImpl.class));
+        verify(rpcProviderRegistry, times(1)).registerRpcImplementations(
+                any(GetNotificationsProcessServiceImpl.class),
+                any(GetNotificationsAlarmServiceImpl.class),
+                any(GetSupportedNotificationTypesImpl.class),
+                any(CreateNotificationSubscriptionServiceImpl.class),
+                any(DeleteNotificationSubscriptionServiceImpl.class),
+                any(GetNotificationSubscriptionServiceDetailsImpl.class),
+                any(GetNotificationSubscriptionServiceListImpl.class),
+                any(GetNotificationListImpl.class));
         verify(notificationService, times(1))
-                .registerNotificationListener(any(NbiNotificationsListenerImpl.class));
+                .registerCompositeListener(any(NotificationService.CompositeListener.class));
     }
 }
@@ -25,19 +25,19 @@ import org.mockito.MockitoAnnotations;
 import org.opendaylight.transportpce.nbinotifications.producer.Publisher;
 import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationServiceBuilder;
 
-public class NbiNotificationsListenerImplTest extends AbstractTest {
+public class NbiNotificationsHandlerTest extends AbstractTest {
     @Mock
     private Publisher<NotificationProcessService> publisherService;
     @Mock
@@ -52,12 +52,13 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
 
     @Test
     void onPublishNotificationServiceTest() {
-        NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
+        NbiNotificationsHandler listener = new NbiNotificationsHandler(Map.of("test", publisherService),
                 Map.of("test", publisherAlarm), Map.of("test", publisherTapiService));
         PublishNotificationProcessService notification = new PublishNotificationProcessServiceBuilder()
                 .setPublisherName("test")
                 .setCommonId("commonId")
                 .setConnectionType(ConnectionType.Service)
+                .setIsTempService(false)
                 .setMessage("Service deleted")
                 .setOperationalState(State.OutOfService)
                 .setServiceName("service name")
@@ -68,7 +69,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
 
     @Test
     void onPublishNotificationServiceWrongPublisherTest() {
-        NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
+        NbiNotificationsHandler listener = new NbiNotificationsHandler(Map.of("test", publisherService),
                 Map.of("test", publisherAlarm), Map.of("test", publisherTapiService));
         PublishNotificationProcessService notification = new PublishNotificationProcessServiceBuilder()
                 .setPublisherName("wrongPublisher")
@@ -84,7 +85,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
 
     @Test
     void onPublishNotificationAlarmServiceTest() {
-        NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
+        NbiNotificationsHandler listener = new NbiNotificationsHandler(Map.of("test", publisherService),
                 Map.of("test", publisherAlarm), Map.of("test", publisherTapiService));
         PublishNotificationAlarmService notification = new PublishNotificationAlarmServiceBuilder()
                 .setPublisherName("test")
@@ -99,7 +100,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
 
     @Test
     void onPublishNotificationAlarmServiceWrongPublisherTest() {
-        NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
+        NbiNotificationsHandler listener = new NbiNotificationsHandler(Map.of("test", publisherService),
                 Map.of("test", publisherAlarm), Map.of("test", publisherTapiService));
         PublishNotificationAlarmService notification = new PublishNotificationAlarmServiceBuilder()
                 .setPublisherName("wrongPublisher")
@@ -114,7 +115,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
 
     @Test
     void onPublishTapiNotificationServiceTest() throws ExecutionException, InterruptedException {
-        NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
+        NbiNotificationsHandler listener = new NbiNotificationsHandler(Map.of("test", publisherService),
                 Map.of("test", publisherAlarm), Map.of("test", publisherTapiService));
 
         PublishTapiNotificationService notification
@@ -127,7 +128,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
 
     @Test
     void onPublishTapiNotificationServiceTestWrongPublisherTest() {
-        NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
+        NbiNotificationsHandler listener = new NbiNotificationsHandler(Map.of("test", publisherService),
             Map.of("test", publisherAlarm), Map.of("test", publisherTapiService));
         PublishTapiNotificationService notification
             = new PublishTapiNotificationServiceBuilder(NotificationServiceDataUtils.buildReceivedTapiAlarmEvent())
@@ -139,7 +140,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest {
 
     @Test
     void getTapiPublisherFromTopicTest() {
-        NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService),
+        NbiNotificationsHandler listener = new NbiNotificationsHandler(Map.of("test", publisherService),
                 Map.of("test", publisherAlarm), Map.of("test", publisherTapiService));
         assertNull(listener.getTapiPublisherFromTopic("toto"));
         assertEquals(publisherTapiService, listener.getTapiPublisherFromTopic("test"));
index e7d7fd66b57223b8ad302b008ec967245fd4225c..8030b9253f5ac51902697d0ccb0bb94b24ee9bfb 100644 (file)
@@ -21,11 +21,15 @@ import org.apache.kafka.clients.producer.MockProducer;
 import org.apache.kafka.common.serialization.StringSerializer;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsImpl;
+import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
+import org.opendaylight.transportpce.nbinotifications.impl.rpc.CreateNotificationSubscriptionServiceImpl;
 import org.opendaylight.transportpce.nbinotifications.serialization.ConfigConstants;
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceSerializer;
 import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceSerializer;
@@ -33,19 +37,25 @@ import org.opendaylight.transportpce.nbinotifications.serialization.TapiNotifica
 import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils;
 import org.opendaylight.transportpce.nbinotifications.utils.TopicManager;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-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.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilter;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilterBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+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.notification.rev221121.CreateNotificationSubscriptionServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.input.SubscriptionFilter;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.input.SubscriptionFilterBuilder;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 
 public class PublisherTest extends AbstractTest {
+
     private static NetworkTransactionService networkTransactionService;
 
+    @Mock
+    RpcProviderService rpcProviderRegistry;
+    @Mock
+    private NotificationService notificationService;
+
     private JsonStringConverter<NotificationProcessService> converterService;
     private JsonStringConverter<NotificationAlarmService> converterAlarm;
     private JsonStringConverter<NotificationTapiService> converterTapiService;
@@ -55,7 +65,7 @@ public class PublisherTest extends AbstractTest {
     private MockProducer<String, NotificationProcessService> mockProducer;
     private MockProducer<String, NotificationAlarmService> mockAlarmProducer;
     private MockProducer<String, NotificationTapiService> mockTapiProducer;
-    private NbiNotificationsImpl nbiNotificationsImpl;
+    private NbiNotificationsProvider nbiNotifications;
     private TopicManager topicManager;
 
 
@@ -84,8 +94,9 @@ public class PublisherTest extends AbstractTest {
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
         topicManager.setTapiConverter(converterTapiService);
         NotificationServiceDataUtils.createTapiContext(networkTransactionService);
-        nbiNotificationsImpl = new NbiNotificationsImpl(converterService, converterAlarm, converterTapiService,
-            "localhost:8080", networkTransactionService, topicManager);
+        nbiNotifications = new NbiNotificationsProvider("localhost:8080", "localhost:8080",
+                rpcProviderRegistry, notificationService, getDataStoreContextUtil().getBindingDOMCodecServices(),
+                networkTransactionService);
     }
 
     @Test
@@ -119,7 +130,8 @@ public class PublisherTest extends AbstractTest {
             .setRequestedObjectIdentifier(new HashSet<>(List.of(new Uuid("76d8f07b-ead5-4132-8eb8-cf3fdef7e079"))))
             .build();
         builder.setSubscriptionFilter(subscriptionFilter);
-        nbiNotificationsImpl.createNotificationSubscriptionService(builder.build());
+
+        new CreateNotificationSubscriptionServiceImpl(nbiNotifications, topicManager).invoke(builder.build());
         String json = Files.readString(Paths.get("src/test/resources/tapi_event.json"));
         NotificationTapiService notificationTapiService = converterTapiService
             .createDataObjectFromJsonString(YangInstanceIdentifier.of(NotificationTapiService.QNAME),
index cd642f09dcd148cb254c08cb439b672b33e76b95..47c6f0a7d11ce96bd36a976ce545b6a3354bfd48 100755 (executable)
@@ -17,8 +17,8 @@ import java.util.Map;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.alarm.service.output.NotificationsAlarmService;
 
 public class NotificationAlarmServiceDeserializerTest extends AbstractTest {
 
index 8b267970bd4b28f8f717cdad5edfd0d96ed28179..91d4e42f94550c6af21c113ffbde3cff22c9a58e 100755 (executable)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.transportpce.nbinotifications.serialization;
 
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -18,17 +16,19 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Map;
+import org.json.JSONException;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationAlarmService;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
+import org.skyscreamer.jsonassert.JSONAssert;
 
 public class NotificationAlarmServiceSerializerTest extends AbstractTest {
 
     @Test
-    void serializeTest() throws IOException {
+    void serializeTest() throws IOException, JSONException {
         JsonStringConverter<NotificationAlarmService> converter =
                 new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices());
         String json = Files.readString(Paths.get("src/test/resources/event_alarm_service.json"));
@@ -44,6 +44,6 @@ public class NotificationAlarmServiceSerializerTest extends AbstractTest {
         String expectedJson = Files.readString(Paths.get("src/test/resources/expected_event_alarm_service.json"));
         // Minify the json string
         expectedJson = new ObjectMapper().readValue(expectedJson, JsonNode.class).toString();
-        assertEquals(expectedJson, new String(data, StandardCharsets.UTF_8), "The event should be equals");
+        JSONAssert.assertEquals(expectedJson, new String(data, StandardCharsets.UTF_8), true);
     }
 }
index 25edafea8a52c2f500e1c1fca96ec86743b8ffd7..fc987fb87f3d7f5cc7f728f4e91298b3c4e4096b 100644 (file)
@@ -17,8 +17,8 @@ import java.util.Map;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.process.service.output.NotificationsProcessService;
 
 public class NotificationServiceDeserializerTest extends AbstractTest {
 
index 0a15d9ebc5e14a11599f641a30c136216cd788e3..b110b1391b8fb45dd6ad139ab84b27492cb70c76 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.transportpce.nbinotifications.serialization;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -17,17 +16,19 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Map;
+import org.json.JSONException;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
+import org.skyscreamer.jsonassert.JSONAssert;
 
 public class NotificationServiceSerializerTest extends AbstractTest {
 
     @Test
-    void serializeTest() throws IOException {
+    void serializeTest() throws IOException, JSONException {
         JsonStringConverter<NotificationProcessService> converter =
                 new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices());
         String json = Files.readString(Paths.get("src/test/resources/event.json"));
@@ -43,6 +44,6 @@ public class NotificationServiceSerializerTest extends AbstractTest {
         String expectedJson = Files.readString(Paths.get("src/test/resources/expected_event.json"));
         // Minify the json string
         expectedJson = new ObjectMapper().readValue(expectedJson, JsonNode.class).toString();
-        assertEquals(expectedJson, new String(data, StandardCharsets.UTF_8), "The event should be equals");
+        JSONAssert.assertEquals(expectedJson, new String(data, StandardCharsets.UTF_8), true);
     }
 }
index 929d6a58feef08ef309bcf1d448db931354db990..f134eb93bf46c6a13db4369261ac869a39277529 100644 (file)
@@ -17,8 +17,8 @@ import java.util.Map;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.Notification;
 
 public class NotificationTapiServiceDeserializerTest extends AbstractTest {
 
index b040246fa8be19377c95a1ac62842a736a08dc5f..1309c37ec8eeec05b94aa4f163fe4b2a111ecced 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.transportpce.nbinotifications.serialization;
 
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import com.fasterxml.jackson.databind.JsonNode;
@@ -18,17 +17,19 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Map;
+import org.json.JSONException;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.converter.JsonStringConverter;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapiService;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
+import org.skyscreamer.jsonassert.JSONAssert;
 
 public class NotificationTapiServiceSerializerTest extends AbstractTest {
 
     @Test
-    void serializeTest() throws IOException {
+    void serializeTest() throws IOException, JSONException {
         JsonStringConverter<NotificationTapiService> converter =
                 new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices());
         String json = Files.readString(Paths.get("src/test/resources/tapi_event.json"));
@@ -44,6 +45,6 @@ public class NotificationTapiServiceSerializerTest extends AbstractTest {
         String expectedJson = Files.readString(Paths.get("src/test/resources/expected_tapi_event.json"));
         // Minify the json string
         expectedJson = new ObjectMapper().readValue(expectedJson, JsonNode.class).toString();
-        assertEquals(expectedJson, new String(data, StandardCharsets.UTF_8), "The event should be equals");
+        JSONAssert.assertEquals(expectedJson, new String(data, StandardCharsets.UTF_8), true);
     }
 }
index 195ef39fac788f952e7be3fbc77fbab548d72938..d36599912857e582e33b0b8f3cd26b4b2a89414a 100644 (file)
@@ -20,53 +20,55 @@ import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.LgxBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.LgxBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
-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.DateAndTime;
-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.OperationalState;
-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.local._class.Name;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1Builder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.SubscriptionState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilter;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilterBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.NwTopologyServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.alarm.service.output.NotificationsAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.alarm.service.output.NotificationsAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.process.service.output.NotificationsProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.get.notifications.process.service.output.NotificationsProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEndBuilder;
+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.DateAndTime;
+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.OperationalState;
+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.local._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1Builder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListInputBuilder;
+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.NOTIFICATIONTYPEOBJECTCREATION;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.NOTIFICATIONTYPEOBJECTDELETION;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.SubscriptionState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.context.NotificationContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.input.SubscriptionFilter;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.create.notification.subscription.service.input.SubscriptionFilterBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.Notification;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.get.notification.list.output.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.TargetObjectName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContextBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.NwTopologyServiceBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
@@ -133,9 +135,9 @@ public final class NotificationServiceDataUtils {
             .setNewValue(OperationalState.ENABLED.getName())
             .build();
         return new NotificationBuilder()
-            .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
+            .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE)
             .setLayerProtocolName(LayerProtocolName.ETH)
-            .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE)
+            .setTargetObjectType(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE)
             .setEventTimeStamp(datetime)
             .setUuid(new Uuid(UUID.randomUUID().toString()))
             .setTargetObjectIdentifier(targetObjectId)
@@ -171,8 +173,9 @@ public final class NotificationServiceDataUtils {
             .setValueName("Subscription name")
             .build();
         SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder()
-            .setRequestedObjectTypes(new HashSet<>(List.of(ObjectType.CONNECTIVITYSERVICE)))
-            .setRequestedNotificationTypes(new HashSet<>(List.of(NotificationType.ALARMEVENT)))
+            .setRequestedObjectTypes(new HashSet<>(List.of(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE)))
+            .setRequestedNotificationTypes(new HashSet<>(List.of(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE,
+                NOTIFICATIONTYPEOBJECTCREATION.VALUE, NOTIFICATIONTYPEOBJECTDELETION.VALUE)))
             .setRequestedLayerProtocols(new HashSet<>(List.of(LayerProtocolName.ETH)))
             .setRequestedObjectIdentifier(new HashSet<>(List.of(new Uuid(UUID.randomUUID().toString()))))
             .setIncludeContent(true)
@@ -229,8 +232,8 @@ public final class NotificationServiceDataUtils {
     public static void createTapiContext(
             NetworkTransactionService networkTransactionService) throws ExecutionException, InterruptedException {
         // Augmenting tapi context to include topology and connectivity contexts
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name contextName
-            = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder()
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name contextName
+            = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder()
             .setValue(TAPI_CONTEXT).setValueName("TAPI Context Name").build();
 
         Context1 connectivityContext =
@@ -242,34 +245,34 @@ public final class NotificationServiceDataUtils {
                         .build())
                 .build();
 
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name nwTopoServiceName =
-            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder()
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name nwTopoServiceName =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder()
                 .setValue("Network Topo Service")
                 .setValueName("Network Topo Service Name")
                 .build();
 
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1 topologyContext
-            = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1Builder()
-            .setTopologyContext(new TopologyContextBuilder()
-                .setNwTopologyService(new NwTopologyServiceBuilder()
-                    .setTopology(new HashMap<>())
-                    .setUuid(
-                        new Uuid(
-                            UUID.nameUUIDFromBytes("Network Topo Service".getBytes(Charset.forName("UTF-8")))
-                                .toString()))
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1 topologyContext
+            = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1Builder()
+                .setTopologyContext(new TopologyContextBuilder()
+                    .setNwTopologyService(new NwTopologyServiceBuilder()
+                        .setTopology(new HashMap<>())
+                        .setUuid(
+                            new Uuid(
+                                UUID.nameUUIDFromBytes("Network Topo Service".getBytes(Charset.forName("UTF-8")))
+                                    .toString()))
                     .setName(Map.of(nwTopoServiceName.key(), nwTopoServiceName))
                     .build())
                 .setTopology(new HashMap<>())
                 .build())
             .build();
 
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1 notificationContext
-            = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1Builder()
-            .setNotificationContext(new NotificationContextBuilder()
-                .setNotification(new HashMap<>())
-                .setNotifSubscription(new HashMap<>())
-                .build())
-            .build();
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1 notificationContext
+            = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1Builder()
+                .setNotificationContext(new NotificationContextBuilder()
+                    .setNotification(new HashMap<>())
+                    .setNotifSubscription(new HashMap<>())
+                    .build())
+                .build();
 
         ContextBuilder contextBuilder = new ContextBuilder()
             .setName(Map.of(contextName.key(), contextName))
@@ -289,7 +292,7 @@ public final class NotificationServiceDataUtils {
 
     public static GetNotificationListInputBuilder buildGetNotificationListInputBuilder(String subscriptionUuid) {
         return new GetNotificationListInputBuilder()
-                .setSubscriptionIdOrName(subscriptionUuid)
-                .setTimePeriod("some string");
+                .setSubscriptionId(new Uuid(UUID.fromString(subscriptionUuid).toString()))
+                .setTimeRange(null);
     }
 }
index c09ee69721b0b2f785d295f0414ff4d0aa1f2238..9f628332879ac0ae607c81293585eb1ae3cf733b 100644 (file)
         },
         "service-name": "service1",
         "message": "message",
-        "response-failed": ""
+        "response-failed": "",
+        "is-temp-service": true,
+        "aToZ": {
+            "frequency": 196.125,
+            "width": 87.5,
+            "optical-operational-mode": "test",
+            "rx-estimated-osnr": 23.5,
+            "rx-estimated-gsnr": 23.5,
+            "max-output-power": 0.5,
+            "min-output-power": 0.5
+        },
+        "zToA": {
+            "frequency": 196.125,
+            "width": 87.5,
+            "optical-operational-mode": "test",
+            "rx-estimated-osnr": 23.5,
+            "rx-estimated-gsnr": 23.5,
+            "max-output-power": 0.5,
+            "min-output-power": 0.5
+        }
     }
 }
index 4e277d8a5171859faefbd8018330ffe8f2fc7648..ffeb3ee6591ba361220edcfe5777739b52bea0da 100644 (file)
     "operational-state": "inService",
     "common-id": "commond-id",
     "response-failed": "",
-    "service-name": "service1"
+    "is-temp-service": true,
+    "service-name": "service1",
+    "aToZ": {
+      "frequency": "196.125",
+      "width": "87.5",
+      "optical-operational-mode": "test",
+      "rx-estimated-osnr": "23.5",
+      "rx-estimated-gsnr": "23.5",
+      "max-output-power": "0.5",
+      "min-output-power": "0.5"
+    },
+    "zToA": {
+      "frequency": "196.125",
+      "width": "87.5",
+      "optical-operational-mode": "test",
+      "rx-estimated-osnr": "23.5",
+      "rx-estimated-gsnr": "23.5",
+      "max-output-power": "0.5",
+      "min-output-power": "0.5"
+    }
   }
 }
\ No newline at end of file
index 068a5ed7972e91a49159741a9b9e5c736e334797..d7d4abe1249348126b949a19788b92e67424f3fc 100755 (executable)
@@ -1,7 +1,7 @@
 {
   "nbi-notifications:notification-tapi-service": {
     "layer-protocol-name": "ETH",
-    "notification-type": "ATTRIBUTE_VALUE_CHANGE",
+    "notification-type": "tapi-notification:NOTIFICATION_TYPE_ATTRIBUTE_VALUE_CHANGE",
     "changed-attributes": [
       {
         "value-name": "administrativeState",
@@ -21,7 +21,7 @@
       }
     ],
     "uuid": "6ae49721-7f96-4924-b23b-31e5bee4946b",
-    "target-object-type": "CONNECTIVITY_SERVICE",
+    "target-object-type": "tapi-connectivity:CONNECTIVITY_OBJECT_TYPE_CONNECTIVITY_SERVICE",
     "event-time-stamp": "2022-04-06T09:06:01+00:00",
     "target-object-identifier": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079"
   }
index 068a5ed7972e91a49159741a9b9e5c736e334797..d7d4abe1249348126b949a19788b92e67424f3fc 100644 (file)
@@ -1,7 +1,7 @@
 {
   "nbi-notifications:notification-tapi-service": {
     "layer-protocol-name": "ETH",
-    "notification-type": "ATTRIBUTE_VALUE_CHANGE",
+    "notification-type": "tapi-notification:NOTIFICATION_TYPE_ATTRIBUTE_VALUE_CHANGE",
     "changed-attributes": [
       {
         "value-name": "administrativeState",
@@ -21,7 +21,7 @@
       }
     ],
     "uuid": "6ae49721-7f96-4924-b23b-31e5bee4946b",
-    "target-object-type": "CONNECTIVITY_SERVICE",
+    "target-object-type": "tapi-connectivity:CONNECTIVITY_OBJECT_TYPE_CONNECTIVITY_SERVICE",
     "event-time-stamp": "2022-04-06T09:06:01+00:00",
     "target-object-identifier": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079"
   }
index 207f8283394a08ba3562b3485b2b9e38f01b0954..5ea16edda309e586bc662ee4dbfa1531c90ba192 100644 (file)
@@ -13,17 +13,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>bundle-parent</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-networkmodel</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -38,21 +38,21 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <dependency>
         <groupId>org.opendaylight.yangtools</groupId>
         <artifactId>yangtools-artifacts</artifactId>
-        <version>10.0.4</version>
+        <version>13.0.2</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>mdsal-artifacts</artifactId>
-        <version>11.0.7</version>
+        <version>13.0.1</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.4</version>
+        <version>7.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
@@ -74,7 +74,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
@@ -90,11 +90,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
@@ -156,7 +156,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.netconf</groupId>
-      <artifactId>sal-netconf-connector</artifactId>
+      <artifactId>netconf-client-mdsal</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
@@ -167,14 +172,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>org.osgi.service.component.annotations</artifactId>
     </dependency>
 
-    <!-- Sodium bump: javax.annotation.Nullable and friends -->
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <version>3.0.2</version>
-      <optional>true</optional>
-    </dependency>
-
     <!-- Testing Dependencies -->
     <dependency>
       <groupId>${project.groupId}</groupId>
index fed4a093299b94a12ee03d4c77c7609daf0c37bf..367388f8d7ea5515324901041b24ff5a61b0ba81 100644 (file)
@@ -10,20 +10,18 @@ package org.opendaylight.transportpce.networkmodel;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
-import javax.annotation.Nonnull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.MountPoint;
 import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.Timeouts;
@@ -31,16 +29,16 @@ import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.networkmodel.dto.NodeRegistration;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscription;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionOutput;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.NotificationsService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.Netconf;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.Streams;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.available.capabilities.AvailableCapability;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.ConnectionOper.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.connection.oper.available.capabilities.AvailableCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev231121.NetconfNode;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
@@ -69,16 +67,17 @@ public class NetConfTopologyListener implements DataTreeChangeListener<Node> {
         this.portMapping = portMapping;
     }
 
-    public void onDataTreeChanged(@Nonnull Collection<DataTreeModification<Node>> changes) {
+    @Override
+    public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
         LOG.info("onDataTreeChanged - {}", this.getClass().getSimpleName());
         for (DataTreeModification<Node> change : changes) {
             DataObjectModification<Node> rootNode = change.getRootNode();
-            if (rootNode.getDataBefore() == null) {
+            if (rootNode.dataBefore() == null) {
                 continue;
             }
-            String nodeId = rootNode.getDataBefore().key().getNodeId().getValue();
-            NetconfNode netconfNodeBefore = rootNode.getDataBefore().augmentation(NetconfNode.class);
-            switch (rootNode.getModificationType()) {
+            String nodeId = rootNode.dataBefore().key().getNodeId().getValue();
+            NetconfNode netconfNodeBefore = rootNode.dataBefore().augmentation(NetconfNode.class);
+            switch (rootNode.modificationType()) {
                 case DELETE:
                     if (this.networkModelService.deleteOpenRoadmnode(nodeId)) {
                         onDeviceDisConnected(nodeId);
@@ -86,7 +85,7 @@ public class NetConfTopologyListener implements DataTreeChangeListener<Node> {
                     }
                     break;
                 case WRITE:
-                    NetconfNode netconfNodeAfter = rootNode.getDataAfter().augmentation(NetconfNode.class);
+                    NetconfNode netconfNodeAfter = rootNode.dataAfter().augmentation(NetconfNode.class);
                     if (ConnectionStatus.Connecting.equals(netconfNodeBefore.getConnectionStatus())
                             && ConnectionStatus.Connected.equals(netconfNodeAfter.getConnectionStatus())) {
                         LOG.info("Connecting Node: {}", nodeId);
@@ -110,7 +109,7 @@ public class NetConfTopologyListener implements DataTreeChangeListener<Node> {
                     }
                     break;
                 default:
-                    LOG.debug("Unknown modification type {}", rootNode.getModificationType().name());
+                    LOG.debug("Unknown modification type {}", rootNode.modificationType().name());
                     break;
             }
         }
@@ -144,11 +143,11 @@ public class NetConfTopologyListener implements DataTreeChangeListener<Node> {
     }
 
     private boolean subscribeStream(MountPoint mountPoint, String nodeId) {
-        final Optional<RpcConsumerRegistry> service = mountPoint.getService(RpcConsumerRegistry.class);
+        final Optional<RpcService> service = mountPoint.getService(RpcService.class);
         if (service.isEmpty()) {
             return false;
         }
-        final NotificationsService rpcService = service.orElseThrow().getRpcService(NotificationsService.class);
+        final CreateSubscription rpcService = service.orElseThrow().getRpc(CreateSubscription.class);
         if (rpcService == null) {
             LOG.error(RPC_SERVICE_FAILED, nodeId);
             return false;
@@ -156,8 +155,7 @@ public class NetConfTopologyListener implements DataTreeChangeListener<Node> {
         // Set the default stream as OPENROADM
         for (String streamName : getSupportedStream(nodeId)) {
             LOG.info("Triggering notification stream {} for node {}", streamName, nodeId);
-            ListenableFuture<RpcResult<CreateSubscriptionOutput>> subscription =
-                rpcService.createSubscription(
+            ListenableFuture<RpcResult<CreateSubscriptionOutput>> subscription = rpcService.invoke(
                     new CreateSubscriptionInputBuilder().setStream(new StreamNameType(streamName)).build());
             if (checkSupportedStream(streamName, subscription)) {
                 return true;
index a1c359452bed1a0c0172a55a1ba5dd54a0e0e94b..7a95388351da7c61c5409c619d0a9e9a58199be3 100644 (file)
@@ -9,11 +9,9 @@ package org.opendaylight.transportpce.networkmodel;
 
 import java.util.ArrayList;
 import java.util.List;
-import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.InstanceIdentifiers;
 import org.opendaylight.transportpce.common.NetworkUtils;
@@ -25,12 +23,9 @@ import org.opendaylight.transportpce.networkmodel.listeners.ServiceHandlerListen
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
 import org.opendaylight.transportpce.networkmodel.util.TpceNetwork;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.TransportpceServicehandlerListener;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
@@ -45,18 +40,15 @@ public class NetworkModelProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetworkModelProvider.class);
     private static final InstanceIdentifier<Mapping> MAPPING_II = InstanceIdentifier.create(Network.class)
-        .child(org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network
+        .child(org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network
                 .Nodes.class)
         .child(Mapping.class);
 
     private final DataBroker dataBroker;
-    private final RpcProviderService rpcProviderService;
-    private final TransportpceNetworkutilsService networkutilsService;
     private final NetConfTopologyListener topologyListener;
     private List<Registration> listeners;
-    private @NonNull Registration networkutilsServiceRpcRegistration;
     private TpceNetwork tpceNetwork;
-    private ListenerRegistration<TransportpceServicehandlerListener> serviceHandlerListenerRegistration;
+    private Registration serviceHandlerListenerRegistration;
     private NotificationService notificationService;
     private FrequenciesService frequenciesService;
     private PortMappingListener portMappingListener;
@@ -64,18 +56,15 @@ public class NetworkModelProvider {
     @Activate
     public NetworkModelProvider(@Reference NetworkTransactionService networkTransactionService,
             @Reference final DataBroker dataBroker,
-            @Reference final RpcProviderService rpcProviderService,
             @Reference final NetworkModelService networkModelService,
             @Reference DeviceTransactionManager deviceTransactionManager,
             @Reference PortMapping portMapping,
             @Reference NotificationService notificationService,
             @Reference FrequenciesService frequenciesService) {
         this.dataBroker = dataBroker;
-        this.rpcProviderService = rpcProviderService;
         this.notificationService = notificationService;
         this.frequenciesService = frequenciesService;
         this.listeners = new ArrayList<>();
-        this.networkutilsService = new NetworkUtilsImpl(dataBroker);
         this.topologyListener = new NetConfTopologyListener(networkModelService, dataBroker, deviceTransactionManager,
             portMapping);
         this.tpceNetwork = new TpceNetwork(networkTransactionService);
@@ -92,15 +81,14 @@ public class NetworkModelProvider {
         tpceNetwork.createLayer(NetworkUtils.UNDERLAY_NETWORK_ID);
         tpceNetwork.createLayer(NetworkUtils.OVERLAY_NETWORK_ID);
         tpceNetwork.createLayer(NetworkUtils.OTN_NETWORK_ID);
-        listeners.add(dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)), topologyListener));
-        listeners.add(dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, MAPPING_II), portMappingListener));
-        networkutilsServiceRpcRegistration = rpcProviderService
-            .registerRpcImplementation(TransportpceNetworkutilsService.class, networkutilsService);
-        TransportpceServicehandlerListener serviceHandlerListner = new ServiceHandlerListener(frequenciesService);
-        serviceHandlerListenerRegistration = notificationService.registerNotificationListener(serviceHandlerListner);
+        listeners.add(dataBroker.registerTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
+                    InstanceIdentifiers.NETCONF_TOPOLOGY_II.child(Node.class)),
+                topologyListener));
+        listeners.add(dataBroker.registerTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, MAPPING_II), portMappingListener));
+        serviceHandlerListenerRegistration = notificationService.registerCompositeListener(
+            new ServiceHandlerListener(frequenciesService).getCompositeListener());
     }
 
         /**
@@ -111,9 +99,6 @@ public class NetworkModelProvider {
         LOG.info("NetworkModelProvider Closed");
         listeners.forEach(lis -> lis.close());
         listeners.clear();
-        if (networkutilsServiceRpcRegistration != null) {
-            networkutilsServiceRpcRegistration.close();
-        }
         serviceHandlerListenerRegistration.close();
     }
 }
index b954aa37e3162d7b661a8d098016b8a626e5ea4c..9b6287c62ab0634e65d0eb0c4fa8e10d35652317 100644 (file)
@@ -12,22 +12,26 @@ import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLink;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLinkOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinks;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinksOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodes;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinks;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinksOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 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.networks.Network;
@@ -36,27 +40,48 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
+@Component
+public class NetworkUtilsImpl {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetworkUtilsImpl.class);
     private final DataBroker dataBroker;
+    private final Registration rpcReg;
 
-    public NetworkUtilsImpl(DataBroker dataBroker) {
+    @Activate
+    public NetworkUtilsImpl(@Reference DataBroker dataBroker, @Reference RpcProviderService rpcProvider) {
         this.dataBroker = dataBroker;
+        rpcReg = rpcProvider.registerRpcImplementations(
+                (DeleteLink) this::deleteLink,
+                (InitRoadmNodes) this::initRoadmNodes,
+                (InitXpdrRdmLinks) this::initXpdrRdmLinks,
+                (InitRdmXpdrLinks) this::initRdmXpdrLinks
+                );
+        LOG.info("NetworkUtilsImpl instanciated");
     }
 
-    @Override
-    public ListenableFuture<RpcResult<DeleteLinkOutput>> deleteLink(DeleteLinkInput input) {
+
+    @Deactivate
+    public void close() {
+        rpcReg.close();
+        LOG.info("{} closed", getClass().getSimpleName());
+    }
+
+    private ListenableFuture<RpcResult<DeleteLinkOutput>> deleteLink(DeleteLinkInput input) {
 
         LinkId linkId = new LinkId(input.getLinkId());
         // Building link instance identifier
-        InstanceIdentifier.InstanceIdentifierBuilder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
+        InstanceIdentifier.Builder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
             .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
             .augmentation(Network1.class).child(Link.class, new LinkKey(linkId));
 
@@ -93,8 +118,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
         }
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitRoadmNodesOutput>> initRoadmNodes(InitRoadmNodesInput input) {
+    private ListenableFuture<RpcResult<InitRoadmNodesOutput>> initRoadmNodes(InitRoadmNodesInput input) {
         boolean createRdmLinks = OrdLink.createRdm2RdmLinks(input, this.dataBroker);
         if (createRdmLinks) {
             return RpcResultBuilder
@@ -107,8 +131,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
         }
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitXpdrRdmLinksOutput>> initXpdrRdmLinks(InitXpdrRdmLinksInput input) {
+    private ListenableFuture<RpcResult<InitXpdrRdmLinksOutput>> initXpdrRdmLinks(InitXpdrRdmLinksInput input) {
         // Assigns user provided input in init-network-view RPC to nodeId
         LOG.info("Xpdr to Roadm links rpc called");
         boolean createXpdrRdmLinks = Rdm2XpdrLink.createXpdrRdmLinks(input.getLinksInput(), this.dataBroker);
@@ -124,8 +147,7 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService {
         }
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitRdmXpdrLinksOutput>> initRdmXpdrLinks(InitRdmXpdrLinksInput input) {
+    private ListenableFuture<RpcResult<InitRdmXpdrLinksOutput>> initRdmXpdrLinks(InitRdmXpdrLinksInput input) {
         LOG.info("Roadm to Xpdr links rpc called");
         boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), this.dataBroker);
         if (createRdmXpdrLinks) {
index 5d662e583e03b2ab37d174cfdc68b39e0c302b36..c3fb618d14bdc2862b5a2d296ac3eeba419ef41a 100644 (file)
@@ -20,11 +20,11 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil;
 import org.opendaylight.transportpce.networkmodel.util.TopologyUtils;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
+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.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
 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;
@@ -82,7 +82,7 @@ final class OrdLink {
         LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, destNode, destTp);
 
         // Building link instance identifier
-        InstanceIdentifier.InstanceIdentifierBuilder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
+        InstanceIdentifier.Builder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
             .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
             .augmentation(Network1.class).child(Link.class, new LinkKey(linkId));
 
index 459f35617a4598922cc02d21f6775a0e69213487..9cd3d447fc9784e5a32b60ee1e5992d6eaa0f946 100644 (file)
@@ -25,11 +25,11 @@ import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.util.TopologyUtils;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodesInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegree;
+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.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols;
index 6df86a2f5ce988fda0464047afa6783aa4e33791..227eefe2079ee2ee147c44c40f819522c29673d7 100644 (file)
@@ -22,13 +22,13 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil;
 import org.opendaylight.transportpce.networkmodel.util.TopologyUtils;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.links.input.grouping.LinksInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
 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;
@@ -72,7 +72,7 @@ final class Rdm2XpdrLink {
             return false;
         }
         Network network = networkBldr.build();
-        InstanceIdentifier.InstanceIdentifierBuilder<Network> nwIID = InstanceIdentifier.builder(Networks.class)
+        InstanceIdentifier.Builder<Network> nwIID = InstanceIdentifier.builder(Networks.class)
             .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)));
         WriteTransaction wrtx = dataBroker.newWriteOnlyTransaction();
         wrtx.merge(LogicalDatastoreType.CONFIGURATION, nwIID.build(), network);
@@ -105,7 +105,7 @@ final class Rdm2XpdrLink {
             return false;
         }
         Network network = networkBldr.build();
-        InstanceIdentifier.InstanceIdentifierBuilder<Network> nwIID =
+        InstanceIdentifier.Builder<Network> nwIID =
             InstanceIdentifier.builder(Networks.class).child(Network.class,
                 new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)));
         WriteTransaction wrtx = dataBroker.newWriteOnlyTransaction();
@@ -158,9 +158,9 @@ final class Rdm2XpdrLink {
                 .setOppositeLink(LinkIdUtil.getOppositeLinkId(srcNode, srcTp, destNode, destTp));
         // If both TPs of the Xpdr2Rdm link are inService --> link inService. Otherwise outOfService
         if (State.InService.equals(xpdrTp.augmentation(org.opendaylight.yang.gen.v1.http
-                    .org.openroadm.common.network.rev211210.TerminationPoint1.class).getOperationalState())
+                    .org.openroadm.common.network.rev230526.TerminationPoint1.class).getOperationalState())
                 && State.InService.equals(rdmTp.augmentation(org.opendaylight.yang.gen.v1.http
-                    .org.openroadm.common.network.rev211210.TerminationPoint1.class).getOperationalState())) {
+                    .org.openroadm.common.network.rev230526.TerminationPoint1.class).getOperationalState())) {
             lnk2bldr.setOperationalState(State.InService).setAdministrativeState(AdminStates.InService);
         } else {
             lnk2bldr.setOperationalState(State.OutOfService).setAdministrativeState(AdminStates.OutOfService);
index eb2a59330bf08ad262ac36e1f811a6aed8f30862..61fd4b7f48c3e9a96494e402ae5c6199ad94b925 100644 (file)
@@ -25,10 +25,7 @@ import org.opendaylight.transportpce.networkmodel.listeners.DeviceListener710;
 import org.opendaylight.transportpce.networkmodel.listeners.TcaListener;
 import org.opendaylight.transportpce.networkmodel.listeners.TcaListener221;
 import org.opendaylight.transportpce.networkmodel.listeners.TcaListener710;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.OrgOpenroadmAlarmListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.OrgOpenroadmDeOperationsListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,7 +36,7 @@ public class NodeRegistration {
     private final NotificationService notificationService;
     private final DataBroker dataBroker;
     private final PortMapping portMapping;
-    private final List<ListenerRegistration<?>> listeners;
+    private final List<Registration> listeners;
 
     public NodeRegistration(String nodeId, String nodeVersion, NotificationService notificationService,
             DataBroker dataBroker, PortMapping portMapping) {
@@ -48,7 +45,7 @@ public class NodeRegistration {
         this.notificationService = notificationService;
         this.dataBroker = dataBroker;
         this.portMapping = portMapping;
-        listeners = new ArrayList<ListenerRegistration<?>>();
+        listeners = new ArrayList<Registration>();
     }
 
     public void registerListeners() {
@@ -70,62 +67,62 @@ public class NodeRegistration {
 
     public void unregisterListeners() {
         LOG.info("Unregistering notification listeners for node: {}", this.nodeId);
-        for (ListenerRegistration<?> listenerRegistration : listeners) {
+        for (Registration listenerRegistration : listeners) {
             listenerRegistration.close();
         }
     }
 
     private void registerListeners121() {
-        OrgOpenroadmAlarmListener alarmListener = new AlarmNotificationListener(this.dataBroker);
+        AlarmNotificationListener alarmListener = new AlarmNotificationListener(this.dataBroker);
         LOG.info("Registering notification listener on OrgOpenroadmAlarmListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(alarmListener));
+        listeners.add(notificationService.registerCompositeListener(alarmListener.getCompositeListener()));
 
-        OrgOpenroadmDeOperationsListener deOperationsListener = new DeOperationsListener();
+        DeOperationsListener deOperationsListener = new DeOperationsListener();
         LOG.info("Registering notification listener on OrgOpenroadmDeOperationsListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(deOperationsListener));
+        listeners.add(notificationService.registerCompositeListener(deOperationsListener.getCompositeListener()));
 
-        OrgOpenroadmDeviceListener deviceListener = new DeviceListener121(nodeId, this.portMapping);
+        DeviceListener121 deviceListener = new DeviceListener121(nodeId, this.portMapping);
         LOG.info("Registering notification listener on OrgOpenroadmDeviceListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(deviceListener));
+        listeners.add(notificationService.registerCompositeListener(deviceListener.getCompositeListener()));
 
         TcaListener tcaListener = new TcaListener();
         LOG.info("Registering notification listener on OrgOpenroadmTcaListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(tcaListener));
+        listeners.add(notificationService.registerCompositeListener(tcaListener.getCompositeListener()));
     }
 
     private void registerListeners221() {
         AlarmNotificationListener221 alarmListener = new AlarmNotificationListener221(dataBroker);
         LOG.info("Registering notification listener on OrgOpenroadmAlarmListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(alarmListener));
+        listeners.add(notificationService.registerCompositeListener(alarmListener.getCompositeListener()));
 
         DeOperationsListener221 deOperationsListener = new DeOperationsListener221();
         LOG.info("Registering notification listener on OrgOpenroadmDeOperationsListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(deOperationsListener));
+        listeners.add(notificationService.registerCompositeListener(deOperationsListener.getCompositeListener()));
 
         DeviceListener221 deviceListener = new DeviceListener221(nodeId, this.portMapping);
         LOG.info("Registering notification listener on OrgOpenroadmDeviceListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(deviceListener));
+        listeners.add(notificationService.registerCompositeListener(deviceListener.getCompositeListener()));
 
         TcaListener221 tcaListener = new TcaListener221();
         LOG.info("Registering notification listener on OrgOpenroadmTcaListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(tcaListener));
+        listeners.add(notificationService.registerCompositeListener(tcaListener.getCompositeListener()));
     }
 
     private void registerListeners710() {
         AlarmNotificationListener710 alarmListener = new AlarmNotificationListener710(dataBroker);
         LOG.info("Registering notification listener on OrgOpenroadmAlarmListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(alarmListener));
+        listeners.add(notificationService.registerCompositeListener(alarmListener.getCompositeListener()));
 
         DeOperationsListener710 deOperationsListener = new DeOperationsListener710();
         LOG.info("Registering notification listener on OrgOpenroadmDeOperationsListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(deOperationsListener));
+        listeners.add(notificationService.registerCompositeListener(deOperationsListener.getCompositeListener()));
 
         DeviceListener710 deviceListener = new DeviceListener710(nodeId, this.portMapping);
         LOG.info("Registering notification listener on OrgOpenroadmDeviceListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(deviceListener));
+        listeners.add(notificationService.registerCompositeListener(deviceListener.getCompositeListener()));
 
         TcaListener710 tcaListener = new TcaListener710();
         LOG.info("Registering notification listener on OrgOpenroadmTcaListener for node: {}", nodeId);
-        listeners.add(notificationService.registerNotificationListener(tcaListener));
+        listeners.add(notificationService.registerCompositeListener(tcaListener.getCompositeListener()));
     }
 }
index f0329167d3653c9152ad7f0b3be06c35d2d4be34..3b6d868ce7dd627c4d81b7479f5705ab862b5590 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.transportpce.networkmodel.dto;
 
 import java.util.List;
 import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
 
 public class OtnTopoNode {
index 434485beb436ec9df1a3fa57f6988f001b0c21a5..f0f57d62d0b3afb35b909024e1121bc9849ac0ee 100644 (file)
@@ -10,8 +10,10 @@ package org.opendaylight.transportpce.networkmodel.listeners;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.ServiceNodelist;
@@ -19,7 +21,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsupp
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.nodelist.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.nodelist.NodesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.AlarmNotification;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.OrgOpenroadmAlarmListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.alarm.ProbableCause;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.resource.ResourceType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.resource.resource.Resource;
@@ -37,7 +38,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AlarmNotificationListener implements OrgOpenroadmAlarmListener {
+public class AlarmNotificationListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(AlarmNotificationListener.class);
     private static final String PIPE = "|";
@@ -47,14 +48,17 @@ public class AlarmNotificationListener implements OrgOpenroadmAlarmListener {
         this.dataBroker = dataBroker;
     }
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(AlarmNotification.class, this::onAlarmNotification)));
+    }
 
     /**
      * Callback for alarm-notification.
      *
      * @param notification AlarmNotification object
      */
-    @Override
-    public void onAlarmNotification(AlarmNotification notification) {
+    private void onAlarmNotification(AlarmNotification notification) {
         List<Nodes> allNodeList = new ArrayList<>();
         InstanceIdentifier<ServiceNodelist> serviceNodeListIID = InstanceIdentifier.create(ServiceNodelist.class);
         try (ReadTransaction rtx = dataBroker.newReadOnlyTransaction()) {
index d9973d23a17790ab79dacbe8f03b7ef8399cce00..d7336eb559d6cbdff72f373920e29569bde88d81 100644 (file)
@@ -10,8 +10,10 @@ package org.opendaylight.transportpce.networkmodel.listeners;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.ServiceNodelist;
@@ -19,7 +21,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsupp
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.nodelist.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.nodelist.NodesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev181019.AlarmNotification;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev181019.OrgOpenroadmAlarmListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev181019.alarm.ProbableCause;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev181019.resource.ResourceType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev181019.resource.resource.Resource;
@@ -37,7 +38,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AlarmNotificationListener221 implements OrgOpenroadmAlarmListener {
+public class AlarmNotificationListener221 {
 
     private static final Logger LOG = LoggerFactory.getLogger(AlarmNotificationListener221.class);
     private static final String PIPE = "|";
@@ -47,14 +48,17 @@ public class AlarmNotificationListener221 implements OrgOpenroadmAlarmListener {
         this.dataBroker = dataBroker;
     }
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(AlarmNotification.class, this::onAlarmNotification)));
+    }
 
     /**
      * Callback for alarm-notification.
      *
      * @param notification AlarmNotification object
      */
-    @Override
-    public void onAlarmNotification(AlarmNotification notification) {
+    private void onAlarmNotification(AlarmNotification notification) {
         List<Nodes> allNodeList = new ArrayList<>();
         InstanceIdentifier<ServiceNodelist> serviceNodeListIID = InstanceIdentifier.create(ServiceNodelist.class);
         try {
index 4f825e487bcf462f433aad1636c53278ed5a0df0..e5328bd6e24436f5557913c4a8cf1ba395a98e02 100644 (file)
@@ -10,8 +10,10 @@ package org.opendaylight.transportpce.networkmodel.listeners;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.ServiceNodelist;
@@ -19,7 +21,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsupp
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.nodelist.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.nodelist.NodesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.AlarmNotification;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.OrgOpenroadmAlarmListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev200529.alarm.ProbableCause;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev200529.resource.ResourceType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev200529.resource.resource.Resource;
@@ -37,7 +38,7 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AlarmNotificationListener710 implements OrgOpenroadmAlarmListener {
+public class AlarmNotificationListener710 {
 
     private static final Logger LOG = LoggerFactory.getLogger(AlarmNotificationListener710.class);
     private static final String PIPE = "|";
@@ -47,14 +48,18 @@ public class AlarmNotificationListener710 implements OrgOpenroadmAlarmListener {
         this.dataBroker = dataBroker;
     }
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(AlarmNotification.class, this::onAlarmNotification)));
+    }
+
 
     /**
      * Callback for alarm-notification.
      *
      * @param notification AlarmNotification object
      */
-    @Override
-    public void onAlarmNotification(AlarmNotification notification) {
+    private void onAlarmNotification(AlarmNotification notification) {
         List<Nodes> allNodeList = new ArrayList<>();
         InstanceIdentifier<ServiceNodelist> serviceNodeListIID = InstanceIdentifier.create(ServiceNodelist.class);
         try {
index c861c2f8e5c80aa94d73cf4c8024c32310fcc96c..3844e3f8b3a2a26f0c16f08c8e511543289a22a2 100644 (file)
@@ -8,22 +8,27 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.OrgOpenroadmDeOperationsListener;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.RestartNotification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DeOperationsListener implements OrgOpenroadmDeOperationsListener {
+public class DeOperationsListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeOperationsListener.class);
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(RestartNotification.class, this::onRestartNotification)));
+    }
+
     /**
      * Callback for restart-notification.
      *
      * @param notification RestartNotification object
      */
-    @Override
-    public void onRestartNotification(RestartNotification notification) {
+    private void onRestartNotification(RestartNotification notification) {
         LOG.info("Notification {} received {}", RestartNotification.QNAME, notification);
     }
 
index 61961c3d55006821d8a2f3da1da82d76a0305f4d..0a8fd0f657e4e7d3401750044f3eac9fa4262856 100644 (file)
@@ -8,22 +8,27 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev181019.OrgOpenroadmDeOperationsListener;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev181019.RestartNotification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DeOperationsListener221 implements OrgOpenroadmDeOperationsListener {
+public class DeOperationsListener221 {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeOperationsListener221.class);
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(RestartNotification.class, this::onRestartNotification)));
+    }
+
     /**
      * Callback for restart-notification.
      *
      * @param notification RestartNotification object
      */
-    @Override
-    public void onRestartNotification(RestartNotification notification) {
+    private void onRestartNotification(RestartNotification notification) {
         LOG.info("Notification {} received {}", RestartNotification.QNAME, notification);
     }
 
index f6c8be94a6af2e884c456ada935e38665b92a05d..cd33475fd4bc067f9be78d384df52b35e2bcaac7 100644 (file)
@@ -8,22 +8,27 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev200529.OrgOpenroadmDeOperationsListener;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev200529.RestartNotification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DeOperationsListener710 implements OrgOpenroadmDeOperationsListener {
+public class DeOperationsListener710 {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeOperationsListener710.class);
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(RestartNotification.class, this::onRestartNotification)));
+    }
+
     /**
      * Callback for restart-notification.
      *
      * @param notification RestartNotification object
      */
-    @Override
-    public void onRestartNotification(RestartNotification notification) {
+    private void onRestartNotification(RestartNotification notification) {
         LOG.info("Notification {} received {}", RestartNotification.QNAME, notification);
     }
 
index 9ab30acbf8c711fc746e8f79ed21f3fd8f7e014d..6223854326e890d1b09167648db86ae030faa29f 100644 (file)
@@ -9,20 +9,21 @@
 package org.opendaylight.transportpce.networkmodel.listeners;
 
 import java.util.LinkedList;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.ChangeNotification;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OtdrScanResult;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.change.notification.Edit;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks;
+import org.opendaylight.yangtools.yang.binding.DataObjectStep;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DeviceListener121 implements OrgOpenroadmDeviceListener {
+public class DeviceListener121 {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeviceListener121.class);
     private final String nodeId;
@@ -34,13 +35,20 @@ public class DeviceListener121 implements OrgOpenroadmDeviceListener {
         this.portMapping = portMapping;
     }
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(ChangeNotification.class, this::onChangeNotification),
+            new CompositeListener.Component<>(OtdrScanResult.class, this::onOtdrScanResult)
+        ));
+    }
+
     /**
      * Callback for change-notification.
      *
      * @param notification ChangeNotification object
      */
-    @Override
-    public void onChangeNotification(ChangeNotification notification) {
+
+    void onChangeNotification(ChangeNotification notification) {
         if (notification.getEdit() == null) {
             LOG.warn("unable to handle {} notificatin received - list of edit is null", ChangeNotification.QNAME);
             return;
@@ -52,7 +60,7 @@ public class DeviceListener121 implements OrgOpenroadmDeviceListener {
             // 1. Detect the org-openroadm-device object modified
             switch (edit.getTarget().getTargetType().getSimpleName()) {
                 case "Ports":
-                    LinkedList<PathArgument> path = new LinkedList<>();
+                    LinkedList<DataObjectStep<?>> path = new LinkedList<>();
                     edit.getTarget().getPathArguments().forEach(p -> path.add(p));
                     InstanceIdentifier<Ports> portIID = InstanceIdentifier.unsafeOf(path);
                     String portName = InstanceIdentifier.keyOf(portIID).getPortName();
@@ -87,8 +95,7 @@ public class DeviceListener121 implements OrgOpenroadmDeviceListener {
      *
      * @param notification OtdrScanResult object
      */
-    @Override
-    public void onOtdrScanResult(OtdrScanResult notification) {
+    private void onOtdrScanResult(OtdrScanResult notification) {
         LOG.info("Notification {} received {}", OtdrScanResult.QNAME, notification);
     }
 
index 79eaa3e689cf67f4b29a546cbc5bc70b92a8bfed..d069c0196470f4460e82a33442c5c84d317d4833 100644 (file)
@@ -9,22 +9,23 @@
 package org.opendaylight.transportpce.networkmodel.listeners;
 
 import java.util.LinkedList;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.ChangeNotification;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.CreateTechInfoNotification;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OtdrScanResult;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.change.notification.Edit;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.pack.Ports;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.circuit.packs.CircuitPacks;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.Interface;
+import org.opendaylight.yangtools.yang.binding.DataObjectStep;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DeviceListener221 implements OrgOpenroadmDeviceListener {
+public class DeviceListener221 {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeviceListener221.class);
     private final String nodeId;
@@ -36,14 +37,21 @@ public class DeviceListener221 implements OrgOpenroadmDeviceListener {
         this.portMapping = portMapping;
     }
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(ChangeNotification.class, this::onChangeNotification),
+            new CompositeListener.Component<>(CreateTechInfoNotification.class, this::onCreateTechInfoNotification),
+            new CompositeListener.Component<>(OtdrScanResult.class, this::onOtdrScanResult)
+        ));
+    }
+
     /**
      * Callback for change-notification.
      *
      * @param notification
      *            ChangeNotification object
      */
-    @Override
-    public void onChangeNotification(ChangeNotification notification) {
+    void onChangeNotification(ChangeNotification notification) {
         LOG.info("notification received from device {}: {}", this.nodeId, notification.toString());
         if (notification.getEdit() == null) {
             LOG.warn("unable to handle {} notificatin received - list of edit is null", ChangeNotification.QNAME);
@@ -56,7 +64,7 @@ public class DeviceListener221 implements OrgOpenroadmDeviceListener {
             // 1. Detect the org-openroadm-device object modified
             switch (edit.getTarget().getTargetType().getSimpleName()) {
                 case "Ports":
-                    LinkedList<PathArgument> path = new LinkedList<>();
+                    LinkedList<DataObjectStep<?>> path = new LinkedList<>();
                     edit.getTarget().getPathArguments().forEach(p -> path.add(p));
                     InstanceIdentifier<Ports> portIID = InstanceIdentifier.unsafeOf(path);
                     String portName = InstanceIdentifier.keyOf(portIID).getPortName();
@@ -80,7 +88,7 @@ public class DeviceListener221 implements OrgOpenroadmDeviceListener {
                     thread.start();
                     break;
                 case "Interface":
-                    LinkedList<PathArgument> pathInter = new LinkedList<>();
+                    LinkedList<DataObjectStep<?>> pathInter = new LinkedList<>();
                     edit.getTarget().getPathArguments().forEach(p -> pathInter.add(p));
                     InstanceIdentifier<Interface> interfIID = InstanceIdentifier.unsafeOf(pathInter);
                     String interfName = InstanceIdentifier.keyOf(interfIID).getName();
@@ -107,8 +115,7 @@ public class DeviceListener221 implements OrgOpenroadmDeviceListener {
         }
     }
 
-    @Override
-    public void onCreateTechInfoNotification(CreateTechInfoNotification notification) {
+    private void onCreateTechInfoNotification(CreateTechInfoNotification notification) {
     }
 
     /**
@@ -117,8 +124,7 @@ public class DeviceListener221 implements OrgOpenroadmDeviceListener {
      * @param notification
      *            OtdrScanResult object
      */
-    @Override
-    public void onOtdrScanResult(OtdrScanResult notification) {
+    private void onOtdrScanResult(OtdrScanResult notification) {
         LOG.info("Notification {} received {}", OtdrScanResult.QNAME, notification);
     }
 
index b774337f1c619994daa455c0bd7d57f75814a0a8..97183a45fea21f757ac1da2a6afd7487f91b2941 100644 (file)
@@ -13,11 +13,12 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.ChangeNotification;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.CreateTechInfoNotification;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.OrgOpenroadmDeviceListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.OtdrScanResult;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.change.notification.Edit;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.pack.Ports;
@@ -25,13 +26,13 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.circuit.
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.OduSwitchingPools;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.NonBlockingList;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.odu.switching.pools.non.blocking.list.PortList;
+import org.opendaylight.yangtools.yang.binding.DataObjectStep;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class DeviceListener710 implements OrgOpenroadmDeviceListener {
+public class DeviceListener710 {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeviceListener710.class);
     private final String nodeId;
@@ -43,14 +44,21 @@ public class DeviceListener710 implements OrgOpenroadmDeviceListener {
         this.portMapping = portMapping;
     }
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(ChangeNotification.class, this::onChangeNotification),
+            new CompositeListener.Component<>(CreateTechInfoNotification.class, this::onCreateTechInfoNotification),
+            new CompositeListener.Component<>(OtdrScanResult.class, this::onOtdrScanResult)
+        ));
+    }
+
     /**
      * Callback for change-notification.
      *
      * @param notification
      *            ChangeNotification object
      */
-    @Override
-    public void onChangeNotification(ChangeNotification notification) {
+    void onChangeNotification(ChangeNotification notification) {
         LOG.debug("device71 notification received = {}", notification);
         if (notification.getEdit() == null) {
             LOG.warn("unable to handle {} notificatin received - list of edit is null", ChangeNotification.QNAME);
@@ -63,7 +71,7 @@ public class DeviceListener710 implements OrgOpenroadmDeviceListener {
                 continue;
             }
             // 1. Detect the org-openroadm-device object modified
-            LinkedList<PathArgument> path = new LinkedList<>();
+            LinkedList<DataObjectStep<?>> path = new LinkedList<>();
             switch (edit.getTarget().getTargetType().getSimpleName()) {
                 case "Ports":
                     edit.getTarget().getPathArguments().forEach(p -> path.add(p));
@@ -123,8 +131,7 @@ public class DeviceListener710 implements OrgOpenroadmDeviceListener {
         }
     }
 
-    @Override
-    public void onCreateTechInfoNotification(CreateTechInfoNotification notification) {
+    private void onCreateTechInfoNotification(CreateTechInfoNotification notification) {
     }
 
     /**
@@ -133,8 +140,7 @@ public class DeviceListener710 implements OrgOpenroadmDeviceListener {
      * @param notification
      *            OtdrScanResult object
      */
-    @Override
-    public void onOtdrScanResult(OtdrScanResult notification) {
+    private void onOtdrScanResult(OtdrScanResult notification) {
         LOG.info("Notification {} received {}", OtdrScanResult.QNAME, notification);
     }
 
index 726389ebbca0a27f90ab0aac3188f3937f7c16c5..e3b08e560980d1970cf82aac68f3f375a2352ae6 100644 (file)
@@ -8,13 +8,14 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.api.NotificationService.Listener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.LldpNbrInfoChange;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.OrgOpenroadmLldpListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class LldpListener implements OrgOpenroadmLldpListener {
+public class LldpListener implements Listener<LldpNbrInfoChange> {
 
     private static final Logger LOG = LoggerFactory.getLogger(LldpListener.class);
     private final NodeId nodeId;
@@ -28,7 +29,7 @@ public class LldpListener implements OrgOpenroadmLldpListener {
      * @param notification LldpNbrInfoChange object
      */
     @Override
-    public void onLldpNbrInfoChange(LldpNbrInfoChange notification) {
-        LOG.info("Notification {} received {}", LldpNbrInfoChange.QNAME, notification);
+    public void onNotification(@NonNull LldpNbrInfoChange notification) {
+        LOG.info("Notification {} received {} on node {}", LldpNbrInfoChange.QNAME, notification, nodeId);
     }
 }
index 775d0ed76dbdf41a4744f9c176f92032e700c6d5..30a7f7093ff1038e4784df10b6c03f3fc344ed85 100644 (file)
@@ -8,15 +8,16 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.api.NotificationService.Listener;
 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.LldpNbrInfoChange;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.OrgOpenroadmLldpListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.ResourceNotificationType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class LldpListener221 implements OrgOpenroadmLldpListener {
+public class LldpListener221 implements Listener<LldpNbrInfoChange> {
 
     private static final Logger LOG = LoggerFactory.getLogger(LldpListener221.class);
     private final R2RLinkDiscovery linkDiscovery;
@@ -32,7 +33,7 @@ public class LldpListener221 implements OrgOpenroadmLldpListener {
      * @param notification LldpNbrInfoChange object
      */
     @Override
-    public void onLldpNbrInfoChange(LldpNbrInfoChange notification) {
+    public void onNotification(@NonNull LldpNbrInfoChange notification) {
         LOG.info("Notification {} received {}", LldpNbrInfoChange.QNAME, notification);
         if (notification.getNotificationType().equals(ResourceNotificationType.ResourceCreation)) {
             linkDiscovery.createR2RLink(nodeId,notification.getResource(),
index f619253349d25a12060e7f43237fb65255ea3f42..c140a53bdc20cfe615e50cf76c382fed246128b4 100644 (file)
@@ -8,15 +8,16 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.api.NotificationService.Listener;
 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev200529.LldpNbrInfoChange;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev200529.OrgOpenroadmLldpListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev191129.ResourceNotificationType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class LldpListener710 implements OrgOpenroadmLldpListener {
+public class LldpListener710 implements Listener<LldpNbrInfoChange> {
 
     private static final Logger LOG = LoggerFactory.getLogger(LldpListener710.class);
     private final R2RLinkDiscovery linkDiscovery;
@@ -32,7 +33,7 @@ public class LldpListener710 implements OrgOpenroadmLldpListener {
      * @param notification LldpNbrInfoChange object
      */
     @Override
-    public void onLldpNbrInfoChange(LldpNbrInfoChange notification) {
+    public void onNotification(@NonNull LldpNbrInfoChange notification) {
         LOG.info("Notification {} received {}", LldpNbrInfoChange.QNAME, notification);
         if (notification.getNotificationType().equals(ResourceNotificationType.ResourceCreation)) {
             linkDiscovery.createR2RLink(nodeId,notification.getResource(),
index 18f35d8307f4a332bf64d29cf8a09f8898152177..5122c39c24e3e624761b33f9806976e7745ac7b5 100644 (file)
@@ -7,17 +7,17 @@
  */
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import java.util.Collection;
 import java.util.LinkedList;
+import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.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.yangtools.yang.binding.DataObjectStep;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument;
 
 public class PortMappingListener implements DataTreeChangeListener<Mapping> {
 
@@ -28,28 +28,31 @@ public class PortMappingListener implements DataTreeChangeListener<Mapping> {
     }
 
     @Override
-    public void onDataTreeChanged(@NonNull Collection<DataTreeModification<Mapping>> changes) {
+    public void onDataTreeChanged(@NonNull List<DataTreeModification<Mapping>> changes) {
         for (DataTreeModification<Mapping> change : changes) {
-            if (change.getRootNode().getDataBefore() != null && change.getRootNode().getDataAfter() != null) {
-                Mapping oldMapping = change.getRootNode().getDataBefore();
-                Mapping newMapping = change.getRootNode().getDataAfter();
-                if (oldMapping.getPortAdminState().equals(newMapping.getPortAdminState())
-                        && oldMapping.getPortOperState().equals(newMapping.getPortOperState())) {
-                    return;
-                } else {
-                    networkModelService.updateOpenRoadmTopologies(
-                            getNodeIdFromMappingDataTreeIdentifier(change.getRootPath()), newMapping);
-                }
+            Mapping oldMapping = change.getRootNode().dataBefore();
+            if (oldMapping == null) {
+                continue;
             }
+            Mapping newMapping = change.getRootNode().dataAfter();
+            if (newMapping == null) {
+                continue;
+            }
+            if (oldMapping.getPortAdminState().equals(newMapping.getPortAdminState())
+                    && oldMapping.getPortOperState().equals(newMapping.getPortOperState())) {
+                return;
+            }
+            networkModelService.updateOpenRoadmTopologies(
+                getNodeIdFromMappingDataTreeIdentifier(change.getRootPath()),
+                newMapping);
         }
     }
 
     protected String getNodeIdFromMappingDataTreeIdentifier(DataTreeIdentifier<Mapping> dataTreeIdentifier) {
-        LinkedList<PathArgument> path = new LinkedList<>((Collection<? extends PathArgument>)
-                dataTreeIdentifier.getRootIdentifier().getPathArguments());
+        LinkedList<DataObjectStep<?>> path = new LinkedList<>();
+        dataTreeIdentifier.path().getPathArguments().forEach(p -> path.add(p));
         path.removeLast();
         InstanceIdentifier<Nodes> portMappingNodeID = InstanceIdentifier.unsafeOf(path);
         return InstanceIdentifier.keyOf(portMappingNodeID).getNodeId();
-
     }
 }
index 0161c2ff53ba70cccbe3a99d36de0bec11f2ca9b..1f5c6b0f66f9aa622fa511aeac9f80cccd3f0ae9 100644 (file)
@@ -8,24 +8,30 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.TransportpceServicehandlerListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class ServiceHandlerListener implements TransportpceServicehandlerListener {
+public class ServiceHandlerListener {
     private static final Logger LOG = LoggerFactory.getLogger(ServiceHandlerListener.class);
     private final FrequenciesService service;
 
+
     public ServiceHandlerListener(FrequenciesService service) {
         LOG.info("Init service handler listener for network");
         this.service = service;
     }
 
-    @Override
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(ServiceRpcResultSh.class, this::onServiceRpcResultSh)));
+    }
+
     public void onServiceRpcResultSh(ServiceRpcResultSh notification) {
         if (notification.getStatus() != RpcStatusEx.Successful) {
             LOG.info("RpcStatusEx of notification not equals successful. Nothing to do for notification {}",
index ecfa36584faa228d07fa545506e706587f98bed5..6fc8ba60c10b87f82e74302f01f9c1baed7d7919 100644 (file)
@@ -8,21 +8,26 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev161014.OrgOpenroadmTcaListener;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev161014.TcaNotification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TcaListener implements OrgOpenroadmTcaListener {
+public class TcaListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(TcaListener.class);
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(TcaNotification.class, this::onTcaNotification)));
+    }
+
     /**
      * Callback for tca-notification.
      * @param notification TcaNotification object
      */
-    @Override
-    public void onTcaNotification(TcaNotification notification) {
+    private void onTcaNotification(TcaNotification notification) {
         LOG.info("Notification {} received {}", TcaNotification.QNAME, notification);
     }
 
index 68cec92f4669821c4fb6b7e5f926c94af872c1b3..b3429c6878becee7d8e8a0e66df76ee43dfad21f 100644 (file)
@@ -8,21 +8,26 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev181019.OrgOpenroadmTcaListener;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev181019.TcaNotification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TcaListener221 implements OrgOpenroadmTcaListener {
+public class TcaListener221 {
 
     private static final Logger LOG = LoggerFactory.getLogger(TcaListener221.class);
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(TcaNotification.class, this::onTcaNotification)));
+    }
+
     /**
      * Callback for tca-notification.
      * @param notification TcaNotification object
      */
-    @Override
-    public void onTcaNotification(TcaNotification notification) {
+    private void onTcaNotification(TcaNotification notification) {
         LOG.info("Notification {} received {}", TcaNotification.QNAME, notification);
     }
 
index 220e23b7b558dd9c4b5a1c9fdc7c821ba8c53f62..14ec27289d64a3bcea072d2458567472e4a906db 100644 (file)
@@ -8,21 +8,26 @@
 
 package org.opendaylight.transportpce.networkmodel.listeners;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev200327.OrgOpenroadmTcaListener;
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev200327.TcaNotification;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TcaListener710 implements OrgOpenroadmTcaListener {
+public class TcaListener710 {
 
     private static final Logger LOG = LoggerFactory.getLogger(TcaListener710.class);
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(TcaNotification.class, this::onTcaNotification)));
+    }
+
     /**
      * Callback for tca-notification.
      * @param notification TcaNotification object
      */
-    @Override
-    public void onTcaNotification(TcaNotification notification) {
+    private void onTcaNotification(TcaNotification notification) {
         LOG.info("Notification {} received {}", TcaNotification.QNAME, notification);
     }
 
index a48f5c38518fcb900ab498b175792d046211ce12..c3e326a3c3b265e97d6099ad6e64842ea3dca5b1 100644 (file)
@@ -7,8 +7,8 @@
  */
 package org.opendaylight.transportpce.networkmodel.service;
 
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
 
 public interface FrequenciesService {
 
index 418b20bf1947b6275b2b0fd56f933215ad1ef5f6..b8de4f0aee9e696c71318461c73f1411aae045c3 100644 (file)
@@ -30,35 +30,35 @@ import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CtpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.PpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.PpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.RxTtpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.RxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.TxTtpAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.TxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrPortAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrPortAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.port.connection.attributes.WavelengthBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CtpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.RxTtpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.RxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.TxTtpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.TxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrPortAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrPortAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMaps;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.port.connection.attributes.WavelengthBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -174,12 +174,12 @@ public class FrequenciesServiceImpl implements FrequenciesService {
      * @param nodeId String
      * @return Node1, null otherwise.
      */
-    private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1
+    private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1
             getCommonNetworkNodeFromDatastore(String nodeId) {
-        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1> nodeIID =
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1> nodeIID =
             OpenRoadmTopology.createCommonNetworkNodeIID(nodeId);
         try (ReadTransaction nodeReadTx = this.dataBroker.newReadOnlyTransaction()) {
-            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1> optionalNode =
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1> optionalNode =
                 nodeReadTx
                     .read(LogicalDatastoreType.CONFIGURATION, nodeIID)
                     .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
@@ -246,12 +246,12 @@ public class FrequenciesServiceImpl implements FrequenciesService {
      * @param tpId String
      * @return common network termination point, null otherwise
      */
-    private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1
+    private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1
             getCommonNetworkTerminationPointFromDatastore(String nodeId, String tpId) {
-        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1>
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1>
             tpIID = OpenRoadmTopology.createCommonNetworkTerminationPointIIDBuilder(nodeId, tpId).build();
         try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) {
-            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1>
+            Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1>
                 optionalTerminationPoint = readTx
                     .read(LogicalDatastoreType.CONFIGURATION, tpIID)
                     .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
@@ -291,7 +291,7 @@ public class FrequenciesServiceImpl implements FrequenciesService {
             strTpIdsList, rate, modulationFormat, atozMinFrequency, atozMaxFrequency, used);
         WriteTransaction updateFrequenciesTransaction = this.dataBroker.newWriteOnlyTransaction();
         for (NodeIdPair idPair : tpIds) {
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1
                     commonNetworkTerminationPoint =
                 getCommonNetworkTerminationPointFromDatastore(idPair.getNodeID(), idPair.getTpID());
             if (commonNetworkTerminationPoint == null) {
@@ -382,7 +382,7 @@ public class FrequenciesServiceImpl implements FrequenciesService {
         WriteTransaction updateFrequenciesTransaction = this.dataBroker.newWriteOnlyTransaction();
         for (String nodeId : nodeIds) {
             Node1 networkNode = getNetworkNodeFromDatastore(nodeId);
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 commonNetworkNode =
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1 commonNetworkNode =
                     getCommonNetworkNodeFromDatastore(nodeId);
             if (networkNode == null || commonNetworkNode == null) {
                 LOG.warn(
index 9f527e621505f7f75e7a95060c7df6e9014c940a..0e67633900f3198648fc162400aa9d8bc27011d3 100644 (file)
@@ -9,9 +9,9 @@ package org.opendaylight.transportpce.networkmodel.service;
 
 import java.util.List;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.ConnectionOper.ConnectionStatus;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
 /**
index 30a4f539a9d266c8068989595e9a596b86ed69e9..ef07a03f20fb5cee999ddf9ba407cf938f8948cc 100644 (file)
@@ -41,12 +41,12 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmo
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesKey;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+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.NodeInfo;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.link.tp.LinkTp;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.link.tp.LinkTpBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
@@ -65,7 +65,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 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.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.termination.point.SupportingTerminationPoint;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.ConnectionOper.ConnectionStatus;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.osgi.service.component.annotations.Activate;
@@ -343,7 +343,7 @@ public class NetworkModelServiceImpl implements NetworkModelService {
                         .setNodeId(abstractNodeid)
                         .setTpId(tp.getTpId().getValue())
                         .setState(tp.augmentation(
-                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1
+                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1
                                 .class).getOperationalState())
                         .build();
                     if (!this.topologyChanges.containsKey(tc.key())) {
@@ -384,7 +384,7 @@ public class NetworkModelServiceImpl implements NetworkModelService {
                         .setNodeId(abstractNodeid)
                         .setTpId(tp.getTpId().getValue())
                         .setState(tp.augmentation(
-                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1
+                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1
                                 .class).getOperationalState())
                         .build();
                     if (!this.topologyChanges.containsKey(tc.key())) {
index 017c62408b92a0aba0b7975a619bd5d7a3fcfb8b..09751e04b78f5d60166ecfa635b20426e341485b 100644 (file)
@@ -8,7 +8,7 @@
 
 package org.opendaylight.transportpce.networkmodel.util;
 
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.Node1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.Node1Builder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
index c365724d59a7249a64675278df1231ae33aa27b3..d9543f4447c7d02acf9808a97a69bbcc13b633be 100644 (file)
@@ -10,9 +10,9 @@ package org.opendaylight.transportpce.networkmodel.util;
 
 import com.google.common.collect.ImmutableMap;
 import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev211210.Node1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev230526.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
@@ -44,8 +44,8 @@ public final class OpenRoadmNetwork {
     public static Node createNode(String nodeId, NodeInfo nodeInfo) {
 
         Node1Builder node1Bldr = new Node1Builder();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder node2Bldr =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder();
+        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder node2Bldr =
+            new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder();
 
         /*
          * Recognize the node type: 1:ROADM, 2:XPONDER
index c47acc9d9d5afc664b7fd9f5d69cd72d6517cd67..7de24b823fcae0c7f212af748a9d2df9d383a1f2 100644 (file)
@@ -21,23 +21,23 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.networkmodel.dto.OtnTopoNode;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.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.state.types.rev191129.State;
 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.rev201211.xpdr.odu.switching.pools.OduSwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPoolsKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey;
+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.OduSwitchingPoolsKey;
+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.OpenroadmLinkType;
+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.otn.common.types.rev210924.ODTU4TsAllocated;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODTUCnTs;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU0;
@@ -46,20 +46,19 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev21092
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU4;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OdtuTypeIdentity;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OduRateIdentity;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.SwitchingPoolsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.TpBandwidthSharingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.XpdrAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.SwitchingPoolsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.TpBandwidthSharingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.XpdrAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev191129.SwitchingPoolTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPool;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPoolBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.otn.tp.attributes.OdtuTpnPool;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.otn.tp.attributes.OdtuTpnPoolBuilder;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
@@ -352,9 +351,9 @@ public final class OpenRoadmOtnTopology {
             .addAugmentation(tpceLink1)
             .addAugmentation(otnLink1Bldr.build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder(
                         ietfLinkAZBldr.augmentation(
-                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class))
+                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class))
                     .setLinkType(OpenroadmLinkType.OTNLINK)
                     .setOperationalState(State.InService)
                     .setAdministrativeState(AdminStates.InService)
@@ -366,9 +365,9 @@ public final class OpenRoadmOtnTopology {
             .addAugmentation(tpceLink1)
             .addAugmentation(otnLink1Bldr.build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder(
                         ietfLinkZABldr.augmentation(
-                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class))
+                            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class))
                     .setLinkType(OpenroadmLinkType.OTNLINK)
                     .setOperationalState(State.InService)
                     .setAdministrativeState(AdminStates.InService)
@@ -563,7 +562,7 @@ public final class OpenRoadmOtnTopology {
                             .build())
                     .build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setNodeType(OpenroadmNodeType.TPDR)
                     .setOperationalState(State.InService)
                     .setAdministrativeState(AdminStates.InService)
@@ -595,7 +594,7 @@ public final class OpenRoadmOtnTopology {
                                                 .build())
                                 .build())
                 .addAugmentation(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                                 .setNodeType(OpenroadmNodeType.TPDR)
                                 .setOperationalState(State.InService)
                                 .setAdministrativeState(AdminStates.InService)
@@ -651,7 +650,7 @@ public final class OpenRoadmOtnTopology {
                             .build())
                     .build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setNodeType(OpenroadmNodeType.MUXPDR)
                     .setAdministrativeState(AdminStates.InService)
                     .setOperationalState(State.InService)
@@ -707,7 +706,7 @@ public final class OpenRoadmOtnTopology {
                             .build())
                     .build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setNodeType(OpenroadmNodeType.SWITCH)
                     .setOperationalState(State.InService)
                     .setAdministrativeState(AdminStates.InService)
@@ -750,7 +749,8 @@ public final class OpenRoadmOtnTopology {
                     mapping.getLogicalConnectionPoint(), node.getNodeId());
             } else {
                 XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder();
-                for (SupportedIfCapability supInterCapa : mapping.getSupportedInterfaceCapability()) {
+                for (org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability
+                        supInterCapa : mapping.getSupportedInterfaceCapability()) {
                     SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
                         .withKey(new SupportedInterfaceCapabilityKey(supInterCapa))
                         .setIfCapType(supInterCapa)
@@ -782,8 +782,8 @@ public final class OpenRoadmOtnTopology {
 
     private static void setclientNwTpAttr(Map<TerminationPointKey, TerminationPoint> tpMap, OtnTopoNode node, TpId tpId,
             OpenroadmTpType tpType, TerminationPoint1 otnTp1, Mapping mapping) {
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder cnTP1BLdr
-                = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder cnTP1BLdr
+                = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                     .TerminationPoint1Builder();
         switch (tpType) {
             case XPONDERNETWORK:
@@ -814,8 +814,10 @@ public final class OpenRoadmOtnTopology {
         }
     }
 
-    private static OduRateIdentity fixRate(Set<SupportedIfCapability> list) {
-        for (SupportedIfCapability supIfCap: list) {
+    private static OduRateIdentity fixRate(
+            Set<org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability> list) {
+        for (org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability
+                supIfCap: list) {
             String simpleName = supIfCap.toString().split("\\{")[0];
             if (RATE_MAP.containsKey(simpleName)) {
                 return RATE_MAP.get(simpleName);
@@ -858,7 +860,7 @@ public final class OpenRoadmOtnTopology {
     }
 
     private static TerminationPoint buildIetfTp(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder cnTP1BLdr,
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder cnTP1BLdr,
             TerminationPoint1 otnTp1, OpenroadmTpType tpType, TpId tpId,
             Map<SupportingTerminationPointKey, SupportingTerminationPoint> supportTpMap, Mapping mapping) {
 
@@ -883,5 +885,4 @@ public final class OpenRoadmOtnTopology {
                 ? nodeName
                 : new StringBuilder(nodeName).append("-").append(tpName.split("-")[0]).toString();
     }
-
 }
index ddbc318c3bc8a3fbd2915ebc4408c2a7d1b5fb1f..28bd870196caa4937ec6c70a9c8a0e77e6c473be 100644 (file)
@@ -25,21 +25,21 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
+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.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.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;
@@ -63,7 +63,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -212,7 +211,7 @@ public final class OpenRoadmTopology {
                 .withKey((new NodeKey(new NodeId(nodeIdtopo))))
                 .addAugmentation(
                     // Create openroadm-network-topo augmentation to set node type to Xponder
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                         .setNodeType(OpenroadmNodeType.XPONDER)
                         .setAdministrativeState(AdminStates.InService)
                         .setOperationalState(State.InService)
@@ -226,12 +225,11 @@ public final class OpenRoadmTopology {
             if (isOtn && m.getPortQual().equals("xpdr-client")) {
                 continue;
             }
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder
-                    ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+            var ocnTp1Bldr = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                     .TerminationPoint1Builder()
-                    .setTpType(PORTQUAL_ORD_TYPE_MAP.get(m.getPortQual()))
-                    .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
-                    .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
+                .setTpType(PORTQUAL_ORD_TYPE_MAP.get(m.getPortQual()))
+                .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
+                .setOperationalState(TopologyUtils.setNetworkOperState(m.getPortOperState()));
             if (!isOtn && m.getConnectionMapLcp() != null) {
                 ocnTp1Bldr.setAssociatedConnectionMapTp(Set.of(new TpId(m.getConnectionMapLcp())));
             }
@@ -261,7 +259,7 @@ public final class OpenRoadmTopology {
             }
             TerminationPoint ietfTp =  createTpBldr(m.getLogicalConnectionPoint())
                 .addAugmentation(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .TerminationPoint1Builder()
                         .setTpType(PORTDIR_ORD_TYPE_MAP.get(m.getPortDirection()).get(0))
                         .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
@@ -273,7 +271,7 @@ public final class OpenRoadmTopology {
         // Add CTP to tp-list + added states. TODO: same comment as before with the relation between states
         TerminationPoint ietfTp = createTpBldr(degNb + "-CTP-TXRX")
                 .addAugmentation(new org.opendaylight.yang.gen.v1.http
-                    .org.openroadm.common.network.rev211210.TerminationPoint1Builder()
+                    .org.openroadm.common.network.rev230526.TerminationPoint1Builder()
                          .setTpType(OpenroadmTpType.DEGREETXRXCTP)
                          .setAdministrativeState(AdminStates.InService)
                          .setOperationalState(State.InService)
@@ -295,7 +293,7 @@ public final class OpenRoadmTopology {
                 .withKey((new NodeKey(new NodeId(nodeIdtopo))))
                 .addAugmentation(new Node1Builder().setDegreeAttributes(degAtt).build())
                 .addAugmentation(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .Node1Builder()
                         .setNodeType(OpenroadmNodeType.DEGREE)
                         .setAdministrativeState(AdminStates.InService)
@@ -320,7 +318,7 @@ public final class OpenRoadmTopology {
             TerminationPoint ietfTp = createTpBldr(m.getLogicalConnectionPoint())
                 .addAugmentation(
                     // Add openroadm-common-network tp type augmentations
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .TerminationPoint1Builder()
                         .setTpType(PORTDIR_ORD_TYPE_MAP.get(m.getPortDirection()).get(1))
                         .setAdministrativeState(TopologyUtils.setNetworkAdminState(m.getPortAdminState()))
@@ -332,7 +330,7 @@ public final class OpenRoadmTopology {
         // Add CP to tp-list + added states. TODO: same comment as before with the relation between states
         TerminationPoint ietfTp = createTpBldr(srgNb + "-CP-TXRX")
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                         .TerminationPoint1Builder()
                     .setTpType(OpenroadmTpType.SRGTXRXCP)
                     .setAdministrativeState(AdminStates.InService)
@@ -354,7 +352,7 @@ public final class OpenRoadmTopology {
             .withKey((new NodeKey(new NodeId(nodeIdtopo))))
             .addAugmentation(new Node1Builder().setSrgAttributes(srgAttr).build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                         .Node1Builder()
                     .setNodeType(OpenroadmNodeType.SRG)
                     .setAdministrativeState(AdminStates.InService)
@@ -436,9 +434,9 @@ public final class OpenRoadmTopology {
                 Link1Builder ocnAzLinkBldr = new Link1Builder();
                 Link1Builder ocnZaLinkBldr = new Link1Builder();
                 int srcNodeType = nodes.get(i).augmentation(org.opendaylight.yang.gen.v1.http
-                        .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue();
+                        .org.openroadm.common.network.rev230526.Node1.class).getNodeType().getIntValue();
                 int destNodeType = nodes.get(j).augmentation(org.opendaylight.yang.gen.v1.http
-                        .org.openroadm.common.network.rev211210.Node1.class).getNodeType().getIntValue();
+                        .org.openroadm.common.network.rev230526.Node1.class).getNodeType().getIntValue();
 
                 if (srcNodeType == 11 && destNodeType == 11) {
                     ocnAzLinkBldr.setLinkType(OpenroadmLinkType.EXPRESSLINK);
@@ -461,7 +459,7 @@ public final class OpenRoadmTopology {
                         .getTerminationPoint().values().stream()
                         .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
                         .findFirst().orElseThrow()
-                        .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                        .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .TerminationPoint1.class)
                         .getOperationalState();
                 State destTpState = nodes.get(j)
@@ -470,7 +468,7 @@ public final class OpenRoadmTopology {
                         .getTerminationPoint().values().stream()
                         .filter(tp -> tp.getTpId().getValue().contains("CP") || tp.getTpId().getValue().contains("CTP"))
                         .findFirst().orElseThrow()
-                        .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                        .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .TerminationPoint1.class)
                         .getOperationalState();
                 if (State.InService.equals(srcTpState) && State.InService.equals(destTpState)) {
@@ -516,7 +514,7 @@ public final class OpenRoadmTopology {
     public static boolean deleteLinkLinkId(LinkId linkId , NetworkTransactionService networkTransactionService) {
         LOG.info("deleting link for LinkId: {}", linkId.getValue());
         try {
-            InstanceIdentifierBuilder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
+            InstanceIdentifier.Builder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
                 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
                 .augmentation(Network1.class)
                 .child(Link.class, new LinkKey(linkId));
@@ -533,9 +531,9 @@ public final class OpenRoadmTopology {
                 linkBuilder
                     .removeAugmentation(Link1.class)
                     .addAugmentation(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
                             .Link1Builder(linkBuilder
-                                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+                                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
                                     .Link1.class))
                                 .build())
                     .build());
@@ -554,7 +552,7 @@ public final class OpenRoadmTopology {
      * @param tpId String
      * @return InstanceIdentifierBuilder
      */
-    public static InstanceIdentifierBuilder<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+    public static InstanceIdentifier.Builder<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
             .TerminationPoint1> createCommonNetworkTerminationPointIIDBuilder(String nodeId, String tpId) {
         return InstanceIdentifier.builder(Networks.class)
                 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
@@ -566,7 +564,7 @@ public final class OpenRoadmTopology {
                 .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
                         .networks.network.node.TerminationPoint.class,
                     new TerminationPointKey(new TpId(tpId)))
-                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                         .TerminationPoint1.class);
     }
 
@@ -589,14 +587,14 @@ public final class OpenRoadmTopology {
      * @param nodeId String
      * @return InstanceIdentifier
      */
-    public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+    public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
             .Node1> createCommonNetworkNodeIID(String nodeId) {
         return 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 NodeKey(new NodeId(nodeId)))
-                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
+                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
                 .build();
     }
 }
index 063a5452afe907e8fb9bdeeae826e7de360c5a9c..c173bf80f36dd19d82e9756b9c98269190675d97 100644 (file)
@@ -18,11 +18,11 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
@@ -109,7 +109,7 @@ public final class TopologyUtils {
     public static boolean deleteLinkLinkId(LinkId linkId , NetworkTransactionService networkTransactionService) {
         LOG.info("deleting link for LinkId: {}", linkId.getValue());
         try {
-            InstanceIdentifier.InstanceIdentifierBuilder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
+            InstanceIdentifier.Builder<Link> linkIID = InstanceIdentifier.builder(Networks.class)
                 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
                 .augmentation(Network1.class).child(Link.class, new LinkKey(linkId));
             java.util.Optional<Link> link =
index 8545b4635a3f6157b8ee04fa593eeb3193f6243f..a19a8636f27c1f4d43674543fb1e946dc72e4b64 100644 (file)
@@ -16,7 +16,7 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.NetworkTypes1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.networks.network.network.types.ClliNetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.networks.network.network.types.OpenroadmCommonNetworkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.networks.network.network.types.OpenroadmCommonNetworkBuilder;
 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.networks.Network;
@@ -26,7 +26,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NetworkTypesBuilder;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,9 +47,9 @@ public class TpceNetwork {
     public void createLayer(String networkId) {
         try {
             Network network = createNetwork(networkId);
-            InstanceIdentifierBuilder<Network> nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class,
+            InstanceIdentifier.Builder<Network> nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class,
                 new NetworkKey(new NetworkId(networkId)));
-            networkTransactionService.put(LogicalDatastoreType.CONFIGURATION, nwIID.build(), network);
+            networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, nwIID.build(), network);
             this.networkTransactionService.commit().get(1, TimeUnit.SECONDS);
             LOG.info("{} network layer created successfully.", networkId);
         } catch (ExecutionException | TimeoutException | InterruptedException e) {
@@ -75,7 +74,7 @@ public class TpceNetwork {
             case NetworkUtils.OVERLAY_NETWORK_ID:
             case NetworkUtils.OTN_NETWORK_ID:
                 Augmentation<NetworkTypes> ordTopology = new org.opendaylight.yang.gen.v1.http
-                    .org.openroadm.common.network.rev211210.NetworkTypes1Builder()
+                    .org.openroadm.common.network.rev230526.NetworkTypes1Builder()
                     .setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build())
                     .build();
                 networkTypesBldr.addAugmentation(ordTopology);
index 7dbc8601d6ce8e52defce5061f43d86c6aa101b4..445bb8b65a11fa7c30b48f8f5a8a473c2cc68ea8 100644 (file)
@@ -17,8 +17,6 @@ import static org.mockito.Mockito.when;
 import static org.opendaylight.transportpce.common.StringConstants.OPENROADM_DEVICE_VERSION_2_2_1;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import org.junit.jupiter.api.Test;
@@ -36,14 +34,15 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.AvailableCapabilities;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.AvailableCapabilitiesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.available.capabilities.AvailableCapability;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.available.capabilities.AvailableCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.credentials.credentials.LoginPasswordBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.ConnectionOper.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.connection.oper.AvailableCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.connection.oper.AvailableCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.connection.oper.available.capabilities.AvailableCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.connection.oper.available.capabilities.AvailableCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.credentials.credentials.LoginPwBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.credentials.credentials.login.pw.LoginPasswordBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev231121.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev231121.NetconfNodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
@@ -68,7 +67,7 @@ public class NetConfTopologyListenerTest {
     @Test
     void testOnDataTreeChangedWhenDeleteNode() {
         @SuppressWarnings("unchecked") final DataObjectModification<Node> node = mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Node>> changes = new HashSet<>();
+        final List<DataTreeModification<Node>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Node> ch = mock(DataTreeModification.class);
         final NodeRegistration nodeRegistration = mock(NodeRegistration.class);
         changes.add(ch);
@@ -76,15 +75,15 @@ public class NetConfTopologyListenerTest {
 
         final Node netconfNode = getNetconfNode("netconfNode1", ConnectionStatus.Connecting,
             OPENROADM_DEVICE_VERSION_2_2_1);
-        when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
-        when(node.getDataBefore()).thenReturn(netconfNode);
+        when(node.modificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+        when(node.dataBefore()).thenReturn(netconfNode);
 
         NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker,
             deviceTransactionManager, portMapping, registrations);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(node, times(1)).getModificationType();
-        verify(node, times(3)).getDataBefore();
+        verify(node, times(1)).modificationType();
+        verify(node, times(3)).dataBefore();
         verify(networkModelService, times(1)).deleteOpenRoadmnode(anyString());
         verify(nodeRegistration, times(0)).unregisterListeners();
     }
@@ -92,7 +91,7 @@ public class NetConfTopologyListenerTest {
     @Test
     void testOnDataTreeChangedWhenAddNode() {
         @SuppressWarnings("unchecked") final DataObjectModification<Node> node = mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Node>> changes = new HashSet<>();
+        final List<DataTreeModification<Node>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Node> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(node);
@@ -101,24 +100,24 @@ public class NetConfTopologyListenerTest {
             ConnectionStatus.Connecting, OPENROADM_DEVICE_VERSION_2_2_1);
         final Node netconfNodeAfter = getNetconfNode("netconfNode1",
             ConnectionStatus.Connected, OPENROADM_DEVICE_VERSION_2_2_1);
-        when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
-        when(node.getDataBefore()).thenReturn(netconfNodeBefore);
-        when(node.getDataAfter()).thenReturn(netconfNodeAfter);
+        when(node.modificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+        when(node.dataBefore()).thenReturn(netconfNodeBefore);
+        when(node.dataAfter()).thenReturn(netconfNodeAfter);
 
         NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker,
             deviceTransactionManager, portMapping);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(node, times(1)).getModificationType();
-        verify(node, times(3)).getDataBefore();
-        verify(node, times(1)).getDataAfter();
+        verify(node, times(1)).modificationType();
+        verify(node, times(3)).dataBefore();
+        verify(node, times(1)).dataAfter();
         verify(networkModelService, times(1)).createOpenRoadmNode(anyString(), anyString());
     }
 
     @Test
     void testOnDataTreeChangedWhenDisconnectingNode() {
         @SuppressWarnings("unchecked") final DataObjectModification<Node> node = mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Node>> changes = new HashSet<>();
+        final List<DataTreeModification<Node>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Node> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(node);
@@ -127,17 +126,17 @@ public class NetConfTopologyListenerTest {
             ConnectionStatus.Connected, OPENROADM_DEVICE_VERSION_2_2_1);
         final Node netconfNodeAfter = getNetconfNode("netconfNode1",
             ConnectionStatus.Connecting, OPENROADM_DEVICE_VERSION_2_2_1);
-        when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
-        when(node.getDataBefore()).thenReturn(netconfNodeBefore);
-        when(node.getDataAfter()).thenReturn(netconfNodeAfter);
+        when(node.modificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+        when(node.dataBefore()).thenReturn(netconfNodeBefore);
+        when(node.dataAfter()).thenReturn(netconfNodeAfter);
 
         NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker,
             deviceTransactionManager, portMapping);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(node, times(1)).getModificationType();
-        verify(node, times(3)).getDataBefore();
-        verify(node, times(1)).getDataAfter();
+        verify(node, times(1)).modificationType();
+        verify(node, times(3)).dataBefore();
+        verify(node, times(1)).dataAfter();
         verify(networkModelService, never()).createOpenRoadmNode(anyString(), anyString());
         verify(networkModelService, never()).deleteOpenRoadmnode(anyString());
     }
@@ -145,23 +144,23 @@ public class NetConfTopologyListenerTest {
     @Test
     void testOnDataTreeChangedWhenShouldNeverHappen() {
         @SuppressWarnings("unchecked") final DataObjectModification<Node> node = mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Node>> changes = new HashSet<>();
+        final List<DataTreeModification<Node>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Node> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(node);
 
         final Node netconfNodeBefore = getNetconfNode("netconfNode1",
             ConnectionStatus.Connected, OPENROADM_DEVICE_VERSION_2_2_1);
-        when(node.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);
-        when(node.getDataBefore()).thenReturn(netconfNodeBefore);
+        when(node.modificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);
+        when(node.dataBefore()).thenReturn(netconfNodeBefore);
 
         NetConfTopologyListener listener = new NetConfTopologyListener(networkModelService, dataBroker,
             deviceTransactionManager, portMapping);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(node, times(2)).getModificationType();
-        verify(node, times(3)).getDataBefore();
-        verify(node, never()).getDataAfter();
+        verify(node, times(2)).modificationType();
+        verify(node, times(3)).dataBefore();
+        verify(node, never()).dataAfter();
         verify(networkModelService, never()).createOpenRoadmNode(anyString(), anyString());
         verify(networkModelService, never()).deleteOpenRoadmnode(anyString());
     }
@@ -182,12 +181,13 @@ public class NetConfTopologyListenerTest {
             .setPort(new PortNumber(Uint16.valueOf(9999)))
             .setReconnectOnChangedSchema(true)
             .setDefaultRequestTimeoutMillis(Uint32.valueOf(1000))
-            .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(100))
             .setKeepaliveDelay(Uint32.valueOf(1000))
             .setTcpOnly(true)
-            .setCredentials(new LoginPasswordBuilder()
-                .setUsername("testuser")
-                .setPassword("testpassword")
+            .setCredentials(new LoginPwBuilder()
+                .setLoginPassword(new LoginPasswordBuilder()
+                    .setUsername("testuser")
+                    .setPassword("testpassword".getBytes())
+                    .build())
                 .build())
             .build();
         return new NodeBuilder()
index 8d5ba9f8c6867aed38f1111c9152721c31728d77..52fb633356df438da78e5f35dbc7f2a7f73b7ba3 100644 (file)
@@ -21,14 +21,12 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.stubbing.Answer;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.TransportpceNetworkutilsService;
 
 @ExtendWith(MockitoExtension.class)
 public class NetworkModelProviderTest {
@@ -37,8 +35,6 @@ public class NetworkModelProviderTest {
     @Mock
     DataBroker dataBroker;
     @Mock
-    RpcProviderService rpcProviderService;
-    @Mock
     NetworkModelService networkModelService;
     @Mock
     DeviceTransactionManager deviceTransactionManager;
@@ -51,7 +47,6 @@ public class NetworkModelProviderTest {
     @Mock
     FrequenciesService frequenciesService;
 
-
     @Test
     void networkmodelProviderInitTest() {
         Answer<FluentFuture<CommitInfo>> answer = new Answer<FluentFuture<CommitInfo>>() {
@@ -64,11 +59,9 @@ public class NetworkModelProviderTest {
         };
         when(networkTransactionService.commit()).then(answer);
 
-        new NetworkModelProvider(networkTransactionService, dataBroker, rpcProviderService, networkModelService,
-                deviceTransactionManager, portMapping, notificationService, frequenciesService);
+        new NetworkModelProvider(networkTransactionService, dataBroker, networkModelService, deviceTransactionManager,
+                portMapping, notificationService, frequenciesService);
 
-        verify(rpcProviderService, times(1))
-            .registerRpcImplementation(any(), any(TransportpceNetworkutilsService.class));
-        verify(dataBroker, times(2)).registerDataTreeChangeListener(any(), any());
+        verify(dataBroker, times(2)).registerTreeChangeListener(any(), any());
     }
 }
diff --git a/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java b/networkmodel/src/test/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImplTest.java
new file mode 100644 (file)
index 0000000..83da135
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright © 2023 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.networkmodel;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.DeleteLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRdmXpdrLinks;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitRoadmNodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.InitXpdrRdmLinks;
+
+
+@ExtendWith(MockitoExtension.class)
+class NetworkUtilsImplTest {
+    @Mock
+    DataBroker dataBroker;
+    @Mock
+    RpcProviderService rpcProvider;
+
+    @Test
+    void networkUtilsInitTest() {
+        new NetworkUtilsImpl(dataBroker, rpcProvider);
+
+        verify(rpcProvider, times(1)).registerRpcImplementations(
+                any(DeleteLink.class), any(InitRoadmNodes.class), any(InitXpdrRdmLinks.class),
+                any(InitRdmXpdrLinks.class));
+    }
+}
index 6b44c21d0e4aa47e9e481916114e05112e1d6932..cf5248c5cec4e07ec38e70cbafdbda4a9c188cb1 100644 (file)
@@ -22,7 +22,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.ChangeNotification;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.change.notification.Edit;
index 3591a5f8b498f13d2d0eb520aabf8a2590cdcce5..86d9512433e3cc624cedd5209dd243edbdf2830a 100644 (file)
@@ -22,7 +22,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.ChangeNotification;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.change.notification.Edit;
index 2ff33bcc095a97f7569eeb78718091029e7c9f27..13442a7c563b4eb68eaae520e754498b68f302d2 100644 (file)
@@ -22,7 +22,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.ChangeNotification;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.change.notification.Edit;
index 0f90b35175f56e8538d0555925577fccf11710b5..a64179356429eb30ea8d06c5dedc2623ea2b7d9d 100644 (file)
@@ -16,8 +16,8 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.Collection;
-import java.util.HashSet;
+import java.util.ArrayList;
+import java.util.List;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -27,7 +27,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 
 
 @ExtendWith(MockitoExtension.class)
@@ -45,7 +45,7 @@ public class PortMappingListenerTest {
 
     @Test
     void testOnDataTreeChangedWhenMappingOperAndAdminDidntChange() {
-        final Collection<DataTreeModification<Mapping>> changes = new HashSet<>();
+        final List<DataTreeModification<Mapping>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Mapping> ch = mock(DataTreeModification.class);
         changes.add(ch);
         @SuppressWarnings("unchecked") final DataObjectModification<Mapping> mappingObject =
@@ -54,8 +54,8 @@ public class PortMappingListenerTest {
         final Mapping newMapping = mock(Mapping.class);
 
         when(ch.getRootNode()).thenReturn(mappingObject);
-        when(mappingObject.getDataBefore()).thenReturn(oldMapping);
-        when(mappingObject.getDataAfter()).thenReturn(newMapping);
+        when(mappingObject.dataBefore()).thenReturn(oldMapping);
+        when(mappingObject.dataAfter()).thenReturn(newMapping);
         when(oldMapping.getPortAdminState()).thenReturn("InService");
         when(oldMapping.getPortOperState()).thenReturn("InService");
         when(newMapping.getPortAdminState()).thenReturn("InService");
@@ -67,7 +67,7 @@ public class PortMappingListenerTest {
 
     @Test
     void testOnDataTreeChangedWhenMappingAdminChanged() {
-        final Collection<DataTreeModification<Mapping>> changes = new HashSet<>();
+        final List<DataTreeModification<Mapping>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Mapping> ch = mock(DataTreeModification.class);
         changes.add(ch);
         @SuppressWarnings("unchecked") final DataObjectModification<Mapping> mappingObject =
@@ -76,8 +76,8 @@ public class PortMappingListenerTest {
         final Mapping newMapping = mock(Mapping.class);
 
         when(ch.getRootNode()).thenReturn(mappingObject);
-        when(mappingObject.getDataBefore()).thenReturn(oldMapping);
-        when(mappingObject.getDataAfter()).thenReturn(newMapping);
+        when(mappingObject.dataBefore()).thenReturn(oldMapping);
+        when(mappingObject.dataAfter()).thenReturn(newMapping);
         when(oldMapping.getPortAdminState()).thenReturn("InService");
         when(newMapping.getPortAdminState()).thenReturn("OutOfService");
 
@@ -87,7 +87,7 @@ public class PortMappingListenerTest {
 
     @Test
     void testOnDataTreeChangedWhenMappingOperChanged() {
-        final Collection<DataTreeModification<Mapping>> changes = new HashSet<>();
+        final List<DataTreeModification<Mapping>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Mapping> ch = mock(DataTreeModification.class);
         changes.add(ch);
         @SuppressWarnings("unchecked") final DataObjectModification<Mapping> mappingObject =
@@ -96,8 +96,8 @@ public class PortMappingListenerTest {
         final Mapping newMapping = mock(Mapping.class);
 
         when(ch.getRootNode()).thenReturn(mappingObject);
-        when(mappingObject.getDataBefore()).thenReturn(oldMapping);
-        when(mappingObject.getDataAfter()).thenReturn(newMapping);
+        when(mappingObject.dataBefore()).thenReturn(oldMapping);
+        when(mappingObject.dataAfter()).thenReturn(newMapping);
         when(oldMapping.getPortAdminState()).thenReturn("InService");
         when(oldMapping.getPortOperState()).thenReturn("InService");
         when(newMapping.getPortAdminState()).thenReturn("InService");
index 54b503e902369cfdbc9e44dc4e5e04a467228d71..d300b52cef833e7efea0645a06f83310b0b9ce3b 100644 (file)
@@ -37,9 +37,9 @@ import org.opendaylight.transportpce.test.converter.DataObjectConverter;
 import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stub.rev230228.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
index 21bfab261ff48f199cf4c2091fea781869175bac..1a0baf55a78f80db806ab755fef1e037366810c6 100644 (file)
@@ -12,9 +12,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.junit.jupiter.api.Test;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.Node1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.Node1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
index 3750ecf3d537a0ddc8e1ab0d8075d76bbb1cce17..dfb75ed674386b59fcd13999b65c4fec04472983 100644 (file)
@@ -18,10 +18,10 @@ import java.util.ArrayList;
 import java.util.List;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
index 9ce89de08dccea5dbc646eb7b0c91a50c38fd60a..2985a61fe6259c93bb352e4bce55db7c82c321ca 100644 (file)
@@ -36,34 +36,34 @@ import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
 import org.opendaylight.transportpce.networkmodel.util.test.JsonUtil;
 import org.opendaylight.transportpce.networkmodel.util.test.NetworkmodelTestUtil;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
+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.odu.switching.pools.NonBlockingList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.otn.common.types.rev210924.ODU2;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU2e;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.SwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GEODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2e;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCH;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.SwitchingPools;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GE;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GEODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GE;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GEODU2;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GEODU2e;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCH;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
@@ -134,7 +134,7 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             Uint16.valueOf(1),
             node.augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1.class)
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1.class)
                     .getXpdrAttributes().getXpdrNumber());
         //tests list of TPs
         List<TerminationPoint> tps = node.augmentation(
@@ -151,13 +151,13 @@ public class OpenRoadmOtnTopologyTest {
                         TerminationPoint1.class).getAssociatedConnectionMapTp().iterator().next().getValue());
         assertEquals(
             1,
-            tps.get(0).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            tps.get(0).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                     .getTpSupportedInterfaces().getSupportedInterfaceCapability().size(),
             "only If100GE interface capabitily expected");
         assertEquals(
             If100GE.VALUE,
-            tps.get(0).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            tps.get(0).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                     .getTpSupportedInterfaces().nonnullSupportedInterfaceCapability().values().stream().findFirst()
                         .orElseThrow().getIfCapType());
@@ -169,17 +169,17 @@ public class OpenRoadmOtnTopologyTest {
                     .getAssociatedConnectionMapTp().iterator().next().getValue());
         assertEquals(
             1,
-            tps.get(2).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            tps.get(2).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                     .getTpSupportedInterfaces().getSupportedInterfaceCapability().size());
         assertEquals(
             IfOCH.VALUE,
-            tps.get(2).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            tps.get(2).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                     .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().stream().findFirst()
                         .orElseThrow().getIfCapType());
         assertNull(
-            tps.get(2).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            tps.get(2).augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                     .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getRate(),
             "the rate should be null");
@@ -235,12 +235,12 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             OpenroadmLinkType.OTNLINK,
             sortedLinks.get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class)
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class)
                 .getLinkType());
         assertEquals(
             "OTU4-SPDRZ-XPDR1-XPDR1-NETWORK1toSPDRA-XPDR1-XPDR1-NETWORK1",
             sortedLinks.get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class)
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class)
                 .getOppositeLink().getValue(),
             "opposite link must be present");
         assertEquals(
@@ -305,12 +305,12 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             OpenroadmLinkType.OTNLINK,
             sortedLinks.get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class)
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class)
                 .getLinkType());
         assertEquals(
             "ODTU4-SPDRZ-XPDR1-XPDR1-NETWORK1toSPDRA-XPDR1-XPDR1-NETWORK1",
             sortedLinks.get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class)
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class)
                 .getOppositeLink().getValue(),
             "opposite link must be present");
         assertEquals(
@@ -323,20 +323,20 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(2, topoShard.getTps().size(), "list of TPs should contain 2 updated TPs");
         assertNotNull(
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             "after ODU4 creation, its termination point should contain a TsPool list");
         assertEquals(
             80,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool().size(),
             "Ts pool list should be full, with 80 trib slots");
         assertNotNull(
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool(),
@@ -344,7 +344,7 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             80,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool().size(),
@@ -397,13 +397,13 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(2, topoShard.getTps().size(), "list of TPs should contain 2 updated TPs");
         assertNull(
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             "after ODU4 deletion, its termination points should not contain any TsPool list");
         assertNull(
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool(),
             "after ODU4 deletion, its termination points should not contain any TpnPool list");
@@ -452,28 +452,28 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             72,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool().size(),
             "after 10G creation, 8 (over 80) trib slot should be occupied");
         assertThat(
             "trib slot 1-8 should no longer be present in Trib slot list",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             not(hasItems(Uint16.valueOf(1), Uint16.valueOf(8))));
         assertThat(
             "trib slot 9 should always be present in trib slot list",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             hasItem(Uint16.valueOf(9)));
         assertEquals(
             79,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool().size(),
@@ -481,7 +481,7 @@ public class OpenRoadmOtnTopologyTest {
         assertThat(
             "trib port 1 should no longer be present",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool(),
@@ -508,21 +508,21 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             80,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool().size(),
             "after 10G deletion, trib slot list should be full");
         assertThat(
             "after 10G deletion, trib slot list should contain items 1-8",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             hasItems(Uint16.valueOf(1), Uint16.valueOf(8), Uint16.valueOf(9)));
         assertEquals(
                 80,
                 topoShard.getTps().get(0).augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                             .TerminationPoint1.class)
                     .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                     .getTpnPool().size(),
@@ -530,7 +530,7 @@ public class OpenRoadmOtnTopologyTest {
         assertThat(
             "after 10G deletion, trib port list should contain items 1",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool(),
@@ -563,28 +563,28 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             79,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool().size(),
             "after 1G creation, 1 (over 80) trib slot should be occupied");
         assertThat(
             "trib slot 1 should no longer be present in Trib slot list",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             not(hasItem(Uint16.valueOf(1))));
         assertThat(
             "trib slot 2 should always be present in Trib slot list",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             hasItem(Uint16.valueOf(2)));
         assertEquals(
             79,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool().size(),
@@ -592,7 +592,7 @@ public class OpenRoadmOtnTopologyTest {
         assertThat(
             "trib port 1 should no longer be present in Trib port list",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool(),
@@ -621,21 +621,21 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             80,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool().size(),
             "after 1G deletion, trib slot list should be full");
         assertThat(
             "after 1G deletion, trib slot list should contain items 1 and 2",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getTsPool(),
             hasItems(Uint16.valueOf(1), Uint16.valueOf(2)));
         assertEquals(
             80,
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool().size(),
@@ -643,7 +643,7 @@ public class OpenRoadmOtnTopologyTest {
         assertThat(
             "after 1G deletion, trib port list should contain items 1",
             topoShard.getTps().get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getOdtuTpnPool().values().stream().findFirst().orElseThrow()
                 .getTpnPool(),
@@ -685,7 +685,7 @@ public class OpenRoadmOtnTopologyTest {
 
     private void checkSpdrNode(Node node) {
         Uint16 xpdrNb = node.augmentation(
-                org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1.class)
+                org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1.class)
             .getXpdrAttributes().getXpdrNumber();
         assertEquals("SPDR-SA1-XPDR" + xpdrNb, node.getNodeId().getValue());
         if (xpdrNb.equals(Uint16.valueOf(1))) {
@@ -707,7 +707,7 @@ public class OpenRoadmOtnTopologyTest {
         checkSpdrSwitchingPools(
             xpdrNb,
             node.augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1.class)
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1.class)
                 .getSwitchingPools());
         List<TerminationPoint> tpList = node.augmentation(
                 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
@@ -776,7 +776,7 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             IfOCHOTU4ODU4.VALUE,
             tpList.get(4).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().stream().findFirst()
                 .orElseThrow().getIfCapType(),
@@ -784,7 +784,7 @@ public class OpenRoadmOtnTopologyTest {
         assertEquals(
             ODU4.VALUE,
             tpList.get(4).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getXpdrTpPortConnectionAttributes().getRate(),
             "the rate should be ODU4");
@@ -808,19 +808,19 @@ public class OpenRoadmOtnTopologyTest {
             assertEquals(
                 2,
                 tpList.get(1).augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                             .TerminationPoint1.class)
                     .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().size(),
                 "supported interface capability of tp-id XPDR1-CLIENT2 should contain 2 if-cap-type");
             assertEquals(
                 3,
                 tpList.get(2).augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                             .TerminationPoint1.class)
                     .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().size(),
                 "supported interface capability of tp-id XPDR1-CLIENT3 should contain 3 if-cap-type");
             List<SupportedInterfaceCapability> sicListClient1 = tpList.get(0).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().stream()
                 .collect(Collectors.toList());
@@ -831,7 +831,7 @@ public class OpenRoadmOtnTopologyTest {
                         .or(containsString(String.valueOf(If10GEODU2.VALUE))));
             }
             List<SupportedInterfaceCapability> sicListClient3 = tpList.get(3).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().stream()
                 .collect(Collectors.toList());
@@ -844,7 +844,7 @@ public class OpenRoadmOtnTopologyTest {
             }
             assertThat("the rate should be ODU2 or ODU2e",
                 String.valueOf(tpList.get(2).augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                             .TerminationPoint1.class)
                     .getXpdrTpPortConnectionAttributes().getRate()),
                 either(containsString(String.valueOf(ODU2e.VALUE)))
@@ -866,7 +866,7 @@ public class OpenRoadmOtnTopologyTest {
             assertEquals(
                 IfOCHOTU4ODU4.VALUE,
                 tpList.get(5).augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                             .TerminationPoint1.class)
                     .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().stream().findFirst()
                     .orElseThrow().getIfCapType(),
@@ -874,12 +874,12 @@ public class OpenRoadmOtnTopologyTest {
             assertEquals(
                 2,
                 tpList.get(2).augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                             .TerminationPoint1.class)
                     .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().size(),
                 "supported interface capability of tp should contain 2 IfCapType");
             List<SupportedInterfaceCapability> sicListClient3 = tpList.get(2).augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                         .TerminationPoint1.class)
                 .getTpSupportedInterfaces().getSupportedInterfaceCapability().values().stream()
                 .collect(Collectors.toList());
index 9ae082d90c28a06adc1e24764426e54f2c9d607e..e13c9be32959627ba4a04a640d41ffe69cd8321d 100644 (file)
@@ -41,16 +41,16 @@ import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.networkmodel.dto.TopologyShard;
 import org.opendaylight.transportpce.networkmodel.util.test.NetworkmodelTestUtil;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
+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.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.available.freq.map.AvailFreqMaps;
 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;
@@ -214,7 +214,7 @@ public class OpenRoadmTopologyTest {
         String srcTp = "DEG1-CTP-TXRX";
         String destTp = "SRG1-CP-TXRX";
         LinkId linkId = LinkIdUtil.buildLinkId(srcNode, srcTp, dstNode, destTp);
-        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1 link1 =
+        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1 link1 =
             new Link1Builder().build();
         Link link = new LinkBuilder()
             .setLinkId(linkId)
@@ -300,10 +300,10 @@ public class OpenRoadmTopologyTest {
         assertEquals(OpenroadmNodeType.DEGREE, node.augmentation(Node1.class).getNodeType());
         assertEquals(
             Uint16.valueOf(nodeNb),
-            node.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
+            node.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1.class)
                 .getDegreeAttributes().getDegreeNumber());
         List<AvailFreqMaps> availFreqMapsValues = new ArrayList<>(node.augmentation(
-                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
+                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1.class)
             .getDegreeAttributes().getAvailFreqMaps().values());
         assertEquals(GridConstant.NB_OCTECTS, availFreqMapsValues.get(0).getFreqMap().length);
         byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
@@ -333,7 +333,7 @@ public class OpenRoadmTopologyTest {
         assertEquals("ROADMA01", supportingNodes.get(1).getNodeRef().getValue());
         assertEquals(OpenroadmNodeType.SRG, node.augmentation(Node1.class).getNodeType());
         List<AvailFreqMaps> availFreqMapsValues = new ArrayList<>(node.augmentation(
-                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1.class)
+                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1.class)
             .getSrgAttributes().getAvailFreqMaps().values());
         assertEquals(GridConstant.NB_OCTECTS, availFreqMapsValues.get(0).getFreqMap().length);
         byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
@@ -453,7 +453,7 @@ public class OpenRoadmTopologyTest {
         }
     }
 
-    private class InterruptedLinkFuture implements  ListenableFuture<Optional<Link>> {
+    private final class InterruptedLinkFuture implements  ListenableFuture<Optional<Link>> {
 
         @Override
         public boolean cancel(boolean arg0) {
index da15d45b757f847b9026a8aeee7c76bf08841bf3..644d0af4be3f34ef194a51069c000547ce49ae4f 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.NetworkTypes1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.NetworkTypes1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.networks.network.network.types.ClliNetworkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.networks.network.network.types.OpenroadmCommonNetworkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.networks.network.network.types.OpenroadmCommonNetworkBuilder;
 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.networks.Network;
@@ -95,22 +95,22 @@ public class TpceNetworkTest extends AbstractTest {
             "toto layer should not have any network-type augmentation");
         assertNull(
             createdOrdNetwork.getNetworkTypes().augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.NetworkTypes1.class),
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.NetworkTypes1.class),
             "toto layer should not have any network-type augmentation");
     }
 
     private void commonNetworkAugmentationTest(Network createdOrdNetwork) {
         Augmentation<NetworkTypes> ordComNet
-            = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.NetworkTypes1Builder()
+            = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.NetworkTypes1Builder()
                 .setOpenroadmCommonNetwork(new OpenroadmCommonNetworkBuilder().build())
                 .build();
         assertNotNull(
             createdOrdNetwork.getNetworkTypes().augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.NetworkTypes1.class),
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.NetworkTypes1.class),
             "common-network augmentation should not be null");
         assertEquals(
             ordComNet, createdOrdNetwork.getNetworkTypes().augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.NetworkTypes1.class),
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.NetworkTypes1.class),
             "bad common-network augmentation for network-types");
     }
 }
index 714216face8091ee7e5e293cfc0d1dcbd1e94c3a..3f54bd1fc548c11bed63ac9c87ed5d6fda759a96 100644 (file)
@@ -11,6 +11,7 @@ import com.google.gson.stream.JsonReader;
 import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map.Entry;
 import java.util.ServiceLoader;
 import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
@@ -18,6 +19,7 @@ import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
 import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -26,7 +28,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,17 +64,15 @@ public final class JsonUtil {
     }
 
     public DataObject getDataObjectFromJson(JsonReader reader, QName pathQname) {
-        NormalizedNodeResult result = new NormalizedNodeResult();
-        try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+        NormalizationResultHolder resultHolder = new NormalizationResultHolder();
+        try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
                 JsonParserStream jsonParser = JsonParserStream.create(streamWriter,
                         JSONCodecFactorySupplier.RFC7951.getShared(schemaCtx));) {
             jsonParser.parse(reader);
             YangInstanceIdentifier yangId = YangInstanceIdentifier.of(pathQname);
-            if (codecRegistry.fromNormalizedNode(yangId, result.getResult()) != null) {
-                return codecRegistry.fromNormalizedNode(yangId, result.getResult()).getValue();
-            } else {
-                return null;
-            }
+            Entry<InstanceIdentifier<?>, DataObject> entry =
+                codecRegistry.fromNormalizedNode(yangId, resultHolder.getResult().data());
+            return entry == null ? null : entry.getValue();
         } catch (IOException | IllegalArgumentException e) {
             LOG.error("Cannot deserialize JSON ", e);
             return null;
index 659de06ff3a05d378f2fdd724c1e35c979b988bf..d270287fea5923d66e5afeaaf68cf7baee36780f 100644 (file)
@@ -16,34 +16,31 @@ import java.util.Map;
 import java.util.Set;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.PortQual;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.XpdrNodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.otn.common.types.rev210924.ODTU4TsAllocated;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.TpSupportedInterfaces;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCH;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPool;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPoolBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GE;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCH;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.otn.tp.attributes.OdtuTpnPool;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.otn.tp.attributes.OdtuTpnPoolBuilder;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
@@ -56,7 +53,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.termination.point.SupportingTerminationPoint;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.termination.point.SupportingTerminationPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.termination.point.SupportingTerminationPointKey;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
@@ -79,8 +75,8 @@ public final class NetworkmodelTestUtil {
             .build();
     }
 
-    public static Nodes createMappingForXpdr(String nodeId, String clli, int networkPortNb, int clientPortNb,
-        XpdrNodeTypes xpdrNodeType) {
+    public static Nodes createMappingForXpdr(
+            String nodeId, String clli, int networkPortNb, int clientPortNb, XpdrNodeTypes xpdrNodeType) {
         Map<MappingKey,Mapping> mappingMap = new HashMap<>();
         createXpdrMappings(mappingMap, networkPortNb, clientPortNb, xpdrNodeType);
         Nodes mappingNode = new NodesBuilder()
@@ -93,72 +89,71 @@ public final class NetworkmodelTestUtil {
     }
 
     public static List<Link> createSuppOTNLinks(OtnLinkType type, Uint32 availBW) {
-        Link linkAZ = new LinkBuilder()
-            .setLinkId(new LinkId(type.getName() + "-SPDRA-XPDR1-XPDR1-NETWORK1toSPDRZ-XPDR1-XPDR1-NETWORK1"))
-            .setSource(new SourceBuilder()
-                    .setSourceNode(new NodeId("SPDRA-XPDR1"))
-                    .setSourceTp(new TpId("XPDR1-NETWORK1")).build())
-            .setDestination(new DestinationBuilder()
-                    .setDestNode(new NodeId("SPDRZ-XPDR1"))
-                    .setDestTp(new TpId("XPDR1-NETWORK1")).build())
-            .addAugmentation(
-                new Link1Builder()
-                    .setLinkType(OpenroadmLinkType.OTNLINK)
-                    .setOppositeLink(new LinkId(type.getName()
-                        + "-SPDRZ-XPDR1-XPDR1-NETWORK1toSPDRA-XPDR1-XPDR1-NETWORK1"))
-                    .build())
-            .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Link1Builder()
-                    .setAvailableBandwidth(availBW)
-                    .setUsedBandwidth(Uint32.valueOf(100000 - availBW.intValue()))
-                    .build())
-            .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
-                    .Link1Builder()
-                    .setOtnLinkType(type)
-                    .build())
-            .build();
-        Link linkZA = new LinkBuilder()
-            .setLinkId(new LinkId(type.getName() + "-SPDRZ-XPDR1-XPDR1-NETWORK1toSPDRA-XPDR1-XPDR1-NETWORK1"))
-            .setSource(new SourceBuilder()
-                    .setSourceNode(new NodeId("SPDRZ-XPDR1"))
-                    .setSourceTp(new TpId("XPDR1-NETWORK1")).build())
-            .setDestination(new DestinationBuilder()
-                    .setDestNode(new NodeId("SPDRA-XPDR1"))
-                    .setDestTp(new TpId("XPDR1-NETWORK1")).build())
-            .addAugmentation(
-                new Link1Builder()
-                    .setLinkType(OpenroadmLinkType.OTNLINK)
-                    .setOppositeLink(new LinkId(type.getName()
-                        + "-SPDRA-XPDR1-XPDR1-NETWORK1toSPDRZ-XPDR1-XPDR1-NETWORK1"))
-                    .build())
-            .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Link1Builder()
-                    .setAvailableBandwidth(availBW)
-                    .setUsedBandwidth(Uint32.valueOf(100000 - availBW.intValue()))
-                    .build())
-            .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
-                        .Link1Builder()
-                    .setOtnLinkType(type)
-                    .build())
-            .build();
-        List<Link> links = new ArrayList<>();
-        links.add(linkAZ);
-        links.add(linkZA);
-        return links;
+        return new ArrayList<>(List.of(
+            //linkAZ,
+            new LinkBuilder()
+                .setLinkId(new LinkId(type.getName() + "-SPDRA-XPDR1-XPDR1-NETWORK1toSPDRZ-XPDR1-XPDR1-NETWORK1"))
+                .setSource(
+                    new SourceBuilder()
+                        .setSourceNode(new NodeId("SPDRA-XPDR1"))
+                        .setSourceTp(new TpId("XPDR1-NETWORK1")).build())
+                .setDestination(
+                    new DestinationBuilder()
+                        .setDestNode(new NodeId("SPDRZ-XPDR1"))
+                        .setDestTp(new TpId("XPDR1-NETWORK1")).build())
+                .addAugmentation(
+                    new Link1Builder()
+                        .setLinkType(OpenroadmLinkType.OTNLINK)
+                        .setOppositeLink(
+                            new LinkId(type.getName() + "-SPDRZ-XPDR1-XPDR1-NETWORK1toSPDRA-XPDR1-XPDR1-NETWORK1"))
+                        .build())
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
+                            .Link1Builder()
+                        .setAvailableBandwidth(availBW)
+                        .setUsedBandwidth(Uint32.valueOf(100000 - availBW.intValue()))
+                        .build())
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
+                            .Link1Builder()
+                        .setOtnLinkType(type)
+                        .build())
+                .build(),
+            //linkZA
+            new LinkBuilder()
+                .setLinkId(new LinkId(type.getName() + "-SPDRZ-XPDR1-XPDR1-NETWORK1toSPDRA-XPDR1-XPDR1-NETWORK1"))
+                .setSource(
+                    new SourceBuilder()
+                        .setSourceNode(new NodeId("SPDRZ-XPDR1"))
+                        .setSourceTp(new TpId("XPDR1-NETWORK1"))
+                        .build())
+                .setDestination(
+                    new DestinationBuilder()
+                        .setDestNode(new NodeId("SPDRA-XPDR1"))
+                        .setDestTp(new TpId("XPDR1-NETWORK1"))
+                        .build())
+                .addAugmentation(
+                    new Link1Builder()
+                        .setLinkType(OpenroadmLinkType.OTNLINK)
+                        .setOppositeLink(
+                            new LinkId(type.getName() + "-SPDRA-XPDR1-XPDR1-NETWORK1toSPDRZ-XPDR1-XPDR1-NETWORK1"))
+                        .build())
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
+                            .Link1Builder()
+                        .setAvailableBandwidth(availBW)
+                        .setUsedBandwidth(Uint32.valueOf(100000 - availBW.intValue()))
+                        .build())
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630
+                            .Link1Builder()
+                        .setOtnLinkType(type)
+                        .build())
+                .build()
+            ));
     }
 
     public static List<TerminationPoint> createTpList(boolean withTpnTsPool) {
-        SupportedInterfaceCapability supCapa = new SupportedInterfaceCapabilityBuilder()
-            .setIfCapType(IfOCHOTU4ODU4.VALUE)
-            .build();
-        Map<SupportedInterfaceCapabilityKey,SupportedInterfaceCapability> supInterCapaList =
-                new HashMap<>();
-        supInterCapaList.put(supCapa.key(),supCapa);
-        TpSupportedInterfaces tpSuppInter = new TpSupportedInterfacesBuilder()
-            .setSupportedInterfaceCapability(supInterCapaList)
-            .build();
         XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder()
             .setRate(ODU4.VALUE);
         if (withTpnTsPool) {
@@ -171,13 +166,17 @@ public final class NetworkmodelTestUtil {
             for (int i = 1; i <= 80; i++) {
                 tpnPool.add(Uint16.valueOf(i));
             }
-            OdtuTpnPool odtuTpn = new OdtuTpnPoolBuilder()
-                    .setOdtuType(ODTU4TsAllocated.VALUE)
-                    .setTpnPool(tpnPool).build();
+            OdtuTpnPool odtuTpn =
+                new OdtuTpnPoolBuilder().setOdtuType(ODTU4TsAllocated.VALUE).setTpnPool(tpnPool).build();
             xtpcaBldr.setOdtuTpnPool(ImmutableMap.of(odtuTpn.key(),odtuTpn));
         }
+        SupportedInterfaceCapability supCapa =
+            new SupportedInterfaceCapabilityBuilder().setIfCapType(IfOCHOTU4ODU4.VALUE).build();
         TerminationPoint1 otnTp1 = new TerminationPoint1Builder()
-            .setTpSupportedInterfaces(tpSuppInter)
+            .setTpSupportedInterfaces(
+                new TpSupportedInterfacesBuilder()
+                    .setSupportedInterfaceCapability(new HashMap<>(Map.of(supCapa.key(),supCapa)))
+                    .build())
             .setXpdrTpPortConnectionAttributes(xtpcaBldr.build())
             .build();
         SupportingTerminationPoint supTermPointA = new SupportingTerminationPointBuilder()
@@ -185,41 +184,38 @@ public final class NetworkmodelTestUtil {
             .setNodeRef(new NodeId("SPDRA-XPDR1"))
             .setTpRef(new TpId("XPDR1-NETWORK1"))
             .build();
-        Map<SupportingTerminationPointKey,SupportingTerminationPoint> supTermPointMapA =
-                Map.of(supTermPointA.key(), supTermPointA);
-        TerminationPoint tpA = new TerminationPointBuilder()
-            .setTpId(new TpId("XPDR1-NETWORK1"))
-            .setSupportingTerminationPoint(supTermPointMapA)
-            .addAugmentation(otnTp1)
-            .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder()
-                .setTpType(OpenroadmTpType.XPONDERNETWORK)
-                .build())
-            .build();
         SupportingTerminationPoint supTermPointZ = new SupportingTerminationPointBuilder()
             .setNetworkRef(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))
             .setNodeRef(new NodeId("SPDRZ-XPDR1"))
             .setTpRef(new TpId("XPDR1-NETWORK1"))
             .build();
-        Map<SupportingTerminationPointKey,SupportingTerminationPoint> supTermPointMapZ =
-                Map.of(supTermPointZ.key(), supTermPointZ);
-        TerminationPoint tpZ = new TerminationPointBuilder()
-            .setTpId(new TpId("XPDR1-NETWORK1"))
-            .setSupportingTerminationPoint(supTermPointMapZ)
-            .addAugmentation(otnTp1)
-            .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder()
-                .setTpType(OpenroadmTpType.XPONDERNETWORK)
-                .build())
-            .build();
-        List<TerminationPoint> tps = new ArrayList<>();
-        tps.add(tpA);
-        tps.add(tpZ);
-        return tps;
+        return new ArrayList<>(List.of(
+            //tpA
+            new TerminationPointBuilder()
+                .setTpId(new TpId("XPDR1-NETWORK1"))
+                .setSupportingTerminationPoint(Map.of(supTermPointA.key(), supTermPointA))
+                .addAugmentation(otnTp1)
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
+                            .TerminationPoint1Builder()
+                        .setTpType(OpenroadmTpType.XPONDERNETWORK)
+                        .build())
+                .build(),
+            //tpZ
+            new TerminationPointBuilder()
+                .setTpId(new TpId("XPDR1-NETWORK1"))
+                .setSupportingTerminationPoint(Map.of(supTermPointZ.key(), supTermPointZ))
+                .addAugmentation(otnTp1)
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
+                            .TerminationPoint1Builder()
+                        .setTpType(OpenroadmTpType.XPONDERNETWORK)
+                        .build())
+                .build()));
     }
 
-    private static Map<MappingKey,Mapping> createDegreeMappings(Map<MappingKey,Mapping> mappingMap,
-            int degNbStart, int degNbStop) {
+    private static Map<MappingKey,Mapping> createDegreeMappings(
+            Map<MappingKey,Mapping> mappingMap, int degNbStart, int degNbStop) {
         for (int i = degNbStart; i <= degNbStop; i++) {
             Mapping mapping = new MappingBuilder()
                 .setLogicalConnectionPoint("DEG" + i + "-TTP-TXRX")
@@ -247,17 +243,14 @@ public final class NetworkmodelTestUtil {
         return mappingMap;
     }
 
-    private static Map<MappingKey,Mapping> createXpdrMappings(Map<MappingKey,Mapping> mappingMap,
-            int networkPortNb, int clientPortNb,
-        XpdrNodeTypes xpdrNodeType) {
+    private static Map<MappingKey,Mapping> createXpdrMappings(
+            Map<MappingKey,Mapping> mappingMap, int networkPortNb, int clientPortNb, XpdrNodeTypes xpdrNodeType) {
         for (int i = 1; i <= networkPortNb; i++) {
-            Set<SupportedIfCapability> supportedIntf = new HashSet<>();
-            supportedIntf.add(IfOCH.VALUE);
             MappingBuilder mappingBldr = new MappingBuilder()
                 .setLogicalConnectionPoint("XPDR1-NETWORK" + i)
                 .setPortDirection("bidirectional")
                 .setSupportingPort("1")
-                .setSupportedInterfaceCapability(supportedIntf)
+                .setSupportedInterfaceCapability(new HashSet<>(Set.of(IfOCH.VALUE)))
                 .setConnectionMapLcp("XPDR1-CLIENT" + i)
                 .setPortQual(PortQual.XpdrNetwork.getName())
                 .setSupportingCircuitPackName("1/0/" + i + "-PLUG-NET");
@@ -268,13 +261,11 @@ public final class NetworkmodelTestUtil {
             mappingMap.put(mapping.key(),mapping);
         }
         for (int i = 1; i <= clientPortNb; i++) {
-            Set<SupportedIfCapability> supportedIntf = new HashSet<>();
-            supportedIntf.add(If100GE.VALUE);
             Mapping mapping = new MappingBuilder()
                 .setLogicalConnectionPoint("XPDR1-CLIENT" + i)
                 .setPortDirection("bidirectional")
                 .setSupportingPort("C1")
-                .setSupportedInterfaceCapability(supportedIntf)
+                .setSupportedInterfaceCapability(new HashSet<>(Set.of(If100GE.VALUE)))
                 .setConnectionMapLcp("XPDR1-NETWORK" + i)
                 .setPortQual(PortQual.XpdrClient.getName())
                 .setSupportingCircuitPackName("1/0/" + i + "-PLUG-CLIENT")
index 28f50657b9d1b5c7105151ab24bbe6baada34f10..7fc93b862757a8e1200168f9cb98b31e51b84151 100644 (file)
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
 <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
 <networks xmlns="urn:ietf:params:xml:ns:yang:ietf-network">
 <network>
@@ -37,8 +38,8 @@
       xmlns="http://org/openroadm/network/topology">
     <avail-freq-maps>
         <map-name>cband</map-name>
-        <start-edge-freq> 191.325</start-edge-freq>
-        <freq-map-granularity> 6.25</freq-map-granularity>
+        <start-edge-freq>191.325</start-edge-freq>
+        <freq-map-granularity>6.25</freq-map-granularity>
         <effective-bits>768</effective-bits>
         <freq-map>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         </freq-map>
       xmlns="http://org/openroadm/network/topology">
     <avail-freq-maps>
         <map-name>cband</map-name>
-        <start-edge-freq> 191.325</start-edge-freq>
-        <freq-map-granularity> 6.25</freq-map-granularity>
+        <start-edge-freq>191.325</start-edge-freq>
+        <freq-map-granularity>6.25</freq-map-granularity>
         <effective-bits>768</effective-bits>
         <freq-map>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         </freq-map>
       <degree-number>1</degree-number>
     <avail-freq-maps>
         <map-name>cband</map-name>
-        <start-edge-freq> 191.325</start-edge-freq>
-        <freq-map-granularity> 6.25</freq-map-granularity>
+        <start-edge-freq>191.325</start-edge-freq>
+        <freq-map-granularity>6.25</freq-map-granularity>
         <effective-bits>768</effective-bits>
         <freq-map>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         </freq-map>
-    </avail-freq-maps>     </degree-attributes>
+    </avail-freq-maps></degree-attributes>
     <supporting-node>
       <network-ref>clli-network</network-ref>
       <node-ref>NodeA</node-ref>
       <degree-number>2</degree-number>
     <avail-freq-maps>
         <map-name>cband</map-name>
-        <start-edge-freq> 191.325</start-edge-freq>
-        <freq-map-granularity> 6.25</freq-map-granularity>
+        <start-edge-freq>191.325</start-edge-freq>
+        <freq-map-granularity>6.25</freq-map-granularity>
         <effective-bits>768</effective-bits>
         <freq-map>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         </freq-map>
-    </avail-freq-maps>     </degree-attributes>
+    </avail-freq-maps></degree-attributes>
     <supporting-node>
       <network-ref>clli-network</network-ref>
       <node-ref>NodeA</node-ref>
       xmlns="http://org/openroadm/network/topology">
     <avail-freq-maps>
         <map-name>cband</map-name>
-        <start-edge-freq> 191.325</start-edge-freq>
-        <freq-map-granularity> 6.25</freq-map-granularity>
+        <start-edge-freq>191.325</start-edge-freq>
+        <freq-map-granularity>6.25</freq-map-granularity>
         <effective-bits>768</effective-bits>
         <freq-map>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         </freq-map>
-    </avail-freq-maps>     </srg-attributes>
+    </avail-freq-maps></srg-attributes>
     <supporting-node>
       <network-ref>clli-network</network-ref>
       <node-ref>NodeC</node-ref>
       <degree-number>1</degree-number>
     <avail-freq-maps>
         <map-name>cband</map-name>
-        <start-edge-freq> 191.325</start-edge-freq>
-        <freq-map-granularity> 6.25</freq-map-granularity>
+        <start-edge-freq>191.325</start-edge-freq>
+        <freq-map-granularity>6.25</freq-map-granularity>
         <effective-bits>768</effective-bits>
         <freq-map>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         </freq-map>
-    </avail-freq-maps>     </degree-attributes>
+    </avail-freq-maps></degree-attributes>
     <supporting-node>
       <network-ref>clli-network</network-ref>
       <node-ref>NodeC</node-ref>
       <degree-number>2</degree-number>
     <avail-freq-maps>
         <map-name>cband</map-name>
-        <start-edge-freq> 191.325</start-edge-freq>
-        <freq-map-granularity> 6.25</freq-map-granularity>
+        <start-edge-freq>191.325</start-edge-freq>
+        <freq-map-granularity>6.25</freq-map-granularity>
         <effective-bits>768</effective-bits>
         <freq-map>////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         </freq-map>
index 799a942f68e1eb6e8b18dddd07eaebb7e84cc9e3..c6b3cfce4b4bcb1b8fcc19becec62d7783095248 100644 (file)
@@ -13,17 +13,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-olm</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -65,7 +65,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
@@ -135,13 +135,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>mdsal-binding-generator</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <version>3.0.2</version>
-      <scope>test</scope>
-      <optional>true</optional>
-    </dependency>
   </dependencies>
 
   <build>
index 78c165b2be31c5738699d21220f6cfd6201ca17b..5fd005995ee26de1cfff0360faa6945496f683c2 100644 (file)
@@ -8,26 +8,18 @@
 
 package org.opendaylight.transportpce.olm;
 
-import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.transportpce.olm.rpc.impl.CalculateSpanlossBaseImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.CalculateSpanlossCurrentImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.GetPmImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.ServicePowerResetImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.ServicePowerSetupImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.ServicePowerTurndownImpl;
 import org.opendaylight.transportpce.olm.service.OlmPowerService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
-import org.opendaylight.yangtools.yang.common.ErrorType;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,131 +28,30 @@ import org.slf4j.LoggerFactory;
  * The Class OlmPowerServiceRpcImpl.
  */
 @Component
-public class OlmPowerServiceRpcImpl implements TransportpceOlmService {
+public class OlmPowerServiceRpcImpl {
     private static final Logger LOG = LoggerFactory.getLogger(OlmPowerServiceRpcImpl.class);
-    private final OlmPowerService olmPowerService;
+    private Registration rpcRegistration;
 
     @Activate
-    public OlmPowerServiceRpcImpl(@Reference OlmPowerService olmPowerService) {
-        this.olmPowerService = olmPowerService;
+    public OlmPowerServiceRpcImpl(@Reference OlmPowerService olmPowerService,
+            @Reference RpcProviderService rpcProviderService) {
+        this.rpcRegistration = rpcProviderService.registerRpcImplementations(
+            new GetPmImpl(olmPowerService),
+            new ServicePowerSetupImpl(olmPowerService),
+            new ServicePowerTurndownImpl(olmPowerService),
+            new CalculateSpanlossBaseImpl(olmPowerService),
+            new CalculateSpanlossCurrentImpl(olmPowerService),
+            new ServicePowerResetImpl(olmPowerService));
+        LOG.info("OlmPowerServiceRpcImpl instantiated");
     }
 
-    /**
-     * This method is the implementation of the 'get-pm' RESTCONF service, which
-     * is one of the external APIs into the olm application.
-     *
-     * <p>
-     * 1. get-pm This operation traverse through current PM list and gets PM for
-     * given NodeId and Resource name
-     *
-     * <p>
-     * The signature for this method was generated by yang tools from the
-     * olm API model.
-     *
-     * @param input
-     *            Input parameter from the olm yang model
-     *
-     * @return Result of the request
-     */
-    @Override
-    public ListenableFuture<RpcResult<GetPmOutput>> getPm(GetPmInput input) {
-        if (this.olmPowerService.getPm(input).getNodeId() == null) {
-            LOG.error("getPm: Error with input parameters");
-            return RpcResultBuilder.<GetPmOutput>failed()
-                    .withError(ErrorType.RPC, "Error with input parameters")
-                    .buildFuture();
-        }
-        return RpcResultBuilder.success(this.olmPowerService.getPm(input)).buildFuture();
+    @Deactivate
+    public void close() {
+        this.rpcRegistration.close();
+        LOG.info("OlmPowerServiceRpcImpl Closed");
     }
 
-    /**
-     * This method is the implementation of the 'service-power-setup' RESTCONF service, which
-     * is one of the external APIs into the olm application.
-     *
-     * <p>
-     * 1. service-power-setup: This operation performs following steps:
-     *    Step1: Calculate Spanloss on all links which are part of service.
-     *    TODO Step2: Calculate power levels for each Tp-Id
-     *    TODO Step3: Post power values on roadm connections
-     *
-     * <p>
-     * The signature for this method was generated by yang tools from the
-     * olm API model.
-     *
-     * @param input
-     *            Input parameter from the olm yang model
-     *            Input will contain nodeId and termination point
-     *
-     * @return Result of the request
-     */
-    @Override
-    public ListenableFuture<RpcResult<ServicePowerSetupOutput>> servicePowerSetup(
-            ServicePowerSetupInput input) {
-        return RpcResultBuilder.success(this.olmPowerService.servicePowerSetup(input)).buildFuture();
-    }
-
-    /**
-     * This method is the implementation of the 'service-power-trundown' RESTCONF service, which
-     * is one of the external APIs into the olm application.
-     *
-     * <p>
-     * 1. service-power-turndown: This operation performs following steps:
-     *    Step1: For each TP within Node sets interface outofservice .
-     *    Step2: For each roam-connection sets power to -60dbm
-     *    Step3: Turns power mode off
-     *
-     * <p>
-     * The signature for this method was generated by yang tools from the
-     * olm API model.
-     *
-     * @param input
-     *            Input parameter from the olm yang model
-     *            Input will contain nodeId and termination point
-     *
-     * @return Result of the request
-     */
-    @Override
-    public ListenableFuture<RpcResult<ServicePowerTurndownOutput>>
-        servicePowerTurndown(ServicePowerTurndownInput input) {
-        return RpcResultBuilder.success(this.olmPowerService.servicePowerTurndown(input)).buildFuture();
-    }
-
-    /**
-     * This method calculates Spanloss for all Roadm to Roadm links,
-     * part of active inventory in Network Model or for newly added links
-     * based on input src-type.
-     *
-     * <p>
-     * 1. Calculate-Spanloss-Base: This operation performs following steps:
-     *    Step1: Read all Roadm-to-Roadm links from network model or get data for given linkID.
-     *    Step2: Retrieve PMs for each end point for OTS interface
-     *    Step3: Calculates Spanloss
-     *    Step4: Posts calculated spanloss in Device and in network model
-     *
-     * <p>
-     * The signature for this method was generated by yang tools from the
-     * renderer API model.
-     *
-     * @param input
-     *            Input parameter from the olm yang model
-     *            Input will contain SourceType and linkId if srcType is Link
-     *
-     * @return Result of the request
-     */
-    @Override
-    public ListenableFuture<RpcResult<CalculateSpanlossBaseOutput>>
-        calculateSpanlossBase(CalculateSpanlossBaseInput input) {
-        return RpcResultBuilder.success(this.olmPowerService.calculateSpanlossBase(input)).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<CalculateSpanlossCurrentOutput>> calculateSpanlossCurrent(
-            CalculateSpanlossCurrentInput input) {
-        return RpcResultBuilder.success(this.olmPowerService.calculateSpanlossCurrent(input)).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServicePowerResetOutput>> servicePowerReset(ServicePowerResetInput input) {
-        return RpcResultBuilder.success(this.olmPowerService.servicePowerReset(input)).buildFuture();
+    public Registration getRegisteredRpc() {
+        return rpcRegistration;
     }
 }
diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/OlmProvider.java b/olm/src/main/java/org/opendaylight/transportpce/olm/OlmProvider.java
deleted file mode 100644 (file)
index 3a33a43..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright © 2017 AT&T and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.transportpce.olm;
-
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * The Class OlmProvider.
- */
-@Component
-public class OlmProvider {
-    private static final Logger LOG = LoggerFactory.getLogger(OlmProvider.class);
-    private ObjectRegistration<TransportpceOlmService> olmRPCRegistration;
-
-    /**
-     * Instantiates a new olm provider.
-     * @param olmPowerServiceRpc
-     *            implementation of TransportpceOlmService
-     * @param rpcProviderService
-     *            the rpc provider service
-     */
-    @Activate
-    public OlmProvider(@Reference final RpcProviderService rpcProviderService,
-            @Reference final TransportpceOlmService olmPowerServiceRpc) {
-        olmRPCRegistration = rpcProviderService.registerRpcImplementation(TransportpceOlmService.class,
-                olmPowerServiceRpc);
-        LOG.info("OlmProvider Session Initiated");
-    }
-
-    /**
-     * Method called when the blueprint container is destroyed.
-     */
-    @Deactivate
-    public void close() {
-        LOG.info("OlmProvider Closed");
-        // Clean up the RPC service registration
-        if (olmRPCRegistration != null) {
-            olmRPCRegistration.close();
-        }
-    }
-}
index fefd435565c06d8b2402ead37b43f2e2fa68c848..dda3592b2009a2f8af1404e7c4385e8dd87de256 100644 (file)
@@ -11,10 +11,12 @@ package org.opendaylight.transportpce.olm.power;
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
@@ -23,10 +25,10 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1;
@@ -195,8 +197,8 @@ public class PowerMgmtImpl implements PowerMgmt {
 
                     LOG.info("Spanloss TX is {}", spanLossTx);
                     // TODO: The span-loss limits should be obtained from optical specifications
-                    if (spanLossTx == null || spanLossTx.intValue() <= 0 || spanLossTx.intValue() > 27) {
-                        LOG.error("Power Value is null: spanLossTx null or out of openROADM range ]0,27] {}",
+                    if (spanLossTx == null || spanLossTx.intValue() < 0 || spanLossTx.intValue() > 27) {
+                        LOG.error("Power Value is null: spanLossTx null or out of openROADM range [0,27] {}",
                             spanLossTx);
                         return false;
                     }
@@ -534,8 +536,19 @@ public class PowerMgmtImpl implements PowerMgmt {
                         LOG.error(INTERFACE_NOT_PRESENT, interfaceName, nodeId);
                         return false;
                     }
+                    // Check the support-interface-cap type
+                    // Get the logical connection point name from the interface-name, by splitting it by "-"
+                    // and discard the last part. For instance XPDR1-NETWORK1-xxx:xxx
+                    String logicalConnectionPoint =
+                        Arrays.stream(interfaceName.split("-", 3)).limit(2).collect(Collectors.joining("-"));
+                    LOG.info("Logical connection point {} for Interface {}", logicalConnectionPoint, interfaceName);
+                    Mapping portMap = portMapping.getMapping(nodeId, logicalConnectionPoint);
+                    if (portMap == null) {
+                        throw new OpenRoadmInterfaceException(
+                                OpenRoadmInterfaceException.mapping_msg_err(nodeId, logicalConnectionPoint));
+                    }
                     powerSetupResult = PowerMgmtVersion710.setTransponderPower(nodeId, interfaceName,
-                            txPower, deviceTransactionManager, interfaceOptional710.orElseThrow());
+                        txPower, deviceTransactionManager, interfaceOptional710.orElseThrow(), portMap);
                     break;
                 default:
                     LOG.error("Unrecognized OpenRoadm version");
index abd9e2978dc28609ae808cd8b8a0cc9b5ca30d99..b62a01472228abfd8c86748357e72115b3b665e4 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.device.DeviceTransaction;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.OpticalControlMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.PowerDBm;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.OrgOpenroadmDeviceData;
@@ -36,9 +37,13 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.open
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.RoadmConnections;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev200529.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev200529.och.container.OchBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.Interface1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.Interface1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.tributary.signal.interfaces.rev200529.otsi.container.OtsiBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCH;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOtsiOtsigroup;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.slf4j.Logger;
@@ -154,24 +159,47 @@ public final class PowerMgmtVersion710 {
      * @return true/false based on status of operation
      */
     public static boolean setTransponderPower(String nodeId, String interfaceName, BigDecimal txPower,
-            DeviceTransactionManager deviceTransactionManager,
-            Interface interfaceObj) {
+            DeviceTransactionManager deviceTransactionManager, Interface interfaceObj, Mapping portMap) {
         LOG.debug("Setting target-power for transponder nodeId: {} InterfaceName: {}",
                 nodeId, interfaceName);
-        InterfaceBuilder otsiInterfaceBuilder = new InterfaceBuilder(interfaceObj);
-        OtsiBuilder otsiBuilder = new OtsiBuilder(otsiInterfaceBuilder.augmentation(Interface1.class).getOtsi());
-        otsiBuilder.setTransmitPower(new PowerDBm(Decimal64.valueOf(txPower)));
-        otsiInterfaceBuilder.addAugmentation(new Interface1Builder().setOtsi(otsiBuilder.build()).build());
+        // Transponder port can have a port-capability of 100 or 400G
+        // from port-mapping check if has OCH-OTU-ODU cap or OTSI cap
+        // need to set power for OCH port
+        InterfaceBuilder ochOtsiInterfaceBuilder = new InterfaceBuilder(interfaceObj);
+        if (portMap.getSupportedInterfaceCapability().contains(IfOCHOTU4ODU4.VALUE)
+                || portMap.getSupportedInterfaceCapability().contains(IfOCH.VALUE)) {
+            ochOtsiInterfaceBuilder
+                .addAugmentation(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev200529
+                            .Interface1Builder()
+                        .setOch(
+                            new OchBuilder(
+                                    ochOtsiInterfaceBuilder
+                                        .augmentation(org.opendaylight.yang.gen.v1.http
+                                            .org.openroadm.optical.channel.interfaces.rev200529.Interface1.class)
+                                        .getOch())
+                                .setTransmitPower(new PowerDBm(Decimal64.valueOf(txPower)))
+                                .build())
+                        .build());
+        } else if (portMap.getSupportedInterfaceCapability().contains(IfOtsiOtsigroup.VALUE)) {
+            ochOtsiInterfaceBuilder
+                .addAugmentation(
+                    new Interface1Builder()
+                        .setOtsi(
+                            new OtsiBuilder(ochOtsiInterfaceBuilder.augmentation(Interface1.class).getOtsi())
+                                .setTransmitPower(new PowerDBm(Decimal64.valueOf(txPower)))
+                                .build())
+                        .build());
+        }
         Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(nodeId);
         DeviceTransaction deviceTx;
         try {
             Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
-            if (deviceTxOpt.isPresent()) {
-                deviceTx = deviceTxOpt.orElseThrow();
-            } else {
+            if (deviceTxOpt.isEmpty()) {
                 LOG.error("Transaction for device {} was not found during transponder power setup for Node:", nodeId);
                 return false;
             }
+            deviceTx = deviceTxOpt.orElseThrow();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error("Unable to get transaction for device {} during transponder power setup!", nodeId, e);
             return false;
@@ -180,7 +208,7 @@ public final class PowerMgmtVersion710 {
             .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
             .child(Interface.class, new InterfaceKey(interfaceName))
             .build();
-        deviceTx.merge(LogicalDatastoreType.CONFIGURATION, interfacesIID, otsiInterfaceBuilder.build());
+        deviceTx.merge(LogicalDatastoreType.CONFIGURATION, interfacesIID, ochOtsiInterfaceBuilder.build());
         FluentFuture<? extends @NonNull CommitInfo> commit =
             deviceTx.commit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
         try {
diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/CalculateSpanlossBaseImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/CalculateSpanlossBaseImpl.java
new file mode 100644 (file)
index 0000000..95d0e59
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.olm.rpc.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.olm.service.OlmPowerService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBase;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+
+
+/**
+ * This class calculates Spanloss for all Roadm to Roadm links,
+ * part of active inventory in Network Model or for newly added links
+ * based on input src-type.
+ *
+ * <p>
+ * 1. Calculate-Spanloss-Base: This operation performs following steps:
+ *    Step1: Read all Roadm-to-Roadm links from network model or get data for given linkID.
+ *    Step2: Retrieve PMs for each end point for OTS interface
+ *    Step3: Calculates Spanloss
+ *    Step4: Posts calculated spanloss in Device and in network model
+ *
+ * <p>
+ * The signature for this method was generated by yang tools from the
+ * renderer API model.
+ */
+public class CalculateSpanlossBaseImpl implements CalculateSpanlossBase {
+    private final OlmPowerService olmPowerService;
+
+    public CalculateSpanlossBaseImpl(final OlmPowerService olmPowerService) {
+        this.olmPowerService = requireNonNull(olmPowerService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CalculateSpanlossBaseOutput>> invoke(CalculateSpanlossBaseInput input) {
+        return RpcResultBuilder.success(this.olmPowerService.calculateSpanlossBase(input)).buildFuture();
+    }
+
+}
diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/CalculateSpanlossCurrentImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/CalculateSpanlossCurrentImpl.java
new file mode 100644 (file)
index 0000000..701e7b0
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.olm.rpc.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.olm.service.OlmPowerService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrent;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+
+public class CalculateSpanlossCurrentImpl implements CalculateSpanlossCurrent {
+    private final OlmPowerService olmPowerService;
+
+    public CalculateSpanlossCurrentImpl(final OlmPowerService olmPowerService) {
+        this.olmPowerService = requireNonNull(olmPowerService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CalculateSpanlossCurrentOutput>> invoke(CalculateSpanlossCurrentInput input) {
+        return RpcResultBuilder.success(this.olmPowerService.calculateSpanlossCurrent(input)).buildFuture();
+    }
+
+}
diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/GetPmImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/GetPmImpl.java
new file mode 100644 (file)
index 0000000..5aae1cf
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.olm.rpc.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.olm.service.OlmPowerService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPm;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class is the implementation of the 'get-pm' RESTCONF service, which
+ * is one of the external APIs into the olm application.
+ *
+ *<p>
+ * This operation traverse through current PM list and gets PM for
+ * given NodeId and Resource name
+ */
+public final class GetPmImpl implements GetPm {
+    private static final Logger LOG = LoggerFactory.getLogger(GetPmImpl.class);
+    private final OlmPowerService olmPowerService;
+
+    public GetPmImpl(final OlmPowerService olmPowerService) {
+        this.olmPowerService = requireNonNull(olmPowerService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetPmOutput>> invoke(final GetPmInput input) {
+        if (input.getNodeId() == null) {
+            LOG.error("getPm: NodeId can not be null");
+            return RpcResultBuilder.<GetPmOutput>failed()
+                    .withError(ErrorType.RPC, "Error with input parameters")
+                    .buildFuture();
+        }
+        return RpcResultBuilder.success(this.olmPowerService.getPm(input)).buildFuture();
+    }
+}
diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerResetImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerResetImpl.java
new file mode 100644 (file)
index 0000000..3ac09c0
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.olm.rpc.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.olm.service.OlmPowerService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerReset;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+
+public class ServicePowerResetImpl implements ServicePowerReset {
+    private final OlmPowerService olmPowerService;
+
+    public ServicePowerResetImpl(final OlmPowerService olmPowerService) {
+        this.olmPowerService = requireNonNull(olmPowerService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServicePowerResetOutput>> invoke(ServicePowerResetInput input) {
+        return RpcResultBuilder.success(this.olmPowerService.servicePowerReset(input)).buildFuture();
+    }
+
+}
diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerSetupImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerSetupImpl.java
new file mode 100644 (file)
index 0000000..4b798c5
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.olm.rpc.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.olm.service.OlmPowerService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetup;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+/**
+ * This class is the implementation of the 'service-power-setup' RESTCONF service, which
+ * is one of the external APIs into the olm application.
+ *
+ * <p>
+ * 1. service-power-setup: This operation performs following steps:
+ *    Step1: Calculate Spanloss on all links which are part of service.
+ *    TODO Step2: Calculate power levels for each Tp-Id
+ *    TODO Step3: Post power values on roadm connections
+ *
+ * <p>
+ * The signature for this method was generated by yang tools from the
+ * olm API model.
+ */
+public class ServicePowerSetupImpl implements ServicePowerSetup {
+    private final OlmPowerService olmPowerService;
+
+    public ServicePowerSetupImpl(final OlmPowerService olmPowerService) {
+        this.olmPowerService = requireNonNull(olmPowerService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServicePowerSetupOutput>> invoke(ServicePowerSetupInput input) {
+        return RpcResultBuilder.success(this.olmPowerService.servicePowerSetup(input)).buildFuture();
+    }
+
+}
diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerTurndownImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/rpc/impl/ServicePowerTurndownImpl.java
new file mode 100644 (file)
index 0000000..a250d93
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.olm.rpc.impl;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.olm.service.OlmPowerService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndown;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+/**
+ * This class is the implementation of the 'service-power-trundown' RESTCONF service, which
+ * is one of the external APIs into the olm application.
+ *
+ * <p>
+ * 1. service-power-turndown: This operation performs following steps:
+ *    Step1: For each TP within Node sets interface outofservice .
+ *    Step2: For each roam-connection sets power to -60dbm
+ *    Step3: Turns power mode off
+ *
+ * <p>
+ * The signature for this method was generated by yang tools from the
+ * olm API model.
+ */
+public class ServicePowerTurndownImpl implements ServicePowerTurndown {
+    private final OlmPowerService olmPowerService;
+
+    public ServicePowerTurndownImpl(final OlmPowerService olmPowerService) {
+        this.olmPowerService = requireNonNull(olmPowerService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServicePowerTurndownOutput>> invoke(ServicePowerTurndownInput input) {
+        return RpcResultBuilder.success(this.olmPowerService.servicePowerTurndown(input)).buildFuture();
+    }
+
+}
index a8c18aa494297014aef31be955c0831f08142ca5..e04a12c94c301cfe277038650331cbd46c58d167 100644 (file)
@@ -62,13 +62,13 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev21
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.calculate.spanloss.base.output.Spans;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.calculate.spanloss.base.output.SpansBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.RatioDB;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.Ots;
index 370e1486aff16d2d6947fe67986bc64889405e7c..da279062b56db767b27911072426546c1e0635be 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.transportpce.olm.util;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index a75623d65bffadf8930e1bd19d89e3f274c9a42b..19ed220051652313d58371cb154aac760a8f6562 100644 (file)
 package org.opendaylight.transportpce.olm;
 
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
 
 import com.google.common.util.concurrent.ListenableFuture;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
 import java.util.concurrent.ExecutionException;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.Mockito;
-import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.MountPointService;
-import org.opendaylight.transportpce.common.StringConstants;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl710;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
-import org.opendaylight.transportpce.common.mapping.MappingUtils;
-import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
-import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
-import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
-import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
-import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
-import org.opendaylight.transportpce.olm.power.PowerMgmt;
-import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.transportpce.olm.rpc.impl.CalculateSpanlossBaseImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.CalculateSpanlossCurrentImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.GetPmImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.ServicePowerResetImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.ServicePowerSetupImpl;
+import org.opendaylight.transportpce.olm.rpc.impl.ServicePowerTurndownImpl;
 import org.opendaylight.transportpce.olm.service.OlmPowerService;
-import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
-import org.opendaylight.transportpce.olm.stub.MountPointServiceStub;
-import org.opendaylight.transportpce.olm.stub.MountPointStub;
 import org.opendaylight.transportpce.olm.util.OlmPowerServiceRpcImplUtil;
 import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.CurrentPmlist;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.CurrentPmlistBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.current.pm.LayerRateBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.current.pm.Measurements;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.current.pm.MeasurementsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.current.pm.measurements.MeasurementBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.currentpmlist.CurrentPm;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.currentpmlist.CurrentPmBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.currentpmlist.CurrentPmKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmDataType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmGranularity;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmNamesEnum;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.pm.measurement.PmParameterNameBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.resource.DeviceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.resource.ResourceTypeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.resource.resource.resource.CircuitPackBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.ResourceTypeEnum;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.PmGranularity;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.olm.get.pm.input.ResourceIdentifierBuilder;
+import org.opendaylight.yangtools.yang.common.ErrorSeverity;
+import org.opendaylight.yangtools.yang.common.ErrorTag;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.opendaylight.yangtools.yang.common.Uint64;
 
-public class OlmPowerServiceRpcImplTest extends AbstractTest {
+@ExtendWith(MockitoExtension.class)
+class OlmPowerServiceRpcImplTest extends AbstractTest {
 
-    private MountPoint mountPoint;
-    private MountPointService mountPointService;
-    private DeviceTransactionManager deviceTransactionManager;
-    private CrossConnect crossConnect;
-    private OpenRoadmInterfaces openRoadmInterfaces;
-    private PortMapping portMapping;
-    private PowerMgmt powerMgmt;
+    @Mock
     private OlmPowerService olmPowerService;
-    private OlmPowerServiceRpcImpl olmPowerServiceRpc;
-    private CrossConnectImpl121 crossConnectImpl121;
-    private CrossConnectImpl221 crossConnectImpl22;
-    private CrossConnectImpl710 crossConnectImpl710;
-    private MappingUtils mappingUtils;
-    private OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121;
-    private OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl22;
-    private OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710;
-    private PortMappingVersion710 portMappingVersion710;
-    private PortMappingVersion221 portMappingVersion22;
-    private PortMappingVersion121 portMappingVersion121;
-
-    @BeforeEach
-    public void setUp() {
-        this.mountPoint = new MountPointStub(getDataBroker());
-        this.mountPointService = new MountPointServiceStub(mountPoint);
-        this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
-        this.mappingUtils = Mockito.spy(new MappingUtilsImpl(getDataBroker()));
-        Mockito.doReturn(StringConstants.OPENROADM_DEVICE_VERSION_1_2_1).when(mappingUtils)
-                .getOpenRoadmVersion(Mockito.anyString());
-        this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
-        this.crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
-        this.crossConnectImpl22 = new CrossConnectImpl221(deviceTransactionManager);
-        this.crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
-        this.crossConnect = new CrossConnectImpl(deviceTransactionManager, this.mappingUtils, this.crossConnectImpl121,
-                this.crossConnectImpl22, this.crossConnectImpl710);
-        this.portMappingVersion710 = new PortMappingVersion710(getDataBroker(), deviceTransactionManager);
-        this.portMappingVersion22 = new PortMappingVersion221(getDataBroker(), deviceTransactionManager);
-        this.portMappingVersion121 = new PortMappingVersion121(getDataBroker(), deviceTransactionManager);
-        this.portMapping = new PortMappingImpl(getDataBroker(), this.portMappingVersion710,
-            this.portMappingVersion22, this.portMappingVersion121);
-        this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager);
-        this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager, this.portMapping);
-        this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(deviceTransactionManager, this.portMapping);
-        this.openRoadmInterfaces = new OpenRoadmInterfacesImpl((this.deviceTransactionManager),
-                this.mappingUtils,this.openRoadmInterfacesImpl121,this.openRoadmInterfacesImpl22,
-            this.openRoadmInterfacesImpl710);
-        this.portMapping = Mockito.spy(this.portMapping);
-        this.powerMgmt = new PowerMgmtImpl(this.openRoadmInterfaces, this.crossConnect,
-            this.deviceTransactionManager, this.portMapping, 1000, 1000);
-        this.olmPowerService = new OlmPowerServiceImpl(getDataBroker(), this.powerMgmt,
-            this.deviceTransactionManager, this.portMapping,mappingUtils,openRoadmInterfaces);
-        this.olmPowerServiceRpc = new OlmPowerServiceRpcImpl(this.olmPowerService);
-        //TODO
-        this.olmPowerServiceRpc = Mockito.mock(OlmPowerServiceRpcImpl.class);
-    }
-
-    @Test
-    public void pmIsNotPresentTest() throws ExecutionException, InterruptedException {
-        GetPmInput input = OlmPowerServiceRpcImplUtil.getGetPmInput();
-        //TODO
-//        ListenableFuture<RpcResult<GetPmOutput>> output = this.olmPowerServiceRpc.getPm(input);
-//        assertEquals(new GetPmOutputBuilder().build(), output.get().getResult());
-//        assertEquals(null, output.get().getResult().getResourceId());
-//        assertEquals(null, output.get().getResult().getMeasurements());
-//        assertEquals(null, output.get().getResult().getGranularity());
-//        assertEquals(null, output.get().getResult().getNodeId());
-//        assertEquals(null, output.get().getResult().getResourceIdentifier());
-//        assertEquals(null, output.get().getResult().getResourceType());
-    }
+    @Mock
+    private RpcProviderService rpcProviderService;
 
     @Test
-    public void testGetPm1() throws ExecutionException, InterruptedException {
-        Measurements measurements = new MeasurementsBuilder().setMeasurement(
-            new MeasurementBuilder()
-                .setPmParameterUnit("unit")
-                .setPmParameterName(new PmParameterNameBuilder()
-                .setExtension("123")
-                .setType(PmNamesEnum.DefectSeconds).build())
-                .setPmParameterValue(new PmDataType(Uint64.valueOf(1234))).build())
-            .build();
-        List<Measurements> measurementsList = new ArrayList<Measurements>();
-        measurementsList.add(measurements);
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.resource.Resource resource =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.resource.ResourceBuilder()
-                .setResource(new CircuitPackBuilder().setCircuitPackName("circuit pack name").build()).build();
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.current.pm.Resource resource2 =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.current.pm.ResourceBuilder()
-                .setDevice(new DeviceBuilder().setNodeId("node 1").build())
-                .setResourceType(new ResourceTypeBuilder()
-                    .setExtension("123")
-                    .setType(ResourceTypeEnum.Device).build())
-                .setResource(resource).build();
-        CurrentPm currentPm = new CurrentPmBuilder()
+    void testGetPmFailWithNodeIdNull() throws InterruptedException, ExecutionException {
+        GetPmInput input = new GetPmInputBuilder()
             .setGranularity(PmGranularity._15min)
-            .setId("id")
-            .setLayerRate(new LayerRateBuilder().build())
-            .setMeasurements(measurementsList)
-            .setResource(resource2)
-            .setRetrievalTime(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715
-                .DateAndTime("2018-11-01T12:00:31.456449+06:00")).build();
-
-        Map<CurrentPmKey, CurrentPm> currentPmList = new HashMap<>();
-        currentPmList.put(currentPm.key(),currentPm);
-
-        Optional<CurrentPmlist> currentPmlistOptional = Optional.of(new CurrentPmlistBuilder()
-            .setCurrentPm(currentPmList).build());
-
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements
-            measurements1 = new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm
-                .output.MeasurementsBuilder().setPmparameterName("name").setPmparameterValue("1234").build();
-
-
-        List<org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output
-            .Measurements> measurementsList1 = new ArrayList<>();
-        measurementsList1.add(measurements1);
-
-        GetPmInput input = OlmPowerServiceRpcImplUtil.getGetPmInput();
-        GetPmOutputBuilder pmOutputBuilder = new GetPmOutputBuilder().setNodeId(input.getNodeId())
-            .setResourceType(input.getResourceType())
-            .setResourceIdentifier(input.getResourceIdentifier())
-            .setGranularity(input.getGranularity())
-            .setMeasurements(measurementsList1);
-
-
-        ListenableFuture<RpcResult<GetPmOutput>> output = this.olmPowerServiceRpc.getPm(input);
-        //TODO
-//        assertEquals(new GetPmOutputBuilder().build(), output.get().getResult());
-//        assertEquals(null, output.get().getResult().getResourceId());
+            .setResourceIdentifier(new ResourceIdentifierBuilder()
+                    .setResourceName("ots-deg1").build())
+            .setResourceType(ResourceTypeEnum.Interface)
+            .build();
+        ListenableFuture<RpcResult<GetPmOutput>> output = new GetPmImpl(olmPowerService).invoke(input);
+        assertFalse(output.get().isSuccessful());
+        assertNull(output.get().getResult());
+        assertEquals(ErrorType.RPC, output.get().getErrors().get(0).getErrorType());
+        assertEquals("Error with input parameters", output.get().getErrors().get(0).getMessage());
+        assertEquals(ErrorSeverity.ERROR, output.get().getErrors().get(0).getSeverity());
+        assertEquals(ErrorTag.OPERATION_FAILED, output.get().getErrors().get(0).getTag());
     }
 
-//    @Test
-//    public void testGetPm2() throws ExecutionException, InterruptedException {
-//        this.olmPowerService = Mockito.spy(this.olmPowerService);
-//        GetPmInput input = new GetPmInputBuilder().setGranularity(PmGranularity._15min).setNodeId("node1")
-//            .setResourceIdentifier(new ResourceIdentifierBuilder().setCircuitPackName("circuit pack name")
-//                .setResourceName("resource name").build()).setResourceType(ResourceTypeEnum.Device).build();
-//        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output.Measurements
-//        measurements1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm
-//            .output.MeasurementsBuilder().setPmparameterName("name").setPmparameterValue("1234").build();
-//
-//
-//        List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output
-//            .Measurements> measurementsList1 = new ArrayList<>();
-//        measurementsList1.add(measurements1);
-//
-//        GetPmOutputBuilder pmOutputBuilder = new GetPmOutputBuilder().setNodeId(input.getNodeId())
-//            .setResourceType(input.getResourceType())
-//            .setResourceIdentifier(input.getResourceIdentifier())
-//            .setGranularity(input.getGranularity())
-//            .setMeasurements(measurementsList1);
-//
-//        Mockito.doReturn(pmOutputBuilder.build()).when(this.olmPowerService).getPm(Mockito.any());
-//        ListenableFuture<RpcResult<GetPmOutput>> output = this.olmPowerServiceRpc.getPm(input);
-//        assertEquals(pmOutputBuilder.build(), output.get().getResult());
-//        assertEquals(true, output.get().isSuccessful());
-//    }
-
     @Test
-    public void testGetPm3() throws ExecutionException, InterruptedException {
-        GetPmInput input = OlmPowerServiceRpcImplUtil.getGetPmInput();
-        ListenableFuture<RpcResult<GetPmOutput>> output = this.olmPowerServiceRpc.getPm(input);
-        //TODO
-//        assertEquals(new GetPmOutputBuilder().build(), output.get().getResult());
-//        assertEquals(null, output.get().getResult().getResourceId());
-//        assertEquals(null, output.get().getResult().getMeasurements());
-//        assertEquals(null, output.get().getResult().getGranularity());
-//        assertEquals(null, output.get().getResult().getNodeId());
-//        assertEquals(null, output.get().getResult().getResourceIdentifier());
-//        assertEquals(null, output.get().getResult().getResourceType());
+    void testGetPmWithSuccess() throws InterruptedException, ExecutionException {
+        GetPmInput input = new GetPmInputBuilder()
+            .setNodeId("nodeId")
+            .build();
+        when(this.olmPowerService.getPm(any())).thenReturn(new GetPmOutputBuilder().build());
+        ListenableFuture<RpcResult<GetPmOutput>> output = new GetPmImpl(olmPowerService).invoke(input);
+        assertTrue(output.get().isSuccessful());
+        assertEquals(new GetPmOutputBuilder().build(), output.get().getResult());
     }
 
     @Test
-    public void testServicePowerSetup1() throws ExecutionException, InterruptedException {
+    void testServicePowerSetup() throws InterruptedException, ExecutionException {
         ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput();
-        //TODO
-        Mockito.when(this.olmPowerServiceRpc.servicePowerSetup(Mockito.any()))
-                .thenReturn(RpcResultBuilder.success(new ServicePowerSetupOutputBuilder()
-                        .setResult("Success").build()).buildFuture());
-        ListenableFuture<RpcResult<ServicePowerSetupOutput>> output = this.olmPowerServiceRpc.servicePowerSetup(input);
-        assertEquals(new ServicePowerSetupOutputBuilder().setResult("Success").build(), output.get()
-                .getResult());
-        assertEquals("Success", output.get().getResult().getResult());
-        assertEquals(true, output.get().isSuccessful());
+        when(this.olmPowerService.servicePowerSetup(any())).thenReturn(new ServicePowerSetupOutputBuilder().build());
+        ListenableFuture<RpcResult<ServicePowerSetupOutput>> output =
+            new ServicePowerSetupImpl(olmPowerService).invoke(input);
+        assertTrue(output.get().isSuccessful());
+        assertEquals(new ServicePowerSetupOutputBuilder().build(), output.get().getResult());
     }
 
-
     @Test
-    public void testServicePowerTurndown1() throws ExecutionException, InterruptedException {
+    void testServicePowerTurndown() throws InterruptedException, ExecutionException {
         ServicePowerTurndownInput input = OlmPowerServiceRpcImplUtil.getServicePowerTurndownInput();
-        //TODO
-        Mockito.when(this.olmPowerServiceRpc.servicePowerTurndown(Mockito.any()))
-                .thenReturn(RpcResultBuilder.success(new ServicePowerTurndownOutputBuilder()
-                        .setResult("Success").build()).buildFuture());
-        ListenableFuture<RpcResult<ServicePowerTurndownOutput>> output = this.olmPowerServiceRpc
-            .servicePowerTurndown(input);
-        assertEquals(new ServicePowerTurndownOutputBuilder().setResult("Success").build(), output.get()
-            .getResult());
-        assertEquals("Success", output.get().getResult().getResult());
-        assertEquals(true, output.get().isSuccessful());
+        when(this.olmPowerService.servicePowerTurndown(any()))
+            .thenReturn(new ServicePowerTurndownOutputBuilder().build());
+        var output = new ServicePowerTurndownImpl(olmPowerService).invoke(input);
+        assertTrue(output.get().isSuccessful());
+        assertEquals(new ServicePowerTurndownOutputBuilder().build(), output.get().getResult());
     }
 
-    /*
     @Test
-    public void testCalculateSpanlossBase1() throws ExecutionException, InterruptedException {
-        CalculateSpanlossBaseInput input = OlmPowerServiceRpcImplUtil.getCalculateSpanlossBaseInput();
-        //TODO
-        Mockito.when(this.olmPowerServiceRpc.calculateSpanlossBase(Mockito.any()))
-                .thenReturn(RpcResultBuilder.success(new CalculateSpanlossBaseOutputBuilder()
-                        .setResult("Failed").build()).buildFuture());
-        ListenableFuture<RpcResult<CalculateSpanlossBaseOutput>> output = this.olmPowerServiceRpc
-            .calculateSpanlossBase(input);
-        assertEquals(new CalculateSpanlossBaseOutputBuilder().setResult("Failed").build(),
-            output.get().getResult());
-        assertEquals("Failed", output.get().getResult().getResult());
-        assertEquals(true, output.get().isSuccessful());
-    }*/
+    void testCalculateSpanlossBase() throws InterruptedException, ExecutionException {
+        CalculateSpanlossBaseInput input = OlmPowerServiceRpcImplUtil.getCalculateSpanlossBaseInputAll();
+        when(this.olmPowerService.calculateSpanlossBase(any()))
+            .thenReturn(new CalculateSpanlossBaseOutputBuilder().build());
+        var output = new CalculateSpanlossBaseImpl(olmPowerService).invoke(input);
+        assertTrue(output.get().isSuccessful());
+        assertEquals(new CalculateSpanlossBaseOutputBuilder().build(), output.get().getResult());
+    }
 
-    //TODO
-/**    @Test
-    public void testCalculateSpanlossCurrent1() throws ExecutionException, InterruptedException {
-        CalculateSpanlossCurrentInput input = OlmPowerServiceRpcImplUtil.getCalculateSpanlossCurrentInput();
-        //TODO
-        Mockito.when(this.olmPowerServiceRpc.calculateSpanlossCurrent(Mockito.any()))
-                .thenReturn(RpcResultBuilder.success(new CalculateSpanlossCurrentOutputBuilder()
-                        .setResult("success").build()).buildFuture());
-        ListenableFuture<RpcResult<CalculateSpanlossCurrentOutput>> output = this.olmPowerServiceRpc
-            .calculateSpanlossCurrent(input);
-        assertEquals(null, output.get().getResult());
-        assertEquals(true, output.get().isSuccessful());
+    @Test
+    void testCalculateSpanlossCurrent() throws InterruptedException, ExecutionException {
+        CalculateSpanlossCurrentInput input = new CalculateSpanlossCurrentInputBuilder().build();
+        when(this.olmPowerService.calculateSpanlossCurrent(any()))
+            .thenReturn(new CalculateSpanlossCurrentOutputBuilder().build());
+        var output = new CalculateSpanlossCurrentImpl(olmPowerService).invoke(input);
+        assertTrue(output.get().isSuccessful());
+        assertEquals(new CalculateSpanlossCurrentOutputBuilder().build(), output.get().getResult());
     }
 
     @Test
-    public void testServicePowerResetInput() throws ExecutionException, InterruptedException {
+    void testServicePowerReset() throws InterruptedException, ExecutionException {
         ServicePowerResetInput input = OlmPowerServiceRpcImplUtil.getServicePowerResetInput();
-        //TODO
-        Mockito.when(this.olmPowerServiceRpc.calculateSpanlossCurrent(Mockito.any()))
-                .thenReturn(RpcResultBuilder.success(new CalculateSpanlossCurrentOutputBuilder()
-                        .setResult(null).build()).buildFuture());
-        ListenableFuture<RpcResult<ServicePowerResetOutput>> output = this.olmPowerServiceRpc
-            .servicePowerReset(input);
-        assertEquals(null, output.get().getResult());
-        assertEquals(true, output.get().isSuccessful());
+        when(this.olmPowerService.servicePowerReset(any()))
+            .thenReturn(new ServicePowerResetOutputBuilder().build());
+        var output = new ServicePowerResetImpl(olmPowerService).invoke(input);
+        assertTrue(output.get().isSuccessful());
+        assertEquals(new ServicePowerResetOutputBuilder().build(), output.get().getResult());
     }
-**/
 }
diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtPowerMockTest.java b/olm/src/test/java/org/opendaylight/transportpce/olm/power/PowerMgmtPowerMockTest.java
deleted file mode 100644 (file)
index 62fdb6b..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright © 2019 Orange, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.transportpce.olm.power;
-
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatchers;
-import org.mockito.Mockito;
-import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.MountPointService;
-import org.opendaylight.transportpce.common.StringConstants;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl710;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
-import org.opendaylight.transportpce.common.mapping.MappingUtils;
-import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
-import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
-import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
-import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
-import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
-import org.opendaylight.transportpce.olm.stub.MountPointServiceStub;
-import org.opendaylight.transportpce.olm.stub.MountPointStub;
-import org.opendaylight.transportpce.olm.util.OlmPowerServiceRpcImplUtil;
-import org.opendaylight.transportpce.olm.util.OlmUtils;
-import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.RatioDB;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.Ots;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.OtsBuilder;
-import org.opendaylight.yangtools.yang.common.Decimal64;
-
-@Disabled
-public class PowerMgmtPowerMockTest extends AbstractTest {
-
-    private MountPoint mountPoint;
-    private MountPointService mountPointService;
-    private DeviceTransactionManager deviceTransactionManager;
-    private CrossConnect crossConnect;
-    private OpenRoadmInterfaces openRoadmInterfaces;
-    private PortMapping portMapping;
-    private PowerMgmt powerMgmt;
-    private CrossConnectImpl121 crossConnectImpl121;
-    private CrossConnectImpl221 crossConnectImpl22;
-    private CrossConnectImpl710 crossConnectImpl710;
-    private MappingUtils mappingUtils;
-    private OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121;
-    private OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl22;
-    private OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710;
-    private PortMappingVersion710 portMappingVersion710;
-    private PortMappingVersion221 portMappingVersion22;
-    private PortMappingVersion121 portMappingVersion121;
-
-    @BeforeEach
-    void setUp() {
-        this.mountPoint = new MountPointStub(getDataBroker());
-        this.mountPointService = new MountPointServiceStub(mountPoint);
-        this.mappingUtils = new MappingUtilsImpl(getDataBroker());
-        this.mappingUtils = Mockito.spy(new MappingUtilsImpl(getDataBroker()));
-        Mockito.doReturn(StringConstants.OPENROADM_DEVICE_VERSION_1_2_1).when(mappingUtils)
-                .getOpenRoadmVersion(Mockito.anyString());
-        this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
-        this.crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
-        this.crossConnectImpl22 = new CrossConnectImpl221(deviceTransactionManager);
-        this.crossConnect = new CrossConnectImpl(deviceTransactionManager, this.mappingUtils, this.crossConnectImpl121,
-                this.crossConnectImpl22, this.crossConnectImpl710);
-        this.portMappingVersion22 = new PortMappingVersion221(getDataBroker(), deviceTransactionManager);
-        this.portMappingVersion121 = new PortMappingVersion121(getDataBroker(), deviceTransactionManager);
-        this.portMappingVersion710 = new PortMappingVersion710(getDataBroker(), deviceTransactionManager);
-        this.portMapping = new PortMappingImpl(getDataBroker(), this.portMappingVersion710,
-            this.portMappingVersion22, this.portMappingVersion121);
-        this.openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager);
-        this.openRoadmInterfacesImpl22 = new OpenRoadmInterfacesImpl221(deviceTransactionManager, this.portMapping);
-        this.openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(deviceTransactionManager, this.portMapping);
-        this.openRoadmInterfaces = new OpenRoadmInterfacesImpl((this.deviceTransactionManager),
-                this.mappingUtils,this.openRoadmInterfacesImpl121,this.openRoadmInterfacesImpl22,
-            this.openRoadmInterfacesImpl710);
-        this.openRoadmInterfaces = Mockito.spy(this.openRoadmInterfaces);
-        this.portMapping = Mockito.spy(this.portMapping);
-        this.powerMgmt = new PowerMgmtImpl(this.openRoadmInterfaces, this.crossConnect,
-                this.deviceTransactionManager, this.portMapping, 1000, 1000);
-    }
-
-    @Test
-    void testSetPowerMockingUtil() {
-        Mockito.mockStatic(OlmUtils.class);
-        Mockito.when(this.portMapping.getNode(Mockito.anyString()))
-                .thenReturn(getXpdrNodesFromNodesBuilderDeg());
-        ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput2();
-        boolean output = this.powerMgmt.setPower(input);
-        assertEquals(false, output);
-
-    }
-
-    @Test
-    void testSetPowerMockingUtilNetwokType() throws OpenRoadmInterfaceException {
-        Mockito.mockStatic(OlmUtils.class);
-        Mockito.mockStatic(PowerMgmtVersion121.class);
-        Mockito.when(this.portMapping.getNode(Mockito.anyString()))
-                .thenReturn(getXpdrNodesFromNodesBuilderNetwork());
-        Map<String, Double> txPowerRangeMap = new HashMap<>();
-        Mockito.when(PowerMgmtVersion121.getXponderPowerRange(
-                Mockito.anyString(), Mockito.anyString(), Mockito.anyString(),
-                ArgumentMatchers.eq(deviceTransactionManager)))
-                .thenReturn(txPowerRangeMap);
-        ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput2();
-        OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121Spy = Mockito.mock(OpenRoadmInterfacesImpl121.class);
-        Mockito.when(openRoadmInterfacesImpl121Spy.getInterface(Mockito.anyString(), Mockito.anyString()))
-                .thenReturn(Optional.empty());
-        PowerMgmtImpl powerMgmtImpl = getNewPowerMgmt(openRoadmInterfacesImpl121Spy,this.crossConnect);
-        boolean output = powerMgmtImpl.setPower(input);
-        assertEquals(true, output);
-
-    }
-
-    @Test
-    void testSetPowerMockingUtilNetwokTypeMoreThanOneNode() throws OpenRoadmInterfaceException {
-        Mockito.mockStatic(OlmUtils.class);
-        Mockito.mockStatic(PowerMgmtVersion121.class);
-        Mockito.when(this.portMapping.getNode(Mockito.anyString()))
-                .thenReturn(getXpdrNodesFromNodesBuilderNetwork());
-        Map<String, Double> txPowerRangeMap = new HashMap<>();
-        Mockito.when(PowerMgmtVersion121
-                .getXponderPowerRange(Mockito.anyString(), Mockito.anyString(), Mockito.anyString(),
-                        ArgumentMatchers.eq(deviceTransactionManager)))
-                .thenReturn(txPowerRangeMap);
-        ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput2();
-        OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121Spy = Mockito.mock(OpenRoadmInterfacesImpl121.class);
-        Mockito.when(openRoadmInterfacesImpl121Spy.getInterface(Mockito.anyString(), Mockito.anyString()))
-                .thenReturn(Optional.empty());
-        PowerMgmtImpl powerMgmtImpl = getNewPowerMgmt(openRoadmInterfacesImpl121Spy,this.crossConnect);
-        boolean output = powerMgmtImpl.setPower(input);
-        assertEquals(true, output);
-
-    }
-
-    @Test
-    void testSetPowerXpdrNodes() {
-        Mockito.mockStatic(OlmUtils.class);
-        Mockito.when(this.portMapping.getNode(Mockito.anyString()))
-                .thenReturn(getXpdrNodesFromNodesBuilderDeg());
-        ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput3();
-        boolean output = this.powerMgmt.setPower(input);
-        assertEquals(true, output);
-
-    }
-
-    @Test
-    void testSetPowerRdmNodesReturnInterfaceEmpty() throws OpenRoadmInterfaceException {
-        Mockito.mockStatic(OlmUtils.class);
-        Mockito.when(this.portMapping.getNode(Mockito.anyString()))
-                .thenReturn(getRdmNodesFromNodesBuilder());
-        ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput3();
-        OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121Spy = Mockito.mock(OpenRoadmInterfacesImpl121.class);
-        Mockito.when(openRoadmInterfacesImpl121Spy.getInterface(Mockito.anyString(), Mockito.anyString()))
-                .thenReturn(Optional.empty());
-        PowerMgmtImpl powerMgmtImpl = getNewPowerMgmt(openRoadmInterfacesImpl121Spy,this.crossConnect);
-        boolean output = powerMgmtImpl.setPower(input);
-        assertEquals(false, output);
-    }
-
-    @Test
-    void testSetPowerRdmNodesThrowsException() throws OpenRoadmInterfaceException {
-        Mockito.mockStatic(OlmUtils.class);
-        Mockito.when(this.portMapping.getNode(Mockito.anyString()))
-                .thenReturn(getRdmNodesFromNodesBuilder());
-        ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput3();
-        OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121Spy = Mockito.mock(OpenRoadmInterfacesImpl121.class);
-        Mockito.when(openRoadmInterfacesImpl121Spy.getInterface(Mockito.anyString(), Mockito.anyString()))
-                .thenThrow(new OpenRoadmInterfaceException("error thrown by unit tests "));
-        PowerMgmtImpl powerMgmtImpl = getNewPowerMgmt(openRoadmInterfacesImpl121Spy,this.crossConnect);
-        boolean output = powerMgmtImpl.setPower(input);
-        assertEquals(false, output);
-    }
-
-    @Test
-    void testSetPowerRdmNodesReturnInterface() throws OpenRoadmInterfaceException {
-        Mockito.mockStatic(OlmUtils.class);
-        Mockito.when(this.portMapping.getNode(Mockito.anyString()))
-                .thenReturn(getRdmNodesFromNodesBuilder());
-        ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInput3();
-        OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121Spy = Mockito.mock(OpenRoadmInterfacesImpl121.class);
-
-        Ots ots = new OtsBuilder().setSpanLossTransmit(new RatioDB(Decimal64.valueOf("23"))).build();
-        Interface1Builder intf1Builder = new Interface1Builder();
-        Mockito.when(openRoadmInterfacesImpl121Spy.getInterface(Mockito.anyString(), Mockito.anyString())).thenReturn(
-                Optional.of(new InterfaceBuilder().addAugmentation(intf1Builder.setOts(ots).build())
-                        .build()));
-        CrossConnect crossConnectMock = Mockito.mock(CrossConnectImpl.class);
-        Mockito.when(crossConnectMock
-                .setPowerLevel(Mockito.anyString(), OpticalControlMode.Power.getName(), Mockito.any(),
-                        Mockito.anyString())).thenReturn(true);
-        PowerMgmtImpl powerMgmtImpl = getNewPowerMgmt(openRoadmInterfacesImpl121Spy,crossConnectMock);
-        boolean output = powerMgmtImpl.setPower(input);
-        assertEquals(true, output);
-    }
-
-    private PowerMgmtImpl getNewPowerMgmt(OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121Spy,
-            CrossConnect crossConnectMock) {
-        OpenRoadmInterfacesImpl openRoadmInterfacesSpy = new OpenRoadmInterfacesImpl((this.deviceTransactionManager),
-                this.mappingUtils, openRoadmInterfacesImpl121Spy, this.openRoadmInterfacesImpl22,
-            this.openRoadmInterfacesImpl710);
-        openRoadmInterfacesSpy = Mockito.spy(openRoadmInterfacesSpy);
-        return new PowerMgmtImpl(openRoadmInterfacesSpy, crossConnectMock,
-                this.deviceTransactionManager, this.portMapping, 0, 0);
-    }
-
-    private Nodes getXpdrNodesFromNodesBuilderDeg() {
-        MappingBuilder mappingBuilder = getMappingBuilderDeg();
-        Mapping mapping = mappingBuilder.build();
-        return new NodesBuilder().setNodeId("node 1")
-                .setNodeInfo(new NodeInfoBuilder().setNodeType(NodeTypes.Xpdr).build())
-                .setMapping(Map.of(mapping.key(),mapping))
-                .build();
-    }
-
-    private Nodes getXpdrNodesFromNodesBuilderNetwork() {
-        MappingBuilder mappingBuilder = getMappingBuilderNetWork();
-        Mapping mapping = mappingBuilder.build();
-        return new NodesBuilder().setNodeId("node 1")
-                .setNodeInfo(new NodeInfoBuilder().setNodeType(NodeTypes.Xpdr)
-                        .setOpenroadmVersion(OpenroadmNodeVersion._121)
-                        .build())
-                .setMapping(Map.of(mapping.key(),mapping))
-                .build();
-    }
-
-    private Nodes getRdmNodesFromNodesBuilder() {
-        MappingBuilder mappingBuilder = getMappingBuilderDeg();
-        Mapping mapping = mappingBuilder.build();
-        return new NodesBuilder().setNodeId("node 1").setNodeInfo(
-                new NodeInfoBuilder().setNodeType(NodeTypes.Rdm)
-                        .setOpenroadmVersion(OpenroadmNodeVersion._121)
-                        .build())
-                .setMapping(Map.of(mapping.key(),mapping))
-                .build();
-    }
-
-    private MappingBuilder getMappingBuilderDeg() {
-        return new MappingBuilder()
-            .withKey(new MappingKey("deg"))
-            .setLogicalConnectionPoint("logicalConnPoint")
-            .setSupportingOts("OTS")
-            .setSupportingCircuitPackName("2/0")
-            .setSupportingOms("OMS")
-            .setSupportingPort("8080")
-            .setSupportingCircuitPackName("circuit1");
-    }
-
-    private MappingBuilder getMappingBuilderNetWork() {
-        return new MappingBuilder()
-            .withKey(new MappingKey("network"))
-            .setLogicalConnectionPoint("logicalConnPoint")
-            .setSupportingOts("OTS")
-            .setSupportingCircuitPackName("2/0")
-            .setSupportingOms("OMS")
-            .setSupportingPort("8080")
-            .setSupportingCircuitPackName("circuit1");
-    }
-}
index 9c6a562b1f3db301f29eafbf5c3570cffc1ee67a..e064b9df153641677103bda307a438ed9e9e1307 100644 (file)
@@ -10,9 +10,11 @@ package org.opendaylight.transportpce.olm.power;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoInteractions;
+import static org.mockito.Mockito.when;
 
 import java.math.BigDecimal;
 import java.util.HashMap;
@@ -33,7 +35,7 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.olm.util.OlmPowerServiceRpcImplUtil;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.RatioDB;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
@@ -43,7 +45,7 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interface
 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.ots.container.OtsBuilder;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 
-public class PowerMgmtTest {
+class PowerMgmtTest {
     private OpenRoadmInterfaces openRoadmInterfaces;
     private CrossConnect crossConnect;
     private DeviceTransactionManager deviceTransactionManager;
@@ -52,7 +54,7 @@ public class PowerMgmtTest {
 
     @BeforeEach
     void setUp() {
-        Mockito.mock(DataBroker.class);
+        mock(DataBroker.class);
         this.openRoadmInterfaces = Mockito.mock(OpenRoadmInterfaces.class);
         this.crossConnect = Mockito.mock((CrossConnectImpl.class));
         this.deviceTransactionManager = Mockito.mock(DeviceTransactionManager.class);
@@ -63,17 +65,17 @@ public class PowerMgmtTest {
 
     @Test
     void testSetPowerWhenMappingReturnNull() {
-        Mockito.when(this.portMapping.getNode(Mockito.anyString())).thenReturn(null);
+        when(this.portMapping.getNode(Mockito.anyString())).thenReturn(null);
         boolean output = this.powerMgmt.setPower(OlmPowerServiceRpcImplUtil.getServicePowerSetupInput());
         assertEquals(false, output);
     }
 
     @Test
     void testSetPowerForTransponderAEnd() throws OpenRoadmInterfaceException {
-        Mockito.when(this.portMapping.getNode("xpdr-A"))
+        when(this.portMapping.getNode("xpdr-A"))
             .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeTpdr("xpdr-A", OpenroadmNodeVersion._121,
                     List.of("network-A")));
-        Mockito.when(this.portMapping.getNode("roadm-A"))
+        when(this.portMapping.getNode("roadm-A"))
             .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-A", OpenroadmNodeVersion._121,
                     List.of("srg1-A", "deg2-A")));
         Interface interfOch = new InterfaceBuilder()
@@ -82,7 +84,7 @@ public class PowerMgmtTest {
                         .setOch(new OchBuilder().build())
                         .build())
                 .build();
-        Mockito.when(this.openRoadmInterfaces.getInterface(Mockito.matches("xpdr-A"), Mockito.anyString()))
+        when(this.openRoadmInterfaces.getInterface(Mockito.matches("xpdr-A"), Mockito.anyString()))
             .thenReturn(Optional.of(interfOch));
         Interface interfOts = new InterfaceBuilder()
                 .setName("interface name")
@@ -94,9 +96,8 @@ public class PowerMgmtTest {
                                         .build())
                                 .build())
                 .build();
-        Mockito.when(this.openRoadmInterfaces
-                        .getInterface(Mockito.matches("roadm-A"), Mockito.anyString()))
-                .thenReturn(Optional.of(interfOts));
+        when(this.openRoadmInterfaces.getInterface(Mockito.matches("roadm-A"), Mockito.anyString()))
+            .thenReturn(Optional.of(interfOts));
         MockedStatic<PowerMgmtVersion121> pmv121 = Mockito.mockStatic(PowerMgmtVersion121.class);
         pmv121.when(() -> PowerMgmtVersion121.setTransponderPower(Mockito.anyString(), Mockito.anyString(),
                     Mockito.any(), Mockito.any(), Mockito.any()))
@@ -107,9 +108,9 @@ public class PowerMgmtTest {
         pmv121.when(() -> PowerMgmtVersion121.getXponderPowerRange(Mockito.anyString(), Mockito.anyString(),
                     Mockito.anyString(), Mockito.any()))
                 .thenReturn(powerRangeMap);
-        Mockito.when(this.crossConnect.setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(),
-                        Mockito.anyString()))
-                .thenReturn(true);
+        when(this.crossConnect
+                .setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyString()))
+            .thenReturn(true);
 
         ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInputForTransponder();
         boolean result = this.powerMgmt.setPower(input);
@@ -118,9 +119,9 @@ public class PowerMgmtTest {
 
     @Test
     void testSetPowerForTransponderZEnd() throws OpenRoadmInterfaceException {
-        Mockito.when(this.portMapping.getNode("xpdr-C"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeTpdr("xpdr-C", OpenroadmNodeVersion._121,
-                        List.of("client-C")));
+        when(this.portMapping.getNode("xpdr-C"))
+            .thenReturn(OlmPowerServiceRpcImplUtil
+                .getMappingNodeTpdr("xpdr-C", OpenroadmNodeVersion._121, List.of("client-C")));
 
         ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil
                 .getServicePowerSetupInputForOneNode("xpdr-C", "network-C", "client-C");
@@ -130,12 +131,12 @@ public class PowerMgmtTest {
 
     @Test
     void testSetPowerForRoadmAEnd() throws OpenRoadmInterfaceException {
-        Mockito.when(this.portMapping.getNode("roadm-A"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-A", OpenroadmNodeVersion._121,
+        when(this.portMapping.getNode("roadm-A"))
+            .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-A", OpenroadmNodeVersion._121,
                         List.of("srg1-A", "deg2-A")));
-        Mockito.when(this.deviceTransactionManager.getDataFromDevice(Mockito.anyString(), Mockito.any(),
-                        Mockito.any(), Mockito.anyLong(), Mockito.any()))
-                .thenReturn(Optional.empty());
+        when(this.deviceTransactionManager
+                .getDataFromDevice(Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.anyLong(), Mockito.any()))
+            .thenReturn(Optional.empty());
         Interface interfOts = new InterfaceBuilder()
                 .setName("interface name")
                 .addAugmentation(
@@ -146,11 +147,11 @@ public class PowerMgmtTest {
                             .build())
                     .build())
                 .build();
-        Mockito.when(this.openRoadmInterfaces.getInterface(Mockito.anyString(), Mockito.anyString()))
-                .thenReturn(Optional.of(interfOts));
-        Mockito.when(this.crossConnect.setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(),
-                        Mockito.anyString()))
-                .thenReturn(true);
+        when(this.openRoadmInterfaces.getInterface(Mockito.anyString(), Mockito.anyString()))
+            .thenReturn(Optional.of(interfOts));
+        when(this.crossConnect
+                .setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyString()))
+            .thenReturn(true);
 
         ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil
                 .getServicePowerSetupInputForOneNode("roadm-A", "srg1-A", "deg2-A");
@@ -166,15 +167,15 @@ public class PowerMgmtTest {
 
     @Test
     void testSetPowerForRoadmZEnd() throws OpenRoadmInterfaceException {
-        Mockito.when(this.portMapping.getNode("roadm-C"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-C", OpenroadmNodeVersion._121,
-                        List.of("deg1-C", "srg1-C")));
-        Mockito.when(this.deviceTransactionManager.getDataFromDevice(Mockito.anyString(), Mockito.any(),
-                        Mockito.any(), Mockito.anyLong(), Mockito.any()))
-                .thenReturn(Optional.empty());
-        Mockito.when(this.crossConnect.setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(),
-                        Mockito.anyString()))
-                .thenReturn(true);
+        when(this.portMapping.getNode("roadm-C"))
+            .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-C", OpenroadmNodeVersion._121,
+                    List.of("deg1-C", "srg1-C")));
+        when(this.deviceTransactionManager
+                .getDataFromDevice(Mockito.anyString(), Mockito.any(), Mockito.any(), Mockito.anyLong(), Mockito.any()))
+            .thenReturn(Optional.empty());
+        when(this.crossConnect
+                .setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyString()))
+            .thenReturn(true);
 
         ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil
                 .getServicePowerSetupInputForOneNode("roadm-C", "deg1-C", "srg1-C");
@@ -187,20 +188,20 @@ public class PowerMgmtTest {
 
     @Test
     void testSetPowerForTransponderWhenNoTransponderPort() throws OpenRoadmInterfaceException {
-        Mockito.when(this.portMapping.getNode("xpdr-A"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeTpdr("xpdr-A", OpenroadmNodeVersion._121,
-                        List.of("network-A")));
-        Mockito.when(this.portMapping.getNode("roadm-A"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-A", OpenroadmNodeVersion._121,
-                        List.of("srg1-A", "deg2-A")));
+        when(this.portMapping.getNode("xpdr-A"))
+            .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeTpdr("xpdr-A", OpenroadmNodeVersion._121,
+                    List.of("network-A")));
+        when(this.portMapping.getNode("roadm-A"))
+            .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-A", OpenroadmNodeVersion._121,
+                    List.of("srg1-A", "deg2-A")));
         Interface interfOch = new InterfaceBuilder()
                 .setName("interface name")
                 .addAugmentation(new Interface1Builder()
                         .setOch(new OchBuilder().build())
                         .build())
                 .build();
-        Mockito.when(this.openRoadmInterfaces.getInterface(Mockito.matches("xpdr-A"), Mockito.anyString()))
-                .thenReturn(Optional.of(interfOch));
+        when(this.openRoadmInterfaces.getInterface(Mockito.matches("xpdr-A"), Mockito.anyString()))
+            .thenReturn(Optional.of(interfOch));
         Interface interfOts = new InterfaceBuilder()
                 .setName("interface name")
                 .addAugmentation(
@@ -211,9 +212,8 @@ public class PowerMgmtTest {
                                         .build())
                                 .build())
                 .build();
-        Mockito.when(this.openRoadmInterfaces
-                        .getInterface(Mockito.matches("roadm-A"), Mockito.anyString()))
-                .thenReturn(Optional.of(interfOts));
+        when(this.openRoadmInterfaces.getInterface(Mockito.matches("roadm-A"), Mockito.anyString()))
+            .thenReturn(Optional.of(interfOts));
         try (MockedStatic<PowerMgmtVersion121> pmv121 = Mockito.mockStatic(PowerMgmtVersion121.class)) {
             pmv121.when(() -> PowerMgmtVersion121.setTransponderPower(Mockito.anyString(), Mockito.anyString(),
                             Mockito.any(), Mockito.any(), Mockito.any()))
@@ -222,9 +222,9 @@ public class PowerMgmtTest {
                             Mockito.anyString(), Mockito.any()))
                     .thenReturn(new HashMap<>());
 
-            Mockito.when(this.crossConnect.setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(),
-                            Mockito.anyString()))
-                    .thenReturn(true);
+            when(this.crossConnect
+                    .setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyString()))
+                .thenReturn(true);
 
 
             ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInputForTransponder();
@@ -240,20 +240,20 @@ public class PowerMgmtTest {
 
     @Test
     void testSetPowerForTransponderAEndWithRoadmPort() throws OpenRoadmInterfaceException {
-        Mockito.when(this.portMapping.getNode("xpdr-A"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeTpdr("xpdr-A", OpenroadmNodeVersion._121,
-                        List.of("network-A")));
-        Mockito.when(this.portMapping.getNode("roadm-A"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-A", OpenroadmNodeVersion._121,
-                        List.of("srg1-A", "deg2-A")));
+        when(this.portMapping.getNode("xpdr-A"))
+            .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeTpdr("xpdr-A", OpenroadmNodeVersion._121,
+                    List.of("network-A")));
+        when(this.portMapping.getNode("roadm-A"))
+            .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeRdm("roadm-A", OpenroadmNodeVersion._121,
+                    List.of("srg1-A", "deg2-A")));
         Interface interfOch = new InterfaceBuilder()
                 .setName("interface name")
                 .addAugmentation(new Interface1Builder()
                         .setOch(new OchBuilder().build())
                         .build())
                 .build();
-        Mockito.when(this.openRoadmInterfaces.getInterface(Mockito.matches("xpdr-A"), Mockito.anyString()))
-                .thenReturn(Optional.of(interfOch));
+        when(this.openRoadmInterfaces.getInterface(Mockito.matches("xpdr-A"), Mockito.anyString()))
+            .thenReturn(Optional.of(interfOch));
         Interface interfOts = new InterfaceBuilder()
                 .setName("interface name")
                 .addAugmentation(
@@ -264,9 +264,8 @@ public class PowerMgmtTest {
                                         .build())
                                 .build())
                 .build();
-        Mockito.when(this.openRoadmInterfaces
-                        .getInterface(Mockito.matches("roadm-A"), Mockito.anyString()))
-                .thenReturn(Optional.of(interfOts));
+        when(this.openRoadmInterfaces.getInterface(Mockito.matches("roadm-A"), Mockito.anyString()))
+            .thenReturn(Optional.of(interfOts));
         try (MockedStatic<PowerMgmtVersion121> pmv121 = Mockito.mockStatic(PowerMgmtVersion121.class)) {
 
             pmv121.when(() -> PowerMgmtVersion121.setTransponderPower(Mockito.anyString(), Mockito.anyString(),
@@ -284,9 +283,9 @@ public class PowerMgmtTest {
             pmv121.when(() -> PowerMgmtVersion121.getSRGRxPowerRange(Mockito.anyString(), Mockito.anyString(),
                             Mockito.any(), Mockito.anyString(), Mockito.anyString()))
                     .thenReturn(powerRangeMapSrgRx);
-            Mockito.when(this.crossConnect.setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(),
-                            Mockito.anyString()))
-                    .thenReturn(true);
+            when(this.crossConnect
+                    .setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyString()))
+                .thenReturn(true);
 
             ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil.getServicePowerSetupInputForTransponder();
             boolean result = this.powerMgmt.setPower(input);
@@ -307,8 +306,7 @@ public class PowerMgmtTest {
 
     @Test
     void testSetPowerForBadNodeType() throws OpenRoadmInterfaceException {
-        Mockito.when(this.portMapping.getNode("ila node"))
-                .thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeIla());
+        when(this.portMapping.getNode("ila node")).thenReturn(OlmPowerServiceRpcImplUtil.getMappingNodeIla());
 
         ServicePowerSetupInput input = OlmPowerServiceRpcImplUtil
                 .getServicePowerSetupInputForOneNode("ila node", "rx-port", "tx-port");
@@ -321,9 +319,9 @@ public class PowerMgmtTest {
 
     @Test
     void testPowerTurnDownWhenSuccess() {
-        Mockito.when(this.crossConnect.setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(),
-                        Mockito.anyString()))
-                .thenReturn(true);
+        when(this.crossConnect
+                .setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyString()))
+            .thenReturn(true);
         ServicePowerTurndownInput input = OlmPowerServiceRpcImplUtil.getServicePowerTurndownInput();
         boolean result = this.powerMgmt.powerTurnDown(input);
         assertEquals(true, result);
@@ -338,9 +336,9 @@ public class PowerMgmtTest {
 
     @Test
     void testPowerTurnDownWhenFailure() {
-        Mockito.when(this.crossConnect.setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(),
-                        Mockito.anyString()))
-                .thenReturn(false);
+        when(this.crossConnect
+                .setPowerLevel(Mockito.anyString(), Mockito.anyString(), Mockito.any(), Mockito.anyString()))
+            .thenReturn(false);
         ServicePowerTurndownInput input = OlmPowerServiceRpcImplUtil.getServicePowerTurndownInput();
         boolean result = this.powerMgmt.powerTurnDown(input);
         assertEquals(false, result);
index 765716c3dd655d19d177a53aec70036a426e66f8..24fa516f8bec66a423a5f69fcd67f87abfa8e7d1 100644 (file)
@@ -63,7 +63,7 @@ import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class OlmPowerServiceImplSpanLossBaseTest extends AbstractTest {
+class OlmPowerServiceImplSpanLossBaseTest extends AbstractTest {
 
     private static final Logger LOG = LoggerFactory.getLogger(OlmPowerServiceImplSpanLossBaseTest.class);
     private DeviceTransactionManager deviceTransactionManager;
index d53dc556722246a1411f3c0dd74c49524b5195d4..034eec7b7c55f8474f7ae596bd89eb5168922582 100644 (file)
@@ -40,7 +40,7 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev21
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.PmNamesEnum;
 
-public class OlmPowerServiceImplTest  extends AbstractTest {
+class OlmPowerServiceImplTest  extends AbstractTest {
 
     private DeviceTransactionManager deviceTransactionManager;
     private OpenRoadmInterfaces openRoadmInterfaces;
diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/stub/MountPointServiceStub.java b/olm/src/test/java/org/opendaylight/transportpce/olm/stub/MountPointServiceStub.java
deleted file mode 100644 (file)
index e000ebb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright © 2018 Orange Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.transportpce.olm.stub;
-
-import java.util.Optional;
-import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.MountPointService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-public class MountPointServiceStub implements MountPointService {
-
-    MountPoint returnedMountPoint;
-
-    public MountPointServiceStub(MountPoint usedMountPoint) {
-        this.returnedMountPoint = usedMountPoint;
-    }
-
-    @Override
-    public Optional<MountPoint> getMountPoint(InstanceIdentifier<?> mountPoint) {
-        if (returnedMountPoint == null) {
-            return Optional.empty();
-        }
-        return Optional.of(returnedMountPoint);
-    }
-
-    @Override
-    public <T extends MountPointListener> ListenerRegistration<T> registerListener(InstanceIdentifier<?> path,
-        T listener) {
-        return null;
-    }
-}
diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/stub/MountPointStub.java b/olm/src/test/java/org/opendaylight/transportpce/olm/stub/MountPointStub.java
deleted file mode 100644 (file)
index 6ba508e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright © 2018 Orange Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.transportpce.olm.stub;
-
-import java.util.Optional;
-import javax.annotation.Nonnull;
-import org.opendaylight.mdsal.binding.api.BindingService;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-public class MountPointStub  implements MountPoint {
-
-    private DataBroker dataBroker;
-
-    private RpcConsumerRegistry rpcConsumerRegistry;
-
-    public MountPointStub(DataBroker dataBroker) {
-
-        this.dataBroker = dataBroker;
-    }
-
-    public void setRpcConsumerRegistry(RpcConsumerRegistry rpcConsumerRegistry) {
-        this.rpcConsumerRegistry = rpcConsumerRegistry;
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public <T extends BindingService> Optional<T> getService(Class<T> service) {
-        if (service.isInstance(dataBroker)) {
-            return Optional.ofNullable((T)dataBroker);
-        }
-        if (service.isInstance(rpcConsumerRegistry)) {
-            return Optional.ofNullable((T)rpcConsumerRegistry);
-        }
-        return Optional.empty();
-    }
-
-    @Nonnull
-    @Override
-    public InstanceIdentifier<?> getIdentifier() {
-        return null;
-    }
-}
diff --git a/olm/src/test/java/org/opendaylight/transportpce/olm/stub/OlmServiceStub.java b/olm/src/test/java/org/opendaylight/transportpce/olm/stub/OlmServiceStub.java
deleted file mode 100644 (file)
index e832f3b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright © 2018 Orange Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.olm.stub;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.ArrayList;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-
-public class OlmServiceStub implements TransportpceOlmService {
-
-    @Override public ListenableFuture<RpcResult<CalculateSpanlossCurrentOutput>> calculateSpanlossCurrent(
-        CalculateSpanlossCurrentInput input) {
-        return null;
-    }
-
-    @Override public ListenableFuture<RpcResult<GetPmOutput>> getPm(GetPmInput input) {
-        GetPmOutput output = new GetPmOutputBuilder()
-            .setNodeId("node1").setMeasurements(new ArrayList<>()).build();
-        return RpcResultBuilder.success(
-            output).buildFuture();
-    }
-
-    @Override public ListenableFuture<RpcResult<ServicePowerTurndownOutput>> servicePowerTurndown(
-        ServicePowerTurndownInput input) {
-        return RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
-                .setResult("Success").build()).buildFuture();
-    }
-
-    @Override public ListenableFuture<RpcResult<CalculateSpanlossBaseOutput>> calculateSpanlossBase(
-        CalculateSpanlossBaseInput input) {
-        return null;
-    }
-
-    @Override public ListenableFuture<RpcResult<ServicePowerResetOutput>> servicePowerReset(
-            ServicePowerResetInput input) {
-        return null;
-    }
-
-    @Override public ListenableFuture<RpcResult<ServicePowerSetupOutput>> servicePowerSetup(
-            ServicePowerSetupInput input) {
-        return RpcResultBuilder.success(new ServicePowerSetupOutputBuilder().build()).buildFuture();
-    }
-}
index 396a7b6ba184a363ed6ebd0fa39ccdf478562c95..feebde34219267b860a2943290b994e5ed0728c8 100644 (file)
@@ -22,11 +22,11 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev21
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.CurrentPmlist;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.CurrentPmlistBuilder;
@@ -131,9 +131,9 @@ public final class OlmPowerServiceRpcImplUtil {
                 .build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network
             .Nodes getMappingNodeTpdr(String nodeId, OpenroadmNodeVersion nodeVersion, List<String> lcps) {
-        Map<MappingKey, Mapping> mappings = new HashMap();
+        Map<MappingKey, Mapping> mappings = new HashMap<>();
         for (String lcp:lcps) {
             Mapping mapping = new MappingBuilder()
                     .setLogicalConnectionPoint(lcp)
@@ -142,7 +142,7 @@ public final class OlmPowerServiceRpcImplUtil {
                     .build();
             mappings.put(mapping.key(), mapping);
         }
-        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network
+        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network
                 .NodesBuilder()
             .setNodeId(nodeId)
             .setNodeInfo(new NodeInfoBuilder()
@@ -153,9 +153,9 @@ public final class OlmPowerServiceRpcImplUtil {
             .build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network
             .Nodes getMappingNodeRdm(String nodeId, OpenroadmNodeVersion nodeVersion, List<String> lcps) {
-        Map<MappingKey, Mapping> mappings = new HashMap();
+        Map<MappingKey, Mapping> mappings = new HashMap<>();
         for (String lcp:lcps) {
             MappingBuilder mappingBldr = new MappingBuilder()
                     .setLogicalConnectionPoint(lcp)
@@ -167,7 +167,7 @@ public final class OlmPowerServiceRpcImplUtil {
             }
             mappings.put(mappingBldr.build().key(), mappingBldr.build());
         }
-        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network
+        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network
                     .NodesBuilder()
                 .setNodeId(nodeId)
                 .setNodeInfo(new NodeInfoBuilder()
@@ -178,9 +178,9 @@ public final class OlmPowerServiceRpcImplUtil {
                 .build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network
             .Nodes getMappingNodeIla() {
-        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network
+        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network
                     .NodesBuilder()
                 .setNodeId("ila node")
                 .setNodeInfo(new NodeInfoBuilder()
index 5879c3146c0911d0661ad2c76af7dbd91329a02f..5e2274d06f15f4fd87fc84cd71a1209e4c7a8ac5 100644 (file)
@@ -15,8 +15,8 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.FiberPmd;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.Direction;
@@ -26,19 +26,19 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfac
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLinkKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.amplified.link.SectionElementBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1.FiberType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.OMSAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.SpanBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLink;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLinkKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.amplified.link.SectionElementBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1.FiberType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.OMSAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.SpanBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.CurrentPmList;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.CurrentPmListBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.current.pm.group.CurrentPm;
@@ -63,7 +63,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNodeKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1Builder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
@@ -71,7 +70,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.DestinationBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.link.SourceBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Decimal64;
@@ -87,19 +85,19 @@ public final class OlmTransactionUtils {
     // FIXME check if the InstanceIdentifier raw type can be avoided
     // Raw types use are discouraged since they lack type safety.
     // Resulting Problems are observed at run time and not at compile time
-    public static void writeTransaction(DataBroker dataBroker, InstanceIdentifier instanceIdentifier,
-                                        DataObject object) {
+    public static void writeTransaction(
+            DataBroker dataBroker, InstanceIdentifier instanceIdentifier, DataObject object) {
         @NonNull
         WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
         transaction.put(LogicalDatastoreType.CONFIGURATION, instanceIdentifier, object);
         transaction.commit();
     }
 
-    public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks
-            .Network getNetworkForSpanLoss() {
-
+    public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+            .networks.Network getNetworkForSpanLoss() {
         Map<LinkConcatenationKey,LinkConcatenation> linkConcentationValues = new HashMap<>();
-        LinkConcatenation linkConcatenation = new LinkConcatenationBuilder()
+        LinkConcatenation linkConcatenation =
+            new LinkConcatenationBuilder()
                 .withKey(new LinkConcatenationKey(Uint32.valueOf(1)))
                 .addAugmentation(new LinkConcatenation1Builder()
                     .setFiberType(FiberType.Truewave)
@@ -108,12 +106,14 @@ public final class OlmTransactionUtils {
                 .setSRLGId(Uint32.valueOf(1))
                 .setSRLGLength(Decimal64.valueOf("1"))
                 .build();
-        LinkConcatenation linkConcatenation2 = new LinkConcatenationBuilder()
+        LinkConcatenation linkConcatenation2 =
+            new LinkConcatenationBuilder()
                 .withKey(new LinkConcatenationKey(Uint32.valueOf(2)))
-                .addAugmentation(new LinkConcatenation1Builder()
-                    .setFiberType(FiberType.Truewave)
-                    .setPmd(new FiberPmd(Decimal64.valueOf("1")))
-                    .build())
+                .addAugmentation(
+                    new LinkConcatenation1Builder()
+                        .setFiberType(FiberType.Truewave)
+                        .setPmd(new FiberPmd(Decimal64.valueOf("1")))
+                        .build())
                 .setSRLGId(Uint32.valueOf(1))
                 .setSRLGLength(Decimal64.valueOf("1"))
                 .build();
@@ -121,188 +121,219 @@ public final class OlmTransactionUtils {
         linkConcentationValues.put(linkConcatenation2.key(),linkConcatenation2);
         // create 2 openroadm-topology degree nodes, end points of the link to be
         // measured;
-        SupportingNode supportingNode4RoadmA = new SupportingNodeBuilder()
-                .withKey(new SupportingNodeKey(new NetworkId("openroadm-network"),
-                        new NodeId("ROADM-A1")))
+        SupportingNode supportingNode4RoadmA =
+            new SupportingNodeBuilder()
+                .withKey(new SupportingNodeKey(new NetworkId("openroadm-network"), new NodeId("ROADM-A1")))
                 .setNetworkRef(new NetworkId("openroadm-network"))
-                .setNodeRef(new NodeId("ROADM-A1")).build();
-        Node ietfNodeA = new NodeBuilder().setNodeId(new NodeId("ROADM-A1-DEG2"))
+                .setNodeRef(new NodeId("ROADM-A1"))
+                .build();
+        Node ietfNodeA =
+            new NodeBuilder()
+                .setNodeId(new NodeId("ROADM-A1-DEG2"))
                 .setSupportingNode(Map.of(supportingNode4RoadmA.key(),supportingNode4RoadmA))
                 .build();
-        SupportingNode supportingNode4RoadmC = new SupportingNodeBuilder()
-                .withKey(new SupportingNodeKey(new NetworkId("openroadm-network"),
-                        new NodeId("ROADM-C1")))
+        SupportingNode supportingNode4RoadmC =
+            new SupportingNodeBuilder()
+                .withKey(new SupportingNodeKey(new NetworkId("openroadm-network"), new NodeId("ROADM-C1")))
                 .setNetworkRef(new NetworkId("openroadm-network"))
-                .setNodeRef(new NodeId("ROADM-C1")).build();
-        Node ietfNodeC = new NodeBuilder().setNodeId(new NodeId("ROADM-C1-DEG1"))
+                .setNodeRef(new NodeId("ROADM-C1"))
+                .build();
+        Node ietfNodeC =
+            new NodeBuilder()
+                .setNodeId(new NodeId("ROADM-C1-DEG1"))
                 .setSupportingNode(Map.of(supportingNode4RoadmC.key(),supportingNode4RoadmC))
                 .build();
         Map<NodeKey,Node> ietfNodeMap = new HashMap<>();
         ietfNodeMap.put(ietfNodeA.key(),ietfNodeA);
         ietfNodeMap.put(ietfNodeC.key(),ietfNodeC);
-        Map<AmplifiedLinkKey,AmplifiedLink>
-                amplifiedLinkValues = new HashMap<>();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink al =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes
-                        .AmplifiedLinkBuilder()
-                        .setSectionElement(new SectionElementBuilder().setSectionElement(
-                                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified
-                                        .link.attributes
-                                        .amplified.link.section.element.section.element.SpanBuilder()
-                                        .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210
-                                                .amplified.link.attributes.amplified.link.section.element
-                                                .section.element
-                                                .span.SpanBuilder()
-                                                .setAdministrativeState(AdminStates.InService)
-                                                .setAutoSpanloss(true)
-                                                .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
-                                                .setLinkConcatenation(linkConcentationValues)
-                                                .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
-                                                .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
-                                                .build())
-                                        .build())
-                                .build())
-                        .setSectionEltNumber(Uint16.valueOf(1))
-                        .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink al2 =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes
-                        .AmplifiedLinkBuilder()
-                        .setSectionElement(new SectionElementBuilder().setSectionElement(
-                                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified
-                                        .link.attributes
-                                        .amplified.link.section.element.section.element.SpanBuilder()
-                                        .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210
-                                                .amplified.link.attributes.amplified.link.section.element
-                                                .section.element
-                                                .span.SpanBuilder()
-                                                .setAdministrativeState(AdminStates.InService)
-                                                .setAutoSpanloss(true)
-                                                .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
-                                                .setLinkConcatenation(linkConcentationValues)
-                                                .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
-                                                .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
-                                                .build())
-                                        .build())
-                                .build())
-                        .setSectionEltNumber(Uint16.valueOf(1))
-                        .build();
+        Map<AmplifiedLinkKey,AmplifiedLink> amplifiedLinkValues = new HashMap<>();
+        var al = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526
+                .amplified.link.attributes.AmplifiedLinkBuilder()
+            .setSectionElement(
+                new SectionElementBuilder()
+                    .setSectionElement(
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526
+                                .amplified.link.attributes.amplified.link.section.element.section.element
+                                .SpanBuilder()
+                            .setSpan(
+                                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526
+                                        .amplified.link.attributes.amplified.link.section.element.section.element
+                                        .span.SpanBuilder()
+                                    .setAdministrativeState(AdminStates.InService)
+                                    .setAutoSpanloss(true)
+                                    .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
+                                    .setLinkConcatenation(linkConcentationValues)
+                                    .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
+                                    .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
+                                    .build())
+                            .build())
+                        .build())
+            .setSectionEltNumber(Uint16.valueOf(1))
+            .build();
+        var al2 = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526
+                .amplified.link.attributes.AmplifiedLinkBuilder()
+            .setSectionElement(
+                new SectionElementBuilder()
+                    .setSectionElement(
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526
+                                .amplified.link.attributes.amplified.link.section.element.section.element
+                                .SpanBuilder()
+                            .setSpan(
+                                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526
+                                        .amplified.link.attributes.amplified.link.section.element.section.element
+                                        .span.SpanBuilder()
+                                    .setAdministrativeState(AdminStates.InService)
+                                    .setAutoSpanloss(true)
+                                    .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
+                                    .setLinkConcatenation(linkConcentationValues)
+                                    .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
+                                    .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
+                                    .build())
+                            .build())
+                    .build())
+            .setSectionEltNumber(Uint16.valueOf(1))
+            .build();
         amplifiedLinkValues.put(al.key(),al);
         amplifiedLinkValues.put(al2.key(),al2);
-        Augmentation<Link> aug11 = new Link1Builder()
-                .setAmplified(true)
-                .setOMSAttributes(new OMSAttributesBuilder()
-                        .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
-                        .setSpan(new SpanBuilder().build())
-                        .build())
-                .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1 aug12 =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder()
-                        .setLinkType(OpenroadmLinkType.ROADMTOROADM).build();
-        Augmentation<Link> aug21 = new Link1Builder()
-                .setAmplified(true)
-                .setOMSAttributes(new OMSAttributesBuilder()
-                        .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
-                        .setSpan(new SpanBuilder().build()).build())
-                .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1 aug22 =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder()
-                        .setLinkType(OpenroadmLinkType.ROADMTOROADM).build();
+
         // create the roadm-to-roadm link to be measured
-        Link roadm2roadmLink = new LinkBuilder().setLinkId(new LinkId("ROADM-A1-to-ROADM-C1"))
-                .setSource(new SourceBuilder()
+        Link roadm2roadmLink =
+            new LinkBuilder()
+                .setLinkId(new LinkId("ROADM-A1-to-ROADM-C1"))
+                .setSource(
+                    new SourceBuilder()
                         .setSourceNode(ietfNodeA.getNodeId())
                         .setSourceTp(new TpId("DEG2-TTP-TXRX"))
                         .build())
-                .setDestination(new DestinationBuilder()
+                .setDestination(
+                    new DestinationBuilder()
                         .setDestNode(ietfNodeC.getNodeId())
                         .setDestTp(new TpId("DEG1-TTP-TXRX"))
                         .build())
-                .addAugmentation(aug11)
-                .addAugmentation(aug12)
-                .addAugmentation(aug21)
-                .addAugmentation(aug22)
+                .addAugmentation(
+                    //aug11
+                    new Link1Builder()
+                        .setAmplified(true)
+                        .setOMSAttributes(
+                            new OMSAttributesBuilder()
+                                .setAmplifiedLink(
+                                    new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
+                                .setSpan(new SpanBuilder().build())
+                                .build())
+                        .build())
+                .addAugmentation(
+                    //aug12
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder()
+                        .setLinkType(OpenroadmLinkType.ROADMTOROADM)
+                        .build())
+                .addAugmentation(
+                    //aug21
+                    new Link1Builder()
+                        .setAmplified(true)
+                        .setOMSAttributes(
+                            new OMSAttributesBuilder()
+                                .setAmplifiedLink(
+                                    new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
+                                .setSpan(new SpanBuilder().build())
+                                .build())
+                        .build())
+                .addAugmentation(
+                    //aug22
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder()
+                        .setLinkType(OpenroadmLinkType.ROADMTOROADM)
+                        .build())
                 .build();
-        // create the ietf network
-        Network1 openroadmAugmToIetfNetwork = new Network1Builder()
-                .setLink(Map.of(roadm2roadmLink.key(),roadm2roadmLink)).build();
-        // openroadm Topology builder
-        NetworkBuilder ietfNetworkBldr = new NetworkBuilder()
-                .setNetworkId(new NetworkId("openroadm-topology"))
-                .setNode(ietfNodeMap)
-                .addAugmentation(openroadmAugmToIetfNetwork);
-
-        return ietfNetworkBldr.build();
+        return new NetworkBuilder()
+            .setNetworkId(new NetworkId("openroadm-topology"))
+            .setNode(ietfNodeMap)
+            .addAugmentation(
+                new Network1Builder().setLink(Map.of(roadm2roadmLink.key(),roadm2roadmLink)).build())
+            .build();
     }
 
     public static Mapping getMapping1() {
-        return new MappingBuilder().setLogicalConnectionPoint("DEG2-TTP-TXRX").setSupportingOts("OTS-DEG2-TTP-TXRX")
-                .build();
+        return new MappingBuilder()
+            .setLogicalConnectionPoint("DEG2-TTP-TXRX")
+            .setSupportingOts("OTS-DEG2-TTP-TXRX")
+            .build();
     }
 
     public static Mapping getMapping2() {
-        return new MappingBuilder().setLogicalConnectionPoint("DEG1-TTP-TXRX").setSupportingOts("OTS-DEG1-TTP-TXRX")
-                .build();
+        return new MappingBuilder()
+            .setLogicalConnectionPoint("DEG1-TTP-TXRX")
+            .setSupportingOts("OTS-DEG1-TTP-TXRX")
+            .build();
     }
 
     public static Optional<CurrentPmList> getCurrentPmListA() {
-        Measurement measurementA = new MeasurementBuilder()
+        Measurement measurementA =
+            new MeasurementBuilder()
                 .withKey(new MeasurementKey(PmGranularity._15min))
-                .setGranularity(org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215
-                        .PmGranularity._15min)
+                .setGranularity(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmGranularity._15min)
                 .setPmParameterValue(new PmDataType(Decimal64.valueOf("-3.5")))
                 .setValidity(Validity.Complete)
                 .build();
-        CurrentPm cpA = new CurrentPmBuilder()
-                .withKey(new CurrentPmKey(Direction.Bidirectional,
-                        "", Location.NotApplicable, PmNamesEnum.OpticalPowerOutput))
-                .setType(org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmNamesEnum
-                        .OpticalPowerOutput)
+        CurrentPm cpA =
+            new CurrentPmBuilder()
+                .withKey(
+                    new CurrentPmKey(
+                        Direction.Bidirectional, "", Location.NotApplicable, PmNamesEnum.OpticalPowerOutput))
+                .setType(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmNamesEnum.OpticalPowerOutput)
                 .setMeasurement(Map.of(measurementA.key(),measurementA))
                 .build();
-        InstanceIdentifier<Interface> interfaceIIDA = InstanceIdentifier
-            .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
-            .child(Interface.class, new InterfaceKey("OTS-DEG2-TTP-TXRX"))
-            .build();
-        CurrentPmEntry currentPmEntryA = new CurrentPmEntryBuilder()
+        CurrentPmEntry currentPmEntryA =
+            new CurrentPmEntryBuilder()
                 .setCurrentPm(Map.of(cpA.key(),cpA))
-                .setPmResourceInstance(interfaceIIDA)
+                .setPmResourceInstance(
+                    InstanceIdentifier
+                        .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
+                        .child(Interface.class, new InterfaceKey("OTS-DEG2-TTP-TXRX"))
+                        .build())
                 .setPmResourceType(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.ResourceTypeEnum
-                                .Interface)
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.ResourceTypeEnum.Interface)
                 .setPmResourceTypeExtension("")
                 .setRetrievalTime(new DateAndTime("2018-06-07T13:22:58+00:00"))
                 .build();
-        return Optional.of(new CurrentPmListBuilder()
-                .setCurrentPmEntry(Map.of(currentPmEntryA.key(),currentPmEntryA)).build());
+        return Optional.of(
+            new CurrentPmListBuilder()
+                .setCurrentPmEntry(Map.of(currentPmEntryA.key(),currentPmEntryA))
+                .build());
     }
 
     public static Optional<CurrentPmList> getCurrentPmListC() {
-        Measurement measurementC = new MeasurementBuilder()
+        Measurement measurementC =
+            new MeasurementBuilder()
                 .setGranularity(org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmGranularity._15min)
                 .setPmParameterValue(new PmDataType(Decimal64.valueOf("-18.1")))
                 .setValidity(Validity.Complete)
                 .build();
-        CurrentPm cpC = new CurrentPmBuilder()
-                .withKey(new CurrentPmKey(Direction.Bidirectional,
-                        "", Location.NotApplicable, PmNamesEnum.OpticalPowerInput))
-                .setType(org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmNamesEnum
-                        .OpticalPowerInput)
+        CurrentPm cpC =
+            new CurrentPmBuilder()
+                .withKey(
+                    new CurrentPmKey(
+                        Direction.Bidirectional, "", Location.NotApplicable, PmNamesEnum.OpticalPowerInput))
+                .setType(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.PmNamesEnum.OpticalPowerInput)
                 .setMeasurement(Map.of(measurementC.key(),measurementC))
                 .build();
-        InstanceIdentifier<Interface> interfaceIIDC = InstanceIdentifier
-            .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
-            .child(Interface.class, new InterfaceKey("OTS-DEG1-TTP-TXRX"))
-            .build();
-        CurrentPmEntry currentPmEntryC = new CurrentPmEntryBuilder()
+        CurrentPmEntry currentPmEntryC =
+            new CurrentPmEntryBuilder()
                 .setCurrentPm(Map.of(cpC.key(),cpC))
-                .setPmResourceInstance(interfaceIIDC)
+                .setPmResourceInstance(
+                    InstanceIdentifier
+                        .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class)
+                        .child(Interface.class, new InterfaceKey("OTS-DEG1-TTP-TXRX"))
+                        .build())
                 .setPmResourceType(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019
-                                .ResourceTypeEnum.Interface)
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.ResourceTypeEnum.Interface)
                 .setPmResourceTypeExtension("")
                 .setRetrievalTime(new DateAndTime("2018-06-07T13:22:58+00:00"))
                 .build();
-        return Optional.of(new CurrentPmListBuilder()
-                .setCurrentPmEntry(Map.of(currentPmEntryC.key(),currentPmEntryC)).build());
+        return Optional.of(
+            new CurrentPmListBuilder()
+                .setCurrentPmEntry(Map.of(currentPmEntryC.key(),currentPmEntryC))
+                .build());
     }
 }
index 0d4e56910206801614cdb9a3d449b04b04685b88..bbaaf1a787ab93df8cb4ab7976ac07df0e9a52d4 100644 (file)
@@ -12,7 +12,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.junit.jupiter.api.Test;
 
-public class OtsPmHolderTest {
+class OtsPmHolderTest {
 
     @Test
     void test() {
index b406c3d15ed109b05e89da87664d20a6926d2450..00568a44f1929c0e96f2d38d7f007911138e114d 100644 (file)
@@ -17,33 +17,33 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegreeKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegree;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegreeKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.FiberPmd;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLinkKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.amplified.link.SectionElementBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1.FiberType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.OMSAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.SpanBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLink;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLinkKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.amplified.link.SectionElementBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1.FiberType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.OMSAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.SpanBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationKey;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
@@ -88,30 +88,6 @@ public final class TransactionUtils {
         return true;
     }
 
-//
-//    public static boolean writeTransaction(DataBroker dataBroker, LogicalDatastoreType logicalDatastoreType,
-//        InstanceIdentifier instanceIdentifier,
-//        DataObject object)
-
-//    public static DataObject readTransaction(DeviceTransactionManager deviceTransactionManager,
-//                                  String nodeId,
-//                                  LogicalDatastoreType logicalDatastoreType,
-//                                  InstanceIdentifier<? extends DataObject> instanceIdentifier)
-//            throws ExecutionException, InterruptedException {
-//        Future<Optional<DeviceTransaction>> deviceTxFuture =
-//                deviceTransactionManager.getDeviceTransaction(nodeId);
-//        if (!deviceTxFuture.get().isPresent()) {
-//            return null;
-//        }
-//        DeviceTransaction deviceTx = deviceTxFuture.get().get();
-//        com.google.common.base.Optional<? extends DataObject> readOpt
-//                = deviceTx.read(logicalDatastoreType, instanceIdentifier).get();
-//        if (!readOpt.isPresent()) {
-//            return null;
-//        }
-//        return readOpt.get();
-//    }
-
     public static Network1 getNullNetwork() {
         Map<LinkKey, Link> nullMap = null;
         Network1 network = new Network1Builder().setLink(nullMap).build();
@@ -250,12 +226,12 @@ public final class TransactionUtils {
         linkConcentationValues.put(linkConcatenation2.key(),linkConcatenation2);
         Map<AmplifiedLinkKey,AmplifiedLink>
             amplifiedLinkValues = new HashMap<>();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink al =
-            new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes
+        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLink al =
+            new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes
                     .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
-                .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link
+                .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
                     .attributes.amplified.link.section.element.section.element.SpanBuilder()
-                        .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link
+                        .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
                                 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
                                     .setAdministrativeState(AdminStates.InService)
                                     .setAutoSpanloss(true)
@@ -267,12 +243,12 @@ public final class TransactionUtils {
                     .build())
                 .build())
             .setSectionEltNumber(Uint16.valueOf(1)).build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink al2 = new
-            org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes
-                .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
-                .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link
+        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLink al2 = new
+            org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes
+                    .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
+                .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
                      .attributes.amplified.link.section.element.section.element.SpanBuilder()
-                        .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link
+                        .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
                                 .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
                                     .setAdministrativeState(AdminStates.InService)
                                     .setAutoSpanloss(true)
index cda7f35849541b18ad8741af29754b7edcc9f83d..ada9a590cd2d9214505a3941bd01d25ea4081547 100644 (file)
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-pce</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -39,7 +39,7 @@
       <dependency>
         <groupId>org.opendaylight.mdsal</groupId>
         <artifactId>mdsal-artifacts</artifactId>
-        <version>11.0.7</version>
+        <version>13.0.1</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
@@ -57,7 +57,7 @@
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
     <dependency>
       <groupId>org.jgrapht</groupId>
       <artifactId>jgrapht-core</artifactId>
-      <version>1.2.0</version>
+      <version>1.5.2</version>
+    </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>jakarta.ws.rs</groupId>
     <dependency>
       <groupId>org.glassfish.grizzly</groupId>
       <artifactId>grizzly-http-server</artifactId>
-      <version>2.4.0</version>
+      <version>4.0.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>javax.activation</groupId>
-      <artifactId>javax.activation-api</artifactId>
-      <version>1.2.0</version>
+      <groupId>jakarta.activation</groupId>
+      <artifactId>jakarta.activation-api</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
index 92585ecba08a0d190b277656020aff5502b353a5..72476971b1dc4ddd7e83e85594d760a3f6194796 100644 (file)
@@ -7,8 +7,8 @@
  */
 package org.opendaylight.transportpce.pce;
 
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInput;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 3d9dfdbeee71af4f0cc581be9fe2584a90945042..6e2f3d5b37d84f59ee9102314cee5e2c8e28e6b3 100644 (file)
@@ -14,26 +14,27 @@ import java.util.Map;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
+import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
 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.ModulationFormat;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OpucnTribSlotDef;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.Resource;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.LinkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.NodeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToABuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.Resource;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.LinkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.NodeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
@@ -87,10 +88,11 @@ public class PcePathDescription {
      * @return a builder for AtoZDirection object
      */
     private AToZDirectionBuilder buildAtoZDirection(Map<AToZKey, AToZ> atozMap) {
+        ModulationFormat modulationFormat = GridConstant.RATE_MODULATION_FORMAT_MAP
+                .getOrDefault(Uint32.valueOf(rc.getRate()), ModulationFormat.DpQpsk);
         AToZDirectionBuilder atoZDirectionBldr = new AToZDirectionBuilder()
             .setRate(Uint32.valueOf(rc.getRate()))
-            .setModulationFormat(GridConstant.RATE_MODULATION_FORMAT_MAP
-                    .getOrDefault(Uint32.valueOf(rc.getRate()), ModulationFormat.DpQpsk).getName())
+            .setModulationFormat(modulationFormat.getName())
             .setAToZ(atozMap);
         switch (rc.getServiceType()) {
             case StringConstants.SERVICE_TYPE_400GE:
@@ -99,9 +101,15 @@ public class PcePathDescription {
             case StringConstants.SERVICE_TYPE_OTUC4:
             case StringConstants.SERVICE_TYPE_100GE_T:
             case StringConstants.SERVICE_TYPE_OTU4:
-                atoZDirectionBldr.setAToZMaxFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMaxFreq())));
-                atoZDirectionBldr.setAToZMinFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMinFreq())));
-                atoZDirectionBldr.setAToZWavelengthNumber(Uint32.valueOf(rc.getResultWavelength()));
+                atoZDirectionBldr
+                        .setAToZMaxFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMaxFreq())))
+                        .setAToZMinFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMinFreq())))
+                        .setAToZWavelengthNumber(Uint32.valueOf(rc.getResultWavelength()))
+                        // Used precision 5 to get the exact decimal values of the frequency
+                        .setCentralFrequency(new FrequencyTHz(GridUtils.getCentralFrequencyWithPrecision(
+                                rc.getMinFreq(), rc.getMaxFreq(), 5).getValue()))
+                        .setWidth(GridUtils.getWidthFromRateAndModulationFormat(
+                                Uint32.valueOf(rc.getRate()), modulationFormat));
                 break;
             case StringConstants.SERVICE_TYPE_100GE_M:
             case StringConstants.SERVICE_TYPE_100GE_S:
@@ -135,9 +143,10 @@ public class PcePathDescription {
      * @return a builder for ZtoADirection object
      */
     private ZToADirectionBuilder buildZtoADirection(Map<ZToAKey, ZToA> ztoaMap) {
+        ModulationFormat modulationFormat = GridConstant.RATE_MODULATION_FORMAT_MAP
+                .getOrDefault(Uint32.valueOf(rc.getRate()), ModulationFormat.DpQpsk);
         ZToADirectionBuilder ztoADirectionBldr = new ZToADirectionBuilder().setRate(Uint32.valueOf(rc.getRate()))
-                .setModulationFormat(GridConstant.RATE_MODULATION_FORMAT_MAP
-                        .getOrDefault(Uint32.valueOf(rc.getRate()), ModulationFormat.DpQpsk).getName())
+                .setModulationFormat(modulationFormat.getName())
                 .setZToA(ztoaMap);
         switch (rc.getServiceType()) {
             case StringConstants.SERVICE_TYPE_400GE:
@@ -146,9 +155,14 @@ public class PcePathDescription {
             case StringConstants.SERVICE_TYPE_OTUC4:
             case StringConstants.SERVICE_TYPE_100GE_T:
             case StringConstants.SERVICE_TYPE_OTU4:
-                ztoADirectionBldr.setZToAMaxFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMaxFreq())));
-                ztoADirectionBldr.setZToAMinFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMinFreq())));
-                ztoADirectionBldr.setZToAWavelengthNumber(Uint32.valueOf(rc.getResultWavelength()));
+                ztoADirectionBldr
+                        .setZToAMaxFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMaxFreq())))
+                        .setZToAMinFrequency(new FrequencyTHz(Decimal64.valueOf(rc.getMinFreq())))
+                        .setZToAWavelengthNumber(Uint32.valueOf(rc.getResultWavelength()))
+                        .setCentralFrequency(new FrequencyTHz(GridUtils.getCentralFrequencyWithPrecision(
+                                rc.getMinFreq(), rc.getMaxFreq(), 4).getValue()))
+                        .setWidth(GridUtils.getWidthFromRateAndModulationFormat(
+                                Uint32.valueOf(rc.getRate()), modulationFormat));
                 break;
             case StringConstants.SERVICE_TYPE_100GE_M:
             case StringConstants.SERVICE_TYPE_100GE_S:
@@ -185,7 +199,7 @@ public class PcePathDescription {
         AToZ lastResource = null;
 
         // build A side Client TP
-        String tpName = path.get(0).getClient();
+        String tpName = path.get(0).getClientA();
         String xname = path.get(0).getSourceId().getValue();
         TerminationPoint stp = new TerminationPointBuilder()
                 .setTpId(tpName).setTpNodeId(xname)
@@ -199,10 +213,10 @@ public class PcePathDescription {
         for (PceLink pcelink : path) {
             String srcName = pcelink.getSourceId().getValue();
             // Nodes
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce
-                .resource.resource.resource.Node sourceNode = new NodeBuilder()
-                .setNodeId(srcName)
-                .build();
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501
+                    .pce.resource.resource.resource.Node sourceNode = new NodeBuilder()
+                    .setNodeId(srcName)
+                    .build();
 
             // Source Resource
             AToZKey sourceKey = new AToZKey(index.toString());
@@ -226,10 +240,10 @@ public class PcePathDescription {
 
             String linkName = pcelink.getLinkId().getValue();
             // Link
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce
-                .resource.resource.resource.Link atozLink = new LinkBuilder()
-                .setLinkId(linkName)
-                .build();
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501
+                    .pce.resource.resource.resource.Link atozLink = new LinkBuilder()
+                    .setLinkId(linkName)
+                    .build();
 
             // Link Resource
             AToZKey linkKey = new AToZKey(index.toString());
@@ -252,7 +266,7 @@ public class PcePathDescription {
             index += 1;
             atozMap.put(ttpResource.key(),ttpResource);
 
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce
                 .resource.resource.resource.Node targetNode = new NodeBuilder()
                 .setNodeId(destName)
                 .build();
@@ -270,7 +284,7 @@ public class PcePathDescription {
         }
 
         // build Z side Client TP
-        tpName = lastLink.getClient();
+        tpName = lastLink.getClientZ();
         xname = lastLink.getDestId().getValue();
         stp = new TerminationPointBuilder()
                 .setTpNodeId(xname).setTpId(tpName)
@@ -291,7 +305,7 @@ public class PcePathDescription {
 
         // build Z size Client TP
         PceLink pcelink = this.allPceLinks.get(path.get(0).getOppositeLink());
-        String tpName = pcelink.getClient();
+        String tpName = pcelink.getClientA();
         String xname = pcelink.getSourceId().getValue();
         TerminationPoint stp = new TerminationPointBuilder()
                 .setTpNodeId(xname).setTpId(tpName)
@@ -312,7 +326,7 @@ public class PcePathDescription {
 
 
             // Nodes
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce
                 .resource.resource.resource.Node sourceNode = new NodeBuilder()
                 .setNodeId(srcName).build();
 
@@ -339,7 +353,7 @@ public class PcePathDescription {
 
             String linkName = pcelink.getLinkId().getValue();
             // Link
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce
                 .resource.resource.resource.Link ztoaLink = new LinkBuilder()
                 .setLinkId(linkName).build();
 
@@ -364,7 +378,7 @@ public class PcePathDescription {
             ztoaList.put(ttpResource.key(),ttpResource);
 
 
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce
                 .resource.resource.resource.Node targetNode = new NodeBuilder()
                 .setNodeId(destName).build();
             // Target Resource
@@ -379,7 +393,7 @@ public class PcePathDescription {
         }
 
         // build Z side Client TP
-        tpName = lastLink.getClient();
+        tpName = lastLink.getClientZ();
         xname = lastLink.getDestId().getValue();
         stp = new TerminationPointBuilder()
                 .setTpNodeId(xname).setTpId(tpName).build();
index ba757dca65843cd43e28085f9546920909a04226..08b46d744edc30a86cd5ff183a7b0ea1cb0421c2 100644 (file)
@@ -11,6 +11,7 @@ package org.opendaylight.transportpce.pce;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.pce.constraints.OperatorConstraints;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
 import org.opendaylight.transportpce.pce.constraints.PceConstraintsCalc;
 import org.opendaylight.transportpce.pce.gnpy.GnpyException;
@@ -20,13 +21,14 @@ import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
 import org.opendaylight.transportpce.pce.graph.PceGraph;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceCalculation;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PceConstraintMode;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.reroute.request.input.Endpoints;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.PceMetric;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -108,7 +110,8 @@ public class PceSendingPceRPCs {
         LOG.info("cancelResourceReserve ...");
     }
 
-    public void pathComputationWithConstraints(PceConstraints hardConstraints, PceConstraints softConstraints) {
+    private void pathComputationWithConstraints(PceConstraints hardConstraints, PceConstraints softConstraints,
+            PceConstraintMode mode) {
 
         PceCalculation nwAnalizer = new PceCalculation(input, networkTransaction, hardConstraints, softConstraints, rc,
                 portMapping, endpoints);
@@ -119,10 +122,11 @@ public class PceSendingPceRPCs {
             LOG.error("In pathComputationWithConstraints, nwAnalizer: result = {}", rc);
             return;
         }
+        OperatorConstraints opConstraints = new OperatorConstraints(networkTransaction);
         LOG.info("PceGraph ...");
         PceGraph graph = new PceGraph(nwAnalizer.getaendPceNode(), nwAnalizer.getzendPceNode(),
-                nwAnalizer.getAllPceNodes(), nwAnalizer.getAllPceLinks(), hardConstraints, softConstraints,
-                rc, serviceType, networkTransaction);
+                nwAnalizer.getAllPceNodes(), nwAnalizer.getAllPceLinks(), hardConstraints,
+                rc, serviceType, networkTransaction, mode, opConstraints.getBitMapConstraint(input.getCustomerName()));
         graph.calcPath();
         rc = graph.getReturnStructure();
         if (!rc.getStatus()) {
@@ -159,7 +163,7 @@ public class PceSendingPceRPCs {
         PceConstraintsCalc constraints = new PceConstraintsCalc(input, networkTransaction);
         pceHardConstraints = constraints.getPceHardConstraints();
         pceSoftConstraints = constraints.getPceSoftConstraints();
-        pathComputationWithConstraints(pceHardConstraints, pceSoftConstraints);
+        pathComputationWithConstraints(pceHardConstraints, pceSoftConstraints, PceConstraintMode.Loose);
         this.success = rc.getStatus();
         this.message = rc.getMessage();
         this.responseCode = rc.getResponseCode();
@@ -233,7 +237,7 @@ public class PceSendingPceRPCs {
         PceConstraintsCalc constraintsGnpy = new PceConstraintsCalc(inputFromGnpy, networkTransaction);
         PceConstraints gnpyHardConstraints = constraintsGnpy.getPceHardConstraints();
         PceConstraints gnpySoftConstraints = constraintsGnpy.getPceSoftConstraints();
-        pathComputationWithConstraints(gnpyHardConstraints, gnpySoftConstraints);
+        pathComputationWithConstraints(gnpyHardConstraints, gnpySoftConstraints, PceConstraintMode.Strict);
         AToZDirection atoz = rc.getAtoZDirection();
         ZToADirection ztoa = rc.getZtoADirection();
         if (gnpyToCheckFeasiblity(atoz, ztoa,gnpy)) {
@@ -253,7 +257,7 @@ public class PceSendingPceRPCs {
 
     private PceGraph patchRerunGraph(PceGraph graph) {
         LOG.info("In pathComputation patchRerunGraph : rerun Graph with metric = PROPAGATION-DELAY ");
-        graph.setConstrains(pceHardConstraints, pceSoftConstraints);
+        graph.setConstrains(pceHardConstraints);
         graph.calcPath();
         return graph;
     }
index a793e6d58439ade4920ee5de5294e6a29c64eed7..c04aec4adfcd182ec427960068009040219de94d 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.pce;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Comparator;
 
@@ -17,7 +18,7 @@ import java.util.Comparator;
  *
  */
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class SortPortsByName implements Comparator<String>, Serializable {
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/constraints/OperatorConstraints.java b/pce/src/main/java/org/opendaylight/transportpce/pce/constraints/OperatorConstraints.java
new file mode 100644 (file)
index 0000000..7e0048f
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.pce.constraints;
+
+import java.util.BitSet;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
+import org.opendaylight.transportpce.common.fixedflex.GridUtils;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.controller.customization.rev230526.controller.parameters.SpectrumFilling;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.controller.customization.rev230526.controller.parameters.spectrum.filling.SpectrumFillingRules;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.controller.customization.rev230526.controller.parameters.spectrum.filling.SpectrumFillingRulesKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ControllerBehaviourSettings;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ * Class to handle Operator Constraints associated with Specific Engineering rules
+ * as they are defined in the controller-behaviour-settings container of the service
+ * Data-Store.
+ *
+ */
+
+public class OperatorConstraints {
+
+    /* Logging. */
+    private static final Logger LOG = LoggerFactory.getLogger(OperatorConstraints.class);
+    private static final String SPECTRUM_LOG_MSG =
+        "Specific Spectrum filling Rules have been defined for {} the spectrum range {} - {}";
+    private NetworkTransactionService networkTransaction;
+
+    public OperatorConstraints(NetworkTransactionService networkTransaction) {
+
+        this.networkTransaction = networkTransaction;
+
+    }
+
+    public BitSet getBitMapConstraint(String customerName) {
+        BitSet referenceBitSet = new BitSet(GridConstant.EFFECTIVE_BITS);
+        referenceBitSet.set(0, GridConstant.EFFECTIVE_BITS, true);
+        InstanceIdentifier<SpectrumFilling> sfIID =
+            InstanceIdentifier
+                .builder(ControllerBehaviourSettings.class)
+                .child(SpectrumFilling.class)
+                .build();
+
+        try {
+            if (networkTransaction.read(LogicalDatastoreType.CONFIGURATION, sfIID).get().isPresent()) {
+                SpectrumFilling spectrumConstraint = networkTransaction
+                    .read(LogicalDatastoreType.CONFIGURATION, sfIID)
+                    .get().orElseThrow();
+                if (spectrumConstraint.getSpectrumFillingRules().isEmpty()) {
+                    return referenceBitSet;
+                }
+                if (customerName == null) {
+                    for (Map.Entry<SpectrumFillingRulesKey, SpectrumFillingRules> rule:
+                            spectrumConstraint.getSpectrumFillingRules().entrySet()) {
+                        var spectrumRangeOfAppl = rule.getValue().getSpectrumRangeOfAppliance();
+                        var dedicatedCustomer = spectrumRangeOfAppl.getDedicatedCustomer();
+                        if (dedicatedCustomer == null || dedicatedCustomer.isEmpty()) {
+                            continue;
+                        }
+                        // Spectrum portion is dedicated to some customers that do not include this one
+                        FrequencyTHz startFreq = spectrumRangeOfAppl.getStartEdgeFrequency();
+                        FrequencyTHz stopFreq = spectrumRangeOfAppl.getStopEdgeFrequency();
+                        referenceBitSet.set(
+                            GridUtils.getIndexFromFrequency(startFreq.getValue()),
+                            GridUtils.getIndexFromFrequency(stopFreq.getValue()),
+                            false);
+                        LOG.info(SPECTRUM_LOG_MSG,
+                            "other customers, preventing the customer from using", startFreq, stopFreq);
+                    }
+                    return referenceBitSet;
+                }
+
+                for (Map.Entry<SpectrumFillingRulesKey, SpectrumFillingRules> rule:
+                        spectrumConstraint.getSpectrumFillingRules().entrySet()) {
+                    var spectrumRangeOfAppl = rule.getValue().getSpectrumRangeOfAppliance();
+                    FrequencyTHz startFreq = spectrumRangeOfAppl.getStartEdgeFrequency();
+                    FrequencyTHz stopFreq = spectrumRangeOfAppl.getStopEdgeFrequency();
+                    var nonAuthorizedCustomer = spectrumRangeOfAppl.getNonAuthorizedCustomer();
+                    if (nonAuthorizedCustomer != null && nonAuthorizedCustomer.contains(customerName)) {
+                        //Customer shall not be put in this spectrum portion
+                        referenceBitSet.set(
+                            GridUtils.getIndexFromFrequency(startFreq.getValue()),
+                            GridUtils.getIndexFromFrequency(stopFreq.getValue()),
+                            false);
+                        LOG.info(SPECTRUM_LOG_MSG,
+                            "customer " + customerName + ", exluding it from", startFreq, stopFreq);
+                        continue;
+                    }
+                    var dedicatedCustomer = spectrumRangeOfAppl.getDedicatedCustomer();
+                    if (dedicatedCustomer == null || dedicatedCustomer.isEmpty()) {
+                        continue;
+                    }
+                    if (dedicatedCustomer.contains(customerName)) {
+                        // Spectrum portion is dedicated to customers including this one
+                        referenceBitSet.set(
+                            GridUtils.getIndexFromFrequency(startFreq.getValue()),
+                            GridUtils.getIndexFromFrequency(stopFreq.getValue()),
+                            true);
+                        LOG.info(SPECTRUM_LOG_MSG,
+                            "customer " + customerName + ", to dedicate", startFreq, stopFreq + " to it");
+                        continue;
+                    }
+                    // Spectrum portion is dedicated to some customers that do not include this one
+                    referenceBitSet.set(
+                        GridUtils.getIndexFromFrequency(startFreq.getValue()),
+                        GridUtils.getIndexFromFrequency(stopFreq.getValue()),
+                        false);
+                    LOG.info(SPECTRUM_LOG_MSG,
+                        "other customers, preventing the customer from using", startFreq, stopFreq);
+                }
+                return referenceBitSet;
+            }
+        } catch (InterruptedException | ExecutionException e1) {
+            LOG.error("Exception caught handling Spectrum filling Rules ", e1.getCause());
+        }
+        LOG.info("Did not succeed finding any Specific Spectrum filling Rules defined in Configuration Datastore");
+        return referenceBitSet;
+    }
+}
index 73b95e439306895eddda825ce285b3799941448d..6db7c9b2c3a1d711506f7ab26ae6449bd4ff62a3 100644 (file)
@@ -20,22 +20,22 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints.ResourcePair;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.Constraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRouting;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Diversity;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Exclude;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Include;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service.constraints.ServiceIdentifierList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service.constraints.ServiceIdentifierListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.service.applicability.g.ServiceApplicability;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Link;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Node;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.Constraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRouting;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Diversity;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Exclude;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Include;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service.constraints.ServiceIdentifierList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service.constraints.ServiceIdentifierListKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.service.applicability.g.ServiceApplicability;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Link;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Node;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.PceMetric;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
@@ -166,7 +166,7 @@ public class PceConstraintsCalc {
         Map<ServiceIdentifierListKey, ServiceIdentifierList> serviceIdList = diversity.getServiceIdentifierList();
         Collection<ServiceIdentifierList> services = serviceIdList.values();
         for (ServiceIdentifierList serviceIdentifier : services) {
-            String serviceId = serviceIdentifier.getServiceIndentifier();
+            String serviceId = serviceIdentifier.getServiceIdentifier();
             ServiceApplicability serviceApplicability = serviceIdentifier.getServiceApplicability();
             Optional<PathDescription> serviceOpt = getPathDescriptionFromDatastore(serviceId);
             if (serviceOpt.isPresent()) {
index 47e428f97a677c831435ee93d97ab526b45a5355..bfe3acc6850fb175bdffcad8f86ddd4f1f3495de 100644 (file)
@@ -10,9 +10,7 @@ package org.opendaylight.transportpce.pce.gnpy;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.Result;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.explicit.route.hop.type.NumUnnumHop;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.generic.path.properties.path.properties.PathMetric;
@@ -21,10 +19,10 @@ import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.result.Response;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.result.response.response.type.NoPathCase;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.result.response.response.type.PathCase;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Include;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.IncludeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Include;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.IncludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -107,7 +105,7 @@ public class GnpyResult {
         HardConstraints hardConstraints = null;
         // Includes the list of nodes in the GNPy computed path as constraints
         // for the PCE
-        Set<NodeIdType> nodeIdList = new HashSet<>();
+        List<NodeIdType> nodeIdList = new ArrayList<>();
         for (PathRouteObjects pathRouteObjects : pathRouteObjectList) {
             if (pathRouteObjects.getPathRouteObject().getType() instanceof NumUnnumHop) {
                 NumUnnumHop numUnnumHop = (NumUnnumHop) pathRouteObjects.getPathRouteObject().getType();
index d830c2f53c09e80817d4157501f12575a9cf09af..9208f61519af988658f095bd0d112185f4a920db 100644 (file)
@@ -56,14 +56,16 @@ import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.Syn
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.SynchronizationBuilder;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.synchronization.Svec;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.synchronization.SvecBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.Resource;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.Resource;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Link;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Node;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
@@ -230,28 +232,16 @@ public class GnpyServiceImpl {
     //Create a new resource node or link
     private Long createResource(@Nullable Resource resource, Long index) throws GnpyException {
         Long idx = index;
-        if (resource
-            instanceof
-                org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
-                    .pce.resource.resource.resource.Node) {
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
-                .pce.resource.resource.resource.Node node =
-                (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
-                    .pce.resource.resource.resource.Node) resource;
+        if (resource instanceof Node) {
+            Node node = (Node) resource;
             if (node.getNodeId() == null) {
                 throw new GnpyException("In gnpyServiceImpl: nodeId is null");
             }
             idx = addNodeToRouteObject(this.mapDisgNodeRefNode.get(node.getNodeId()),idx);
         }
 
-        if (resource
-            instanceof
-                org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
-                    .pce.resource.resource.resource.Link) {
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
-                .pce.resource.resource.resource.Link link =
-                (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
-                    .pce.resource.resource.resource.Link) resource;
+        if (resource instanceof Link) {
+            Link link = (Link) resource;
             idx = addLinkToRouteObject(link.getLinkId(),idx);
         }
         return idx;
index beb49173bf64f539df5733f6771603edca7ea7ac..ad3ffb06c2b39a04de041cfb621527ad100ca815 100644 (file)
@@ -44,15 +44,15 @@ import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev220615.topo.El
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev220615.topo.ElementsKey;
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev220615.topo.elements.Metadata;
 import org.opendaylight.yang.gen.v1.gnpy.gnpy.network.topology.rev220615.topo.elements.MetadataBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.SpanAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.amplified.link.section.element.section.element.Span;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.amplified.link.section.element.section.element.ila.Ila;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.OMSAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.SpanAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLink;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.amplified.link.section.element.section.element.Span;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.amplified.link.section.element.section.element.ila.Ila;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.OMSAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenation;
 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.networks.Network;
@@ -164,13 +164,13 @@ public class GnpyTopoImpl {
                 // Retrieve the mapping between the openRoadm topology and openRoadm network
                 mapDisgNodeRefNode.put(openRoadmTopoNode.getNodeId().getValue(), nodeRef);
                 Node1 openRoadmNetNode1 = null;
-                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                     .Node1 commonNetworkNode1 = null;
                 for (Node openRoadmNetNode : openRoadmNetNodeList) {
                     if (openRoadmNetNode.getNodeId().getValue().equals(nodeRef)) {
                         openRoadmNetNode1 = openRoadmNetNode.augmentation(Node1.class);
                         commonNetworkNode1 = openRoadmNetNode.augmentation(org.opendaylight.yang.gen.v1
-                            .http.org.openroadm.common.network.rev211210.Node1.class);
+                            .http.org.openroadm.common.network.rev230526.Node1.class);
                         break;
                     }
                 }
@@ -217,9 +217,9 @@ public class GnpyTopoImpl {
 
         for (Link link : linksList) {
             Link1 link1 = link.augmentation(Link1.class);
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
                 .Link1 openroadmNetworkLink1 = link.augmentation(org.opendaylight.yang.gen.v1.http
-                        .org.openroadm.network.topology.rev211210.Link1.class);
+                        .org.openroadm.network.topology.rev230526.Link1.class);
             if (link1.getLinkType() == null) {
                 throw new GnpyException("In gnpyTopoImpl: the link type is null");
             }
index 9f3fb18514ee457211a982054296afbb0ca7e61d..9ae44120c060c63cb3a6702951564bf43db9e254 100644 (file)
@@ -23,11 +23,11 @@ import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.Result;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.generic.path.properties.path.properties.PathRouteObjects;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.service.PathRequest;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.synchronization.info.Synchronization;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
 /**
index 0f1b32aa1e282ddca7ea60495474e3a7e6fce624..262b7cc19974c1e525a5962794686a51216fc875 100644 (file)
@@ -8,12 +8,13 @@
 
 package org.opendaylight.transportpce.pce.gnpy.utils;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Comparator;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
 
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class AToZComparator implements Comparator<AToZ>, Serializable {
index 4571c638013b236a011eff863cb02295a6990db9..e946ce9f4c0eb298ba8b3b4462fed55ad7bc0b31 100644 (file)
@@ -8,12 +8,13 @@
 
 package org.opendaylight.transportpce.pce.gnpy.utils;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Comparator;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
 
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class ZToAComparator implements Comparator<ZToA>, Serializable {
index 90c995d219a74a4d9af4bcfe6f68d714a675c52c..168f7f8fea8e6349d127d27ac28e58801c64da39 100644 (file)
@@ -10,7 +10,7 @@ package org.opendaylight.transportpce.pce.graph;
 
 import org.jgrapht.GraphPath;
 import org.jgrapht.alg.shortestpath.PathValidator;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 0a2d75fc67a6f43f1fe15e68ae6fe3c88344cc79..994d3256fcbdce825275437c91d2357e60b176f2 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.transportpce.pce.graph;
 
 import java.util.ArrayList;
+import java.util.BitSet;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -17,9 +18,10 @@ import java.util.Map.Entry;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+import org.jgrapht.Graph;
 import org.jgrapht.GraphPath;
-import org.jgrapht.alg.shortestpath.KShortestSimplePaths;
 import org.jgrapht.alg.shortestpath.PathValidator;
+import org.jgrapht.alg.shortestpath.YenKShortestPath;
 import org.jgrapht.graph.DefaultDirectedWeightedGraph;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.StringConstants;
@@ -29,6 +31,7 @@ import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceNode;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceResult.LocalCause;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PceConstraintMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.topology.rev180226.LinkId;
@@ -43,9 +46,6 @@ public class PceGraph {
     // how many paths to bring
     private int kpathsToBring = 15;
 
-    // max #hops
-    private int mhopsPerPath = 100;
-
     // input
     private Map<NodeId, PceNode> allPceNodes = new HashMap<>();
     private Map<LinkId, PceLink> allPceLinks = new HashMap<>();
@@ -54,7 +54,8 @@ public class PceGraph {
     private String serviceType = "";
     private Double margin = null;
     PceConstraints pceHardConstraints;
-    PceConstraints pceSoftConstraints;
+    private PceConstraintMode pceConstraintMode;
+    private BitSet spectrumConstraint;
 
     // results
     private PceResult pceResult = null;
@@ -68,8 +69,8 @@ public class PceGraph {
     private final NetworkTransactionService networkTransactionService;
 
     public PceGraph(PceNode aendNode, PceNode zendNode, Map<NodeId, PceNode> allPceNodes,
-            Map<LinkId, PceLink> allPceLinks, PceConstraints pceHardConstraints, PceConstraints pceSoftConstraints,
-            PceResult pceResult, String serviceType, NetworkTransactionService networkTransactionService) {
+            Map<LinkId, PceLink> allPceLinks, PceConstraints pceHardConstraints,PceResult pceResult, String serviceType,
+            NetworkTransactionService networkTransactionService, PceConstraintMode mode, BitSet spectrumConstraint) {
         super();
         this.apceNode = aendNode;
         this.zpceNode = zendNode;
@@ -77,9 +78,10 @@ public class PceGraph {
         this.allPceLinks = allPceLinks;
         this.pceResult = pceResult;
         this.pceHardConstraints = pceHardConstraints;
-        this.pceSoftConstraints = pceSoftConstraints;
         this.serviceType = serviceType;
         this.networkTransactionService = networkTransactionService;
+        this.pceConstraintMode = mode;
+        this.spectrumConstraint = spectrumConstraint;
 
         LOG.info("In GraphCalculator: A and Z = {} / {} ", aendNode, zendNode);
         LOG.debug("In GraphCalculator: allPceNodes size {}, nodes {} ", allPceNodes.size(), allPceNodes);
@@ -89,7 +91,7 @@ public class PceGraph {
 
         LOG.info(" In PCE GRAPH calcPath : K SHORT PATHS algorithm ");
 
-        DefaultDirectedWeightedGraph<String, PceGraphEdge> weightedGraph =
+        Graph<String, PceGraphEdge> weightedGraph =
                 new DefaultDirectedWeightedGraph<>(PceGraphEdge.class);
         populateWithNodes(weightedGraph);
         populateWithLinks(weightedGraph);
@@ -103,8 +105,9 @@ public class PceGraph {
         for (Entry<Integer, GraphPath<String, PceGraphEdge>> entry : allWPaths.entrySet()) {
             GraphPath<String, PceGraphEdge> path = entry.getValue();
             LOG.info("validating path n° {} - {}", entry.getKey(), path.getVertexList());
-            PostAlgoPathValidator papv = new PostAlgoPathValidator(networkTransactionService);
-            pceResult = papv.checkPath(path, allPceNodes, allPceLinks, pceResult, pceHardConstraints, serviceType);
+            PostAlgoPathValidator papv = new PostAlgoPathValidator(networkTransactionService, spectrumConstraint);
+            pceResult = papv.checkPath(
+                    path, allPceNodes, allPceLinks, pceResult, pceHardConstraints, serviceType, pceConstraintMode);
             this.margin = papv.getTpceCalculatedMargin();
             if (ResponseCodes.RESPONSE_OK.equals(pceResult.getResponseCode())) {
                 LOG.info("Path is validated");
@@ -155,16 +158,15 @@ public class PceGraph {
         return (pceResult.getStatus());
     }
 
-    private boolean runKgraphs(DefaultDirectedWeightedGraph<String, PceGraphEdge> weightedGraph) {
+    private boolean runKgraphs(Graph<String, PceGraphEdge> weightedGraph) {
 
         if (weightedGraph.edgeSet().isEmpty() || weightedGraph.vertexSet().isEmpty()) {
             return false;
         }
         PathValidator<String, PceGraphEdge> wpv = new InAlgoPathValidator();
 
-        // KShortestPaths on weightedGraph
-        KShortestSimplePaths<String, PceGraphEdge> swp =
-            new KShortestSimplePaths<>(weightedGraph, mhopsPerPath, wpv);
+        // YenShortestPath on weightedGraph
+        YenKShortestPath<String, PceGraphEdge> swp = new YenKShortestPath<>(weightedGraph, wpv);
         List<GraphPath<String, PceGraphEdge>> weightedPathList = swp
             .getPaths(apceNode.getNodeId().getValue(), zpceNode.getNodeId().getValue(), kpathsToBring);
         allWPaths = IntStream
@@ -202,7 +204,7 @@ public class PceGraph {
         return true;
     }
 
-    private void populateWithNodes(DefaultDirectedWeightedGraph<String, PceGraphEdge> weightedGraph) {
+    private void populateWithNodes(Graph<String, PceGraphEdge> weightedGraph) {
         Iterator<Map.Entry<NodeId, PceNode>> nodes = allPceNodes.entrySet().iterator();
         while (nodes.hasNext()) {
             Map.Entry<NodeId, PceNode> node = nodes.next();
@@ -213,7 +215,7 @@ public class PceGraph {
         }
     }
 
-    private boolean populateWithLinks(DefaultDirectedWeightedGraph<String, PceGraphEdge> weightedGraph) {
+    private boolean populateWithLinks(Graph<String, PceGraphEdge> weightedGraph) {
 
         Iterator<Map.Entry<NodeId, PceNode>> nodes = allPceNodes.entrySet().iterator();
         while (nodes.hasNext()) {
@@ -278,10 +280,6 @@ public class PceGraph {
         this.kpathsToBring = kpathsToBring;
     }
 
-    public void setMhopsPerPath(int mhopsPerPath) {
-        this.mhopsPerPath = mhopsPerPath;
-    }
-
     public List<PceLink> getPathAtoZ() {
         return shortestPathAtoZ;
     }
@@ -294,8 +292,7 @@ public class PceGraph {
         return margin;
     }
 
-    public void setConstrains(PceConstraints pceHardConstraintsInput, PceConstraints pceSoftConstraintsInput) {
+    public void setConstrains(PceConstraints pceHardConstraintsInput) {
         this.pceHardConstraints = pceHardConstraintsInput;
-        this.pceSoftConstraints = pceSoftConstraintsInput;
     }
 }
index 6983d3f18e5808dfcab9eabb1b0786d120e169e4..e5a4f251f8c31dc54d947fb5ac1cfd0608f186a5 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.transportpce.pce.graph;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import org.jgrapht.graph.DefaultWeightedEdge;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
 
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class PceGraphEdge extends DefaultWeightedEdge {
index 3095098d56596e047a11727e5d1826121829e60a..53353aeae0415acfb29aa9867e4f4d2de734be67 100644 (file)
@@ -16,8 +16,10 @@ import java.util.Arrays;
 import java.util.BitSet;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 import org.jgrapht.GraphPath;
@@ -36,11 +38,12 @@ import org.opendaylight.transportpce.pce.constraints.PceConstraints.ResourcePair
 import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceNode;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.SpectrumAssignment;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.SpectrumAssignmentBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PceConstraintMode;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.SpectrumAssignment;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.SpectrumAssignmentBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OpucnTribSlotDef;
 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.topology.rev180226.LinkId;
@@ -55,11 +58,14 @@ public class PostAlgoPathValidator {
 
     public static final Long CONST_OSNR = 1L;
     public static final double SYS_MARGIN = 0;
+
     private Double tpceCalculatedMargin = 0.0;
     private final NetworkTransactionService networkTransactionService;
+    private final BitSet spectrumConstraint;
 
-    public PostAlgoPathValidator(NetworkTransactionService networkTransactionService) {
+    public PostAlgoPathValidator(NetworkTransactionService networkTransactionService, BitSet spectrumConstraint) {
         this.networkTransactionService = networkTransactionService;
+        this.spectrumConstraint = spectrumConstraint;
     }
 
     @SuppressWarnings("fallthrough")
@@ -68,7 +74,7 @@ public class PostAlgoPathValidator {
         justification = "intentional fallthrough")
     public PceResult checkPath(GraphPath<String, PceGraphEdge> path, Map<NodeId, PceNode> allPceNodes,
             Map<LinkId, PceLink> allPceLinks, PceResult pceResult, PceConstraints pceHardConstraints,
-            String serviceType) {
+            String serviceType, PceConstraintMode mode) {
         LOG.info("path = {}", path);
         // check if the path is empty
         if (path.getEdgeList().isEmpty()) {
@@ -139,7 +145,7 @@ public class PostAlgoPathValidator {
                     return pceResult;
                 }
                 // Check if nodes are included in the hard constraints
-                if (!checkInclude(path, pceHardConstraints)) {
+                if (!checkInclude(path, pceHardConstraints, mode)) {
                     pceResult.setRC(ResponseCodes.RESPONSE_FAILED);
                     pceResult.setLocalCause(PceResult.LocalCause.HD_NODE_INCLUDE);
                     return pceResult;
@@ -202,15 +208,17 @@ public class PostAlgoPathValidator {
     }
 
     // Check the inclusion if it is defined in the hard constraints
-    private boolean checkInclude(GraphPath<String, PceGraphEdge> path, PceConstraints pceHardConstraintsInput) {
-        List<ResourcePair> listToInclude = pceHardConstraintsInput.getListToInclude()
-            .stream().sorted((rp1, rp2) -> rp1.getName().compareTo(rp2.getName()))
-            .collect(Collectors.toList());
+    //TODO: remove this checkstyle false positive warning when the checkstyle bug will be fixed
+    @SuppressWarnings("MissingSwitchDefault")
+    private boolean checkInclude(GraphPath<String, PceGraphEdge> path, PceConstraints pceHardConstraintsInput,
+            PceConstraintMode mode) {
+        List<ResourcePair> listToInclude = pceHardConstraintsInput.getListToInclude();
         if (listToInclude.isEmpty()) {
             return true;
         }
         List<PceGraphEdge> pathEdges = path.getEdgeList();
         LOG.debug(" in checkInclude vertex list: [{}]", path.getVertexList());
+        LOG.debug("listToInclude = {}", listToInclude);
         List<String> listOfElementsSubNode = new ArrayList<>();
         listOfElementsSubNode.add(pathEdges.get(0).link().getsourceNetworkSupNodeId());
         listOfElementsSubNode.addAll(
@@ -225,10 +233,17 @@ public class PostAlgoPathValidator {
         listOfElementsSRLG.addAll(
             listOfElementsBuild(pathEdges, PceConstraints.ResourceType.SRLG, pceHardConstraintsInput));
         // validation: check each type for each element
-        return listOfElementsSubNode.containsAll(
-                listToInclude
-                    .stream().filter(rp -> PceConstraints.ResourceType.NODE.equals(rp.getType()))
-                    .map(ResourcePair::getName).collect(Collectors.toList()))
+        LOG.debug("listOfElementsSubNode = {}", listOfElementsSubNode);
+        return switch (mode) {
+            case Loose -> listOfElementsSubNode
+                .containsAll(listToInclude.stream()
+                    .filter(rp -> PceConstraints.ResourceType.NODE.equals(rp.getType()))
+                    .map(ResourcePair::getName).collect(Collectors.toList()));
+            case Strict -> listOfElementsSubNode
+                .equals(listToInclude.stream()
+                    .filter(rp -> PceConstraints.ResourceType.NODE.equals(rp.getType()))
+                    .map(ResourcePair::getName).collect(Collectors.toList()));
+        }
             && listOfElementsSRLG.containsAll(
                 listToInclude
                     .stream().filter(rp -> PceConstraints.ResourceType.SRLG.equals(rp.getType()))
@@ -241,7 +256,7 @@ public class PostAlgoPathValidator {
 
     private List<String> listOfElementsBuild(List<PceGraphEdge> pathEdges, PceConstraints.ResourceType type,
             PceConstraints pceHardConstraints) {
-        List<String> listOfElements = new ArrayList<>();
+        Set<String> listOfElements = new LinkedHashSet<>();
         for (PceGraphEdge link : pathEdges) {
             switch (type) {
                 case NODE:
@@ -277,7 +292,7 @@ public class PostAlgoPathValidator {
                     LOG.debug("listOfElementsBuild unsupported resource type");
             }
         }
-        return listOfElements;
+        return new ArrayList<>(listOfElements);
     }
 
     private Map<String, Uint16> chooseTribPort(GraphPath<String,
@@ -370,7 +385,7 @@ public class PostAlgoPathValidator {
 
     private List<OpucnTribSlotDef> getMinMaxTpTs(Map<String, Uint16> tribPort, Map<String, List<Uint16>> tribSlot) {
         String tribport = tribPort.values().toArray()[0].toString();
-        List<Uint16> tsList = (List<Uint16>) tribSlot.values().toArray()[0];
+        @SuppressWarnings("unchecked") List<Uint16> tsList = (List<Uint16>) tribSlot.values().toArray()[0];
         return new ArrayList<>(List.of(
             OpucnTribSlotDef.getDefaultInstance(String.join(".", tribport, tsList.get(0).toString())),
             OpucnTribSlotDef.getDefaultInstance(String.join(".", tribport, tsList.get(tsList.size() - 1).toString()))));
@@ -992,36 +1007,53 @@ public class PostAlgoPathValidator {
         BitSet result = BitSet.valueOf(freqMap);
         boolean isFlexGrid = true;
         LOG.debug("Processing path {} with length {}", path, path.getLength());
+        BitSet pceNodeFreqMap;
+        Set<PceNode> pceNodes = new LinkedHashSet<>();
+
         for (PceGraphEdge edge : path.getEdgeList()) {
-            NodeId srcNodeId = edge.link().getSourceId();
-            LOG.debug("Processing source {} ", srcNodeId);
-            if (allPceNodes.containsKey(srcNodeId)) {
-                PceNode pceNode = allPceNodes.get(srcNodeId);
-                LOG.debug("Processing PCE node {}", pceNode);
-                String pceNodeVersion = pceNode.getVersion();
-                NodeId pceNodeId = pceNode.getNodeId();
-                BigDecimal sltWdthGran = pceNode.getSlotWidthGranularity();
-                BigDecimal ctralFreqGran = pceNode.getCentralFreqGranularity();
-                if (StringConstants.OPENROADM_DEVICE_VERSION_1_2_1.equals(pceNodeVersion)) {
-                    LOG.debug("Node {}: version is {} and slot width granularity is {} -> fixed grid mode",
-                        pceNodeId, pceNodeVersion, sltWdthGran);
-                    isFlexGrid = false;
-                }
-                if (sltWdthGran.setScale(0, RoundingMode.CEILING).equals(GridConstant.SLOT_WIDTH_50)
-                        && ctralFreqGran.setScale(0, RoundingMode.CEILING).equals(GridConstant.SLOT_WIDTH_50)) {
-                    LOG.debug("Node {}: version is {} with slot width granularity {} and central "
-                            + "frequency granularity is {} -> fixed grid mode",
-                        pceNodeId, pceNodeVersion, sltWdthGran, ctralFreqGran);
-                    isFlexGrid = false;
-                }
-                BitSet pceNodeFreqMap = pceNode.getBitSetData();
-                LOG.debug("Pce node bitset {}", pceNodeFreqMap);
-                if (pceNodeFreqMap != null) {
-                    result.and(pceNodeFreqMap);
-                    LOG.debug("intermediate bitset {}", result);
-                }
+            NodeId srcId = edge.link().getSourceId();
+            NodeId dstId = edge.link().getDestId();
+            LOG.debug("Processing {} to {}", srcId.getValue(), dstId.getValue());
+            if (allPceNodes.containsKey(srcId)) {
+                pceNodes.add(allPceNodes.get(srcId));
+            }
+            if (allPceNodes.containsKey(dstId)) {
+                pceNodes.add(allPceNodes.get(dstId));
             }
         }
+
+        for (PceNode pceNode : pceNodes) {
+            LOG.debug("Processing PCE node {}", pceNode);
+            pceNodeFreqMap = pceNode.getBitSetData();
+            LOG.debug("Pce node bitset {}", pceNodeFreqMap);
+            if (pceNodeFreqMap != null) {
+                result.and(pceNodeFreqMap);
+                LOG.debug("intermediate bitset {}", result);
+            }
+            String pceNodeVersion = pceNode.getVersion();
+            BigDecimal sltWdthGran = pceNode.getSlotWidthGranularity();
+            if (StringConstants.OPENROADM_DEVICE_VERSION_1_2_1.equals(pceNodeVersion)) {
+                LOG.debug("Node {}: version is {} with slot width granularity {} - fixed grid mode",
+                    pceNode.getNodeId(), pceNodeVersion, sltWdthGran);
+                isFlexGrid = false;
+                continue;
+            }
+            if (!sltWdthGran.setScale(0, RoundingMode.CEILING).equals(GridConstant.SLOT_WIDTH_50)) {
+                continue;
+            }
+            BigDecimal ctralFreqGran = pceNode.getCentralFreqGranularity();
+            if (!ctralFreqGran.setScale(0, RoundingMode.CEILING).equals(GridConstant.SLOT_WIDTH_50)) {
+                continue;
+            }
+            LOG.debug(
+                "Node {}: version is {} with slot width and central frequency granularities {} {} - fixed grid mode",
+                pceNode.getNodeId(), pceNodeVersion, sltWdthGran, ctralFreqGran);
+            isFlexGrid = false;
+        }
+        if (spectrumConstraint != null) {
+            result.and(spectrumConstraint);
+        }
+
         LOG.debug("Bitset result {}", result);
         return computeBestSpectrumAssignment(result, spectralWidthSlotNumber, isFlexGrid);
     }
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/impl/CancelResourceReserveImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/impl/CancelResourceReserveImpl.java
new file mode 100644 (file)
index 0000000..83040f0
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.pce.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserve;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutput;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class CancelResourceReserveImpl implements CancelResourceReserve {
+    private static final Logger LOG = LoggerFactory.getLogger(CancelResourceReserveImpl.class);
+    private PathComputationService pathComputationService;
+
+    public CancelResourceReserveImpl(final PathComputationService pathComputationService) {
+        this.pathComputationService = pathComputationService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CancelResourceReserveOutput>> invoke(CancelResourceReserveInput input) {
+        LOG.info("RPC cancelResourceReserve request received");
+        try {
+            return RpcResultBuilder
+                    .success(this.pathComputationService.cancelResourceReserve(input).get())
+                    .buildFuture();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("RPC cancelResourceReserve failed !", e);
+        }
+        return RpcResultBuilder.<CancelResourceReserveOutput>failed()
+                .withError(ErrorType.RPC, "cancel-resource-reserve failed")
+                .buildFuture();
+    }
+
+}
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/impl/PathComputationRequestImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/impl/PathComputationRequestImpl.java
new file mode 100644 (file)
index 0000000..2f9089e
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.pce.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequest;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class PathComputationRequestImpl implements PathComputationRequest {
+    private static final Logger LOG = LoggerFactory.getLogger(PathComputationRequestImpl.class);
+    private PathComputationService pathComputationService;
+
+    public PathComputationRequestImpl(final PathComputationService pathComputationService) {
+        this.pathComputationService = pathComputationService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<PathComputationRequestOutput>> invoke(PathComputationRequestInput input) {
+        LOG.info("RPC path computation request received");
+        LOG.debug("input parameters are : input = {}", input);
+        try {
+            return RpcResultBuilder.success(pathComputationService.pathComputationRequest(input).get()).buildFuture();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("RPC path computation request failed !", e);
+        }
+        return RpcResultBuilder.<PathComputationRequestOutput>failed()
+                .withError(ErrorType.RPC, "path-computation-request failed")
+                .buildFuture();
+    }
+
+}
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/impl/PathComputationRerouteRequestImpl.java b/pce/src/main/java/org/opendaylight/transportpce/pce/impl/PathComputationRerouteRequestImpl.java
new file mode 100644 (file)
index 0000000..7b8db93
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.pce.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequest;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutput;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class PathComputationRerouteRequestImpl implements PathComputationRerouteRequest {
+    private static final Logger LOG = LoggerFactory.getLogger(PathComputationRerouteRequestImpl.class);
+    private PathComputationService pathComputationService;
+
+    public PathComputationRerouteRequestImpl(final PathComputationService pathComputationService) {
+        this.pathComputationService = pathComputationService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<PathComputationRerouteRequestOutput>> invoke(
+                PathComputationRerouteRequestInput input) {
+        LOG.info("RPC path computation reroute request received");
+        LOG.debug("input parameters are : input = {}", input);
+        try {
+            return RpcResultBuilder
+                    .success(this.pathComputationService.pathComputationRerouteRequest(input).get())
+                    .buildFuture();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("RPC path computation request failed !", e);
+        }
+        return RpcResultBuilder.<PathComputationRerouteRequestOutput>failed()
+                .withError(ErrorType.RPC, "path-computation-reroute-request failed")
+                .buildFuture();
+    }
+
+}
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/impl/PceProvider.java b/pce/src/main/java/org/opendaylight/transportpce/pce/impl/PceProvider.java
deleted file mode 100644 (file)
index bab1554..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright © 2017 AT&T, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.pce.impl;
-
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.transportpce.pce.service.PathComputationService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceService;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/*
- * Class to register
- * Pce Service & Notification.
- */
-@Component
-public class PceProvider {
-
-    private static final Logger LOG = LoggerFactory.getLogger(PceProvider.class);
-
-    private final RpcProviderService rpcService;
-    private ObjectRegistration<PceServiceRPCImpl> rpcRegistration;
-
-    @Activate
-    public PceProvider(@Reference RpcProviderService rpcProviderService,
-            @Reference PathComputationService pathComputationService) {
-        this.rpcService = rpcProviderService;
-        LOG.info("PceProvider Session Initiated");
-        final PceServiceRPCImpl consumer = new PceServiceRPCImpl(pathComputationService);
-        rpcRegistration = rpcService.registerRpcImplementation(TransportpcePceService.class, consumer);
-    }
-
-    /*
-     * Method called when the blueprint container is destroyed.
-     */
-    @Deactivate
-    public void close() {
-        LOG.info("PceProvider Closed");
-        rpcRegistration.close();
-    }
-}
index 13fd7684d842a0e27c2f85f5122c19eb31690fa7..56143f4f7a6f548d273684510a01d8fcb2890684 100644 (file)
@@ -7,78 +7,41 @@
  */
 package org.opendaylight.transportpce.pce.impl;
 
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceService;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * PceService implementation.
  */
-public class PceServiceRPCImpl implements TransportpcePceService {
-
+@Component(immediate = true)
+public class PceServiceRPCImpl {
     private static final Logger LOG = LoggerFactory.getLogger(PceServiceRPCImpl.class);
-
-    private final PathComputationService pathComputationService;
-
-    public PceServiceRPCImpl(PathComputationService pathComputationService) {
-        this.pathComputationService = pathComputationService;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<CancelResourceReserveOutput>>
-            cancelResourceReserve(CancelResourceReserveInput input) {
-        LOG.info("RPC cancelResourceReserve request received");
-        try {
-            return RpcResultBuilder
-                    .success(
-                            this.pathComputationService.cancelResourceReserve(input).get())
-                    .buildFuture();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("RPC cancelResourceReserve failed !", e);
-            return RpcResultBuilder.success((CancelResourceReserveOutput) null).buildFuture();
-        }
+    private Registration reg;
+
+    @Activate
+    public PceServiceRPCImpl(@Reference RpcProviderService rpcProviderService,
+            @Reference PathComputationService pathComputationService) {
+        this.reg = rpcProviderService.registerRpcImplementations(
+                new CancelResourceReserveImpl(pathComputationService),
+                new PathComputationRequestImpl(pathComputationService),
+                new PathComputationRerouteRequestImpl(pathComputationService));
+        LOG.info("PceServiceRPCImpl instantiated");
     }
 
-    @Override
-    public ListenableFuture<RpcResult<PathComputationRequestOutput>>
-            pathComputationRequest(PathComputationRequestInput input) {
-        LOG.info("RPC path computation request received");
-        LOG.debug("input parameters are : input = {}", input);
-        try {
-            return RpcResultBuilder
-                    .success(
-                            this.pathComputationService.pathComputationRequest(input).get())
-                    .buildFuture();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("RPC path computation request failed !", e);
-        }
-        return RpcResultBuilder.success((PathComputationRequestOutput) null).buildFuture();
+    @Deactivate
+    public void close() {
+        this.reg.close();
+        LOG.info("PceServiceRPCImpl Closed");
     }
 
-    @Override
-    public ListenableFuture<RpcResult<PathComputationRerouteRequestOutput>> pathComputationRerouteRequest(
-            PathComputationRerouteRequestInput input) {
-        LOG.info("RPC path computation reroute request received");
-        LOG.debug("input parameters are : input = {}", input);
-        try {
-            return RpcResultBuilder
-                    .success(
-                            this.pathComputationService.pathComputationRerouteRequest(input).get())
-                    .buildFuture();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("RPC path computation request failed !", e);
-            return RpcResultBuilder.success((PathComputationRerouteRequestOutput) null).buildFuture();
-        }
+    public Registration getRegisteredRpc() {
+        return reg;
     }
 }
index fcb038686d240226f322dae9808ef6c1e2f95c36..8382a9e2323df770e1099c13bb1a4c5db603cd95 100644 (file)
@@ -16,11 +16,11 @@ import java.util.SortedMap;
 import java.util.TreeMap;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.Span;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.Span;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.node.SupportingNode;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.LinkId;
@@ -103,8 +103,8 @@ public final class MapUtils {
     }
 
     public static List<Long> getSRLGfromLink(Link link) {
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1 linkC = link
-                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class);
+        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1 linkC = link
+                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class);
         if (linkC == null) {
             LOG.error(MAP_UTILS_NO_LINK_AUGMENTATION_AVAILABLE_MSG, link.getLinkId().getValue());
             return new ArrayList<>();
@@ -161,11 +161,11 @@ public final class MapUtils {
 
 
     public static Long getAvailableBandwidth(Link link) {
-        if (link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+        if (link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
             .Link1.class) != null
-            && link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            && link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                 .Link1.class).getAvailableBandwidth() != null) {
-            return link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            return link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                 .Link1.class).getAvailableBandwidth().toJava();
         } else {
             LOG.warn("MapUtils: no Available Bandwidth available for link {}", link.getLinkId());
@@ -174,11 +174,11 @@ public final class MapUtils {
     }
 
     public static Long getUsedBandwidth(Link link) {
-        if (link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+        if (link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
             .Link1.class) != null
-            && link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            && link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                 .Link1.class).getUsedBandwidth() != null) {
-            return link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+            return link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                 .Link1.class).getUsedBandwidth().toJava();
         } else {
             LOG.warn("MapUtils: no Available Bandwidth available for link {}", link.getLinkId());
@@ -206,9 +206,9 @@ public final class MapUtils {
     }
 
     public static Span getOmsAttributesSpan(Link link) {
-        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1 link1 = null;
+        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1 link1 = null;
         link1 =
-            link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1.class);
+            link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1.class);
 
         if (link1 == null) {
             LOG.error(MAP_UTILS_NO_LINK_AUGMENTATION_AVAILABLE_MSG, link.getLinkId().getValue());
@@ -223,7 +223,7 @@ public final class MapUtils {
 
     public static LinkId extractOppositeLink(Link link) {
         var linkOpposite
-            = link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1.class);
+            = link.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1.class);
         if (linkOpposite == null) {
             LOG.error("No opposite link augmentation for network link {}", link);
             return null;
index 60664c831e378c35f63483c1d922a1763218bca7..0afc9bca8a196d40f9d2821c215f31b8ec8d6d54 100644 (file)
@@ -29,15 +29,18 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.common.service.ServiceTypes;
 import org.opendaylight.transportpce.pce.PceComplianceCheck;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mc.capabilities.McCapabilities;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
+import org.opendaylight.transportpce.pce.networkanalyzer.port.Factory;
+import org.opendaylight.transportpce.pce.networkanalyzer.port.Preference;
+import org.opendaylight.transportpce.pce.networkanalyzer.port.PreferenceFactory;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.reroute.request.input.Endpoints;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mc.capabilities.McCapabilities;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
 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;
@@ -293,9 +296,11 @@ public class PceCalculation {
             case StringConstants.SERVICE_TYPE_OTUC2:
             case StringConstants.SERVICE_TYPE_OTUC3:
             case  StringConstants.SERVICE_TYPE_OTUC4:
+                Factory portPreferenceFactory = new PreferenceFactory();
+                Preference portPreference = portPreferenceFactory.portPreference(input);
                 // 100GE service and OTU4 service are handled at the openroadm-topology layer
                 for (Node node : allNodes) {
-                    validateNode(node);
+                    validateNode(node, portPreference);
                 }
 
                 LOG.debug("analyzeNw: allPceNodes size {}", allPceNodes.size());
@@ -439,7 +444,7 @@ public class PceCalculation {
         }
     }
 
-    private void validateNode(Node node) {
+    private void validateNode(Node node, Preference portPreference) {
         LOG.debug("validateNode: node {} ", node);
         // PceNode will be used in Graph algorithm
         Node1 node1 = node.augmentation(Node1.class);
@@ -478,7 +483,7 @@ public class PceCalculation {
             return;
         }
 
-        if (endPceNode(nodeType, pceNode.getNodeId(), pceNode)) {
+        if (endPceNode(nodeType, pceNode.getNodeId(), pceNode, portPreference)) {
             if (this.aendPceNode == null && isAZendPceNode(this.serviceFormatA, pceNode, anodeId, "A")) {
                 // Added to ensure A-node has a addlink in the topology
                 List<Link> links = this.allLinks.stream()
@@ -625,10 +630,11 @@ public class PceCalculation {
         }
     }
 
-    private Boolean endPceNode(OpenroadmNodeType openroadmNodeType, NodeId nodeId, PceOpticalNode pceNode) {
+    private Boolean endPceNode(OpenroadmNodeType openroadmNodeType, NodeId nodeId, PceOpticalNode pceNode,
+                               Preference portPreference) {
         switch (openroadmNodeType) {
             case SRG:
-                pceNode.initSrgTps();
+                pceNode.initSrgTps(portPreference);
                 this.azSrgs.add(nodeId);
                 break;
             case XPONDER:
@@ -668,13 +674,13 @@ public class PceCalculation {
                     pcelink.getlinkType(), pcelink);
                 break;
             case ADDLINK:
-                pcelink.setClient(
+                pcelink.setClientA(
                     source.getRdmSrgClient(pcelink.getSourceTP().getValue(), StringConstants.SERVICE_DIRECTION_AZ));
                 addLinks.add(pcelink);
                 LOG.debug("validateLink: ADD-LINK saved  {}", pcelink);
                 break;
             case DROPLINK:
-                pcelink.setClient(
+                pcelink.setClientZ(
                     dest.getRdmSrgClient(pcelink.getDestTP().getValue(), StringConstants.SERVICE_DIRECTION_ZA));
                 dropLinks.add(pcelink);
                 LOG.debug("validateLink: DROP-LINK saved  {}", pcelink);
@@ -689,7 +695,7 @@ public class PceCalculation {
                     return false;
                 }
                 if (dest.getXpdrClient(pcelink.getDestTP().getValue()) != null) {
-                    pcelink.setClient(dest.getXpdrClient(pcelink.getDestTP().getValue()));
+                    pcelink.setClientZ(dest.getXpdrClient(pcelink.getDestTP().getValue()));
                 }
                 allPceLinks.put(linkId, pcelink);
                 source.addOutgoingLink(pcelink);
@@ -706,7 +712,7 @@ public class PceCalculation {
                     return false;
                 }
                 if (source.getXpdrClient(pcelink.getSourceTP().getValue()) != null) {
-                    pcelink.setClient(source.getXpdrClient(pcelink.getSourceTP().getValue()));
+                    pcelink.setClientA(source.getXpdrClient(pcelink.getSourceTP().getValue()));
                 }
                 allPceLinks.put(linkId, pcelink);
                 source.addOutgoingLink(pcelink);
@@ -737,10 +743,10 @@ public class PceCalculation {
         switch (pceOtnLink.getlinkType()) {
             case OTNLINK:
                 if (source.getXpdrClient(pceOtnLink.getSourceTP().getValue()) != null) {
-                    pceOtnLink.setClient(source.getXpdrClient(pceOtnLink.getSourceTP().getValue()));
+                    pceOtnLink.setClientA(source.getXpdrClient(pceOtnLink.getSourceTP().getValue()));
                 }
                 if (dest.getXpdrClient(pceOtnLink.getDestTP().getValue()) != null) {
-                    pceOtnLink.setClient(dest.getXpdrClient(pceOtnLink.getDestTP().getValue()));
+                    pceOtnLink.setClientZ(dest.getXpdrClient(pceOtnLink.getDestTP().getValue()));
                 }
                 allPceLinks.put(linkId, pceOtnLink);
                 source.addOutgoingLink(pceOtnLink);
index 408c6c822e679c62a88c9de9f175f3a2c677d78a..dbec53d6fbdc5894ce7bbb2b39e9c0b56fd9df1a 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.transportpce.pce.networkanalyzer;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.HashMap;
@@ -15,15 +16,15 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1.FiberType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.Span;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1.FiberType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.Span;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationKey;
 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.topology.rev180226.LinkId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
@@ -32,7 +33,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @SuppressWarnings("serial")
-@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+@SuppressFBWarnings(
     value = "SE_NO_SERIALVERSIONID",
     justification = "https://github.com/rzwitserloot/lombok/wiki/WHY-NOT:-serialVersionUID")
 public class PceLink implements Serializable {
@@ -48,7 +49,8 @@ public class PceLink implements Serializable {
 
     // this member is for XPONDER INPUT/OUTPUT links.
     // it keeps name of client corresponding to NETWORK TP
-    private String client = "";
+    private String clientA = "";
+    private String clientZ = "";
     private final LinkId linkId;
     private final OpenroadmLinkType linkType;
     private final NodeId sourceId;
@@ -371,16 +373,24 @@ public class PceLink implements Serializable {
         return destId;
     }
 
-    public String getClient() {
-        return client;
+    public String getClientA() {
+        return clientA;
     }
 
     public Double getLength() {
         return length;
     }
 
-    public void setClient(String client) {
-        this.client = client;
+    public void setClientA(String client) {
+        this.clientA = client;
+    }
+
+    public String getClientZ() {
+        return clientZ;
+    }
+
+    public void setClientZ(String client) {
+        this.clientZ = client;
     }
 
     // Double for transformer of JUNG graph
index 5dc2184141a55856c95a9be415dcddef33a8821e..7d3b483bfc7ab50f1d93818da62ab7651bbdb79f 100644 (file)
@@ -14,8 +14,8 @@ import java.util.List;
 import java.util.Map;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.rev211210.networks.network.node.termination.point.XpdrNetworkAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
 import org.opendaylight.yangtools.yang.common.Uint16;
 
index 1ced1169007c65152c0aee98db86d3e5465a610c..611263d68a3f43e490abc0af1ab034a9146faa65 100644 (file)
@@ -21,23 +21,24 @@ import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.pce.SortPortsByName;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
+import org.opendaylight.transportpce.pce.networkanalyzer.port.Preference;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.reroute.request.input.Endpoints;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+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.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCH;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOtsiOtsigroup;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
+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.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCH;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOtsiOtsigroup;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.mode.attributes.supported.operational.modes.OperationalMode;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.mode.attributes.supported.operational.modes.OperationalModeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.mode.attributes.supported.operational.modes.OperationalMode;
+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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
 import org.opendaylight.yangtools.yang.common.Uint16;
@@ -92,9 +93,9 @@ public class PceOpticalNode implements PceNode {
             this.slotWidthGranularity = slotWidthGranularity;
             this.centralFreqGranularity = centralFreqGranularity;
             this.adminStates = node.augmentation(org.opendaylight.yang.gen.v1.http
-                    .org.openroadm.common.network.rev211210.Node1.class).getAdministrativeState();
+                    .org.openroadm.common.network.rev230526.Node1.class).getAdministrativeState();
             this.state = node.augmentation(org.opendaylight.yang.gen.v1.http
-                .org.openroadm.common.network.rev211210.Node1.class).getOperationalState();
+                .org.openroadm.common.network.rev230526.Node1.class).getOperationalState();
         } else {
             LOG.error("PceNode {} : one of parameters is not populated : nodeId, node type, slot width granularity",
                 deviceNodeId);
@@ -102,7 +103,7 @@ public class PceOpticalNode implements PceNode {
         }
     }
 
-    public void initSrgTps() {
+    public void initSrgTps(Preference portPreference) {
         this.availableSrgPp.clear();
         this.availableSrgCp.clear();
         if (!isValid()) {
@@ -122,8 +123,8 @@ public class PceOpticalNode implements PceNode {
         for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
             .node.TerminationPoint tp : allTps) {
             TerminationPoint1 cntp1 = tp.augmentation(TerminationPoint1.class);
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1 nttp1 = tp
-                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1 nttp1 = tp
+                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
                         .TerminationPoint1.class);
             OpenroadmTpType type = cntp1.getTpType();
             LOG.debug("type = {} for tp {}", type.getName(), tp);
@@ -141,6 +142,10 @@ public class PceOpticalNode implements PceNode {
                 case SRGTXPP:
                 case SRGTXRXPP:
                     LOG.debug("initSrgTpList: SRG-PP tp = {} found", tp.getTpId().getValue());
+                    if (!portPreference.isPreferredPort(nodeId.getValue(), tp.getTpId().getValue())) {
+                        LOG.warn("initSrgTpList: SRG-PP tp = {} is rejected by the client", tp.getTpId().getValue());
+                        break;
+                    }
                     if (isTerminationPointAvailable(nttp1)) {
                         LOG.debug("initSrgTpList: adding SRG-PP tp '{}'", tp.getTpId().getValue());
                         this.availableSrgPp.put(tp.getTpId().getValue(), cntp1.getTpType());
@@ -166,7 +171,7 @@ public class PceOpticalNode implements PceNode {
     }
 
     private boolean isTerminationPointAvailable(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1 nttp1) {
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1 nttp1) {
         byte[] availableByteArray = new byte[GridConstant.NB_OCTECTS];
         Arrays.fill(availableByteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
         return nttp1 == null || nttp1.getPpAttributes() == null
@@ -205,8 +210,8 @@ public class PceOpticalNode implements PceNode {
             return;
         }
         Node1 node1 = this.node.augmentation(Node1.class);
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1 node11 =
-                this.node.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1
+        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1 node11 =
+                this.node.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1
                         .class);
         switch (this.nodeType) {
             case SRG :
@@ -290,8 +295,8 @@ public class PceOpticalNode implements PceNode {
             if (endpoints == null
                     || (!endpoints.getAEndTp().equals(tp.getTpId().getValue())
                         && !endpoints.getZEndTp().equals(tp.getTpId().getValue()))) {
-                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1 nttp1 =
-                        tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1 nttp1 =
+                        tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
                                 .TerminationPoint1.class);
                 if (nttp1 != null && nttp1.getXpdrNetworkAttributes().getWavelength() != null) {
                     this.usedXpndrNWTps.add(tp.getTpId().getValue());
index eeac9560fae490031da19538dd10c378006029cb..4d632f8222f973ef48d87989accd4cb6c00f8428 100644 (file)
@@ -21,24 +21,24 @@ import java.util.stream.Collectors;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.rev211210.networks.network.node.termination.point.XpdrNetworkAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
+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.odu.switching.pools.NonBlockingList;
+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.otn.common.types.rev210924.ODTU4TsAllocated;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODTUCnTs;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.XpdrTpPortConnectionAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GEODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2e;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If1GEODU0;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOtsiOtsigroup;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.SupportedIfCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.xpdr.otn.tp.attributes.OdtuTpnPool;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.XpdrTpPortConnectionAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GEODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GEODU2e;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If1GEODU0;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOtsiOtsigroup;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.SupportedIfCapability;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev230526.xpdr.otn.tp.attributes.OdtuTpnPool;
 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.Node;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
@@ -122,10 +122,10 @@ public class PceOtnNode implements PceNode {
         this.availableXpdrClientTps = new ArrayList<>();
         this.usableXpdrClientTps = new ArrayList<>();
         this.adminStates = node
-            .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
+            .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
             .getAdministrativeState();
         this.state = node
-            .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
+            .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
             .getOperationalState();
         this.tpAvailableTribPort.clear();
         checkAvailableTribPort();
@@ -163,10 +163,10 @@ public class PceOtnNode implements PceNode {
             return;
         }
         for (TerminationPoint tp : allTps) {
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                     .TerminationPoint1 ocnTp1
                 = tp.augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                         .TerminationPoint1.class);
             if (ocnTp1 == null) {
                 LOG.warn("null ocn TP {}", tp);
@@ -420,7 +420,7 @@ public class PceOtnNode implements PceNode {
                 .getTerminationPoint().values().stream()
                 .filter(type -> type
                     .augmentation(
-                        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .TerminationPoint1.class)
                     .getTpType()
                     .equals(OpenroadmTpType.XPONDERNETWORK))
@@ -444,7 +444,7 @@ public class PceOtnNode implements PceNode {
             .getTerminationPoint().values().stream()
             .filter(type -> type
                 .augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                         .TerminationPoint1.class)
                 .getTpType().equals(OpenroadmTpType.XPONDERNETWORK))
             .collect(Collectors.toList())
index 05a6e8c7767c992ff4cb470ad353ca41beaaf2d9..3cf83f0b2a37c7cbf55ba43b7ab62c6ba78fedb4 100644 (file)
@@ -14,8 +14,8 @@ import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OpucnTribSlotDef;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/ClientPreference.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/ClientPreference.java
new file mode 100644 (file)
index 0000000..d3749c3
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.networkanalyzer.port;
+
+import java.util.Map;
+import java.util.Set;
+
+public class ClientPreference implements Preference {
+
+    Map<String, Set<String>> nodePortPreference;
+
+    public ClientPreference(Map<String, Set<String>> nodePortPreference) {
+        this.nodePortPreference = nodePortPreference;
+    }
+
+    @Override
+    public boolean isPreferredPort(String node, String portName) {
+
+        //If there is no preferred port registered for the node, it means
+        //the client has no preference regarding the node.
+        //Therefore, we'll treat the node as it was preferred to
+        //prevent it from NOT being used.
+        return !nodePortPreference.containsKey(node) || nodePortPreference.get(node).contains(portName);
+
+    }
+
+}
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/Factory.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/Factory.java
new file mode 100644 (file)
index 0000000..82da45d
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.networkanalyzer.port;
+
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+
+public interface Factory {
+
+    /**
+     * Extracting preferred ports from pathComputationRequestInput.
+     *
+     * <p>
+     * This is the recommended method of determining if a node/port combination
+     * is preferred by the client.
+     *
+     * <p>
+     * Pseudocode example:
+     * <pre>
+     *     Factory.portPreference(PCRI).preferredPort("ROADM-B-SRG1", "SRG1-PP1-TXRX");
+     * </pre>
+     *
+     * @return Client port preference
+     */
+    Preference portPreference(PathComputationRequestInput pathComputationRequestInput);
+
+}
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/NoPreference.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/NoPreference.java
new file mode 100644 (file)
index 0000000..5b96ca0
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.networkanalyzer.port;
+
+/**
+ * This class represents a state where the client has no port preference.
+ * In essence, all ports on all nodes will therefore be treated as 'preferred'
+ * when queried.
+ *
+ * <p>
+ * Usage of this class is of sorts the 'backwards compatible' approach. Meaning,
+ * intended to offer a path for the application to behave as it did
+ * prior to implementing client port preference.
+ */
+public class NoPreference implements Preference {
+    @Override
+    public boolean isPreferredPort(String node, String portName) {
+        return true;
+    }
+}
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/Preference.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/Preference.java
new file mode 100644 (file)
index 0000000..3d1acb8
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.networkanalyzer.port;
+
+public interface Preference {
+
+    /**
+     * Return true if the portName is among the ports preferred by the client.
+     */
+    boolean isPreferredPort(String node, String portName);
+
+}
diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/PreferenceFactory.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/port/PreferenceFactory.java
new file mode 100644 (file)
index 0000000..1d62e18
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.networkanalyzer.port;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.Port;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PreferenceFactory implements Factory {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PreferenceFactory.class);
+
+    private String portNamePattern;
+
+    public PreferenceFactory() {
+        this.portNamePattern = "(?i)SRG\\d+-PP\\d+-(TXRX|TX|RX)";
+    }
+
+    @Override
+    public Preference portPreference(PathComputationRequestInput pathComputationRequestInput) {
+
+        Map<String, Set<String>> map = nodePortMap(pathComputationRequestInput);
+
+        if (map.isEmpty()) {
+            LOG.debug("No port preference found in path computation request.");
+            return new NoPreference();
+        }
+
+        LOG.debug("Port preference in path computation request: {}." , map);
+        return new ClientPreference(map);
+    }
+
+    /**
+     * Create a key value mapper from PCRI where key is the node and the value is
+     * a unique list of port names.
+     *
+     * @return Client port preference map
+     */
+    Map<String, Set<String>> nodePortMap(PathComputationRequestInput pathComputationRequestInput) {
+
+        Map<String, Set<String>> mapper = new HashMap<>();
+
+        ServiceAEnd serviceAEnd = pathComputationRequestInput.getServiceAEnd();
+        if (serviceAEnd != null) {
+
+            RxDirection rxAzDirection = serviceAEnd.getRxDirection();
+            if (rxAzDirection != null) {
+
+                Port rxAZport = rxAzDirection.getPort();
+                if (rxAZport != null) {
+                    add(rxAZport.getPortDeviceName(), rxAZport.getPortName(), mapper);
+                }
+            }
+
+            TxDirection txAzDirection = serviceAEnd.getTxDirection();
+            if (txAzDirection != null) {
+
+                Port txAZport = txAzDirection.getPort();
+                if (txAZport != null) {
+                    add(txAZport.getPortDeviceName(), txAZport.getPortName(), mapper);
+                }
+            }
+        }
+
+        ServiceZEnd serviceZEnd = pathComputationRequestInput.getServiceZEnd();
+        if (serviceZEnd != null) {
+
+            RxDirection rxZaDirection = serviceZEnd.getRxDirection();
+            if (rxZaDirection != null) {
+
+                Port rxZAport = rxZaDirection.getPort();
+                if (rxZAport != null) {
+                    add(rxZAport.getPortDeviceName(), rxZAport.getPortName(), mapper);
+                }
+            }
+
+            TxDirection txZaDirection = serviceZEnd.getTxDirection();
+            if (txZaDirection != null) {
+
+                Port txZAport = txZaDirection.getPort();
+                if (txZAport != null) {
+                    add(txZAport.getPortDeviceName(), txZAport.getPortName(), mapper);
+                }
+            }
+        }
+
+        return mapper;
+    }
+
+    /**
+     * Add node/port name to key value map. Mutable method, modifies the argument nodePortMap.
+     */
+    boolean add(String node, String port, Map<String, Set<String>> nodePortMap) {
+
+        if (node == null || port == null) {
+            return false;
+        }
+
+        String nodeTrimmed = node.trim();
+        String portTrimmed = port.trim();
+
+        if (nodeTrimmed.isEmpty() || portTrimmed.isEmpty()) {
+            return false;
+        }
+
+        if (!portTrimmed.matches(portNamePattern)) {
+            LOG.warn("Preferred port name '{}' on node {} doesn't match pattern '{}'",
+                portTrimmed,
+                nodeTrimmed,
+                portNamePattern
+            );
+        }
+
+        if (nodePortMap.containsKey(nodeTrimmed)) {
+            boolean added = nodePortMap.get(nodeTrimmed).add(portTrimmed);
+            if (added) {
+                LOG.debug("Preferred port '{}' for node '{}' registered.", portTrimmed, nodeTrimmed);
+            } else {
+                LOG.debug("Failed registering port '{}' for node '{}'.", portTrimmed, nodeTrimmed);
+            }
+            return added;
+        }
+
+        nodePortMap.put(nodeTrimmed, new HashSet<>(Arrays.asList(portTrimmed)));
+
+        return true;
+    }
+}
index cb6a4210703deb4c4d0f5b6fe1b226f5d366ef05..0de1fbf2d3cebce0ec797bc8879b9ead142d6ad3 100644 (file)
@@ -8,12 +8,12 @@
 package org.opendaylight.transportpce.pce.service;
 
 import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutput;
 
 /**
  * Path Computation Service.
index 3bda9da106ae4c8e72ce4298b9c1fa9ec1edca7f..523ad31f9b8101b7a6a74e438364fb7093245fb2 100644 (file)
@@ -25,32 +25,32 @@ import org.opendaylight.transportpce.pce.PceSendingPceRPCs;
 import org.opendaylight.transportpce.pce.gnpy.GnpyResult;
 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
 import org.opendaylight.yang.gen.v1.gnpy.path.rev220615.result.Response;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.GnpyResponse;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.GnpyResponseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.gnpy.response.response.type.NoPathCaseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.gnpy.gnpy.response.response.type.PathCaseBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.PathPropertiesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.path.properties.PathMetric;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.performance.path.properties.PathMetricBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.ServicePathRpcResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.gnpy.GnpyResponse;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.gnpy.GnpyResponseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.gnpy.gnpy.response.response.type.NoPathCaseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.gnpy.gnpy.response.response.type.PathCaseBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.performance.PathPropertiesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.performance.path.properties.PathMetric;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.performance.path.properties.PathMetricBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
@@ -82,7 +82,7 @@ public class PathComputationServiceImpl implements PathComputationService {
         this.executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(5));
         this.gnpyConsumer = gnpyConsumer;
         this.portMapping = portMapping;
-        LOG.debug("PathComputationServiceImpl instantiated");
+        LOG.info("PathComputationServiceImpl instantiated");
     }
 
     @SuppressFBWarnings(
@@ -259,7 +259,7 @@ public class PathComputationServiceImpl implements PathComputationService {
                 AToZDirection atoz = pathDescription.getAToZDirection();
                 if ((atoz != null) && (atoz.getAToZ() != null)) {
                     LOG.debug("Impl AtoZ Notification: [{}] elements in description", atoz.getAToZ().size());
-                    for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
+                    for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501
                             .path.description.atoz.direction.AToZKey key : atoz.getAToZ().keySet()) {
                         LOG.debug("Impl AtoZ Notification: [{}] {}", key, atoz.getAToZ().get(key));
                     }
@@ -267,7 +267,7 @@ public class PathComputationServiceImpl implements PathComputationService {
                 ZToADirection ztoa = pathDescription.getZToADirection();
                 if ((ztoa != null) && (ztoa.getZToA() != null)) {
                     LOG.debug("Impl ZtoA Notification: [{}] elements in description", ztoa.getZToA().size());
-                    for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705
+                    for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501
                             .path.description.ztoa.direction.ZToAKey key : ztoa.getZToA().keySet()) {
                         LOG.debug("Impl ZtoA Notification: [{}] {}", key, ztoa.getZToA().get(key));
                     }
index 81a7b1421325da9a521fcc4410c30d3a996527e3..4399afda1da3930a672d3f1415044424c2498b9f 100644 (file)
@@ -30,7 +30,7 @@ import org.opendaylight.transportpce.pce.networkanalyzer.PceResult;
 import org.opendaylight.transportpce.pce.utils.NodeUtils;
 import org.opendaylight.transportpce.pce.utils.PceTestData;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
 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.Node;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
@@ -71,7 +71,7 @@ public class PcePathDescriptionTests extends AbstractTest {
                 GridConstant.SLOT_WIDTH_50);
 
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
-        pceLink.setClient("XPONDER-CLIENT");
+        pceLink.setClientA("XPONDER-CLIENT");
 
         pceResult = new PceResult();
         pceResult.setRC("200");
index 964736eb4339ab59520f773c50412f0d89830017..bcc21d6f370f1c48f835bc26acc199c05c1ae80c 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.transportpce.pce;
 
-
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.when;
 
+import java.util.concurrent.ExecutionException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -27,17 +27,17 @@ import org.opendaylight.transportpce.pce.gnpy.JerseyServer;
 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
 import org.opendaylight.transportpce.pce.utils.PceTestData;
-import org.opendaylight.transportpce.pce.utils.PceTestUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 
+
 @ExtendWith(MockitoExtension.class)
 public class PceSendingPceRPCsTest extends AbstractTest {
 
@@ -54,10 +54,9 @@ public class PceSendingPceRPCsTest extends AbstractTest {
 
 
     @BeforeEach
-    void setUp() {
+    void setUp() throws InterruptedException, ExecutionException {
         this.dataBroker = getNewDataBroker();
         networkTransaction = new NetworkTransactionImpl(this.dataBroker);
-        PceTestUtils.writeNetworkInDataStore(this.dataBroker);
         gnpyConsumer = new GnpyConsumerImpl(
             "http://localhost:9998", "mylogin", "mypassword", getDataStoreContextUtil().getBindingDOMCodecServices());
         pceSendingPceRPCs = new PceSendingPceRPCs(
@@ -94,6 +93,7 @@ public class PceSendingPceRPCsTest extends AbstractTest {
         assertNull(pceSendingPceRPCs.getMessage());
     }
 
+
     @Test
     void responseCodeTest() {
         assertNull(pceSendingPceRPCs.getResponseCode());
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/OperatorConstraintsTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/constraints/OperatorConstraintsTest.java
new file mode 100644 (file)
index 0000000..4fbab35
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright © 2024 Orange Labs, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.pce.constraints;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+import java.util.BitSet;
+import java.util.concurrent.ExecutionException;
+import org.eclipse.jdt.annotation.NonNull;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
+import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
+import org.opendaylight.transportpce.pce.graph.PceGraphTest;
+import org.opendaylight.transportpce.pce.utils.PceTestUtils;
+import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.transportpce.test.converter.DataObjectConverter;
+import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter;
+//import org.opendaylight.yang.gen.v1.http.org.openroadm.controller.customization.rev230526.controller.parameters
+//.SpectrumFilling;
+//import org.opendaylight.yang.gen.v1.http.org.openroadm.controller.customization.rev230526.controller.parameters
+//.spectrum.filling.SpectrumFillingRules;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ControllerBehaviourSettings;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+@ExtendWith(MockitoExtension.class)
+public class OperatorConstraintsTest extends AbstractTest {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PceGraphTest.class);
+    private NetworkTransactionImpl networkTransaction;
+    private static final String SPEC_FILLING_FILE = "src/test/resources/spectrum-filling-rule1.json";
+//    private static SpectrumFillingRules sfRule;
+    private static ControllerBehaviourSettings cbSettings;
+    private OperatorConstraints opConstraints;
+    @Mock
+    private BindingDOMCodecServices bindingDOMCodecServices;
+    private DataBroker dataBroker;
+
+    @BeforeEach
+    void setUp() throws InterruptedException, ExecutionException {
+        this.dataBroker = getNewDataBroker();
+        networkTransaction = new NetworkTransactionImpl(this.dataBroker);
+        opConstraints = new OperatorConstraints(networkTransaction);
+        PceTestUtils.writeNetworkInDataStore(this.dataBroker);
+        DataObjectConverter dataObjectConverter = JSONDataObjectConverter
+            .createWithDataStoreUtil(getDataStoreContextUtil());
+        // The Spectrum filling rules associated with CustomerProfileLamda1 is populated from a file in the Data Store
+        try (Reader reader = new FileReader(SPEC_FILLING_FILE, StandardCharsets.UTF_8)) {
+            NormalizedNode normalizedNode = dataObjectConverter.transformIntoNormalizedNode(reader).orElseThrow();
+            cbSettings = (ControllerBehaviourSettings) getDataStoreContextUtil()
+                .getBindingDOMCodecServices()
+                .fromNormalizedNode(
+                    YangInstanceIdentifier.of(ControllerBehaviourSettings.QNAME), normalizedNode)
+                .getValue();
+            InstanceIdentifier<ControllerBehaviourSettings> sfIID =
+                InstanceIdentifier
+                    .builder(ControllerBehaviourSettings.class)
+//                    .child(SpectrumFilling.class)
+//                    .child(SpectrumFillingRules.class)
+                    .build();
+            @NonNull
+            WriteTransaction newWriteOnlyTransaction = dataBroker.newWriteOnlyTransaction();
+            newWriteOnlyTransaction.put(LogicalDatastoreType.CONFIGURATION, sfIID, cbSettings);
+            newWriteOnlyTransaction.commit().get();
+        } catch (IOException e) {
+            LOG.error("Cannot load Spectrum-Filling-Rules in Service DS ", e);
+            fail("Cannot load Spectrum-Filling-Rules");
+        }
+    }
+
+
+    @Test
+    void checkSpecttrumFilling() {
+        BitSet referenceBitSet = new BitSet(GridConstant.EFFECTIVE_BITS);
+        referenceBitSet.set(0, GridConstant.EFFECTIVE_BITS, false);
+        referenceBitSet.set(0, 8, true);
+        assertEquals(referenceBitSet, opConstraints.getBitMapConstraint("CustomerProfileLamda1"));
+        referenceBitSet.set(8, GridConstant.EFFECTIVE_BITS, true);
+        referenceBitSet.set(0, 8, false);
+        assertEquals(referenceBitSet, opConstraints.getBitMapConstraint("otherCustomer"));
+    }
+
+}
index e74ffc6db4b560df556a9e020831381be2032758..3a52ac2249c637b44b562597477e6c67f273efaf 100644 (file)
@@ -40,18 +40,18 @@ import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyStub;
 import org.opendaylight.transportpce.pce.utils.JsonUtil;
 import org.opendaylight.transportpce.pce.utils.PceTestData;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.Resource;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToABuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.Resource;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPointBuilder;
 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.networks.Network;
index 64701868904b7da3c508127f0bd052aebf8066c7..e6d9aa7e8f8afe1cde78b992311c0373fe8e36e9 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceLink;
 import org.opendaylight.transportpce.pce.networkanalyzer.PceOpticalNode;
 import org.opendaylight.transportpce.pce.utils.NodeUtils;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
 
@@ -50,7 +50,7 @@ public class PceGraphEdgeTest {
                 OpenroadmNodeType.SRG, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
                 GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
         pceLink = new PceLink(link, pceOpticalNode, pceOpticalNode2);
-        pceLink.setClient("XPONDER-CLIENT");
+        pceLink.setClientA("XPONDER-CLIENT");
 
         pceGraphEdge = new PceGraphEdge(pceLink);
     }
index f990d29a69e63de44c2f1be7dbfb4b94a502e293..d85efa20c81a25fc668a1960331c71a0b90382f7 100644 (file)
@@ -56,24 +56,25 @@ import org.opendaylight.transportpce.test.converter.DataObjectConverter;
 import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter;
 import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
 import org.opendaylight.transportpce.test.stub.MountPointStub;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PceConstraintMode;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
 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.rev211210.OpenroadmVersionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev211210.Node1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRoutingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev230526.OpenroadmVersionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev230526.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
+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.routing.constraints.rev221209.constraints.CoRoutingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraintsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OperationalModeCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OperationalModeCatalog;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.PceMetric;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder;
@@ -112,11 +113,11 @@ public class PceGraphTest extends AbstractTest {
     private PceResult rc = null;
     private Map<NodeId, PceNode> allPceNodes = null;
     private Map<LinkId, PceLink> allPceLinks = null;
-    private static final String CATALOG_FILE = "src/test/resources/apidocCatalog10_1OptSpecV5_1.json";
+    private static final String CATALOG_FILE = "src/test/resources/apidocCatalog12_0-OptSpecV5_1.json";
     private static final String MAPPING_FILE = "src/test/resources/topologyData/portMapping2.json";
     private static OperationalModeCatalog omCatalog;
     private static org.opendaylight.yang.gen.v1.http.org.opendaylight
-            .transportpce.portmapping.rev220922.Network networkNode;
+            .transportpce.portmapping.rev231221.Network networkNode;
     private DataBroker dataBroker;
     private MountPoint mountPoint;
     private MountPointService mountPointService;
@@ -169,18 +170,18 @@ public class PceGraphTest extends AbstractTest {
         try (Reader reader = new FileReader(MAPPING_FILE, StandardCharsets.UTF_8)) {
             NormalizedNode normalizedNode = dataObjectConverter.transformIntoNormalizedNode(reader).orElseThrow();
             networkNode = (org.opendaylight.yang.gen.v1.http.org.opendaylight
-                    .transportpce.portmapping.rev220922.Network) getDataStoreContextUtil()
+                    .transportpce.portmapping.rev231221.Network) getDataStoreContextUtil()
                 .getBindingDOMCodecServices()
                 .fromNormalizedNode(
                     YangInstanceIdentifier.of(org.opendaylight.yang.gen.v1.http.org.opendaylight
-                        .transportpce.portmapping.rev220922.Network.QNAME), normalizedNode)
+                        .transportpce.portmapping.rev231221.Network.QNAME), normalizedNode)
                 .getValue();
             @NonNull
             WriteTransaction newWriteOnlyTransaction = dataBroker.newWriteOnlyTransaction();
             newWriteOnlyTransaction
                 .put(LogicalDatastoreType.CONFIGURATION,
                     InstanceIdentifier.create(org.opendaylight.yang.gen.v1.http.org.opendaylight
-                        .transportpce.portmapping.rev220922.Network.class),
+                        .transportpce.portmapping.rev231221.Network.class),
                     networkNode);
             newWriteOnlyTransaction.commit().get();
         } catch (IOException e) {
@@ -248,7 +249,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_100GE_T, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_100GE_T, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(3.0919881995992924));
     }
@@ -261,7 +262,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_OTUC2, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_OTUC2, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(1.1559963686478447));
     }
@@ -274,7 +275,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_OTUC3, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_OTUC3, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(0.3351048800367167));
     }
@@ -287,7 +288,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_400GE, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_400GE, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), false);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(0.0));
     }
@@ -300,7 +301,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_400GE, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_400GE, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(1.4432381874659086));
     }
@@ -313,7 +314,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_OTUC4, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_OTUC4, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(1.4432381874659086));
     }
@@ -326,7 +327,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_OTUC4, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_OTUC4, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(0.0));
     }
@@ -339,7 +340,7 @@ public class PceGraphTest extends AbstractTest {
         pceCalc.retrievePceNetwork();
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_100GE_T, netTransServ);
+            rc, StringConstants.SERVICE_TYPE_100GE_T, netTransServ, PceConstraintMode.Loose, null);
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getmargin()), Optional.ofNullable(3.0919881995992924));
     }
@@ -353,8 +354,8 @@ public class PceGraphTest extends AbstractTest {
         pceHardConstraints.setPceMetrics(PceMetric.PropagationDelay);
         pceGraph = new PceGraph(pceCalc.getaendPceNode(), pceCalc.getzendPceNode(),
             pceCalc.getAllPceNodes(), pceCalc.getAllPceLinks(), pceHardConstraints,
-            null, rc, StringConstants.SERVICE_TYPE_100GE_T, netTransServ);
-        pceGraph.setConstrains(pceHardConstraints, null);
+            rc, StringConstants.SERVICE_TYPE_100GE_T, netTransServ, PceConstraintMode.Loose, null);
+        pceGraph.setConstrains(pceHardConstraints);
 
         assertEquals(pceGraph.calcPath(), true);
         assertEquals(Optional.ofNullable(pceGraph.getPathAtoZ().get(2).getLatency()),
@@ -404,7 +405,7 @@ public class PceGraphTest extends AbstractTest {
         pceOtnNode2.checkAvailableTribSlot();
 
         pceLink1 = new PceLink(link1, pceOtnNode, pceOtnNode2);
-        pceLink1.setClient("XPONDER-CLIENT");
+        pceLink1.setClientA("XPONDER-CLIENT");
 
         pceLink1.getDestId();
         pceOtnNode.addOutgoingLink(pceLink1);
@@ -415,8 +416,8 @@ public class PceGraphTest extends AbstractTest {
         allPceNodes = Map.of(
             new NodeId("optical"), pceOtnNode,
             new NodeId("optical2"), pceOtnNode2);
-        return new PceGraph(pceOtnNode, pceOtnNode2, allPceNodes, allPceLinks, pceHardConstraints, null,
-                new PceResult(), type, null);
+        return new PceGraph(pceOtnNode, pceOtnNode2, allPceNodes, allPceLinks, pceHardConstraints,
+                new PceResult(), type, null, PceConstraintMode.Loose, null);
     }
 
     private void saveOpenRoadmNetwork(Network network, String networkId)
@@ -442,7 +443,7 @@ public class PceGraphTest extends AbstractTest {
             .addAugmentation(
                 new Node1Builder().setOpenroadmVersion(OpenroadmVersionType._221).build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setNodeType(nodeType).build())
             .build();
     }
@@ -470,10 +471,10 @@ public class PceGraphTest extends AbstractTest {
             .withKey(new NodeKey(new NodeId(nodeId)))
             .setSupportingNode(ImmutableMap.of(supportingNode.key(), supportingNode))
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder()
                     .setXpdrAttributes(null).build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setNodeType(nodeType).build())
             .build();
     }
@@ -547,8 +548,8 @@ public class PceGraphTest extends AbstractTest {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -556,8 +557,8 @@ public class PceGraphTest extends AbstractTest {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -597,8 +598,8 @@ public class PceGraphTest extends AbstractTest {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -606,8 +607,8 @@ public class PceGraphTest extends AbstractTest {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceProviderTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/impl/PceProviderTest.java
deleted file mode 100644 (file)
index 0245310..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright © 2020 Orange Labs, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.transportpce.pce.impl;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.transportpce.pce.service.PathComputationService;
-import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceService;
-
-@ExtendWith(MockitoExtension.class)
-public class PceProviderTest extends AbstractTest {
-
-    @Mock
-    private RpcProviderService rpcService;
-    @Mock
-    private PathComputationService pathComputationService;
-
-    @Test
-    void testInit() {
-        new PceProvider(rpcService, pathComputationService);
-        verify(rpcService, times(1)).registerRpcImplementation(any(), any(TransportpcePceService.class));
-    }
-}
index 6ebb56e10f5bcac1b0edb01daa70fbc328ecd8f3..549a708cbbf83f6f9b95d1c54b809f595ed4c275 100644 (file)
@@ -10,12 +10,18 @@ package org.opendaylight.transportpce.pce.impl;
 
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 import java.util.concurrent.ExecutionException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
@@ -25,17 +31,20 @@ import org.opendaylight.transportpce.pce.utils.PceTestData;
 import org.opendaylight.transportpce.pce.utils.PceTestUtils;
 import org.opendaylight.transportpce.pce.utils.TransactionUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveInputBuilder;
 
 
+@ExtendWith(MockitoExtension.class)
 public class PceServiceRPCImplTest extends AbstractTest {
 
     private PathComputationService pathComputationService;
     private NotificationPublishService notificationPublishService;
     private NetworkTransactionImpl networkTransaction;
-    private PceServiceRPCImpl pceServiceRPC;
     @Mock
     private PortMapping portMapping;
+    @Mock
+    private RpcProviderService rpcProviderService;
+
 
     @BeforeEach
     void setUp() throws ExecutionException, InterruptedException {
@@ -45,28 +54,37 @@ public class PceServiceRPCImplTest extends AbstractTest {
         networkTransaction =  new NetworkTransactionImpl(getDataBroker());
         pathComputationService = new PathComputationServiceImpl(networkTransaction, notificationPublishService,
                 null, portMapping);
-        pceServiceRPC = new PceServiceRPCImpl(pathComputationService);
+    }
+
+    @Test
+    void testRpcRegistration() {
+        new PceServiceRPCImpl(rpcProviderService, pathComputationService);
+        verify(rpcProviderService, times(1)).registerRpcImplementations(
+                any(CancelResourceReserveImpl.class), any(PathComputationRequestImpl.class),
+                any(PathComputationRerouteRequestImpl.class));
     }
 
     @Test
     void testCancelResourceReserve() {
-        CancelResourceReserveInputBuilder cancelResourceReserveInput = new CancelResourceReserveInputBuilder();
-        assertNotNull(pceServiceRPC.cancelResourceReserve(cancelResourceReserveInput.build()));
+        assertNotNull(new CancelResourceReserveImpl(pathComputationService)
+                .invoke(new CancelResourceReserveInputBuilder().build()));
     }
 
     @Test
     void testPathComputationRequest() {
-        assertNotNull(pceServiceRPC.pathComputationRequest(PceTestData.getPCERequest()));
+        assertNotNull(new PathComputationRequestImpl(pathComputationService)
+                .invoke(PceTestData.getPCERequest()));
     }
 
     @Test
     void testPathComputationRerouteRequest() {
-        assertNotNull(pceServiceRPC.pathComputationRerouteRequest(PceTestData.getPCERerouteRequest()));
+        assertNotNull(new PathComputationRerouteRequestImpl(pathComputationService)
+                .invoke(PceTestData.getPCERerouteRequest()));
     }
 
     @Test
     void testPathComputationRequestCoRoutingOrGeneral2() {
-        assertNotNull(
-            pceServiceRPC.pathComputationRequest(PceTestData.getPathComputationRequestInputWithCoRoutingOrGeneral2()));
+        assertNotNull(new PathComputationRequestImpl(pathComputationService)
+                .invoke(PceTestData.getPathComputationRequestInputWithCoRoutingOrGeneral2()));
     }
 }
index 24cd15e9b67f072ab9b8e42ca50fe3ffc39796f2..c0efabcc335acedb64fc3ddcc6540d7fcf7176bd 100644 (file)
@@ -28,14 +28,14 @@ import org.opendaylight.transportpce.pce.utils.PceTestData;
 import org.opendaylight.transportpce.pce.utils.PceTestUtils;
 import org.opendaylight.transportpce.pce.utils.TransactionUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfoBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 
 @ExtendWith(MockitoExtension.class)
index dc102592870bb8d35985f2ee783d0c5d3db305d9..90e53324b2f4bdabf52dc5e4bd7108823d550ea0 100644 (file)
@@ -28,20 +28,20 @@ import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.FiberPmd;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1.FiberType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.OMSAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.SpanBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1.FiberType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.OMSAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.SpanBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationKey;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
@@ -176,9 +176,9 @@ public class PceLinkTest extends AbstractTest {
         assertNotNull(pceLink.getLinkId());
         assertNotNull(pceLink.getSourceId());
         assertNotNull(pceLink.getDestId());
-        pceLink.setClient("specific_client");
-        assertTrue(pceLink.getClient().equals("specific_client"));
-        assertNotNull(pceLink.getClient());
+        pceLink.setClientA("specific_client");
+        assertTrue(pceLink.getClientA().equals("specific_client"));
+        assertNotNull(pceLink.getClientA());
         assertNotNull(pceLink.getLatency());
         assertNotNull(pceLink.getAvailableBandwidth());
         assertNotNull(pceLink.getUsedBandwidth());
@@ -265,7 +265,7 @@ public class PceLinkTest extends AbstractTest {
                         : new LinkConcatenation1Builder().setFiberType(FiberType.Smf).build())
                 .build();
             linkBuilder.addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1Builder()
                     .setOMSAttributes(
                         new OMSAttributesBuilder()
                             .setSpan(new SpanBuilder()
@@ -343,7 +343,7 @@ public class PceLinkTest extends AbstractTest {
             .withKey(new NodeKey(new NodeId("node 1")))
             .addAugmentation(new Node1Builder().setTerminationPoint(Map.of(xpdr.key(), xpdr)).build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setOperationalState(State.InService).setAdministrativeState(AdminStates.InService).build())
             .setSupportingNode(supportingNodes1);
     }
index 170701a2eb3f3a6e24ee8b100483590f6b9269b6..876dcd9d8dbcd1d5e381ed2e3dd01aeca055118a 100644 (file)
@@ -26,30 +26,32 @@ import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
+import org.opendaylight.transportpce.pce.networkanalyzer.port.NoPreference;
+import org.opendaylight.transportpce.pce.networkanalyzer.port.Preference;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyGHz;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyGHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.rev211210.networks.network.node.DegreeAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.PpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.RxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.TxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrClientAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrPortAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMaps;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.available.freq.map.AvailFreqMapsKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.RxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.TxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrClientAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrPortAttributesBuilder;
+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.available.freq.map.AvailFreqMaps;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.available.freq.map.AvailFreqMapsKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
 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.NodeId;
@@ -76,6 +78,7 @@ public class PceOpticalNodeTest extends AbstractTest {
     private String serviceType = "100GE";
     @Mock
     private PortMapping portMapping;
+    private final Preference portPreference = new NoPreference();
 
     @BeforeEach
     void setUp() {
@@ -100,7 +103,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         pceOpticalNode = new PceOpticalNode(deviceNodeId, serviceType, portMapping, node,
                 OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
                 GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
-        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initSrgTps(portPreference);
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
         pceOpticalNode.initFrequenciesBitSet();
         assertFalse(pceOpticalNode.isValid());
@@ -163,7 +166,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         pceOpticalNode = new PceOpticalNode(null, null, null, node,
                 OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
                 GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
-        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initSrgTps(portPreference);
         assertNull(pceOpticalNode.getRdmSrgClient("7", StringConstants.SERVICE_DIRECTION_AZ));
         assertFalse(pceOpticalNode.isValid());
         assertNull(pceOpticalNode.getBitSetData());
@@ -177,7 +180,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         pceOpticalNode = new PceOpticalNode(null, null, null, specificNode,
                 OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
                 GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
-        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initSrgTps(portPreference);
         pceOpticalNode.initFrequenciesBitSet();
         pceOpticalNode.initXndrTps(ServiceFormat.OMS);
         assertNull(pceOpticalNode.getRdmSrgClient("7" ,StringConstants.SERVICE_DIRECTION_AZ));
@@ -191,7 +194,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         pceOpticalNode = new PceOpticalNode(null, null, null, node,
                 OpenroadmNodeType.DEGREE, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
                 GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
-        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initSrgTps(portPreference);
         assertNull(pceOpticalNode.getRdmSrgClient("7" ,StringConstants.SERVICE_DIRECTION_AZ));
         assertFalse(pceOpticalNode.isValid());
         assertNull(pceOpticalNode.getBitSetData());
@@ -205,7 +208,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         pceOpticalNode = new PceOpticalNode(null, null, null, specificNode,
                 OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
                 GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
-        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initSrgTps(portPreference);
         assertFalse(pceOpticalNode.isValid());
         assertNull(pceOpticalNode.getBitSetData());
         assertTrue(pceOpticalNode.checkTP("testTP"));
@@ -219,7 +222,7 @@ public class PceOpticalNodeTest extends AbstractTest {
         pceOpticalNode = new PceOpticalNode(null, null, null, node,
                 OpenroadmNodeType.ROADM, StringConstants.OPENROADM_DEVICE_VERSION_2_2_1,
                 GridConstant.SLOT_WIDTH_50, GridConstant.SLOT_WIDTH_50);
-        pceOpticalNode.initSrgTps();
+        pceOpticalNode.initSrgTps(portPreference);
         assertNull(pceOpticalNode.getRdmSrgClient("2" ,StringConstants.SERVICE_DIRECTION_AZ));
         assertFalse(pceOpticalNode.isValid());
         assertNull(pceOpticalNode.getBitSetData());
@@ -251,13 +254,13 @@ public class PceOpticalNodeTest extends AbstractTest {
         TerminationPointBuilder xpdrTpBldr = getTerminationPointBuilder();
         xpdrTpBldr.addAugmentation(tp1Bldr.build());
         xpdrTpBldr.addAugmentation(createAnotherTerminationPoint().build());
-        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1 node1 = getNode1();
+        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1 node1 = getNode1();
         TerminationPoint xpdr = xpdrTpBldr.build();
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
                 new Node1Builder()
                         .setTerminationPoint(Map.of(xpdr.key(),xpdr))
                         .build();
-        Node1 node11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+        Node1 node11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                 .setAdministrativeState(AdminStates.InService).setOperationalState(State.InService).build();
         return new NodeBuilder()
                 .setNodeId(new NodeId("node_test"))
@@ -276,13 +279,13 @@ public class PceOpticalNodeTest extends AbstractTest {
         xpdrTpBldr.addAugmentation(tp1Bldr.build());
         xpdrTpBldr.addAugmentation(createAnotherTerminationPoint().build());
 
-        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1 node1 = getNode1Empty();
+        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1 node1 = getNode1Empty();
         TerminationPoint xpdr = xpdrTpBldr.build();
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
                 new Node1Builder()
                         .setTerminationPoint(Map.of(xpdr.key(),xpdr))
                         .build();
-        Node1 node11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+        Node1 node11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                 .setAdministrativeState(AdminStates.InService).setOperationalState(State.InService).build();
         return new NodeBuilder()
                 .setNodeId(new NodeId("node_test"))
@@ -294,16 +297,16 @@ public class PceOpticalNodeTest extends AbstractTest {
     }
 
     private org.opendaylight
-            .yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1 getNode1() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder()
+            .yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1 getNode1() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder()
                 .setSrgAttributes(getSrgAttributes())
                 .setDegreeAttributes(getDegAttributes())
                 .build();
     }
 
     private org.opendaylight
-            .yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1 getNode1Empty() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder()
+            .yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1 getNode1Empty() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder()
                 .setSrgAttributes(getEmptySrgAttributes())
                 .setDegreeAttributes(getEmptyDegAttributes())
                 .build();
@@ -352,9 +355,9 @@ public class PceOpticalNodeTest extends AbstractTest {
     }
 
     private org.opendaylight.yang.gen
-            .v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder createAnotherTerminationPoint() {
+            .v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder createAnotherTerminationPoint() {
         return new org.opendaylight
-                .yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder()
+                .yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder()
                 .setCtpAttributes((new CtpAttributesBuilder()).build())
                 .setCpAttributes((new CpAttributesBuilder()).build())
                 .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build())
index b2805a65b855debd86ba5a2ce80db31e496ed9ee..0288656d4ce2c3e420ccdf7ccdee3a7abd4b0c79 100644 (file)
@@ -20,34 +20,34 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.rev211210.networks.network.node.DegreeAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.PpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.RxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.TxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrClientAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrPortAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.TpSupportedInterfaces;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GEODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2e;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If1GEODU0;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.RxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.TxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrClientAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrPortAttributesBuilder;
+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.otn.network.topology.rev230526.networks.network.node.termination.point.TpSupportedInterfaces;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GEODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GEODU2e;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If1GEODU0;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
 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.NodeId;
@@ -159,7 +159,7 @@ public class PceOtnNodeTest extends AbstractTest {
         xpdrTpBldr.addAugmentation(createAnother2TerminationPoint(openroadmTpType).build());
         xpdrTpBldr.addAugmentation(createAnotherTerminationPoint(openroadmTpType).build());
 
-        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1 node1 = getNode1();
+        org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1 node1 = getNode1();
         TerminationPoint xpdr = xpdrTpBldr.build();
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1Rev180226 =
                 new Node1Builder()
@@ -172,7 +172,7 @@ public class PceOtnNodeTest extends AbstractTest {
                         .Node1Builder()
                         .setTerminationPoint(Map.of(xpdr.key(),xpdr))
                         .build();
-        Node1 node11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+        Node1 node11 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                 .setOperationalState(State.InService).setAdministrativeState(AdminStates.InService).build();
         return new NodeBuilder()
                 .setNodeId(new NodeId("node_test"))
@@ -184,9 +184,8 @@ public class PceOtnNodeTest extends AbstractTest {
                 .setSupportingNode(supportingNodes1);
     }
 
-    private org.opendaylight
-            .yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1 getNode1() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder()
+    private org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1 getNode1() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder()
                 .setSrgAttributes(getSrgAttributes())
                 .setDegreeAttributes(getDegAttributes())
                 .build();
@@ -216,12 +215,10 @@ public class PceOtnNodeTest extends AbstractTest {
 
     }
 
-    private org.opendaylight.yang.gen
-            .v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder createAnotherTerminationPoint(
-            OpenroadmTpType openroadmTpType
-    ) {
+    private org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder
+            createAnotherTerminationPoint(OpenroadmTpType openroadmTpType) {
         return new org.opendaylight
-                .yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder()
+                .yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder()
                 .setCtpAttributes((new CtpAttributesBuilder()).build())
                 .setCpAttributes((new CpAttributesBuilder()).build())
                 .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build())
@@ -233,7 +230,7 @@ public class PceOtnNodeTest extends AbstractTest {
                         .setTailEquipmentId("destNode" + "--" + "destTp").build());
     }
 
-    private org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+    private org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
             .TerminationPoint1Builder createOTNTerminationPoint(OpenroadmTpType openroadmTpType) {
 
         SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
@@ -262,17 +259,16 @@ public class PceOtnNodeTest extends AbstractTest {
 
         XpdrTpPortConnectionAttributesBuilder xtpcaBldr = new XpdrTpPortConnectionAttributesBuilder();
 
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                 .TerminationPoint1Builder()
-                .setTpSupportedInterfaces(tpSupIf)
-                .setXpdrTpPortConnectionAttributes(xtpcaBldr.build());
+            .setTpSupportedInterfaces(tpSupIf)
+            .setXpdrTpPortConnectionAttributes(xtpcaBldr.build());
     }
 
-    private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-            .TerminationPoint1Builder createAnother2TerminationPoint(OpenroadmTpType openroadmTpType) {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
-                .TerminationPoint1Builder()
-                .setTpType(openroadmTpType).setOperationalState(State.InService)
-                .setAdministrativeState(AdminStates.InService);
+    private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder
+            createAnother2TerminationPoint(OpenroadmTpType openroadmTpType) {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder()
+            .setTpType(openroadmTpType).setOperationalState(State.InService)
+            .setAdministrativeState(AdminStates.InService);
     }
 }
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/port/ClientPreferenceTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/port/ClientPreferenceTest.java
new file mode 100644 (file)
index 0000000..2466221
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.networkanalyzer.port;
+
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class ClientPreferenceTest {
+
+    @Test
+    void preferredPort_returnTrue() {
+
+        Map<String, Set<String>> nodePortPreference = new HashMap<>();
+        nodePortPreference.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TXRX"));
+
+        Preference clientPreference = new ClientPreference(nodePortPreference);
+
+        Assertions.assertTrue(clientPreference.isPreferredPort("ROADM-B-SRG1", "SRG1-PP1-TXRX"));
+    }
+
+    /**
+     * The client prefer to use SRG1-PP1-TXRX on ROADM-B-SRG1.
+     * Therefore, preferredPort returns false on SRG1-PP2-TXRX.
+     */
+    @Test
+    void nonPreferredPort_returnFalse() {
+
+        Map<String, Set<String>> nodePortPreference = new HashMap<>();
+        nodePortPreference.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TXRX"));
+
+        Preference clientPreference = new ClientPreference(nodePortPreference);
+
+        Assertions.assertFalse(clientPreference.isPreferredPort("ROADM-B-SRG1", "SRG1-PP2-TXRX"));
+    }
+
+    /**
+     * In this scenario ROADM-A-SRG1 is missing from the client preferred list.
+     * We treat this as the client has no opinion on what port
+     * to use on ROADM-A-SRG1. Meaning, as far as the client goes, all
+     * ports on ROADM-A-SRG1 are fine.
+     */
+    @Test
+    void nodeMissingInPreferredList_returnTrue() {
+
+        Map<String, Set<String>> nodePortPreference = new HashMap<>();
+        nodePortPreference.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TXRX"));
+
+        Preference clientPreference = new ClientPreference(nodePortPreference);
+
+        Assertions.assertTrue(clientPreference.isPreferredPort("ROADM-A-SRG1", "SRG1-PP2-TXRX"));
+
+    }
+}
\ No newline at end of file
diff --git a/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/port/PreferenceFactoryTest.java b/pce/src/test/java/org/opendaylight/transportpce/pce/networkanalyzer/port/PreferenceFactoryTest.java
new file mode 100644 (file)
index 0000000..818bbf6
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+ * Copyright (c) 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.pce.networkanalyzer.port;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirection;
+
+class PreferenceFactoryTest {
+
+    @Test
+    void emptyPathComputationRequest_returnEmptyHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceAEndRxDirectionWithoutDeviceAndPort_returnEmptyHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceAEnd serviceAEnd = Mockito.mock(ServiceAEnd.class);
+        RxDirection rxDirection = Mockito.mock(RxDirection.class);
+
+        Mockito.when(rxDirection.getPort()).thenReturn(new PortBuilder().build());
+        Mockito.when(serviceAEnd.getRxDirection()).thenReturn(rxDirection);
+        Mockito.when(pathComputationRequestInput.getServiceAEnd()).thenReturn(serviceAEnd);
+
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceAEndRxDirectionWithoutPort_returnEmptyHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceAEnd serviceAEnd = Mockito.mock(ServiceAEnd.class);
+        RxDirection rxDirection = Mockito.mock(RxDirection.class);
+
+        Mockito.when(rxDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .build()
+        );
+        Mockito.when(serviceAEnd.getRxDirection()).thenReturn(rxDirection);
+        Mockito.when(pathComputationRequestInput.getServiceAEnd()).thenReturn(serviceAEnd);
+
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceAEndRxDirectionTxRx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceAEnd serviceAEnd = Mockito.mock(ServiceAEnd.class);
+        RxDirection rxDirection = Mockito.mock(RxDirection.class);
+
+        Mockito.when(rxDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("SRG1-PP1-TXRX")
+                .build()
+        );
+        Mockito.when(serviceAEnd.getRxDirection()).thenReturn(rxDirection);
+        Mockito.when(pathComputationRequestInput.getServiceAEnd()).thenReturn(serviceAEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TXRX"));
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceAEndRxDirectionTx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceAEnd serviceAEnd = Mockito.mock(ServiceAEnd.class);
+        RxDirection rxDirection = Mockito.mock(RxDirection.class);
+
+        Mockito.when(rxDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("SRG1-PP1-TX")
+                .build()
+        );
+        Mockito.when(serviceAEnd.getRxDirection()).thenReturn(rxDirection);
+        Mockito.when(pathComputationRequestInput.getServiceAEnd()).thenReturn(serviceAEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TX"));
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceAEndRxDirectionRx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceAEnd serviceAEnd = Mockito.mock(ServiceAEnd.class);
+        TxDirection txDirection = Mockito.mock(TxDirection.class);
+
+        Mockito.when(txDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("SRG1-PP1-RX")
+                .build()
+        );
+        Mockito.when(serviceAEnd.getTxDirection()).thenReturn(txDirection);
+        Mockito.when(pathComputationRequestInput.getServiceAEnd()).thenReturn(serviceAEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("SRG1-PP1-RX"));
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceZEndRx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceZEnd serviceZEnd = Mockito.mock(ServiceZEnd.class);
+        RxDirection rxDirection = Mockito.mock(RxDirection.class);
+
+        Mockito.when(rxDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("SRG1-PP1-TXRX")
+                .build()
+        );
+        Mockito.when(serviceZEnd.getRxDirection()).thenReturn(rxDirection);
+        Mockito.when(pathComputationRequestInput.getServiceZEnd()).thenReturn(serviceZEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TXRX"));
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceZEndTxDirectionTxRx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceZEnd serviceZEnd = Mockito.mock(ServiceZEnd.class);
+        TxDirection txDirection = Mockito.mock(TxDirection.class);
+
+        Mockito.when(txDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("SRG1-PP1-TXRX")
+                .build()
+        );
+        Mockito.when(serviceZEnd.getTxDirection()).thenReturn(txDirection);
+        Mockito.when(pathComputationRequestInput.getServiceZEnd()).thenReturn(serviceZEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TXRX"));
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceZEndTxDirectionTx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceZEnd serviceZEnd = Mockito.mock(ServiceZEnd.class);
+        TxDirection txDirection = Mockito.mock(TxDirection.class);
+
+        Mockito.when(txDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("SRG1-PP1-TX")
+                .build()
+        );
+        Mockito.when(serviceZEnd.getTxDirection()).thenReturn(txDirection);
+        Mockito.when(pathComputationRequestInput.getServiceZEnd()).thenReturn(serviceZEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("SRG1-PP1-TX"));
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathComputationRequestServiceZEndTxDirectionRx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceZEnd serviceZEnd = Mockito.mock(ServiceZEnd.class);
+        TxDirection txDirection = Mockito.mock(TxDirection.class);
+
+        Mockito.when(txDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("SRG1-PP1-RX")
+                .build()
+        );
+        Mockito.when(serviceZEnd.getTxDirection()).thenReturn(txDirection);
+        Mockito.when(pathComputationRequestInput.getServiceZEnd()).thenReturn(serviceZEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("SRG1-PP1-RX"));
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathEmptyComputationRequestServiceZEndTx_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceZEnd serviceZEnd = Mockito.mock(ServiceZEnd.class);
+        TxDirection txDirection = Mockito.mock(TxDirection.class);
+
+        Mockito.when(txDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName(" ")
+                .build()
+        );
+        Mockito.when(serviceZEnd.getTxDirection()).thenReturn(txDirection);
+        Mockito.when(pathComputationRequestInput.getServiceZEnd()).thenReturn(serviceZEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void pathUnexpectedPortName_returnHashmap() {
+
+        PathComputationRequestInput pathComputationRequestInput = Mockito.mock(PathComputationRequestInput.class);
+        ServiceZEnd serviceZEnd = Mockito.mock(ServiceZEnd.class);
+        TxDirection txDirection = Mockito.mock(TxDirection.class);
+
+        Mockito.when(txDirection.getPort()).thenReturn(
+            new PortBuilder()
+                .setPortDeviceName("ROADM-B-SRG1")
+                .setPortName("FUBAR")
+                .build()
+        );
+        Mockito.when(serviceZEnd.getTxDirection()).thenReturn(txDirection);
+        Mockito.when(pathComputationRequestInput.getServiceZEnd()).thenReturn(serviceZEnd);
+
+        Map<String, Set<String>> expected = new HashMap<>();
+        expected.put("ROADM-B-SRG1", Set.of("FUBAR"));
+
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+        Assertions.assertEquals(expected, portPreferenceFactory.nodePortMap(pathComputationRequestInput));
+
+    }
+
+    @Test
+    void addingMultiplePort() {
+
+        PreferenceFactory portPreferenceFactory = new PreferenceFactory();
+        Map<String, Set<String>> mapper = new HashMap<>();
+
+        //New ports
+        Assertions.assertTrue(portPreferenceFactory.add("ROADM-B-SRG1", "SRG1-PP1-TXRX", mapper));
+        Assertions.assertTrue(portPreferenceFactory.add("ROADM-B-SRG1", "SRG1-PP2-TXRX", mapper));
+        Assertions.assertTrue(portPreferenceFactory.add("ROADM-B-SRG1", "SRG1-PP3-RX", mapper));
+        Assertions.assertTrue(portPreferenceFactory.add("ROADM-B-SRG1", "SRG1-PP3-TX", mapper));
+
+        //This port already exists, should return false.
+        Assertions.assertFalse(portPreferenceFactory.add("ROADM-B-SRG1", "SRG1-PP2-TXRX", mapper));
+
+        Assertions.assertEquals(
+            Set.of("SRG1-PP1-TXRX", "SRG1-PP2-TXRX", "SRG1-PP3-RX", "SRG1-PP3-TX"),
+            mapper.get("ROADM-B-SRG1")
+        );
+    }
+}
\ No newline at end of file
index be299d89bf3b1545cf23731424fcfc589f888606..d516646f413b56869dac33a3049e3a480489d872 100644 (file)
@@ -11,12 +11,14 @@ import com.google.gson.stream.JsonReader;
 import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map.Entry;
 import java.util.ServiceLoader;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
 import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -25,7 +27,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStre
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -58,17 +60,15 @@ public final class JsonUtil {
     }
 
     public DataObject getDataObjectFromJson(JsonReader reader, QName pathQname) {
-        NormalizedNodeResult result = new NormalizedNodeResult();
-        try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+        NormalizationResultHolder resultHolder = new NormalizationResultHolder();
+        try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(resultHolder);
                 JsonParserStream jsonParser = JsonParserStream.create(streamWriter,
                     JSONCodecFactorySupplier.RFC7951.getShared(schemaCtx));) {
             jsonParser.parse(reader);
             YangInstanceIdentifier yangId = YangInstanceIdentifier.of(pathQname);
-            if (bindingDOMCodecServices.fromNormalizedNode(yangId, result.getResult()) != null) {
-                return bindingDOMCodecServices.fromNormalizedNode(yangId, result.getResult()).getValue();
-            } else {
-                return null;
-            }
+            Entry<InstanceIdentifier<?>, DataObject> entry =
+                bindingDOMCodecServices.fromNormalizedNode(yangId, resultHolder.getResult().data());
+            return entry == null ? null : entry.getValue();
         } catch (IOException | IllegalArgumentException e) {
             LOG.error("Cannot deserialize JSON ", e);
             return null;
index 7dfed2060874ae606004a3bca92c836057395d9d..de5ecb61889a0d346d47d31576ee566bac1ff907 100644 (file)
@@ -16,39 +16,39 @@ import java.util.Map;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1.FiberType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.OMSAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.SpanBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.CtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.PpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.RxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.TxTtpAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrClientAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.termination.point.XpdrPortAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GEODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If10GEODU2e;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If1GEODU0;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1.FiberType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.OMSAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.SpanBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.CtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.PpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.RxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.TxTtpAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrClientAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrPortAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationKey;
+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.otn.network.topology.rev230526.networks.network.node.termination.point.TpSupportedInterfacesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.networks.network.node.termination.point.XpdrTpPortConnectionAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GEODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If10GEODU2e;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If1GEODU0;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
 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.NodeId;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.NodeBuilder;
@@ -98,7 +98,7 @@ public final class NodeUtils {
             .build();
         return linkBldr
                 .addAugmentation(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder()
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1Builder()
                         .setAmplified(false)
                         .setOMSAttributes(
                             new OMSAttributesBuilder()
@@ -189,13 +189,13 @@ public final class NodeUtils {
                         .setTpType(OpenroadmTpType.XPONDERNETWORK)
                         .build())
                 .addAugmentation(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .TerminationPoint1Builder()
                         .setAdministrativeState(AdminStates.InService)
                         .setOperationalState(State.InService)
                         .build())
                 .addAugmentation(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
                             .TerminationPoint1Builder()
                         .setXpdrNetworkAttributes(
                             new XpdrNetworkAttributesBuilder()
@@ -211,7 +211,7 @@ public final class NodeUtils {
                         .setTpType(OpenroadmTpType.XPONDERCLIENT)
                         .build())
                 .addAugmentation(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                             .TerminationPoint1Builder()
                         .setAdministrativeState(AdminStates.InService)
                         .setOperationalState(State.InService)
@@ -225,7 +225,7 @@ public final class NodeUtils {
                         .setTerminationPoint(Map.of(xpdrNw.key(),xpdrNw, xpdrClient.key(), xpdrClient))
                         .build())
                 .addAugmentation(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                         .setAdministrativeState(AdminStates.InService)
                         .setOperationalState(State.InService)
                         .build())
@@ -260,7 +260,7 @@ public final class NodeUtils {
                     .setTerminationPoint(Map.of(degTTP.key(), degTTP, degCTP.key(), degCTP))
                 .build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setOperationalState(State.InService).setAdministrativeState(AdminStates.InService).build())
             .setSupportingNode(supportingNodes);
     }
@@ -292,7 +292,7 @@ public final class NodeUtils {
                 new Node1Builder()
                     .setTerminationPoint(Map.of(srgPP.key(), srgPP, srgCP.key(), srgCP)).build())
             .addAugmentation(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder()
                     .setOperationalState(State.InService).setAdministrativeState(AdminStates.InService).build())
             .setSupportingNode(supportingNodes);
     }
@@ -349,16 +349,16 @@ public final class NodeUtils {
     }
 
     private static org.opendaylight.yang.gen.v1.http
-            .org.openroadm.network.topology.rev211210.Node1 getNode1() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder()
+            .org.openroadm.network.topology.rev230526.Node1 getNode1() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder()
                 .setSrgAttributes(getSrgAttributes())
                 .setDegreeAttributes(getDegAttributes())
                 .build();
     }
 
     private static org.opendaylight.yang.gen.v1.http
-            .org.openroadm.network.topology.rev211210.Node1 getNode1Empty() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder()
+            .org.openroadm.network.topology.rev230526.Node1 getNode1Empty() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder()
                 .setSrgAttributes(getEmptySrgAttributes())
                 .setDegreeAttributes(getEmptyDegAttributes())
                 .build();
@@ -391,18 +391,18 @@ public final class NodeUtils {
     }
 
     private static org.opendaylight.yang.gen.v1.http
-            .org.openroadm.common.network.rev211210.TerminationPoint1Builder getTerminationPoint1Builder(
+            .org.openroadm.common.network.rev230526.TerminationPoint1Builder getTerminationPoint1Builder(
                 OpenroadmTpType openroadmTpType) {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder()
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder()
                 .setTpType(openroadmTpType);
 
     }
 
     private static org.opendaylight.yang.gen.v1.http
-            .org.openroadm.network.topology.rev211210.TerminationPoint1Builder createAnotherTerminationPoint(
+            .org.openroadm.network.topology.rev230526.TerminationPoint1Builder createAnotherTerminationPoint(
                 OpenroadmTpType openroadmTpType) {
         return new org.opendaylight
-                .yang.gen.v1.http.org.openroadm.network.topology.rev211210.TerminationPoint1Builder()
+                .yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1Builder()
                 .setCtpAttributes((new CtpAttributesBuilder()).build())
                 .setCpAttributes((new CpAttributesBuilder()).build())
                 .setTxTtpAttributes((new TxTtpAttributesBuilder()).setUsedWavelengths(Map.of()).build())
@@ -414,7 +414,7 @@ public final class NodeUtils {
                         .setTailEquipmentId("destNode" + "--" + "destTp").build());
     }
 
-    private static org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+    private static org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
             .TerminationPoint1Builder createOTNTerminationPoint(OpenroadmTpType openroadmTpType) {
         SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
                 .setIfCapType(IfOCHOTU4ODU4.VALUE)
@@ -428,7 +428,7 @@ public final class NodeUtils {
         SupportedInterfaceCapability supIfCapa3 = new SupportedInterfaceCapabilityBuilder()
                 .setIfCapType(If1GEODU0.VALUE)
                 .build();
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526
                 .TerminationPoint1Builder()
                 .setTpSupportedInterfaces(
                     new TpSupportedInterfacesBuilder()
@@ -445,9 +445,9 @@ public final class NodeUtils {
                 .setXpdrTpPortConnectionAttributes(new XpdrTpPortConnectionAttributesBuilder().build());
     }
 
-    private static org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+    private static org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
             .TerminationPoint1Builder createAnother2TerminationPoint(OpenroadmTpType openroadmTpType) {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
                 .TerminationPoint1Builder()
                 .setOperationalState(State.InService)
                 .setAdministrativeState(AdminStates.InService)
index 1921c3c0246473fd87b43589d922f19df4efc818..c394a928ae2618faa05fab8a118b816a7a23deb7 100644 (file)
@@ -7,41 +7,42 @@
  */
 package org.opendaylight.transportpce.pce.utils;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.opendaylight.transportpce.common.ResponseCodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.EndpointsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.reroute.request.input.EndpointsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRoutingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.DiversityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.ExcludeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.IncludeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.LatencyBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service.constraints.ServiceIdentifierListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.service.applicability.g.ServiceApplicabilityBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRoutingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.DiversityBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.ExcludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.IncludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.LatencyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service.constraints.ServiceIdentifierListKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.service.applicability.g.ServiceApplicabilityBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.PceMetric;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.response.parameters.PathDescription;
@@ -152,8 +153,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -161,8 +162,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -237,8 +238,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -246,8 +247,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -322,8 +323,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -331,8 +332,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -345,88 +346,86 @@ public final class PceTestData {
                 .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder()
                         .setRequestId("request1")
                         .build())
-                .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+                .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
                         .path.computation.reroute.request.input.ServiceAEndBuilder()
-                        .setServiceFormat(ServiceFormat.Ethernet)
-                        .setServiceRate(Uint32.valueOf(100))
-                        .setClli("clli11")
-                        .setNodeId("XPONDER-2-2")
-                        .setTxDirection(new TxDirectionBuilder()
-                                .setPort(new PortBuilder()
-                                        .setPortDeviceName("Some port-device-name")
-                                        .setPortType("Some port-type")
-                                        .setPortName("Some port-name")
-                                        .setPortRack("Some port-rack")
-                                        .setPortShelf("Some port-shelf")
-                                        .setPortSlot("Some port-slot")
-                                        .setPortSubSlot("Some port-sub-slot")
-                                        .build())
-                                .build())
-                        .setRxDirection(new RxDirectionBuilder()
-                                .setPort(new PortBuilder()
-                                        .setPortDeviceName("Some port-device-name")
-                                        .setPortType("Some port-type")
-                                        .setPortName("Some port-name")
-                                        .setPortRack("Some port-rack")
-                                        .setPortShelf("Some port-shelf")
-                                        .setPortSlot("Some port-slot")
-                                        .setPortSubSlot("Some port-sub-slot")
-                                        .build())
-                                .build())
-                        .build())
-                .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+                    .setServiceFormat(ServiceFormat.Ethernet)
+                    .setServiceRate(Uint32.valueOf(100))
+                    .setClli("clli11")
+                    .setNodeId("XPONDER-2-2")
+                    .setTxDirection(new TxDirectionBuilder()
+                            .setPort(new PortBuilder()
+                                    .setPortDeviceName("Some port-device-name")
+                                    .setPortType("Some port-type")
+                                    .setPortName("Some port-name")
+                                    .setPortRack("Some port-rack")
+                                    .setPortShelf("Some port-shelf")
+                                    .setPortSlot("Some port-slot")
+                                    .setPortSubSlot("Some port-sub-slot")
+                                    .build())
+                            .build())
+                    .setRxDirection(new RxDirectionBuilder()
+                            .setPort(new PortBuilder()
+                                    .setPortDeviceName("Some port-device-name")
+                                    .setPortType("Some port-type")
+                                    .setPortName("Some port-name")
+                                    .setPortRack("Some port-rack")
+                                    .setPortShelf("Some port-shelf")
+                                    .setPortSlot("Some port-slot")
+                                    .setPortSubSlot("Some port-sub-slot")
+                                    .build())
+                            .build())
+                    .build())
+                .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
                         .path.computation.reroute.request.input.ServiceZEndBuilder()
-                        .setServiceFormat(ServiceFormat.Ethernet)
-                        .setServiceRate(Uint32.valueOf(0))
-                        .setClli("Some clli11")
-                        .setNodeId("XPONDER-1-2")
-                        .setTxDirection(new TxDirectionBuilder()
-                                .setPort(new PortBuilder()
-                                        .setPortDeviceName("Some port-device-name")
-                                        .setPortType("Some port-type")
-                                        .setPortName("Some port-name")
-                                        .setPortRack("Some port-rack")
-                                        .setPortShelf("Some port-shelf")
-                                        .setPortSlot("Some port-slot")
-                                        .setPortSubSlot("Some port-sub-slot")
-                                        .build())
-                                .build())
-                        .setRxDirection(new RxDirectionBuilder()
-                                .setPort(new PortBuilder()
-                                        .setPortDeviceName("Some port-device-name")
-                                        .setPortType("Some port-type")
-                                        .setPortName("Some port-name")
-                                        .setPortRack("Some port-rack")
-                                        .setPortShelf("Some port-shelf")
-                                        .setPortSlot("Some port-slot")
-                                        .setPortSubSlot("Some port-sub-slot")
-                                        .build())
-                                .build())
-                        .build())
+                    .setServiceFormat(ServiceFormat.Ethernet)
+                    .setServiceRate(Uint32.valueOf(0))
+                    .setClli("Some clli11")
+                    .setNodeId("XPONDER-1-2")
+                    .setTxDirection(new TxDirectionBuilder()
+                            .setPort(new PortBuilder()
+                                    .setPortDeviceName("Some port-device-name")
+                                    .setPortType("Some port-type")
+                                    .setPortName("Some port-name")
+                                    .setPortRack("Some port-rack")
+                                    .setPortShelf("Some port-shelf")
+                                    .setPortSlot("Some port-slot")
+                                    .setPortSubSlot("Some port-sub-slot")
+                                    .build())
+                            .build())
+                    .setRxDirection(new RxDirectionBuilder()
+                            .setPort(new PortBuilder()
+                                    .setPortDeviceName("Some port-device-name")
+                                    .setPortType("Some port-type")
+                                    .setPortName("Some port-name")
+                                    .setPortRack("Some port-rack")
+                                    .setPortShelf("Some port-shelf")
+                                    .setPortSlot("Some port-slot")
+                                    .setPortSubSlot("Some port-sub-slot")
+                                    .build())
+                            .build())
+                    .build())
                 .setHardConstraints(new HardConstraintsBuilder()
-                        .setCustomerCode(Set.of("Some customer-code"))
-                        .setCoRouting(new CoRoutingBuilder()
-                                .setServiceIdentifierList(Map.of(
-                                        new org.opendaylight.yang.gen.v1
-                                                .http.org.openroadm.routing.constraints.rev211210
-                                                .constraints.co.routing.ServiceIdentifierListKey("test"),
-                                        new ServiceIdentifierListBuilder().setServiceIdentifier("test").build()))
-                                .build())
+                    .setCustomerCode(Set.of("Some customer-code"))
+                    .setCoRouting(new CoRoutingBuilder()
+                        .setServiceIdentifierList(Map.of(
+                                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                        .constraints.co.routing.ServiceIdentifierListKey("test"),
+                                new ServiceIdentifierListBuilder().setServiceIdentifier("test").build()))
                         .build())
+                    .build())
                 .setSoftConstraints(new SoftConstraintsBuilder()
-                        .setCustomerCode(Set.of("Some customer-code"))
-                        .setCoRouting(new CoRoutingBuilder()
-                                .setServiceIdentifierList(Map.of(
-                                        new org.opendaylight.yang.gen.v1
-                                                .http.org.openroadm.routing.constraints.rev211210
-                                                .constraints.co.routing.ServiceIdentifierListKey("test"),
-                                        new ServiceIdentifierListBuilder().setServiceIdentifier("test").build()))
-                                .build())
+                    .setCustomerCode(Set.of("Some customer-code"))
+                    .setCoRouting(new CoRoutingBuilder()
+                        .setServiceIdentifierList(Map.of(
+                                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                        .constraints.co.routing.ServiceIdentifierListKey("test"),
+                                new ServiceIdentifierListBuilder().setServiceIdentifier("test").build()))
                         .build())
+                    .build())
                 .setEndpoints(new EndpointsBuilder()
-                        .setAEndTp("AendTP")
-                        .setZEndTp("ZendTP")
-                        .build())
+                    .setAEndTp("AendTP")
+                    .setZEndTp("ZendTP")
+                    .build())
                 .build();
     }
 
@@ -554,10 +553,10 @@ public final class PceTestData {
                 .build())
             .setHardConstraints(new HardConstraintsBuilder()
                 .setExclude(new ExcludeBuilder()
-                    .setNodeId(Set.of(new NodeIdType("OpenROADM-2-2")))
+                    .setNodeId(List.of(new NodeIdType("OpenROADM-2-2")))
                     .build())
                 .setInclude(new IncludeBuilder()
-                    .setNodeId(Set.of(new NodeIdType("XPONDER-1-2")))
+                    .setNodeId(List.of(new NodeIdType("XPONDER-1-2")))
                     .build())
                 .setLatency(new LatencyBuilder()
                     .setMaxLatency(Decimal64.valueOf("3223"))
@@ -586,13 +585,13 @@ public final class PceTestData {
                         .setRequestId("request 1")
                         .build())
                 .setPceRoutingMetric(PceMetric.HopCount)
-                .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+                .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
                         .path.computation.reroute.request.input.ServiceAEndBuilder()
                         .setServiceRate(Uint32.valueOf(100))
                         .setServiceFormat(ServiceFormat.Ethernet)
                         .setNodeId("XPONDER-1-2")
                         .build())
-                .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+                .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
                         .path.computation.reroute.request.input.ServiceZEndBuilder()
                         .setServiceRate(Uint32.valueOf(0))
                         .setServiceFormat(ServiceFormat.Ethernet)
@@ -600,7 +599,7 @@ public final class PceTestData {
                         .build())
                 .setHardConstraints(new HardConstraintsBuilder()
                         .setExclude(new ExcludeBuilder()
-                                .setNodeId(Set.of(
+                                .setNodeId(List.of(
                                         new NodeIdType("OpenROADM-2-1"),
                                         new NodeIdType("OpenROADM-2-2")))
                                 .build())
@@ -659,7 +658,7 @@ public final class PceTestData {
                 .build())
             .setHardConstraints(new HardConstraintsBuilder()
                 .setExclude(new ExcludeBuilder()
-                    .setNodeId(Set.of(
+                    .setNodeId(List.of(
                         new NodeIdType("OpenROADM-2-1"),
                         new NodeIdType("OpenROADM-2-2")))
                     .build())
@@ -801,9 +800,9 @@ public final class PceTestData {
                 .setDiversity(new DiversityBuilder()
                     .setServiceIdentifierList(Map.of(
                         new ServiceIdentifierListKey(base.getServiceName()),
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity
-                                .existing.service.constraints.ServiceIdentifierListBuilder()
-                            .setServiceIndentifier(base.getServiceName())
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .diversity.existing.service.constraints.ServiceIdentifierListBuilder()
+                            .setServiceIdentifier(base.getServiceName())
                             .setServiceApplicability(new ServiceApplicabilityBuilder()
                                 .setNode(true)
                                 .build())
@@ -820,40 +819,40 @@ public final class PceTestData {
             .setCustomer("Customer")
             .setServiceName("service 1")
             .setServiceAEnd(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-                        .ServiceAEndBuilder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .service.create.input.ServiceAEndBuilder()
                     .setClli("clli")
                     .setServiceRate(Uint32.valueOf(0))
                     .setNodeId(new NodeIdType("XPONDER-1-2"))
                     .setTxDirection(Map.of(
                         new TxDirectionKey(Uint8.ZERO),
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service
-                                .endpoint.TxDirectionBuilder()
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                                .service.endpoint.TxDirectionBuilder()
                             .setPort(new PortBuilder().build())
                             .build()))
                     .setRxDirection(Map.of(
                         new RxDirectionKey(Uint8.ZERO),
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service
-                                .endpoint.RxDirectionBuilder()
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                                .service.endpoint.RxDirectionBuilder()
                             .setPort(new PortBuilder().build())
                             .build()))
                     .build())
             .setServiceZEnd(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-                        .ServiceZEndBuilder()
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .service.create.input.ServiceZEndBuilder()
                     .setClli("clli")
                     .setServiceRate(Uint32.valueOf(0))
                     .setNodeId(new NodeIdType("XPONDER-3-2"))
                     .setTxDirection(Map.of(
                         new TxDirectionKey(Uint8.ZERO),
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service
-                                .endpoint.TxDirectionBuilder()
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                                .service.endpoint.TxDirectionBuilder()
                             .setPort(new PortBuilder().build())
                             .build()))
                     .setRxDirection(Map.of(
                         new RxDirectionKey(Uint8.ZERO),
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service
-                                .endpoint.RxDirectionBuilder()
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                                .service.endpoint.RxDirectionBuilder()
                             .setPort(new PortBuilder().build())
                             .build()))
                     .build())
@@ -930,8 +929,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
@@ -939,8 +938,8 @@ public final class PceTestData {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
-                                .routing.ServiceIdentifierListKey("Some existing-service"),
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
+                                .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service").build()))
                     .build())
                 .build())
index f6c010e6be348ba165cf9badd25f41539b083146..d0e9afa23dfa25b98c9d8add8b536951c29bb7f9 100644 (file)
@@ -28,10 +28,10 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.test.DataStoreContext;
 import org.opendaylight.transportpce.test.converter.DataObjectConverter;
 import org.opendaylight.transportpce.test.converter.XMLDataObjectConverter;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Node;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Node;
 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.networks.Network;
index 5a5593722cc40b13596de5a7f8b215bbb860810c..70268b633648ca3db20dc7cb25ceb9f1cbc1bee9 100644 (file)
@@ -17,34 +17,34 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.fixedflex.GridUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.FiberPmd;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev191129.RatioDB;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.Interface;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLinkKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.amplified.link.SectionElementBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1.FiberType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.span.attributes.LinkConcatenation1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.OMSAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.link.oms.attributes.SpanBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.DegreeAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.networks.network.node.SrgAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.link.concatenation.LinkConcatenationKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLink;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.AmplifiedLinkKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes.amplified.link.SectionElementBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1.FiberType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.span.attributes.LinkConcatenation1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.OMSAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.AmplifiedLinkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.link.oms.attributes.SpanBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.DegreeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.SrgAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.link.concatenation.LinkConcatenation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.link.concatenation.LinkConcatenationKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.CurrentPmList;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.CurrentPmListBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.current.pm.group.CurrentPm;
@@ -143,49 +143,43 @@ public final class TransactionUtils {
         ietfNodeList.put(ietfNodeA.key(),ietfNodeA);
         ietfNodeList.put(ietfNodeC.key(),ietfNodeC);
 
-        Map<AmplifiedLinkKey,AmplifiedLink>
-                amplifiedLinkValues = new HashMap<>();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink al =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes
-                        .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
-                        .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210
-                                .amplified.link.attributes.amplified.link.section.element.section.element
-                                .SpanBuilder()
-                                .setSpan(
-                                        new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified
-                                                .link.attributes.amplified.link.section.element.section
-                                                .element.span.SpanBuilder()
-                                                .setAdministrativeState(AdminStates.InService)
-                                                .setAutoSpanloss(true)
-                                                .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
-                                                .setLinkConcatenation(linkConcentationValues)
-                                                .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
-                                                .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
-                                                .build())
-                                .build())
+        Map<AmplifiedLinkKey,AmplifiedLink> amplifiedLinkValues = new HashMap<>();
+        var al = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes
+                .AmplifiedLinkBuilder()
+            .setSectionElement(new SectionElementBuilder()
+                .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
+                        .attributes.amplified.link.section.element.section.element.SpanBuilder()
+                    .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
+                            .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
+                        .setAdministrativeState(AdminStates.InService)
+                        .setAutoSpanloss(true)
+                        .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
+                        .setLinkConcatenation(linkConcentationValues)
+                        .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
+                        .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
                         .build())
-                        .setSectionEltNumber(Uint16.valueOf(1)).build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes.AmplifiedLink al2 =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link.attributes
-                        .AmplifiedLinkBuilder().setSectionElement(new SectionElementBuilder()
-                        .setSectionElement(
-                                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.amplified.link
-                                        .attributes.amplified.link.section.element.section.element.SpanBuilder()
-                                        .setSpan(
-                                                new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210
-                                                        .amplified.link
-                                                        .attributes.amplified.link.section.element.section.element.span
-                                                        .SpanBuilder()
-                                                        .setAdministrativeState(AdminStates.InService)
-                                                        .setAutoSpanloss(true)
-                                                        .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
-                                                        .setLinkConcatenation(linkConcentationValues)
-                                                        .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
-                                                        .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
-                                                        .build())
-                                        .build())
+                    .build())
+                .build())
+            .setSectionEltNumber(Uint16.valueOf(1))
+            .build();
+        var al2 = new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link.attributes
+                .AmplifiedLinkBuilder()
+            .setSectionElement(new SectionElementBuilder()
+                .setSectionElement(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
+                        .attributes.amplified.link.section.element.section.element.SpanBuilder()
+                    .setSpan(new org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev230526.amplified.link
+                            .attributes.amplified.link.section.element.section.element.span.SpanBuilder()
+                        .setAdministrativeState(AdminStates.InService)
+                        .setAutoSpanloss(true)
+                        .setEngineeredSpanloss(new RatioDB(Decimal64.valueOf("1")))
+                        .setLinkConcatenation(linkConcentationValues)
+                        .setSpanlossBase(new RatioDB(Decimal64.valueOf("1")))
+                        .setSpanlossCurrent(new RatioDB(Decimal64.valueOf("1")))
                         .build())
-                        .setSectionEltNumber(Uint16.valueOf(1)).build();
+                    .build())
+                .build())
+            .setSectionEltNumber(Uint16.valueOf(1))
+            .build();
         amplifiedLinkValues.put(al.key(),al);
         amplifiedLinkValues.put(al2.key(),al2);
         Augmentation<Link> aug11 = new Link1Builder()
@@ -195,20 +189,22 @@ public final class TransactionUtils {
                         .setSpan(new SpanBuilder().build())
                         .build())
                 .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1 aug12 =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder()
-                        .setOppositeLink(new LinkId("link 1"))
-                        .setLinkType(OpenroadmLinkType.ROADMTOROADM).build();
+        var aug12 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder()
+            .setOppositeLink(new LinkId("link 1"))
+            .setLinkType(OpenroadmLinkType.ROADMTOROADM)
+            .build();
         Augmentation<Link> aug21 = new Link1Builder()
-                .setAmplified(true)
-                .setOMSAttributes(new OMSAttributesBuilder()
-                        .setAmplifiedLink(new AmplifiedLinkBuilder().setAmplifiedLink(amplifiedLinkValues).build())
-                        .setSpan(new SpanBuilder().build())
-                        .build())
-                .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1 aug22 =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder()
-                        .setLinkType(OpenroadmLinkType.ROADMTOROADM).build();
+            .setAmplified(true)
+            .setOMSAttributes(new OMSAttributesBuilder()
+                .setAmplifiedLink(new AmplifiedLinkBuilder()
+                    .setAmplifiedLink(amplifiedLinkValues)
+                    .build())
+                .setSpan(new SpanBuilder().build())
+                .build())
+            .build();
+        var aug22 = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder()
+            .setLinkType(OpenroadmLinkType.ROADMTOROADM)
+            .build();
         // create the roadm-to-roadm link to be measured
         Link roadm2roadmLink = new LinkBuilder().setLinkId(new LinkId("ROADM-A1-to-ROADM-C1"))
                 .setSource(new SourceBuilder().setSourceNode(ietfNodeA.getNodeId())
@@ -304,9 +300,8 @@ public final class TransactionUtils {
                 .setCurrentPmEntry(Map.of(currentPmEntryC.key(),currentPmEntryC)).build());
     }
 
-    private static org.opendaylight
-            .yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1 getNode1() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.Node1Builder()
+    private static org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1 getNode1() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.Node1Builder()
                 .setSrgAttributes(getSrgAttributes())
                 .setDegreeAttributes(getDegAttributes())
                 .build();
similarity index 87%
rename from pce/src/test/resources/apidocCatalog10_1OptSpecV5_1.json
rename to pce/src/test/resources/apidocCatalog12_0-OptSpecV5_1.json
index 413c6f5cdf486359f9ef6d1ae26122dc15d1c6f4..830322c4f1e1f8a768e01845df09e8bc3026722a 100644 (file)
                         "openroadm-operational-mode-id": "OR-W-300G-oFEC-63.1Gbd",
                         "baud-rate": "63.1",
                         "line-rate": "378.8",
-                        "modulation-format": "dp-qam16",
+                        "modulation-format": "dp-qam8",
                         "min-TX-osnr": "37.000",
                         "TX-OOB-osnr": {
                             "WR-openroadm-operational-mode-id": "MW-WR-core",
                         "openroadm-operational-mode-id": "OR-W-400G-oFEC-63.1Gbd",
                         "baud-rate": "63.1",
                         "line-rate": "505.1",
-                        "modulation-format": "dp-qam8",
+                        "modulation-format": "dp-qam16",
                         "min-TX-osnr": "37.000",
                         "TX-OOB-osnr": {
                             "WR-openroadm-operational-mode-id": "MW-WR-core",
             },
             "amplifiers": {
                 "Amplifier": {
-                    "min-gain": "0.000",
-                    "max-gain": "27.000",
-                    "max-extended-gain": "31.000",
-                    "mask-gain-ripple-vs-tilt": [
-                        {
-                            "lower-boundary": "-4",
-                            "upper-boundary": "-1",
-                            "C": "-0.50",
-                            "D": "1.00"
-                        },
-                        {
-                            "lower-boundary": "-1",
-                            "upper-boundary": "0",
-                            "C": "0.50",
-                            "D": "2.00"
-                        }
-                    ],
                     "openroadm-operational-mode": [
                         {
                             "openroadm-operational-mode-id": "MWi-standard",
                                 "C": "-1.07100000",
                                 "D": "28.99000000"
                             },
-                            "per-channel-Pout-min": "-9.000",
-                            "per-channel-Pout-max": "2.000"
+                            "mask-power-vs-pin": [
+                                {
+                                    "lower-boundary": "0",
+                                    "upper-boundary": "6",
+                                    "C": "1.00000000",
+                                    "D": "-9.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "6",
+                                    "upper-boundary": "8",
+                                    "C": "-0.00000000",
+                                    "D": "-3.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "8",
+                                    "upper-boundary": "23",
+                                    "C": "0.33333334",
+                                    "D": "-5.66666667",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "23",
+                                    "upper-boundary": "31",
+                                    "C": "0.00000000",
+                                    "D": "2.00000000",
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "min-gain": "0.000",
+                            "max-gain": "27.000",
+                            "max-extended-gain": "31.000",
+                             "mask-gain-ripple-vs-tilt": [
+                                {
+                                    "lower-boundary": "-4",
+                                    "upper-boundary": "-1",
+                                    "C": "-0.50",
+                                    "D": "1.00"
+                                },
+                                {
+                                    "lower-boundary": "-1",
+                                    "upper-boundary": "0",
+                                    "C": "0.50",
+                                    "D": "2.00"
+                                }
+                            ]
                         },
                         {
                             "openroadm-operational-mode-id": "MWi-low-noise",
                                 "C": "-0.58890000",
                                 "D": "37.62000000"
                             },
-                            "per-channel-Pout-min": "-9.000",
-                            "per-channel-Pout-max": "2.000"
+                            "mask-power-vs-pin": [
+                                {
+                                    "lower-boundary": "0",
+                                    "upper-boundary": "6",
+                                    "C": "1.00000000",
+                                    "D": "-9.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "6",
+                                    "upper-boundary": "8",
+                                    "C": "-0.00000000",
+                                    "D": "-3.00000000",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "8",
+                                    "upper-boundary": "23",
+                                    "C": "0.33333334",
+                                    "D": "-5.66666667",
+                                    "fiber-type": "smf"
+                                },
+                                {
+                                    "lower-boundary": "23",
+                                    "upper-boundary": "31",
+                                    "C": "0.00000000",
+                                    "D": "2.00000000",
+                                    "fiber-type": "smf"
+                                }
+                            ],
+                            "min-gain": "0.000",
+                            "max-gain": "27.000",
+                            "max-extended-gain": "31.000",
+                             "mask-gain-ripple-vs-tilt": [
+                                {
+                                    "lower-boundary": "-4",
+                                    "upper-boundary": "-1",
+                                    "C": "-0.50",
+                                    "D": "1.00"
+                                },
+                                {
+                                    "lower-boundary": "-1",
+                                    "upper-boundary": "0",
+                                    "C": "0.50",
+                                    "D": "2.00"
+                                }
+                            ]
                         }
                     ]
                 }
             }
         }
     }
-}
+}
\ No newline at end of file
diff --git a/pce/src/test/resources/spectrum-filling-rule1.json b/pce/src/test/resources/spectrum-filling-rule1.json
new file mode 100644 (file)
index 0000000..dfb0c83
--- /dev/null
@@ -0,0 +1,38 @@
+{
+    "controller-behaviour-settings": {
+        "spectrum-filling": {
+          "spectrum-filling-rules": [
+            {
+              "rule-id": 1,
+              "priority": 1,
+              "RMSA-policy": "maximize-capacity",
+              "spectrum-range-of-appliance": {
+                "dedicated-signal-bandwidth-multiple": 50,
+                "spectrum-portion-id": 0,
+                "start-edge-frequency": 191.325,
+                "stop-edge-frequency": 191.375,
+                "dedicated-customer": [
+                  "CustomerProfileLamda1"
+                ],
+                "non-authorized-customer": [
+                  "All-other"
+                ]
+              }
+            },
+            {
+              "rule-id": 2,
+              "priority": 1,
+              "RMSA-policy": "maximize-capacity",
+              "spectrum-range-of-appliance": {
+                "spectrum-portion-id": 1,
+                "start-edge-frequency": 191.375,
+                "stop-edge-frequency": 196.125,
+                "non-authorized-customer": [
+                  "CustomerProfileLamda1"
+                ]
+              }
+            }
+          ]
+        }
+    }
+}
diff --git a/pom.xml b/pom.xml
index f768d891ce4bd6beba09bd820d975916e3696f6a..aa058cf327762131791d50207dbb34d136676836 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -12,13 +12,13 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <parent>
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent-lite</artifactId>
-    <version>12.0.3</version>
+    <version>13.0.11</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-aggregator</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <name>transportpce</name>
   <packaging>pom</packaging>
 
index 79c1ff0b1ac80b7ae9a711cd45734475c6989a4c..4ce1a4b3a1d93a9a1cb8b099f58cdedb9c0d6050 100644 (file)
@@ -13,17 +13,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-renderer</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -53,7 +53,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
@@ -69,7 +69,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
@@ -86,6 +86,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <artifactId>transportpce-networkmodel</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>transportpce-olm</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>concepts</artifactId>
@@ -114,6 +119,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.service.component.annotations</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+    </dependency>
 
     <!-- Testing Dependencies -->
     <dependency>
index fafbd4e57cec3cdc53b645acc15b55a164b33396..ca26148b327e1a92d277662666f77b11cb52cf79 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.transportpce.renderer;
 
 import com.google.common.util.concurrent.ListenableFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -38,21 +39,21 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyGHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OpucnTribSlotDef;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.Resource;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Link;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.Resource;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Link;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.optical.renderer.nodes.Nodes;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.optical.renderer.nodes.NodesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.optical.renderer.nodes.NodesKey;
@@ -390,7 +391,7 @@ public final class ModelMappingUtils {
         }
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = {"NP_LOAD_OF_KNOWN_NULL_VALUE","RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"},
         justification = "loop when value is not always null - "
                 + "TODO: check if something exists in Java lib")
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/RendererProvider.java
deleted file mode 100644 (file)
index 41aed38..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright © 2017 AT&T and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.renderer;
-
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
-import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.TransportpceDeviceRendererService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Component
-public class RendererProvider {
-
-    private static final Logger LOG = LoggerFactory.getLogger(RendererProvider.class);
-    private final RpcProviderService rpcProviderService;
-    private ObjectRegistration<TransportpceDeviceRendererService> deviceRendererRegistration;
-    private ObjectRegistration<TransportpceRendererService> tpceServiceRegistry;
-
-    @Activate
-    public RendererProvider(@Reference RpcProviderService rpcProviderService,
-            @Reference DeviceRendererService deviceRenderer,
-            @Reference OtnDeviceRendererService otnDeviceRendererService,
-            @Reference TransportpceDeviceRendererService deviceRendererRPCImpl,
-            @Reference TransportpceRendererService transportPCEServicePathRPCImpl) {
-        this.rpcProviderService = rpcProviderService;
-        LOG.info("RendererProvider Session Initiated");
-        this.deviceRendererRegistration = this.rpcProviderService
-                .registerRpcImplementation(TransportpceDeviceRendererService.class, deviceRendererRPCImpl);
-        this.tpceServiceRegistry = this.rpcProviderService
-                .registerRpcImplementation(TransportpceRendererService.class, transportPCEServicePathRPCImpl);
-    }
-
-    /**
-     * Method called when the blueprint container is destroyed.
-     */
-    @Deactivate
-    public void close() {
-        LOG.info("RendererProvider Closed");
-        if (this.deviceRendererRegistration != null) {
-            this.deviceRendererRegistration.close();
-        }
-        if (this.tpceServiceRegistry != null) {
-            this.tpceServiceRegistry.close();
-        }
-    }
-}
\ No newline at end of file
index 14bcabb0bf6e54482b8ab54d864508824bb59ea4..3a47fa03c5df6391b6ed2e618e9507760aea57d0 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.transportpce.common.fixedflex.SpectrumInformation;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.PowerDBm;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
index acdf6ea9360064895a8553980b96e1ff8e6e39c3..64375e0a9d54b69cdb45eaee708edd25cdcb2fd7 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyGHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.FrequencyTHz;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.ModulationFormat;
index e730df4f5814d4269e04b3b0a1a7dd16d3dd1709..029eb4d45723b1023fac683448d96f06533ff61d 100644 (file)
@@ -23,7 +23,7 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.TrailTraceOther.TimDetectMode;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.parent.odu.allocation.ParentOduAllocationBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.parent.odu.allocation.parent.odu.allocation.trib.slots.choice.OpucnBuilder;
@@ -77,9 +77,9 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev200529.opu.OpuBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev200529.otu.container.OtuBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otsi.group.interfaces.rev200529.otsi.group.container.OtsiGroupBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.If100GE;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOCHOTU4ODU4;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.IfOtsiOtsigroup;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.If100GE;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOCHOTU4ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev230526.IfOtsiOtsigroup;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
index cc99c4386b97dac192395befd11c4b3737327f1b..a53d0be1759a5bcc201e46059e2b5a5842da7941 100644 (file)
@@ -19,7 +19,7 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OpucnTribSlotDef;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
index 4bd60d86d3e0f1e00c76ad5ab97eb68352e7cd70..ab8380b4d616470fc140f4841b8fb9980b0e4fa9 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.AEndApiInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.az.api.info.ZEndApiInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.interfaces.grp.InterfaceKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev171215.AdminStates;
index 06aa5cca2b81b5722340048ddc178e2d3d1eb874..5a8a0946f90f5f8bb520a2ba3b965a485ccd6b9d 100644 (file)
@@ -13,7 +13,7 @@ import java.util.stream.IntStream;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.parent.odu.allocation.ParentOduAllocationBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.attributes.rev200327.parent.odu.allocation.parent.odu.allocation.trib.slots.choice.OpucnBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev200529.Off;
index a242147bdcdfffe2e4cb4d15a8fa7addc3e097d6..049247b45dc17f8e0d8a541c92a26f5de9a6c88d 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.transportpce.renderer.provisiondevice;
 
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.History;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
@@ -44,6 +45,35 @@ public interface DeviceRendererService {
      */
     ServicePathOutput setupServicePath(ServicePathInput input, ServicePathDirection direction);
 
+    /**
+     * This method set's wavelength path based on following steps.
+     *
+     * <p>
+     * For each node:
+     * 1. Create Och interface on source termination point.
+     * 2. Create Och interface on destination termination point.
+     * 3. Create cross connect between source and destination tps created in step 1
+     *    and 2.
+     *
+     * Naming convention used for OCH interfaces name : tp-wavenumber Naming
+     * convention used for cross connect name : src-dest-wavenumber
+     * </p>
+     *
+     * @param input
+     *            Input parameter from the service-path yang model
+     * @param direction
+     *            Service Path direction
+     * @param transactionHistory
+     *            Object tracking created interface(s) and connection(s).
+     *
+     * @return Result list of all nodes if request successful otherwise specific
+     *         reason of failure.
+     */
+    ServicePathOutput setupServicePath(
+            ServicePathInput input,
+            ServicePathDirection direction,
+            History transactionHistory);
+
     /**
      * This method removes wavelength path based on following steps.
      *
@@ -72,6 +102,14 @@ public interface DeviceRendererService {
      */
     RendererRollbackOutput rendererRollback(RendererRollbackInput input);
 
+    /**
+     * Rollback created interfaces and cross connects specified by transaction history.
+     *
+     * @param transactionHistory The transaction history in need of rollback.
+     * @return Success flag and nodes which failed to rollback
+     */
+    RendererRollbackOutput rendererRollback(History transactionHistory);
+
     /**
      * This method creates the basis of ots and oms interfaces on a specific ROADM degree.
      *
index 5cc550c06477509b19cd43a4c8c577d1a429562c..a38b848b414f1888ada468153a571145659cb762 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.transportpce.renderer.provisiondevice;
 
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.FluentFuture;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -48,6 +49,15 @@ import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfa
 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
 import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServiceListTopology;
 import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.Connection;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.DeviceInterface;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.DeleteService;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.DeleteSubscriber;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.FailedRollbackResult;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Result;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Subscriber;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.History;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.NonStickHistoryMemory;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.ServiceNodelist;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.NodelistBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service.nodelist.NodelistKey;
@@ -65,13 +75,13 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.re
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollback;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollbackBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollbackKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.Topology;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.OpenroadmNodeVersion;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.Topology;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesKey;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.link.tp.LinkTp;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.link.tp.LinkTpBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.node.interfaces.NodeInterface;
@@ -112,12 +122,21 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
         this.openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
     }
 
+    @Override
+    public ServicePathOutput setupServicePath(ServicePathInput input, ServicePathDirection direction) {
+        return setupServicePath(input, direction, new NonStickHistoryMemory());
+    }
+
     @SuppressWarnings("rawtypes")
     // FIXME check if the ForkJoinTask raw type can be avoided
     // Raw types use are discouraged since they lack type safety.
     // Resulting Problems are observed at run time and not at compile time
     @Override
-    public ServicePathOutput setupServicePath(ServicePathInput input, ServicePathDirection direction) {
+    public ServicePathOutput setupServicePath(
+            ServicePathInput input,
+            ServicePathDirection direction,
+            History transactionHistory
+    ) {
         LOG.info("setup service path for input {} and direction {}", input, direction);
         List<Nodes> nodes = new ArrayList<>();
         if (input.getNodes() != null) {
@@ -163,10 +182,14 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                         crossConnectFlag++;
                         String supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface(
                                 nodeId, destTp, spectrumInformation);
+                        transactionHistory.add(new DeviceInterface(nodeId, supportingOchInterface));
+
                         // Split the string based on # pass the last element as the supported Interface
                         // This is needed for 7.1 device models with B100G, we have OTSI, OTSI-group combined as OCH
                         String[] listOfSuppOchInf = supportingOchInterface.split("#");
                         List<String> createdOchInf = Arrays.asList(listOfSuppOchInf);
+                        transactionHistory.addInterfaces(nodeId, listOfSuppOchInf);
+
                         createdOchInterfaces.addAll(createdOchInf);
                         LOG.info("DEST all otsi interfaces {}", createdOchInterfaces);
                         // Taking the last element
@@ -175,6 +198,8 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                                 .createOpenRoadmOtu4Interface(nodeId, destTp, supportingOchInterface, apiInfoA,
                                         apiInfoZ);
                         createdOtuInterfaces.add(supportingOtuInterface);
+                        transactionHistory.add(new DeviceInterface(nodeId, supportingOtuInterface));
+
                         LOG.info("all dest otu interfaces {}", createdOtuInterfaces);
                         if (srcTp == null) {
                             otnLinkTps.add(new LinkTpBuilder().setNodeId(nodeId).setTpId(destTp).build());
@@ -182,23 +207,32 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                             // If src and dest tp contains the network token, then it is regenerator
                             LOG.info("Create the ODUCn for regen on the dest-tp");
                             // Here we first create ODUCn interface for the Regen
-                            createdOduInterfaces.add(this.openRoadmInterfaceFactory
-                                    .createOpenRoadmOducn(nodeId, destTp));
+                            String openRoadmOducn = this.openRoadmInterfaceFactory
+                                    .createOpenRoadmOducn(nodeId, destTp);
+                            createdOduInterfaces.add(openRoadmOducn);
+                            transactionHistory.addInterfaces(nodeId, openRoadmOducn);
+
                             LOG.info("all dest odu interfaces {}", createdOduInterfaces);
                         } else {
                             // This is needed for 7.1 device models for 400GE, since we have ODUC4 and ODUflex
                             // are combined
-                            createdOduInterfaces = Set.of(this.openRoadmInterfaceFactory
-                                .createOpenRoadmOdu4HOInterface(
-                                    nodeId, destTp, false, apiInfoA, apiInfoZ, PT_07).split("#"));
+                            String[] oduInterfaces = this.openRoadmInterfaceFactory
+                                    .createOpenRoadmOdu4HOInterface(
+                                            nodeId, destTp, false, apiInfoA, apiInfoZ, PT_07).split("#");
+                            createdOduInterfaces.addAll(Arrays.asList(oduInterfaces));
+                            transactionHistory.addInterfaces(nodeId, oduInterfaces);
+
                         }
                     }
                     if ((srcTp != null) && srcTp.contains(StringConstants.CLIENT_TOKEN)) {
                         LOG.info("Adding supporting EThernet interface for node {}, src tp {}", nodeId, srcTp);
                         crossConnectFlag++;
                         // create OpenRoadm Xponder Client Interfaces
-                        createdEthInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmEthInterface(
-                                nodeId, srcTp));
+                        String openRoadmEthInterface = this.openRoadmInterfaceFactory.createOpenRoadmEthInterface(
+                                nodeId, srcTp);
+                        createdEthInterfaces.add(openRoadmEthInterface);
+                        transactionHistory.add(new DeviceInterface(nodeId, openRoadmEthInterface));
+
                     }
                     if ((srcTp != null) && srcTp.contains(StringConstants.NETWORK_TOKEN)) {
                         LOG.info("Adding supporting OCH interface for node {}, src tp {}, spectrumInformation {}",
@@ -207,10 +241,14 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                         // create OpenRoadm Xponder Line Interfaces
                         String supportingOchInterface = this.openRoadmInterfaceFactory.createOpenRoadmOchInterface(
                                 nodeId, srcTp, spectrumInformation);
+                        transactionHistory.add(new DeviceInterface(nodeId, supportingOchInterface));
+
                         // createdOchInterfaces.add(supportingOchInterface);
                         // Split the string based on # pass the last element as the supported Interface
                         // This is needed for 7.1 device models with B100G, we have OTSI, OTSI-group combined as OCH
                         String[] listOfSuppOchInf = supportingOchInterface.split("#");
+                        transactionHistory.addInterfaces(nodeId, listOfSuppOchInf);
+
                         List<String> tmpCreatedOchInterfaces = Arrays.asList(listOfSuppOchInf);
                         createdOchInterfaces.addAll(tmpCreatedOchInterfaces);
                         // Taking the last element
@@ -218,40 +256,53 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                         String supportingOtuInterface = this.openRoadmInterfaceFactory.createOpenRoadmOtu4Interface(
                                 nodeId, srcTp, supportingOchInterface, apiInfoA, apiInfoZ);
                         createdOtuInterfaces.add(supportingOtuInterface);
+                        transactionHistory.add(new DeviceInterface(nodeId, supportingOtuInterface));
+
                         if (destTp == null) {
                             otnLinkTps.add(new LinkTpBuilder().setNodeId(nodeId).setTpId(srcTp).build());
                         } else if (destTp.contains(StringConstants.NETWORK_TOKEN)) {
                             // If the src and dest tp have network-token, then it is a regen
                             LOG.info("Create the regen-interfaces on the src-tp");
                             // Here we first create ODUCn interface for the Regen
-                            createdOduInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmOducn(nodeId,
-                                    srcTp));
+                            String openRoadmOducn = this.openRoadmInterfaceFactory.createOpenRoadmOducn(nodeId,
+                                    srcTp);
+                            createdOduInterfaces.add(openRoadmOducn);
+                            transactionHistory.add(new DeviceInterface(nodeId, openRoadmOducn));
+
                             LOG.info("all src odu interfaces {}", createdOduInterfaces);
                         } else {
-                            createdOduInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
-                                    nodeId, srcTp, false, apiInfoA, apiInfoZ, PT_07));
+                            String openRoadmOdu4HOInterface = this.openRoadmInterfaceFactory
+                                    .createOpenRoadmOdu4HOInterface(nodeId, srcTp, false, apiInfoA, apiInfoZ, PT_07);
+                            createdOduInterfaces.add(openRoadmOdu4HOInterface);
+                            transactionHistory.add(new DeviceInterface(nodeId, openRoadmOdu4HOInterface));
                         }
                     }
                     if ((destTp != null) && destTp.contains(StringConstants.CLIENT_TOKEN)) {
                         LOG.info("Adding supporting EThernet interface for node {}, dest tp {}", nodeId, destTp);
                         crossConnectFlag++;
                         // create OpenRoadm Xponder Client Interfaces
-                        createdEthInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmEthInterface(
-                                nodeId, destTp));
+                        String openRoadmEthInterface = this.openRoadmInterfaceFactory.createOpenRoadmEthInterface(
+                                nodeId, destTp);
+                        createdEthInterfaces.add(openRoadmEthInterface);
+                        transactionHistory.add(new DeviceInterface(nodeId, openRoadmEthInterface));
                     }
                     if ((srcTp != null) && (srcTp.contains(StringConstants.TTP_TOKEN)
                             || srcTp.contains(StringConstants.PP_TOKEN))) {
                         LOG.info("Adding supporting OCH interface for node {}, src tp {}, spectrumInformation {}",
                                 nodeId, srcTp, spectrumInformation);
-                        createdOchInterfaces.addAll(this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaces(
-                                nodeId, srcTp, spectrumInformation));
+                        List<String> openRoadmOchInterfaces = this.openRoadmInterfaceFactory
+                                .createOpenRoadmOchInterfaces(nodeId, srcTp, spectrumInformation);
+                        createdOchInterfaces.addAll(openRoadmOchInterfaces);
+                        transactionHistory.addInterfaces(nodeId, openRoadmOchInterfaces);
                     }
                     if ((destTp != null) && (destTp.contains(StringConstants.TTP_TOKEN)
                             || destTp.contains(StringConstants.PP_TOKEN))) {
                         LOG.info("Adding supporting OCH interface for node {}, dest tp {}, spectrumInformation {}",
                                 nodeId, destTp, spectrumInformation);
-                        createdOchInterfaces.addAll(this.openRoadmInterfaceFactory.createOpenRoadmOchInterfaces(
-                                nodeId, destTp, spectrumInformation));
+                        List<String> openRoadmOchInterfaces = this.openRoadmInterfaceFactory
+                                .createOpenRoadmOchInterfaces(nodeId, destTp, spectrumInformation);
+                        createdOchInterfaces.addAll(openRoadmOchInterfaces);
+                        transactionHistory.addInterfaces(nodeId, openRoadmOchInterfaces);
                     }
                     if (crossConnectFlag < 1) {
                         LOG.info("Creating cross connect between source {} and destination {} for node {}", srcTp,
@@ -260,7 +311,9 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                                 this.crossConnect.postCrossConnect(nodeId, srcTp, destTp, spectrumInformation);
                         if (connectionNameOpt.isPresent()) {
                             nodesProvisioned.add(nodeId);
-                            createdConnections.add(connectionNameOpt.orElseThrow());
+                            String connectionName = connectionNameOpt.orElseThrow();
+                            createdConnections.add(connectionName);
+                            transactionHistory.add(new Connection(nodeId, connectionName, false));
                         } else {
                             processErrorMessage("Unable to post Roadm-connection for node " + nodeId, forkJoinPool,
                                     results);
@@ -557,6 +610,26 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                 .build();
     }
 
+    @Override
+    public RendererRollbackOutput rendererRollback(History transactionHistory) {
+        LOG.info("Rolling back...");
+
+        Result rollbackResult = new FailedRollbackResult();
+        Subscriber deleteSubscriber = new DeleteSubscriber(rollbackResult);
+
+        transactionHistory.rollback(
+                new DeleteService(
+                        crossConnect,
+                        openRoadmInterfaces,
+                        deleteSubscriber
+                )
+        );
+
+        LOG.info("Rollback done!");
+
+        return rollbackResult.renderRollbackOutput();
+    }
+
     private boolean alarmSuppressionNodeRegistration(ServicePathInput input) {
         Map<org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.service
                 .nodelist.nodelist.NodesKey,
@@ -640,7 +713,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
         }
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "SLF4J_FORMAT_SHOULD_BE_CONST",
         justification = "Log messages content needs to be formatted before"
             + "since they are used in the returned object")
index e71e4fce63743f4532a59f28697ba830b641ef52..1cd8a9bca7456995f8370f04fc5bc557f474b3ac 100644 (file)
@@ -12,11 +12,12 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
 
 public interface RendererServiceOperations {
 
-    ListenableFuture<ServiceImplementationRequestOutput> serviceImplementation(ServiceImplementationRequestInput input);
+    ListenableFuture<ServiceImplementationRequestOutput> serviceImplementation(ServiceImplementationRequestInput input,
+                                                                               boolean isTempService);
 
     ListenableFuture<ServiceDeleteOutput> serviceDelete(ServiceDeleteInput input, Services service);
 }
index fdad346c21d9639976fc7c8cbaccdc02311da47f..c9993e2292802ccde8268bca219ea3106a889ca4 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -23,7 +24,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.StringConstants;
@@ -32,25 +33,29 @@ import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.service.ServiceTypes;
 import org.opendaylight.transportpce.renderer.ModelMappingUtils;
 import org.opendaylight.transportpce.renderer.ServicePathInputData;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.Notification;
 import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.DeviceRenderingRollbackTask;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.DeviceRenderingTask;
+import org.opendaylight.transportpce.renderer.provisiondevice.tasks.NetworkDeviceRenderingRollbackTask;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerSetupRollbackTask;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerSetupTask;
+import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OlmPowerTurnDownTask;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.OtnDeviceRenderingTask;
 import org.opendaylight.transportpce.renderer.provisiondevice.tasks.RollbackProcessor;
+import org.opendaylight.transportpce.renderer.provisiondevice.tasks.RollbackResultMessage;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.History;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.TransactionHistory;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPm;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetup;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndown;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSpBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
@@ -62,8 +67,8 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.ResourceTypeEnum;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
@@ -74,7 +79,6 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.olm.get.pm.input.ResourceIdentifierBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.optical.renderer.nodes.Nodes;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -93,41 +97,42 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             "OLM power setup was not successful! Rendering and OLM will be rolled back.";
     private static final String RENDERING_DEVICES_A_Z_MSG = "Rendering devices A-Z";
     private static final String RENDERING_DEVICES_Z_A_MSG = "Rendering device Z-A";
-    private static final String TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG = "Turning down power on A-to-Z path";
-    private static final String FAILED = "Failed";
+    private static final String ATOZPATH = "A-to-Z";
+    private static final String ZTOAPATH = "Z-to-A";
     private static final String OPERATION_FAILED = "Operation Failed";
     private static final String OPERATION_SUCCESSFUL = "Operation Successful";
     private static final int NUMBER_OF_THREADS = 4;
 
     private final DeviceRendererService deviceRenderer;
     private final OtnDeviceRendererService otnDeviceRenderer;
-    private final TransportpceOlmService olmService;
     private final DataBroker dataBroker;
-    private final NotificationPublishService notificationPublishService;
+    private final Notification notification;
     private final PortMapping portMapping;
+    private final RpcService rpcService;
     private ListeningExecutorService executor;
 
     @Activate
     public RendererServiceOperationsImpl(@Reference DeviceRendererService deviceRenderer,
             @Reference OtnDeviceRendererService otnDeviceRenderer,
-            @Reference TransportpceOlmService olmService,
             @Reference DataBroker dataBroker,
-            @Reference NotificationPublishService notificationPublishService,
-            @Reference PortMapping portMapping) {
+            @Reference Notification notification,
+            @Reference PortMapping portMapping,
+            @Reference RpcService rpcService) {
         this.deviceRenderer = deviceRenderer;
         this.otnDeviceRenderer = otnDeviceRenderer;
-        this.olmService = olmService;
         this.dataBroker = dataBroker;
-        this.notificationPublishService = notificationPublishService;
+        this.notification = notification;
         this.portMapping = portMapping;
+        this.rpcService = rpcService;
         this.executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUMBER_OF_THREADS));
         LOG.debug("RendererServiceOperationsImpl instantiated");
     }
 
     @Override
     public ListenableFuture<ServiceImplementationRequestOutput>
-            serviceImplementation(ServiceImplementationRequestInput input) {
+            serviceImplementation(ServiceImplementationRequestInput input, boolean isTempService) {
         LOG.info("Calling service impl request {}", input.getServiceName());
+        LOG.debug("Check if it is temp-service {}", isTempService);
         return executor.submit(new Callable<ServiceImplementationRequestOutput>() {
 
             @Override
@@ -139,7 +144,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
                     "Service compliant, submitting service implementation Request ...");
                 Uint32 serviceRate = getServiceRate(input);
                 LOG.info("Using {}G rate", serviceRate);
-                org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922
+                org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221
                         .network.Nodes mappingNode =
                     portMapping.isNodeExist(input.getServiceAEnd().getNodeId())
                         ? portMapping.getNode(input.getServiceAEnd().getNodeId())
@@ -163,7 +168,8 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
                     case StringConstants.SERVICE_TYPE_OTUC2:
                     case StringConstants.SERVICE_TYPE_OTUC3:
                     case StringConstants.SERVICE_TYPE_OTUC4:
-                        if (!manageServicePathCreation(input, serviceType)) {
+                        LOG.debug("Check temp service {}", isTempService);
+                        if (!manageServicePathCreation(input, serviceType, isTempService)) {
                             return ModelMappingUtils
                                 .createServiceImplResponse(ResponseCodes.RESPONSE_FAILED, OPERATION_FAILED);
                         }
@@ -271,7 +277,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         });
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "UPM_UNCALLED_PRIVATE_METHOD",
         justification = "call in call() method")
     private Uint32 getServiceRate(ServiceImplementationRequestInput input) {
@@ -315,20 +321,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             .get(serviceName);
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
-            value = "UPM_UNCALLED_PRIVATE_METHOD",
-            justification = "call in call() method")
-    private ServicePowerTurndownOutput olmPowerTurndown(ServicePathInputData servicePathInputData)
-            throws InterruptedException, ExecutionException, TimeoutException {
-        LOG.debug(TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG);
-        return this.olmService
-            .servicePowerTurndown(
-                new ServicePowerTurndownInputBuilder(servicePathInputData.getServicePathInput()).build())
-            .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS)
-            .getResult();
-    }
-
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
             value = "UPM_UNCALLED_PRIVATE_METHOD",
             justification = "call in call() method")
     private Optional<org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
@@ -351,7 +344,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         }
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
             value = "UPM_UNCALLED_PRIVATE_METHOD",
             justification = "call in call() method")
     private List<DeviceRenderingResult> deviceRendering(
@@ -367,9 +360,12 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             servicePathDataAtoZ.getServicePathInput().getServiceName(),
             RpcStatusEx.Pending,
             RENDERING_DEVICES_A_Z_MSG);
+
+        History transactionHistory = new TransactionHistory();
         ListenableFuture<DeviceRenderingResult> atozrenderingFuture =
             this.executor.submit(
-                new DeviceRenderingTask(this.deviceRenderer, servicePathDataAtoZ, ServicePathDirection.A_TO_Z));
+                new DeviceRenderingTask(this.deviceRenderer, servicePathDataAtoZ, ServicePathDirection.A_TO_Z,
+                        transactionHistory));
 
         LOG.info(RENDERING_DEVICES_Z_A_MSG);
         sendNotifications(
@@ -379,7 +375,8 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             RENDERING_DEVICES_Z_A_MSG);
         ListenableFuture<DeviceRenderingResult> ztoarenderingFuture =
             this.executor.submit(
-                new DeviceRenderingTask(this.deviceRenderer, servicePathDataZtoA, ServicePathDirection.Z_TO_A));
+                new DeviceRenderingTask(this.deviceRenderer, servicePathDataZtoA, ServicePathDirection.Z_TO_A,
+                        transactionHistory));
 
         ListenableFuture<List<DeviceRenderingResult>> renderingCombinedFuture =
             Futures.allAsList(atozrenderingFuture, ztoarenderingFuture);
@@ -400,20 +397,19 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         }
 
         rollbackProcessor.addTask(
-            new DeviceRenderingRollbackTask(
-                "AtoZDeviceTask",
-                ! renderingResults.get(0).isSuccess(),
-                renderingResults.get(0).getRenderedNodeInterfaces(),
-                this.deviceRenderer));
-        rollbackProcessor.addTask(
-                new DeviceRenderingRollbackTask("ZtoADeviceTask",
-                ! renderingResults.get(1).isSuccess(),
-                renderingResults.get(1).getRenderedNodeInterfaces(),
-                this.deviceRenderer));
+            new NetworkDeviceRenderingRollbackTask(
+                "RollbackTransactionHistoryTask",
+                transactionHistory,
+                ! (renderingResults.get(0).isSuccess() && renderingResults.get(1).isSuccess()),
+                deviceRenderer,
+                new RollbackResultMessage()
+            )
+        );
+
         return renderingResults;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "UPM_UNCALLED_PRIVATE_METHOD",
         justification = "call in call() method")
     private List<OtnDeviceRenderingResult> otnDeviceRendering(
@@ -471,37 +467,43 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         return otnRenderingResults;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
             value = "UPM_UNCALLED_PRIVATE_METHOD",
             justification = "call in call() method")
     private void olmPowerSetup(
             RollbackProcessor rollbackProcessor,
             ServicePowerSetupInput powerSetupInputAtoZ,
-            ServicePowerSetupInput powerSetupInputZtoA) {
+            ServicePowerSetupInput powerSetupInputZtoA, boolean isTempService) {
 
         //TODO olmPowerSetupFutureAtoZ & olmPowerSetupFutureZtoA & olmFutures used only once
         //     Do notifications & LOG.info deserve this ?
         //TODO use constants for LOG.info & notifications common messages
+        // if the service create is a temp-service, OLM will be skipped
+        if (isTempService) {
+            LOG.info("For temp-service create OLM is not computed and skipped");
+            return;
+        }
         LOG.info("Olm power setup A-Z");
         sendNotifications(
-            ServicePathNotificationTypes.ServiceImplementationRequest,
-            powerSetupInputAtoZ.getServiceName(),
-            RpcStatusEx.Pending,
-            "Olm power setup A-Z");
+                ServicePathNotificationTypes.ServiceImplementationRequest,
+                powerSetupInputAtoZ.getServiceName(),
+                RpcStatusEx.Pending,
+                "Olm power setup A-Z");
         ListenableFuture<OLMRenderingResult> olmPowerSetupFutureAtoZ =
-            this.executor.submit(new OlmPowerSetupTask(this.olmService, powerSetupInputAtoZ));
+                this.executor.submit(
+                    new OlmPowerSetupTask(rpcService.getRpc(ServicePowerSetup.class), powerSetupInputAtoZ));
 
         LOG.info("OLM power setup Z-A");
         sendNotifications(
-            ServicePathNotificationTypes.ServiceImplementationRequest,
-            powerSetupInputAtoZ.getServiceName(),
-            RpcStatusEx.Pending,
-            "Olm power setup Z-A");
+                ServicePathNotificationTypes.ServiceImplementationRequest,
+                powerSetupInputAtoZ.getServiceName(),
+                RpcStatusEx.Pending,
+                "Olm power setup Z-A");
         ListenableFuture<OLMRenderingResult> olmPowerSetupFutureZtoA =
-            this.executor.submit(new OlmPowerSetupTask(this.olmService, powerSetupInputZtoA));
-
+                this.executor.submit(
+                    new OlmPowerSetupTask(rpcService.getRpc(ServicePowerSetup.class), powerSetupInputZtoA));
         ListenableFuture<List<OLMRenderingResult>> olmFutures =
-            Futures.allAsList(olmPowerSetupFutureAtoZ, olmPowerSetupFutureZtoA);
+                Futures.allAsList(olmPowerSetupFutureAtoZ, olmPowerSetupFutureZtoA);
 
         List<OLMRenderingResult> olmResults;
         try {
@@ -510,36 +512,35 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn(OLM_ROLL_BACK_MSG, e);
             sendNotifications(
-                ServicePathNotificationTypes.ServiceImplementationRequest,
-                powerSetupInputAtoZ.getServiceName(),
-                RpcStatusEx.Pending,
-                OLM_ROLL_BACK_MSG);
+                    ServicePathNotificationTypes.ServiceImplementationRequest,
+                    powerSetupInputAtoZ.getServiceName(),
+                    RpcStatusEx.Pending,
+                    OLM_ROLL_BACK_MSG);
             rollbackProcessor.addTask(
-                new OlmPowerSetupRollbackTask("AtoZOLMTask", true, this.olmService, powerSetupInputAtoZ));
+                    new OlmPowerSetupRollbackTask("AtoZOLMTask", true, rpcService.getRpc(ServicePowerTurndown.class),
+                        powerSetupInputAtoZ));
             rollbackProcessor.addTask(
-                new OlmPowerSetupRollbackTask("ZtoAOLMTask", true, this.olmService, powerSetupInputZtoA));
+                    new OlmPowerSetupRollbackTask("ZtoAOLMTask", true, rpcService.getRpc(ServicePowerTurndown.class),
+                        powerSetupInputZtoA));
             return;
         }
-
-        rollbackProcessor.addTask(
-            new OlmPowerSetupRollbackTask(
-                "AtoZOLMTask",
-                ! olmResults.get(0).isSuccess(),
-                this.olmService,
+        rollbackProcessor.addTask(new OlmPowerSetupRollbackTask(
+                "AtoZOLMTask", !olmResults.get(0).isSuccess(), rpcService.getRpc(ServicePowerTurndown.class),
                 powerSetupInputAtoZ));
-        rollbackProcessor.addTask(
-            new OlmPowerSetupRollbackTask(
-                "ZtoAOLMTask",
-                ! olmResults.get(1).isSuccess(),
-                this.olmService,
+        rollbackProcessor.addTask(new OlmPowerSetupRollbackTask(
+                "ZtoAOLMTask", !olmResults.get(1).isSuccess(), rpcService.getRpc(ServicePowerTurndown.class),
                 powerSetupInputZtoA));
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
             value = "UPM_UNCALLED_PRIVATE_METHOD",
             justification = "call in call() method")
     private boolean isServiceActivated(String nodeId, String tpId) {
         LOG.info("Starting service activation test on node {} and tp {}", nodeId, tpId);
+        if (!NodeTypes.Xpdr.equals(portMapping.getNode(nodeId).getNodeInfo().getNodeType())) {
+            LOG.info("Device {} is not xponder, can't verify PreFEC", nodeId);
+            return true;
+        }
         for (int i = 0; i < 3; i++) {
             List<Measurements> measurements = getMeasurements(nodeId, tpId);
             if (measurements == null) {
@@ -561,9 +562,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
 
     private List<Measurements> getMeasurements(String nodeId, String tp) {
         try {
-            GetPmOutput getPmOutput =
-                this.olmService
-                    .getPm(
+            GetPmOutput getPmOutput = rpcService.getRpc(GetPm.class).invoke(
                         new GetPmInputBuilder()
                             .setNodeId(nodeId)
                             .setGranularity(PmGranularity._15min)
@@ -618,10 +617,11 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         return result <= threshold;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "UPM_UNCALLED_PRIVATE_METHOD",
         justification = "call in call() method")
-    private boolean manageServicePathCreation(ServiceImplementationRequestInput input, String serviceType) {
+    private boolean manageServicePathCreation(ServiceImplementationRequestInput input, String serviceType,
+                                              boolean isTempService) {
         ServicePathInputData servicePathInputDataAtoZ =
             ModelMappingUtils
                 .rendererCreateServiceInputAToZ(input.getServiceName(), input.getPathDescription(), Action.Create);
@@ -645,7 +645,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             //olmPowerSetupInputAtoZ,
             ModelMappingUtils.createServicePowerSetupInput(renderingResults.get(0).getOlmList(), input),
             //olmPowerSetupInputZtoA
-            ModelMappingUtils.createServicePowerSetupInput(renderingResults.get(1).getOlmList(), input));
+            ModelMappingUtils.createServicePowerSetupInput(renderingResults.get(1).getOlmList(), input), isTempService);
         if (rollbackProcessor.rollbackAllIfNecessary() > 0) {
             sendNotifications(
                 ServicePathNotificationTypes.ServiceImplementationRequest,
@@ -697,7 +697,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         return true;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "UPM_UNCALLED_PRIVATE_METHOD",
         justification = "call in call() method")
     private boolean manageServicePathDeletion(String serviceName, PathDescription pathDescription, String serviceType)
@@ -706,48 +706,32 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             ModelMappingUtils.rendererCreateServiceInputAToZ(serviceName, pathDescription, Action.Delete);
         ServicePathInputData servicePathInputDataZtoA =
             ModelMappingUtils.rendererCreateServiceInputZToA(serviceName, pathDescription, Action.Delete);
+
+        ListenableFuture<OLMRenderingResult> olmPowerTurnDownFutureAtoZ = this.executor.submit(
+                new OlmPowerTurnDownTask(serviceName, ATOZPATH, servicePathInputDataAtoZ, notification, rpcService));
+
+        ListenableFuture<OLMRenderingResult> olmPowerTurnDownFutureZtoA = this.executor.submit(
+                new OlmPowerTurnDownTask(serviceName, ZTOAPATH, servicePathInputDataZtoA, notification, rpcService));
+
+        ListenableFuture<List<OLMRenderingResult>> olmPowerTurnDownFutures =
+            Futures.allAsList(olmPowerTurnDownFutureAtoZ, olmPowerTurnDownFutureZtoA);
+
+        List<OLMRenderingResult> olmRenderingResults;
         // OLM turn down power
         try {
-            LOG.debug(TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG);
-            sendNotifications(
-                ServicePathNotificationTypes.ServiceDelete,
-                serviceName,
-                RpcStatusEx.Pending,
-                TURNING_DOWN_POWER_ON_A_TO_Z_PATH_MSG);
-            // TODO add some flag rather than string
-            if (FAILED.equals(
-                    olmPowerTurndown(servicePathInputDataAtoZ)
-                        .getResult())) {
-                LOG.error("Service power turndown failed on A-to-Z path for service {}!", serviceName);
-                sendNotifications(
-                    ServicePathNotificationTypes.ServiceDelete,
-                    serviceName,
-                    RpcStatusEx.Failed,
-                    "Service power turndown failed on A-to-Z path for service");
-                return false;
-            }
-            LOG.debug("Turning down power on Z-to-A path");
-            sendNotifications(
-                ServicePathNotificationTypes.ServiceDelete,
-                serviceName,
-                RpcStatusEx.Pending,
-                "Turning down power on Z-to-A path");
-            // TODO add some flag rather than string
-            if (FAILED.equals(
-                    olmPowerTurndown(servicePathInputDataZtoA)
-                        .getResult())) {
-                LOG.error("Service power turndown failed on Z-to-A path for service {}!", serviceName);
-                sendNotifications(
-                    ServicePathNotificationTypes.ServiceDelete,
-                    serviceName,
-                    RpcStatusEx.Failed,
-                    "Service power turndown failed on Z-to-A path for service");
-                return false;
-            }
+            LOG.info("Waiting for A-Z and Z-A OLM power turn down ...");
+            olmRenderingResults = olmPowerTurnDownFutures.get(
+                Timeouts.OLM_TIMEOUT, TimeUnit.MILLISECONDS
+            );
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.error("Error while turning down power!", e);
             return false;
         }
+        if (!olmRenderingResults.get(0).isSuccess() || !olmRenderingResults.get(1).isSuccess()) {
+            LOG.error("Error while turning down power!");
+            return false;
+        }
+        LOG.info("OLM power successfully turned down!");
         // delete service path with renderer
         LOG.info("Deleting service path via renderer");
         sendNotifications(
@@ -774,7 +758,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         return true;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "UPM_UNCALLED_PRIVATE_METHOD",
         justification = "call in call() method")
     private boolean manageOtnServicePathCreation(
@@ -830,7 +814,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         return true;
     }
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "UPM_UNCALLED_PRIVATE_METHOD",
         justification = "call in call() method")
     private boolean manageOtnServicePathDeletion(
@@ -895,9 +879,13 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             String serviceName,
             RpcStatusEx rpcStatusEx,
             String message) {
-        send(
-            buildNotification(servicePathNotificationTypes, serviceName, rpcStatusEx, message,
-                null, null, null, null));
+
+        notification.send(
+            servicePathNotificationTypes,
+            serviceName,
+            rpcStatusEx,
+            message
+        );
     }
 
     /**
@@ -917,60 +905,19 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
             Link notifLink,
             Set<String> supportedLinks,
             String serviceType) {
-        send(
-            buildNotification(servicePathNotificationTypes, serviceName, rpcStatusEx, message,
-                pathDescription, notifLink, supportedLinks, serviceType));
-    }
-
-    /**
-     * Build notification containing path description information.
-     * @param servicePathNotificationTypes ServicePathNotificationTypes
-     * @param serviceName String
-     * @param rpcStatusEx RpcStatusEx
-     * @param message String
-     * @param pathDescription PathDescription
-     * @return notification with RendererRpcResultSp type.
-     */
-    private RendererRpcResultSp buildNotification(
-            ServicePathNotificationTypes servicePathNotificationTypes,
-            String serviceName,
-            RpcStatusEx rpcStatusEx,
-            String message,
-            PathDescription pathDescription,
-            Link notifLink,
-            Set<String> supportedLinks,
-            String serviceType) {
-        RendererRpcResultSpBuilder builder =
-            new RendererRpcResultSpBuilder()
-                .setNotificationType(servicePathNotificationTypes).setServiceName(serviceName).setStatus(rpcStatusEx)
-                .setStatusMessage(message)
-                .setServiceType(serviceType);
-        if (pathDescription != null) {
-            builder
-                .setAToZDirection(pathDescription.getAToZDirection())
-                .setZToADirection(pathDescription.getZToADirection());
-        }
-        if (notifLink != null) {
-            builder.setLink(notifLink);
-        }
-        if (supportedLinks != null) {
-            builder.setLinkId(supportedLinks);
-        }
-        return builder.build();
-    }
 
-    /**
-     * Send renderer notification.
-     * @param notification Notification
-     */
-    private void send(Notification<?> notification) {
-        try {
-            LOG.info("Sending notification {}", notification);
-            notificationPublishService.putNotification(notification);
-        } catch (InterruptedException e) {
-            LOG.info("notification offer rejected: ", e);
-            Thread.currentThread().interrupt();
-        }
+        notification.send(
+            notification.buildNotification(
+                servicePathNotificationTypes,
+                serviceName,
+                rpcStatusEx,
+                message,
+                pathDescription,
+                notifLink,
+                supportedLinks,
+                serviceType
+            )
+        );
     }
 
     private Link createLinkForNotif(List<LinkTp> otnLinkTerminationPoints) {
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/notification/Notification.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/notification/Notification.java
new file mode 100644 (file)
index 0000000..422e351
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.notification;
+
+import java.util.Set;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
+
+public interface Notification {
+
+    /**
+     * Send renderer notification.
+     */
+    void send(ServicePathNotificationTypes servicePathNotificationTypes,
+              String serviceName,
+              RpcStatusEx rpcStatusEx,
+              String message);
+
+    /**
+     * Send renderer notification.
+     */
+    void send(org.opendaylight.yangtools.yang.binding.Notification notification);
+
+    /**
+     * Build notification containing path description information.
+     *
+     * @param servicePathNotificationTypes ServicePathNotificationTypes
+     * @param serviceName String
+     * @param rpcStatusEx RpcStatusEx
+     * @param message String
+     * @param pathDescription PathDescription
+     * @return notification with RendererRpcResultSp type.
+     */
+    RendererRpcResultSp buildNotification(
+            ServicePathNotificationTypes servicePathNotificationTypes,
+            String serviceName,
+            RpcStatusEx rpcStatusEx,
+            String message,
+            PathDescription pathDescription,
+            Link notifLink,
+            Set<String> supportedLinks,
+            String serviceType);
+
+}
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/notification/NotificationSender.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/notification/NotificationSender.java
new file mode 100644 (file)
index 0000000..2856df7
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.notification;
+
+import java.util.Set;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSpBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
+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 NotificationSender implements Notification {
+
+    private final NotificationPublishService notificationPublishService;
+
+    private static final Logger LOG = LoggerFactory.getLogger(NotificationSender.class);
+
+    @Activate
+    public NotificationSender(@Reference NotificationPublishService notificationPublishService) {
+        this.notificationPublishService = notificationPublishService;
+    }
+
+    /**
+     * Send renderer notification.
+     */
+    public void send(ServicePathNotificationTypes servicePathNotificationTypes,
+                     String serviceName,
+                     RpcStatusEx rpcStatusEx,
+                     String message) {
+
+        send(
+            buildNotification(
+                servicePathNotificationTypes,
+                serviceName,
+                rpcStatusEx,
+                message,
+                null,
+                null,
+                null,
+                null
+            )
+        );
+    }
+
+    /**
+     * Send renderer notification.
+     * @param notification Notification
+     */
+    public void send(org.opendaylight.yangtools.yang.binding.Notification notification) {
+        try {
+            LOG.info("Sending notification {}", notification);
+            notificationPublishService.putNotification(notification);
+        } catch (InterruptedException e) {
+            LOG.info("notification offer rejected: ", e);
+            Thread.currentThread().interrupt();
+        }
+    }
+
+    /**
+     * Build notification containing path description information.
+     * @param servicePathNotificationTypes ServicePathNotificationTypes
+     * @param serviceName String
+     * @param rpcStatusEx RpcStatusEx
+     * @param message String
+     * @param pathDescription PathDescription
+     * @return notification with RendererRpcResultSp type.
+     */
+    @Override
+    public RendererRpcResultSp buildNotification(ServicePathNotificationTypes servicePathNotificationTypes,
+                                                 String serviceName,
+                                                 RpcStatusEx rpcStatusEx,
+                                                 String message,
+                                                 PathDescription pathDescription,
+                                                 Link notifLink,
+                                                 Set<String> supportedLinks,
+                                                 String serviceType) {
+
+        RendererRpcResultSpBuilder builder =
+            new RendererRpcResultSpBuilder()
+                .setNotificationType(servicePathNotificationTypes).setServiceName(serviceName).setStatus(rpcStatusEx)
+                .setStatusMessage(message)
+                .setServiceType(serviceType);
+        if (pathDescription != null) {
+            builder
+                .setAToZDirection(pathDescription.getAToZDirection())
+                .setZToADirection(pathDescription.getZToADirection());
+        }
+        if (notifLink != null) {
+            builder.setLink(notifLink);
+        }
+        if (supportedLinks != null) {
+            builder.setLinkId(supportedLinks);
+        }
+        return builder.build();
+    }
+}
index b29e13737e6fd5e05d0718d250e1309539dcf635..0c443d9f53b32a522e94d5caa5aed3ecc7cd5912 100644 (file)
@@ -11,21 +11,21 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.Topology;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.TopologyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.Topology;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.TopologyBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.get.connection.port.trail.output.Ports;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.DeviceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.ResourceTypeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.resource.resource.port.PortBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev210924.ResourceTypeEnum;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.Hop.HopType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.topology.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.topology.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.topology.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.topology.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.topology.ZToABuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev211210.topology.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev230526.resource.DeviceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev230526.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev230526.resource.ResourceTypeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev230526.resource.resource.resource.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev220325.ResourceTypeEnum;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.Hop.HopType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.topology.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.topology.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.topology.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.topology.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.topology.ZToABuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.topology.ZToAKey;
 
 public class ServiceListTopology {
 
@@ -36,58 +36,30 @@ public class ServiceListTopology {
 
     public void updateAtoZTopologyList(List<Ports> ports, String nodeId) {
 
-        String circuitPackName = "";
-        String portName = "";
-
         int id = this.a2zTopologyList.size();
-
-        DeviceBuilder deviceBldr = new DeviceBuilder();
-        deviceBldr.setNodeId(new NodeIdType(nodeId));
-
-
         for (Ports port : ports) {
-
             id = id + 1;
-
-            //Get circuitpack name
-            circuitPackName = port.getCircuitPackName();
-
-            //Get port name
-            portName = port.getPortName();
-
-            AToZBuilder a2zBldr = new AToZBuilder();
-
-            //Set Resource Id
-            a2zBldr.setId(Integer.toString(id));
-
-            //Set device Node-id
-            a2zBldr.setDevice(deviceBldr.build());
-
-            //Set hop type to internal
-            a2zBldr.setHopType(HopType.NodeInternal);
-
-            //Set Resource Type to port
-            ResourceTypeBuilder rsrcTypeBldr = new ResourceTypeBuilder();
-            rsrcTypeBldr.setType(ResourceTypeEnum.Port);
-            a2zBldr.setResourceType(rsrcTypeBldr.build());
-
-            //building port resource
-            PortBuilder portBldr = new PortBuilder();
-            portBldr.setCircuitPackName(circuitPackName);
-            portBldr.setPortName(portName);
-            org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.resource.resource
-                .PortBuilder portCase =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.resource.resource
-                    .PortBuilder();
-            portCase.setPort(portBldr.build());
-            ResourceBuilder rsrcBldr = new ResourceBuilder();
-            rsrcBldr.setResource(portCase.build());
-            a2zBldr.setResource(rsrcBldr.build());
-
             //Add port resource to the list
-            AToZ a2z = a2zBldr.build();
-            this.a2zTopologyList.put(a2z.key(),a2z);
-
+            AToZ a2z = new AToZBuilder()
+                .setId(Integer.toString(id))
+                .setDevice(new DeviceBuilder()
+                    .setNodeId(new NodeIdType(nodeId))
+                    .build())
+                .setHopType(HopType.NodeInternal)
+                .setResourceType(new ResourceTypeBuilder()
+                    .setType(ResourceTypeEnum.Port)
+                    .build())
+                .setResource(new ResourceBuilder()
+                    .setResource(new org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev230526
+                            .resource.resource.resource.PortBuilder()
+                        .setPort(new PortBuilder()
+                            .setCircuitPackName(port.getCircuitPackName())
+                            .setPortName(port.getPortName())
+                            .build())
+                        .build())
+                    .build())
+                .build();
+            this.a2zTopologyList.put(a2z.key(), a2z);
         }
 
         //update Topology
@@ -97,57 +69,31 @@ public class ServiceListTopology {
 
     public void updateZtoATopologyList(List<Ports> ports, String nodeId) {
 
-        String circuitPackName = "";
-        String portName = "";
-
         int id = this.z2aTopologyList.size();
 
-        DeviceBuilder deviceBldr = new DeviceBuilder();
-        deviceBldr.setNodeId(new NodeIdType(nodeId));
-
         for (Ports port : ports) {
-
             id = id + 1;
-
-            //Get circuitpack name
-            circuitPackName = port.getCircuitPackName();
-
-            //Get port name
-            portName = port.getPortName();
-
-            ZToABuilder z2aBldr = new ZToABuilder();
-
-            //Set Resource Id
-            z2aBldr.setId(Integer.toString(id));
-
-            //Set device Node-id
-            z2aBldr.setDevice(deviceBldr.build());
-
-            //Set hop type to internal
-            z2aBldr.setHopType(HopType.NodeInternal);
-
-            //Set Resource Type to port
-            ResourceTypeBuilder rsrcTypeBldr = new ResourceTypeBuilder();
-            rsrcTypeBldr.setType(ResourceTypeEnum.Port);
-            z2aBldr.setResourceType(rsrcTypeBldr.build());
-
-            //building port resource
-            PortBuilder portBldr = new PortBuilder();
-            portBldr.setCircuitPackName(circuitPackName);
-            portBldr.setPortName(portName);
-            org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.resource.resource
-                .PortBuilder portCase =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev211210.resource.resource.resource
-                    .PortBuilder();
-            portCase.setPort(portBldr.build());
-            ResourceBuilder rsrcBldr = new ResourceBuilder();
-            rsrcBldr.setResource(portCase.build());
-            z2aBldr.setResource(rsrcBldr.build());
-
             //Add port resource to the list
-            ZToA z2a = z2aBldr.build();
+            ZToA z2a = new ZToABuilder()
+                .setId(Integer.toString(id))
+                .setDevice(new DeviceBuilder()
+                    .setNodeId(new NodeIdType(nodeId))
+                    .build())
+                .setHopType(HopType.NodeInternal)
+                .setResourceType(new ResourceTypeBuilder()
+                    .setType(ResourceTypeEnum.Port)
+                    .build())
+                .setResource(new ResourceBuilder()
+                    .setResource(new org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev230526
+                            .resource.resource.resource.PortBuilder()
+                        .setPort(new PortBuilder()
+                            .setCircuitPackName(port.getCircuitPackName())
+                            .setPortName(port.getPortName())
+                            .build())
+                        .build())
+                    .build())
+                .build();
             this.z2aTopologyList.put(z2a.key(),z2a);
-
         }
 
         //update Topology
index 6a30f950d7f00efc5d24eb19c638e32a57b364b5..4b2d7fbed1364662aacf5d3b0a11d54ef4f3adf7 100644 (file)
@@ -14,6 +14,7 @@ import org.opendaylight.transportpce.renderer.ServicePathInputData;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRenderingResult;
 import org.opendaylight.transportpce.renderer.provisiondevice.servicepath.ServicePathDirection;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.History;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.optical.renderer.nodes.Nodes;
 import org.slf4j.Logger;
@@ -26,12 +27,14 @@ public class DeviceRenderingTask implements Callable<DeviceRenderingResult> {
     private final DeviceRendererService deviceRenderer;
     private final ServicePathInputData servicePathInputData;
     private final ServicePathDirection direction;
+    private final History transactionHistory;
 
     public DeviceRenderingTask(DeviceRendererService deviceRenderer, ServicePathInputData servicePathInputData,
-            ServicePathDirection direction) {
+            ServicePathDirection direction, History transactionHistory) {
         this.deviceRenderer = deviceRenderer;
         this.servicePathInputData = servicePathInputData;
         this.direction = direction;
+        this.transactionHistory = transactionHistory;
     }
 
     @Override
@@ -43,7 +46,7 @@ public class DeviceRenderingTask implements Callable<DeviceRenderingResult> {
             case Create:
                 operation = "setup";
                 output = this.deviceRenderer.setupServicePath(this.servicePathInputData.getServicePathInput(),
-                    this.direction);
+                    this.direction, transactionHistory);
                 olmList = this.servicePathInputData.getNodeLists().getOlmNodeList();
                 break;
             case Delete:
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/NetworkDeviceRenderingRollbackTask.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/NetworkDeviceRenderingRollbackTask.java
new file mode 100644 (file)
index 0000000..4c1faa1
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
+
+import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.History;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class NetworkDeviceRenderingRollbackTask extends RollbackTask {
+
+    private final History transactionHistory;
+
+    private final boolean isRollbackNecessary;
+
+    private final DeviceRendererService deviceRendererService;
+
+    private final ResultMessage message;
+
+    private static final Logger LOG = LoggerFactory.getLogger(NetworkDeviceRenderingRollbackTask.class);
+
+    public NetworkDeviceRenderingRollbackTask(String id, History transactionHistory,
+                                              boolean isRollbackNecessary,
+                                              DeviceRendererService deviceRendererService, ResultMessage message) {
+        super(id);
+        this.transactionHistory = transactionHistory;
+        this.isRollbackNecessary = isRollbackNecessary;
+        this.deviceRendererService = deviceRendererService;
+        this.message = message;
+    }
+
+    @Override
+    public boolean isRollbackNecessary() {
+        return isRollbackNecessary;
+    }
+
+    @Override
+    public Void call() throws Exception {
+
+        RendererRollbackOutput rollbackOutput = deviceRendererService.rendererRollback(transactionHistory);
+
+        if (! rollbackOutput.getSuccess()) {
+            LOG.warn("Device rendering rollback of {} was not successful! Failed rollback on {}.", this.getId(),
+                    message.createErrorMessage(rollbackOutput.nonnullFailedToRollback().values()));
+        } else {
+            LOG.info("Device rollback of {} successful.", this.getId());
+        }
+
+        return null;
+    }
+}
index f0cc4b6137a776210605123a77e633ea74d60aec..2555fb0319a0be23f9a1b6966c4ddc8e3186bc52 100644 (file)
@@ -9,27 +9,27 @@ package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
 
 import java.util.concurrent.Future;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndown;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class OlmPowerSetupRollbackTask extends RollbackTask {
-
     private static final Logger LOG = LoggerFactory.getLogger(OlmPowerSetupRollbackTask.class);
+
     private static final String FAILED = "Failed";
     private final boolean isRollbackNecessary;
-    private final TransportpceOlmService olmService;
+    private final ServicePowerTurndown servicePowerTurndown;
     private final ServicePowerSetupInput powerSetupInput;
 
-    public OlmPowerSetupRollbackTask(String id, boolean isRollbackNecessary, TransportpceOlmService olmService,
-                                     ServicePowerSetupInput powerSetupInput) {
+    public OlmPowerSetupRollbackTask(String id, boolean isRollbackNecessary, ServicePowerTurndown servicePowerTurndown,
+            ServicePowerSetupInput powerSetupInput) {
         super(id);
         this.isRollbackNecessary = isRollbackNecessary;
-        this.olmService = olmService;
+        this.servicePowerTurndown = servicePowerTurndown;
         this.powerSetupInput = powerSetupInput;
     }
 
@@ -44,10 +44,12 @@ public class OlmPowerSetupRollbackTask extends RollbackTask {
                 .setNodes(this.powerSetupInput.getNodes())
                 .setServiceName(this.powerSetupInput.getServiceName())
                 .setWaveNumber(this.powerSetupInput.getWaveNumber())
+                .setLowerSpectralSlotNumber(this.powerSetupInput.getLowerSpectralSlotNumber())
+                .setHigherSpectralSlotNumber(this.powerSetupInput.getHigherSpectralSlotNumber())
                 .build();
 
         Future<RpcResult<ServicePowerTurndownOutput>> powerTurndownResultFuture =
-                this.olmService.servicePowerTurndown(powerTurndownInput);
+                servicePowerTurndown.invoke(powerTurndownInput);
         RpcResult<ServicePowerTurndownOutput> powerTurndownResult = powerTurndownResultFuture.get();
         if (FAILED.equals(powerTurndownResult.getResult().getResult())) {
             LOG.warn("Olmp power setup rollback for {} was not successful!", this.getId());
index 37e17cbfc177b55be11a65d4832019d38143f363..1f1badc54b7785c96d2f926989bf7cb3520b50b5 100644 (file)
@@ -7,13 +7,15 @@
  */
 package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
 
+import static java.util.Objects.requireNonNull;
+
 import java.util.concurrent.Callable;
 import java.util.concurrent.Future;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.renderer.provisiondevice.OLMRenderingResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetup;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,17 +24,17 @@ public class OlmPowerSetupTask implements Callable<OLMRenderingResult> {
 
     private static final Logger LOG = LoggerFactory.getLogger(OlmPowerSetupTask.class);
 
-    private final TransportpceOlmService olmService;
+    private final ServicePowerSetup servicePowerSetup;
     private final ServicePowerSetupInput input;
 
-    public OlmPowerSetupTask(TransportpceOlmService olmService, ServicePowerSetupInput input) {
-        this.olmService = olmService;
+    public OlmPowerSetupTask(ServicePowerSetup servicePowerSetup, ServicePowerSetupInput input) {
+        this.servicePowerSetup = requireNonNull(servicePowerSetup);
         this.input = input;
     }
 
     @Override
     public OLMRenderingResult call() throws Exception {
-        Future<RpcResult<ServicePowerSetupOutput>> fr = this.olmService.servicePowerSetup(this.input);
+        Future<RpcResult<ServicePowerSetupOutput>> fr = servicePowerSetup.invoke(this.input);
         RpcResult<ServicePowerSetupOutput> result = fr.get();
         if (result == null) {
             LOG.warn("Result is NULL");
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/OlmPowerTurnDownTask.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/OlmPowerTurnDownTask.java
new file mode 100644 (file)
index 0000000..f940b1e
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import org.opendaylight.mdsal.binding.api.RpcService;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.renderer.ServicePathInputData;
+import org.opendaylight.transportpce.renderer.provisiondevice.OLMRenderingResult;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.Notification;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndown;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OlmPowerTurnDownTask implements Callable<OLMRenderingResult> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(OlmPowerTurnDownTask.class);
+    private final String serviceName;
+    private final String path;
+    private final ServicePathInputData servicePathInputData;
+    private final Notification notification;
+    private final RpcService rpcService;
+
+    /**
+     * Task used to power down OLM.
+     *
+     * <p>
+     * Intended to be used for parallel execution.
+     */
+    public OlmPowerTurnDownTask(String serviceName, String path, ServicePathInputData servicePathInputData,
+            Notification notification, RpcService rpcService) {
+
+        this.serviceName = serviceName;
+        this.path = path;
+        this.servicePathInputData = servicePathInputData;
+        this.notification = notification;
+        this.rpcService = rpcService;
+    }
+
+    @Override
+    public OLMRenderingResult call() throws Exception {
+
+        LOG.debug("Turning down power on {} path for service {}", path, serviceName);
+
+        Future<RpcResult<ServicePowerTurndownOutput>> fr = rpcService.getRpc(ServicePowerTurndown.class).invoke(
+            new ServicePowerTurndownInputBuilder(
+                servicePathInputData.getServicePathInput()
+            ).build());
+
+        notification.send(
+            ServicePathNotificationTypes.ServiceDelete,
+            serviceName,
+            RpcStatusEx.Pending,
+            String.format("Turning down power on %s path for service %s", path, serviceName)
+        );
+
+        RpcResult<ServicePowerTurndownOutput> result = fr.get();
+
+        if (result == null || !ResponseCodes.SUCCESS_RESULT.equals(result.getResult().getResult())) {
+            notification.send(
+                ServicePathNotificationTypes.ServiceDelete,
+                serviceName,
+                RpcStatusEx.Failed,
+                String.format("Service power turn down failed on %s path for service %s", path, serviceName)
+            );
+            return OLMRenderingResult.failed(
+                String.format("Service power turn down failed on %s path for service %s", path, serviceName)
+            );
+        } else {
+            LOG.debug("OLM power turn down finished successfully on {} for service {}", path, serviceName);
+            return OLMRenderingResult.ok();
+        }
+    }
+}
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/ResultMessage.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/ResultMessage.java
new file mode 100644 (file)
index 0000000..d1540ca
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
+
+import java.util.Collection;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollback;
+
+public interface ResultMessage {
+
+    /**
+     * Build an error message for a failed rollback.
+     */
+    String createErrorMessage(Collection<FailedToRollback> failedRollbacks);
+
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/RollbackResultMessage.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/tasks/RollbackResultMessage.java
new file mode 100644 (file)
index 0000000..7fae4c9
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.tasks;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollback;
+
+public class RollbackResultMessage implements ResultMessage {
+
+    @Override
+    public String createErrorMessage(Collection<FailedToRollback> failedRollbacks) {
+        List<String> failedRollbackNodes = new ArrayList<>();
+
+        failedRollbacks.forEach(failedRollback -> {
+            var intf = failedRollback.getInterface();
+
+            failedRollbackNodes.add(
+                failedRollback.getNodeId()
+                    + ": "
+                    + intf == null ? "" : String.join(", ", intf)
+            );
+        });
+
+        return String.join(System.lineSeparator(), failedRollbackNodes);
+    }
+
+}
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/Connection.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/Connection.java
new file mode 100644 (file)
index 0000000..ad04ae7
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction;
+
+import java.util.List;
+import java.util.Objects;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Connection transaction.
+ *
+ * <p>
+ * i.e. a class tracking a connection.
+ */
+public class Connection implements Transaction {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Connection.class);
+    private final String deviceId;
+    private final String connectionNumber;
+    private final boolean isOtn;
+
+    public Connection(String deviceId, String connectionNumber, boolean isOtn) {
+        this.deviceId = deviceId;
+        this.connectionNumber = connectionNumber;
+        this.isOtn = isOtn;
+    }
+
+    @Override
+    public boolean rollback(Delete delete) {
+        List<String> supportingInterfaces = delete.deleteCrossConnect(deviceId, connectionNumber, isOtn);
+
+        if (supportingInterfaces == null || supportingInterfaces.size() == 0) {
+            return false;
+        }
+
+        LOG.info("Supporting interfaces {} affected by rollback on {} {}",
+                String.join(", ", supportingInterfaces), deviceId, connectionNumber);
+
+        return true;
+
+    }
+
+    @Override
+    public String description() {
+        return String.format("Connection %s connection number %s isOtn %s", deviceId,
+                connectionNumber, isOtn);
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (this == object) {
+            return true;
+        }
+        if (!(object instanceof Connection)) {
+            return false;
+        }
+        Connection that = (Connection) object;
+        return isOtn == that.isOtn && Objects.equals(deviceId, that.deviceId)
+                && Objects.equals(connectionNumber, that.connectionNumber);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(deviceId, connectionNumber, isOtn);
+    }
+}
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/DeviceInterface.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/DeviceInterface.java
new file mode 100644 (file)
index 0000000..8bcc2c1
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction;
+
+import java.util.Objects;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+
+public class DeviceInterface implements Transaction {
+
+    private final String nodeId;
+
+    private final String interfaceId;
+
+    public DeviceInterface(String nodeId, String interfaceId) {
+        this.nodeId = nodeId;
+        this.interfaceId = interfaceId;
+    }
+
+    @Override
+    public boolean rollback(Delete delete) {
+        return delete.deleteInterface(nodeId, interfaceId);
+    }
+
+    @Override
+    public String description() {
+        return String.format("Node: %s interface id: %s", nodeId, interfaceId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(nodeId, interfaceId);
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (this == object) {
+            return true;
+        }
+        if (!(object instanceof DeviceInterface)) {
+            return false;
+        }
+        DeviceInterface that = (DeviceInterface) object;
+        return Objects.equals(nodeId, that.nodeId) && Objects.equals(interfaceId,
+                that.interfaceId);
+    }
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/Transaction.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/Transaction.java
new file mode 100644 (file)
index 0000000..d1300e3
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction;
+
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+
+/**
+ * Any class wishing to keep track of transactions
+ * may implement this interface.
+ */
+public interface Transaction {
+
+    /**
+     * Rollback this transaction.
+     */
+    boolean rollback(Delete delete);
+
+    String description();
+
+    int hashCode();
+
+    boolean equals(Object object);
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Delete.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Delete.java
new file mode 100644 (file)
index 0000000..95fcdff
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete;
+
+import java.util.List;
+
+/**
+ * A class capable of deleting service connections/interfaces
+ * may implement this interface.
+ */
+public interface Delete {
+
+    /**
+     * Delete cross connection.
+     * Typically, deleted before interfaces.
+     */
+    List<String> deleteCrossConnect(String deviceId, String connectionNumber, boolean isOtn);
+
+    /**
+     * Delete an interface.
+     * Typically, deleted after the cross connection.
+     */
+    boolean deleteInterface(String nodeId, String interfaceId);
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/DeleteService.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/DeleteService.java
new file mode 100644 (file)
index 0000000..62af4bf
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
+import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
+import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeleteService implements Delete {
+
+    private final CrossConnect crossConnect;
+    private final OpenRoadmInterfaces openRoadmInterfaces;
+
+    private final Subscriber subscriber;
+
+    private static final Logger LOG = LoggerFactory.getLogger(DeleteService.class);
+
+    public DeleteService(
+            CrossConnect crossConnect,
+            OpenRoadmInterfaces openRoadmInterfaces,
+            Subscriber subscriber) {
+        this.crossConnect = crossConnect;
+        this.openRoadmInterfaces = openRoadmInterfaces;
+        this.subscriber = subscriber;
+    }
+
+    @Override
+    public @NonNull List<String> deleteCrossConnect(String deviceId, String connectionNumber,
+                                                    boolean isOtn) {
+        List<String> result = crossConnect.deleteCrossConnect(deviceId, connectionNumber, isOtn);
+
+        if (result == null) {
+            subscriber.result(false, deviceId, connectionNumber);
+            return new ArrayList<>();
+        }
+
+        subscriber.result(true, deviceId, connectionNumber);
+
+        return result;
+    }
+
+    @Override
+    public boolean deleteInterface(String nodeId, String interfaceId) {
+        try {
+            openRoadmInterfaces.deleteInterface(nodeId, interfaceId);
+
+            subscriber.result(true, nodeId, interfaceId);
+            return true;
+        } catch (OpenRoadmInterfaceException e) {
+            LOG.error("Failed rolling back {} {}", nodeId, interfaceId);
+            subscriber.result(false, nodeId, interfaceId);
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/DeleteSubscriber.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/DeleteSubscriber.java
new file mode 100644 (file)
index 0000000..886b459
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete;
+
+public class DeleteSubscriber implements Subscriber {
+
+    private final Result result;
+
+    public DeleteSubscriber(Result result) {
+        this.result = result;
+    }
+
+    @Override
+    public void result(Boolean success, String nodeId, String interfaceId) {
+
+        result.add(success, nodeId, interfaceId);
+
+    }
+
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/FailedRollbackResult.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/FailedRollbackResult.java
new file mode 100644 (file)
index 0000000..5637879
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollback;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollbackBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.renderer.rollback.output.FailedToRollbackKey;
+
+public class FailedRollbackResult implements Result {
+
+    private final Map<String, Set<String>> failedRollback = Collections.synchronizedMap(
+            new HashMap<>());
+
+    @Override
+    public boolean add(boolean success, String nodeId, String interfaceId) {
+
+        if (success) {
+            return false;
+        }
+
+        if (!failedRollback.containsKey(nodeId)) {
+            failedRollback.put(nodeId, new LinkedHashSet<>());
+        }
+
+        return failedRollback.get(nodeId).add(interfaceId);
+    }
+
+    @Override
+    public RendererRollbackOutput renderRollbackOutput() {
+
+        Map<FailedToRollbackKey, FailedToRollback> failedToRollbackList = new HashMap<>();
+
+        for (Entry<String, Set<String>> entry : failedRollback.entrySet()) {
+
+            FailedToRollback failedToRollack = new FailedToRollbackBuilder()
+                    .withKey(new FailedToRollbackKey(entry.getKey()))
+                    .setNodeId(entry.getKey())
+                    .setInterface(entry.getValue())
+                    .build();
+
+            failedToRollbackList.put(failedToRollack.key(), failedToRollack);
+
+        }
+
+        return new RendererRollbackOutputBuilder()
+                .setSuccess(failedRollback.isEmpty())
+                .setFailedToRollback(failedToRollbackList)
+                .build();
+
+    }
+
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Result.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Result.java
new file mode 100644 (file)
index 0000000..fb77027
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete;
+
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+
+public interface Result {
+
+    boolean add(boolean success, String nodeId, String interfaceId);
+
+    RendererRollbackOutput renderRollbackOutput();
+
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Subscriber.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/delete/Subscriber.java
new file mode 100644 (file)
index 0000000..8e83d16
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete;
+
+public interface Subscriber {
+
+    void result(Boolean success, String nodeId, String interfaceId);
+
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/History.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/History.java
new file mode 100644 (file)
index 0000000..fd2646a
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.history;
+
+import java.util.List;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.Transaction;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+
+public interface History {
+
+    /**
+     * Add transaction.
+     *
+     * <p>
+     * Only accepts the transaction if this History
+     * object doesn't already contain the object.
+     *
+     * @return true if the transaction was added.
+     */
+    boolean add(Transaction transaction);
+
+    /**
+     * A list of transactions.
+     *
+     * <p>
+     * Will only accept unique transactions.
+     * @return true if all transactions was added. false if one or more transactions was rejected.
+     */
+    boolean add(List<Transaction> transactions);
+
+    /**
+     * Add an array of interface transactions.
+     *
+     * <p>
+     * Duplicate interface ids, null or empty strings
+     * are silently ignored.
+     * @return may return false
+     */
+    boolean addInterfaces(String nodeId, String interfaceId);
+
+    /**
+     * Add an array of interface transactions.
+     *
+     * <p>
+     * Duplicate interface ids, null or empty strings
+     * are silently ignored.
+     * @return may return false
+     */
+    boolean addInterfaces(String nodeId, String[] interfaceIds);
+
+    /**
+     * Add a list of interface transactions.
+     *
+     * <p>
+     * Duplicate interface ids, null or empty strings
+     * are silently ignored.
+     */
+    boolean addInterfaces(String nodeId, List<String> interfaceIds);
+
+    /**
+     * Rollback all transactions.
+     *
+     * <p>
+     * Typically, the transactions are rolled back in reverse
+     * order, but the implementing class may choose a different
+     * logic.
+     */
+    boolean rollback(Delete delete);
+
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/NonStickHistoryMemory.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/NonStickHistoryMemory.java
new file mode 100644 (file)
index 0000000..71d8f74
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.history;
+
+import java.util.List;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.Transaction;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Goldfish implementation of the History interface.
+ *
+ * <p>
+ * This implementation simply doesn't track anything.
+ * Most useful for backwards compatibility reasons.
+ */
+public class NonStickHistoryMemory implements History {
+
+    private static final Logger LOG = LoggerFactory.getLogger(NonStickHistoryMemory.class);
+
+    @Override
+    public boolean add(Transaction transaction) {
+        LOG.warn("Transaction history disabled. Ignoring '{}'.", transaction.description());
+        return false;
+    }
+
+    @Override
+    public boolean add(List<Transaction> transactions) {
+        LOG.warn("Transaction history disabled. No rollback executed.");
+        return false;
+    }
+
+    @Override
+    public boolean addInterfaces(String nodeId, String interfaceId) {
+        LOG.warn("Transaction history disabled.");
+        return false;
+    }
+
+    @Override
+    public boolean addInterfaces(String nodeId, String[] interfaceIds) {
+        LOG.warn("Transaction history disabled.");
+        return false;
+    }
+
+    @Override
+    public boolean addInterfaces(String nodeId, List<String> interfaceIds) {
+        LOG.warn("Transaction history disabled.");
+        return false;
+    }
+
+    @Override
+    public boolean rollback(Delete delete) {
+        LOG.warn("Transaction history disabled. No rollback executed.");
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/TransactionHistory.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/TransactionHistory.java
new file mode 100644 (file)
index 0000000..a1565fc
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.history;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.DeviceInterface;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.Transaction;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A class keeping track of transaction history.
+ *
+ * <p>
+ * A transaction can be something like an interface or a roadm connection, that may need to be
+ * rolled back in the future.
+ */
+public class TransactionHistory implements History {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TransactionHistory.class);
+    Set<Transaction> transactionHistory = Collections.synchronizedSet(new LinkedHashSet<>());
+
+    @Override
+    public boolean add(Transaction transaction) {
+
+        boolean result = transactionHistory.add(transaction);
+
+        if (result) {
+            LOG.info("Adding {}", transaction.description());
+        } else {
+            LOG.warn("Transaction {} not added.", transaction.description());
+        }
+
+        return result;
+    }
+
+    @Override
+    public boolean add(List<Transaction> transactions) {
+        Set<Boolean> results = new HashSet<>(transactions.size());
+
+        for (Transaction transaction : transactions) {
+            results.add(add(transaction));
+        }
+
+        return results.stream().allMatch(i -> (i.equals(Boolean.TRUE)));
+    }
+
+    @Override
+    public boolean addInterfaces(String nodeId, String interfaceId) {
+        return addInterfaces(nodeId, Collections.singletonList(interfaceId));
+    }
+
+    @Override
+    public boolean addInterfaces(String nodeId, String[] interfaceIds) {
+
+        return addInterfaces(nodeId, Arrays.asList(interfaceIds));
+
+    }
+
+    @Override
+    public boolean addInterfaces(String nodeId, List<String> interfaceIds) {
+
+        Set<Boolean> results = new HashSet<>();
+        Set<String> unique = new LinkedHashSet<>();
+
+        for (String interfaceId : interfaceIds) {
+            if (interfaceId != null && !interfaceId.trim().isEmpty()) {
+                unique.add(interfaceId.trim());
+            }
+        }
+
+        for (String interfaceId : unique) {
+            results.add(this.add(new DeviceInterface(nodeId, interfaceId)));
+        }
+
+        return results.stream().allMatch(i -> (i.equals(Boolean.TRUE)));
+
+    }
+
+    @Override
+    public boolean rollback(Delete delete) {
+
+        LOG.info("History contains {} items. Rolling them back in reverse order.",
+                transactionHistory.size());
+
+        List<Transaction> reverse = new ArrayList<>(transactionHistory);
+
+        Collections.reverse(reverse);
+
+        boolean success = true;
+
+        for (Transaction transaction : reverse) {
+            LOG.info("Rolling back {}", transaction.description());
+            if (!transaction.rollback(delete)) {
+                success = false;
+            }
+        }
+
+        return success;
+
+    }
+}
\ No newline at end of file
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/CreateOtsOmsImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/CreateOtsOmsImpl.java
new file mode 100644 (file)
index 0000000..2ed0256
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.renderer.rpcs;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
+import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOms;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class CreateOtsOmsImpl implements CreateOtsOms {
+    private static final Logger LOG = LoggerFactory.getLogger(CreateOtsOmsImpl.class);
+    private DeviceRendererService deviceRendererService;
+
+    public CreateOtsOmsImpl(final DeviceRendererService deviceRendererService) {
+        this.deviceRendererService = requireNonNull(deviceRendererService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CreateOtsOmsOutput>> invoke(CreateOtsOmsInput input) {
+        LOG.info("Request received to create oms and ots interfaces on {}: {}",
+            input.getNodeId(), input.getLogicalConnectionPoint());
+        try {
+            return RpcResultBuilder.success(deviceRendererService.createOtsOms(input)).buildFuture();
+        } catch (OpenRoadmInterfaceException e) {
+            LOG.error("failed to send request to create oms and ots interfaces on {}: {}",
+                input.getNodeId(), input.getLogicalConnectionPoint(),e);
+        }
+        return RpcResultBuilder.<CreateOtsOmsOutput>failed()
+            .withError(ErrorType.RPC, "to create oms and ots interfaces")
+            .buildFuture();
+    }
+
+}
index 39141700b7875bd321eebeb6bae7e427bb083c4e..005a32a5aef0f6319bb6cad0e6028ade56ca01f9 100644 (file)
 
 package org.opendaylight.transportpce.renderer.rpcs;
 
-import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
-import org.opendaylight.transportpce.common.service.ServiceTypes;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.TransportpceDeviceRendererService;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component(immediate = true)
-public class DeviceRendererRPCImpl implements TransportpceDeviceRendererService {
+public class DeviceRendererRPCImpl {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeviceRendererRPCImpl.class);
-    private DeviceRendererService deviceRenderer;
-    private OtnDeviceRendererService otnDeviceRendererService;
+    private Registration reg;
 
     @Activate
-    public DeviceRendererRPCImpl(@Reference DeviceRendererService deviceRenderer,
+    public DeviceRendererRPCImpl(@Reference RpcProviderService rpcProviderService,
+            @Reference DeviceRendererService deviceRenderer,
             @Reference OtnDeviceRendererService otnDeviceRendererService) {
-        this.deviceRenderer = deviceRenderer;
-        this.otnDeviceRendererService = otnDeviceRendererService;
-        LOG.debug("DeviceRendererRPCImpl instantiated");
+        this.reg = rpcProviderService.registerRpcImplementations(
+                new ServicePathImpl(deviceRenderer),
+                new OtnServicePathImpl(otnDeviceRendererService),
+                new RendererRollbackImpl(deviceRenderer),
+                new CreateOtsOmsImpl(deviceRenderer));
+        LOG.debug("RPC of DeviceRendererRPCImpl instantiated");
     }
 
-    /**
-     * This method is the implementation of the 'service-path' RESTCONF service,
-     * which is one of the external APIs into the renderer application. The
-     * service provides two functions:
-     *
-     * <p>
-     * 1. Create This operation results in provisioning the device for a given
-     * wavelength and a list of nodes with each node listing its termination
-     * points.
-     *
-     * <p>
-     * 2. Delete This operation results in de-provisioning the device for a
-     * given wavelength and a list of nodes with each node listing its
-     * termination points.
-     *
-     * <p>
-     * The signature for this method was generated by yang tools from the
-     * renderer API model.
-     *
-     * @param input
-     *            Input parameter from the service-path yang model
-     *
-     * @return Result of the request
-     */
-    @Override
-    public ListenableFuture<RpcResult<ServicePathOutput>> servicePath(ServicePathInput input) {
-        if (input.getOperation() != null) {
-            if (input.getOperation().getIntValue() == 1) {
-                LOG.info("Create operation request received");
-                return RpcResultBuilder.success(
-                        this.deviceRenderer.setupServicePath(input, null))
-                        .buildFuture();
-            } else if (input.getOperation().getIntValue() == 2) {
-                LOG.info("Delete operation request received");
-                return RpcResultBuilder
-                        .success(this.deviceRenderer.deleteServicePath(input))
-                        .buildFuture();
-            }
-        }
-        return RpcResultBuilder
-            .success(new ServicePathOutputBuilder().setResult("Invalid operation").build())
-            .buildFuture();
+    @Deactivate
+    public void close() {
+        this.reg.close();
+        LOG.info("DeviceRendererRPCImpl Closed");
     }
 
-    @Override
-    public ListenableFuture<RpcResult<OtnServicePathOutput>> otnServicePath(OtnServicePathInput input) {
-        if (input.getOperation() != null && input.getServiceFormat() != null && input.getServiceRate() != null) {
-            String serviceType = ServiceTypes.getOtnServiceType(input.getServiceFormat(), input.getServiceRate());
-            if (input.getOperation().getIntValue() == 1) {
-                LOG.info("Create operation request received");
-                return RpcResultBuilder.success(this.otnDeviceRendererService
-                        .setupOtnServicePath(input, serviceType)).buildFuture();
-            } else if (input.getOperation().getIntValue() == 2) {
-                LOG.info("Delete operation request received");
-                return RpcResultBuilder.success(this.otnDeviceRendererService
-                        .deleteOtnServicePath(input, serviceType)).buildFuture();
-            }
-        }
-        return RpcResultBuilder
-            .success(new OtnServicePathOutputBuilder().setResult("Invalid operation").build())
-            .buildFuture();
-    }
-
-    /**
-     * Rollback created interfaces and cross connects specified by input.
-     *
-     * @param input
-     *            Lists of created interfaces and connections per node
-     * @return Success flag and nodes which failed to rollback
-     */
-    @Override
-    public ListenableFuture<RpcResult<RendererRollbackOutput>> rendererRollback(RendererRollbackInput input) {
-        return RpcResultBuilder.success(this.deviceRenderer.rendererRollback(input)).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<CreateOtsOmsOutput>> createOtsOms(CreateOtsOmsInput input) {
-        LOG.info("Request received to create oms and ots interfaces on {}: {}", input.getNodeId(), input
-            .getLogicalConnectionPoint());
-        try {
-            return RpcResultBuilder.success(deviceRenderer.createOtsOms(input)).buildFuture();
-        } catch (OpenRoadmInterfaceException e) {
-            LOG.error("failed to send request to create oms and ots interfaces on {}: {}", input.getNodeId(),
-                    input.getLogicalConnectionPoint(),e);
-        }
-        return null;
+    public Registration getRegisteredRpc() {
+        return reg;
     }
 }
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/OtnServicePathImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/OtnServicePathImpl.java
new file mode 100644 (file)
index 0000000..90202d1
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.renderer.rpcs;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.service.ServiceTypes;
+import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePath;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.OtnServicePathOutputBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class OtnServicePathImpl implements OtnServicePath {
+    private static final Logger LOG = LoggerFactory.getLogger(OtnServicePathImpl.class);
+    private OtnDeviceRendererService otnDeviceRendererService;
+
+    public OtnServicePathImpl(final OtnDeviceRendererService otnDeviceRendererService) {
+        this.otnDeviceRendererService = requireNonNull(otnDeviceRendererService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<OtnServicePathOutput>> invoke(OtnServicePathInput input) {
+        if (input.getOperation() == null || input.getServiceFormat() == null || input.getServiceRate() == null) {
+            LOG.debug("A mandatory input argument is null");
+            return RpcResultBuilder
+                .success(new OtnServicePathOutputBuilder().setResult("Invalid operation").build())
+                .buildFuture();
+        }
+        String serviceType = ServiceTypes.getOtnServiceType(input.getServiceFormat(), input.getServiceRate());
+        return switch (input.getOperation()) {
+            case Create -> {
+                LOG.info("Create operation request received");
+                yield RpcResultBuilder.success(this.otnDeviceRendererService
+                    .setupOtnServicePath(input, serviceType)).buildFuture();
+            }
+            case Delete -> {
+                LOG.info("Delete operation request received");
+                yield RpcResultBuilder.success(this.otnDeviceRendererService
+                    .deleteOtnServicePath(input, serviceType)).buildFuture();
+            }
+        };
+    }
+}
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/RendererRPCImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/RendererRPCImpl.java
new file mode 100644 (file)
index 0000000..4cff118
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright © 2017 AT&T and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.renderer.rpcs;
+
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component(immediate = true)
+public class RendererRPCImpl {
+
+    private static final Logger LOG = LoggerFactory.getLogger(RendererRPCImpl.class);
+    private Registration reg;
+
+    @Activate
+    public RendererRPCImpl(@Reference RendererServiceOperations rendererServiceOperations,
+            @Reference RpcProviderService rpcProviderService) {
+        this.reg = rpcProviderService.registerRpcImplementations(
+                new ServiceImplementationRequestImpl(rendererServiceOperations),
+                new ServiceDeleteImpl(rendererServiceOperations));
+        LOG.debug("TransportPCEServicePathRPCImpl instantiated");
+    }
+
+    @Deactivate
+    public void close() {
+        this.reg.close();
+        LOG.info("TransportPCEServicePathRPCImpl Closed");
+    }
+
+    public Registration getRegisteredRpc() {
+        return reg;
+    }
+
+}
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/RendererRollbackImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/RendererRollbackImpl.java
new file mode 100644 (file)
index 0000000..50fdfa0
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.renderer.rpcs;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollback;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+
+
+/**
+ * Rollback created interfaces and cross connects specified by input.
+ *
+ */
+public class RendererRollbackImpl implements RendererRollback {
+    private DeviceRendererService deviceRendererService;
+
+    public RendererRollbackImpl(final DeviceRendererService deviceRendererService) {
+        this.deviceRendererService = requireNonNull(deviceRendererService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<RendererRollbackOutput>> invoke(RendererRollbackInput input) {
+        return RpcResultBuilder.success(this.deviceRendererService.rendererRollback(input)).buildFuture();
+    }
+
+}
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServiceDeleteImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServiceDeleteImpl.java
new file mode 100644 (file)
index 0000000..debec5f
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.renderer.rpcs;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.transportpce.renderer.ModelMappingUtils;
+import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDelete;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ServiceDeleteImpl implements ServiceDelete {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceDeleteImpl.class);
+    private final RendererServiceOperations rendererServiceOperations;
+
+    public ServiceDeleteImpl(final RendererServiceOperations rendererServiceOperations) {
+        this.rendererServiceOperations = requireNonNull(rendererServiceOperations);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServiceDeleteOutput>> invoke(ServiceDeleteInput input) {
+        String serviceName = input.getServiceName();
+        LOG.info("Calling RPC service delete request {}", serviceName);
+        ServiceDeleteOutput output = null;
+        try {
+            output = this.rendererServiceOperations.serviceDelete(input, null).get();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("RPC service delete failed !", e);
+            Thread.currentThread().interrupt();
+        }
+        return ModelMappingUtils.createServiceDeleteRpcResponse(output);
+    }
+
+}
similarity index 50%
rename from renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/TransportPCEServicePathRPCImpl.java
rename to renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServiceImplementationRequestImpl.java
index f43204df44b584719ad9320b805325d120692236..3fb1e91704aac2f1fc41b58dfb6961ce8e2c5d8e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2017 AT&T and others.  All rights reserved.
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -7,59 +7,41 @@
  */
 package org.opendaylight.transportpce.renderer.rpcs;
 
+import static java.util.Objects.requireNonNull;
+
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.transportpce.renderer.ModelMappingUtils;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequest;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
 import org.opendaylight.yangtools.yang.common.RpcResult;
-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(immediate = true)
-public class TransportPCEServicePathRPCImpl implements TransportpceRendererService {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TransportPCEServicePathRPCImpl.class);
 
+public class ServiceImplementationRequestImpl implements ServiceImplementationRequest {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceImplementationRequestImpl.class);
     private final RendererServiceOperations rendererServiceOperations;
 
-    @Activate
-    public TransportPCEServicePathRPCImpl(@Reference RendererServiceOperations rendererServiceOperations) {
-        this.rendererServiceOperations = rendererServiceOperations;
-        LOG.debug("TransportPCEServicePathRPCImpl instantiated");
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceDeleteOutput>> serviceDelete(ServiceDeleteInput input) {
-        String serviceName = input.getServiceName();
-        LOG.info("Calling RPC service delete request {}", serviceName);
-        ServiceDeleteOutput output = null;
-        try {
-            output = this.rendererServiceOperations.serviceDelete(input, null).get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("RPC service delete failed !", e);
-        }
-        return ModelMappingUtils.createServiceDeleteRpcResponse(output);
+    public ServiceImplementationRequestImpl(final RendererServiceOperations rendererServiceOperations) {
+        this.rendererServiceOperations = requireNonNull(rendererServiceOperations);
     }
 
     @Override
-    public ListenableFuture<RpcResult<ServiceImplementationRequestOutput>> serviceImplementationRequest(
+    public ListenableFuture<RpcResult<ServiceImplementationRequestOutput>> invoke(
             ServiceImplementationRequestInput input) {
         String serviceName = input.getServiceName();
         LOG.info("Calling RPC service impl request {}", serviceName);
         ServiceImplementationRequestOutput output = null;
         try {
-            output = this.rendererServiceOperations.serviceImplementation(input).get();
+            output = this.rendererServiceOperations.serviceImplementation(input, false).get();
         } catch (InterruptedException | ExecutionException e) {
             LOG.error("RPC service implementation failed !", e);
+            Thread.currentThread().interrupt();
         }
         return ModelMappingUtils.createServiceImplementationRpcResponse(output);
     }
+
 }
diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServicePathImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/rpcs/ServicePathImpl.java
new file mode 100644 (file)
index 0000000..0bea071
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.renderer.rpcs;
+
+import static java.util.Objects.requireNonNull;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePath;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This class is the implementation of the 'service-path' RESTCONF service,
+ * which is one of the external APIs into the renderer application. The
+ * service provides two functions:
+ *
+ * <p>
+ * 1. Create This operation results in provisioning the device for a given
+ * wavelength and a list of nodes with each node listing its termination
+ * points.
+ *
+ * <p>
+ * 2. Delete This operation results in de-provisioning the device for a
+ * given wavelength and a list of nodes with each node listing its
+ * termination points.
+ *
+ * <p>
+ * The signature for this method was generated by yang tools from the
+ * renderer API model.
+ */
+public class ServicePathImpl implements ServicePath {
+    private static final Logger LOG = LoggerFactory.getLogger(ServicePathImpl.class);
+    private DeviceRendererService deviceRendererService;
+
+    public ServicePathImpl(final DeviceRendererService deviceRendererService) {
+        this.deviceRendererService = requireNonNull(deviceRendererService);
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServicePathOutput>> invoke(ServicePathInput input) {
+        if (input.getOperation() == null) {
+            LOG.debug("A mandatory input argument is null");
+            return RpcResultBuilder
+                .success(new ServicePathOutputBuilder().setResult("Invalid operation").build())
+                .buildFuture();
+        }
+        return switch (input.getOperation()) {
+            case Create -> {
+                LOG.info("Create operation request received");
+                yield RpcResultBuilder.success(this.deviceRendererService.setupServicePath(input, null))
+                    .buildFuture();
+            }
+            case Delete -> {
+                LOG.info("Delete operation request received");
+                yield RpcResultBuilder.success(this.deviceRendererService.deleteServicePath(input))
+                    .buildFuture();
+            }
+        };
+    }
+}
diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/RendererProviderTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/RendererProviderTest.java
deleted file mode 100644 (file)
index 611326a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright © 2019 Orange, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.renderer;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
-import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
-import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
-import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
-import org.opendaylight.transportpce.test.AbstractTest;
-
-@ExtendWith(MockitoExtension.class)
-public class RendererProviderTest extends AbstractTest {
-
-    @Mock
-    RpcProviderService rpcProviderService;
-    @Mock
-    DeviceRendererService deviceRenderer;
-    @Mock
-    OtnDeviceRendererService otnDeviceRendererService;
-    @Mock
-    DeviceRendererRPCImpl deviceRendererRPCImpl;
-    @Mock
-    TransportPCEServicePathRPCImpl transportPCEServicePathRPCImpl;
-
-    @Test
-    void testInitMethodRegistersRendererToRpcService() {
-        new RendererProvider(rpcProviderService, deviceRenderer, otnDeviceRendererService, deviceRendererRPCImpl,
-            transportPCEServicePathRPCImpl);
-
-        verify(rpcProviderService, times(1))
-            .registerRpcImplementation(any(), any(TransportPCEServicePathRPCImpl.class));
-        verify(rpcProviderService, times(1))
-            .registerRpcImplementation(any(), any(DeviceRendererRPCImpl.class));
-    }
-}
index 8bf5d6737de25fe2812e42471acc3dc5b0961648..05892be7dbffef7f98f852fd0c925c02d9448c30 100644 (file)
@@ -26,7 +26,7 @@ import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
 public class OpenRoadMInterface221Test extends AbstractTest {
index 0f3b013aa697c95faa272942f6c6b09e906ad626..22a2c006f36307fa40ace2fba27d1d6085656f3e 100644 (file)
@@ -11,123 +11,76 @@ package org.opendaylight.transportpce.renderer.provisiondevice;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
-import java.util.ArrayList;
 import java.util.concurrent.ExecutionException;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.MountPointService;
-import org.opendaylight.mdsal.binding.api.WriteTransaction;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
-import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl710;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
 import org.opendaylight.transportpce.common.mapping.MappingUtils;
-import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
-import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
 import org.opendaylight.transportpce.renderer.utils.CreateOtsOmsDataUtils;
 import org.opendaylight.transportpce.renderer.utils.MountPointUtils;
-import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfoBuilder;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
 
-public class DeviceRendererServiceImplCreateOtsOmsTest extends AbstractTest {
+@ExtendWith(MockitoExtension.class)
+public class DeviceRendererServiceImplCreateOtsOmsTest {
 
-    private DeviceRendererService deviceRendererService;
-    private CrossConnect crossConnect;
-    private OpenRoadmInterfaces openRoadmInterfaces;
-    private OpenRoadmInterfaceFactory openRoadmInterfaceFactory;
+    @Mock
+    private DataBroker dataBroker;
+    @Mock
     private DeviceTransactionManager deviceTransactionManager;
+    @Mock
+    private OpenRoadmInterfaces openRoadmInterfaces;
+    @Mock
+    private CrossConnect crossConnect;
+    @Mock
     private MappingUtils mappingUtils;
-    private OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121;
-    private OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221;
-    private OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710;
-    private CrossConnectImpl121 crossConnectImpl121;
-    private CrossConnectImpl221 crossConnectImpl221;
-    private CrossConnectImpl710 crossConnectImpl710;
-    private final PortMapping portMapping = mock(PortMapping.class);
-
-    private void setMountPoint(MountPoint mountPoint) {
-        MountPointService mountPointService = new MountPointServiceStub(mountPoint);
-        this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
-        this.mappingUtils = new MappingUtilsImpl(getDataBroker());
-        this.mappingUtils = spy(MappingUtils.class);
-
-        doReturn(StringConstants.OPENROADM_DEVICE_VERSION_1_2_1).when(mappingUtils).getOpenRoadmVersion(anyString());
-        this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils,
-            openRoadmInterfacesImpl121, openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
-        this.openRoadmInterfaces = spy(this.openRoadmInterfaces);
-        this.openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(this.mappingUtils, portMapping,
-                openRoadmInterfaces);
+    @Mock
+    private PortMapping portMapping;
+    private DeviceRendererService deviceRendererService;
+    private CreateOtsOmsInput input;
 
-        this.crossConnectImpl121 = new CrossConnectImpl121(this.deviceTransactionManager);
-        this.crossConnectImpl221 = new CrossConnectImpl221(this.deviceTransactionManager);
-        this.crossConnect = new CrossConnectImpl(this.deviceTransactionManager, this.mappingUtils,
-            this.crossConnectImpl121, this.crossConnectImpl221, this.crossConnectImpl710);
-        this.crossConnect = spy(this.crossConnect);
-        this.deviceRendererService = new DeviceRendererServiceImpl(getDataBroker(), this.deviceTransactionManager,
-                this.openRoadmInterfaces, this.crossConnect, mappingUtils, portMapping);
+    @BeforeEach
+    void setup() {
+        deviceRendererService = new DeviceRendererServiceImpl(dataBroker, deviceTransactionManager, openRoadmInterfaces,
+                crossConnect, mappingUtils, portMapping);
+        input = CreateOtsOmsDataUtils.buildCreateOtsOms();
     }
 
     @Test
-    void testCreateOtsOmsWhenDeviceIsNotMounted() throws OpenRoadmInterfaceException {
-        setMountPoint(null);
-        CreateOtsOmsInput input = CreateOtsOmsDataUtils.buildCreateOtsOms();
+    void testCreateOtsOmsFailsWhenDeviceIsNotMounted() throws OpenRoadmInterfaceException {
+        when(deviceTransactionManager.isDeviceMounted(any())).thenReturn(false);
         CreateOtsOmsOutput result = this.deviceRendererService.createOtsOms(input);
         assertFalse(result.getSuccess());
         assertEquals("node 1 is not mounted on the controller", result.getResult());
     }
 
     @Test
-    void testCreateOtsOmsWhenDeviceIsMountedWithNoMapping() throws OpenRoadmInterfaceException {
-        setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker()));
-        CreateOtsOmsInput input = CreateOtsOmsDataUtils.buildCreateOtsOms();
+    void testCreateOtsOmsFailsWhenDeviceIsMountedWithNoMapping() throws OpenRoadmInterfaceException {
+        when(deviceTransactionManager.isDeviceMounted(any())).thenReturn(true);
+        when(portMapping.getMapping(any(), any())).thenReturn(null);
         CreateOtsOmsOutput result = this.deviceRendererService.createOtsOms(input);
         assertFalse(result.getSuccess());
+        assertEquals("Logical Connection point logical point does not exist for node 1", result.getResult());
     }
 
     @Test
-    void testCreateOtsOmsWhenDeviceIsMountedWithMapping()
-            throws OpenRoadmInterfaceException, InterruptedException, ExecutionException {
-        InstanceIdentifier<NodeInfo> nodeInfoIID = InstanceIdentifier.builder(Network.class).child(Nodes.class,
-                new NodesKey("node 1")).child(NodeInfo.class).build();
-        InstanceIdentifier<Nodes> nodeIID = InstanceIdentifier.builder(Network.class).child(Nodes.class,
-                new NodesKey("node 1")).build();
-        final NodeInfo nodeInfo = new NodeInfoBuilder().setOpenroadmVersion(OpenroadmNodeVersion._221).build();
-        Nodes nodes = new NodesBuilder().setNodeId("node 1").setNodeInfo(nodeInfo).build();
-        WriteTransaction wr = getDataBroker().newWriteOnlyTransaction();
-        wr.merge(LogicalDatastoreType.CONFIGURATION, nodeIID, nodes);
-        wr.merge(LogicalDatastoreType.CONFIGURATION, nodeInfoIID, nodeInfo);
-        wr.commit().get();
-        setMountPoint(MountPointUtils.getMountPoint(new ArrayList<>(), getDataBroker()));
-        CreateOtsOmsInput input = CreateOtsOmsDataUtils.buildCreateOtsOms();
+    void testCreateOtsOms() throws OpenRoadmInterfaceException, InterruptedException, ExecutionException {
+        when(deviceTransactionManager.isDeviceMounted(any())).thenReturn(true);
+        when(mappingUtils.getOpenRoadmVersion(any())).thenReturn(StringConstants.OPENROADM_DEVICE_VERSION_2_2_1);
         Mapping mapping = MountPointUtils.createMapping(input.getNodeId(), input.getLogicalConnectionPoint());
         when(portMapping.getMapping(anyString(), anyString())).thenReturn(mapping);
         CreateOtsOmsOutput result = this.deviceRendererService.createOtsOms(input);
index c4d3dc64fee623b0a120fd448a657f1ddd1dc845..fbedc423b9ecb663bb57514281026c06db6ad0f1 100644 (file)
@@ -14,22 +14,24 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.MountPoint;
 import org.opendaylight.mdsal.binding.api.MountPointService;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.StringConstants;
@@ -37,7 +39,7 @@ import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
-import org.opendaylight.transportpce.renderer.stub.OlmServiceStub;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.NotificationSender;
 import org.opendaylight.transportpce.renderer.utils.NotificationPublishServiceMock;
 import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils;
 import org.opendaylight.transportpce.renderer.utils.TransactionUtils;
@@ -45,20 +47,20 @@ import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
 import org.opendaylight.transportpce.test.stub.MountPointStub;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndown;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
@@ -69,15 +71,24 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
 
+@ExtendWith(MockitoExtension.class)
 public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
 
     private DeviceTransactionManager deviceTransactionManager;
+    @Mock
+    private DeviceRendererService deviceRenderer;
+    @Mock
+    private OtnDeviceRendererService otnDeviceRendererService;
+    private DataBroker dataBroker;
+    @Mock
+    private PortMapping portMapping;
+    @Mock
+    private RpcService rpcService;
+    @Mock
+    private CrossConnect crossConnect;
+    @Mock
+    private ServicePowerTurndown servicePowerTurndown;
     private RendererServiceOperationsImpl rendererServiceOperations;
-    private final DeviceRendererService deviceRenderer = mock(DeviceRendererService.class);
-    private final OtnDeviceRendererService otnDeviceRendererService = mock(OtnDeviceRendererService.class);
-    private final PortMapping portMapping = mock(PortMapping.class);
-    private final CrossConnect crossConnect = mock(CrossConnect.class);
-    private TransportpceOlmService olmService;
 
     private void setMountPoint(MountPoint mountPoint) {
         MountPointService mountPointService = new MountPointServiceStub(mountPoint);
@@ -86,12 +97,12 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
 
     @BeforeEach
     void setUp() {
-        setMountPoint(new MountPointStub(getDataBroker()));
-        this.olmService = new OlmServiceStub();
-        this.olmService = spy(this.olmService);
+        dataBroker = getNewDataBroker();
+        setMountPoint(new MountPointStub(dataBroker));
         NotificationPublishService notificationPublishService = new NotificationPublishServiceMock();
         this.rendererServiceOperations =  new RendererServiceOperationsImpl(deviceRenderer,
-            otnDeviceRendererService, olmService, getDataBroker(), notificationPublishService, portMapping);
+            otnDeviceRendererService, dataBroker, new NotificationSender(notificationPublishService), portMapping,
+            rpcService);
     }
 
 
@@ -102,8 +113,6 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
         serviceDeleteInputBuilder.setServiceName("service 1");
         serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder())
             .setRequestId("request1").build());
-        doReturn(Collections.emptyList())
-            .when(this.crossConnect).deleteCrossConnect(anyString(), anyString(), eq(false));
         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
             .setServiceFormat(ServiceFormat.Ethernet)
             .setServiceRate(Uint32.valueOf("100"))
@@ -120,13 +129,18 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
         when(portMapping.getMapping(anyString(), anyString())).thenReturn(null);
         when(deviceRenderer.deleteServicePath(any()))
             .thenReturn(new ServicePathOutputBuilder().setSuccess(true).build());
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerTurndownOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build())
+                .buildFuture())
+            .when(servicePowerTurndown).invoke(any());
         ServiceDeleteOutput serviceDeleteOutput = this.rendererServiceOperations
             .serviceDelete(serviceDeleteInputBuilder.build(), service).get();
         assertEquals(ResponseCodes.RESPONSE_OK, serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode());
     }
 
     @Test
-    void serviceDeleteOperationNoDescription() throws InterruptedException, ExecutionException {
+    void serviceDeleteOperationWithoutPathDescription() throws InterruptedException, ExecutionException {
         ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder();
         serviceDeleteInputBuilder.setServiceName("service 1");
         Services service = new ServicesBuilder()
@@ -141,9 +155,6 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
                 .setNodeId(new NodeIdType("optical-node1"))
                 .build())
             .build();
-        when(portMapping.getMapping(anyString(), anyString())).thenReturn(null);
-        doReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
-            .setResult("Failed").build()).buildFuture()).when(this.olmService).servicePowerTurndown(any());
         ServiceDeleteOutput serviceDeleteOutput
                 = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service).get();
         assertEquals(
@@ -154,12 +165,6 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
 
     @Test
     void serviceDeleteOperationTearDownFailedAtoZ() throws ExecutionException, InterruptedException {
-        doReturn(Collections.emptyList())
-            .when(this.crossConnect).deleteCrossConnect(anyString(),anyString(), eq(false));
-        doReturn(RpcResultBuilder.success(new ServicePowerTurndownOutputBuilder().setResult("Failed").build())
-                .buildFuture())
-            .when(this.olmService).servicePowerTurndown(any());
-
         writePathDescription();
         Services service = new ServicesBuilder()
             .setServiceName("service 1")
@@ -178,6 +183,12 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
             .build();
         when(portMapping.getMapping(anyString(), anyString()))
             .thenReturn(null);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerTurndownOutputBuilder().setResult(ResponseCodes.FAILED_RESULT).build())
+                .buildFuture())
+            .when(servicePowerTurndown).invoke(any());
+
         ListenableFuture<ServiceDeleteOutput> serviceDeleteOutput = this.rendererServiceOperations
             .serviceDelete(
                 new ServiceDeleteInputBuilder()
@@ -194,15 +205,13 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
 
     @Test
     void serviceDeleteOperationTearDownFailedZtoA() throws ExecutionException, InterruptedException {
-        doReturn(Collections.emptyList())
-            .when(this.crossConnect).deleteCrossConnect(anyString(), anyString(), eq(false));
-        when(this.olmService.servicePowerTurndown(any()))
+        writePathDescription();
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        when(servicePowerTurndown.invoke(any()))
             .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()).setResult("Success").build())
                 .buildFuture())
             .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()).setResult("Failed").build())
                 .buildFuture());
-
-        writePathDescription();
         when(portMapping.getMapping(anyString(), anyString()))
             .thenReturn(null);
         ServiceDeleteOutput serviceDeleteOutput = this.rendererServiceOperations.serviceDelete(
@@ -228,7 +237,7 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
             .get();
         assertEquals(ResponseCodes.RESPONSE_FAILED,
             serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode());
-        verify(this.olmService, times(2)).servicePowerTurndown(any());
+        verify(servicePowerTurndown, times(2)).invoke(any());
         verify(this.crossConnect, times(0)).deleteCrossConnect(eq("node1"), any(),eq(false));
         verify(this.crossConnect, times(0)).deleteCrossConnect(eq("node2"), any(),eq(false));
     }
index 6d1d0f926833202c4d99307e8c566d85ae9d3557..a16530d1c35f3eadc0cda6e506a323ce34129977 100644 (file)
@@ -9,315 +9,326 @@ package org.opendaylight.transportpce.renderer.provisiondevice;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
-import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.MountPointService;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.StringConstants;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
-import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
-import org.opendaylight.transportpce.common.mapping.MappingUtils;
-import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
-import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
-import org.opendaylight.transportpce.renderer.stub.OlmServiceStub;
+import org.opendaylight.transportpce.renderer.provisiondevice.notification.NotificationSender;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.history.History;
 import org.opendaylight.transportpce.renderer.utils.NotificationPublishServiceMock;
 import org.opendaylight.transportpce.renderer.utils.ServiceDataUtils;
-import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
-import org.opendaylight.transportpce.test.stub.MountPointStub;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPm;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetup;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndown;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.MeasurementsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.nodes.NodeInfo;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.ResourceTypeEnum;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.PmGranularity;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.olm.get.pm.input.ResourceIdentifierBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 
-public class RendererServiceOperationsImplTest extends AbstractTest {
+@ExtendWith(MockitoExtension.class)
+public class RendererServiceOperationsImplTest {
 
-    private MountPointService mountPointService;
-    private DeviceTransactionManager deviceTransactionManager;
-    private final DeviceRendererService deviceRenderer = mock(DeviceRendererService.class);
-    private final OtnDeviceRendererService otnDeviceRendererService = mock(OtnDeviceRendererService.class);
-    private final PortMapping portMapping = mock(PortMapping.class);
+    @Mock
+    private DeviceRendererService deviceRenderer;
+    @Mock
+    private OtnDeviceRendererService otnDeviceRendererService;
+    @Mock
+    private DataBroker dataBroker;
+    @Mock
+    private PortMapping portMapping;
+    @Mock
+    private RpcService rpcService;
+    @Mock
+    private ServicePowerSetup servicePowerSetup;
+    @Mock
+    private ServicePowerTurndown servicePowerTurndown;
+    @Mock
+    private GetPm getPm;
+    @Mock
+    private Nodes node;
+    @Mock
+    private NodeInfo nodeInfo;
     private RendererServiceOperationsImpl rendererServiceOperations;
-    private OpenRoadmInterfaces openRoadmInterfaces;
-    private TransportpceOlmService olmService;
-    private MappingUtils mappingUtils;
-    private OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121;
-    private OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221;
-    private OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710;
-
-    private void setMountPoint(MountPoint mountPoint) {
-        this.mountPointService = new MountPointServiceStub(mountPoint);
-        this.deviceTransactionManager = new DeviceTransactionManagerImpl(this.mountPointService, 3000);
-        this.mappingUtils = new MappingUtilsImpl(getDataBroker());
-        this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils,
-            openRoadmInterfacesImpl121, openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
-        this.openRoadmInterfaces = spy(this.openRoadmInterfaces);
-    }
+
 
     @BeforeEach
     void setUp() throws OpenRoadmInterfaceException {
-        setMountPoint(new MountPointStub(getDataBroker()));
-        this.olmService = new OlmServiceStub();
-        doNothing().when(this.openRoadmInterfaces).postEquipmentState(anyString(), anyString(), anyBoolean());
         NotificationPublishService notificationPublishService = new NotificationPublishServiceMock();
-        this.olmService = spy(this.olmService);
-        this.rendererServiceOperations =  new RendererServiceOperationsImpl(deviceRenderer, otnDeviceRendererService,
-                this.olmService, getDataBroker(), notificationPublishService, portMapping);
+        this.rendererServiceOperations = new RendererServiceOperationsImpl(deviceRenderer, otnDeviceRendererService,
+                dataBroker, new NotificationSender(notificationPublishService), portMapping, rpcService);
     }
 
     @Test
     void serviceImplementationTerminationPointAsResourceTtp() throws InterruptedException, ExecutionException {
         ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.TTP_TOKEN);
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
-        assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
-    }
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.TTP_TOKEN);
+        when(deviceRenderer.setupServicePath(any(), any(), any()))
+                .thenReturn(new ServicePathOutputBuilder().setResult("success").setSuccess(true).build());
 
-    @Test
-    void serviceImplementationTerminationPointAsResourceTtp2() throws InterruptedException, ExecutionException {
-        ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.TTP_TOKEN);
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
-        doReturn(RpcResultBuilder.failed().buildFuture()).when(this.olmService).servicePowerSetup(any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
-        assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
-    }
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        when(rpcService.getRpc(GetPm.class)).thenReturn(getPm);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerSetupOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build())
+                .buildFuture()).when(servicePowerSetup).invoke(any());
+        doReturn(RpcResultBuilder.success(new GetPmOutputBuilder().setNodeId("node id").build()).buildFuture())
+                .when(getPm).invoke(any());
+        when(portMapping.getNode(any())).thenReturn(node);
+        when(node.getNodeInfo()).thenReturn(nodeInfo);
+        when(nodeInfo.getNodeType()).thenReturn(NodeTypes.Xpdr);
 
-    @Test
-    void serviceImplementationTerminationPointAsResourcePp() throws InterruptedException, ExecutionException {
-        ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.PP_TOKEN);
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
     }
 
     @Test
-    void serviceImplementationTerminationPointAsResourceNetwork() throws InterruptedException, ExecutionException {
+    void serviceImplementationTerminationPointAsResourceTtp2() throws InterruptedException, ExecutionException {
         ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
-        assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
-    }
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.TTP_TOKEN);
+        ServicePathOutput mockServicePathOutput = new ServicePathOutputBuilder()
+                .setResult("success")
+                .setSuccess(true)
+                .build();
+        doReturn(mockServicePathOutput).when(this.deviceRenderer).setupServicePath(any(), any(), any());
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
+        ServicePowerSetupOutput mockServicePowerSetupOutput = new ServicePowerSetupOutputBuilder()
+                .setResult("result")
+                .build();
+        doReturn(RpcResultBuilder.failed().withResult(mockServicePowerSetupOutput).buildFuture())
+            .when(servicePowerSetup).invoke(any());
 
-    @Test
-    void serviceImplementationTerminationPointAsResourceClient() throws InterruptedException, ExecutionException {
-        ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.CLIENT_TOKEN);
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
-        assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerTurndownOutputBuilder()
+                        .setResult("result")
+                        .build())
+                .buildFuture())
+            .when(servicePowerTurndown).invoke(any());
+        when(this.deviceRenderer.rendererRollback(any(History.class)))
+            .thenReturn(new RendererRollbackOutputBuilder().setSuccess(true).build());
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
+        assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
     }
 
     @Test
     void serviceImplementationTerminationPointAsResourceNoMapping() throws InterruptedException, ExecutionException {
-        String[] interfaceTokens = {
-            StringConstants.NETWORK_TOKEN,
-            StringConstants.CLIENT_TOKEN,
-            StringConstants.TTP_TOKEN,
-            StringConstants.PP_TOKEN
-        };
+        // when no mapping available, 100GE between transponders must be implemented
 
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("failed")
-            .setSuccess(false);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
+        when(deviceRenderer.setupServicePath(any(), any(), any()))
+                .thenReturn(new ServicePathOutputBuilder().setResult("success").setSuccess(true).build());
 
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        when(rpcService.getRpc(GetPm.class)).thenReturn(getPm);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerSetupOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build())
+                .buildFuture()).when(servicePowerSetup).invoke(any());
+        doReturn(RpcResultBuilder.success(new GetPmOutputBuilder().setNodeId("node id").build()).buildFuture())
+                .when(getPm).invoke(any());
+        when(portMapping.getNode(any())).thenReturn(node);
+        when(node.getNodeInfo()).thenReturn(nodeInfo);
+        when(nodeInfo.getNodeType()).thenReturn(NodeTypes.Xpdr);
+        String[] interfaceTokens = { StringConstants.NETWORK_TOKEN, StringConstants.CLIENT_TOKEN,
+            StringConstants.TTP_TOKEN, StringConstants.PP_TOKEN };
         for (String tpToken : interfaceTokens) {
             ServiceImplementationRequestInput input = ServiceDataUtils
-                .buildServiceImplementationRequestInputTerminationPointResource(tpToken);
-            ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input)
-                .get();
-            assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
+                    .buildServiceImplementationRequestInputTerminationPointResource(tpToken);
+            ServiceImplementationRequestOutput result = this.rendererServiceOperations
+                    .serviceImplementation(input, false).get();
+            assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
         }
     }
 
     @Test
     void serviceImplementationRollbackAllNecessary() throws InterruptedException, ExecutionException {
         ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
-//        writePortMapping(input, StringConstants.NETWORK_TOKEN);
-        doReturn(RpcResultBuilder.failed().buildFuture()).when(this.olmService).servicePowerSetup(any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
-        assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
-    }
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+        when(deviceRenderer.setupServicePath(any(), any(), any()))
+                .thenReturn(new ServicePathOutputBuilder().setResult("success").setSuccess(true).build());
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerSetupOutputBuilder().setResult(ResponseCodes.RESPONSE_FAILED).build())
+                .buildFuture()).when(servicePowerSetup).invoke(any());
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerTurndownOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build())
+                .buildFuture()).when(servicePowerTurndown).invoke(any());
+        when(deviceRenderer.rendererRollback(any(History.class)))
+                .thenReturn(new RendererRollbackOutputBuilder().setSuccess(true).build());
 
-    @Test
-    void serviceImplementationServiceInActive() throws InterruptedException, ExecutionException {
-        ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
-        List<Measurements> measurementsList = new ArrayList<Measurements>();
-        measurementsList.add(new MeasurementsBuilder()
-                .setPmparameterName("FECUncorrectableBlocks")
-                .setPmparameterValue("1")
-                .build());
-        GetPmOutput getPmOutput = new GetPmOutputBuilder()
-                .setNodeId("node1")
-                .setMeasurements(measurementsList)
-                .build();
-        doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
     }
 
+    @Disabled("Disabled until we understand the author objective...")
     @Test
-    void serviceImplementationServiceInActive2() throws InterruptedException, ExecutionException {
+    void serviceImplementationServiceInActive() throws InterruptedException, ExecutionException {
         ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
         List<Measurements> measurementsList = new ArrayList<Measurements>();
-        measurementsList.add(new MeasurementsBuilder()
-                .setPmparameterName("FECUncorrectableBlocks")
-                .setPmparameterValue("1")
-                .build());
-        GetPmOutput getPmOutput = new GetPmOutputBuilder()
-                .setNodeId("node1")
-                .setMeasurements(measurementsList)
-                .build();
-
-        when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
+        measurementsList.add(new MeasurementsBuilder().setPmparameterName("FECUncorrectableBlocks")
+                .setPmparameterValue("1").build());
+        GetPmOutput getPmOutput = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(measurementsList).build();
+        doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(getPm).invoke(any());
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
     }
 
+    @Disabled("Disabled until we understand the author objective...")
     @Test
     void serviceImplementationServiceInActive3() throws InterruptedException, ExecutionException {
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
         List<Measurements> measurementsList = new ArrayList<Measurements>();
-        measurementsList.add(new MeasurementsBuilder()
-                .setPmparameterName("FECUncorrectableBlocks")
-                .setPmparameterValue("1")
-                .build());
+        measurementsList.add(new MeasurementsBuilder().setPmparameterName("FECUncorrectableBlocks")
+                .setPmparameterValue("1").build());
         GetPmOutput getPmOutput = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(measurementsList).build();
         GetPmOutput getPmOutput2 = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(new ArrayList<>())
-            .build();
+                .build();
 
         GetPmInput getPmInputZ = createGetPmInput("XPONDER-2-3", StringConstants.NETWORK_TOKEN);
         GetPmInput getPmInputA = createGetPmInput("XPONDER-1-2", StringConstants.NETWORK_TOKEN);
 
-        when(this.olmService.getPm(eq(getPmInputZ))).thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture());
-        when(this.olmService.getPm(eq(getPmInputA))).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
+        when(getPm.invoke(eq(getPmInputZ))).thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture());
+        when(getPm.invoke(eq(getPmInputA))).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
+                .setSuccess(true);
+        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any(), any());
         ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
-        assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
+        assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
     }
 
     @Test
     void serviceImplementationServiceActive() throws InterruptedException, ExecutionException {
         ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+        when(deviceRenderer.setupServicePath(any(), any(), any()))
+                .thenReturn(new ServicePathOutputBuilder().setResult("success").setSuccess(true).build());
+
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        when(rpcService.getRpc(GetPm.class)).thenReturn(getPm);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerSetupOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build())
+                .buildFuture()).when(servicePowerSetup).invoke(any());
         GetPmOutput getPmOutput1 = null;
-        when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput1).buildFuture());
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
-        assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
-    }
+        when(getPm.invoke(any())).thenReturn(RpcResultBuilder.success(getPmOutput1).buildFuture());
 
-    @Test
-    void serviceImplementationServiceActive2() throws InterruptedException, ExecutionException {
-        ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
-        GetPmOutput getPmOutput = new GetPmOutputBuilder().setMeasurements(new ArrayList<>()).build();
-        when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
+        when(portMapping.getNode(any())).thenReturn(node);
+        when(node.getNodeInfo()).thenReturn(nodeInfo);
+        when(nodeInfo.getNodeType()).thenReturn(NodeTypes.Xpdr);
+
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
     }
 
     @Test
     void serviceImplementationServiceInActive4() throws InterruptedException, ExecutionException {
+        when(deviceRenderer.setupServicePath(any(), any(), any()))
+                .thenReturn(new ServicePathOutputBuilder().setResult("success").setSuccess(true).build());
+
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        when(rpcService.getRpc(GetPm.class)).thenReturn(getPm);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerSetupOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build())
+                .buildFuture()).when(servicePowerSetup).invoke(any());
+
         List<Measurements> measurementsList = new ArrayList<Measurements>();
-        measurementsList.add(new MeasurementsBuilder()
-                .setPmparameterName("preFECCorrectedErrors")
-                .setPmparameterValue("1")
-                .build());
-        GetPmOutput getPmOutput = new GetPmOutputBuilder()
-                .setNodeId("node1")
-                .setMeasurements(measurementsList)
-                .build();
+        measurementsList.add(
+                new MeasurementsBuilder().setPmparameterName("preFECCorrectedErrors").setPmparameterValue("1").build());
+        GetPmOutput getPmOutput = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(measurementsList).build();
+        when(getPm.invoke(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
+        when(portMapping.getNode(any())).thenReturn(node);
+        when(node.getNodeInfo()).thenReturn(nodeInfo);
+        when(nodeInfo.getNodeType()).thenReturn(NodeTypes.Xpdr);
 
-        doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
-        ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
-            .setSuccess(true);
-        doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
         ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
     }
 
     @Test
     void serviceImplementationServiceInActive5() throws InterruptedException, ExecutionException {
-        ServiceImplementationRequestInput input = ServiceDataUtils
-            .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+        when(deviceRenderer.setupServicePath(any(), any(), any()))
+                .thenReturn(new ServicePathOutputBuilder().setResult("success").setSuccess(true).build());
+        when(rpcService.getRpc(ServicePowerSetup.class)).thenReturn(servicePowerSetup);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        when(rpcService.getRpc(GetPm.class)).thenReturn(getPm);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerSetupOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build())
+                .buildFuture()).when(servicePowerSetup).invoke(any());
+
         List<Measurements> measurementsList = new ArrayList<Measurements>();
-        measurementsList.add(new MeasurementsBuilder()
-                .setPmparameterName("preFECCorrectedErrors")
-                .setPmparameterValue("112000000000d")
-                .build());
-        GetPmOutput getPmOutput = new GetPmOutputBuilder()
-                .setNodeId("node1")
-                .setMeasurements(measurementsList)
-                .build();
+        measurementsList.add(new MeasurementsBuilder().setPmparameterName("preFECCorrectedErrors")
+                .setPmparameterValue("112000000000d").build());
+        GetPmOutput getPmOutput = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(measurementsList).build();
+        when(getPm.invoke(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
+        when(portMapping.getNode(any())).thenReturn(node);
+        when(node.getNodeInfo()).thenReturn(nodeInfo);
+        when(nodeInfo.getNodeType()).thenReturn(NodeTypes.Xpdr);
+        when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown);
+        doReturn(RpcResultBuilder
+                .success(new ServicePowerTurndownOutputBuilder()
+                        .setResult("result")
+                        .build())
+                .buildFuture())
+            .when(servicePowerTurndown).invoke(any());
+        when(this.deviceRenderer.rendererRollback(any(History.class)))
+            .thenReturn(new RendererRollbackOutputBuilder().setSuccess(true).build());
 
-        doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
-        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
+        ServiceImplementationRequestInput input = ServiceDataUtils
+                .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
+        ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input, false)
+                .get();
         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
     }
 
     private GetPmInput createGetPmInput(String nodeId, String tp) {
-        return new GetPmInputBuilder()
-                .setNodeId(nodeId)
-                .setGranularity(PmGranularity._15min)
+        return new GetPmInputBuilder().setNodeId(nodeId).setGranularity(PmGranularity._15min)
                 .setResourceIdentifier(new ResourceIdentifierBuilder().setResourceName(tp + "-OTU").build())
-                .setResourceType(ResourceTypeEnum.Interface)
-                .build();
+                .setResourceType(ResourceTypeEnum.Interface).build();
     }
 }
\ No newline at end of file
diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/ConnectionTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/ConnectionTest.java
new file mode 100644 (file)
index 0000000..a3ba1e7
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+
+class ConnectionTest {
+
+    @Test
+    void rollback() {
+        Delete delete = Mockito.mock(Delete.class);
+        Mockito.when(delete.deleteCrossConnect("ROADM-A", "DEG1", false))
+                .thenReturn(List.of("Interface1"));
+
+        Connection n1 = new Connection("ROADM-A", "DEG1", false);
+
+        Assert.assertTrue(n1.rollback(delete));
+
+        Mockito.verify(delete, Mockito.times(1))
+                .deleteCrossConnect("ROADM-A", "DEG1", false);
+    }
+
+    @Test
+    void testTwoObjectsWithSameInformationIsEqual() {
+        Connection n1 = new Connection("ROADM-A", "DEG1", false);
+        Connection n2 = new Connection("ROADM-A", "DEG1", false);
+
+        Assert.assertTrue(n1.equals(n2));
+    }
+
+    @Test
+    void testTwoObjectsWithDifferentInformationIsNotEqual() {
+        Connection n1 = new Connection("ROADM-A", "DEG1", true);
+        Connection n2 = new Connection("ROADM-A", "DEG1", false);
+
+        Assert.assertFalse(n1.equals(n2));
+    }
+
+    @Test
+    void testTwoDifferentRoadmNodesAreNotEqual() {
+        Connection n1 = new Connection("ROADM-A", "DEG1", false);
+        Connection n2 = new Connection("ROADM-B", "DEG1", false);
+
+        Assert.assertFalse(n1.equals(n2));
+    }
+
+
+    @Test
+    void deleteReturnNull() {
+        Delete delete = Mockito.mock(Delete.class);
+        Mockito.when(delete.deleteCrossConnect("ROADM-A", "DEG1", false))
+                .thenReturn(null);
+
+        Connection n1 = new Connection("ROADM-A", "DEG1", false);
+
+        Assert.assertFalse(n1.rollback(delete));
+
+        Mockito.verify(delete, Mockito.times(1))
+                .deleteCrossConnect("ROADM-A", "DEG1", false);
+    }
+
+    @Test
+    void deleteReturnEmptyList() {
+        Delete delete = Mockito.mock(Delete.class);
+        Mockito.when(delete.deleteCrossConnect("ROADM-A", "DEG1", false))
+                .thenReturn(new ArrayList<>());
+
+        Connection n1 = new Connection("ROADM-A", "DEG1", false);
+
+        Assert.assertFalse(n1.rollback(delete));
+
+        Mockito.verify(delete, Mockito.times(1))
+                .deleteCrossConnect("ROADM-A", "DEG1", false);
+    }
+}
\ No newline at end of file
diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/DeviceInterfaceTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/DeviceInterfaceTest.java
new file mode 100644 (file)
index 0000000..d0481ae
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction;
+
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+
+class DeviceInterfaceTest {
+
+    @Test
+    void rollback() {
+        Delete delete = Mockito.mock(Delete.class);
+        Mockito.when(delete.deleteInterface("ROADM-A", "DEG1")).thenReturn(true);
+
+        DeviceInterface n1 = new DeviceInterface("ROADM-A", "DEG1");
+        Assert.assertTrue(n1.rollback(delete));
+
+        Mockito.verify(delete, Mockito.times(1)).deleteInterface("ROADM-A", "DEG1");
+    }
+
+    @Test
+    void testTwoInterfacesAreEqual() {
+        DeviceInterface n1 = new DeviceInterface("ROADM-A", "DEG1");
+        DeviceInterface n2 = new DeviceInterface("ROADM-A", "DEG1");
+
+        Assert.assertTrue(n1.equals(n2));
+    }
+
+    @Test
+    void testTwoInterfacesAreNotEqual() {
+        DeviceInterface n1 = new DeviceInterface("ROADM-A", "DEG1");
+        DeviceInterface n2 = new DeviceInterface("ROADM-B", "DEG1");
+
+        Assert.assertFalse(n1.equals(n2));
+    }
+}
\ No newline at end of file
diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/TransactionHistoryTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/transaction/history/TransactionHistoryTest.java
new file mode 100644 (file)
index 0000000..0adf418
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright © 2024 Smartoptics and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.renderer.provisiondevice.transaction.history;
+
+import java.util.List;
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.DeviceInterface;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.Transaction;
+import org.opendaylight.transportpce.renderer.provisiondevice.transaction.delete.Delete;
+
+class TransactionHistoryTest {
+
+    @Test
+    void add() {
+        Transaction transaction = Mockito.mock(Transaction.class);
+        History history = new TransactionHistory();
+
+        Assert.assertTrue(history.add(transaction));
+    }
+
+    @Test
+    void testDuplicateTransactionIsIgnored() {
+
+        Transaction t1 = new DeviceInterface("ROADM-A", "DEG1");
+        Transaction t2 = new DeviceInterface("ROADM-A", "DEG1");
+
+        History history = new TransactionHistory();
+
+        history.add(t1);
+        Assert.assertFalse(history.add(t2));
+    }
+
+    @Test
+    void testAddCollectionOfUniqueTransactions() {
+        Transaction t1 = new DeviceInterface("ROADM-A", "DEG1");
+        Transaction t2 = new DeviceInterface("ROADM-A", "DEG2");
+
+        List<Transaction> transactions = List.of(t1, t2);
+
+        History history = new TransactionHistory();
+
+        Assert.assertTrue(history.add(transactions));
+    }
+
+    @Test
+    void testAddCollectionOfDuplicateTransactions() {
+        Transaction t1 = new DeviceInterface("ROADM-A", "DEG1");
+        Transaction t2 = new DeviceInterface("ROADM-A", "DEG1");
+
+        List<Transaction> transactions = List.of(t1, t2);
+
+        History history = new TransactionHistory();
+
+        Assert.assertFalse(history.add(transactions));
+    }
+
+    @Test
+    void testAddUniqueStringOfInterfaceIds() {
+        String nodeId = "ROADM-A";
+        String[] interfaces = new String[]{"DEG1", "DEG2"};
+
+        History history = new TransactionHistory();
+
+        Assert.assertTrue(history.addInterfaces(nodeId, interfaces));
+    }
+
+    @Test
+    void testAddDuplicateStringOfInterfaceIds() {
+        String nodeId = "ROADM-A";
+        String[] interfaces = new String[]{"DEG1", "DEG1"};
+
+        History history = new TransactionHistory();
+
+        Assert.assertTrue(history.addInterfaces(nodeId, interfaces));
+
+    }
+
+    @Test
+    void testAddDuplicateListOfInterfaceIds() {
+        String nodeId = "ROADM-A";
+        List<String> interfaces = List.of("DEG1", "DEG1");
+
+        History history = new TransactionHistory();
+
+        Assert.assertTrue(history.addInterfaces(nodeId, interfaces));
+
+    }
+
+    @Test
+    void rollbackOneInterface() {
+
+        String nodeId = "ROADM-A";
+        List<String> interfaces = List.of("DEG1", "DEG1");
+
+        History history = new TransactionHistory();
+        history.addInterfaces(nodeId, interfaces);
+
+        Delete delete = Mockito.mock(Delete.class);
+        Mockito.when(delete.deleteInterface("ROADM-A", "DEG1")).thenReturn(true);
+
+        Assert.assertTrue(history.rollback(delete));
+
+        //Although the same interface was added twice, we only rollback once.
+        Mockito.verify(delete, Mockito.times(1))
+                .deleteInterface("ROADM-A", "DEG1");
+    }
+
+    @Test
+    void rollbackTwoInterfacesInReverseOrderTheyWereAdded() {
+
+        String nodeId = "ROADM-A";
+
+        //Note DEG1 is added before DEG2
+        List<String> interfaces = List.of("DEG1", "DEG2");
+
+        History history = new TransactionHistory();
+        history.addInterfaces(nodeId, interfaces);
+
+        Delete delete = Mockito.mock(Delete.class);
+        Mockito.when(delete.deleteInterface("ROADM-A", "DEG1")).thenReturn(true);
+        Mockito.when(delete.deleteInterface("ROADM-A", "DEG2")).thenReturn(true);
+
+        Assert.assertTrue(history.rollback(delete));
+
+        //The rollback occurs in the reverse order.
+        // i.e. DEG2 before DEG1.
+        InOrder inOrder = Mockito.inOrder(delete);
+        inOrder.verify(delete, Mockito.times(1))
+                .deleteInterface("ROADM-A", "DEG2");
+        inOrder.verify(delete, Mockito.times(1))
+                .deleteInterface("ROADM-A", "DEG1");
+
+    }
+}
\ No newline at end of file
index b53676900e16f536162e7f4d09db7a5bf76d183b..80a81d00c5cc5532637b380a5599630ef93d5667 100644 (file)
@@ -7,50 +7,84 @@
  */
 package org.opendaylight.transportpce.renderer.rpcs;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
-import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.Action;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOms;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.CreateOtsOmsOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollback;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.RendererRollbackOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePath;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathInput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
 
-
-public class DeviceRendererRPCImplTest extends AbstractTest {
-    private final DeviceRendererService deviceRenderer = mock(DeviceRendererService.class);
-    private final OtnDeviceRendererService otnDeviceRenderer = mock(OtnDeviceRendererService.class);
-    private final ServicePathInput servicePathInput = spy(ServicePathInput.class);
-    private final CreateOtsOmsInput createOtsOmsInput = mock(CreateOtsOmsInput.class);
-    private final RendererRollbackInput rendererRollbackInput = mock(RendererRollbackInput.class);
-    private DeviceRendererRPCImpl deviceRendererRPC = null;
+@ExtendWith(MockitoExtension.class)
+public class DeviceRendererRPCImplTest {
+    @Mock
+    private DeviceRendererService deviceRendererService;
+    @Mock
+    private RpcProviderService rpcProviderService;
+    @Mock
+    private DeviceRendererService deviceRenderer;
+    @Mock
+    private OtnDeviceRendererService otnDeviceRendererService;
+    @Spy
+    private ServicePathInput servicePathInput;
+    @Mock
+    private CreateOtsOmsInput createOtsOmsInput;
+    @Mock
+    private RendererRollbackInput rendererRollbackInput;
+    private ServicePath servicePath;
+    private RendererRollback rendererRollback;
+    private CreateOtsOms createOtsOms;
 
     @BeforeEach
     void setup() {
-        deviceRendererRPC = new DeviceRendererRPCImpl(deviceRenderer, otnDeviceRenderer);
+        servicePath = new ServicePathImpl(deviceRenderer);
+        rendererRollback = new RendererRollbackImpl(deviceRenderer);
+        createOtsOms = new CreateOtsOmsImpl(deviceRenderer);
+    }
+
+    @Test
+    void testRpcRegistration() {
+        new DeviceRendererRPCImpl(rpcProviderService, deviceRenderer, otnDeviceRendererService);
+        verify(rpcProviderService, times(1)).registerRpcImplementations(
+                any(ServicePathImpl.class), any(OtnServicePathImpl.class), any(RendererRollbackImpl.class),
+                any(CreateOtsOmsImpl.class));
     }
 
     @Test
     void testServicePathCreateOption() {
         when(servicePathInput.getOperation()).thenReturn(Action.Create);
-        deviceRendererRPC.servicePath(servicePathInput);
+        servicePath.invoke(servicePathInput);
         verify(deviceRenderer, times(1)).setupServicePath(servicePathInput, null);
     }
 
     @Test
     void testServicePathDeleteOption() {
         when(servicePathInput.getOperation()).thenReturn(Action.Delete);
-        deviceRendererRPC.servicePath(servicePathInput);
+        servicePath.invoke(servicePathInput);
         verify(deviceRenderer, times(1)).deleteServicePath(servicePathInput);
     }
 
@@ -58,7 +92,7 @@ public class DeviceRendererRPCImplTest extends AbstractTest {
     void testRendererRollback() {
         when(deviceRenderer.rendererRollback(rendererRollbackInput))
             .thenReturn(new RendererRollbackOutputBuilder().build());
-        deviceRendererRPC.rendererRollback(rendererRollbackInput);
+        rendererRollback.invoke(rendererRollbackInput);
         verify(deviceRenderer, times(1)).rendererRollback(rendererRollbackInput);
     }
 
@@ -67,15 +101,20 @@ public class DeviceRendererRPCImplTest extends AbstractTest {
         when(createOtsOmsInput.getNodeId()).thenReturn("nodeId");
         when(createOtsOmsInput.getLogicalConnectionPoint()).thenReturn("logicalConnectionPoint");
         when(deviceRenderer.createOtsOms(createOtsOmsInput)).thenReturn(null);
-        deviceRendererRPC.createOtsOms(createOtsOmsInput);
+        createOtsOms.invoke(createOtsOmsInput);
         verify(deviceRenderer, times(1)).createOtsOms(createOtsOmsInput);
     }
 
     @Test
-    void testCreateOtsOmsReturnException() throws OpenRoadmInterfaceException {
+    void testCreateOtsOmsReturnException()
+            throws OpenRoadmInterfaceException, InterruptedException, ExecutionException {
         when(createOtsOmsInput.getNodeId()).thenReturn("nodeId");
         when(createOtsOmsInput.getLogicalConnectionPoint()).thenReturn("logicalConnectionPoint");
         when(deviceRenderer.createOtsOms(createOtsOmsInput)).thenThrow(OpenRoadmInterfaceException.class);
-        assertNull(deviceRendererRPC.createOtsOms(createOtsOmsInput));
+        ListenableFuture<RpcResult<CreateOtsOmsOutput>> result = createOtsOms.invoke(createOtsOmsInput);
+        assertTrue(result.isDone());
+        assertFalse(result.get().isSuccessful());
+        assertNull(result.get().getResult());
+        assertEquals("to create oms and ots interfaces", result.get().getErrors().get(0).getMessage());
     }
 }
diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/stub/OlmServiceStub.java
deleted file mode 100644 (file)
index dc8bfb1..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright © 2018 Orange Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.renderer.stub;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.ArrayList;
-import org.opendaylight.transportpce.common.ResponseCodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossBaseOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.CalculateSpanlossCurrentOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerResetOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-
-
-public class OlmServiceStub implements TransportpceOlmService {
-
-    @Override public ListenableFuture<RpcResult<CalculateSpanlossCurrentOutput>> calculateSpanlossCurrent(
-        CalculateSpanlossCurrentInput input) {
-        return null;
-    }
-
-    @Override public ListenableFuture<RpcResult<GetPmOutput>> getPm(GetPmInput input) {
-        GetPmOutput output = new GetPmOutputBuilder()
-            .setNodeId("node1").setMeasurements(new ArrayList<>()).build();
-        return RpcResultBuilder.success(
-            output).buildFuture();
-    }
-
-    @Override public ListenableFuture<RpcResult<ServicePowerTurndownOutput>> servicePowerTurndown(
-        ServicePowerTurndownInput input) {
-        return RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
-                .setResult("Success").build()).buildFuture();
-    }
-
-    @Override public ListenableFuture<RpcResult<CalculateSpanlossBaseOutput>> calculateSpanlossBase(
-        CalculateSpanlossBaseInput input) {
-        return null;
-    }
-
-    @Override public ListenableFuture<RpcResult<ServicePowerResetOutput>> servicePowerReset(
-            ServicePowerResetInput input) {
-        return null;
-    }
-
-    @Override public ListenableFuture<RpcResult<ServicePowerSetupOutput>> servicePowerSetup(
-            ServicePowerSetupInput input) {
-        return RpcResultBuilder.success(new ServicePowerSetupOutputBuilder()
-            .setResult(ResponseCodes.SUCCESS_RESULT).build()).buildFuture();
-    }
-}
index 534b369b977f9b9cc949ff195d5e17e124cf3b8a..cbd13bdeccb6778e278fde068994ae2dd5902269 100644 (file)
@@ -16,14 +16,14 @@ import static org.mockito.Mockito.spy;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.List;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.test.stub.MountPointStub;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrail;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.GetConnectionPortTrailOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceService;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.get.connection.port.trail.output.Ports;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -32,17 +32,17 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 public final class MountPointUtils {
 
     public static MountPointStub getMountPoint(List<Ports> ports, DataBroker dataBroker) {
-        RpcConsumerRegistry rpcConsumerRegistry = spy(RpcConsumerRegistry.class);
-        OrgOpenroadmDeviceService orgOpenroadmDeviceService = spy(OrgOpenroadmDeviceService.class);
+        RpcService rpcService = spy(RpcService.class);
+        GetConnectionPortTrail getConnectionPortTrail = spy(GetConnectionPortTrail.class);
         GetConnectionPortTrailOutputBuilder getConnectionPortTrailOutputBldr
                 = new GetConnectionPortTrailOutputBuilder();
         getConnectionPortTrailOutputBldr.setPorts(ports);
         ListenableFuture<RpcResult<GetConnectionPortTrailOutput>> rpcResultFuture =
                 RpcResultBuilder.success(getConnectionPortTrailOutputBldr.build()).buildFuture();
-        doReturn(rpcResultFuture).when(orgOpenroadmDeviceService).getConnectionPortTrail(any());
-        doReturn(orgOpenroadmDeviceService).when(rpcConsumerRegistry).getRpcService(any());
+        doReturn(rpcResultFuture).when(getConnectionPortTrail.invoke(any()));
+        doReturn(getConnectionPortTrail).when(rpcService).getRpc(any());
         MountPointStub mountPoint = new MountPointStub(dataBroker);
-        mountPoint.setRpcConsumerRegistry(rpcConsumerRegistry);
+        mountPoint.setRpcService(rpcService);
         return mountPoint;
     }
 
index d6d1e086693aef223daf9df3e0ea38d4eeec3afc..3022f9616ba447fe345d1fefafbbfb504bf833c0 100644 (file)
@@ -23,23 +23,23 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.ServiceAEndBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToABuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
index 2290fabff0cec4a86a8f45338ee169bdc230a820..7921fa461249a504caa7ceacdeb8bb29ddcfe65c 100644 (file)
@@ -10,23 +10,23 @@ package org.opendaylight.transportpce.renderer.utils;
 
 import java.util.HashMap;
 import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev211210.FrequencyTHz;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev230526.FrequencyTHz;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToABuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescription;
index 36e9c3e2bc934e0c006cca1d8f1841615f5370aa..30de3466321ec09933f7b359d30e269e0005fb45 100644 (file)
@@ -15,17 +15,17 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-servicehandler</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -47,11 +47,11 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
@@ -102,6 +102,11 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-binding-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
index 1cfc8bc3d6d41bb7cf001c2ec59733146b464914..c63d28341d725f33bdb55114ab53485c6eeee49d 100644 (file)
@@ -8,10 +8,10 @@
 
 package org.opendaylight.transportpce.servicehandler;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeader;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeader;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -21,7 +21,7 @@ public class CatalogInput {
     private SdncRequestHeader sdncRequestHeader;
     private OperationalModeInfo operationalModeInfo;
 
-    private org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.specific.operational.modes
+    private org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.specific.operational.modes
             .to.catalog.input.OperationalModeInfo operationalModeInfoSpecific;
 
     public CatalogInput(AddOpenroadmOperationalModesToCatalogInput addORToCatalogInput) {
@@ -52,13 +52,13 @@ public class CatalogInput {
         this.operationalModeInfo = operationalModeInfo;
     }
 
-    public org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.specific.operational.modes
+    public org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.specific.operational.modes
             .to.catalog.input.OperationalModeInfo getOperationalModeInfoSpecific() {
         return operationalModeInfoSpecific;
     }
 
     public void setOperationalModeInfoSpecific(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
                     .add.specific.operational.modes.to.catalog.input.OperationalModeInfo
                 operationalModeInfoSpecific) {
         this.operationalModeInfoSpecific = operationalModeInfoSpecific;
index c42ed0f5261114cd597b8d7ece576845670e4a6f..3c37c929c4ec8b0ce01124e2c161b6fa91a12b2e 100644 (file)
@@ -7,35 +7,36 @@
  */
 package org.opendaylight.transportpce.servicehandler;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.common.constraints.LinkIdentifier;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.common.constraints.LinkIdentifierKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRouting;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRoutingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Distance;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.DistanceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Diversity;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.DiversityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Exclude;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.ExcludeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.HopCount;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.HopCountBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Include;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.IncludeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Latency;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.LatencyBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.TEMetric;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.TEMetricBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.common.constraints.LinkIdentifier;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRouting;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRoutingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Distance;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.DistanceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Diversity;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.DiversityBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Exclude;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.ExcludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.HopCount;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.HopCountBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Include;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.IncludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Latency;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.LatencyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.TEMetric;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.TEMetricBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierListKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraintsBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -126,51 +127,51 @@ public final class DowngradeConstraints {
             } else {
                 Set<String> fiberList = new HashSet<>(includeBldr.getFiberBundle());
                 fiberList.addAll(hard.getFiberBundle());
-                includeBldr.setFiberBundle(new HashSet<>(fiberList));
+                includeBldr.setFiberBundle(new ArrayList<>(fiberList));
             }
         }
         if (hard.getNodeId() != null && !hard.getNodeId().isEmpty()) {
             if (includeBldr.getNodeId() == null) {
                 includeBldr.setNodeId(hard.getNodeId());
             } else {
-                Set<NodeIdType> nodeIdList = new HashSet<>(includeBldr.getNodeId());
+                List<NodeIdType> nodeIdList = new ArrayList<>(includeBldr.getNodeId());
                 nodeIdList.addAll(hard.getNodeId());
-                includeBldr.setNodeId(new HashSet<>(nodeIdList));
+                includeBldr.setNodeId(new ArrayList<>(nodeIdList));
             }
         }
         if (hard.getSite() != null && !hard.getSite().isEmpty()) {
             if (includeBldr.getSite() == null) {
                 includeBldr.setSite(hard.getSite());
             } else {
-                Set<String> siteList = new HashSet<>(includeBldr.getSite());
+                List<String> siteList = new ArrayList<>(includeBldr.getSite());
                 siteList.addAll(hard.getSite());
-                includeBldr.setSite(new HashSet<>(siteList));
+                includeBldr.setSite(new ArrayList<>(siteList));
             }
         }
         if (hard.getSrlgId() != null && !hard.getSrlgId().isEmpty()) {
             if (includeBldr.getSrlgId() == null) {
                 includeBldr.setSrlgId(hard.getSrlgId());
             } else {
-                Set<Uint32> srlgList = new HashSet<>(includeBldr.getSrlgId());
+                List<Uint32> srlgList = new ArrayList<>(includeBldr.getSrlgId());
                 srlgList.addAll(hard.getSrlgId());
-                includeBldr.setSrlgId(new HashSet<>(srlgList));
+                includeBldr.setSrlgId(new ArrayList<>(srlgList));
             }
         }
         if (hard.getSupportingServiceName() != null && !hard.getSupportingServiceName().isEmpty()) {
             if (includeBldr.getSupportingServiceName() == null) {
                 includeBldr.setSupportingServiceName(hard.getSupportingServiceName());
             } else {
-                Set<String> serviceList = new HashSet<>(includeBldr.getSupportingServiceName());
+                List<String> serviceList = new ArrayList<>(includeBldr.getSupportingServiceName());
                 serviceList.addAll(hard.getSupportingServiceName());
-                includeBldr.setSupportingServiceName(new HashSet<>(serviceList));
+                includeBldr.setSupportingServiceName(new ArrayList<>(serviceList));
             }
         }
         if (hard.getLinkIdentifier() != null && !hard.getLinkIdentifier().isEmpty()) {
             if (includeBldr.getLinkIdentifier() == null) {
                 includeBldr.setLinkIdentifier(hard.getLinkIdentifier());
             } else {
-                Map<LinkIdentifierKey, LinkIdentifier> linkList = new HashMap<>(includeBldr.getLinkIdentifier());
-                linkList.putAll(hard.getLinkIdentifier());
+                List<LinkIdentifier> linkList = new ArrayList<>(includeBldr.getLinkIdentifier());
+                linkList.addAll(hard.getLinkIdentifier());
                 includeBldr.setLinkIdentifier(linkList);
             }
         }
@@ -186,51 +187,51 @@ public final class DowngradeConstraints {
             } else {
                 Set<String> fiberList = new HashSet<>(excludeBldr.getFiberBundle());
                 fiberList.addAll(hard.getFiberBundle());
-                excludeBldr.setFiberBundle(new HashSet<>(fiberList));
+                excludeBldr.setFiberBundle(new ArrayList<>(fiberList));
             }
         }
         if (hard.getNodeId() != null && !hard.getNodeId().isEmpty()) {
             if (excludeBldr.getNodeId() == null) {
                 excludeBldr.setNodeId(hard.getNodeId());
             } else {
-                Set<NodeIdType> nodeIdList = new HashSet<>(excludeBldr.getNodeId());
+                List<NodeIdType> nodeIdList = new ArrayList<>(excludeBldr.getNodeId());
                 nodeIdList.addAll(hard.getNodeId());
-                excludeBldr.setNodeId(new HashSet<>(nodeIdList));
+                excludeBldr.setNodeId(new ArrayList<>(nodeIdList));
             }
         }
         if (hard.getSite() != null && !hard.getSite().isEmpty()) {
             if (excludeBldr.getSite() == null) {
                 excludeBldr.setSite(hard.getSite());
             } else {
-                Set<String> siteList = new HashSet<>(excludeBldr.getSite());
+                List<String> siteList = new ArrayList<>(excludeBldr.getSite());
                 siteList.addAll(hard.getSite());
-                excludeBldr.setSite(new HashSet<>(siteList));
+                excludeBldr.setSite(new ArrayList<>(siteList));
             }
         }
         if (hard.getSrlgId() != null && !hard.getSrlgId().isEmpty()) {
             if (excludeBldr.getSrlgId() == null) {
                 excludeBldr.setSrlgId(hard.getSrlgId());
             } else {
-                Set<Uint32> srlgList = new HashSet<>(excludeBldr.getSrlgId());
+                List<Uint32> srlgList = new ArrayList<>(excludeBldr.getSrlgId());
                 srlgList.addAll(hard.getSrlgId());
-                excludeBldr.setSrlgId(new HashSet<>(srlgList));
+                excludeBldr.setSrlgId(new ArrayList<>(srlgList));
             }
         }
         if (hard.getSupportingServiceName() != null && !hard.getSupportingServiceName().isEmpty()) {
             if (excludeBldr.getSupportingServiceName() == null) {
                 excludeBldr.setSupportingServiceName(hard.getSupportingServiceName());
             } else {
-                Set<String> serviceList = new HashSet<>(excludeBldr.getSupportingServiceName());
+                List<String> serviceList = new ArrayList<>(excludeBldr.getSupportingServiceName());
                 serviceList.addAll(hard.getSupportingServiceName());
-                excludeBldr.setSupportingServiceName(new HashSet<>(serviceList));
+                excludeBldr.setSupportingServiceName(new ArrayList<>(serviceList));
             }
         }
         if (hard.getLinkIdentifier() != null && !hard.getLinkIdentifier().isEmpty()) {
             if (excludeBldr.getLinkIdentifier() == null) {
                 excludeBldr.setLinkIdentifier(hard.getLinkIdentifier());
             } else {
-                Map<LinkIdentifierKey, LinkIdentifier> linkList = new HashMap<>(excludeBldr.getLinkIdentifier());
-                linkList.putAll(hard.getLinkIdentifier());
+                List<LinkIdentifier> linkList = new ArrayList<>(excludeBldr.getLinkIdentifier());
+                linkList.addAll(hard.getLinkIdentifier());
                 excludeBldr.setLinkIdentifier(linkList);
             }
         }
@@ -241,14 +242,14 @@ public final class DowngradeConstraints {
         DiversityBuilder diversityBldr = soft == null ? new DiversityBuilder() : new DiversityBuilder(soft);
 
         Map<
-            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service
+            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service
                     .constraints.ServiceIdentifierListKey,
-            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service
+            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service
                     .constraints.ServiceIdentifierList> sil =
                 diversityBldr.getServiceIdentifierList() == null
                     ? new HashMap<>()
                     : new HashMap<>(diversityBldr.getServiceIdentifierList());
-        if (!hard.getServiceIdentifierList().isEmpty()) {
+        if (!hard.nonnullServiceIdentifierList().isEmpty()) {
             sil.putAll(hard.getServiceIdentifierList());
             diversityBldr.setServiceIdentifierList(sil);
         }
index 302227797ce20ef59fe3dfc1c4f80201d7dcc7a3..1ecb8114021a4174bac5b45031fa7fcf6504f933 100644 (file)
@@ -9,19 +9,27 @@ package org.opendaylight.transportpce.servicehandler;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.HashMap;
+import java.util.Map;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.response.parameters.ResponseParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceEndpoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.response.parameters.ResponseParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.hierarchy.TransportAssignmentBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.hierarchy.transport.assignment.McTtpBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.hierarchy.transport.assignment.NmcCtp;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.hierarchy.transport.assignment.NmcCtpBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.hierarchy.transport.assignment.NmcCtpKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.LifecycleState;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
@@ -46,39 +54,42 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev21092
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTUflex;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OduRateIdentity;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OtuRateIdentity;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list.services.SupportingServiceHierarchy;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list.services.SupportingServiceHierarchyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list.services.SupportingServiceHierarchyKey;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirection;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirection;
@@ -269,10 +280,10 @@ public final class ModelMappingUtils {
             .build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
             .path.computation.reroute.request.input.ServiceAEnd createServiceAEndReroute(ServiceEndpoint serviceAEnd) {
-        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
-                .path.computation.reroute.request.input.ServiceAEndBuilder()
+        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
+                    .path.computation.reroute.request.input.ServiceAEndBuilder()
                 .setClli(serviceAEnd.getClli())
                 .setNodeId(serviceAEnd.getNodeId().getValue())
                 .setRxDirection(createRxDirection(serviceAEnd.getRxDirection().values().stream().findFirst()
@@ -295,10 +306,10 @@ public final class ModelMappingUtils {
             .build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
             .path.computation.reroute.request.input.ServiceZEnd createServiceZEndReroute(ServiceEndpoint serviceZEnd) {
-        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
-                .path.computation.reroute.request.input.ServiceZEndBuilder()
+        return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
+                    .path.computation.reroute.request.input.ServiceZEndBuilder()
                 .setClli(serviceZEnd.getClli())
                 .setNodeId(serviceZEnd.getNodeId().getValue())
                 .setRxDirection(createRxDirection(serviceZEnd.getRxDirection().values().stream().findFirst()
@@ -311,13 +322,13 @@ public final class ModelMappingUtils {
     }
 
     public static RxDirection createRxDirection(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                 .service.endpoint.RxDirection rxDirection) {
         return new RxDirectionBuilder().setPort(rxDirection.getPort()).build();
     }
 
     public static TxDirection createTxDirection(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                 .service.endpoint.TxDirection txDirection) {
         return new TxDirectionBuilder().setPort(txDirection.getPort()).build();
     }
@@ -477,11 +488,11 @@ public final class ModelMappingUtils {
                 .setSdncRequestHeader(serviceCreateInput.getSdncRequestHeader())
                 .setLifecycleState(LifecycleState.Planned)
                 .setServiceAEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceAEndBuilder(serviceCreateInput.getServiceAEnd())
                         .build())
                 .setServiceZEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceZEndBuilder(serviceCreateInput.getServiceZEnd())
                         .build())
                 .build();
@@ -499,11 +510,11 @@ public final class ModelMappingUtils {
                 .setSoftConstraints(serviceReconfigureInput.getSoftConstraints())
                 .setLifecycleState(LifecycleState.Planned)
                 .setServiceAEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceAEndBuilder(serviceReconfigureInput.getServiceAEnd())
                         .build())
                 .setServiceZEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceZEndBuilder(serviceReconfigureInput.getServiceZEnd())
                         .build())
                 .build();
@@ -516,9 +527,37 @@ public final class ModelMappingUtils {
         return new ServicesBuilder().withKey(new ServicesKey("unknown")).build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
-            .temp.service.list.Services mappingServices(TempServiceCreateInput tempServiceCreateInput) {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
+    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+            .temp.service.list.Services mappingServices(TempServiceCreateInput tempServiceCreateInput,
+                                                        PathDescription pathDescription) {
+        Map<SupportingServiceHierarchyKey, SupportingServiceHierarchy> supportingServiceHierarchyMap = new HashMap<>();
+        Map<NmcCtpKey, NmcCtp> nmcCtpMap = new HashMap<>();
+        SupportingServiceHierarchyKey supportingServiceHierarchyKey = new SupportingServiceHierarchyKey(
+                tempServiceCreateInput.getCommonId());
+        // TODO: here we assume the A-Z and Z-A has parameters
+        LOG.info("Min and Max frequencies are {} {}", pathDescription.getAToZDirection().getAToZMinFrequency(),
+                pathDescription.getAToZDirection().getAToZMinFrequency());
+        nmcCtpMap.put(
+            new NmcCtpKey("1"),
+            new NmcCtpBuilder()
+                .setId("1")
+                .setFrequency(pathDescription.getAToZDirection().getCentralFrequency())
+                .setWidth(pathDescription.getAToZDirection().getWidth())
+                .build());
+        supportingServiceHierarchyMap.put(
+            supportingServiceHierarchyKey,
+            new SupportingServiceHierarchyBuilder().setServiceIdentifier(tempServiceCreateInput.getCommonId())
+                .setTransportAssignment(
+                    new TransportAssignmentBuilder()
+                        .setMcTtp(
+                            new McTtpBuilder()
+                                .setMaxFreq(pathDescription.getAToZDirection().getAToZMaxFrequency())
+                                .setMinFreq(pathDescription.getAToZDirection().getAToZMinFrequency())
+                                .build())
+                        .setNmcCtp(nmcCtpMap)
+                        .build())
+                .build());
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
                 .temp.service.list.ServicesBuilder()
             .setServiceName(tempServiceCreateInput.getCommonId())
             .setAdministrativeState(AdminStates.OutOfService)
@@ -532,11 +571,12 @@ public final class ModelMappingUtils {
             .setSdncRequestHeader(tempServiceCreateInput.getSdncRequestHeader())
             .setLifecycleState(LifecycleState.Planned)
             .setServiceAEnd(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                     .service.ServiceAEndBuilder(tempServiceCreateInput.getServiceAEnd()).build())
             .setServiceZEnd(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                     .service.ServiceZEndBuilder(tempServiceCreateInput.getServiceZEnd()).build())
+            .setSupportingServiceHierarchy(supportingServiceHierarchyMap)
             .build();
     }
 
@@ -621,7 +661,7 @@ public final class ModelMappingUtils {
     }
 
 
-    @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
+    @SuppressFBWarnings(
         value = "PZLA_PREFER_ZERO_LENGTH_ARRAYS",
         justification = "not relevant to return and zero length array as we need real pos")
     public static int[] findTheLongestSubstring(String s1, String s2) {
index d03293738f205a8f7bca85de93f4c5c87efb7531..dbe905ca83c3dbb53c13ea6d76e6fee005c7154c 100644 (file)
@@ -7,25 +7,25 @@
  */
 package org.opendaylight.transportpce.servicehandler;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeader;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceEndpoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeader;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.ServiceResiliency;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceZEndBuilder;
 
 /**
  * Super class of {@link ServiceCreateInput} and {@link TempServiceCreateInput}.
@@ -158,9 +158,9 @@ public class ServiceInput {
                 .setSdncRequestHeader(sdncRequestHeader)
                 .setHardConstraints(hardConstraints)
                 .setSoftConstraints(softConstraints)
-                .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service
+                .setServiceAEnd(new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service
                         .create.input.ServiceAEndBuilder(serviceAEnd).build())
-                .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service
+                .setServiceZEnd(new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service
                         .create.input.ServiceZEndBuilder(serviceZEnd).build())
                 .setCustomer(customer)
                 .setCustomerContact(customerContact)
index 6a0d01dde9d50a3069e920882bd0ee60e605b0e7..4441077bf4c871165fce30587a2bdf0f6ef8fc39 100644 (file)
@@ -7,8 +7,8 @@
  */
 package org.opendaylight.transportpce.servicehandler.catalog;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.OpenroadmOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.SpecificOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.OpenroadmOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.SpecificOperationalModes;
 
 /**
  * Store operational mode catalog into MDSAL .
index 9fd17a9074b445c3dadc6e86bc1223d8c05b68c6..56189c475890377c397be6125878ed866337d3fc 100644 (file)
@@ -13,9 +13,9 @@ import java.util.concurrent.TimeoutException;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.OpenroadmOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.SpecificOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OperationalModeCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.OpenroadmOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.SpecificOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OperationalModeCatalog;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
index 38500874cf9fb701c58faa5c48e27e7e9781578d..c7683e95f8272226d826bb5090101a3c36a79129 100644 (file)
@@ -9,19 +9,19 @@ package org.opendaylight.transportpce.servicehandler.catalog;
 
 import java.util.HashMap;
 import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.OpenroadmOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.OpenroadmOperationalModesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.SpecificOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.SpecificOperationalModesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.AmplifiersBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.GridParametersBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.RoadmsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.XpondersPluggablesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.openroadm.operational.modes.xponders.pluggables.XponderPluggableOpenroadmOperationalModeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.specific.operational.modes.SpecificOperationalModeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.OpenroadmOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.OpenroadmOperationalModesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.SpecificOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.SpecificOperationalModesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.AmplifiersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.GridParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.RoadmsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.XpondersPluggablesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.openroadm.operational.modes.xponders.pluggables.XponderPluggableOpenroadmOperationalModeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.specific.operational.modes.SpecificOperationalModeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -81,16 +81,16 @@ public final class CatalogMapper {
      * Preparation of Xponders Pluggables for OpenroadmOperationalModes object.
      */
     private static void saveXpondersPlugabbles(OperationalModeInfo modesFromInput) {
-        Map<org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210
+        Map<org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
                 .operational.mode.catalog.openroadm.operational.modes.xponders.pluggables
                 .XponderPluggableOpenroadmOperationalModeKey,
-            org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
                 .operational.mode.catalog.openroadm.operational.modes.xponders.pluggables
                 .XponderPluggableOpenroadmOperationalMode> mapFinal = new HashMap<>();
         for (var entry : modesFromInput.getXpondersPluggables().getXponderPluggableOpenroadmOperationalMode()
                 .entrySet()) {
             mapFinal.put(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
                     .operational.mode.catalog.openroadm.operational.modes.xponders.pluggables
                     .XponderPluggableOpenroadmOperationalModeKey(entry.getKey().toString()),
                 new XponderPluggableOpenroadmOperationalModeBuilder(entry.getValue())
@@ -116,19 +116,19 @@ public final class CatalogMapper {
     /**
      * Preparation of Specific Operational Modes for SpecificOperationalModes object.
      */
-    private static  void saveSpecificOperationalModes(org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
+    private static  void saveSpecificOperationalModes(org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
            .add.specific.operational.modes.to.catalog.input.operational.mode.info.SpecificOperationalModes
                 specificModesFromInput) {
-        Map<org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210
+        Map<org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
                 .operational.mode.catalog.specific.operational.modes.SpecificOperationalModeKey,
-            org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
                 .operational.mode.catalog.specific.operational.modes.SpecificOperationalMode>
             mapFinal = new HashMap<>();
         for (var entry : specificModesFromInput.getSpecificOperationalMode().entrySet()) {
             SpecificOperationalModeBuilder specificModeBuilder = new SpecificOperationalModeBuilder();
             specificModeBuilder.fieldsFrom(entry.getValue());
             mapFinal.put(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526
                     .operational.mode.catalog.specific.operational.modes.SpecificOperationalModeKey(
                         entry.getKey().toString()),
                 specificModeBuilder
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/AddOpenroadmOperationalModesToCatalogImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/AddOpenroadmOperationalModesToCatalogImpl.java
new file mode 100644 (file)
index 0000000..2170117
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.OperationResult;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.CatalogInput;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.catalog.CatalogMapper;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.validation.CatalogValidation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.OpenroadmOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class AddOpenroadmOperationalModesToCatalogImpl implements AddOpenroadmOperationalModesToCatalog {
+    private static final Logger LOG = LoggerFactory.getLogger(AddOpenroadmOperationalModesToCatalogImpl.class);
+    private static final String ADD_OR_TO_CATALOG_MSG = "addORToCatalog: {}";
+
+    private CatalogDataStoreOperations catalogDataStoreOperations;
+
+    public AddOpenroadmOperationalModesToCatalogImpl(CatalogDataStoreOperations catalogDataStoreOperations) {
+        this.catalogDataStoreOperations = catalogDataStoreOperations;
+    }
+
+    /**
+     * Implementation of the RPC to set OR  operational modes in the catalog of the controller.
+     * Semantics of the RPC is such that the information in the input replaces the full content
+     * of the OR operational modes catalog in the config data store. Incremental changes to the
+     * catalog, if required, must be done via individual PUT/POST/DELETE RESTconf APIs.
+     *
+     * @param input AddOpenroadmOperationalModesToCatalogInput to be added to Catalog
+     * @return Result of the request
+     */
+    @Override
+    public ListenableFuture<RpcResult<AddOpenroadmOperationalModesToCatalogOutput>> invoke(
+            AddOpenroadmOperationalModesToCatalogInput input) {
+        LOG.info("RPC addOpenroadmOperationalModesToCatalog in progress");
+        LOG.debug(" Input openRoadm {}", input);
+        // Validation
+        OperationResult validationResult = CatalogValidation.validateORCatalogRequest(
+                new CatalogInput(input), RpcActions.FillCatalogWithOrOperationalModes);
+        if (! validationResult.isSuccess()) {
+            LOG.warn(ADD_OR_TO_CATALOG_MSG, LogMessages.ABORT_OR_TO_CATALOG_FAILED);
+            return ModelMappingUtils.addOpenroadmServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info(" Request System Id {} " ,input.getSdncRequestHeader().getRequestSystemId());
+        LOG.info(" Rpc Action {} " ,input.getSdncRequestHeader().getRpcAction());
+
+        OpenroadmOperationalModes objToSave = CatalogMapper.createORModesToSave(input);
+        catalogDataStoreOperations.addOpenroadmOperationalModesToCatalog(objToSave);
+        LOG.info("RPC addOpenroadmOperationalModesToCatalog Completed");
+        return ModelMappingUtils.addOpenroadmServiceReply(input, ResponseCodes.FINAL_ACK_YES,
+                validationResult.getResultMessage(), ResponseCodes.RESPONSE_OK);
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/AddSpecificOperationalModesToCatalogImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/AddSpecificOperationalModesToCatalogImpl.java
new file mode 100644 (file)
index 0000000..c65a169
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.OperationResult;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.CatalogInput;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.catalog.CatalogMapper;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.validation.CatalogValidation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev230526.operational.mode.catalog.SpecificOperationalModes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class AddSpecificOperationalModesToCatalogImpl implements AddSpecificOperationalModesToCatalog {
+    private static final Logger LOG = LoggerFactory.getLogger(AddSpecificOperationalModesToCatalogImpl.class);
+    private static final String ADD_SPECIFIC_TO_CATALOG_MSG = "addSpecificToCatalog: {}";
+
+    private CatalogDataStoreOperations catalogDataStoreOperations;
+
+    public AddSpecificOperationalModesToCatalogImpl(CatalogDataStoreOperations catalogDataStoreOperations) {
+        this.catalogDataStoreOperations = catalogDataStoreOperations;
+    }
+
+    /**
+     * Implementation of the RPC to set specific operational modes in the catalog of the controller.
+     * Semantics of the RPC is such that the information in the input replaces the full content
+     * of the specific operational modes catalog in the config data store. Incremental changes to the
+     * catalog, if required, must be done via individual PUT/POST/DELETE RESTconf APIs.
+     *
+     * @param input AddSpecificOperationalModesToCatalogInput to be added to Catalog
+     * @return Result of the request
+     */
+    @Override
+    public ListenableFuture<RpcResult<AddSpecificOperationalModesToCatalogOutput>> invoke(
+            AddSpecificOperationalModesToCatalogInput input) {
+        LOG.info("RPC addSpecificOperationalModesToCatalog in progress");
+        LOG.debug(" Input openSpecificRoadm {}", input);
+        // Validation
+        OperationResult validationResult = CatalogValidation.validateSpecificCatalogRequest(
+                new CatalogInput(input), RpcActions.FillCatalogWithSpecificOperationalModes);
+        if (! validationResult.isSuccess()) {
+            LOG.warn(ADD_SPECIFIC_TO_CATALOG_MSG, LogMessages.ABORT_SPECIFIC_TO_CATALOG_FAILED);
+            return ModelMappingUtils.addSpecificOpenroadmServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info(" Request System Id {} " ,input.getSdncRequestHeader().getRequestSystemId());
+        LOG.info(" Rpc Action {} " ,input.getSdncRequestHeader().getRpcAction());
+
+        SpecificOperationalModes objToSave = CatalogMapper.createSpecificModesToSave(input);
+        catalogDataStoreOperations.addSpecificOperationalModesToCatalog(objToSave);
+        LOG.info("RPC addSpecificOperationalModesToCatalog Completed");
+        return ModelMappingUtils.addSpecificOpenroadmServiceReply(input, ResponseCodes.FINAL_ACK_YES,
+                validationResult.getResultMessage(), ResponseCodes.RESPONSE_OK);
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceCreateImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceCreateImpl.java
new file mode 100644 (file)
index 0000000..8c2a5f9
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.transportpce.common.OperationResult;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.validation.ServiceCreateValidation;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ServiceCreateImpl implements ServiceCreate {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceCreateImpl.class);
+    private static final String SERVICE_CREATE_MSG = "serviceCreate: {}";
+    private static final String PUBLISHER = "ServiceHandler";
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PceListener pceListener;
+    private RendererListener rendererListener;
+    private NetworkListener networkListener;
+    private PCEServiceWrapper pceServiceWrapper;
+    private NotificationPublishService notificationPublishService;
+
+    public ServiceCreateImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            final PceListener pceListener, RendererListener rendererListener, NetworkListener networkListener,
+            PCEServiceWrapper pceServiceWrapper, NotificationPublishService notificationPublishService) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceListener = pceListener;
+        this.rendererListener = rendererListener;
+        this.networkListener = networkListener;
+        this.pceServiceWrapper = pceServiceWrapper;
+        this.notificationPublishService = notificationPublishService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServiceCreateOutput>> invoke(ServiceCreateInput input) {
+        LOG.info("RPC serviceCreate received");
+        // Validation
+        OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(
+                new ServiceInput(input), RpcActions.ServiceCreate);
+        if (!validationResult.isSuccess()) {
+            LOG.warn(SERVICE_CREATE_MSG, LogMessages.ABORT_VALID_FAILED);
+            return ModelMappingUtils.createCreateServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
+        }
+        //Check any presence of services with the same nameequipmentNotification
+        String serviceName = input.getServiceName();
+        if (this.serviceDataStoreOperations.getService(serviceName).isPresent()) {
+            LOG.warn(SERVICE_CREATE_MSG, LogMessages.serviceInDS(serviceName));
+            return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.serviceInDS(serviceName), ResponseCodes.RESPONSE_FAILED);
+        }
+        // TODO: Here we also have to check if there is an associated temp-service.
+        // TODO: If there is one, delete it from the temp-service-list??
+        this.pceListener.setInput(new ServiceInput(input));
+        this.pceListener.setServiceReconfigure(false);
+        this.pceListener.setTempService(false);
+        this.pceListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.rendererListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        this.rendererListener.setServiceInput(new ServiceInput(input));
+        // This ensures that the temp-service boolean is false, especially, when
+        // service-create is initiated after the temp-service-create
+        this.rendererListener.setTempService(false);
+        this.networkListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        LOG.debug(SERVICE_CREATE_MSG, LogMessages.PCE_CALLING);
+        PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
+        if (output == null) {
+            LOG.warn(SERVICE_CREATE_MSG, LogMessages.ABORT_PCE_FAILED);
+            sendNbiNotification(new PublishNotificationProcessServiceBuilder()
+                    .setServiceName(serviceName)
+                    .setServiceAEnd(new ServiceAEndBuilder(input.getServiceAEnd()).build())
+                    .setServiceZEnd(new ServiceZEndBuilder(input.getServiceZEnd()).build())
+                    .setCommonId(input.getCommonId())
+                    .setConnectionType(input.getConnectionType())
+                    .setResponseFailed(LogMessages.ABORT_PCE_FAILED)
+                    .setMessage("ServiceCreate request failed ...")
+                    .setOperationalState(State.Degraded)
+                    .setPublisherName(PUBLISHER)
+                    .build());
+            return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info("RPC serviceCreate in progress...");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createCreateServiceReply(
+                input, common.getAckFinalIndicator(),
+                common.getResponseMessage(), common.getResponseCode());
+    }
+
+    /**
+     * Send notification to NBI notification in order to publish message.
+     * @param service PublishNotificationService
+     */
+    private void sendNbiNotification(PublishNotificationProcessService service) {
+        try {
+            notificationPublishService.putNotification(service);
+        } catch (InterruptedException e) {
+            LOG.warn("Cannot send notification to nbi", e);
+            Thread.currentThread().interrupt();
+        }
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceDeleteImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceDeleteImpl.java
new file mode 100644 (file)
index 0000000..1bb9d53
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Optional;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.RendererServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
+import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDelete;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ServiceDeleteImpl implements ServiceDelete {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceDeleteImpl.class);
+    private static final String SERVICE_DELETE_MSG = "serviceDelete: {}";
+    private static final String PUBLISHER = "ServiceHandler";
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PceListener pceListener;
+    private RendererListener rendererListener;
+    private NetworkListener networkListener;
+    private RendererServiceWrapper rendererServiceWrapper;
+    private NotificationPublishService notificationPublishService;
+
+    public ServiceDeleteImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            final PceListener pceListener, RendererListener rendererListener, NetworkListener networkListener,
+            RendererServiceWrapper rendererServiceWrapper,
+            NotificationPublishService notificationPublishService) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceListener = pceListener;
+        this.rendererListener = rendererListener;
+        this.networkListener = networkListener;
+        this.rendererServiceWrapper = rendererServiceWrapper;
+        this.notificationPublishService = notificationPublishService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServiceDeleteOutput>> invoke(ServiceDeleteInput input) {
+        String serviceName = input.getServiceDeleteReqInfo().getServiceName();
+        LOG.info("RPC serviceDelete request received for {}", serviceName);
+        /*
+         * Upon receipt of service-deleteService RPC, service header and sdnc-request
+         * header compliance are verified.
+         */
+        ComplianceCheckResult serviceHandlerCheckResult =
+            ServicehandlerComplianceCheck.check(
+                input.getServiceDeleteReqInfo().getServiceName(),
+                input.getSdncRequestHeader(), null, RpcActions.ServiceDelete, false, true);
+        if (!serviceHandlerCheckResult.hasPassed()) {
+            LOG.warn(SERVICE_DELETE_MSG, LogMessages.ABORT_SERVICE_NON_COMPLIANT);
+            return ModelMappingUtils.createDeleteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.SERVICE_NON_COMPLIANT, ResponseCodes.RESPONSE_FAILED);
+        }
+        //Check presence of service to be deleted
+        Optional<Services> serviceOpt = this.serviceDataStoreOperations.getService(serviceName);
+        if (serviceOpt.isEmpty()) {
+            LOG.warn(SERVICE_DELETE_MSG, LogMessages.serviceNotInDS(serviceName));
+            return ModelMappingUtils.createDeleteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.serviceNotInDS(serviceName), ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.debug("serviceDelete: Service '{}' found in datastore", serviceName);
+        this.pceListener.setInput(new ServiceInput(input));
+        this.pceListener.setServiceReconfigure(false);
+        this.pceListener.setTempService(false);
+        this.pceListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.rendererListener.setTempService(false);
+        this.rendererListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        this.rendererListener.setServiceInput(new ServiceInput(input));
+        this.networkListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput
+                serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input));
+        Services service = serviceOpt.orElseThrow();
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput output =
+            this.rendererServiceWrapper.performRenderer(
+                serviceDeleteInput, ServiceNotificationTypes.ServiceDeleteResult, service);
+        if (output == null) {
+            LOG.error(SERVICE_DELETE_MSG, LogMessages.RENDERER_DELETE_FAILED);
+            sendNbiNotification(new PublishNotificationProcessServiceBuilder()
+                    .setServiceName(service.getServiceName())
+                    .setServiceAEnd(new ServiceAEndBuilder(service.getServiceAEnd()).build())
+                    .setServiceZEnd(new ServiceZEndBuilder(service.getServiceZEnd()).build())
+                    .setCommonId(service.getCommonId())
+                    .setConnectionType(service.getConnectionType())
+                    .setMessage("ServiceDelete request failed ...")
+                    .setOperationalState(State.InService)
+                    .setResponseFailed(LogMessages.RENDERER_DELETE_FAILED)
+                    .setPublisherName(PUBLISHER)
+                    .build());
+            return ModelMappingUtils.createDeleteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.RENDERER_DELETE_FAILED, ResponseCodes.RESPONSE_FAILED);
+        }
+
+        LOG.debug("RPC serviceDelete in progress...");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createDeleteServiceReply(
+                input, common.getAckFinalIndicator(),
+                common.getResponseMessage(), common.getResponseCode());
+    }
+
+    /**
+     * Send notification to NBI notification in order to publish message.
+     * @param service PublishNotificationService
+     */
+    private void sendNbiNotification(PublishNotificationProcessService service) {
+        try {
+            notificationPublishService.putNotification(service);
+        } catch (InterruptedException e) {
+            LOG.warn("Cannot send notification to nbi", e);
+            Thread.currentThread().interrupt();
+        }
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceFeasibilityCheckImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceFeasibilityCheckImpl.java
new file mode 100644 (file)
index 0000000..70bf60f
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.OperationResult;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.validation.ServiceCreateValidation;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheck;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ServiceFeasibilityCheckImpl implements ServiceFeasibilityCheck {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceFeasibilityCheckImpl.class);
+    private static final String SERVICE_FEASIBILITY_CHECK_MSG = "serviceFeasibilityCheck: {}";
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PceListener pceListener;
+    private RendererListener rendererListener;
+    private NetworkListener networkListener;
+    private PCEServiceWrapper pceServiceWrapper;
+
+    public ServiceFeasibilityCheckImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            final PceListener pceListener, RendererListener rendererListener, NetworkListener networkListener,
+            PCEServiceWrapper pceServiceWrapper) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceListener = pceListener;
+        this.rendererListener = rendererListener;
+        this.networkListener = networkListener;
+        this.pceServiceWrapper = pceServiceWrapper;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> invoke(ServiceFeasibilityCheckInput input) {
+        LOG.info("RPC serviceFeasibilityCheck received");
+        // Validation
+        ServiceInput serviceInput = new ServiceInput(input);
+        OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(serviceInput,
+                RpcActions.ServiceFeasibilityCheck);
+        if (! validationResult.isSuccess()) {
+            LOG.warn(SERVICE_FEASIBILITY_CHECK_MSG, LogMessages.ABORT_VALID_FAILED);
+            return ModelMappingUtils.createCreateServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
+        }
+        this.pceListener.setInput(new ServiceInput(input));
+        this.pceListener.setServiceReconfigure(false);
+        this.pceListener.setServiceFeasiblity(true);
+        this.pceListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.rendererListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        this.rendererListener.setServiceInput(new ServiceInput(input));
+        this.networkListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        LOG.debug(SERVICE_FEASIBILITY_CHECK_MSG, LogMessages.PCE_CALLING);
+        PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
+        if (output == null) {
+            LOG.warn(SERVICE_FEASIBILITY_CHECK_MSG, LogMessages.ABORT_PCE_FAILED);
+            return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info("RPC serviceFeasibilityCheck in progress...");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createCreateServiceReply(
+                input, common.getAckFinalIndicator(),
+                common.getResponseMessage(), common.getResponseCode());
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceHandlerProvider.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceHandlerProvider.java
new file mode 100644 (file)
index 0000000..c1c1872
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright © 2017 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class to register
+ * Servicehandler Service and Notification.
+ * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
+ *
+ */
+@Component
+public class ServiceHandlerProvider {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceHandlerProvider.class);
+    private static final InstanceIdentifier<Services> SERVICE = InstanceIdentifier.create(ServiceList.class)
+            .child(Services.class);
+
+    private final Registration pcelistenerRegistration;
+    private Registration serviceListListenerRegistration;
+    private final Registration rendererlistenerRegistration;
+    private final Registration networkmodellistenerRegistration;
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+
+    @Activate
+    public ServiceHandlerProvider(@Reference final DataBroker dataBroker,
+            @Reference NotificationService notificationService,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations,
+            @Reference PceNotificationHandler pceNotificationHandler,
+            @Reference RendererNotificationHandler rendererNotificationHandler,
+            @Reference NetworkModelNotificationHandler networkModelNotificationHandler,
+            @Reference DataTreeChangeListener<Services> serviceListener) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.serviceDataStoreOperations.initialize();
+        pcelistenerRegistration = notificationService
+            .registerCompositeListener(pceNotificationHandler.getCompositeListener());
+        rendererlistenerRegistration = notificationService
+            .registerCompositeListener(rendererNotificationHandler.getCompositeListener());
+        networkmodellistenerRegistration = notificationService
+            .registerCompositeListener(networkModelNotificationHandler.getCompositeListener());
+        final var serviceListId = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, SERVICE);
+        serviceListListenerRegistration = dataBroker.registerTreeChangeListener(serviceListId, serviceListener);
+        LOG.info("ServicehandlerProvider Session Initiated");
+        LOG.info("Transportpce controller started");
+    }
+
+    /**
+     * Method called when the blueprint container is destroyed.
+     */
+    @Deactivate
+    public void close() {
+        LOG.info("ServicehandlerProvider Closed");
+        pcelistenerRegistration.close();
+        serviceListListenerRegistration.close();
+        rendererlistenerRegistration.close();
+        networkmodellistenerRegistration.close();
+    }
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceReconfigureImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceReconfigureImpl.java
new file mode 100644 (file)
index 0000000..2999875
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Optional;
+import org.opendaylight.transportpce.common.OperationResult;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.RendererServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.validation.ServiceCreateValidation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigure;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ServiceReconfigureImpl implements ServiceReconfigure {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceReconfigureImpl.class);
+    private static final String SERVICE_RECONFIGURE_MSG = "serviceReconfigure: {}";
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PceListener pceListener;
+    private RendererListener rendererListener;
+    private NetworkListener networkListener;
+    private RendererServiceWrapper rendererServiceWrapper;
+
+    public ServiceReconfigureImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            final PceListener pceListener, RendererListener rendererListener, NetworkListener networkListener,
+            RendererServiceWrapper rendererServiceWrapper) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceListener = pceListener;
+        this.rendererListener = rendererListener;
+        this.networkListener = networkListener;
+        this.rendererServiceWrapper = rendererServiceWrapper;
+    }
+
+
+    @Override
+    public ListenableFuture<RpcResult<ServiceReconfigureOutput>> invoke(ServiceReconfigureInput input) {
+        String serviceName = input.getServiceName();
+        LOG.info("RPC serviceReconfigure received for {}", serviceName);
+        Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
+        if (servicesObject.isEmpty()) {
+            LOG.warn(SERVICE_RECONFIGURE_MSG, LogMessages.serviceNotInDS(serviceName));
+            return ModelMappingUtils.createCreateServiceReply(
+                input,
+                LogMessages.serviceNotInDS(serviceName));
+        }
+        LOG.debug("Service '{}' found in datastore", serviceName);
+        OperationResult validationResult = ServiceCreateValidation
+                .validateServiceCreateRequest(new ServiceInput(input), RpcActions.ServiceReconfigure);
+        if (!validationResult.isSuccess()) {
+            LOG.warn(SERVICE_RECONFIGURE_MSG, LogMessages.ABORT_VALID_FAILED);
+            return ModelMappingUtils.createCreateServiceReply(
+                    input,
+                    validationResult.getResultMessage());
+        }
+        this.pceListener.setInput(new ServiceInput(input));
+        this.pceListener.setServiceReconfigure(true);
+        this.pceListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.rendererListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        this.rendererListener.setServiceInput(new ServiceInput(input));
+        this.networkListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
+                .ServiceDeleteInput serviceDeleteInput =
+                        ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input));
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
+                .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
+                        ServiceNotificationTypes.ServiceDeleteResult, null);
+        if (output == null) {
+            LOG.error(SERVICE_RECONFIGURE_MSG, LogMessages.RENDERER_DELETE_FAILED);
+            return ModelMappingUtils.createCreateServiceReply(
+                    input,
+                    LogMessages.RENDERER_DELETE_FAILED);
+                    //TODO check if RpcStatus.Successful is really expected here
+        }
+        LOG.info("RPC serviceReconfigure in progress...");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createCreateServiceReply(
+                input,
+                common.getResponseMessage());
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceRerouteImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceRerouteImpl.java
new file mode 100644 (file)
index 0000000..cb6e1b1
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Map;
+import java.util.Optional;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.reroute.request.input.EndpointsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReroute;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ServiceRerouteImpl implements ServiceReroute {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceRerouteImpl.class);
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PCEServiceWrapper pceServiceWrapper;
+
+    public ServiceRerouteImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            PCEServiceWrapper pceServiceWrapper) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceServiceWrapper = pceServiceWrapper;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServiceRerouteOutput>> invoke(ServiceRerouteInput input) {
+        String serviceName = input.getServiceName();
+        LOG.info("RPC serviceReroute received for {}", serviceName);
+        Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
+        if (servicesObject.isEmpty()) {
+            LOG.warn("serviceReroute: {}", LogMessages.serviceNotInDS(serviceName));
+            return ModelMappingUtils.createRerouteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.serviceNotInDS(serviceName),
+                    ResponseCodes.RESPONSE_FAILED);
+        }
+        Optional<ServicePaths> servicePathsObject = this.serviceDataStoreOperations.getServicePath(serviceName);
+        if (servicePathsObject.isEmpty()) {
+            LOG.warn("serviceReroute: {}", LogMessages.servicePathNotInDS(serviceName));
+            return ModelMappingUtils.createRerouteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.servicePathNotInDS(serviceName),
+                    ResponseCodes.RESPONSE_FAILED);
+        }
+        // serviceInput for later use maybe...
+        Services service = servicesObject.orElseThrow();
+        ServiceInput serviceInput = new ServiceInput(input);
+        serviceInput.setServiceAEnd(service.getServiceAEnd());
+        serviceInput.setServiceZEnd(service.getServiceZEnd());
+        serviceInput.setConnectionType(service.getConnectionType());
+        serviceInput.setCommonId(service.getCommonId());
+        serviceInput.setHardConstraints(service.getHardConstraints());
+        serviceInput.setSoftConstraints(service.getSoftConstraints());
+        serviceInput.setCustomer(service.getCustomer());
+        serviceInput.setCustomerContact(service.getCustomerContact());
+        // Get the network xpdr termination points
+        ServicePaths servicePaths = servicePathsObject.orElseThrow();
+        Map<AToZKey, AToZ> mapaToz = servicePaths.getPathDescription().getAToZDirection().getAToZ();
+        PathComputationRerouteRequestOutput output = this.pceServiceWrapper.performPCEReroute(
+                service.getHardConstraints(), service.getSoftConstraints(), input.getSdncRequestHeader(),
+                service.getServiceAEnd(), service.getServiceZEnd(),
+                new EndpointsBuilder()
+                    .setAEndTp(
+                        ((TerminationPoint) mapaToz
+                                .get(new AToZKey(String.valueOf(mapaToz.size() - 3)))
+                                .getResource()
+                                .getResource())
+                            .getTpId())
+                    .setZEndTp(
+                        ((TerminationPoint) mapaToz
+                                .get(new AToZKey("2"))
+                                .getResource()
+                                .getResource())
+                            .getTpId())
+                    .build());
+        if (output == null) {
+            LOG.error("serviceReroute: {}", LogMessages.PCE_FAILED);
+            return ModelMappingUtils.createRerouteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info("RPC ServiceReroute is done");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createRerouteServiceReply(input, common.getAckFinalIndicator(),
+                common.getResponseMessage(), common.getResponseCode());
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceRestorationImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServiceRestorationImpl.java
new file mode 100644 (file)
index 0000000..817515a
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.Optional;
+import org.opendaylight.transportpce.servicehandler.DowngradeConstraints;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.RendererServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestoration;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfo.TailRetention;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ServiceRestorationImpl implements ServiceRestoration {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceRestorationImpl.class);
+    private static final String SERVICE_RESTORATION_MSG = "serviceRestoration: {}";
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PceListener pceListener;
+    private RendererListener rendererListener;
+    private NetworkListener networkListener;
+    private RendererServiceWrapper rendererServiceWrapper;
+
+    public ServiceRestorationImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            final PceListener pceListener, RendererListener rendererListener, NetworkListener networkListener,
+            RendererServiceWrapper rendererServiceWrapper) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceListener = pceListener;
+        this.rendererListener = rendererListener;
+        this.networkListener = networkListener;
+        this.rendererServiceWrapper = rendererServiceWrapper;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<ServiceRestorationOutput>> invoke(ServiceRestorationInput input) {
+        String serviceName = input.getServiceName();
+        LOG.info("RPC serviceRestoration received for {}", serviceName);
+        Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
+
+        if (servicesObject.isEmpty()) {
+            LOG.warn(SERVICE_RESTORATION_MSG, LogMessages.serviceNotInDS(serviceName));
+            return ModelMappingUtils.createRestoreServiceReply(
+                    LogMessages.serviceNotInDS(serviceName));
+        }
+
+        Services service = servicesObject.orElseThrow();
+        State state = service.getOperationalState();
+
+        if (state == State.InService) {
+            LOG.error(SERVICE_RESTORATION_MSG, LogMessages.serviceInService(serviceName));
+            return ModelMappingUtils.createRestoreServiceReply(
+                    LogMessages.serviceInService(serviceName));
+        }
+
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
+        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
+        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
+        SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder()
+                .setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl())
+                .setRequestId(service.getSdncRequestHeader().getRequestId())
+                .setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId())
+                .setRpcAction(RpcActions.ServiceDelete);
+        ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder()
+                .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
+                    .setServiceName(serviceName)
+                    .setDueDate(datetime)
+                    .setTailRetention(TailRetention.No).build())
+                .setSdncRequestHeader(sdncBuilder.build());
+        ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build());
+        serviceInput.setServiceAEnd(service.getServiceAEnd());
+        serviceInput.setServiceZEnd(service.getServiceZEnd());
+        serviceInput.setConnectionType(service.getConnectionType());
+        HardConstraints hardConstraints = service.getHardConstraints();
+        if (hardConstraints == null) {
+            LOG.warn("service '{}' HardConstraints is not set !", serviceName);
+        } else {
+            SoftConstraints softConstraints = service.getSoftConstraints();
+            if (softConstraints == null) {
+                LOG.warn("service '{}' SoftConstraints is not set !", serviceName);
+                serviceInput.setSoftConstraints(DowngradeConstraints.convertToSoftConstraints(hardConstraints));
+            } else {
+                LOG.info("converting hard constraints to soft constraints ...");
+                serviceInput.setSoftConstraints(
+                        DowngradeConstraints.updateSoftConstraints(hardConstraints, softConstraints));
+            }
+            serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints));
+        }
+        this.pceListener.setInput(serviceInput);
+        this.pceListener.setServiceReconfigure(true);
+        this.pceListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.rendererListener.setServiceInput(serviceInput);
+        this.rendererListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.networkListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
+            .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
+                    new ServiceInput(deleteInputBldr.build()));
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
+            .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
+                ServiceNotificationTypes.ServiceDeleteResult, null);
+        if (output == null) {
+            LOG.error(SERVICE_RESTORATION_MSG, LogMessages.RENDERER_DELETE_FAILED);
+            return ModelMappingUtils.createRestoreServiceReply(LogMessages.RENDERER_DELETE_FAILED);
+        }
+        LOG.info("RPC serviceRestore in progress...");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createRestoreServiceReply(common.getResponseMessage());
+    }
+
+}
index b700a6549b77529520850d7a8c9864b420432303..2c0ea7d0a8fe9460925cb76bae04e9fc89b8ec41 100644 (file)
  */
 package org.opendaylight.transportpce.servicehandler.impl;
 
-import com.google.common.util.concurrent.ListenableFuture;
-import java.time.OffsetDateTime;
-import java.time.ZoneOffset;
-import java.time.format.DateTimeFormatter;
-import java.util.Map;
-import java.util.Optional;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
-import org.opendaylight.transportpce.common.OperationResult;
-import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
-import org.opendaylight.transportpce.servicehandler.CatalogInput;
-import org.opendaylight.transportpce.servicehandler.DowngradeConstraints;
-import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
-import org.opendaylight.transportpce.servicehandler.ServiceInput;
 import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperations;
-import org.opendaylight.transportpce.servicehandler.catalog.CatalogMapper;
 import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
 import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
 import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
 import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.RendererServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.transportpce.servicehandler.validation.CatalogValidation;
-import org.opendaylight.transportpce.servicehandler.validation.ServiceCreateValidation;
-import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
-import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.EndpointsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.OpenroadmOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.operational.mode.catalog.rev211210.operational.mode.catalog.SpecificOperationalModes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.EquipmentNotificationInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.EquipmentNotificationOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.NetworkReOptimizationInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.NetworkReOptimizationOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OpticalTunnelCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OpticalTunnelCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OpticalTunnelRequestCancelInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OpticalTunnelRequestCancelOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateBulkInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateBulkOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateComplexResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateComplexResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteComplexResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteComplexResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckBulkInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckBulkOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureBulkInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureBulkOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteConfirmInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteConfirmOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteConfirmResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteConfirmResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReversionInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReversionOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReversionResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReversionResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRollInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRollOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRollResultNotificationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRollResultNotificationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceSrlgGetInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceSrlgGetOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateBulkInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateBulkOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo.TailRetention;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalog;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDelete;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheck;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigure;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReroute;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestoration;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDelete;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -134,48 +43,74 @@ import org.slf4j.LoggerFactory;
  * Top level service interface providing main OpenROADM controller services.
  */
 @Component
-public class ServicehandlerImpl implements OrgOpenroadmServiceService {
+public class ServicehandlerImpl {
     private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerImpl.class);
-    private static final String PUBLISHER = "ServiceHandler";
-    private static final String TEMP_SERVICE_CREATE_MSG = "tempServiceCreate: {}";
-    private static final String TEMP_SERVICE_DELETE_MSG = "tempServiceDelete: {}";
-    private static final String SERVICE_RESTORATION_MSG = "serviceRestoration: {}";
-    private static final String SERVICE_RECONFIGURE_MSG = "serviceReconfigure: {}";
-    private static final String SERVICE_FEASIBILITY_CHECK_MSG = "serviceFeasibilityCheck: {}";
-    private static final String SERVICE_DELETE_MSG = "serviceDelete: {}";
-    private static final String SERVICE_CREATE_MSG = "serviceCreate: {}";
-    private static final String ADD_OR_TO_CATALOG_MSG = "addORToCatalog: {}";
-    private static final String ADD_SPECIFIC_TO_CATALOG_MSG = "addSpecificToCatalog: {}";
 
     private ServiceDataStoreOperations serviceDataStoreOperations;
-    private PCEServiceWrapper pceServiceWrapper;
-    private RendererServiceWrapper rendererServiceWrapper;
     private PceListener pceListenerImpl;
     private RendererListener rendererListenerImpl;
     private NetworkListener networkModelListenerImpl;
-    private NotificationPublishService notificationPublishService;
     private CatalogDataStoreOperations catalogDataStoreOperations;
+    private NotificationPublishService notificationPublishService;
+    private PCEServiceWrapper pceServiceWrapper;
+    private RendererServiceWrapper rendererServiceWrapper;
+    private Registration reg;
 
     @Activate
-    public ServicehandlerImpl(@Reference PathComputationService pathComputationService,
-            @Reference RendererServiceOperations rendererServiceOperations,
-            @Reference NotificationPublishService notificationPublishService,
+    public ServicehandlerImpl(@Reference RpcProviderService rpcProviderService,
+            @Reference ServiceDataStoreOperations serviceDataStoreOperations,
             @Reference PceListener pceListenerImpl,
             @Reference RendererListener rendererListenerImpl,
             @Reference NetworkListener networkModelListenerImpl,
-            @Reference ServiceDataStoreOperations serviceDataStoreOperations,
-            @Reference CatalogDataStoreOperations catalogDataStoreOperations) {
-        this.catalogDataStoreOperations = catalogDataStoreOperations;
+            @Reference CatalogDataStoreOperations catalogDataStoreOperations,
+            @Reference PathComputationService pathComputationService,
+            @Reference RendererServiceOperations rendererServiceOperations,
+            @Reference NotificationPublishService notificationPublishService) {
         this.serviceDataStoreOperations = serviceDataStoreOperations;
-        this.notificationPublishService =  notificationPublishService;
-        this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
-        this.rendererServiceWrapper = new RendererServiceWrapper(rendererServiceOperations, notificationPublishService);
         this.pceListenerImpl = pceListenerImpl;
         this.rendererListenerImpl = rendererListenerImpl;
         this.networkModelListenerImpl = networkModelListenerImpl;
+        this.catalogDataStoreOperations = catalogDataStoreOperations;
+        this.notificationPublishService =  notificationPublishService;
+        this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
+        this.rendererServiceWrapper = new RendererServiceWrapper(rendererServiceOperations, notificationPublishService);
+        this.reg = rpcProviderService.registerRpcImplementations(registerRPCs());
         LOG.info("ServicehandlerImpl Initiated");
     }
 
+    @Deactivate
+    public void close() {
+        this.reg.close();
+        LOG.info("ServicehandlerImpl Closed");
+    }
+
+    public Registration getRegisteredRpc() {
+        return reg;
+    }
+
+    private ImmutableClassToInstanceMap<Rpc<?, ?>> registerRPCs() {
+        return ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+            .put(ServiceCreate.class, new ServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl,
+                    rendererListenerImpl, networkModelListenerImpl, pceServiceWrapper, notificationPublishService))
+            .put(ServiceDelete.class, new ServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl,
+                    rendererListenerImpl, networkModelListenerImpl, rendererServiceWrapper, notificationPublishService))
+            .put(ServiceFeasibilityCheck.class, new ServiceFeasibilityCheckImpl(serviceDataStoreOperations,
+                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, pceServiceWrapper))
+            .put(ServiceReconfigure.class, new ServiceReconfigureImpl(serviceDataStoreOperations, pceListenerImpl,
+                    rendererListenerImpl, networkModelListenerImpl, rendererServiceWrapper))
+            .put(ServiceRestoration.class, new ServiceRestorationImpl(serviceDataStoreOperations, pceListenerImpl,
+                    rendererListenerImpl, networkModelListenerImpl, rendererServiceWrapper))
+            .put(ServiceReroute.class, new ServiceRerouteImpl(serviceDataStoreOperations, pceServiceWrapper))
+            .put(TempServiceCreate.class, new TempServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl,
+                    rendererListenerImpl, networkModelListenerImpl, pceServiceWrapper))
+            .put(TempServiceDelete.class, new TempServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl,
+                    rendererListenerImpl, rendererServiceWrapper))
+            .put(AddOpenroadmOperationalModesToCatalog.class,
+                    new AddOpenroadmOperationalModesToCatalogImpl(catalogDataStoreOperations))
+            .put(AddSpecificOperationalModesToCatalog.class,
+                    new AddSpecificOperationalModesToCatalogImpl(catalogDataStoreOperations))
+            .build();
+    }
 
     // This is class is public so that these messages can be accessed from Junit (avoid duplications).
     public static final class LogMessages {
@@ -222,661 +157,5 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService {
         private LogMessages() {
         }
     }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceCreateOutput>> serviceCreate(ServiceCreateInput input) {
-        LOG.info("RPC serviceCreate received");
-        // Validation
-        OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(
-                new ServiceInput(input), RpcActions.ServiceCreate);
-        if (!validationResult.isSuccess()) {
-            LOG.warn(SERVICE_CREATE_MSG, LogMessages.ABORT_VALID_FAILED);
-            return ModelMappingUtils.createCreateServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
-        }
-        //Check any presence of services with the same name
-        String serviceName = input.getServiceName();
-        if (this.serviceDataStoreOperations.getService(serviceName).isPresent()) {
-            LOG.warn(SERVICE_CREATE_MSG, LogMessages.serviceInDS(serviceName));
-            return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.serviceInDS(serviceName), ResponseCodes.RESPONSE_FAILED);
-        }
-        this.pceListenerImpl.setInput(new ServiceInput(input));
-        this.pceListenerImpl.setServiceReconfigure(false);
-        this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
-        this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        LOG.debug(SERVICE_CREATE_MSG, LogMessages.PCE_CALLING);
-        PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
-        if (output == null) {
-            LOG.warn(SERVICE_CREATE_MSG, LogMessages.ABORT_PCE_FAILED);
-            sendNbiNotification(new PublishNotificationProcessServiceBuilder()
-                    .setServiceName(serviceName)
-                    .setServiceAEnd(new ServiceAEndBuilder(input.getServiceAEnd()).build())
-                    .setServiceZEnd(new ServiceZEndBuilder(input.getServiceZEnd()).build())
-                    .setCommonId(input.getCommonId())
-                    .setConnectionType(input.getConnectionType())
-                    .setResponseFailed(LogMessages.ABORT_PCE_FAILED)
-                    .setMessage("ServiceCreate request failed ...")
-                    .setOperationalState(State.Degraded)
-                    .setPublisherName(PUBLISHER)
-                    .build());
-            return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
-        }
-        LOG.info("RPC serviceCreate in progress...");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createCreateServiceReply(
-                input, common.getAckFinalIndicator(),
-                common.getResponseMessage(), common.getResponseCode());
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceDeleteOutput>> serviceDelete(ServiceDeleteInput input) {
-        String serviceName = input.getServiceDeleteReqInfo().getServiceName();
-        LOG.info("RPC serviceDelete request received for {}", serviceName);
-
-        /*
-         * Upon receipt of service-deleteService RPC, service header and sdnc-request
-         * header compliance are verified.
-         */
-        ComplianceCheckResult serviceHandlerCheckResult =
-            ServicehandlerComplianceCheck.check(
-                input.getServiceDeleteReqInfo().getServiceName(),
-                input.getSdncRequestHeader(), null, RpcActions.ServiceDelete, false, true);
-        if (!serviceHandlerCheckResult.hasPassed()) {
-            LOG.warn(SERVICE_DELETE_MSG, LogMessages.ABORT_SERVICE_NON_COMPLIANT);
-            return ModelMappingUtils.createDeleteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.SERVICE_NON_COMPLIANT, ResponseCodes.RESPONSE_FAILED);
-        }
-
-        //Check presence of service to be deleted
-        Optional<Services> serviceOpt = this.serviceDataStoreOperations.getService(serviceName);
-        Services service;
-        if (serviceOpt.isEmpty()) {
-            LOG.warn(SERVICE_DELETE_MSG, LogMessages.serviceNotInDS(serviceName));
-            return ModelMappingUtils.createDeleteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.serviceNotInDS(serviceName), ResponseCodes.RESPONSE_FAILED);
-        }
-        service = serviceOpt.orElseThrow();
-        LOG.debug("serviceDelete: Service '{}' found in datastore", serviceName);
-        this.pceListenerImpl.setInput(new ServiceInput(input));
-        this.pceListenerImpl.setServiceReconfigure(false);
-        this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
-        this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput
-                serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input));
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput output =
-            this.rendererServiceWrapper.performRenderer(
-                serviceDeleteInput, ServiceNotificationTypes.ServiceDeleteResult, service);
-
-        if (output == null) {
-            LOG.error(SERVICE_DELETE_MSG, LogMessages.RENDERER_DELETE_FAILED);
-            sendNbiNotification(new PublishNotificationProcessServiceBuilder()
-                    .setServiceName(service.getServiceName())
-                    .setServiceAEnd(new ServiceAEndBuilder(service.getServiceAEnd()).build())
-                    .setServiceZEnd(new ServiceZEndBuilder(service.getServiceZEnd()).build())
-                    .setCommonId(service.getCommonId())
-                    .setConnectionType(service.getConnectionType())
-                    .setMessage("ServiceDelete request failed ...")
-                    .setOperationalState(State.InService)
-                    .setResponseFailed(LogMessages.RENDERER_DELETE_FAILED)
-                    .setPublisherName(PUBLISHER)
-                    .build());
-            return ModelMappingUtils.createDeleteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.RENDERER_DELETE_FAILED, ResponseCodes.RESPONSE_FAILED);
-        }
-
-        LOG.debug("RPC serviceDelete in progress...");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createDeleteServiceReply(
-                input, common.getAckFinalIndicator(),
-                common.getResponseMessage(), common.getResponseCode());
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> serviceFeasibilityCheck(
-            ServiceFeasibilityCheckInput input) {
-        LOG.info("RPC serviceFeasibilityCheck received");
-        // Validation
-        ServiceInput serviceInput = new ServiceInput(input);
-        OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(serviceInput,
-                RpcActions.ServiceFeasibilityCheck);
-        if (! validationResult.isSuccess()) {
-            LOG.warn(SERVICE_FEASIBILITY_CHECK_MSG, LogMessages.ABORT_VALID_FAILED);
-            return ModelMappingUtils.createCreateServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
-        }
-        this.pceListenerImpl.setInput(new ServiceInput(input));
-        this.pceListenerImpl.setServiceReconfigure(false);
-        this.pceListenerImpl.setServiceFeasiblity(true);
-        this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
-        this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        LOG.debug(SERVICE_FEASIBILITY_CHECK_MSG, LogMessages.PCE_CALLING);
-        PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
-        if (output == null) {
-            LOG.warn(SERVICE_FEASIBILITY_CHECK_MSG, LogMessages.ABORT_PCE_FAILED);
-            return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
-        }
-        LOG.info("RPC serviceFeasibilityCheck in progress...");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createCreateServiceReply(
-                input, common.getAckFinalIndicator(),
-                common.getResponseMessage(), common.getResponseCode());
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceReconfigureOutput>> serviceReconfigure(ServiceReconfigureInput input) {
-        String serviceName = input.getServiceName();
-        LOG.info("RPC serviceReconfigure received for {}", serviceName);
-        Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
-        if (servicesObject.isEmpty()) {
-            LOG.warn(SERVICE_RECONFIGURE_MSG, LogMessages.serviceNotInDS(serviceName));
-            return ModelMappingUtils.createCreateServiceReply(
-                input,
-                LogMessages.serviceNotInDS(serviceName));
-        }
-        LOG.debug("Service '{}' found in datastore", serviceName);
-        OperationResult validationResult = ServiceCreateValidation
-                .validateServiceCreateRequest(new ServiceInput(input), RpcActions.ServiceReconfigure);
-        if (!validationResult.isSuccess()) {
-            LOG.warn(SERVICE_RECONFIGURE_MSG, LogMessages.ABORT_VALID_FAILED);
-            return ModelMappingUtils.createCreateServiceReply(
-                    input,
-                    validationResult.getResultMessage());
-        }
-        this.pceListenerImpl.setInput(new ServiceInput(input));
-        this.pceListenerImpl.setServiceReconfigure(true);
-        this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
-        this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
-                .ServiceDeleteInput serviceDeleteInput =
-                        ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input));
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
-                .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
-                        ServiceNotificationTypes.ServiceDeleteResult, null);
-        if (output == null) {
-            LOG.error(SERVICE_RECONFIGURE_MSG, LogMessages.RENDERER_DELETE_FAILED);
-            return ModelMappingUtils.createCreateServiceReply(
-                    input,
-                    LogMessages.RENDERER_DELETE_FAILED);
-                    //TODO check if RpcStatus.Successful is really expected here
-        }
-        LOG.info("RPC serviceReconfigure in progress...");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createCreateServiceReply(
-                input,
-                common.getResponseMessage());
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceRestorationOutput>> serviceRestoration(ServiceRestorationInput input) {
-        String serviceName = input.getServiceName();
-        LOG.info("RPC serviceRestoration received for {}", serviceName);
-        Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
-
-        if (!servicesObject.isPresent()) {
-            LOG.warn(SERVICE_RESTORATION_MSG, LogMessages.serviceNotInDS(serviceName));
-            return ModelMappingUtils.createRestoreServiceReply(
-                    LogMessages.serviceNotInDS(serviceName));
-        }
-
-        Services service = servicesObject.orElseThrow();
-        State state = service.getOperationalState();
-
-        if (state == State.InService) {
-            LOG.error(SERVICE_RESTORATION_MSG, LogMessages.serviceInService(serviceName));
-            return ModelMappingUtils.createRestoreServiceReply(
-                    LogMessages.serviceInService(serviceName));
-        }
-
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
-        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
-        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
-        SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder()
-                .setNotificationUrl(service.getSdncRequestHeader().getNotificationUrl())
-                .setRequestId(service.getSdncRequestHeader().getRequestId())
-                .setRequestSystemId(service.getSdncRequestHeader().getRequestSystemId())
-                .setRpcAction(RpcActions.ServiceDelete);
-        ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder()
-                .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
-                    .setServiceName(serviceName)
-                    .setDueDate(datetime)
-                    .setTailRetention(TailRetention.No).build())
-                .setSdncRequestHeader(sdncBuilder.build());
-        ServiceInput serviceInput = new ServiceInput(deleteInputBldr.build());
-        serviceInput.setServiceAEnd(service.getServiceAEnd());
-        serviceInput.setServiceZEnd(service.getServiceZEnd());
-        serviceInput.setConnectionType(service.getConnectionType());
-        HardConstraints hardConstraints = service.getHardConstraints();
-        if (hardConstraints == null) {
-            LOG.warn("service '{}' HardConstraints is not set !", serviceName);
-        } else {
-            SoftConstraints softConstraints = service.getSoftConstraints();
-            if (softConstraints == null) {
-                LOG.warn("service '{}' SoftConstraints is not set !", serviceName);
-                serviceInput.setSoftConstraints(DowngradeConstraints.convertToSoftConstraints(hardConstraints));
-            } else {
-                LOG.info("converting hard constraints to soft constraints ...");
-                serviceInput.setSoftConstraints(
-                        DowngradeConstraints.updateSoftConstraints(hardConstraints, softConstraints));
-            }
-            serviceInput.setHardConstraints(DowngradeConstraints.downgradeHardConstraints(hardConstraints));
-        }
-        this.pceListenerImpl.setInput(serviceInput);
-        this.pceListenerImpl.setServiceReconfigure(true);
-        this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.rendererListenerImpl.setServiceInput(serviceInput);
-        this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
-            .ServiceDeleteInput serviceDeleteInput = ModelMappingUtils.createServiceDeleteInput(
-                    new ServiceInput(deleteInputBldr.build()));
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
-            .ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer(serviceDeleteInput,
-                ServiceNotificationTypes.ServiceDeleteResult, null);
-        if (output == null) {
-            LOG.error(SERVICE_RESTORATION_MSG, LogMessages.RENDERER_DELETE_FAILED);
-            return ModelMappingUtils.createRestoreServiceReply(LogMessages.RENDERER_DELETE_FAILED);
-        }
-        LOG.info("RPC serviceRestore in progress...");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createRestoreServiceReply(common.getResponseMessage());
-
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<EquipmentNotificationOutput>>
-            equipmentNotification(EquipmentNotificationInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceRerouteConfirmOutput>>
-            serviceRerouteConfirm(ServiceRerouteConfirmInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceRerouteOutput>> serviceReroute(ServiceRerouteInput input) {
-        String serviceName = input.getServiceName();
-        LOG.info("RPC serviceReroute received for {}", serviceName);
-        Optional<Services> servicesObject = this.serviceDataStoreOperations.getService(serviceName);
-        if (servicesObject.isEmpty()) {
-            LOG.warn("serviceReroute: {}", LogMessages.serviceNotInDS(serviceName));
-            return ModelMappingUtils.createRerouteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.serviceNotInDS(serviceName),
-                    ResponseCodes.RESPONSE_FAILED);
-        }
-        Services service = servicesObject.orElseThrow();
-        Optional<ServicePaths> servicePathsObject = this.serviceDataStoreOperations.getServicePath(serviceName);
-        if (servicePathsObject.isEmpty()) {
-            LOG.warn("serviceReroute: {}", LogMessages.servicePathNotInDS(serviceName));
-            return ModelMappingUtils.createRerouteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.servicePathNotInDS(serviceName),
-                    ResponseCodes.RESPONSE_FAILED);
-        }
-        ServicePaths servicePaths = servicePathsObject.orElseThrow();
-        // serviceInput for later use maybe...
-        ServiceInput serviceInput = new ServiceInput(input);
-        serviceInput.setServiceAEnd(service.getServiceAEnd());
-        serviceInput.setServiceZEnd(service.getServiceZEnd());
-        serviceInput.setConnectionType(service.getConnectionType());
-        serviceInput.setCommonId(service.getCommonId());
-        serviceInput.setHardConstraints(service.getHardConstraints());
-        serviceInput.setSoftConstraints(service.getSoftConstraints());
-        serviceInput.setCustomer(service.getCustomer());
-        serviceInput.setCustomerContact(service.getCustomerContact());
-
-        // Get the network xpdr termination points
-        Map<AToZKey, AToZ> mapaToz = servicePaths.getPathDescription().getAToZDirection().getAToZ();
-        String aendtp = ((TerminationPoint) mapaToz.get(new AToZKey(String.valueOf(mapaToz.size() - 3)))
-                .getResource()
-                .getResource())
-                .getTpId();
-        String zendtp = ((TerminationPoint) mapaToz.get(new AToZKey("2"))
-                .getResource()
-                .getResource())
-                .getTpId();
-
-        PathComputationRerouteRequestOutput output = this.pceServiceWrapper.performPCEReroute(
-                service.getHardConstraints(), service.getSoftConstraints(), input.getSdncRequestHeader(),
-                service.getServiceAEnd(), service.getServiceZEnd(),
-                new EndpointsBuilder().setAEndTp(aendtp).setZEndTp(zendtp).build());
-
-        if (output == null) {
-            LOG.error("serviceReroute: {}", LogMessages.PCE_FAILED);
-            return ModelMappingUtils.createRerouteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
-        }
-        LOG.info("RPC ServiceReroute is done");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createRerouteServiceReply(input, common.getAckFinalIndicator(),
-                common.getResponseMessage(), common.getResponseCode());
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceReversionOutput>> serviceReversion(ServiceReversionInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceRollOutput>> serviceRoll(ServiceRollInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<NetworkReOptimizationOutput>>
-            networkReOptimization(NetworkReOptimizationInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<TempServiceDeleteOutput>> tempServiceDelete(TempServiceDeleteInput input) {
-        String commonId = input.getCommonId();
-        LOG.info("RPC temp serviceDelete request received for {}", commonId);
-
-        /*
-         * Upon receipt of service-deleteService RPC, service header and sdnc-request
-         * header compliance are verified.
-         */
-        LOG.debug("checking Service Compliance ...");
-        ComplianceCheckResult serviceHandlerCheckResult = ServicehandlerComplianceCheck.check(
-                commonId, null, null, RpcActions.ServiceDelete, false, false
-            );
-        if (!serviceHandlerCheckResult.hasPassed()) {
-            LOG.warn(TEMP_SERVICE_DELETE_MSG, LogMessages.ABORT_SERVICE_NON_COMPLIANT);
-            return ModelMappingUtils.createDeleteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.SERVICE_NON_COMPLIANT, ResponseCodes.RESPONSE_FAILED);
-        }
-
-        //Check presence of service to be deleted
-        LOG.debug("service common-id '{}' is compliant", commonId);
-        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list.Services>
-                service =
-            this.serviceDataStoreOperations.getTempService(commonId);
-        if (service.isEmpty()) {
-            LOG.error(TEMP_SERVICE_DELETE_MSG, LogMessages.serviceNotInDS(commonId));
-            return ModelMappingUtils.createDeleteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.serviceNotInDS(commonId), ResponseCodes.RESPONSE_FAILED);
-        }
-
-        LOG.info("Service '{}' present in datastore !", commonId);
-        this.pceListenerImpl.setInput(new ServiceInput(input));
-        this.pceListenerImpl.setServiceReconfigure(false);
-        this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.rendererListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
-        this.rendererListenerImpl.setTempService(true);
-        this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput output =
-                this.rendererServiceWrapper.performRenderer(input, ServiceNotificationTypes.ServiceDeleteResult);
-        if (output == null) {
-            LOG.error(TEMP_SERVICE_DELETE_MSG, LogMessages.RENDERER_DELETE_FAILED);
-            return ModelMappingUtils.createDeleteServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.RENDERER_DELETE_FAILED, ResponseCodes.RESPONSE_FAILED);
-        }
-        LOG.info("RPC tempServiceDelete in progress...");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createDeleteServiceReply(
-                input, common.getAckFinalIndicator(),
-                common.getResponseMessage(), common.getResponseCode());
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<TempServiceCreateOutput>> tempServiceCreate(TempServiceCreateInput input) {
-        LOG.info("RPC tempServiceCreate received");
-        // Validation
-        OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(
-                new ServiceInput(input), RpcActions.TempServiceCreate);
-        if (! validationResult.isSuccess()) {
-            LOG.warn(TEMP_SERVICE_CREATE_MSG, LogMessages.ABORT_VALID_FAILED);
-            return ModelMappingUtils.createCreateServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
-        }
-
-        // Starting service create operation
-        LOG.debug(TEMP_SERVICE_CREATE_MSG, LogMessages.PCE_CALLING);
-        this.pceListenerImpl.setInput(new ServiceInput(input));
-        this.pceListenerImpl.setServiceReconfigure(false);
-        this.pceListenerImpl.setserviceDataStoreOperations(this.serviceDataStoreOperations);
-        this.pceListenerImpl.setTempService(true);
-        this.rendererListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        this.rendererListenerImpl.setServiceInput(new ServiceInput(input));
-        this.rendererListenerImpl.setTempService(true);
-        this.networkModelListenerImpl.setserviceDataStoreOperations(serviceDataStoreOperations);
-        PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
-        if (output == null) {
-            LOG.warn(TEMP_SERVICE_CREATE_MSG, LogMessages.ABORT_PCE_FAILED);
-            return ModelMappingUtils.createCreateServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
-        }
-        LOG.info("RPC tempServiceCreate in progress...");
-        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
-        return ModelMappingUtils.createCreateServiceReply(
-                input, common.getAckFinalIndicator(),
-                common.getResponseMessage(), common.getResponseCode());
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<
-        ServiceDeleteComplexResultNotificationRequestOutput>> serviceDeleteComplexResultNotificationRequest(
-            ServiceDeleteComplexResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<
-        ServiceCreateResultNotificationRequestOutput>> serviceCreateResultNotificationRequest(
-            ServiceCreateResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<
-        ServiceDeleteResultNotificationRequestOutput>> serviceDeleteResultNotificationRequest(
-            ServiceDeleteResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<
-        ServiceCreateComplexResultNotificationRequestOutput>> serviceCreateComplexResultNotificationRequest(
-            ServiceCreateComplexResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceFeasibilityCheckBulkOutput>> serviceFeasibilityCheckBulk(
-        ServiceFeasibilityCheckBulkInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    /**
-     * Send notification to NBI notification in order to publish message.
-     * @param service PublishNotificationService
-     */
-    private void sendNbiNotification(PublishNotificationProcessService service) {
-        try {
-            notificationPublishService.putNotification(service);
-        } catch (InterruptedException e) {
-            LOG.warn("Cannot send notification to nbi", e);
-            Thread.currentThread().interrupt();
-        }
-    }
-
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceCreateBulkOutput>> serviceCreateBulk(ServiceCreateBulkInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<TempServiceCreateBulkOutput>> tempServiceCreateBulk(
-        TempServiceCreateBulkInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceRollResultNotificationRequestOutput>> serviceRollResultNotificationRequest(
-        ServiceRollResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceReconfigureBulkOutput>> serviceReconfigureBulk(
-        ServiceReconfigureBulkInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceReconfigureResultNotificationRequestOutput>>
-            serviceReconfigureResultNotificationRequest(ServiceReconfigureResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceRestorationResultNotificationRequestOutput>>
-            serviceRestorationResultNotificationRequest(ServiceRestorationResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceReversionResultNotificationRequestOutput>>
-            serviceReversionResultNotificationRequest(ServiceReversionResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceRerouteConfirmResultNotificationRequestOutput>>
-            serviceRerouteConfirmResultNotificationRequest(ServiceRerouteConfirmResultNotificationRequestInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<OpticalTunnelCreateOutput>> opticalTunnelCreate(OpticalTunnelCreateInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<OpticalTunnelRequestCancelOutput>> opticalTunnelRequestCancel(
-            OpticalTunnelRequestCancelInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    /**
-     * Implementation of the RPC to set OR  operational modes in the catalog of the controller.
-     * Semantics of the RPC is such that the information in the input replaces the full content
-     * of the OR operational modes catalog in the config data store. Incremental changes to the
-     * catalog, if required, must be done via individual PUT/POST/DELETE RESTconf APIs.
-     *
-     * @param input AddOpenroadmOperationalModesToCatalogInput to be added to Catalog
-     * @return Result of the request
-     */
-    public ListenableFuture<RpcResult<AddOpenroadmOperationalModesToCatalogOutput>>
-        addOpenroadmOperationalModesToCatalog(AddOpenroadmOperationalModesToCatalogInput input) {
-
-        LOG.info("RPC addOpenroadmOperationalModesToCatalog in progress");
-        LOG.debug(" Input openRoadm {}", input);
-        // Validation
-        OperationResult validationResult = CatalogValidation.validateORCatalogRequest(
-                new CatalogInput(input), RpcActions.FillCatalogWithOrOperationalModes);
-        if (! validationResult.isSuccess()) {
-            LOG.warn(ADD_OR_TO_CATALOG_MSG, LogMessages.ABORT_OR_TO_CATALOG_FAILED);
-            return ModelMappingUtils.addOpenroadmServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
-        }
-        LOG.info(" Request System Id {} " ,input.getSdncRequestHeader().getRequestSystemId());
-        LOG.info(" Rpc Action {} " ,input.getSdncRequestHeader().getRpcAction());
-
-        OpenroadmOperationalModes objToSave = CatalogMapper.createORModesToSave(input);
-        catalogDataStoreOperations.addOpenroadmOperationalModesToCatalog(objToSave);
-        LOG.info("RPC addOpenroadmOperationalModesToCatalog Completed");
-        return ModelMappingUtils.addOpenroadmServiceReply(input, ResponseCodes.FINAL_ACK_YES,
-                validationResult.getResultMessage(), ResponseCodes.RESPONSE_OK);
-    }
-
-    @Override
-    /**
-     * Implementation of the RPC to set specific operational modes in the catalog of the controller.
-     * Semantics of the RPC is such that the information in the input replaces the full content
-     * of the specific operational modes catalog in the config data store. Incremental changes to the
-     * catalog, if required, must be done via individual PUT/POST/DELETE RESTconf APIs.
-     *
-     * @param input AddSpecificOperationalModesToCatalogInput to be added to Catalog
-     * @return Result of the request
-     */
-    public ListenableFuture<RpcResult<AddSpecificOperationalModesToCatalogOutput>> addSpecificOperationalModesToCatalog(
-            AddSpecificOperationalModesToCatalogInput input) {
-
-        LOG.info("RPC addSpecificOperationalModesToCatalog in progress");
-        LOG.debug(" Input openSpecificRoadm {}", input);
-        // Validation
-        OperationResult validationResult = CatalogValidation.validateSpecificCatalogRequest(
-                new CatalogInput(input), RpcActions.FillCatalogWithSpecificOperationalModes);
-        if (! validationResult.isSuccess()) {
-            LOG.warn(ADD_SPECIFIC_TO_CATALOG_MSG, LogMessages.ABORT_SPECIFIC_TO_CATALOG_FAILED);
-            return ModelMappingUtils.addSpecificOpenroadmServiceReply(
-                    input, ResponseCodes.FINAL_ACK_YES,
-                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
-        }
-        LOG.info(" Request System Id {} " ,input.getSdncRequestHeader().getRequestSystemId());
-        LOG.info(" Rpc Action {} " ,input.getSdncRequestHeader().getRpcAction());
-
-        SpecificOperationalModes objToSave = CatalogMapper.createSpecificModesToSave(input);
-        catalogDataStoreOperations.addSpecificOperationalModesToCatalog(objToSave);
-        LOG.info("RPC addSpecificOperationalModesToCatalog Completed");
-        return ModelMappingUtils.addSpecificOpenroadmServiceReply(input, ResponseCodes.FINAL_ACK_YES,
-                validationResult.getResultMessage(), ResponseCodes.RESPONSE_OK);
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<ServiceSrlgGetOutput>> serviceSrlgGet(ServiceSrlgGetInput input) {
-        // TODO Auto-generated method stub
-        return null;
-    }
 }
 
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProvider.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProvider.java
deleted file mode 100644 (file)
index 658b50e..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright © 2017 Orange, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.transportpce.servicehandler.impl;
-
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
-import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
-import org.opendaylight.mdsal.binding.api.NotificationPublishService;
-import org.opendaylight.mdsal.binding.api.NotificationService;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class to register
- * Servicehandler Service and Notification.
- * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
- *
- */
-@Component
-public class ServicehandlerProvider {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ServicehandlerProvider.class);
-    private static final InstanceIdentifier<Services> SERVICE = InstanceIdentifier.builder(ServiceList.class)
-            .child(Services.class).build();
-
-    private ListenerRegistration<TransportpcePceListener> pcelistenerRegistration;
-    private ListenerRegistration<DataTreeChangeListener<Services>> serviceDataTreeChangeListenerRegistration;
-    private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
-    private ListenerRegistration<TransportpceNetworkmodelListener> networkmodellistenerRegistration;
-    private ObjectRegistration<OrgOpenroadmServiceService> rpcRegistration;
-    private ServiceDataStoreOperations serviceDataStoreOperations;
-
-    @Activate
-    public ServicehandlerProvider(@Reference final DataBroker dataBroker,
-            @Reference RpcProviderService rpcProviderService,
-            @Reference NotificationService notificationService,
-            @Reference ServiceDataStoreOperations serviceDataStoreOperations,
-            @Reference TransportpcePceListener pceListenerImpl,
-            @Reference TransportpceRendererListener rendererListenerImpl,
-            @Reference TransportpceNetworkmodelListener networkModelListenerImpl,
-            @Reference NotificationPublishService notificationPublishService,
-            @Reference OrgOpenroadmServiceService servicehandler,
-            @Reference DataTreeChangeListener<Services> serviceListener) {
-        this.serviceDataStoreOperations = serviceDataStoreOperations;
-        this.serviceDataStoreOperations.initialize();
-        pcelistenerRegistration = notificationService.registerNotificationListener(pceListenerImpl);
-        rendererlistenerRegistration = notificationService.registerNotificationListener(rendererListenerImpl);
-        networkmodellistenerRegistration = notificationService.registerNotificationListener(networkModelListenerImpl);
-        serviceDataTreeChangeListenerRegistration = dataBroker.registerDataTreeChangeListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, SERVICE), serviceListener);
-        rpcRegistration = rpcProviderService
-            .registerRpcImplementation(OrgOpenroadmServiceService.class, servicehandler);
-        LOG.info("ServicehandlerProvider Session Initiated");
-        LOG.info("Transportpce controller started");
-    }
-
-    /**
-     * Method called when the blueprint container is destroyed.
-     */
-    @Deactivate
-    public void close() {
-        LOG.info("ServicehandlerProvider Closed");
-        pcelistenerRegistration.close();
-        serviceDataTreeChangeListenerRegistration.close();
-        rendererlistenerRegistration.close();
-        networkmodellistenerRegistration.close();
-        rpcRegistration.close();
-    }
-}
\ No newline at end of file
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/TempServiceCreateImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/TempServiceCreateImpl.java
new file mode 100644 (file)
index 0000000..cb49499
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.common.OperationResult;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.validation.ServiceCreateValidation;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class TempServiceCreateImpl implements TempServiceCreate {
+    private static final Logger LOG = LoggerFactory.getLogger(TempServiceCreateImpl.class);
+    private static final String TEMP_SERVICE_CREATE_MSG = "tempServiceCreate: {}";
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PceListener pceListener;
+    private RendererListener rendererListener;
+    private NetworkListener networkListener;
+    private PCEServiceWrapper pceServiceWrapper;
+
+    public TempServiceCreateImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            final PceListener pceListener, RendererListener rendererListener, NetworkListener networkListener,
+            PCEServiceWrapper pceServiceWrapper) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceListener = pceListener;
+        this.rendererListener = rendererListener;
+        this.networkListener = networkListener;
+        this.pceServiceWrapper = pceServiceWrapper;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<TempServiceCreateOutput>> invoke(TempServiceCreateInput input) {
+        LOG.info("RPC tempServiceCreate received");
+        // Validation
+        OperationResult validationResult = ServiceCreateValidation.validateServiceCreateRequest(
+                new ServiceInput(input), RpcActions.TempServiceCreate);
+        if (!validationResult.isSuccess()) {
+            LOG.warn(TEMP_SERVICE_CREATE_MSG, LogMessages.ABORT_VALID_FAILED);
+            return ModelMappingUtils.createCreateServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    validationResult.getResultMessage(), ResponseCodes.RESPONSE_FAILED);
+        }
+
+        //Check any presence of temp-service with the same commonId
+        String commonId = input.getCommonId();
+        if (this.serviceDataStoreOperations.getTempService(commonId).isPresent()) {
+            LOG.warn(TEMP_SERVICE_CREATE_MSG, LogMessages.serviceInDS("Temp (" + commonId + ")"));
+            return ModelMappingUtils.createCreateServiceReply(input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.serviceInDS("Temp (" + commonId + ")"), ResponseCodes.RESPONSE_FAILED);
+        }
+
+        // Starting service create operation
+        LOG.debug(TEMP_SERVICE_CREATE_MSG, LogMessages.PCE_CALLING);
+        this.pceListener.setInput(new ServiceInput(input));
+        this.pceListener.setServiceReconfigure(false);
+        this.pceListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.pceListener.setTempService(true);
+        this.rendererListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        this.rendererListener.setServiceInput(new ServiceInput(input));
+        this.rendererListener.setTempService(true);
+        this.networkListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        PathComputationRequestOutput output = this.pceServiceWrapper.performPCE(input, true);
+        if (output == null) {
+            LOG.warn(TEMP_SERVICE_CREATE_MSG, LogMessages.ABORT_PCE_FAILED);
+            return ModelMappingUtils.createCreateServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.PCE_FAILED, ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info("RPC tempServiceCreate in progress...");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createCreateServiceReply(
+                input, common.getAckFinalIndicator(),
+                common.getResponseMessage(), common.getResponseCode());
+    }
+
+}
diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/TempServiceDeleteImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/TempServiceDeleteImpl.java
new file mode 100644 (file)
index 0000000..9248338
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Optional;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
+import org.opendaylight.transportpce.servicehandler.ServiceInput;
+import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
+import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.RendererServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
+import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDelete;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutput;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class TempServiceDeleteImpl implements TempServiceDelete {
+    private static final Logger LOG = LoggerFactory.getLogger(TempServiceDeleteImpl.class);
+    private static final String TEMP_SERVICE_DELETE_MSG = "tempServiceDelete: {}";
+
+    private ServiceDataStoreOperations serviceDataStoreOperations;
+    private PceListener pceListener;
+    private RendererListener rendererListener;
+    private RendererServiceWrapper rendererServiceWrapper;
+
+    public TempServiceDeleteImpl(final ServiceDataStoreOperations serviceDataStoreOperations,
+            final PceListener pceListener, RendererListener rendererListener,
+            RendererServiceWrapper rendererServiceWrapper) {
+        this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.pceListener = pceListener;
+        this.rendererListener = rendererListener;
+        this.rendererServiceWrapper = rendererServiceWrapper;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<TempServiceDeleteOutput>> invoke(TempServiceDeleteInput input) {
+        String commonId = input.getCommonId();
+        LOG.info("RPC temp serviceDelete request received for {}", commonId);
+
+        /*
+         * Upon receipt of service-deleteService RPC, service header and sdnc-request
+         * header compliance are verified.
+         */
+        LOG.debug("checking Service Compliance ...");
+        ComplianceCheckResult serviceHandlerCheckResult = ServicehandlerComplianceCheck.check(
+                commonId, null, null, RpcActions.ServiceDelete, false, false
+            );
+        if (!serviceHandlerCheckResult.hasPassed()) {
+            LOG.warn(TEMP_SERVICE_DELETE_MSG, LogMessages.ABORT_SERVICE_NON_COMPLIANT);
+            return ModelMappingUtils.createDeleteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.SERVICE_NON_COMPLIANT, ResponseCodes.RESPONSE_FAILED);
+        }
+
+        //Check presence of service to be deleted
+        LOG.debug("service common-id '{}' is compliant", commonId);
+        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list.Services>
+                serviceOpt =
+            this.serviceDataStoreOperations.getTempService(commonId);
+        if (serviceOpt.isEmpty()) {
+            LOG.error(TEMP_SERVICE_DELETE_MSG, LogMessages.serviceNotInDS(commonId));
+            return ModelMappingUtils.createDeleteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.serviceNotInDS(commonId), ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info("Service '{}' present in datastore !", commonId);
+        this.pceListener.setInput(new ServiceInput(input));
+        this.pceListener.setServiceReconfigure(false);
+        this.pceListener.setTempService(true);
+        this.pceListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.rendererListener.setserviceDataStoreOperations(this.serviceDataStoreOperations);
+        this.rendererListener.setServiceInput(new ServiceInput(input));
+        this.rendererListener.setTempService(true);
+        this.rendererListener.setserviceDataStoreOperations(serviceDataStoreOperations);
+        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                .temp.service.list.Services service = serviceOpt.orElseThrow();
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput output =
+                this.rendererServiceWrapper.performRenderer(input, ServiceNotificationTypes.ServiceDeleteResult,
+                        service);
+        if (output == null) {
+            LOG.error(TEMP_SERVICE_DELETE_MSG, LogMessages.RENDERER_DELETE_FAILED);
+            return ModelMappingUtils.createDeleteServiceReply(
+                    input, ResponseCodes.FINAL_ACK_YES,
+                    LogMessages.RENDERER_DELETE_FAILED, ResponseCodes.RESPONSE_FAILED);
+        }
+        LOG.info("RPC tempServiceDelete in progress...");
+        ConfigurationResponseCommon common = output.getConfigurationResponseCommon();
+        return ModelMappingUtils.createDeleteServiceReply(
+                input, common.getAckFinalIndicator(),
+                common.getResponseMessage(), common.getResponseCode());
+    }
+
+}
@@ -12,32 +12,33 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TopologyUpdateResult;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TopologyUpdateResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChanges;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.Resource;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Link;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToABuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.Resource;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Link;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
@@ -48,21 +49,25 @@ import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Component
-public class NetworkModelListenerImpl implements TransportpceNetworkmodelListener, NetworkListener {
+@Component(service = {NetworkModelNotificationHandler.class, NetworkListener.class})
+public class NetworkModelNotificationHandler implements NetworkListener {
 
-    private static final Logger LOG = LoggerFactory.getLogger(NetworkModelListenerImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(NetworkModelNotificationHandler.class);
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private TopologyUpdateResult topologyUpdateResult;
 
     @Activate
-    public NetworkModelListenerImpl(@Reference NotificationPublishService notificationPublishService,
+    public NetworkModelNotificationHandler(@Reference NotificationPublishService notificationPublishService,
             @Reference ServiceDataStoreOperations serviceDataStoreOperations) {
         this.serviceDataStoreOperations = serviceDataStoreOperations;
     }
 
-    @Override
-    public void onTopologyUpdateResult(TopologyUpdateResult notification) {
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(TopologyUpdateResult.class, this::onTopologyUpdateResult)));
+    }
+
+    void onTopologyUpdateResult(TopologyUpdateResult notification) {
         LOG.debug("Topology update notification: {}", notification);
         if (compareTopologyUpdateResult(notification)) {
             LOG.warn("TopologyUpdateResult already wired !");
similarity index 80%
rename from servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceListenerImpl.java
rename to servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/PceNotificationHandler.java
index cc003739098640a5e93129234deae99999b3bf0b..9ce49beebabc11b418824bbe80f3d0d5cae033d5 100644 (file)
@@ -8,7 +8,9 @@
 package org.opendaylight.transportpce.servicehandler.listeners;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Set;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
@@ -16,30 +18,29 @@ import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
 import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEndBuilder;
 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 PceListenerImpl implements TransportpcePceListener, PceListener {
+@Component(service = {PceNotificationHandler.class, PceListener.class})
+public class PceNotificationHandler implements PceListener {
 
-    private static final Logger LOG = LoggerFactory.getLogger(PceListenerImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(PceNotificationHandler.class);
     private static final String PUBLISHER = "PceListener";
 
     private ServicePathRpcResult servicePathRpcResult;
@@ -53,7 +54,7 @@ public class PceListenerImpl implements TransportpcePceListener, PceListener {
     private NotificationPublishService notificationPublishService;
 
     @Activate
-    public PceListenerImpl(
+    public PceNotificationHandler(
             @Reference RendererServiceOperations rendererServiceOperations,
             @Reference PathComputationService pathComputationService,
             @Reference NotificationPublishService notificationPublishService,
@@ -68,8 +69,12 @@ public class PceListenerImpl implements TransportpcePceListener, PceListener {
         this.notificationPublishService = notificationPublishService;
     }
 
-    @Override
-    public void onServicePathRpcResult(ServicePathRpcResult notification) {
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(ServicePathRpcResult.class, this::onServicePathRpcResult)));
+    }
+
+    private void onServicePathRpcResult(ServicePathRpcResult notification) {
         if (compareServicePathRpcResult(notification)) {
             LOG.warn("ServicePathRpcResult already wired !");
             return;
@@ -96,6 +101,7 @@ public class PceListenerImpl implements TransportpcePceListener, PceListener {
     private void onPathComputationResult(ServicePathRpcResult notification) {
         LOG.info("PCE '{}' Notification received : {}", servicePathRpcResult.getNotificationType().getName(),
                 notification);
+
         if (!checkStatus(notification)) {
             return;
         }
@@ -119,7 +125,9 @@ public class PceListenerImpl implements TransportpcePceListener, PceListener {
         }
         OperationResult operationResult = null;
         if (tempService) {
-            operationResult = this.serviceDataStoreOperations.createTempService(input.getTempServiceCreateInput());
+            operationResult =
+                    this.serviceDataStoreOperations.createTempService(
+                            input.getTempServiceCreateInput(), pathDescription);
             if (!operationResult.isSuccess()) {
                 LOG.error("Temp Service not created in datastore !");
             }
@@ -150,7 +158,8 @@ public class PceListenerImpl implements TransportpcePceListener, PceListener {
         ServiceImplementationRequestInput serviceImplementationRequest =
             ModelMappingUtils.createServiceImplementationRequest(input, pathDescription);
         LOG.info("Sending serviceImplementation request : {}", serviceImplementationRequest);
-        this.rendererServiceOperations.serviceImplementation(serviceImplementationRequest);
+        LOG.debug("Temp-service value is {}", tempService);
+        this.rendererServiceOperations.serviceImplementation(serviceImplementationRequest, tempService);
     }
 
     /**
@@ -219,26 +228,47 @@ public class PceListenerImpl implements TransportpcePceListener, PceListener {
             LOG.error("PCE cancel returned an unknown RpcStatusEx code !");
             return;
         }
-        Services service = serviceDataStoreOperations.getService(input.getServiceName()).orElseThrow();
-        PublishNotificationProcessServiceBuilder nbiNotificationBuilder =
-            new PublishNotificationProcessServiceBuilder()
-                .setServiceName(service.getServiceName())
-                .setServiceAEnd(new ServiceAEndBuilder(service.getServiceAEnd()).build())
-                .setServiceZEnd(new ServiceZEndBuilder(service.getServiceZEnd()).build())
-                .setCommonId(service.getCommonId())
-                .setConnectionType(service.getConnectionType())
-                .setPublisherName(PUBLISHER);
+        PublishNotificationProcessServiceBuilder nbiNotificationBuilder;
+        State serviceOpState;
+        if (tempService) {
+            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list.Services
+                    tempServiceList = serviceDataStoreOperations.getTempService(input.getServiceName()).orElseThrow();
+            serviceOpState = tempServiceList.getOperationalState();
+            nbiNotificationBuilder =
+                    new PublishNotificationProcessServiceBuilder()
+                            .setServiceAEnd(new ServiceAEndBuilder(tempServiceList.getServiceAEnd()).build())
+                            .setServiceZEnd(new ServiceZEndBuilder(tempServiceList.getServiceZEnd()).build())
+                            .setCommonId(tempServiceList.getCommonId())
+                            .setConnectionType(tempServiceList.getConnectionType())
+                            .setIsTempService(true)
+                            .setPublisherName(PUBLISHER);
+        } else {
+            Services service = serviceDataStoreOperations.getService(input.getServiceName()).orElseThrow();
+            serviceOpState = service.getOperationalState();
+            nbiNotificationBuilder =
+                    new PublishNotificationProcessServiceBuilder()
+                            .setServiceName(service.getServiceName())
+                            .setServiceAEnd(new ServiceAEndBuilder(service.getServiceAEnd()).build())
+                            .setServiceZEnd(new ServiceZEndBuilder(service.getServiceZEnd()).build())
+                            .setCommonId(service.getCommonId())
+                            .setIsTempService(false)
+                            .setConnectionType(service.getConnectionType())
+                            .setPublisherName(PUBLISHER);
+
+        }
+
         if (servicePathRpcResult.getStatus() == RpcStatusEx.Failed) {
             LOG.info("PCE cancel resource failed !");
             sendNbiNotification(
                 nbiNotificationBuilder
                     .setResponseFailed("PCE cancel resource failed !")
                     .setMessage("ServiceDelete request failed ...")
-                    .setOperationalState(service.getOperationalState())
+                    .setOperationalState(serviceOpState)
                     .build());
             return;
         }
         LOG.info("PCE cancel resource done OK !");
+        // Here the input refers to the transportPCE API and the serviceName will be commonId for temp-service
         OperationResult deleteServicePathOperationResult =
                 this.serviceDataStoreOperations.deleteServicePath(input.getServiceName());
         if (!deleteServicePathOperationResult.isSuccess()) {
@@ -260,14 +290,15 @@ public class PceListenerImpl implements TransportpcePceListener, PceListener {
                     .setOperationalState(State.Degraded)
                     .build());
         } else {
-            LOG.warn("{}Service was not removed from datastore !", serviceType);
+            LOG.warn("{} Service was not removed from datastore !", serviceType);
             sendNbiNotification(
                 nbiNotificationBuilder
                     .setResponseFailed(serviceType + "Service was not removed from datastore !")
                     .setMessage("ServiceDelete request failed ...")
-                    .setOperationalState(service.getOperationalState())
+                    .setOperationalState(serviceOpState)
                     .build());
         }
+        // TODO: should we re-initialize the temp-service boolean to false?
         /**
          * if it was an RPC serviceReconfigure, re-launch PCR.
          */
@@ -11,7 +11,9 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.common.StringConstants;
 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
@@ -21,18 +23,22 @@ import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultShBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRpcResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.rpc.result.PathComputationResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.rpc.result.path.computation.result.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.rpc.result.path.computation.result.ZToABuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationProcessServiceBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service.ServiceZEndBuilder;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
@@ -45,11 +51,11 @@ import org.slf4j.LoggerFactory;
  * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
  *
  */
-@Component
-public class RendererListenerImpl implements TransportpceRendererListener, RendererListener {
+@Component(service = {RendererNotificationHandler.class, RendererListener.class})
+public class RendererNotificationHandler implements RendererListener {
 
     private static final String PUBLISHER = "RendererListener";
-    private static final Logger LOG = LoggerFactory.getLogger(RendererListenerImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(RendererNotificationHandler.class);
     private RendererRpcResultSp serviceRpcResultSp;
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private ServiceInput input;
@@ -58,9 +64,8 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
     private NotificationPublishService notificationPublishService;
     private final NetworkModelService networkModelService;
 
-
     @Activate
-    public RendererListenerImpl(@Reference PathComputationService pathComputationService,
+    public RendererNotificationHandler(@Reference PathComputationService pathComputationService,
             @Reference NotificationPublishService notificationPublishService,
             @Reference NetworkModelService networkModelService) {
         this.pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
@@ -70,8 +75,12 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
         this.networkModelService = networkModelService;
     }
 
-    @Override
-    public void onRendererRpcResultSp(RendererRpcResultSp notification) {
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(RendererRpcResultSp.class, this::onRendererRpcResultSp)));
+    }
+
+    private void onRendererRpcResultSp(RendererRpcResultSp notification) {
         if (compareServiceRpcResultSp(notification)) {
             LOG.warn("ServiceRpcResultSp already wired !");
             return;
@@ -111,6 +120,7 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
                         .setServiceAEnd(new ServiceAEndBuilder(service.getServiceAEnd()).build())
                         .setServiceZEnd(new ServiceZEndBuilder(service.getServiceZEnd()).build())
                         .setCommonId(service.getCommonId())
+                        .setIsTempService(false)
                         .setConnectionType(service.getConnectionType())
                         .setResponseFailed("Renderer service delete failed !")
                         .setMessage("ServiceDelete request failed ...")
@@ -167,42 +177,86 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
             LOG.debug("serviceDataStoreOperations is null");
             return;
         }
-
         updateOtnTopology(notification, false);
-
-        PublishNotificationProcessServiceBuilder nbiNotificationBuilder = new PublishNotificationProcessServiceBuilder()
-                .setServiceName(input.getServiceName())
+        PublishNotificationProcessServiceBuilder nbiNotificationBuilder =
+            new PublishNotificationProcessServiceBuilder()
                 .setServiceAEnd(new ServiceAEndBuilder(input.getServiceAEnd()).build())
                 .setServiceZEnd(new ServiceZEndBuilder(input.getServiceZEnd()).build())
-                .setCommonId(input.getCommonId()).setConnectionType(input.getConnectionType())
                 .setPublisherName(PUBLISHER);
-        OperationResult operationResult;
         String serviceTemp = "";
         if (tempService) {
-            operationResult = this.serviceDataStoreOperations.modifyTempService(
+            nbiNotificationBuilder.setCommonId(input.getCommonId()).setConnectionType(input.getConnectionType());
+            nbiNotificationBuilder.setIsTempService(true);
+            if (input.getServiceName() != null) {
+                nbiNotificationBuilder.setServiceName(input.getServiceName());
+            }
+            OperationResult operationResult = this.serviceDataStoreOperations.modifyTempService(
                     serviceRpcResultSp.getServiceName(), State.InService, AdminStates.InService);
             serviceTemp = "Temp ";
+            if (operationResult.isSuccess()) {
+                ServiceRpcResult serviceRpcResult =
+                    sendServiceRpcResultNotification(notification, ServiceNotificationTypes.ServiceCreateResult);
+                sendNbiNotification(nbiNotificationBuilder
+                    .setResponseFailed("")
+                    .setMessage("Temp Service implemented")
+                    .setAToZ(
+                        new org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service
+                                .AToZBuilder()
+                            .setFrequency(serviceRpcResult.getPathComputationResult().getAToZ().getFrequency())
+                            .setWidth(serviceRpcResult.getPathComputationResult().getAToZ().getWidth())
+                            .setOpticalOperationalMode(serviceRpcResult.getPathComputationResult()
+                                        .getAToZ().getOpticalOperationalMode())
+                            // TODO: add GNSR, OSNR, min/max output powers
+                            .build())
+                    .setZToA(
+                        new org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.notification.process.service
+                                .ZToABuilder()
+                            .setFrequency(serviceRpcResult.getPathComputationResult().getZToA().getFrequency())
+                            .setWidth(serviceRpcResult.getPathComputationResult().getZToA().getWidth())
+                            .setOpticalOperationalMode(serviceRpcResult.getPathComputationResult()
+                                        .getZToA().getOpticalOperationalMode())
+                            // TODO: add GNSR, OSNR, min/max output powers
+                            .build())
+                    .setOperationalState(State.InService)
+                    .build());
+                LOG.debug("For the Temp service, sending notification on service-result-rpc");
+                return;
+            }
         } else {
-            operationResult = this.serviceDataStoreOperations.modifyService(
+            // Here the service is implemented and the tempService has to be deleted if present
+            nbiNotificationBuilder.setServiceName(input.getServiceName()).setConnectionType(input.getConnectionType());
+            // Make sure temp-service is false
+            nbiNotificationBuilder.setIsTempService(false);
+            String commonId = input.getCommonId();
+            if (commonId != null) {
+                nbiNotificationBuilder.setCommonId(commonId);
+                if (this.serviceDataStoreOperations.getTempService(commonId).isPresent()) {
+                    LOG.info("Temp-service exists with the common-Id {}", commonId);
+                    // Delete the common-id from this temp-service-list here
+                    OperationResult tempServiceListDelete = serviceDataStoreOperations.deleteTempService(commonId);
+                    //TODO: Also need to delete the service-path from the transportpce-service-path list
+                    this.serviceDataStoreOperations.deleteServicePath(commonId);
+                    LOG.info("Result for temp-service-list with {} is {}", commonId, tempServiceListDelete);
+                }
+            }
+            OperationResult operationResult = this.serviceDataStoreOperations.modifyService(
                     serviceRpcResultSp.getServiceName(), State.InService, AdminStates.InService);
-        }
-        if (operationResult.isSuccess()) {
-            sendNbiNotification(nbiNotificationBuilder
+            if (operationResult.isSuccess()) {
+                sendNbiNotification(nbiNotificationBuilder
                     .setResponseFailed("")
                     .setMessage("Service implemented !")
                     .setOperationalState(State.InService)
                     .build());
-            if (!tempService) {
                 sendServiceHandlerNotification(notification, ServiceNotificationTypes.ServiceCreateResult);
+                return;
             }
-        } else {
-            LOG.warn("{}Service status not updated in datastore !", serviceTemp);
-            sendNbiNotification(nbiNotificationBuilder
-                    .setResponseFailed(serviceTemp + "Service status not updated in datastore !")
-                    .setMessage("ServiceCreate request failed ...")
-                    .setOperationalState(State.OutOfService)
-                    .build());
         }
+        LOG.warn("{}Service status not updated in datastore !", serviceTemp);
+        sendNbiNotification(nbiNotificationBuilder
+            .setResponseFailed(serviceTemp + "Service status not updated in datastore !")
+            .setMessage("ServiceCreate request failed ...")
+            .setOperationalState(State.OutOfService)
+            .build());
     }
 
     /**
@@ -210,7 +264,8 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
      * @param notification RendererRpcResultSp
      * @param type ServiceNotificationTypes
      */
-    private void sendServiceHandlerNotification(RendererRpcResultSp notification, ServiceNotificationTypes type) {
+    private void sendServiceHandlerNotification(
+            RendererRpcResultSp notification, ServiceNotificationTypes type) {
         try {
             ServiceRpcResultSh serviceHandlerNotification = new ServiceRpcResultShBuilder()
                     .setAToZDirection(notification.getAToZDirection())
@@ -221,15 +276,62 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
                     .setNotificationType(type)
                     .build();
             LOG.debug("Service update in datastore OK, sending notification {}", serviceHandlerNotification);
-            notificationPublishService.putNotification(
-                    serviceHandlerNotification);
+            notificationPublishService.putNotification(serviceHandlerNotification);
+        } catch (InterruptedException e) {
+            LOG.warn("Something went wrong while sending notification for service {}",
+                    serviceRpcResultSp.getServiceName(), e);
+            Thread.currentThread().interrupt();
+        }
+    }
+
+    private ServiceRpcResult sendServiceRpcResultNotification(
+            RendererRpcResultSp notification, ServiceNotificationTypes type) {
+        try {
+            ServiceRpcResult serviceRpcResult = new ServiceRpcResultBuilder()
+                    .setServiceName(notification.getServiceName())
+                    .setNotificationType(type)
+                    .setStatusMessage(notification.getStatusMessage())
+                    .setCommonId(notification.getCommonId())
+                    .setPathComputationResult(new PathComputationResultBuilder()
+                            .setAToZ(new AToZBuilder()
+                                            .setFrequency(notification
+                                                            .getAToZDirection()
+                                                            .getCentralFrequency())
+                                            .setWidth(notification
+                                                            .getAToZDirection()
+                                                            .getWidth())
+                                            // TODO: here the optical operational mode should be set
+                                            // A default value is set here
+                                            .setOpticalOperationalMode("OR-W-400G-oFEC-63.1Gbd")
+                                            // TODO: also set the GNSR, OSNR, power values
+                                            .build())
+                            .setZToA(new ZToABuilder()
+                                            .setFrequency(notification
+                                                            .getZToADirection()
+                                                            .getCentralFrequency())
+                                            .setWidth(notification
+                                                            .getZToADirection()
+                                                            .getWidth())
+                                            // TODO: here the optical operational mode should be set
+                                            // A default value is set here
+                                            .setOpticalOperationalMode("OR-W-400G-oFEC-63.1Gbd")
+                                            // TODO: also set the GNSR, OSNR, power values
+                                            .build())
+                            .build())
+                    .build();
+            LOG.info("Sending the notification for service-rpc-result {}", serviceRpcResult);
+            notificationPublishService.putNotification(serviceRpcResult);
+            return serviceRpcResult;
         } catch (InterruptedException e) {
             LOG.warn("Something went wrong while sending notification for service {}",
                     serviceRpcResultSp.getServiceName(), e);
             Thread.currentThread().interrupt();
         }
+        return null;
     }
 
+
+
     /**
      * Process failed service implementation for serviceName.
      * @param serviceName String
@@ -243,6 +345,7 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
                 .setServiceZEnd(new ServiceZEndBuilder(service.getServiceZEnd()).build())
                 .setCommonId(service.getCommonId())
                 .setConnectionType(service.getConnectionType())
+                .setIsTempService(false)
                 .setResponseFailed("Renderer implementation failed !")
                 .setMessage("ServiceCreate request failed ...")
                 .setOperationalState(service.getOperationalState())
@@ -261,7 +364,7 @@ public class RendererListenerImpl implements TransportpceRendererListener, Rende
         } else {
             deleteServiceOperationResult = this.serviceDataStoreOperations.deleteService(serviceName);
         }
-        if (deleteServiceOperationResult.isSuccess()) {
+        if (!deleteServiceOperationResult.isSuccess()) {
             LOG.warn("{}Service was not removed from datastore!", serviceType);
         }
     }
index 389820b0e0dfea42708ed7b17eff16a25f91956d..967cbe4ff08404997ef7ce4c8ff9c5866daea435 100644 (file)
@@ -9,8 +9,8 @@ package org.opendaylight.transportpce.servicehandler.listeners;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
@@ -21,31 +21,34 @@ import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Restorable;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.routing.metric.RoutingMetric;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.Restorable;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.routing.metric.RoutingMetric;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.ServiceResiliency;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDelete;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReroute;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmServiceBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -58,33 +61,33 @@ public class ServiceListener implements DataTreeChangeListener<Services> {
 
     private static final Logger LOG = LoggerFactory.getLogger(ServiceListener.class);
     private static final String PUBLISHER = "ServiceListener";
-    private OrgOpenroadmServiceService servicehandlerImpl;
+    private final RpcService rpcService;
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private NotificationPublishService notificationPublishService;
     private Map<String, ServiceInput> mapServiceInputReroute;
     private final ScheduledExecutorService executor;
 
     @Activate
-    public ServiceListener(@Reference OrgOpenroadmServiceService servicehandlerImpl,
+    public ServiceListener(@Reference RpcService rpcService,
             @Reference ServiceDataStoreOperations serviceDataStoreOperations,
             @Reference NotificationPublishService notificationPublishService) {
-        this.servicehandlerImpl = servicehandlerImpl;
-        this.notificationPublishService = notificationPublishService;
+        this.rpcService = rpcService;
         this.serviceDataStoreOperations = serviceDataStoreOperations;
+        this.notificationPublishService = notificationPublishService;
         this.executor = MoreExecutors.getExitingScheduledExecutorService(new ScheduledThreadPoolExecutor(4));
         mapServiceInputReroute = new HashMap<>();
     }
 
     @Override
-    public void onDataTreeChanged(Collection<DataTreeModification<Services>> changes) {
+    public void onDataTreeChanged(List<DataTreeModification<Services>> changes) {
         LOG.info("onDataTreeChanged - {}", this.getClass().getSimpleName());
         for (DataTreeModification<Services> change : changes) {
             DataObjectModification<Services> rootService = change.getRootNode();
-            if (rootService.getDataBefore() == null) {
+            if (rootService.dataBefore() == null) {
                 continue;
             }
-            String serviceInputName = rootService.getDataBefore().key().getServiceName();
-            switch (rootService.getModificationType()) {
+            String serviceInputName = rootService.dataBefore().key().getServiceName();
+            switch (rootService.modificationType()) {
                 case DELETE:
                     LOG.info("Service {} correctly deleted from controller", serviceInputName);
                     if (mapServiceInputReroute.get(serviceInputName) != null) {
@@ -92,8 +95,8 @@ public class ServiceListener implements DataTreeChangeListener<Services> {
                     }
                     break;
                 case WRITE:
-                    Services inputBefore = rootService.getDataBefore();
-                    Services inputAfter = rootService.getDataAfter();
+                    Services inputBefore = rootService.dataBefore();
+                    Services inputAfter = rootService.dataAfter();
                     if (inputBefore.getOperationalState() == State.InService
                             && inputAfter.getOperationalState() == State.OutOfService) {
                         LOG.info("Service {} is becoming outOfService", serviceInputName);
@@ -153,7 +156,7 @@ public class ServiceListener implements DataTreeChangeListener<Services> {
                     }
                     break;
                 default:
-                    LOG.debug("Unknown modification type {}", rootService.getModificationType().name());
+                    LOG.debug("Unknown modification type {}", rootService.modificationType().name());
                     break;
             }
         }
@@ -172,7 +175,7 @@ public class ServiceListener implements DataTreeChangeListener<Services> {
             return;
         }
         Services service = serviceOpt.orElseThrow();
-        ListenableFuture<RpcResult<ServiceDeleteOutput>> res = this.servicehandlerImpl.serviceDelete(
+        ListenableFuture<RpcResult<ServiceDeleteOutput>> res = rpcService.getRpc(ServiceDelete.class).invoke(
                 new ServiceDeleteInputBuilder()
                         .setSdncRequestHeader(new SdncRequestHeaderBuilder(service.getSdncRequestHeader())
                                 .setRpcAction(RpcActions.ServiceDelete)
@@ -217,7 +220,7 @@ public class ServiceListener implements DataTreeChangeListener<Services> {
      * @param serviceNameToReroute Name of the service
      */
     private void serviceRerouteStep2(String serviceNameToReroute) {
-        ListenableFuture<RpcResult<ServiceCreateOutput>> res = this.servicehandlerImpl.serviceCreate(
+        ListenableFuture<RpcResult<ServiceCreateOutput>> res = rpcService.getRpc(ServiceCreate.class).invoke(
                 mapServiceInputReroute.get(serviceNameToReroute).getServiceCreateInput());
         try {
             String httpResponseCode = res.get().getResult().getConfigurationResponseCommon().getResponseCode();
@@ -249,7 +252,7 @@ public class ServiceListener implements DataTreeChangeListener<Services> {
                         .setRpcAction(RpcActions.ServiceReroute)
                         .build())
                 .build();
-        ListenableFuture<RpcResult<ServiceRerouteOutput>> res = this.servicehandlerImpl.serviceReroute(
+        ListenableFuture<RpcResult<ServiceRerouteOutput>> res = rpcService.getRpc(ServiceReroute.class).invoke(
                 serviceRerouteInput);
         try {
             return res.get().getResult().getConfigurationResponseCommon().getResponseCode()
@@ -273,4 +276,5 @@ public class ServiceListener implements DataTreeChangeListener<Services> {
             Thread.currentThread().interrupt();
         }
     }
+
 }
index 056b291e600bb544c731a4cb48a01a4dabb7e879..7eb2e29c1ba6ab7b6474fdfec907a77194340f04 100644 (file)
@@ -18,32 +18,32 @@ import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.Endpoints;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.reroute.request.input.EndpointsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.reroute.request.input.Endpoints;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.reroute.request.input.EndpointsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultShBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeader;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceEndpoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeader;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.PceMetric;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParameters;
@@ -78,7 +78,8 @@ public class PCEServiceWrapper {
             return performPCE(serviceCreateInput.getHardConstraints(), serviceCreateInput.getSoftConstraints(),
                     serviceCreateInput.getServiceName(), serviceCreateInput.getSdncRequestHeader(),
                     serviceCreateInput.getServiceAEnd(), serviceCreateInput.getServiceZEnd(),
-                    ServiceNotificationTypes.ServiceCreateResult, reserveResource);
+                    ServiceNotificationTypes.ServiceCreateResult, reserveResource,
+                    serviceCreateInput.getCustomer());
         } else {
             return returnPCEFailed();
         }
@@ -91,7 +92,8 @@ public class PCEServiceWrapper {
             return performPCE(tempServiceCreateInput.getHardConstraints(), tempServiceCreateInput.getSoftConstraints(),
                     tempServiceCreateInput.getCommonId(), tempServiceCreateInput.getSdncRequestHeader(),
                     tempServiceCreateInput.getServiceAEnd(), tempServiceCreateInput.getServiceZEnd(),
-                    ServiceNotificationTypes.ServiceCreateResult, reserveResource);
+                    ServiceNotificationTypes.ServiceCreateResult, reserveResource,
+                    tempServiceCreateInput.getCustomer());
         } else {
             return returnPCEFailed();
         }
@@ -106,7 +108,8 @@ public class PCEServiceWrapper {
                     serviceFeasibilityCheckInput.getSoftConstraints(), serviceFeasibilityCheckInput.getCommonId(),
                     serviceFeasibilityCheckInput.getSdncRequestHeader(), serviceFeasibilityCheckInput.getServiceAEnd(),
                     serviceFeasibilityCheckInput.getServiceZEnd(),
-                    ServiceNotificationTypes.ServiceCreateResult, reserveResource);
+                    ServiceNotificationTypes.ServiceCreateResult, reserveResource,
+                    serviceFeasibilityCheckInput.getCustomer());
         } else {
             return returnPCEFailed();
         }
@@ -114,7 +117,8 @@ public class PCEServiceWrapper {
 
     private PathComputationRequestOutput performPCE(HardConstraints hardConstraints, SoftConstraints softConstraints,
             String serviceName, SdncRequestHeader sdncRequestHeader, ServiceEndpoint serviceAEnd,
-            ServiceEndpoint serviceZEnd, ServiceNotificationTypes notifType, boolean reserveResource) {
+            ServiceEndpoint serviceZEnd, ServiceNotificationTypes notifType, boolean reserveResource,
+            String customerName) {
         LOG.info("Calling path computation.");
         notification = new ServiceRpcResultShBuilder().setNotificationType(notifType).setServiceName(serviceName)
                 .setStatus(RpcStatusEx.Pending)
@@ -127,7 +131,7 @@ public class PCEServiceWrapper {
         FutureCallback<PathComputationRequestOutput> pceCallback =
                 new PathComputationRequestOutputCallback(notifType, serviceName);
         PathComputationRequestInput pathComputationRequestInput = createPceRequestInput(serviceName, sdncRequestHeader,
-                hardConstraints, softConstraints, reserveResource, serviceAEnd, serviceZEnd);
+                hardConstraints, softConstraints, reserveResource, serviceAEnd, serviceZEnd, customerName);
         ListenableFuture<PathComputationRequestOutput> pce = this.pathComputationService
                 .pathComputationRequest(pathComputationRequestInput);
         Futures.addCallback(pce, pceCallback, executor);
@@ -173,7 +177,7 @@ public class PCEServiceWrapper {
     private PathComputationRequestInput createPceRequestInput(String serviceName,
             SdncRequestHeader serviceHandler, HardConstraints hardConstraints,
             SoftConstraints softConstraints, Boolean reserveResource, ServiceEndpoint serviceAEnd,
-            ServiceEndpoint serviceZEnd) {
+            ServiceEndpoint serviceZEnd, String customerName) {
         LOG.info("Mapping ServiceCreateInput or ServiceFeasibilityCheckInput or serviceReconfigureInput to PCE"
                 + "requests");
         ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
@@ -187,6 +191,7 @@ public class PCEServiceWrapper {
             .setHardConstraints(hardConstraints)
             .setSoftConstraints(softConstraints)
             .setPceRoutingMetric(PceMetric.TEMetric)
+            .setCustomerName(customerName)
             .setServiceAEnd(ModelMappingUtils.createServiceAEnd(serviceAEnd))
             .setServiceZEnd(ModelMappingUtils.createServiceZEnd(serviceZEnd))
             .build();
index ec2e2a7115c843b34d628f820b2b7a5b301d6d05..4bfaa6ebabef0b3d92c591f9a50beded7439bb8b 100644 (file)
@@ -22,11 +22,14 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultShBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeader;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
@@ -72,16 +75,61 @@ public class RendererServiceWrapper {
         }
     }
 
-    public ServiceDeleteOutput performRenderer(TempServiceDeleteInput tempServiceDeleteInput,
-            ServiceNotificationTypes notifType) {
+
+    // TODO: Here is where the  we are sending null values for the service and that is causing issues
+    // We are performing renderer using null values
+    public ServiceDeleteOutput performRenderer(
+            TempServiceDeleteInput tempServiceDeleteInput,
+            ServiceNotificationTypes notifType,
+            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                    .temp.service.list.Services tempService) {
         String commonId = tempServiceDeleteInput.getCommonId();
-        if (validateParams(commonId, null, true)) {
-            ServiceHandlerHeader serviceHandler = new ServiceHandlerHeaderBuilder().setRequestId(commonId).build();
-            return performRenderer(tempServiceDeleteInput.getCommonId(), serviceHandler,
-                    ServiceNotificationTypes.ServiceDeleteResult, null);
-        } else {
-            return returnRendererFailed();
-        }
+        return validateParams(commonId, null, true)
+            ? performRenderer(tempServiceDeleteInput,
+                new ServiceHandlerHeaderBuilder().setRequestId(commonId).build(),
+                ServiceNotificationTypes.ServiceDeleteResult,
+                tempService)
+            : returnRendererFailed();
+    }
+
+    private ServiceDeleteOutput performRenderer(
+            TempServiceDeleteInput tempServiceDeleteInput,
+            ServiceHandlerHeader serviceHandlerHeader,
+            ServiceNotificationTypes notifType,
+            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                    .temp.service.list.Services tempService) {
+        String commonId = tempServiceDeleteInput.getCommonId();
+        notification = new ServiceRpcResultShBuilder()
+                .setNotificationType(notifType)
+                .setServiceName(commonId)
+                .setStatus(RpcStatusEx.Pending)
+                .setStatusMessage("Service compliant, submitting temp service delete Request ...")
+                .build();
+        sendNotifications(notification);
+        FutureCallback<ServiceDeleteOutput> rendererCallback =
+                new ServiceDeleteOutputFutureCallback(notifType, commonId);
+        ServiceDeleteInput serviceDeleteInput = createRendererRequestInput(commonId, serviceHandlerHeader);
+        // Here build the regular service-list container from the temp-service-list
+        ListenableFuture<ServiceDeleteOutput> renderer =
+                this.rendererServiceOperations.serviceDelete(serviceDeleteInput,
+                        new ServicesBuilder()
+                                .setServiceName(commonId)
+                                .setServiceAEnd(new ServiceAEndBuilder(tempService.getServiceAEnd()).build())
+                                .setServiceZEnd(new ServiceZEndBuilder(tempService.getServiceZEnd()).build())
+                                .setCommonId(commonId)
+                                .build());
+        Futures.addCallback(renderer, rendererCallback, executor);
+        return new ServiceDeleteOutputBuilder()
+                .setConfigurationResponseCommon(
+                        new ConfigurationResponseCommonBuilder()
+                                .setAckFinalIndicator(ResponseCodes.FINAL_ACK_NO)
+                                .setRequestId(serviceDeleteInput
+                                        .getServiceHandlerHeader()
+                                        .getRequestId())
+                                .setResponseCode(ResponseCodes.RESPONSE_OK)
+                                .setResponseMessage("Renderer temp-service delete in progress")
+                                .build())
+                .build();
     }
 
     private ServiceDeleteOutput performRenderer(String serviceName, ServiceHandlerHeader serviceHandlerHeader,
index ced0f3969eb971f51de4f02173906f2391ee056b..dbf2099399297699b40abc27a86d7d56cf562e31 100644 (file)
@@ -10,13 +10,13 @@ package org.opendaylight.transportpce.servicehandler.service;
 import java.util.Optional;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
@@ -54,7 +54,7 @@ public interface ServiceDataStoreOperations {
      *     unique common-id of the service
      * @return Optional of Services
      */
-    Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
+    Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list
         .Services> getTempService(String commonId);
 
     /**
@@ -124,9 +124,12 @@ public interface ServiceDataStoreOperations {
      *
      * @param tempServiceCreateInput tempServiceCreateInput data for creation of
      *                               service
+     * @param pathDescription data to update the transport-assignment of the service
      * @return result of createTempService operation
      */
-    OperationResult createTempService(TempServiceCreateInput tempServiceCreateInput);
+    OperationResult createTempService(TempServiceCreateInput tempServiceCreateInput,
+                                      org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
+                                              .service.path.rpc.result.PathDescription pathDescription);
 
     Optional<ServicePathList> getServicePaths();
 
index bd0697bed43cf01aad1799fe2a0d4c037271bfb1..4704950da306a21e473494a3755a03c56ccce294 100644 (file)
@@ -10,12 +10,10 @@ package org.opendaylight.transportpce.servicehandler.service;
 import com.google.common.util.concurrent.FluentFuture;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.ReadTransaction;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
 import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
@@ -23,18 +21,18 @@ import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesKey;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
@@ -92,9 +90,10 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
         try {
             LOG.info("initializing service registry");
             WriteTransaction transaction = this.dataBroker.newWriteOnlyTransaction();
-            InstanceIdentifier<ServiceList> iid = InstanceIdentifier.create(ServiceList.class);
-            ServiceList initialRegistry = new ServiceListBuilder().build();
-            transaction.put(LogicalDatastoreType.OPERATIONAL, iid, initialRegistry);
+            transaction.merge(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(ServiceList.class),
+                new ServiceListBuilder().build());
             FluentFuture<? extends @NonNull CommitInfo> future = transaction.commit();
             future.get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
@@ -106,9 +105,10 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
         try {
             LOG.info("initializing temp service registry");
             WriteTransaction transaction = this.dataBroker.newWriteOnlyTransaction();
-            InstanceIdentifier<TempServiceList> iid = InstanceIdentifier.create(TempServiceList.class);
-            TempServiceList initialRegistry = new TempServiceListBuilder().build();
-            transaction.put(LogicalDatastoreType.OPERATIONAL, iid, initialRegistry);
+            transaction.merge(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(TempServiceList.class),
+                new TempServiceListBuilder().build());
             FluentFuture<? extends @NonNull CommitInfo> future = transaction.commit();
             future.get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
@@ -119,12 +119,13 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     @Override
     public Optional<Services> getService(String serviceName) {
         try {
-            ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction();
-            InstanceIdentifier<Services> iid =
-                    InstanceIdentifier.create(ServiceList.class).child(Services.class, new ServicesKey(serviceName));
-            Future<java.util.Optional<Services>> future =
-                    readTx.read(LogicalDatastoreType.OPERATIONAL, iid);
-            return future.get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
+            return this.dataBroker.newReadOnlyTransaction()
+                    .read(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.create(ServiceList.class)
+                            .child(Services.class, new ServicesKey(serviceName))
+                        )
+                    .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn("Reading service {} failed:", serviceName, e);
         }
@@ -134,12 +135,11 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     @Override
     public Optional<ServiceList> getServices() {
         try {
-            ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction();
-            InstanceIdentifier<ServiceList> iid =
-                    InstanceIdentifier.create(ServiceList.class);
-            Future<java.util.Optional<ServiceList>> future =
-                    readTx.read(LogicalDatastoreType.OPERATIONAL, iid);
-            return future.get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
+            return this.dataBroker.newReadOnlyTransaction()
+                    .read(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.create(ServiceList.class))
+                    .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn("Reading services failed:", e);
         }
@@ -147,19 +147,19 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     }
 
     @Override
-    public Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list.Services>
-            getTempService(String serviceName) {
+    public Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+            .temp.service.list.Services> getTempService(String serviceName) {
         try {
-            ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction();
-            InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                .Services> iid = InstanceIdentifier.create(TempServiceList.class).child(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list.Services.class,
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list.ServicesKey(
-                        serviceName));
-            FluentFuture<Optional<
-                org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list.Services>> future
-                = readTx.read(LogicalDatastoreType.OPERATIONAL, iid);
-            return future.get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
+            return this.dataBroker.newReadOnlyTransaction()
+                    .read(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.create(TempServiceList.class)
+                            .child(
+                                org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                                    .temp.service.list.Services.class,
+                                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                                    .temp.service.list.ServicesKey(serviceName)))
+                    .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.warn("Reading service {} failed:", serviceName, e);
         }
@@ -171,9 +171,10 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
         LOG.debug(DELETING_SERVICE_MSG, serviceName);
         try {
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            InstanceIdentifier<Services> iid =
-                    InstanceIdentifier.create(ServiceList.class).child(Services.class, new ServicesKey(serviceName));
-            writeTx.delete(LogicalDatastoreType.OPERATIONAL, iid);
+            writeTx.delete(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(ServiceList.class)
+                    .child(Services.class, new ServicesKey(serviceName)));
             writeTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -187,12 +188,14 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
         LOG.debug(DELETING_SERVICE_MSG, commonId);
         try {
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                .Services> iid = InstanceIdentifier.create(TempServiceList.class).child(org.opendaylight.yang.gen.v1
-                        .http.org.openroadm.service.rev211210.temp.service.list.Services.class,
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                            .ServicesKey(commonId));
-            writeTx.delete(LogicalDatastoreType.OPERATIONAL, iid);
+            writeTx.delete(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(TempServiceList.class)
+                    .child(
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                            .temp.service.list.Services.class,
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                            .temp.service.list.ServicesKey(commonId)));
             writeTx.commit().get(Timeouts.DATASTORE_DELETE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -205,19 +208,20 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public OperationResult modifyService(String serviceName, State operationalState, AdminStates administrativeState) {
         LOG.debug("Modifying '{}' Service", serviceName);
         Optional<Services> readService = getService(serviceName);
-        if (!readService.isPresent()) {
+        if (readService.isEmpty()) {
             LOG.warn("modifyService: {}", LogMessages.SERVICE_NOT_FOUND);
             return OperationResult.failed(LogMessages.SERVICE_NOT_FOUND);
         }
         try {
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            InstanceIdentifier<Services> iid = InstanceIdentifier.create(ServiceList.class)
-                    .child(Services.class, new ServicesKey(serviceName));
-            Services services = new ServicesBuilder(readService.orElseThrow())
-                .setOperationalState(operationalState)
-                .setAdministrativeState(administrativeState)
-                .build();
-            writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, services);
+            writeTx.merge(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(ServiceList.class)
+                    .child(Services.class, new ServicesKey(serviceName)),
+                new ServicesBuilder(readService.orElseThrow())
+                    .setOperationalState(operationalState)
+                    .setAdministrativeState(administrativeState)
+                    .build());
             writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -227,29 +231,30 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     }
 
     @Override
-    public OperationResult modifyTempService(String serviceName, State operationalState,
-        AdminStates administrativeState) {
+    public OperationResult modifyTempService(
+            String serviceName, State operationalState, AdminStates administrativeState) {
         LOG.debug("Modifying '{}' Temp Service", serviceName);
-        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-            .Services> readService = getTempService(serviceName);
-        if (!readService.isPresent()) {
+        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                .temp.service.list.Services> readService = getTempService(serviceName);
+        if (readService.isEmpty()) {
             LOG.warn("modifyTempService: {}", LogMessages.SERVICE_NOT_FOUND);
             return OperationResult.failed(LogMessages.SERVICE_NOT_FOUND);
         }
         try {
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                .Services> iid = InstanceIdentifier.create(TempServiceList.class)
-                    .child(org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                            .Services.class, new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
-                                .temp.service.list.ServicesKey(serviceName));
-            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list.Services services =
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list.ServicesBuilder(
-                    readService.orElseThrow())
-                .setOperationalState(operationalState)
-                .setAdministrativeState(administrativeState)
-                .build();
-            writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, services);
+            writeTx.merge(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(TempServiceList.class)
+                    .child(
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                            .temp.service.list.Services.class,
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                            .temp.service.list.ServicesKey(serviceName)),
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .temp.service.list.ServicesBuilder(readService.orElseThrow())
+                    .setOperationalState(operationalState)
+                    .setAdministrativeState(administrativeState)
+                    .build());
             writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -262,11 +267,12 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public OperationResult createService(ServiceCreateInput serviceCreateInput) {
         LOG.debug("Writing '{}' Service", serviceCreateInput.getServiceName());
         try {
-            InstanceIdentifier<Services> iid = InstanceIdentifier.create(ServiceList.class)
-                    .child(Services.class, new ServicesKey(serviceCreateInput.getServiceName()));
-            Services service = ModelMappingUtils.mappingServices(serviceCreateInput, null);
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            writeTx.put(LogicalDatastoreType.OPERATIONAL, iid, service);
+            writeTx.put(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(ServiceList.class)
+                    .child(Services.class, new ServicesKey(serviceCreateInput.getServiceName())),
+                ModelMappingUtils.mappingServices(serviceCreateInput, null));
             writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -276,18 +282,21 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     }
 
     @Override
-    public OperationResult createTempService(TempServiceCreateInput tempServiceCreateInput) {
+    public OperationResult createTempService(
+            TempServiceCreateInput tempServiceCreateInput,
+            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205
+                    .service.path.rpc.result.PathDescription pathDescription) {
         LOG.debug("Writing '{}' Temp Service", tempServiceCreateInput.getCommonId());
         try {
-            InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                .Services> iid = InstanceIdentifier.create(TempServiceList.class)
-                    .child(org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                            .Services.class, new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp
-                                .service.list.ServicesKey(tempServiceCreateInput.getCommonId()));
-            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
-                .Services service = ModelMappingUtils.mappingServices(tempServiceCreateInput);
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            writeTx.put(LogicalDatastoreType.OPERATIONAL, iid, service);
+            writeTx.put(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(TempServiceList.class)
+                    .child(org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                            .temp.service.list.Services.class,
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                            .temp.service.list.ServicesKey(tempServiceCreateInput.getCommonId())),
+                ModelMappingUtils.mappingServices(tempServiceCreateInput, pathDescription));
             writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -301,11 +310,11 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public Optional<ServicePathList> getServicePaths() {
         LOG.debug("Retrieving list of ServicePath...");
         try {
-            ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction();
-            InstanceIdentifier<ServicePathList> servicePathListIID = InstanceIdentifier.create(ServicePathList.class);
-            Future<java.util.Optional<ServicePathList>> future = readTx.read(LogicalDatastoreType.OPERATIONAL,
-                    servicePathListIID);
-            return future.get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
+            return this.dataBroker.newReadOnlyTransaction()
+                    .read(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.create(ServicePathList.class))
+                    .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.error("Reading service path list failed. Error={}", e.getMessage());
         }
@@ -316,12 +325,12 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public Optional<ServicePaths> getServicePath(String serviceName) {
         LOG.debug("Retrieving service path of service {}", serviceName);
         try {
-            ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction();
-            InstanceIdentifier<ServicePaths> servicePathsIID = InstanceIdentifier.create(ServicePathList.class)
-                    .child(ServicePaths.class, new ServicePathsKey(serviceName));
-            Future<java.util.Optional<ServicePaths>> future = readTx.read(LogicalDatastoreType.OPERATIONAL,
-                    servicePathsIID);
-            return future.get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
+            return this.dataBroker.newReadOnlyTransaction()
+                    .read(
+                        LogicalDatastoreType.OPERATIONAL,
+                        InstanceIdentifier.create(ServicePathList.class)
+                            .child(ServicePaths.class, new ServicePathsKey(serviceName)))
+                    .get(Timeouts.DATASTORE_READ, TimeUnit.MILLISECONDS);
         } catch (InterruptedException | ExecutionException | TimeoutException e) {
             LOG.error("Reading service path failed. Error={}", e.getMessage());
         }
@@ -332,11 +341,12 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public OperationResult createServicePath(ServiceInput serviceInput, PathComputationRequestOutput outputFromPce) {
         LOG.debug("Writing '{}' ServicePath ", serviceInput.getServiceName());
         try {
-            InstanceIdentifier<ServicePaths> servicePathsIID = InstanceIdentifier.create(ServicePathList.class)
-                    .child(ServicePaths.class, new ServicePathsKey(serviceInput.getServiceName()));
-            ServicePaths servicePath = ModelMappingUtils.mappingServicePaths(serviceInput, outputFromPce);
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            writeTx.put(LogicalDatastoreType.OPERATIONAL, servicePathsIID, servicePath);
+            writeTx.put(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(ServicePathList.class)
+                    .child(ServicePaths.class, new ServicePathsKey(serviceInput.getServiceName())),
+                ModelMappingUtils.mappingServicePaths(serviceInput, outputFromPce));
             writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -350,15 +360,17 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
     public OperationResult modifyServicePath(PathDescription pathDescription, String serviceName) {
         LOG.debug("Updating servicePath because of a change in the openroadm-topology");
         Optional<ServicePaths> readServicePath = getServicePath(serviceName);
-        if (!readServicePath.isPresent()) {
+        if (readServicePath.isEmpty()) {
             LOG.warn("modifyServicePath: {}", LogMessages.SERVICE_PATH_NOT_FOUND);
             return OperationResult.failed(LogMessages.SERVICE_PATH_NOT_FOUND);
         }
         try {
             WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
-            InstanceIdentifier<ServicePaths> iid = InstanceIdentifier.create(ServicePathList.class)
-                    .child(ServicePaths.class, new ServicePathsKey(serviceName));
-            ServicePaths servicePaths = new ServicePathsBuilder()
+            writeTx.merge(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(ServicePathList.class)
+                    .child(ServicePaths.class, new ServicePathsKey(serviceName)),
+                new ServicePathsBuilder()
                     .setServiceAEnd(readServicePath.orElseThrow().getServiceAEnd())
                     .setServiceHandlerHeader(readServicePath.orElseThrow().getServiceHandlerHeader())
                     .setServicePathName(readServicePath.orElseThrow().getServicePathName())
@@ -371,9 +383,7 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
                     .setPathDescription(pathDescription)
                     .setPceRoutingMetric(readServicePath.orElseThrow().getPceRoutingMetric())
                     .setSoftConstraints(readServicePath.orElseThrow().getSoftConstraints())
-                    .build();
-
-            writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, servicePaths);
+                    .build());
             writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
             return OperationResult.ok(LogMessages.SUCCESSFUL_MESSAGE);
         } catch (TimeoutException | InterruptedException | ExecutionException e) {
@@ -384,7 +394,8 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
 
     @Override
     public OperationResult deleteServicePath(String serviceName) {
-        InstanceIdentifier<ServicePaths> servicePathsIID = InstanceIdentifier.create(ServicePathList.class)
+        InstanceIdentifier<ServicePaths> servicePathsIID =
+            InstanceIdentifier.create(ServicePathList.class)
                 .child(ServicePaths.class, new ServicePathsKey(serviceName));
         LOG.debug("Deleting service from {}", servicePathsIID);
         WriteTransaction servicePathsWriteTx = this.dataBroker.newWriteOnlyTransaction();
@@ -413,26 +424,25 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
      */
     @Deprecated
     @Override
-    public String writeOrModifyOrDeleteServiceList(String serviceName, ServiceCreateInput input,
-            PathComputationRequestOutput output, int choice) {
+    public String writeOrModifyOrDeleteServiceList(
+            String serviceName, ServiceCreateInput input, PathComputationRequestOutput output, int choice) {
         LOG.debug("WriteOrModifyOrDeleting '{}' Service", serviceName);
         WriteTransaction writeTx = this.dataBroker.newWriteOnlyTransaction();
         Optional<Services> readService = getService(serviceName);
-
         /*
          * Write Service.
          */
-        if (!readService.isPresent()) {
+        if (readService.isEmpty()) {
             if (choice != 2) {
                 LOG.warn("writeOrModifyOrDeleteServiceList: {}", LogMessages.SERVICE_NOT_FOUND);
                 return LogMessages.SERVICE_NOT_FOUND;
             }
-
             LOG.debug("Writing '{}' Service", serviceName);
-            InstanceIdentifier<Services> iid = InstanceIdentifier.create(ServiceList.class)
-                    .child(Services.class, new ServicesKey(serviceName));
-            Services service = ModelMappingUtils.mappingServices(input, null);
-            writeTx.put(LogicalDatastoreType.OPERATIONAL, iid, service);
+            writeTx.put(
+                LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(ServiceList.class)
+                    .child(Services.class, new ServicesKey(serviceName)),
+                ModelMappingUtils.mappingServices(input, null));
             try {
                 writeTx.commit().get(Timeouts.DATASTORE_WRITE, TimeUnit.MILLISECONDS);
                 return null;
@@ -446,15 +456,18 @@ public class ServiceDataStoreOperationsImpl implements ServiceDataStoreOperation
          * Modify / Delete Service.
          */
         InstanceIdentifier<Services> iid =
-                InstanceIdentifier.create(ServiceList.class).child(Services.class, new ServicesKey(serviceName));
-        ServicesBuilder service = new ServicesBuilder(readService.orElseThrow());
+            InstanceIdentifier.create(ServiceList.class).child(Services.class, new ServicesKey(serviceName));
         String action = null;
         switch (choice) {
             case 0 : /* Modify. */
                 LOG.debug("Modifying '{}' Service", serviceName);
-                service.setOperationalState(State.InService)
-                    .setAdministrativeState(AdminStates.InService);
-                writeTx.merge(LogicalDatastoreType.OPERATIONAL, iid, service.build());
+                writeTx.merge(
+                    LogicalDatastoreType.OPERATIONAL,
+                    iid,
+                    new ServicesBuilder(readService.orElseThrow())
+                        .setOperationalState(State.InService)
+                        .setAdministrativeState(AdminStates.InService)
+                        .build());
                 action = "modifyService";
                 break;
             case 1 : /* Delete */
index 6a0b06ca81bb9bf44b3037fefb7193dd846faaf6..499c8c48321aa82fde65a97e994340f12a74d47a 100644 (file)
@@ -10,22 +10,22 @@ package org.opendaylight.transportpce.servicehandler.utils;
 
 import java.util.HashMap;
 import java.util.Map;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.AmplifiersBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.GridParametersBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.RoadmsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.XpondersPluggablesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.xponders.pluggables.XponderPluggableOpenroadmOperationalModeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.xponders.pluggables.XponderPluggableOpenroadmOperationalModeKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.specific.operational.modes.to.catalog.input.operational.mode.info.SpecificOperationalModesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.specific.operational.modes.to.catalog.input.operational.mode.info.specific.operational.modes.SpecificOperationalModeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.specific.operational.modes.to.catalog.input.operational.mode.info.specific.operational.modes.SpecificOperationalModeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.AmplifiersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.GridParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.RoadmsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.XpondersPluggablesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.xponders.pluggables.XponderPluggableOpenroadmOperationalModeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.operational.mode.info.xponders.pluggables.XponderPluggableOpenroadmOperationalModeKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.specific.operational.modes.to.catalog.input.operational.mode.info.SpecificOperationalModesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.specific.operational.modes.to.catalog.input.operational.mode.info.specific.operational.modes.SpecificOperationalModeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.specific.operational.modes.to.catalog.input.operational.mode.info.specific.operational.modes.SpecificOperationalModeKey;
 
 public final class CatalogDataUtils {
 
@@ -66,7 +66,7 @@ public final class CatalogDataUtils {
                 .setRequestSystemId("test")
                 .setRpcAction(RpcActions.FillCatalogWithSpecificOperationalModes)
                 .build())
-            .setOperationalModeInfo(new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
+            .setOperationalModeInfo(new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
                     .add.specific.operational.modes.to.catalog.input.OperationalModeInfoBuilder()
                 .setSpecificOperationalModes(
                     new SpecificOperationalModesBuilder()
index 06c8523b2768d00cf4215d1c331ed2b0d577a33e..790c3a78441f4bce6ddfa677e49c79a04d482ea2 100644 (file)
@@ -12,7 +12,7 @@ import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.servicehandler.CatalogInput;
 import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
 import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index ef3fbd420e25e51a5fba6f02eef35803fef28fab..156f9674619a147f01a2970890f48e19034309f0 100644 (file)
@@ -16,9 +16,9 @@ import org.opendaylight.transportpce.servicehandler.validation.checks.Compliance
 import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck;
 import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerServiceResiliencyCheck;
 import org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerTxRxCheck;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeader;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 851b2c9f1bdc4b25455285e76eae00120fed463c..bd70ae9ee7eb298424711a129c9f9b2383d5f816 100644 (file)
@@ -8,8 +8,8 @@
 
 package org.opendaylight.transportpce.servicehandler.validation.checks;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 95f148fa281dc412d82754ec56c1afa656032e31..c7f6f2c140305e2655327ccc09a27386b93bf8fe 100644 (file)
@@ -7,10 +7,10 @@
  */
 package org.opendaylight.transportpce.servicehandler.validation.checks;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeader;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeader;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.add.openroadm.operational.modes.to.catalog.input.OperationalModeInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -135,7 +135,7 @@ public final class ServicehandlerComplianceCheck {
     }
 
     public static ComplianceCheckResult checkSpecificCatalog(SdncRequestHeader sdncRequestHeader,
-            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
                 .add.specific.operational.modes.to.catalog.input.OperationalModeInfo operationalModeInfoSpecific,
             RpcActions action, Boolean sdncRequest) {
         String resultMsg = sdncRequestHeaderValidate(sdncRequest, sdncRequestHeader, action).getMessage();
index 3ca5f7c63e2c0768e373a13dcc9bf762c3bc4be6..7d82bd05ff883ca1f5cc8cfe6796e81c57a56add 100644 (file)
@@ -8,7 +8,7 @@
 
 package org.opendaylight.transportpce.servicehandler.validation.checks;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.ServiceResiliency;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 8de3102ef7ba96548ccae0a98961ece8670572fc..f267cfc7cc6c1cd6dfa7ba5f05e6a7aff552b1b5 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.transportpce.servicehandler.validation.checks;
 
 import org.opendaylight.transportpce.servicehandler.ServiceEndpointType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceEndpoint;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
 
 /**
index 5a8f2468008cdfcb547f2253402dd23046c16be1..b3bcaa70c0f5a32ba49e8b6c73c933386464c377 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.servicehandler;
 
+import static org.hamcrest.CoreMatchers.hasItems;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
@@ -22,12 +23,12 @@ import java.util.Set;
 import org.hamcrest.collection.IsMapContaining;
 import org.junit.jupiter.api.Test;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.DiversityConstraints.DiversityType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.common.constraints.LinkIdentifierKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service.constraints.ServiceIdentifierListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.DiversityConstraints.DiversityType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.common.constraints.LinkIdentifierBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service.constraints.ServiceIdentifierListKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
 
 /**
  * Class to test downgrading and updating Constraints .
@@ -171,12 +172,12 @@ public class DowngradeConstraintsTest {
             initialHardConstraints, initialSoftConstraints);
         assertThat("updated soft constraints should contain exclude with 3 links",
             generatedSoftConstraints.getExclude().getLinkIdentifier().size(), is(3));
-        assertThat(generatedSoftConstraints.getExclude().getLinkIdentifier(),
-            IsMapContaining.hasKey(new LinkIdentifierKey("link-id 1", "openroadm-topology")));
-        assertThat(generatedSoftConstraints.getExclude().getLinkIdentifier(),
-            IsMapContaining.hasKey(new LinkIdentifierKey("link-id 2", "openroadm-topology")));
-        assertThat(generatedSoftConstraints.getExclude().getLinkIdentifier(),
-            IsMapContaining.hasKey(new LinkIdentifierKey("link-id 3", "openroadm-topology")));
+        assertThat(generatedSoftConstraints.getExclude().getLinkIdentifier(), hasItems(new LinkIdentifierBuilder()
+            .setLinkId("link-id 1").setLinkNetworkId("openroadm-topology").build()));
+        assertThat(generatedSoftConstraints.getExclude().getLinkIdentifier(), hasItems(new LinkIdentifierBuilder()
+            .setLinkId("link-id 2").setLinkNetworkId("openroadm-topology").build()));
+        assertThat(generatedSoftConstraints.getExclude().getLinkIdentifier(), hasItems(new LinkIdentifierBuilder()
+            .setLinkId("link-id 3").setLinkNetworkId("openroadm-topology").build()));
     }
 
     @Test
@@ -231,12 +232,12 @@ public class DowngradeConstraintsTest {
             initialHardConstraints, initialSoftConstraints);
         assertThat("updated soft constraints should contain include with 3 links",
             generatedSoftConstraints.getInclude().getLinkIdentifier().size(), is(3));
-        assertThat(generatedSoftConstraints.getInclude().getLinkIdentifier(),
-            IsMapContaining.hasKey(new LinkIdentifierKey("link-id 1", "openroadm-topology")));
-        assertThat(generatedSoftConstraints.getInclude().getLinkIdentifier(),
-            IsMapContaining.hasKey(new LinkIdentifierKey("link-id 2", "openroadm-topology")));
-        assertThat(generatedSoftConstraints.getInclude().getLinkIdentifier(),
-            IsMapContaining.hasKey(new LinkIdentifierKey("link-id 3", "openroadm-topology")));
+        assertThat(generatedSoftConstraints.getInclude().getLinkIdentifier(), hasItems(new LinkIdentifierBuilder()
+                .setLinkId("link-id 1").setLinkNetworkId("openroadm-topology").build()));
+        assertThat(generatedSoftConstraints.getInclude().getLinkIdentifier(), hasItems(new LinkIdentifierBuilder()
+                .setLinkId("link-id 2").setLinkNetworkId("openroadm-topology").build()));
+        assertThat(generatedSoftConstraints.getInclude().getLinkIdentifier(), hasItems(new LinkIdentifierBuilder()
+                .setLinkId("link-id 3").setLinkNetworkId("openroadm-topology").build()));
     }
 
     @Test
@@ -387,19 +388,19 @@ public class DowngradeConstraintsTest {
         assertEquals(2, generatedSoftConstraints.getCoRouting().getServiceIdentifierList().size(),
             "updated soft constraints should contain 2 co-routed services");
         assertTrue(generatedSoftConstraints.getCoRouting().getServiceIdentifierList()
-            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                     .routing.ServiceIdentifierListKey("service 1"))
             .getServiceApplicability().getEquipment().getRoadmSrg());
         assertNull(generatedSoftConstraints.getCoRouting().getServiceIdentifierList()
-            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                         .routing.ServiceIdentifierListKey("service 1"))
             .getServiceApplicability().getLink());
         assertNull(generatedSoftConstraints.getCoRouting().getServiceIdentifierList()
-            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                         .routing.ServiceIdentifierListKey("service 2"))
             .getServiceApplicability().getEquipment());
         assertTrue(generatedSoftConstraints.getCoRouting().getServiceIdentifierList()
-            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                     .routing.ServiceIdentifierListKey("service 2"))
             .getServiceApplicability().getLink());
 
@@ -414,11 +415,11 @@ public class DowngradeConstraintsTest {
         assertEquals(1, generatedSoftConstraints.getCoRouting().getServiceIdentifierList().size(),
             "updated soft constraints should contain 1 co-routed service");
         assertTrue(generatedSoftConstraints.getCoRouting().getServiceIdentifierList()
-            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                         .routing.ServiceIdentifierListKey("service 3"))
             .getServiceApplicability().getSite());
         assertNull(generatedSoftConstraints.getCoRouting().getServiceIdentifierList()
-            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+            .get(new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                         .routing.ServiceIdentifierListKey("service 3"))
             .getServiceApplicability().getLink());
 
@@ -431,15 +432,15 @@ public class DowngradeConstraintsTest {
             "updated soft constraints should contain 3 co-routed service");
         assertThat(generatedSoftConstraints.getCoRouting().getServiceIdentifierList(),
             IsMapContaining.hasKey(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                         .routing.ServiceIdentifierListKey("service 1")));
         assertThat(generatedSoftConstraints.getCoRouting().getServiceIdentifierList(),
             IsMapContaining.hasKey(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                         .routing.ServiceIdentifierListKey("service 2")));
         assertThat(generatedSoftConstraints.getCoRouting().getServiceIdentifierList(),
             IsMapContaining.hasKey(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co
                         .routing.ServiceIdentifierListKey("service 3")));
     }
 
@@ -480,12 +481,12 @@ public class DowngradeConstraintsTest {
         assertTrue(genSoftConstraints.getCustomerCode().contains("customer-code 1"));
         assertTrue(genSoftConstraints.getCustomerCode().contains("customer-code 2"));
         assertNotNull(genSoftConstraints.getExclude(), "generated soft constraints should contain exclude constraint");
-        assertEquals(1, genSoftConstraints.getExclude().getLinkIdentifier().values().size(),
+        assertEquals(1, genSoftConstraints.getExclude().getLinkIdentifier().size(),
             "generated soft constraints should contain exclude constraint with one link-id");
         assertEquals("link-id 1",
-            genSoftConstraints.getExclude().getLinkIdentifier().values().stream().findAny().orElseThrow().getLinkId());
+            genSoftConstraints.getExclude().getLinkIdentifier().stream().findAny().orElseThrow().getLinkId());
         assertEquals("openroadm-topology",
-            genSoftConstraints.getExclude().getLinkIdentifier().values().stream().findAny().orElseThrow()
+            genSoftConstraints.getExclude().getLinkIdentifier().stream().findAny().orElseThrow()
                 .getLinkNetworkId());
         assertNotNull(genSoftConstraints.getInclude(), "generated soft constraints should contain include constraint");
         assertEquals(2, genSoftConstraints.getInclude().getNodeId().size(),
index 390650f3ce170086e228157ccc643b59e1b86a4e..387c7c6fcb9b48586cbe13ddd6db23bf68b9b993 100644 (file)
@@ -29,39 +29,39 @@ import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRoutingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRoutingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.response.parameters.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
@@ -103,7 +103,7 @@ public class ModelMappingUtilsTest extends AbstractTest {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
                             .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service")
                             .build()))
@@ -113,7 +113,7 @@ public class ModelMappingUtilsTest extends AbstractTest {
                 .setCustomerCode(Set.of("Some customer-code"))
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
                             .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service")
                             .build()))
@@ -145,13 +145,6 @@ public class ModelMappingUtilsTest extends AbstractTest {
             .build();
     }
 
-    @Test
-    //TODO : is this unit test relevant ?
-    void mappingServicesNullServiceCreateInput() {
-        Services services = ModelMappingUtils.mappingServices(null, null);
-        assertEquals(new ServicesBuilder().withKey(new ServicesKey("unknown")).build(), services);
-    }
-
     @Test
     void mappingServiceNotNullServiceReconfigureInput() {
         Services services = ModelMappingUtils.mappingServices(null, buildServiceConfigurationInput());
diff --git a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServiceHandlerProviderTest.java b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServiceHandlerProviderTest.java
new file mode 100644 (file)
index 0000000..d210e2b
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright © 2019 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.servicehandler.impl;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
+import org.opendaylight.transportpce.pce.service.PathComputationService;
+import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
+import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.PceNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.listeners.RendererNotificationHandler;
+import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
+import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+
+@ExtendWith(MockitoExtension.class)
+public class ServiceHandlerProviderTest extends AbstractTest {
+
+    @Mock
+    RendererServiceOperations rendererServiceOperations;
+    @Mock
+    PathComputationService pathComputationService;
+    @Mock
+    NetworkModelService networkModelService;
+    @Mock
+    DataBroker dataBroker;
+    @Mock
+    ServiceDataStoreOperations serviceDataStoreOperations;
+    @Mock
+    NotificationPublishService notificationPublishService;
+    @Mock
+    DataTreeChangeListener<Services> serviceListener;
+
+    private final PceNotificationHandler pceNotificationHandler = new PceNotificationHandler(rendererServiceOperations,
+        pathComputationService, notificationPublishService, serviceDataStoreOperations);
+    private final RendererNotificationHandler rendererNotificationHandler = new RendererNotificationHandler(
+        pathComputationService, notificationPublishService, networkModelService);
+    private final NetworkModelNotificationHandler networkModelNotificationHandler = new NetworkModelNotificationHandler(
+        notificationPublishService, serviceDataStoreOperations);
+
+    @Test
+    void testInitRegisterServiceHandlerToRpcRegistry() {
+        new ServiceHandlerProvider(dataBroker, getNotificationService(),
+            serviceDataStoreOperations, pceNotificationHandler, rendererNotificationHandler,
+            networkModelNotificationHandler, serviceListener);
+        verify(dataBroker, times(1)).registerTreeChangeListener(any(), any());
+    }
+}
index cbe08616e479badaefbd93547be3fd82974a7b85..0fe165174326525239a37f0d064c79497a8b7120 100644 (file)
@@ -10,9 +10,12 @@ package org.opendaylight.transportpce.servicehandler.impl;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl.LogMessages;
 
+import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
@@ -29,6 +32,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
@@ -39,50 +43,53 @@ import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOper
 import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
 import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
 import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
+import org.opendaylight.transportpce.servicehandler.service.PCEServiceWrapper;
+import org.opendaylight.transportpce.servicehandler.service.RendererServiceWrapper;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
 import org.opendaylight.transportpce.servicehandler.utils.CatalogDataUtils;
 import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRerouteRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRerouteRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddOpenroadmOperationalModesToCatalogOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.AddSpecificOperationalModesToCatalogOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.response.parameters.PathDescriptionBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
@@ -90,7 +97,8 @@ import org.opendaylight.yangtools.yang.common.Uint32;
 
 @ExtendWith(MockitoExtension.class)
 public class ServicehandlerImplTest extends AbstractTest {
-
+    @Mock
+    private RpcProviderService rpcProviderService;
     @Mock
     private PathComputationService pathComputationService;
     @Mock
@@ -104,6 +112,8 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Mock
     private NetworkListener networkModelListenerImpl;
 
+    @Mock
+    private PathDescription pathDescription;
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private CatalogDataStoreOperations catalogDataStoreOperations;
     private ServiceCreateInput serviceCreateInput;
@@ -114,6 +124,8 @@ public class ServicehandlerImplTest extends AbstractTest {
     private ListeningExecutorService executorService;
     private CountDownLatch endSignal;
     private static final int NUM_THREADS = 5;
+    private PCEServiceWrapper pceServiceWrapper;
+    private RendererServiceWrapper rendererServiceWrapper;
 
     @BeforeEach
     void setUp() {
@@ -127,16 +139,25 @@ public class ServicehandlerImplTest extends AbstractTest {
         serviceReconfigureInput = ServiceDataUtils.buildServiceReconfigureInput();
         serviceRestorationInput = ServiceDataUtils.buildServiceRestorationInput();
         serviceRerouteInput = ServiceDataUtils.buildServiceRerouteInput();
+        pathDescription = ServiceDataUtils.createPathDescription(0,1,0,1);
+        pceServiceWrapper = new PCEServiceWrapper(pathComputationService, notificationPublishService);
+        this.rendererServiceWrapper = new RendererServiceWrapper(rendererServiceOperations, notificationPublishService);
+    }
+
+    @Test
+    void testRpcRegistration() {
+        new ServicehandlerImpl(rpcProviderService, serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                networkModelListenerImpl, catalogDataStoreOperations, pathComputationService, rendererServiceOperations,
+                notificationPublishService);
+        verify(rpcProviderService, times(1)).registerRpcImplementations(any(ClassToInstanceMap.class));
     }
 
     @Test
     void createServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<ServiceCreateOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceCreate(new ServiceCreateInputBuilder().build());
+            new ServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                    networkModelListenerImpl, pceServiceWrapper, notificationPublishService)
+                .invoke(new ServiceCreateInputBuilder().build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -153,11 +174,9 @@ public class ServicehandlerImplTest extends AbstractTest {
                                 .setServiceName(serviceCreateInput.getServiceName())
                                 .build()));
         ListenableFuture<RpcResult<ServiceCreateOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDSOperations, catalogDataStoreOperations)
-                .serviceCreate(serviceCreateInput);
+            new ServiceCreateImpl(serviceDSOperations, pceListenerImpl, rendererListenerImpl,
+                    networkModelListenerImpl, pceServiceWrapper, notificationPublishService)
+                .invoke(serviceCreateInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -169,11 +188,9 @@ public class ServicehandlerImplTest extends AbstractTest {
     void createServiceShouldBeSuccessfulWhenPerformPCESuccessful() throws ExecutionException, InterruptedException {
         when(pathComputationService.pathComputationRequest(any())).thenReturn(Futures.immediateFuture(any()));
         ListenableFuture<RpcResult<ServiceCreateOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceCreate(serviceCreateInput);
+                new ServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, pceServiceWrapper, notificationPublishService)
+                    .invoke(serviceCreateInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -184,16 +201,13 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void deleteServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<ServiceDeleteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceDelete(
-                    new ServiceDeleteInputBuilder()
-                        .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
-                                .setServiceName("")
-                                .build())
-                        .build());
+                new ServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper, notificationPublishService)
+                    .invoke(new ServiceDeleteInputBuilder()
+                            .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
+                                    .setServiceName("")
+                                    .build())
+                            .build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -204,11 +218,9 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void deleteServiceShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<ServiceDeleteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceDelete(serviceDeleteInput);
+                new ServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper, notificationPublishService)
+                    .invoke(serviceDeleteInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -221,11 +233,9 @@ public class ServicehandlerImplTest extends AbstractTest {
         when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
         serviceDataStoreOperations.createService(serviceCreateInput);
         ListenableFuture<RpcResult<ServiceDeleteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceDelete(serviceDeleteInput);
+                new ServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper, notificationPublishService)
+                    .invoke(serviceDeleteInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -235,11 +245,10 @@ public class ServicehandlerImplTest extends AbstractTest {
 
     @Test
     void serviceFeasibilityCheckShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        ServicehandlerImpl servicehandlerImpl = new ServicehandlerImpl(pathComputationService,
-                rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
-                networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations);
         ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> result =
-                servicehandlerImpl.serviceFeasibilityCheck(new ServiceFeasibilityCheckInputBuilder().build());
+                new ServiceFeasibilityCheckImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, pceServiceWrapper)
+                    .invoke(new ServiceFeasibilityCheckInputBuilder().build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -252,11 +261,9 @@ public class ServicehandlerImplTest extends AbstractTest {
             throws ExecutionException, InterruptedException {
         when(pathComputationService.pathComputationRequest(any())).thenReturn(Futures.immediateFuture(any()));
         ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceFeasibilityCheck(ServiceDataUtils.buildServiceFeasibilityCheckInput());
+                new ServiceFeasibilityCheckImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, pceServiceWrapper)
+                    .invoke(ServiceDataUtils.buildServiceFeasibilityCheckInput());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -267,11 +274,9 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void serviceReconfigureShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<ServiceReconfigureOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceReconfigure(new ServiceReconfigureInputBuilder().setServiceName("").build());
+                new ServiceReconfigureImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper)
+                    .invoke(new ServiceReconfigureInputBuilder().setServiceName("").build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
     }
@@ -281,11 +286,9 @@ public class ServicehandlerImplTest extends AbstractTest {
     void serviceReconfigureShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         //action -> service reconfigure
         ListenableFuture<RpcResult<ServiceReconfigureOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceReconfigure(serviceReconfigureInput);
+                new ServiceReconfigureImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper)
+                    .invoke(serviceReconfigureInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
     }
@@ -299,11 +302,9 @@ public class ServicehandlerImplTest extends AbstractTest {
         //service reconfigure test action
         //ServiceReconfigureInput is created with the same service information that is created before
         ListenableFuture<RpcResult<ServiceReconfigureOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceReconfigure(serviceReconfigureInput);
+                new ServiceReconfigureImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper)
+                    .invoke(serviceReconfigureInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
     }
@@ -311,13 +312,11 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void serviceReRestorationShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<ServiceRestorationOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceRestoration(new ServiceRestorationInputBuilder()
-                .setServiceName("")
-                .build());
+                new ServiceRestorationImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper)
+                    .invoke(new ServiceRestorationInputBuilder()
+                            .setServiceName("")
+                            .build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
     }
@@ -326,11 +325,9 @@ public class ServicehandlerImplTest extends AbstractTest {
     void serviceRestorationShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         //action -> service restore
         ListenableFuture<RpcResult<ServiceRestorationOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceRestoration(serviceRestorationInput);
+                new ServiceRestorationImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper)
+                    .invoke(serviceRestorationInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
     }
@@ -344,11 +341,9 @@ public class ServicehandlerImplTest extends AbstractTest {
         //service Restoration test action
         //ServiceRestorationInput is created with the same service information that is created before
         ListenableFuture<RpcResult<ServiceRestorationOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceRestoration(serviceRestorationInput);
+                new ServiceRestorationImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, rendererServiceWrapper)
+                    .invoke(serviceRestorationInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
     }
@@ -356,13 +351,10 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void serviceRerouteShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<ServiceRerouteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceReroute(new ServiceRerouteInputBuilder()
-                .setServiceName("")
-                .build());
+                new ServiceRerouteImpl(serviceDataStoreOperations, pceServiceWrapper)
+                    .invoke(new ServiceRerouteInputBuilder()
+                            .setServiceName("")
+                            .build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -374,11 +366,8 @@ public class ServicehandlerImplTest extends AbstractTest {
     void serviceRerouteShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         //action -> service reconfigure
         ListenableFuture<RpcResult<ServiceRerouteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceReroute(serviceRerouteInput);
+                new ServiceRerouteImpl(serviceDataStoreOperations, pceServiceWrapper)
+                    .invoke(serviceRerouteInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -445,11 +434,8 @@ public class ServicehandlerImplTest extends AbstractTest {
                         .build());
         serviceDataStoreOperations.createService(serviceCreateInput);
         ListenableFuture<RpcResult<ServiceRerouteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .serviceReroute(serviceRerouteInput);
+                new ServiceRerouteImpl(serviceDataStoreOperations, pceServiceWrapper)
+                    .invoke(serviceRerouteInput);
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -460,13 +446,11 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void tempServiceDeleteShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<TempServiceDeleteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .tempServiceDelete(new TempServiceDeleteInputBuilder()
-                .setCommonId("")
-                .build());
+                new TempServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        rendererServiceWrapper)
+                    .invoke(new TempServiceDeleteInputBuilder()
+                            .setCommonId("")
+                            .build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         RpcResult<TempServiceDeleteOutput> rpcResult = result.get();
@@ -481,11 +465,9 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void tempServiceDeleteShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<TempServiceDeleteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .tempServiceDelete(ServiceDataUtils.buildTempServiceDeleteInput());
+                new TempServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        rendererServiceWrapper)
+                    .invoke(ServiceDataUtils.buildTempServiceDeleteInput());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -498,13 +480,11 @@ public class ServicehandlerImplTest extends AbstractTest {
         when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
         //create temp service to delete in the temp delete action
         TempServiceCreateInput createInput = ServiceDataUtils.buildTempServiceCreateInput();
-        serviceDataStoreOperations.createTempService(createInput);
+        serviceDataStoreOperations.createTempService(createInput, pathDescription);
         ListenableFuture<RpcResult<TempServiceDeleteOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .tempServiceDelete(ServiceDataUtils.buildTempServiceDeleteInput(createInput.getCommonId()));
+                new TempServiceDeleteImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        rendererServiceWrapper)
+                    .invoke(ServiceDataUtils.buildTempServiceDeleteInput(createInput.getCommonId()));
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -515,11 +495,9 @@ public class ServicehandlerImplTest extends AbstractTest {
     @Test
     void tempServiceCreateShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<TempServiceCreateOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .tempServiceCreate(new TempServiceCreateInputBuilder().build());
+                new TempServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, pceServiceWrapper)
+                    .invoke(new TempServiceCreateInputBuilder().build());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -527,16 +505,37 @@ public class ServicehandlerImplTest extends AbstractTest {
             result.get().getResult().getConfigurationResponseCommon().getResponseCode());
     }
 
+    @Test
+    void tempServiceCreateShouldBeFailedWithServiceAlreadyExist() throws ExecutionException, InterruptedException {
+        final ServiceDataStoreOperations serviceDSOperations = mock(ServiceDataStoreOperations.class);
+        when(serviceDSOperations.getTempService(any()))
+            .thenReturn(Optional.of(
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list
+                            .ServicesBuilder()
+                        .setCommonId("bad_commonId")
+                        .build()));
+        ListenableFuture<RpcResult<TempServiceCreateOutput>> result =
+                new TempServiceCreateImpl(serviceDSOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, pceServiceWrapper)
+                    .invoke(ServiceDataUtils.buildTempServiceCreateInput());
+        result.addListener(() -> endSignal.countDown(), executorService);
+        endSignal.await();
+        assertEquals(
+            ResponseCodes.RESPONSE_FAILED,
+            result.get().getResult().getConfigurationResponseCommon().getResponseCode());
+        assertEquals(
+            "Service 'Temp (commonId)' already exists in datastore",
+            result.get().getResult().getConfigurationResponseCommon().getResponseMessage());
+    }
+
     @Test
     void tempServiceCreateShouldBeSuccessfulWhenPerformPCESuccessful()
             throws ExecutionException, InterruptedException {
         when(pathComputationService.pathComputationRequest(any())).thenReturn(Futures.immediateFuture(any()));
         ListenableFuture<RpcResult<TempServiceCreateOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .tempServiceCreate(ServiceDataUtils.buildTempServiceCreateInput());
+                new TempServiceCreateImpl(serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl,
+                        networkModelListenerImpl, pceServiceWrapper)
+                    .invoke(ServiceDataUtils.buildTempServiceCreateInput());
         result.addListener(() -> endSignal.countDown(), executorService);
         endSignal.await();
         assertEquals(
@@ -548,11 +547,8 @@ public class ServicehandlerImplTest extends AbstractTest {
     public void addOpenroadmOperationalModesToCatalogShouldBeFailedWithEmptyInput()
             throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<AddOpenroadmOperationalModesToCatalogOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .addOpenroadmOperationalModesToCatalog(new AddOpenroadmOperationalModesToCatalogInputBuilder().build());
+                new AddOpenroadmOperationalModesToCatalogImpl(catalogDataStoreOperations)
+                    .invoke(new AddOpenroadmOperationalModesToCatalogInputBuilder().build());
         Assert.assertEquals(
             ResponseCodes.RESPONSE_FAILED,
             result.get().getResult().getConfigurationResponseCommon().getResponseCode());
@@ -562,11 +558,8 @@ public class ServicehandlerImplTest extends AbstractTest {
     public void addSpecificOperationalModesToCatalogShouldBeFailedWithEmptyInput()
             throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<AddSpecificOperationalModesToCatalogOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .addSpecificOperationalModesToCatalog(new AddSpecificOperationalModesToCatalogInputBuilder().build());
+                new AddSpecificOperationalModesToCatalogImpl(catalogDataStoreOperations)
+                    .invoke(new AddSpecificOperationalModesToCatalogInputBuilder().build());
         Assert.assertEquals(
             ResponseCodes.RESPONSE_FAILED,
             result.get().getResult().getConfigurationResponseCommon().getResponseCode());
@@ -576,11 +569,8 @@ public class ServicehandlerImplTest extends AbstractTest {
     public void addOpenroadmOperationalModesToCatalogShouldBeSuccessfulWhenAddORToCatalog()
             throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<AddOpenroadmOperationalModesToCatalogOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .addOpenroadmOperationalModesToCatalog(CatalogDataUtils.buildAddORToCatalogInput());
+                new AddOpenroadmOperationalModesToCatalogImpl(catalogDataStoreOperations)
+                    .invoke(CatalogDataUtils.buildAddORToCatalogInput());
         Assert.assertEquals(
             ResponseCodes.RESPONSE_OK,
             result.get().getResult().getConfigurationResponseCommon().getResponseCode());
@@ -590,11 +580,8 @@ public class ServicehandlerImplTest extends AbstractTest {
     public void addSpecificOperationalModesToCatalogShouldBeSuccessfulWhenAddSpecificToCatalog()
             throws ExecutionException, InterruptedException {
         ListenableFuture<RpcResult<AddSpecificOperationalModesToCatalogOutput>> result =
-            new ServicehandlerImpl(
-                    pathComputationService, rendererServiceOperations, notificationPublishService,
-                    pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                    serviceDataStoreOperations, catalogDataStoreOperations)
-                .addSpecificOperationalModesToCatalog(CatalogDataUtils.buildAddSpecificToCatalogInput());
+                new AddSpecificOperationalModesToCatalogImpl(catalogDataStoreOperations)
+                    .invoke(CatalogDataUtils.buildAddSpecificToCatalogInput());
         Assert.assertEquals(
             ResponseCodes.RESPONSE_OK,
             result.get().getResult().getConfigurationResponseCommon().getResponseCode());
diff --git a/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProviderTest.java b/servicehandler/src/test/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerProviderTest.java
deleted file mode 100644 (file)
index 0092b09..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright © 2019 Orange, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.servicehandler.impl;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
-import org.opendaylight.mdsal.binding.api.NotificationPublishService;
-import org.opendaylight.mdsal.binding.api.RpcProviderService;
-import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
-import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.TransportpceNetworkmodelListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-
-@ExtendWith(MockitoExtension.class)
-public class ServicehandlerProviderTest extends AbstractTest {
-
-    @Mock
-    DataBroker dataBroker;
-    @Mock
-    RpcProviderService rpcProviderRegistry;
-    @Mock
-    ServiceDataStoreOperations serviceDataStoreOperations;
-    @Mock
-    TransportpcePceListener pceListenerImpl;
-    @Mock
-    TransportpceRendererListener rendererListenerImpl;
-    @Mock
-    TransportpceNetworkmodelListener networkModelListenerImpl;
-    @Mock
-    NotificationPublishService notificationPublishService;
-    @Mock
-    OrgOpenroadmServiceService servicehandler;
-    @Mock
-    DataTreeChangeListener<Services> serviceListener;
-
-    @Test
-    void testInitRegisterServiceHandlerToRpcRegistry() {
-        new ServicehandlerProvider(dataBroker, rpcProviderRegistry, getNotificationService() ,
-                serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
-                notificationPublishService, servicehandler, serviceListener);
-
-        verify(rpcProviderRegistry, times(1)).registerRpcImplementation(any(), any(OrgOpenroadmServiceService.class));
-        verify(dataBroker, times(1)).registerDataTreeChangeListener(any(), any());
-    }
-}
\ No newline at end of file
@@ -39,19 +39,19 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmo
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToABuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.ResourceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.LinkBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.NodeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPointBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToABuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.LinkBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.NodeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathListBuilder;
@@ -60,14 +60,14 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
 
 @ExtendWith(MockitoExtension.class)
-public class NetworkModelListenerImplTest {
+public class NetworkModelNotificationHandlerTest {
 
     @Mock
     private NotificationPublishService notificationPublishService;
     @Mock
     private ServiceDataStoreOperations serviceDataStoreOperations;
     private static PathDescription pathDescription;
-    private NetworkModelListenerImpl networkModelListener;
+    private NetworkModelNotificationHandler networkModelListener;
 
     @BeforeEach
     void setUp() {
@@ -75,7 +75,7 @@ public class NetworkModelListenerImplTest {
                 .setAToZDirection(new AToZDirectionBuilder().setAToZ(new HashMap<>(createMapAtoZ())).build())
                 .setZToADirection(new ZToADirectionBuilder().setZToA(new HashMap<>(createMapZtoA())).build())
                 .build();
-        networkModelListener = new NetworkModelListenerImpl(notificationPublishService,
+        networkModelListener = new NetworkModelNotificationHandler(notificationPublishService,
                 serviceDataStoreOperations);
     }
 
@@ -294,7 +294,8 @@ public class NetworkModelListenerImplTest {
 
     @Test
     void testOnTopologyUpdateResultWhenNeverWired() {
-        NetworkModelListenerImpl networkModelListenerMocked = Mockito.mock(NetworkModelListenerImpl.class);
+        NetworkModelNotificationHandler networkModelListenerMocked = Mockito.mock(
+            NetworkModelNotificationHandler.class);
         doCallRealMethod().when(networkModelListenerMocked).onTopologyUpdateResult(any(TopologyUpdateResult.class));
 
         Map<TopologyChangesKey, TopologyChanges> topologyChanges1 = Map.of(
@@ -321,7 +322,8 @@ public class NetworkModelListenerImplTest {
 
     @Test
     void testOnTopologyUpdateResultWhenAlreadyWired() {
-        NetworkModelListenerImpl networkModelListenerMocked = Mockito.mock(NetworkModelListenerImpl.class);
+        NetworkModelNotificationHandler networkModelListenerMocked = Mockito.mock(
+            NetworkModelNotificationHandler.class);
         doCallRealMethod().when(networkModelListenerMocked).onTopologyUpdateResult(any(TopologyUpdateResult.class));
 
         Map<TopologyChangesKey, TopologyChanges> topologyChanges = Map.of(
index c3f2070d727fbf0a308407d189337d95beca29eb..442189164fcc09cbaa31796529f2750178cdf588 100755 (executable)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.transportpce.servicehandler.listeners;
 
 import static org.junit.jupiter.api.Assertions.fail;
@@ -17,8 +16,8 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.Collection;
-import java.util.HashSet;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import org.junit.jupiter.api.Test;
@@ -28,37 +27,40 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
-import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Restorable;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.LgxBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliency;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliencyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.Restorable;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.LgxBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.ServiceResiliency;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.ServiceResiliencyBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDelete;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReroute;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishNotificationAlarmServiceBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
@@ -67,32 +69,38 @@ import org.opendaylight.yangtools.yang.common.Uint8;
 public class ServiceListenerTest {
 
     @Mock
-    private ServicehandlerImpl servicehandler;
+    private RpcService rpcService;
     @Mock
     private ServiceDataStoreOperations serviceDataStoreOperations;
     @Mock
     private NotificationPublishService notificationPublishService;
     @Mock
     private PathComputationService pathComputationService;
+    @Mock
+    private ServiceDelete serviceDelete;
+    @Mock
+    private ServiceReroute serviceReroute;
+    @Mock
+    private ServiceCreate serviceCreate;
 
     @Test
     void testOnDataTreeChangedWhenDeleteService() {
         @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
                 mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Services>> changes = new HashSet<>();
+        final List<DataTreeModification<Services>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(service);
 
-        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
-        when(service.getDataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
-        ServiceListener listener = new ServiceListener(servicehandler, serviceDataStoreOperations,
+        when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+        when(service.dataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
+        ServiceListener listener = new ServiceListener(rpcService, serviceDataStoreOperations,
                 notificationPublishService);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(service, times(1)).getModificationType();
-        verify(service, times(2)).getDataBefore();
-        verify(service, never()).getDataAfter();
+        verify(service, times(1)).modificationType();
+        verify(service, times(2)).dataBefore();
+        verify(service, never()).dataAfter();
         try {
             verify(notificationPublishService, never()).putNotification(any(PublishNotificationAlarmService.class));
         } catch (InterruptedException e) {
@@ -104,22 +112,22 @@ public class ServiceListenerTest {
     void testOnDataTreeChangedWhenServiceBecomesOutOfService() {
         @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
                 mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Services>> changes = new HashSet<>();
+        final List<DataTreeModification<Services>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(service);
 
         Services serviceDown = buildService(State.OutOfService, AdminStates.InService);
-        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
-        when(service.getDataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
-        when(service.getDataAfter()).thenReturn(serviceDown);
-        ServiceListener listener = new ServiceListener(servicehandler, serviceDataStoreOperations,
+        when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+        when(service.dataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
+        when(service.dataAfter()).thenReturn(serviceDown);
+        ServiceListener listener = new ServiceListener(rpcService, serviceDataStoreOperations,
                 notificationPublishService);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(service, times(1)).getModificationType();
-        verify(service, times(3)).getDataBefore();
-        verify(service, times(1)).getDataAfter();
+        verify(service, times(1)).modificationType();
+        verify(service, times(3)).dataBefore();
+        verify(service, times(1)).dataAfter();
         try {
             verify(notificationPublishService, times(1))
                     .putNotification(buildNotificationAlarmService(serviceDown, "The service is now outOfService"));
@@ -132,20 +140,20 @@ public class ServiceListenerTest {
     void testOnDataTreeChangedWhenShouldNeverHappen() {
         @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
                 mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Services>> changes = new HashSet<>();
+        final List<DataTreeModification<Services>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(service);
 
-        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);
-        when(service.getDataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
-        ServiceListener listener = new ServiceListener(servicehandler, serviceDataStoreOperations,
+        when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.SUBTREE_MODIFIED);
+        when(service.dataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
+        ServiceListener listener = new ServiceListener(rpcService, serviceDataStoreOperations,
                 notificationPublishService);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(service, times(2)).getModificationType();
-        verify(service, times(2)).getDataBefore();
-        verify(service, never()).getDataAfter();
+        verify(service, times(2)).modificationType();
+        verify(service, times(2)).dataBefore();
+        verify(service, never()).dataAfter();
         try {
             verify(notificationPublishService, never()).putNotification(any(PublishNotificationAlarmService.class));
         } catch (InterruptedException e) {
@@ -157,7 +165,7 @@ public class ServiceListenerTest {
     void testOnDataTreeChangedWhenServiceDegradedShouldBeRerouted() {
         @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
                 mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Services>> changes = new HashSet<>();
+        final List<DataTreeModification<Services>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(service);
@@ -166,73 +174,76 @@ public class ServiceListenerTest {
         Services serviceAfter = new ServicesBuilder(buildService(State.OutOfService, AdminStates.InService))
                 .setServiceResiliency(serviceResiliency)
                 .build();
-        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
-        when(service.getDataBefore())
+        when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+        when(service.dataBefore())
             .thenReturn(new ServicesBuilder(buildService(State.InService, AdminStates.InService))
                         .setServiceResiliency(serviceResiliency)
                         .build());
-        when(service.getDataAfter()).thenReturn(serviceAfter);
+        when(service.dataAfter()).thenReturn(serviceAfter);
         when(serviceDataStoreOperations.getService(anyString())).thenReturn(Optional.of(serviceAfter));
-        when(servicehandler.serviceDelete(any()))
+        when(rpcService.getRpc(ServiceDelete.class)).thenReturn(serviceDelete);
+        when(serviceDelete.invoke(any()))
             .thenReturn(RpcResultBuilder.success(new ServiceDeleteOutputBuilder()
                                 .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
                                                 .setResponseCode(ResponseCodes.RESPONSE_OK)
                                                 .build())
                                 .build())
                         .buildFuture());
-        when(servicehandler.serviceReroute(any()))
+        when(rpcService.getRpc(ServiceReroute.class)).thenReturn(serviceReroute);
+        when(serviceReroute.invoke(any()))
             .thenReturn(RpcResultBuilder.success(new ServiceRerouteOutputBuilder()
                                 .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
                                                 .setResponseCode(ResponseCodes.RESPONSE_OK)
                                                 .build())
                                 .build())
                         .buildFuture());
-        when(servicehandler.serviceCreate(any()))
+        when(rpcService.getRpc(ServiceCreate.class)).thenReturn(serviceCreate);
+        when(serviceCreate.invoke(any()))
             .thenReturn(RpcResultBuilder.success(new ServiceCreateOutputBuilder()
                                 .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
                                                 .setResponseCode(ResponseCodes.RESPONSE_OK)
                                                 .build())
                                 .build())
                         .buildFuture());
-        ServiceListener listener = new ServiceListener(servicehandler, serviceDataStoreOperations,
+        ServiceListener listener = new ServiceListener(rpcService, serviceDataStoreOperations,
                 notificationPublishService);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(service, times(1)).getModificationType();
-        verify(service, times(3)).getDataBefore();
-        verify(service, times(1)).getDataAfter();
-        verify(servicehandler, times(1)).serviceDelete(any());
+        verify(service, times(1)).modificationType();
+        verify(service, times(3)).dataBefore();
+        verify(service, times(1)).dataAfter();
+//        verify(servicehandler, times(1)).serviceDelete(any());
 
-        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+        when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
         listener.onDataTreeChanged(changes);
-        verify(servicehandler, times(1)).serviceCreate(any());
+//        verify(servicehandler, times(1)).serviceCreate(any());
     }
 
     @Test
     void testOnDataTreeChangedWhenServiceDegradedShouldNotBeRerouted() {
         @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
                 mock(DataObjectModification.class);
-        final Collection<DataTreeModification<Services>> changes = new HashSet<>();
+        final List<DataTreeModification<Services>> changes = new ArrayList<>();
         @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
         changes.add(ch);
         when(ch.getRootNode()).thenReturn(service);
 
         Services serviceAfter = buildService(State.OutOfService, AdminStates.InService);
-        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
-        when(service.getDataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
-        when(service.getDataAfter()).thenReturn(serviceAfter);
-        ServiceListener listener = new ServiceListener(servicehandler, serviceDataStoreOperations,
+        when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+        when(service.dataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
+        when(service.dataAfter()).thenReturn(serviceAfter);
+        ServiceListener listener = new ServiceListener(rpcService, serviceDataStoreOperations,
                 notificationPublishService);
         listener.onDataTreeChanged(changes);
         verify(ch, times(1)).getRootNode();
-        verify(service, times(1)).getModificationType();
-        verify(service, times(3)).getDataBefore();
-        verify(service, times(1)).getDataAfter();
-        verify(servicehandler, times(0)).serviceDelete(any());
+        verify(service, times(1)).modificationType();
+        verify(service, times(3)).dataBefore();
+        verify(service, times(1)).dataAfter();
+//        verify(servicehandler, times(0)).serviceDelete(any());
 
-        when(service.getModificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+        when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
         listener.onDataTreeChanged(changes);
-        verify(servicehandler, times(0)).serviceCreate(any());
+//        verify(servicehandler, times(0)).serviceCreate(any());
     }
 
     private Services buildService(State state, AdminStates adminStates) {
index beda4b29696bcba481b90eb9e415a40c498e2e4a..30f8bb9e55a1a33f8a058dac0de08d706949c49c 100644 (file)
@@ -25,19 +25,19 @@ import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.CancelResourceReserveOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.CancelResourceReserveOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInputBuilder;
 
 @ExtendWith(MockitoExtension.class)
 public class PCEServiceWrapperTest extends AbstractTest {
index 47bf4f486a0597cfce8e033654a59da7f12deab1..f2e4f8db0aa2c588229225c6f98991276cf95378 100644 (file)
@@ -29,12 +29,12 @@ import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInputBuilder;
 
 /**
  * Test RendererServiceWrapper class.
@@ -83,7 +83,7 @@ public class RendererServiceWrapperTest extends AbstractTest {
         TempServiceDeleteInput input = new TempServiceDeleteInputBuilder(ServiceDataUtils.buildTempServiceDeleteInput())
             .setCommonId(null).build();
         ServiceDeleteOutput response = this.rendererServiceWrapperMock
-            .performRenderer(input, ServiceNotificationTypes.ServiceDeleteResult);
+            .performRenderer(input, ServiceNotificationTypes.ServiceDeleteResult, null);
         assertEquals(ResponseCodes.FINAL_ACK_YES, response.getConfigurationResponseCommon().getAckFinalIndicator());
         assertEquals(ResponseCodes.RESPONSE_FAILED, response.getConfigurationResponseCommon().getResponseCode());
         verifyNoInteractions(this.rendererServiceOperationsMock);
@@ -132,8 +132,9 @@ public class RendererServiceWrapperTest extends AbstractTest {
                     .class), any()))
             .thenReturn(response);
         TempServiceDeleteInput input = ServiceDataUtils.buildTempServiceDeleteInput();
+        var tempServiceDeleteInput = ModelMappingUtils.createServiceDeleteInput(new ServiceInput(input));
         ServiceDeleteOutput rendereResponse = this.rendererServiceWrapperMock
-            .performRenderer(input, ServiceNotificationTypes.ServiceDeleteResult);
+            .performRenderer(tempServiceDeleteInput, ServiceNotificationTypes.ServiceDeleteResult, null);
         assertEquals(
             ResponseCodes.FINAL_ACK_NO,
             rendereResponse.getConfigurationResponseCommon().getAckFinalIndicator());
index ea1ff0ea3cf94a41619a1b64ed1b04a32c6135ef..0f40f3842918b3d4e1f637d808e421ba558678ff 100644 (file)
@@ -22,17 +22,18 @@ import org.opendaylight.transportpce.common.ResponseCodes;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
 import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommon;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParameters;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.ResponseParametersBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.response.parameters.sp.response.parameters.PathDescriptionBuilder;
@@ -174,7 +175,7 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest {
 
     @Test
     void getTempServiceFromEmptyDataStoreShouldBeEmpty() {
-        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
+        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list
                 .Services> optService = this.serviceDataStoreOperations.getTempService("service 1");
         assertFalse(optService.isPresent());
     }
@@ -182,16 +183,18 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest {
     @Test
     void createTempServiceShouldBeSuccessForValidInput() {
         TempServiceCreateInput createInput = ServiceDataUtils.buildTempServiceCreateInput();
-        OperationResult result = this.serviceDataStoreOperations.createTempService(createInput);
+        PathDescription pathDescription = ServiceDataUtils.createPathDescription(0,1, 0, 1);
+        OperationResult result = this.serviceDataStoreOperations.createTempService(createInput, pathDescription);
         assertTrue(result.isSuccess());
     }
 
     @Test
     void getTempServiceShouldReturnTheCorrectTempServiceForTheCreatedService() {
         TempServiceCreateInput createInput = ServiceDataUtils.buildTempServiceCreateInput();
-        this.serviceDataStoreOperations.createTempService(createInput);
+        PathDescription pathDescription = ServiceDataUtils.createPathDescription(0,1, 0, 1);
+        this.serviceDataStoreOperations.createTempService(createInput, pathDescription);
 
-        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.list
+        Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.temp.service.list
                 .Services> optService = this.serviceDataStoreOperations.getTempService(createInput.getCommonId());
         assertTrue(optService.isPresent());
         assertEquals(createInput.getCommonId(), optService.orElseThrow().getCommonId());
@@ -200,7 +203,8 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest {
     @Test
     void deleteTempServiceShouldBeSuccessfulForDeletingTempService() {
         TempServiceCreateInput createInput = ServiceDataUtils.buildTempServiceCreateInput();
-        this.serviceDataStoreOperations.createTempService(createInput);
+        PathDescription pathDescription = ServiceDataUtils.createPathDescription(0,1, 0, 1);
+        this.serviceDataStoreOperations.createTempService(createInput, pathDescription);
         OperationResult result = this.serviceDataStoreOperations.deleteTempService(createInput.getCommonId());
         assertTrue(result.isSuccess());
     }
@@ -208,7 +212,8 @@ public class ServiceDataStoreOperationsImplTest extends AbstractTest {
     @Test
     void modifyTempServiceIsSuccessfulForPresentTempService() {
         TempServiceCreateInput createInput = ServiceDataUtils.buildTempServiceCreateInput();
-        this.serviceDataStoreOperations.createTempService(createInput);
+        PathDescription pathDescription = ServiceDataUtils.createPathDescription(0,1, 0, 1);
+        this.serviceDataStoreOperations.createTempService(createInput, pathDescription);
         OperationResult result = this.serviceDataStoreOperations.modifyTempService(
             createInput.getCommonId(), State.InService, AdminStates.InService);
         assertTrue(result.isSuccess());
index f242f3ccee3aefce866eb6b1666ad11cbaf80540..47c5740d2c23361c0e5e47f45ba947610d497135 100644 (file)
@@ -8,32 +8,33 @@
 package org.opendaylight.transportpce.servicehandler.utils;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.DiversityConstraints.DiversityType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.common.constraints.LinkIdentifier;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.common.constraints.LinkIdentifierBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRouting;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRoutingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.DistanceBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.DiversityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Exclude;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.ExcludeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.HopCountBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.Include;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.IncludeBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.LatencyBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.TEMetricBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service.constraints.ServiceIdentifierListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.equipment.EquipmentBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraints;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.service.applicability.g.ServiceApplicabilityBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.DiversityConstraints.DiversityType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.common.constraints.LinkIdentifier;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.common.constraints.LinkIdentifierBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRouting;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRoutingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.DistanceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.DiversityBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Exclude;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.ExcludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.HopCountBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.Include;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.IncludeBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.LatencyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.TEMetricBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service.constraints.ServiceIdentifierListKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.equipment.EquipmentBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraints;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.service.applicability.g.ServiceApplicabilityBuilder;
 import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint8;
@@ -105,12 +106,12 @@ public final class ConstraintsUtils {
                                                       String maxDistance, String coRoutingServiceId) {
 
         Map<ServiceIdentifierListKey,
-            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service
+            org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service
                     .constraints.ServiceIdentifierList>
                 serviceIdList = new HashMap<>();
         if (diversityServiceList != null) {
             for (String serviceId : diversityServiceList) {
-                org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing.service
+                org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing.service
                         .constraints.ServiceIdentifierList sil = createServiceIdentifierListForDiversity(serviceId);
                 serviceIdList.put(sil.key(), sil);
             }
@@ -170,11 +171,11 @@ public final class ConstraintsUtils {
             .build();
     }
 
-    private static org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing
+    private static org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing
             .service.constraints.ServiceIdentifierList createServiceIdentifierListForDiversity(String serviceId) {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.diversity.existing
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.diversity.existing
                     .service.constraints.ServiceIdentifierListBuilder()
-            .setServiceIndentifier(serviceId)
+            .setServiceIdentifier(serviceId)
             .setServiceApplicability(new ServiceApplicabilityBuilder()
                 .setLink(true)
                 .setNode(true)
@@ -193,27 +194,27 @@ public final class ConstraintsUtils {
         excludeHashMap.put(
             "link1",
             new ExcludeBuilder()
-                .setLinkIdentifier(Map.of(linkId1.key(), linkId1))
+                .setLinkIdentifier(List.of(linkId1))
                 .build());
         excludeHashMap.put(
             "node",
             new ExcludeBuilder()
-                .setNodeId(Set.of(new NodeIdType("node-id-2")))
+                .setNodeId(List.of(new NodeIdType("node-id-2")))
                 .build());
         excludeHashMap.put(
             "service",
             new ExcludeBuilder()
-                .setSupportingServiceName(Set.of("supported-service-1", "supported-service-5"))
+                .setSupportingServiceName(List.of("supported-service-1", "supported-service-5"))
                 .build());
         excludeHashMap.put(
             "fiber1",
             new ExcludeBuilder()
-                .setFiberBundle(Set.of("fiber-1", "fiber-2"))
+                .setFiberBundle(List.of("fiber-1", "fiber-2"))
                 .build());
         excludeHashMap.put(
             "fiber2",
             new ExcludeBuilder()
-                .setFiberBundle(Set.of("fiber-2", "fiber-3"))
+                .setFiberBundle(List.of("fiber-2", "fiber-3"))
                 .build());
         LinkIdentifier linkId2 = new LinkIdentifierBuilder()
             .setLinkId("link-id 2")
@@ -226,7 +227,7 @@ public final class ConstraintsUtils {
         excludeHashMap.put(
             "link2",
             new ExcludeBuilder()
-                .setLinkIdentifier(Map.of(linkId2.key(), linkId2, linkId3.key(), linkId3))
+                .setLinkIdentifier(List.of(linkId2, linkId3))
                 .build());
         return excludeHashMap;
     }
@@ -240,27 +241,27 @@ public final class ConstraintsUtils {
         includeHashMap.put(
             "link1",
             new IncludeBuilder()
-                .setLinkIdentifier(Map.of(linkId1.key(), linkId1))
+                .setLinkIdentifier(List.of(linkId1))
                 .build());
         includeHashMap.put(
             "node",
             new IncludeBuilder()
-                .setNodeId(Set.of(new NodeIdType("node-id-1"), new NodeIdType("node-id-3")))
+                .setNodeId(List.of(new NodeIdType("node-id-1"), new NodeIdType("node-id-3")))
                 .build());
         includeHashMap.put(
             "service",
             new IncludeBuilder()
-                .setSupportingServiceName(Set.of("supported-service-1", "supported-service-5"))
+                .setSupportingServiceName(List.of("supported-service-1", "supported-service-5"))
                 .build());
         includeHashMap.put(
             "fiber1",
             new IncludeBuilder()
-                .setFiberBundle(Set.of("fiber-1", "fiber-2"))
+                .setFiberBundle(List.of("fiber-1", "fiber-2"))
                 .build());
         includeHashMap.put(
             "fiber2",
             new IncludeBuilder()
-                .setFiberBundle(Set.of("fiber-2", "fiber-3"))
+                .setFiberBundle(List.of("fiber-2", "fiber-3"))
                 .build());
         LinkIdentifier linkId2 = new LinkIdentifierBuilder()
             .setLinkId("link-id 2")
@@ -273,7 +274,7 @@ public final class ConstraintsUtils {
         includeHashMap.put(
             "link2",
             new IncludeBuilder()
-                .setLinkIdentifier(Map.of(linkId2.key(), linkId2, linkId3.key(), linkId3))
+                .setLinkIdentifier(List.of(linkId2, linkId3))
                 .build());
         return includeHashMap;
     }
index 5b76dc8f502d4f186b98edd0820b4023fe5356cf..557d43dc4782c9b37a47ae9d565dfbb4d4acbe88 100644 (file)
@@ -9,40 +9,40 @@ package org.opendaylight.transportpce.servicehandler.utils;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.response.parameters.ResponseParametersBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceEndpoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.response.parameters.ResponseParametersBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.LifecycleState;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirection;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirection;
@@ -165,7 +165,7 @@ public final class ModelMappingUtils {
     }
 
     public static RxDirection createRxDirection(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                 .service.endpoint.RxDirection rxDirection) {
         return new RxDirectionBuilder()
             .setPort(rxDirection.getPort())
@@ -173,7 +173,7 @@ public final class ModelMappingUtils {
     }
 
     public static TxDirection createTxDirection(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                 .service.endpoint.TxDirection txDirection) {
         return new TxDirectionBuilder()
             .setPort(txDirection.getPort())
@@ -284,11 +284,11 @@ public final class ModelMappingUtils {
                 .setSdncRequestHeader(serviceCreateInput.getSdncRequestHeader())
                 .setLifecycleState(LifecycleState.Planned)
                 .setServiceAEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceAEndBuilder(serviceCreateInput.getServiceAEnd())
                         .build())
                 .setServiceZEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceZEndBuilder(serviceCreateInput.getServiceZEnd())
                         .build())
                 .build();
@@ -306,11 +306,11 @@ public final class ModelMappingUtils {
                 .setSoftConstraints(serviceReconfigureInput.getSoftConstraints())
                 .setLifecycleState(LifecycleState.Planned)
                 .setServiceAEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceAEndBuilder(serviceReconfigureInput.getServiceAEnd())
                         .build())
                 .setServiceZEnd(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                             .service.ServiceZEndBuilder(serviceReconfigureInput.getServiceZEnd())
                         .build())
                 .build();
@@ -318,9 +318,9 @@ public final class ModelMappingUtils {
         return new ServicesBuilder().build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
+    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
             .temp.service.list.Services mappingServices(TempServiceCreateInput tempServiceCreateInput) {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
                 .temp.service.list.ServicesBuilder()
             .setServiceName(tempServiceCreateInput.getCommonId())
             .setAdministrativeState(AdminStates.OutOfService)
@@ -334,10 +334,10 @@ public final class ModelMappingUtils {
             .setSdncRequestHeader(tempServiceCreateInput.getSdncRequestHeader())
             .setLifecycleState(LifecycleState.Planned)
             .setServiceAEnd(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                     .service.ServiceAEndBuilder(tempServiceCreateInput.getServiceAEnd()).build())
             .setServiceZEnd(
-                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
                     .service.ServiceZEndBuilder(tempServiceCreateInput.getServiceZEnd()).build())
             .build();
     }
index e5939034c59505d8f444d8a2ba25727635893f31..a9df0ed95617547121c5dd26c8dee3c5bb217edd 100644 (file)
@@ -17,58 +17,54 @@ import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.Executors;
 import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResultBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.ServicePathRpcResultBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSpBuilder;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultShBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceNotificationTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeader;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.LgxBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceNotificationTypes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeader;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.LgxBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraintsBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInput.Option;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.feasibility.check.inputs.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.feasibility.check.inputs.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.feasibility.check.inputs.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.feasibility.check.inputs.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.AToZDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ZToADirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceFeasibilityCheckInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInput.Option;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRestorationInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfoBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.feasibility.check.inputs.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.feasibility.check.inputs.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.AToZDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ZToADirectionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.PceMetric;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.ServicePathNotificationTypes;
@@ -80,98 +76,92 @@ import org.opendaylight.yangtools.yang.common.Uint8;
 public final class ServiceDataUtils {
 
     public static ServiceCreateInput buildServiceCreateInput() {
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-            .ServiceAEnd serviceAEnd = getServiceAEndBuild()
-            .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-            .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
-            .create.input.ServiceZEndBuilder()
-            .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
-            .setNodeId(new NodeIdType("XPONDER-3-2"))
-            .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-            .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
-            .build();
-
-        ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder()
+        return new ServiceCreateInputBuilder()
             .setCommonId("commonId")
             .setConnectionType(ConnectionType.Service)
             .setCustomer("Customer")
             .setServiceName("service 1")
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
-                .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build());
-
-        return builtInput.build();
+            .setServiceAEnd(getServiceAEndBuild().build())
+            .setServiceZEnd(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .service.create.input.ServiceZEndBuilder()
+                    .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
+                    .setNodeId(new NodeIdType("XPONDER-3-2"))
+                    .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setSdncRequestHeader(
+                new SdncRequestHeaderBuilder()
+                    .setRequestId("request 1")
+                    .setRpcAction(RpcActions.ServiceCreate)
+                    .setNotificationUrl("notification url")
+                    .build())
+            .build();
     }
 
     public static ServiceCreateInput buildServiceCreateInputWithHardConstraints() {
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-                .ServiceAEnd serviceAEnd = getServiceAEndBuild()
-                .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-                .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
-                .create.input.ServiceZEndBuilder()
-                .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
-                .setNodeId(new NodeIdType("XPONDER-3-2"))
-                .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-                .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
-                .build();
-
-        ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder()
+        return new ServiceCreateInputBuilder()
             .setCommonId("commonId")
             .setConnectionType(ConnectionType.Service)
             .setCustomer("Customer")
             .setServiceName("service 1")
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
-                .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build())
-            .setHardConstraints(new HardConstraintsBuilder().build());
-
-        return builtInput.build();
+            .setServiceAEnd(getServiceAEndBuild().build())
+            .setServiceZEnd(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .service.create.input.ServiceZEndBuilder()
+                    .setClli("clli")
+                    .setServiceFormat(ServiceFormat.OC)
+                    .setServiceRate(Uint32.valueOf(1))
+                    .setNodeId(new NodeIdType("XPONDER-3-2"))
+                    .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setSdncRequestHeader(
+                new SdncRequestHeaderBuilder()
+                    .setRequestId("request 1")
+                    .setRpcAction(RpcActions.ServiceCreate)
+                    .setNotificationUrl("notification url")
+                    .build())
+            .setHardConstraints(new HardConstraintsBuilder().build())
+            .build();
     }
 
     public static ServiceCreateInput buildServiceCreateInputWithSoftConstraints() {
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-                .ServiceAEnd serviceAEnd = getServiceAEndBuild()
-                .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-                .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
-                .create.input.ServiceZEndBuilder()
-                .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
-                .setNodeId(new NodeIdType("XPONDER-3-2"))
-                .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-                .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
-                .build();
-
-        ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder()
+        return new ServiceCreateInputBuilder()
             .setCommonId("commonId")
             .setConnectionType(ConnectionType.Service)
             .setCustomer("Customer")
             .setServiceName("service 1")
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
-                .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build())
-            .setSoftConstraints(new SoftConstraintsBuilder().build());
-
-        return builtInput.build();
+            .setServiceAEnd(getServiceAEndBuild().build())
+            .setServiceZEnd(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .service.create.input.ServiceZEndBuilder()
+                    .setClli("clli")
+                    .setServiceFormat(ServiceFormat.OC)
+                    .setServiceRate(Uint32.valueOf(1))
+                    .setNodeId(new NodeIdType("XPONDER-3-2"))
+                    .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setSdncRequestHeader(
+                new SdncRequestHeaderBuilder()
+                    .setRequestId("request 1")
+                    .setRpcAction(RpcActions.ServiceCreate)
+                    .setNotificationUrl("notification url")
+                    .build())
+            .setSoftConstraints(new SoftConstraintsBuilder().build())
+            .build();
     }
 
     public static PathComputationRequestInput createPceRequestInput(ServiceCreateInput input) {
-        ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
         SdncRequestHeader serviceHandler = input.getSdncRequestHeader();
-        if (serviceHandler != null) {
-            serviceHandlerHeader.setRequestId(serviceHandler.getRequestId());
-        }
         return new PathComputationRequestInputBuilder()
             .setServiceName(input.getServiceName())
             .setResourceReserve(true)
-            .setServiceHandlerHeader(serviceHandlerHeader.build())
+            .setServiceHandlerHeader(
+                serviceHandler == null
+                    ? new ServiceHandlerHeaderBuilder().build()
+                    : new ServiceHandlerHeaderBuilder().setRequestId(serviceHandler.getRequestId()).build())
             .setHardConstraints(input.getHardConstraints())
             .setSoftConstraints(input.getSoftConstraints())
             .setPceRoutingMetric(PceMetric.TEMetric)
@@ -181,194 +171,226 @@ public final class ServiceDataUtils {
     }
 
     public static TempServiceCreateInput buildTempServiceCreateInput() {
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.create.input
-            .ServiceAEnd serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp
-                .service.create.input.ServiceAEndBuilder()
-            .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
-            .setNodeId(new NodeIdType("XPONDER-1-2"))
-            .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-            .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
-            .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp.service.create.input
-            .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.temp
-            .service.create.input.ServiceZEndBuilder()
-            .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
-            .setNodeId(new NodeIdType("XPONDER-3-2"))
-            .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-            .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
-            .build();
-
-        TempServiceCreateInputBuilder builtInput = new TempServiceCreateInputBuilder()
+        return new TempServiceCreateInputBuilder()
             .setCommonId("commonId")
             .setConnectionType(ConnectionType.Service)
             .setCustomer("Customer")
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
-                .setRpcAction(RpcActions.TempServiceCreate).setNotificationUrl("notification url").build());
-
-        return builtInput.build();
-    }
-
-    public static ServiceFeasibilityCheckInput buildServiceFeasibilityCheckInput() {
-
-        ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
+            .setServiceAEnd(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .temp.service.create.input.ServiceAEndBuilder()
                     .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
                     .setNodeId(new NodeIdType("XPONDER-1-2"))
                     .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection())).build();
-        ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setServiceZEnd(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .temp.service.create.input.ServiceZEndBuilder()
                     .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
                     .setNodeId(new NodeIdType("XPONDER-3-2"))
                     .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection())).build();
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setSdncRequestHeader(
+                new SdncRequestHeaderBuilder()
+                    .setRequestId("request 1")
+                    .setRpcAction(RpcActions.TempServiceCreate)
+                    .setNotificationUrl("notification url")
+                    .build())
+            .build();
+    }
 
-        ServiceFeasibilityCheckInputBuilder builtInput = new ServiceFeasibilityCheckInputBuilder()
+    public static ServiceFeasibilityCheckInput buildServiceFeasibilityCheckInput() {
+        return new ServiceFeasibilityCheckInputBuilder()
             .setCommonId("commonId")
             .setConnectionType(ConnectionType.Service)
             .setCustomer("Customer")
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
-                .setRpcAction(RpcActions.ServiceFeasibilityCheck).setNotificationUrl("notification url").build());
-        return builtInput.build();
+            .setServiceAEnd(
+                new ServiceAEndBuilder()
+                    .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
+                    .setNodeId(new NodeIdType("XPONDER-1-2"))
+                    .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setServiceZEnd(
+                new ServiceZEndBuilder()
+                    .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
+                    .setNodeId(new NodeIdType("XPONDER-3-2"))
+                    .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setSdncRequestHeader(
+                new SdncRequestHeaderBuilder()
+                    .setRequestId("request 1")
+                    .setRpcAction(RpcActions.ServiceFeasibilityCheck)
+                    .setNotificationUrl("notification url")
+                    .build())
+            .build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-        .ServiceAEndBuilder getServiceAEndBuild() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-            .ServiceAEndBuilder()
-            .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
+    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+            .service.create.input.ServiceAEndBuilder getServiceAEndBuild() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                .service.create.input.ServiceAEndBuilder()
+            .setClli("clli")
+            .setServiceFormat(ServiceFormat.OC)
+            .setServiceRate(Uint32.valueOf(1))
             .setNodeId(new NodeIdType("XPONDER-1-2"))
             .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
             .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()));
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-        .ServiceZEndBuilder getServiceZEndBuild() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input
-            .ServiceZEndBuilder()
-            .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
+    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+            .service.create.input.ServiceZEndBuilder getServiceZEndBuild() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                .service.create.input.ServiceZEndBuilder()
+            .setClli("clli")
+            .setServiceFormat(ServiceFormat.OC)
+            .setServiceRate(Uint32.valueOf(1))
             .setNodeId(new NodeIdType("XPONDER-1-2"))
             .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
             .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()));
     }
 
     private static TxDirection getTxDirection() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service
-                .endpoint.TxDirectionBuilder().setPort(new PortBuilder().setPortDeviceName("device name")
-                        .setPortName("port name").setPortRack("port rack").setPortShelf("port shelf")
-                        .setPortSlot("port slot").setPortSubSlot("port subslot").setPortType("port type").build())
-                        .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name").setLgxPortName("lgx port name")
-                                .setLgxPortRack("lgx port rack").setLgxPortShelf("lgx port shelf").build())
-                        .setIndex(Uint8.ZERO)
-                        .build();
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                .service.endpoint.TxDirectionBuilder()
+            .setPort(
+                new PortBuilder()
+                    .setPortDeviceName("device name")
+                    .setPortName("port name")
+                    .setPortRack("port rack")
+                    .setPortShelf("port shelf")
+                    .setPortSlot("port slot")
+                    .setPortSubSlot("port subslot")
+                    .setPortType("port type")
+                    .build())
+            .setLgx(
+                new LgxBuilder()
+                    .setLgxDeviceName("lgx device name")
+                    .setLgxPortName("lgx port name")
+                    .setLgxPortRack("lgx port rack")
+                    .setLgxPortShelf("lgx port shelf")
+                    .build())
+            .setIndex(Uint8.ZERO)
+            .build();
     }
 
     private static RxDirection getRxDirection() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service
-                .endpoint.RxDirectionBuilder()
-                    .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
-                        .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
-                        .setPortSubSlot("port subslot").setPortType("port type").build())
-                    .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name")
-                        .setLgxPortName("lgx port name").setLgxPortRack("lgx port rack")
-                        .setLgxPortShelf("lgx port shelf").build())
-                    .setIndex(Uint8.ZERO)
-                    .build();
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                .service.endpoint.RxDirectionBuilder()
+            .setPort(
+                new PortBuilder()
+                    .setPortDeviceName("device name")
+                    .setPortName("port name")
+                    .setPortRack("port rack")
+                    .setPortShelf("port shelf")
+                    .setPortSlot("port slot")
+                    .setPortSubSlot("port subslot")
+                    .setPortType("port type")
+                    .build())
+            .setLgx(
+                new LgxBuilder()
+                    .setLgxDeviceName("lgx device name")
+                    .setLgxPortName("lgx port name")
+                    .setLgxPortRack("lgx port rack")
+                    .setLgxPortShelf("lgx port shelf")
+                    .build())
+            .setIndex(Uint8.ZERO)
+            .build();
     }
 
     public static ServiceDeleteInput buildServiceDeleteInput() {
-
-        ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder();
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
-        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
-        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
-        deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder().setServiceName("service 1")
-            .setDueDate(datetime).setTailRetention(ServiceDeleteReqInfo.TailRetention.No).build());
-        SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder()
-            .setNotificationUrl("notification url")
-            .setRequestId("request 1")
-            .setRequestSystemId("request system 1")
-            .setRpcAction(RpcActions.ServiceDelete);
-        deleteInputBldr.setSdncRequestHeader(sdncBuilder.build());
-        return deleteInputBldr.build();
+        return new ServiceDeleteInputBuilder()
+            .setServiceDeleteReqInfo(
+                new ServiceDeleteReqInfoBuilder().setServiceName("service 1")
+                    .setDueDate(
+                        new DateAndTime(
+                            DateTimeFormatter
+                                .ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")
+                                .format(OffsetDateTime.now(ZoneOffset.UTC))))
+                    .setTailRetention(ServiceDeleteReqInfo.TailRetention.No)
+                    .build())
+            .setSdncRequestHeader(
+                new SdncRequestHeaderBuilder()
+                    .setNotificationUrl("notification url")
+                    .setRequestId("request 1")
+                    .setRequestSystemId("request system 1")
+                    .setRpcAction(RpcActions.ServiceDelete)
+                    .build())
+            .build();
     }
 
     public static TempServiceDeleteInput buildTempServiceDeleteInput() {
-        TempServiceDeleteInputBuilder deleteInputBldr = new TempServiceDeleteInputBuilder()
-            .setCommonId("service 1");
-        return deleteInputBldr.build();
+        return new TempServiceDeleteInputBuilder().setCommonId("service 1").build();
     }
 
     public static TempServiceDeleteInput buildTempServiceDeleteInput(String commonId) {
-        TempServiceDeleteInputBuilder deleteInputBldr = new TempServiceDeleteInputBuilder()
-            .setCommonId(commonId);
-        return deleteInputBldr.build();
+        return new TempServiceDeleteInputBuilder().setCommonId(commonId).build();
     }
 
     public static ServiceRerouteInput buildServiceRerouteInput() {
-        ServiceRerouteInputBuilder builder = new ServiceRerouteInputBuilder()
-            .setServiceName("service 1");
-        return builder.build();
+        return new ServiceRerouteInputBuilder().setServiceName("service 1").build();
     }
 
     public static ServiceRestorationInput buildServiceRestorationInput() {
-        ServiceRestorationInputBuilder builder = new ServiceRestorationInputBuilder()
+        return new ServiceRestorationInputBuilder()
             .setServiceName("service 1")
-            .setOption(Option.Permanent);
-        return builder.build();
+            .setOption(Option.Permanent)
+            .build();
     }
 
     public static ServiceReconfigureInput buildServiceReconfigureInput() {
-
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.reconfigure.input
-            .ServiceAEnd serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
-                .reconfigure.input.ServiceAEndBuilder()
-                .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
-                .setNodeId(new NodeIdType("XPONDER-1-2"))
-                .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-                .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
-                .build();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.reconfigure.input
-            .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service
-                .reconfigure.input.ServiceZEndBuilder()
-                .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
-                .setNodeId(new NodeIdType("XPONDER-3-2"))
-                .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
-                .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
-                .build();
-
-        ServiceReconfigureInputBuilder builtInput = new ServiceReconfigureInputBuilder()
+        return new ServiceReconfigureInputBuilder()
             .setCommonId("commonId")
             .setConnectionType(ConnectionType.Service)
             .setCustomer("Customer")
             .setServiceName("service 1")
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd);
-        return builtInput.build();
+            .setServiceAEnd(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .service.reconfigure.input.ServiceAEndBuilder()
+                    .setClli("clli")
+                    .setServiceFormat(ServiceFormat.OC)
+                    .setServiceRate(Uint32.valueOf(1))
+                    .setNodeId(new NodeIdType("XPONDER-1-2"))
+                    .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .setServiceZEnd(
+                new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .service.reconfigure.input.ServiceZEndBuilder()
+                    .setClli("clli")
+                    .setServiceFormat(ServiceFormat.OC)
+                    .setServiceRate(Uint32.valueOf(1))
+                    .setNodeId(new NodeIdType("XPONDER-3-2"))
+                    .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
+                    .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()))
+                    .build())
+            .build();
     }
 
     public static ServicePathRpcResult buildServicePathRpcResult() {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
-        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
-        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
-        ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
-        builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
+        return new ServicePathRpcResultBuilder()
+            .setActualDate(
+                new DateAndTime(
+                    DateTimeFormatter
+                        .ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")
+                        .format(OffsetDateTime.now(ZoneOffset.UTC))))
+            .setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
             .setPathDescription(createPathDescription(0,1, 0, 1))
             .setServiceName("service 1")
-            .setStatus(RpcStatusEx.Successful).setStatusMessage("success");
-        return builder.build();
+            .setStatus(RpcStatusEx.Successful).setStatusMessage("success")
+            .build();
     }
 
     public static ServicePathRpcResult buildServicePathRpcResult(
             ServicePathNotificationTypes servicePathNotificationTypes, String serviceName, RpcStatusEx rpcStatusEx,
             String message, Boolean pathDescription) {
-        ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
-        builder.setNotificationType(servicePathNotificationTypes)
-                .setServiceName(serviceName)
-                .setStatus(rpcStatusEx).setStatusMessage(message);
+        ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder()
+            .setNotificationType(servicePathNotificationTypes)
+            .setServiceName(serviceName)
+            .setStatus(rpcStatusEx)
+            .setStatusMessage(message);
         if (pathDescription) {
             builder.setPathDescription(createPathDescription(0L, 5L, 0L, 5L));
         }
@@ -376,101 +398,122 @@ public final class ServiceDataUtils {
     }
 
     public static ServicePathRpcResult buildFailedPceServicePathRpcResult() {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
-        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
-        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
-        ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
-        builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
-                .setPathDescription(createPathDescription(0, 1, 0, 1)).setServiceName("service 1")
-                .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
-        return builder.build();
+        return new ServicePathRpcResultBuilder()
+            .setActualDate(
+                new DateAndTime(
+                    DateTimeFormatter
+                        .ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")
+                        .format(OffsetDateTime.now(ZoneOffset.UTC))))
+            .setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
+            .setPathDescription(createPathDescription(0, 1, 0, 1))
+            .setServiceName("service 1")
+            .setStatus(RpcStatusEx.Failed).setStatusMessage("failed")
+        .build();
     }
 
     public static ServicePathRpcResult buildFailedServicePathRpcResult() {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
-        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
-        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
-        ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
-        builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
+        return new ServicePathRpcResultBuilder()
+            .setActualDate(
+                new DateAndTime(
+                    DateTimeFormatter
+                        .ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")
+                        .format(OffsetDateTime.now(ZoneOffset.UTC))))
+            .setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
             .setPathDescription(createPathDescription(0,1, 0, 1))
             .setServiceName("service 1")
-                .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
-        return builder.build();
+            .setStatus(RpcStatusEx.Failed)
+            .setStatusMessage("failed")
+            .build();
     }
 
     public static RendererRpcResultSp buildRendererRpcResultSp() {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
-        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
-        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
-        RendererRpcResultSpBuilder builder = new RendererRpcResultSpBuilder();
-        builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
-                .setServiceName("service 1").setStatus(RpcStatusEx.Successful).setStatusMessage("success");
-        return builder.build();
+        return new RendererRpcResultSpBuilder()
+            .setActualDate(
+                new DateAndTime(
+                    DateTimeFormatter
+                        .ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")
+                        .format(OffsetDateTime.now(ZoneOffset.UTC))))
+            .setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
+            .setServiceName("service 1")
+            .setStatus(RpcStatusEx.Successful)
+            .setStatusMessage("success")
+            .build();
     }
 
     public static RendererRpcResultSp buildRendererRpcResultSp(
             ServicePathNotificationTypes servicePathNotificationTypes,
             String serviceName, RpcStatusEx rpcStatusEx, String message) {
-        RendererRpcResultSpBuilder builder = new RendererRpcResultSpBuilder();
-        builder.setNotificationType(servicePathNotificationTypes).setServiceName(serviceName)
-                .setStatus(rpcStatusEx).setStatusMessage(message);
-        return builder.build();
+        return new RendererRpcResultSpBuilder()
+            .setNotificationType(servicePathNotificationTypes)
+            .setServiceName(serviceName)
+            .setStatus(rpcStatusEx)
+            .setStatusMessage(message)
+            .build();
     }
 
     public static ServiceRpcResultSh buildServiceRpcResultSh(
             ServiceNotificationTypes serviceNotificationTypes,
             String serviceName,
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx
-                rpcStatusEx,
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
+                .RpcStatusEx rpcStatusEx,
             String message) {
-        ServiceRpcResultShBuilder builder = new ServiceRpcResultShBuilder();
-        builder.setNotificationType(serviceNotificationTypes).setServiceName(serviceName)
-                .setStatus(rpcStatusEx).setStatusMessage(message);
-        return builder.build();
+        return new ServiceRpcResultShBuilder()
+            .setNotificationType(serviceNotificationTypes)
+            .setServiceName(serviceName)
+            .setStatus(rpcStatusEx)
+            .setStatusMessage(message)
+            .build();
     }
 
     public static RendererRpcResultSp buildFailedRendererRpcResultSp() {
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
-        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
-        DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
-        RendererRpcResultSpBuilder builder = new RendererRpcResultSpBuilder();
-        builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
-                .setServiceName("service 1").setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
-        return builder.build();
+        return new RendererRpcResultSpBuilder()
+            .setActualDate(
+                new DateAndTime(
+                    DateTimeFormatter
+                        .ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx")
+                        .format(OffsetDateTime.now(ZoneOffset.UTC))))
+            .setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
+            .setServiceName("service 1")
+            .setStatus(RpcStatusEx.Failed)
+            .setStatusMessage("failed")
+            .build();
     }
 
-    public static PathDescription createPathDescription(long azRate, long azWaveLength, long zaRate,
-        long zaWaveLength) {
-        AToZDirection atozDirection = new AToZDirectionBuilder()
-            .setRate(Uint32.valueOf(azRate))
-            .setAToZWavelengthNumber(Uint32.valueOf(azWaveLength))
-            .build();
-        ZToADirection ztoaDirection = new ZToADirectionBuilder()
-            .setRate(Uint32.valueOf(zaRate))
-            .setZToAWavelengthNumber(Uint32.valueOf(zaWaveLength))
-            .build();
-        PathDescription pathDescription = new PathDescriptionBuilder()
-            .setAToZDirection(atozDirection)
-            .setZToADirection(ztoaDirection)
+    public static PathDescription createPathDescription(
+            long azRate, long azWaveLength, long zaRate, long zaWaveLength) {
+        return new PathDescriptionBuilder()
+            .setAToZDirection(
+                new AToZDirectionBuilder()
+                    .setRate(Uint32.valueOf(azRate))
+                    .setAToZWavelengthNumber(Uint32.valueOf(azWaveLength))
+                    .build())
+            .setZToADirection(
+                new ZToADirectionBuilder()
+                    .setRate(Uint32.valueOf(zaRate))
+                    .setZToAWavelengthNumber(Uint32.valueOf(zaWaveLength))
+                    .build())
             .build();
-        return pathDescription;
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.reconfigure.input
-        .ServiceAEndBuilder getServiceAEndBuildReconfigure() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.reconfigure.input
-            .ServiceAEndBuilder()
-            .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
+    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+            .service.reconfigure.input.ServiceAEndBuilder getServiceAEndBuildReconfigure() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                .service.reconfigure.input.ServiceAEndBuilder()
+            .setClli("clli")
+            .setServiceFormat(ServiceFormat.OC)
+            .setServiceRate(Uint32.valueOf(1))
             .setNodeId(new NodeIdType("XPONDER-1-2"))
             .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
             .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()));
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.reconfigure.input
-        .ServiceZEndBuilder getServiceZEndBuildReconfigure() {
-        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.reconfigure.input
-            .ServiceZEndBuilder()
-            .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate(Uint32.valueOf(1))
+    public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+            .service.reconfigure.input.ServiceZEndBuilder getServiceZEndBuildReconfigure() {
+        return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                .service.reconfigure.input.ServiceZEndBuilder()
+            .setClli("clli")
+            .setServiceFormat(ServiceFormat.OC)
+            .setServiceRate(Uint32.valueOf(1))
             .setNodeId(new NodeIdType("XPONDER-1-2"))
             .setTxDirection(Map.of(new TxDirectionKey(getTxDirection().key()),getTxDirection()))
             .setRxDirection(Map.of(new RxDirectionKey(getRxDirection().key()), getRxDirection()));
index 1f39e73d4d50146ec3ada6117c58e13b00f22ad0..74eff0190f648fcfaf00433861ddc312b4dd5d56 100644 (file)
@@ -15,13 +15,13 @@ import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.servicehandler.ServiceInput;
 import org.opendaylight.transportpce.servicehandler.utils.ServiceDataUtils;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.CoRoutingBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.constraints.co.routing.ServiceIdentifierListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210.routing.constraints.SoftConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.CoRoutingBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.constraints.co.routing.ServiceIdentifierListBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.HardConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209.routing.constraints.SoftConstraintsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
 
 
 public class ServiceCreateValidationTest {
@@ -41,7 +41,7 @@ public class ServiceCreateValidationTest {
             .setHardConstraints(new HardConstraintsBuilder()
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
                             .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service")
                             .build()))
@@ -51,7 +51,7 @@ public class ServiceCreateValidationTest {
             .setSoftConstraints(new SoftConstraintsBuilder()
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
                             .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service")
                             .build()))
@@ -78,7 +78,7 @@ public class ServiceCreateValidationTest {
             .setSoftConstraints(new SoftConstraintsBuilder()
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
                             .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service")
                             .build()))
@@ -96,7 +96,7 @@ public class ServiceCreateValidationTest {
             .setSoftConstraints(null).setHardConstraints(new HardConstraintsBuilder()
                 .setCoRouting(new CoRoutingBuilder()
                     .setServiceIdentifierList(Map.of(
-                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev211210
+                        new org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constraints.rev221209
                             .constraints.co.routing.ServiceIdentifierListKey("Some existing-service"),
                         new ServiceIdentifierListBuilder().setServiceIdentifier("Some existing-service")
                             .build()))
index c67ce30046205d7899c2835a801e33e041c1317d..c5ea98afee87173a535d058ead8c61789f98e628 100644 (file)
@@ -15,12 +15,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.junit.jupiter.MockitoExtension;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Protected;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Restorable;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Unprotected;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.UnprotectedDiverselyRouted;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.ServiceResiliencyBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.resiliency.service.resiliency.CoupledServiceBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.Protected;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.Restorable;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.Unprotected;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.UnprotectedDiverselyRouted;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.ServiceResiliencyBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.resiliency.service.resiliency.CoupledServiceBuilder;
 import org.opendaylight.yangtools.yang.common.Uint64;
 import org.opendaylight.yangtools.yang.common.Uint8;
 
index d779f886a87bd5533cb9055033920f94bb921ddc..9d756697caf612261631098d62fcf6d8759f9083 100644 (file)
@@ -13,9 +13,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.opendaylight.transportpce.servicehandler.validation.checks.ServicehandlerComplianceCheck.LogMessages;
 
 import org.junit.jupiter.api.Test;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
 
 public class ServicehandlerComplianceCheckTest {
 
index 032ab931e7f6b55a29c836dfa68eeb4ac03887fc..cd68db52e87e04efa27ab0b04bace43a3feabf28 100644 (file)
@@ -14,7 +14,7 @@ import static org.opendaylight.transportpce.servicehandler.validation.checks.Ser
 
 import org.junit.jupiter.api.Test;
 import org.opendaylight.transportpce.servicehandler.ServiceEndpointType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEndBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
index 79156fdafdfc72885e8c6aceacede1d5404aa034..28f127ac0bf6d82c7844350eeba13966b00e0442 100644 (file)
@@ -15,17 +15,17 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>transportpce-tapi</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -40,7 +40,7 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.4</version>
+        <version>7.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
@@ -58,7 +58,7 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
@@ -74,15 +74,15 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>tapi-2.1.1</artifactId>
+      <artifactId>tapi-2.4.0</artifactId>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
@@ -150,6 +150,11 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-binding-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
@@ -160,21 +165,13 @@ Author: Martial Coulibaly <martial.coulibaly@gfi.com> on behalf of Orange
     </dependency>
     <dependency>
       <groupId>org.opendaylight.netconf</groupId>
-      <artifactId>sal-netconf-connector</artifactId>
+      <artifactId>netconf-client-mdsal</artifactId>
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.service.component.annotations</artifactId>
     </dependency>
 
-    <!-- Sodium bump: javax.annotation.Nullable and friends -->
-    <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <version>3.0.2</version>
-      <optional>true</optional>
-    </dependency>
-
     <!-- Testing Dependencies -->
     <dependency>
       <groupId>${project.groupId}</groupId>
index 457866f4def96209f8720f7ea1565b88132ac826..886aac77888ab8e992268ec43ff2970d0773869e 100644 (file)
@@ -21,11 +21,11 @@ import org.opendaylight.transportpce.common.Timeouts;
 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegree;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.cp.to.degree.CpToDegree;
+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.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols;
@@ -34,10 +34,10 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.conta
 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.nbr.list.IfName;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.Direction;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
-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.Uuid;
-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.common.rev221121.LayerProtocolName;
+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.topology.rev221121.topology.Link;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -249,11 +249,14 @@ public class R2RTapiLinkDiscovery {
             + "DestDegId: {}, DestTPId: {}", nodeId.getValue(), srcDegId, srcTpTx, destNodeId, destDegId, destTpRx);
         Link omsLink = this.tapiLink.createTapiLink(nodeId.getValue(), srcTpTx, destNodeId.getValue(), destTpTx,
             TapiStringConstants.OMS_RDM_RDM_LINK, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
-            TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
+            TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS,
             this.tapiLink.getAdminState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx),
             this.tapiLink.getOperState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx),
             Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid);
         LOG.info("Tapi R2R Link OMS link created = {}", omsLink);
+        LOG.debug("inputAdminstate= {}, inputoperstate = {}",
+            this.tapiLink.getAdminState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx),
+            this.tapiLink.getOperState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx));
         return omsLink;
     }
 
index 52e97af26b7d6d902d2239e8c2dfa367ef258e8d..0efaaccaea27cb6cd8cca1c6496b4afbcd612241 100644 (file)
@@ -13,8 +13,19 @@ public final class TapiStringConstants {
     public static final String OMS_RDM_RDM_LINK = "tapi-rdm-rdm-link";
     public static final String OMS_XPDR_RDM_LINK = "tapi-xpdr-rdm-link";
     public static final String OTN_XPDR_XPDR_LINK = "tapi-otn-xpdr-xpdr-link";
+    public static final String VALUE_NAME_OTN_XPDR_XPDR_LINK = "otn link name";
+    public static final String VALUE_NAME_OTS_XPDR_RDM_LINK = "Xpdr to roadm link";
+    public static final String VALUE_NAME_OMS_RDM_RDM_LINK = "OMS link name";
+    public static final String VALUE_NAME_ROADM_NODE = "roadm node name";
+    public static final String VALUE_NAME_XPDR_NODE = "dsr/odu node name";
     public static final String T0_MULTILAYER = "T0 - Multi-layer topology";
+    public static final String T0_TAPI_MULTILAYER = "T0 - Tapi-Multi-layer Abstracted topology";
     public static final String T0_FULL_MULTILAYER = "T0 - Full Multi-layer topology";
+    // TODO: these hardcoded UUID are here for debugging purpose.
+    // They allow to have a reference somewhere of the UUID to be used when testing.
+    public static final String T0_MULTILAYER_UUID = "747c670e-7a07-3dab-b379-5b1cd17402a3";
+    public static final String T0_TAPI_MULTILAYER_UUID = "a6c5aed1-dc75-333a-b3a3-b6b70534eae8";
+    public static final String T0_FULL_MULTILAYER_UUID = "393f09a4-0a0b-3d82-a4f6-1fbbc14ca1a8";
     public static final String TPDR_100G = "Transponder 100GE";
     public static final String DSR = "DSR";
     public static final String ODU = "ODU";
@@ -24,12 +35,15 @@ public final class TapiStringConstants {
     public static final String E_OTSI = "eOTSi";
     public static final String I_OTSI = "iOTSi";
     public static final String PHTNC_MEDIA = "PHOTONIC_MEDIA";
+    public static final String PHTNC_MEDIA_OTS = "PHOTONIC_MEDIA_OTS";
+    public static final String PHTNC_MEDIA_OMS = "PHOTONIC_MEDIA_OMS";
     public static final String MC = "MEDIA_CHANNEL";
     public static final String OTSI_MC = "OTSi_MEDIA_CHANNEL";
     public static final String RDM_INFRA = "ROADM-infra";
     public static final String CLIENT = "-CLIENT";
     public static final String NETWORK = "-NETWORK";
-    public static final String XPDR = "-XPDR";
+    public static final String XPDR = "XPONDER";
+    public static final String XXPDR = "-XPDR";
     public static final String TP = "TerminationPoint";
     public static final String NODE = "Node";
     public static final String LGX_PORT_NAME = "Some lgx-port-name";
index 0087d2462e75ee4375b43a0a5561e74ebc255f1a..fe1e2eb2de021f37924a871951ca5b75db7c5217 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.transportpce.tapi.connectivity;
 
+import java.math.BigDecimal;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -25,90 +27,97 @@ import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.GenericServiceEndpoint;
 import org.opendaylight.transportpce.tapi.utils.ServiceEndpointType;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.equipment.types.rev191129.OpticTypes;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Service;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ethernet.subrate.attributes.grp.EthernetAttributesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.LgxBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.subrate.eth.sla.SubrateEthSlaBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.Service;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ethernet.subrate.attributes.grp.EthernetAttributesBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.LgxBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.subrate.eth.sla.SubrateEthSlaBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU4;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTU4;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToA;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.ztoa.direction.ZToAKey;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Node;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZ;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.atoz.direction.AToZKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToA;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.path.description.ztoa.direction.ZToAKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Node;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.BandwidthProfileBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ProtectionRole;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ServiceType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnectionKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.end.point.ClientNodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.end.point.ClientNodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.Connection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.CapacityBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.ServiceInterfacePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.ConnectivityConstraint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.edge.point.MappedServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.TotalSizeBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ProtectionRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ServiceType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.Connection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectivityConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectivityConstraintBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.CapacityBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.ServiceInterfacePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIERMC;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint64;
@@ -118,17 +127,18 @@ import org.slf4j.LoggerFactory;
 
 public final class ConnectivityUtils {
 
-    private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-        .getBytes(StandardCharsets.UTF_8)).toString());
+    private final Uuid tapiTopoUuid = new Uuid(
+            UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(StandardCharsets.UTF_8)).toString());
     private static final Logger LOG = LoggerFactory.getLogger(ConnectivityUtils.class);
 
     private final ServiceDataStoreOperations serviceDataStoreOperations;
     private final TapiContext tapiContext;
     private Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap;
-    private final Map<org.opendaylight.yang.gen.v1.urn
-        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey,
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection>
-        connectionFullMap; // this variable is for complete connection objects
+    // this variable is for complete connection objects
+    private final Map<
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey,
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection>
+            connectionFullMap;
     private final NetworkTransactionService networkTransactionService;
     private Connection topConnRdmRdm;
     private Connection topConnXpdrXpdrPhtn;
@@ -162,56 +172,65 @@ public final class ConnectivityUtils {
             .setServiceName("service test")
             .setServiceAEnd(serviceAEnd)
             .setServiceZEnd(serviceZEnd)
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request-1")
-                .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").setRequestSystemId(
-                    "appname")
-                .build())
+            .setSdncRequestHeader(
+                new SdncRequestHeaderBuilder()
+                    .setRequestId("request-1")
+                    .setRpcAction(RpcActions.ServiceCreate)
+                    .setNotificationUrl("notification url")
+                    .setRequestSystemId("appname")
+                    .build())
             .build();
     }
 
-    public static ServiceAEnd buildServiceAEnd(String nodeid, String clli, String txPortDeviceName,
-                                               String txPortName, String rxPortDeviceName, String rxPortName) {
+    public static ServiceAEnd buildServiceAEnd(
+            String nodeid, String clli, String txPortDeviceName,
+            String txPortName, String rxPortDeviceName, String rxPortName) {
         return new ServiceAEndBuilder()
             .setClli(clli)
             .setNodeId(new NodeIdType(nodeid))
             .setOpticType(OpticTypes.Gray)
             .setServiceFormat(ServiceFormat.Ethernet)
             .setServiceRate(Uint32.valueOf(100))
-            .setTxDirection(Map.of(new TxDirectionKey(Uint8.ZERO), new TxDirectionBuilder()
-                .setPort(new PortBuilder()
-                    .setPortDeviceName(txPortDeviceName)
-                    .setPortName(txPortName)
-                    .setPortRack(TapiStringConstants.PORT_RACK_VALUE)
-                    .setPortShelf("00")
-                    .setPortType(TapiStringConstants.PORT_TYPE)
-                    .build())
-                .setLgx(new LgxBuilder()
-                    .setLgxDeviceName(TapiStringConstants.LGX_DEVICE_NAME)
-                    .setLgxPortName(TapiStringConstants.LGX_PORT_NAME)
-                    .setLgxPortRack(TapiStringConstants.PORT_RACK_VALUE)
-                    .setLgxPortShelf("00")
-                    .build())
-                .build()))
-            .setRxDirection(Map.of(new RxDirectionKey(Uint8.ZERO), new RxDirectionBuilder()
-                .setPort(new PortBuilder()
-                    .setPortDeviceName(rxPortDeviceName)
-                    .setPortName(rxPortName)
-                    .setPortRack(TapiStringConstants.PORT_RACK_VALUE)
-                    .setPortShelf("00")
-                    .setPortType(TapiStringConstants.PORT_TYPE)
-                    .build())
-                .setLgx(new LgxBuilder()
-                    .setLgxDeviceName(TapiStringConstants.LGX_DEVICE_NAME)
-                    .setLgxPortName(TapiStringConstants.LGX_PORT_NAME)
-                    .setLgxPortRack(TapiStringConstants.PORT_RACK_VALUE)
-                    .setLgxPortShelf("00")
-                    .build())
-                .build()))
+            .setTxDirection(Map.of(
+                new TxDirectionKey(Uint8.ZERO),
+                new TxDirectionBuilder()
+                    .setPort(new PortBuilder()
+                        .setPortDeviceName(txPortDeviceName)
+                        .setPortName(txPortName)
+                        .setPortRack(TapiStringConstants.PORT_RACK_VALUE)
+                        .setPortShelf("00")
+                        .setPortType(TapiStringConstants.PORT_TYPE)
+                        .build())
+                    .setLgx(new LgxBuilder()
+                        .setLgxDeviceName(TapiStringConstants.LGX_DEVICE_NAME)
+                        .setLgxPortName(TapiStringConstants.LGX_PORT_NAME)
+                        .setLgxPortRack(TapiStringConstants.PORT_RACK_VALUE)
+                        .setLgxPortShelf("00")
+                        .build())
+                    .build()))
+            .setRxDirection(Map.of(
+                new RxDirectionKey(Uint8.ZERO),
+                new RxDirectionBuilder()
+                    .setPort(new PortBuilder()
+                        .setPortDeviceName(rxPortDeviceName)
+                        .setPortName(rxPortName)
+                        .setPortRack(TapiStringConstants.PORT_RACK_VALUE)
+                        .setPortShelf("00")
+                        .setPortType(TapiStringConstants.PORT_TYPE)
+                        .build())
+                    .setLgx(new LgxBuilder()
+                        .setLgxDeviceName(TapiStringConstants.LGX_DEVICE_NAME)
+                        .setLgxPortName(TapiStringConstants.LGX_PORT_NAME)
+                        .setLgxPortRack(TapiStringConstants.PORT_RACK_VALUE)
+                        .setLgxPortShelf("00")
+                        .build())
+                    .build()))
             .build();
     }
 
-    public static ServiceZEnd buildServiceZEnd(String nodeid, String clli, String txPortDeviceName,
-                                               String txPortName, String rxPortDeviceName, String rxPortName) {
+    public static ServiceZEnd buildServiceZEnd(
+            String nodeid, String clli, String txPortDeviceName,
+            String txPortName, String rxPortDeviceName, String rxPortName) {
         return  new ServiceZEndBuilder().setClli(clli).setNodeId(new NodeIdType(nodeid))
             .setOpticType(OpticTypes.Gray)
             .setServiceFormat(ServiceFormat.Ethernet)
@@ -249,26 +268,6 @@ public final class ConnectivityUtils {
             .build();
     }
 
-    private static ServiceAEnd getServiceAEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) {
-        if (sepA.getType().equals(ServiceEndpointType.SERVICEAEND)) {
-            return new ServiceAEndBuilder(sepA.getValue()).build();
-        } else if (sepZ.getType().equals(ServiceEndpointType.SERVICEAEND)) {
-            return new ServiceAEndBuilder(sepZ.getValue()).build();
-        } else {
-            return null;
-        }
-    }
-
-    private static ServiceZEnd getServiceZEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) {
-        if (sepA.getType().equals(ServiceEndpointType.SERVICEZEND)) {
-            return new ServiceZEndBuilder(sepA.getValue()).build();
-        } else if (sepZ.getType().equals(ServiceEndpointType.SERVICEZEND)) {
-            return new ServiceZEndBuilder(sepZ.getValue()).build();
-        } else {
-            return null;
-        }
-    }
-
     public void setSipMap(Map<ServiceInterfacePointKey, ServiceInterfacePoint> sips) {
         this.sipMap = sips;
     }
@@ -278,86 +277,48 @@ public final class ConnectivityUtils {
         LOG.info("Service = {}", service);
         Optional<ServicePaths> optServicePaths =
             this.serviceDataStoreOperations.getServicePath(service.getServiceName());
-        if (!optServicePaths.isPresent()) {
+        if (optServicePaths.isEmpty()) {
             LOG.error("No service path found for service {}", service.getServiceName());
             return null;
         }
-        ServicePaths servicePaths = optServicePaths.orElseThrow();
-        PathDescription pathDescription = servicePaths.getPathDescription();
+        PathDescription pathDescription = optServicePaths.orElseThrow().getPathDescription();
         LOG.info("Path description of service = {}", pathDescription);
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEnd serviceAEnd
-            service.getServiceAEnd();
+        org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEnd serviceAEnd =
+            service.getServiceAEnd();
         // Endpoint creation
         EndPoint endPoint1 = mapServiceAEndPoint(serviceAEnd, pathDescription);
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceZEnd serviceZEnd
-            = service.getServiceZEnd();
-        EndPoint endPoint2 = mapServiceZEndPoint(serviceZEnd, pathDescription);
-        Map<EndPointKey, EndPoint> endPointMap = new HashMap<>();
-        endPointMap.put(endPoint1.key(), endPoint1);
-        endPointMap.put(endPoint2.key(), endPoint2);
+        EndPoint endPoint2 = mapServiceZEndPoint(service.getServiceZEnd(), pathDescription);
+        Map<EndPointKey, EndPoint> endPointMap = new HashMap<>(Map.of(
+                endPoint1.key(), endPoint1,
+                endPoint2.key(), endPoint2));
         LOG.info("EndPoints of connectivity services = {}", endPointMap);
         // Services Names
-        Name name = new NameBuilder().setValueName("Connectivity Service Name").setValue(service.getServiceName())
-            .build();
+        Name name =
+            new NameBuilder().setValueName("Connectivity Service Name").setValue(service.getServiceName()).build();
         // Connection creation
         Map<ConnectionKey, Connection> connMap =
-            createConnectionsFromService(serviceAEnd, serviceZEnd, pathDescription);
+            createConnectionsFromService(pathDescription, mapServiceLayerToAend(serviceAEnd));
+        LOG.debug("connectionMap for service {} = {} ", name, connMap);
+        ConnectivityConstraint conConstr =
+            new ConnectivityConstraintBuilder().setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build();
         // TODO: full connectivity service?? With constraints and the rest of fields...
         return new ConnectivityServiceBuilder()
             .setAdministrativeState(AdministrativeState.UNLOCKED)
             .setOperationalState(OperationalState.ENABLED)
             .setLifecycleState(LifecycleState.INSTALLED)
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes(service.getServiceName().getBytes(StandardCharsets.UTF_8))
-                .toString()))
-            .setServiceLayer(mapServiceLayer(serviceAEnd.getServiceFormat(), endPoint1, endPoint2))
-            .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY)
-            .setConnectivityDirection(ForwardingDirection.BIDIRECTIONAL)
+            .setUuid(new Uuid(
+                UUID.nameUUIDFromBytes(service.getServiceName().getBytes(StandardCharsets.UTF_8)).toString()))
+            .setLayerProtocolName(mapServiceLayer(serviceAEnd.getServiceFormat(), endPoint1, endPoint2))
+            .setConnectivityConstraint(conConstr)
+            .setDirection(ForwardingDirection.BIDIRECTIONAL)
             .setName(Map.of(name.key(), name))
             .setConnection(connMap)
             .setEndPoint(endPointMap)
             .build();
     }
 
-    private LayerProtocolName mapServiceLayer(ServiceFormat serviceFormat, EndPoint endPoint1, EndPoint endPoint2) {
-        switch (serviceFormat) {
-            case OC:
-            case OTU:
-                return LayerProtocolName.PHOTONICMEDIA;
-            case ODU:
-                return LayerProtocolName.ODU;
-            case Ethernet:
-                String node1 = endPoint1.getLocalId();
-                String node2 = endPoint2.getLocalId();
-                if (getOpenroadmType(node1).equals(OpenroadmNodeType.TPDR)
-                        && getOpenroadmType(node2).equals(OpenroadmNodeType.TPDR)) {
-                    return LayerProtocolName.ETH;
-                }
-                return LayerProtocolName.DSR;
-            default:
-                LOG.info("Service layer mapping not supported for {}", serviceFormat.getName());
-        }
-        return null;
-    }
-
-    private OpenroadmNodeType getOpenroadmType(String nodeName) {
-        LOG.info("Node name = {}", nodeName);
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",nodeName, TapiStringConstants.DSR))
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node tapiNode
-            = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid);
-        if (tapiNode != null) {
-            return OpenroadmNodeType.forName(tapiNode.getName().get(new NameKey("Node Type"))
-                .getValue());
-        }
-        return null;
-    }
-
-    private Map<ConnectionKey, Connection> createConnectionsFromService(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEnd
-                    serviceAEnd,
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceZEnd
-                    serviceZEnd,
-            PathDescription pathDescription) {
+    public Map<ConnectionKey, Connection> createConnectionsFromService(
+            PathDescription pathDescription, LayerProtocolName lpn) {
         Map<ConnectionKey, Connection> connectionServMap = new HashMap<>();
         // build lists with ROADM nodes, XPDR/MUX/SWITCH nodes, ROADM DEG TTPs, ROADM SRG TTPs, XPDR CLIENT TTPs
         //  and XPDR NETWORK TTPs (if any). From the path description. This will help to build the uuid of the CEPs
@@ -370,7 +331,7 @@ public final class ConnectivityUtils {
         List<String> rdmNodelist = new ArrayList<>();
         List<String> xpdrNodelist = new ArrayList<>();
         for (AToZ elem:pathDescription.getAToZDirection().getAToZ().values().stream()
-            .sorted((Comparator.comparing(atoz -> Integer.valueOf(atoz.getId())))).collect(Collectors.toList())) {
+                .sorted((Comparator.comparing(atoz -> Integer.valueOf(atoz.getId())))).collect(Collectors.toList())) {
             resourceType = elem.getResource().getResource().implementedInterface().getSimpleName();
             switch (resourceType) {
                 case TapiStringConstants.TP:
@@ -444,34 +405,27 @@ public final class ConnectivityUtils {
         }
         // create corresponding CEPs and Connections. Connections should be added to the corresponding context
         // CEPs must be included in the topology context as an augmentation for each ONEP!!
-        ServiceFormat serviceFormat = serviceAEnd.getServiceFormat(); // should be equal to serviceZEnd
         // TODO -> Maybe we dont need to create the connections and ceps if the previous service doesnt exist??
         //  As mentioned above, for 100GbE service creation there are ROADMs in the path description.
         //  What are the configurations needed here? No OTU, ODU... what kind of cross connections is needed?
         //  this needs to be changed
         // TODO: OpenROADM getNodeType from the NamesList to verify what needs to be created
         OpenroadmNodeType openroadmNodeType = getOpenRoadmNodeType(xpdrNodelist);
-        switch (serviceFormat) {
-            case OC:
+        switch (lpn) {
+            case PHOTONICMEDIA:
                 // Identify number of ROADMs
                 // - XC Connection between MC CEPs mapped from MC NEPs (within a roadm)
                 // - XC Connection between OTSiMC CEPs mapped from OTSiMC NEPs (within a roadm)
                 // - Top Connection MC betwwen MC CEPs of different roadms
                 // - Top Connection OTSiMC betwwen OTSiMC CEPs of extreme roadms
-                connectionServMap.putAll(createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist,
-                    edgeRoadm1, edgeRoadm2));
-                break;
-            case OTU:
-                // Identify number of ROADMs between XPDRs and check if OC is created
-                // - XC Connection between MC CEPs mapped from MC NEPs (within a roadm)
-                // - Top Connection MC betwwen MC CEPs of different roadms
-                // - XC Connection between OTSiMC CEPs mapped from OTSiMC NEPs (within a roadm)
-                // - Top Connection OTSiMC betwwen OTSiMC CEPs of different roadms
-                connectionServMap.putAll(createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist,
-                    edgeRoadm1, edgeRoadm2));
-                // - XC Connection OTSi betwwen iOTSi y eOTSi of xpdr
-                // - Top connection OTSi between network ports of xpdrs in the Photonic media layer -> i_OTSi
-                connectionServMap.putAll(createXpdrCepsAndConnectionsPht(xpdrNetworkTplist, xpdrNodelist));
+                connectionServMap.putAll(
+                    createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist, edgeRoadm1, edgeRoadm2));
+                if (!pathDescription.getAToZDirection().getAToZ().values().stream().findFirst().orElseThrow().getId()
+                        .contains("ROADM")) {
+                    // - XC Connection OTSi betwwen iOTSi y eOTSi of xpdr
+                    // - Top connection OTSi between network ports of xpdrs in the Photonic media layer -> i_OTSi
+                    connectionServMap.putAll(createXpdrCepsAndConnectionsPht(xpdrNetworkTplist, xpdrNodelist));
+                }
                 this.topConnRdmRdm = null;
                 break;
             case ODU:
@@ -483,44 +437,238 @@ public final class ConnectivityUtils {
                     this.topConnXpdrXpdrPhtn = null;
                 }
                 break;
-            case Ethernet:
+            case ETH:
                 // Check if OC, OTU and ODU are created
                 if (openroadmNodeType.equals(OpenroadmNodeType.TPDR)) {
                     LOG.info("WDM ETH service");
-                    connectionServMap.putAll(createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist,
-                        edgeRoadm1, edgeRoadm2));
+                    connectionServMap.putAll(
+                        createRoadmCepsAndConnections(
+                            rdmAddDropTplist, rdmDegTplist, rdmNodelist, edgeRoadm1, edgeRoadm2));
                     connectionServMap.putAll(createXpdrCepsAndConnectionsPht(xpdrNetworkTplist, xpdrNodelist));
                     this.topConnRdmRdm = null;
                     xpdrClientTplist = getAssociatedClientsPort(xpdrNetworkTplist);
                     LOG.info("Associated client ports = {}", xpdrClientTplist);
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsEth(xpdrClientTplist, xpdrNodelist,
-                        connectionServMap));
+                    connectionServMap.putAll(
+                        createXpdrCepsAndConnectionsEth(xpdrClientTplist, xpdrNodelist, connectionServMap));
                     this.topConnXpdrXpdrPhtn = null;
                 }
+                break;
+            case DSR:
+                LOG.info("OTN XGE/ODUe service");
+                // - XC connection between iODU and eODU
+                // - Top connection between eODU ports
+                // - Top connection between DSR ports
                 if (openroadmNodeType.equals(OpenroadmNodeType.SWITCH)) {
                     // TODO: We create both ODU and DSR because there is no ODU service creation for the switch
-                    // - XC Connection OTSi betwwen iODU and eODU of xpdr
+                    // - XC Connection OTSi between iODU and eODU of xpdr
                     // - Top connection in the ODU layer, between xpdr eODU ports (?)
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist,
-                        xpdrNodelist));
+                    connectionServMap.putAll(
+                        createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist, xpdrNodelist));
                     this.topConnXpdrXpdrPhtn = null;
                 }
                 if (openroadmNodeType.equals(OpenroadmNodeType.MUXPDR)) {
                     // TODO: OTN service but mux has 3 steps at rendering. Verify that things exist
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist,
-                        xpdrNodelist));
+                    connectionServMap.putAll(
+                        createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist, xpdrNodelist));
                     this.topConnXpdrXpdrOdu = null;
                 }
                 break;
             default:
                 LOG.error("Service type format not supported");
         }
+        LOG.debug("CONNSERVERMAP = {}", connectionServMap);
         return connectionServMap;
     }
 
-    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsEth(List<String> xpdrClientTplist,
-                                                                           List<String> xpdrNodelist,
-                                                                           Map<ConnectionKey, Connection> lowerConn) {
+    public void updateTopologyWithNep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, OwnedNodeEdgePoint onep) {
+        // TODO: verify this is correct. Should we identify the context IID with the context UUID??
+        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
+            .child(Topology.class, new TopologyKey(topoUuid))
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
+                new NodeKey(nodeUuid))
+            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
+            .build();
+        try {
+            Optional<OwnedNodeEdgePoint> optionalOnep =
+                this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, onepIID).get();
+            if (optionalOnep.isPresent()) {
+                LOG.error("ONEP is already present in datastore");
+                return;
+            }
+            // merge in datastore
+            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, onep);
+            this.networkTransactionService.commit().get();
+            LOG.info("NEP {} added successfully.", onep.getName());
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Couldnt put NEP {} in topology, error = ", onep.getName(), e);
+        }
+    }
+
+    public Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.ConnectionKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection> getConnectionFullMap() {
+        return this.connectionFullMap;
+    }
+
+    public ServiceCreateInput createORServiceInput(CreateConnectivityServiceInput input, Uuid serviceUuid) {
+        // TODO: not taking into account all the constraints. Only using EndPoints and Connectivity Constraint.
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .create.connectivity.service.input.EndPointKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .create.connectivity.service.input.EndPoint> endPointMap = input.getEndPoint();
+        ConnectionType connType = null;
+        ServiceFormat serviceFormat = null;
+        String nodeAid = String.join("+",
+            endPointMap.values().stream().findFirst().orElseThrow().getLocalId(),
+            TapiStringConstants.XPDR);
+        String nodeZid = String.join("+",
+            endPointMap.values().stream().skip(1).findFirst().orElseThrow().getLocalId(),
+            TapiStringConstants.XPDR);
+        LOG.info("NodeAid = {}", nodeAid);
+        LOG.info("NodeZid = {}", nodeZid);
+        //switch (constraint.getServiceLayer().getIntValue()) {
+        switch (input.getLayerProtocolName().getIntValue()) {
+            case 0:
+                LOG.info("ODU");
+                connType = ConnectionType.Infrastructure;
+                serviceFormat = ServiceFormat.ODU;
+                break;
+            case 1:
+                LOG.info("ETH, no need to create OTU and ODU");
+                connType = ConnectionType.Service;
+                serviceFormat = ServiceFormat.Ethernet;
+                break;
+            case 2:
+                LOG.info("DSR, need to create OTU and ODU");
+                connType = ConnectionType.Service;
+                serviceFormat = ServiceFormat.Ethernet;
+                break;
+            case 3:
+                LOG.info("PHOTONIC");
+                connType = getConnectionTypePhtnc(endPointMap.values());
+                serviceFormat = getServiceFormatPhtnc(endPointMap.values());
+                LOG.debug("Node a photonic = {}", nodeAid);
+                LOG.debug("Node z photonic = {}", nodeZid);
+                break;
+            default:
+                LOG.info("Service type {} not supported", input.getLayerProtocolName().getName());
+        }
+        // Requested Capacity for connectivity service
+        Uint64 capacity = Uint64.valueOf(Math.abs(
+            input.getConnectivityConstraint().getRequestedCapacity().getTotalSize().getValue().intValue()));
+        // map endpoints into service end points. Map the type of service from TAPI to OR
+        ServiceAEnd serviceAEnd = tapiEndPointToServiceAPoint(
+            endPointMap.values().stream().findFirst().orElseThrow(),
+            serviceFormat, nodeAid, capacity, input.getLayerProtocolName());
+        ServiceZEnd serviceZEnd = tapiEndPointToServiceZPoint(
+            endPointMap.values().stream().skip(1).findFirst().orElseThrow(),
+            serviceFormat, nodeZid, capacity, input.getLayerProtocolName());
+        if (serviceAEnd == null || serviceZEnd == null) {
+            LOG.error("Couldnt map endpoints to service end");
+            return null;
+        }
+        LOG.info("Service a end = {}", serviceAEnd);
+        LOG.info("Service z end = {}", serviceZEnd);
+        return new ServiceCreateInputBuilder()
+            .setServiceAEnd(serviceAEnd)
+            .setServiceZEnd(serviceZEnd)
+            .setConnectionType(connType)
+            .setServiceName(serviceUuid.getValue())
+            .setCommonId("common id")
+            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request-1")
+                .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url")
+                .setRequestSystemId("appname")
+                .build())
+            .setCustomer("customer")
+            .setDueDate(DateAndTime.getDefaultInstance("2018-06-15T00:00:01Z"))
+            .setOperatorContact("pw1234")
+            .build();
+    }
+
+    private static ServiceAEnd getServiceAEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) {
+        if (sepA.getType().equals(ServiceEndpointType.SERVICEAEND)) {
+            return new ServiceAEndBuilder(sepA.getValue()).build();
+        }
+        if (sepZ.getType().equals(ServiceEndpointType.SERVICEAEND)) {
+            return new ServiceAEndBuilder(sepZ.getValue()).build();
+        }
+        return null;
+    }
+
+    private static ServiceZEnd getServiceZEnd(GenericServiceEndpoint sepA, GenericServiceEndpoint sepZ) {
+        if (sepA.getType().equals(ServiceEndpointType.SERVICEZEND)) {
+            return new ServiceZEndBuilder(sepA.getValue()).build();
+        }
+        if (sepZ.getType().equals(ServiceEndpointType.SERVICEZEND)) {
+            return new ServiceZEndBuilder(sepZ.getValue()).build();
+        }
+        return null;
+    }
+
+    private LayerProtocolName mapServiceLayerToAend(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                .service.ServiceAEnd serviceAEnd) {
+        ServiceFormat serviceFormat = serviceAEnd.getServiceFormat();
+        switch (serviceFormat) {
+            case OC:
+            case OTU:
+                return LayerProtocolName.PHOTONICMEDIA;
+            case ODU:
+                return LayerProtocolName.ODU;
+            case Ethernet:
+                if (getOpenroadmType(
+                            serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow()
+                                .getPort().getPortDeviceName())
+                        .equals(OpenroadmNodeType.TPDR)) {
+                    return LayerProtocolName.ETH;
+                }
+                return LayerProtocolName.DSR;
+            default:
+                LOG.info("Service layer mapping not supported for {}", serviceFormat.getName());
+        }
+        return null;
+    }
+
+    private LayerProtocolName mapServiceLayer(ServiceFormat serviceFormat, EndPoint endPoint1, EndPoint endPoint2) {
+        switch (serviceFormat) {
+            case OC:
+            case OTU:
+                return LayerProtocolName.PHOTONICMEDIA;
+            case ODU:
+                return LayerProtocolName.ODU;
+            case Ethernet:
+                String node1 = endPoint1.getLocalId();
+                String node2 = endPoint2.getLocalId();
+                if (getOpenroadmType(node1).equals(OpenroadmNodeType.TPDR)
+                        && getOpenroadmType(node2).equals(OpenroadmNodeType.TPDR)) {
+                    return LayerProtocolName.ETH;
+                }
+                return LayerProtocolName.DSR;
+            default:
+                LOG.info("Service layer mapping not supported for {}", serviceFormat.getName());
+        }
+        return null;
+    }
+    //TODO factorize these two similar methods
+
+    private OpenroadmNodeType getOpenroadmType(String nodeName) {
+        LOG.info("Node name = {}", nodeName);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node tapiNode =
+            this.tapiContext.getTapiNode(
+                this.tapiTopoUuid,
+                new Uuid(UUID.nameUUIDFromBytes(
+                        (String.join("+",nodeName, TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8))
+                    .toString()));
+        return tapiNode == null
+            ? null
+            : OpenroadmNodeType.forName(tapiNode.getName().get(new NameKey("Node Type")).getValue());
+    }
+
+    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsEth(
+            List<String> xpdrClientTplist, List<String> xpdrNodelist, Map<ConnectionKey, Connection> lowerConn) {
         // TODO: do we need to create cross connection between iODU and eODU??
         // add the lower connections of the previous steps for this kind of service
         Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
@@ -528,47 +676,44 @@ public final class ConnectivityUtils {
             LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(lowConn.getConnectionUuid()).build();
             xcMap.put(conn.key(), conn);
         }
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMapDsr = new HashMap<>();
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .cep.list.ConnectionEndPointKey, ConnectionEndPoint> cepMapDsr = new HashMap<>();
         // Create 1 cep per Xpdr in the CLIENT
         // 1 top connection DSR between the CLIENT xpdrs
         for (String xpdr:xpdrNodelist) {
             LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                .orElseThrow();
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR,
-                LayerProtocolName.DSR);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1);
-
+            String spcXpdrClient =
+                xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst().orElseThrow();
+            ConnectionEndPoint netCep1 =
+                createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, LayerProtocolName.DSR);
+            putXpdrCepInTopologyContext(
+                xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, netCep1);
             cepMapDsr.put(netCep1.key(), netCep1);
         }
-        String spcXpdr1 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-
         // DSR top connection between edge xpdr CLIENT DSR
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connectionDsr = createTopConnection(spcXpdr1, spcXpdr2, cepMapDsr, TapiStringConstants.DSR,
-            LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection connectionDsr =
+            createTopConnection(
+                //spcXpdr1,
+                xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(0)))
+                    .findFirst().orElseThrow(),
+                //spcXpdr2,
+                xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(xpdrNodelist.size() - 1)))
+                    .findFirst().orElseThrow(),
+                cepMapDsr, TapiStringConstants.DSR, LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn);
         this.connectionFullMap.put(connectionDsr.key(), connectionDsr);
-
         // DSR top connection that will be added to the service object
         Connection conn1 = new ConnectionBuilder().setConnectionUuid(connectionDsr.getUuid()).build();
-        connServMap.put(conn1.key(), conn1);
-
-        return connServMap;
+        return new HashMap<>(Map.of(conn1.key(), conn1));
     }
 
-    private Map<ConnectionKey,Connection> createXpdrCepsAndConnectionsDsr(List<String> xpdrClientTplist,
-                                                                          List<String> xpdrNetworkTplist,
-                                                                          List<String> xpdrNodelist) {
+    private Map<ConnectionKey,Connection> createXpdrCepsAndConnectionsDsr(
+            List<String> xpdrClientTplist, List<String> xpdrNetworkTplist, List<String> xpdrNodelist) {
         Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMapDsr = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMapOdu = new HashMap<>();
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .cep.list.ConnectionEndPointKey, ConnectionEndPoint> cepMapDsr = new HashMap<>();
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .cep.list.ConnectionEndPointKey, ConnectionEndPoint> cepMapOdu = new HashMap<>();
         // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will
         //  be added to the lower connection of a top connection
         Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
@@ -577,26 +722,26 @@ public final class ConnectivityUtils {
         // 1 top connection between eODU and a top connection DSR between the CLIENT xpdrs
         for (String xpdr:xpdrNodelist) {
             LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                .orElseThrow();
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR,
-                LayerProtocolName.DSR);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1);
-
-            ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU,
-                TapiStringConstants.DSR, LayerProtocolName.ODU);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.DSR,
-                netCep2);
+            String spcXpdrClient =
+                xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst().orElseThrow();
+            ConnectionEndPoint clientCep1 =
+                createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, LayerProtocolName.DSR);
+            putXpdrCepInTopologyContext(
+                xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, clientCep1);
+            ConnectionEndPoint clientCep2 = createCepXpdr(
+                    spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.XPDR, LayerProtocolName.ODU);
+            putXpdrCepInTopologyContext(
+                xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.XPDR, clientCep2);
+            cepMapDsr.put(clientCep1.key(), clientCep1);
+            cepMapOdu.put(clientCep2.key(), clientCep2);
 
             String spcXpdrNetwork = getAssociatedNetworkPort(spcXpdrClient, xpdrNetworkTplist);
-            ConnectionEndPoint netCep3 = getAssociatediODUCep(spcXpdrNetwork);
-
-            cepMapDsr.put(netCep1.key(), netCep1);
-            cepMapOdu.put(netCep2.key(), netCep2);
             // Create x connection between I_ODU and E_ODU within xpdr
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-                connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrClient, spcXpdrNetwork,
-                TapiStringConstants.ODU, LayerProtocolName.ODU);
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .connectivity.context.Connection connection =
+                createXCBetweenCeps(
+                    clientCep2, getAssociatediODUCep(spcXpdrNetwork),
+                     spcXpdrClient, spcXpdrNetwork, TapiStringConstants.ODU, LayerProtocolName.ODU);
             this.connectionFullMap.put(connection.key(), connection);
 
             // Create X connection that will be added to the service object
@@ -605,14 +750,18 @@ public final class ConnectivityUtils {
         }
 
         // DSR top connection between edge xpdr CLIENT DSR
-        String spcXpdr1 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connectionOdu = createTopConnection(spcXpdr1, spcXpdr2, cepMapOdu, TapiStringConstants.E_ODU,
-            LayerProtocolName.ODU, xcMap, this.topConnXpdrXpdrOdu);
+        String spcXpdr1 =
+            xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(0)))
+                .findFirst().orElseThrow();
+        String spcXpdr2 =
+            xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(xpdrNodelist.size() - 1)))
+                .findFirst().orElseThrow();
+
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection connectionOdu =
+            createTopConnection(
+                spcXpdr1, spcXpdr2, cepMapOdu, TapiStringConstants.E_ODU,
+                LayerProtocolName.ODU, xcMap, this.topConnXpdrXpdrOdu);
         this.connectionFullMap.put(connectionOdu.key(), connectionOdu);
 
         // ODU top connection that will be added to the service object
@@ -621,136 +770,123 @@ public final class ConnectivityUtils {
         LowerConnection lowerConn = new LowerConnectionBuilder().setConnectionUuid(connectionOdu.getUuid()).build();
         xcMap.put(lowerConn.key(), lowerConn);
 
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connectionDsr = createTopConnection(spcXpdr1, spcXpdr2, cepMapDsr, TapiStringConstants.DSR,
-            LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection connectionDsr =
+            createTopConnection(
+                spcXpdr1, spcXpdr2, cepMapDsr, TapiStringConstants.DSR,
+                LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn);
         this.connectionFullMap.put(connectionDsr.key(), connectionDsr);
-
         // DSR top connection that will be added to the service object
         Connection conn1 = new ConnectionBuilder().setConnectionUuid(connectionDsr.getUuid()).build();
         connServMap.put(conn1.key(), conn1);
-
         return connServMap;
     }
 
-    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsOdu(List<String> xpdrNetworkTplist,
-                                                                           List<String> xpdrNodelist) {
+    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsOdu(
+            List<String> xpdrNetworkTplist, List<String> xpdrNodelist) {
         Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMap = new HashMap<>();
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .cep.list.ConnectionEndPointKey, ConnectionEndPoint> cepMap = new HashMap<>();
         // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will
         //  be added to the lower connection of a top connection
-        Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
-
         // Create 1 cep per Xpdr in the I_ODU and a top
         // connection iODU between the xpdrs
         for (String xpdr:xpdrNodelist) {
             LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                .orElseThrow();
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_ODU,
-                TapiStringConstants.DSR, LayerProtocolName.ODU);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.DSR,
-                netCep1);
-
+            String spcXpdrNetwork =
+                xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst().orElseThrow();
+            ConnectionEndPoint netCep1 =
+                createCepXpdr(
+                    spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.XPDR, LayerProtocolName.ODU);
+            putXpdrCepInTopologyContext(
+                xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.XPDR, netCep1);
             cepMap.put(netCep1.key(), netCep1);
         }
-
         // ODU top connection between edge xpdr i_ODU
-        String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_ODU,
-            LayerProtocolName.ODU, xcMap, this.topConnXpdrXpdrPhtn);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection connection =
+            createTopConnection(
+                //spcXpdr1,
+                xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(0)))
+                    .findFirst().orElseThrow(),
+                //spcXpdr2,
+                xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(xpdrNodelist.size() - 1)))
+                    .findFirst().orElseThrow(),
+                cepMap, TapiStringConstants.I_ODU,
+                LayerProtocolName.ODU, new HashMap<>(), this.topConnXpdrXpdrPhtn);
         this.connectionFullMap.put(connection.key(), connection);
-
         // ODU top connection that will be added to the service object
         Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
         connServMap.put(conn.key(), conn);
         this.topConnXpdrXpdrOdu = conn;
-
         return connServMap;
     }
 
-    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsPht(List<String> xpdrNetworkTplist,
-                                                                           List<String> xpdrNodelist) {
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMap = new HashMap<>();
+    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsPht(
+                List<String> xpdrNetworkTplist, List<String> xpdrNodelist) {
         // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will
         //  be added to the lower connection of a top connection
-        Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
-
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPointKey,
+            ConnectionEndPoint> cepMap = new HashMap<>();
         // create ceps and x connections within xpdr
         for (String xpdr:xpdrNodelist) {
             LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                .orElseThrow();
+            String spcXpdrNetwork =
+                xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst().orElseThrow();
             // There should be 1 network tp per xpdr
-            // TODO photonic media model should be updated to have the corresponding CEPs. I will just create
-            //  3 different MC CEPs giving different IDs to show that they are different
-            // Create 3 CEPs for each xpdr otsi node and the corresponding cross connection matchin the NEPs
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA,
-                TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.OTSI,
-                netCep1);
-            ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.E_OTSI,
-                TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.E_OTSI, TapiStringConstants.OTSI,
-                netCep2);
-            ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI,
-                TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI,
-                netCep3);
+            //   Just create 2 different CEPs (1 OTS + 1 OTSI_MC)
+            ConnectionEndPoint netCep1 = createCepXpdr(
+                    spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS,
+                    TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA);
+            putXpdrCepInTopologyContext(
+                xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.XPDR, netCep1);
+            ConnectionEndPoint netCep2 = createCepXpdr(
+                    spcXpdrNetwork, TapiStringConstants.OTSI_MC,
+                    TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA);
+            putXpdrCepInTopologyContext(
+                xpdr, spcXpdrNetwork, TapiStringConstants.OTSI_MC, TapiStringConstants.XPDR, netCep2);
+//            ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI,
+//                TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA);
+//            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI,
+//                netCep3);
             cepMap.put(netCep1.key(), netCep1);
             cepMap.put(netCep2.key(), netCep2);
-            cepMap.put(netCep3.key(), netCep3);
-
-            // Create x connection between I_OTSi and E_OTSi within xpdr
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-                connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrNetwork, spcXpdrNetwork,
-                TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            this.connectionFullMap.put(connection.key(), connection);
+//            cepMap.put(netCep3.key(), netCep3);
 
-            // Create X connection that will be added to the service object
-            LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-            xcMap.put(conn.key(), conn);
         }
-        // OTSi top connection between edge I_OTSI Xpdr
-        String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_OTSI,
-            LayerProtocolName.PHOTONICMEDIA, xcMap, this.topConnRdmRdm);
+        // OTSi top connection between edge OTSI_MC Xpdr
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection connection =
+            createTopConnection(
+                //spcXpdr1,
+                xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(0)))
+                    .findFirst().orElseThrow(),
+                //spcXpdr2,
+                xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist.get(xpdrNodelist.size() - 1)))
+                    .findFirst().orElseThrow(),
+                cepMap, TapiStringConstants.OTSI_MC,
+                LayerProtocolName.PHOTONICMEDIA, new HashMap<>(), this.topConnRdmRdm);
         this.connectionFullMap.put(connection.key(), connection);
-
         // OTSi top connection that will be added to the service object
         Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-        connServMap.put(conn.key(), conn);
         this.topConnXpdrXpdrPhtn = conn;
-
-        return connServMap;
+        return new HashMap<>(Map.of(conn.key(), conn));
     }
 
-    private Map<ConnectionKey, Connection> createRoadmCepsAndConnections(List<String> rdmAddDropTplist,
-                                                                         List<String> rdmDegTplist,
-                                                                         List<String> rdmNodelist,
-                                                                         String edgeRoadm1, String edgeRoadm2) {
+    private Map<ConnectionKey, Connection> createRoadmCepsAndConnections(
+            List<String> rdmAddDropTplist, List<String> rdmDegTplist, List<String> rdmNodelist,
+            String edgeRoadm1, String edgeRoadm2) {
         // TODO: will need to check if things exist already or not
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMap = new HashMap<>();
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .cep.list.ConnectionEndPointKey, ConnectionEndPoint> cepMap = new HashMap<>();
         // create ceps and x connections within roadm
         Map<LowerConnectionKey, LowerConnection> xcLowerMap = new HashMap<>();
         for (String roadm : rdmNodelist) {
             LOG.info("Creating ceps and xc for roadm {}", roadm);
             if (roadm.equals(edgeRoadm1) || roadm.equals(edgeRoadm2)) {
                 LOG.info("EDGE ROADM, cross connections needed between SRG and DEG");
-                String spcRdmAD = rdmAddDropTplist.stream().filter(adp -> adp.contains(roadm)).findFirst()
-                    .orElseThrow();
+                String spcRdmAD = rdmAddDropTplist.stream().filter(adp -> adp.contains(roadm))
+                    .findFirst().orElseThrow();
                 LOG.info("AD port of ROADm {} = {}", roadm, spcRdmAD);
                 // There should be only 1 AD and 1 DEG per roadm
                 // TODO photonic media model should be updated to have the corresponding CEPs. I will just create
@@ -758,8 +894,8 @@ public final class ConnectivityUtils {
                 // Create 3 CEPs for each AD and DEG and the corresponding cross connections, matching the NEPs
                 // created in the topology creation
                 // add CEPs to the topology to the corresponding ONEP
-                ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA, adCep1);
+                ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS);
+                putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS, adCep1);
                 ConnectionEndPoint adCep2 = createCepRoadm(spcRdmAD, TapiStringConstants.MC);
                 putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.MC, adCep2);
                 ConnectionEndPoint adCep3 = createCepRoadm(spcRdmAD, TapiStringConstants.OTSI_MC);
@@ -771,28 +907,33 @@ public final class ConnectivityUtils {
                 String spcRdmDEG = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow();
                 LOG.info("Degree port of ROADm {} = {}", roadm, spcRdmDEG);
 
-                ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA, degCep1);
+                ConnectionEndPoint degCep0 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS);
+                putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS, degCep0);
+                ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS);
+                putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS, degCep1);
                 ConnectionEndPoint degCep2 = createCepRoadm(spcRdmDEG, TapiStringConstants.MC);
                 putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.MC, degCep2);
                 ConnectionEndPoint degCep3 = createCepRoadm(spcRdmDEG, TapiStringConstants.OTSI_MC);
                 putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.OTSI_MC, degCep3);
+                cepMap.put(degCep0.key(), degCep0);
                 cepMap.put(degCep1.key(), degCep1);
                 cepMap.put(degCep2.key(), degCep2);
                 cepMap.put(degCep3.key(), degCep3);
 
                 LOG.info("Going to create cross connections for ROADM {}", roadm);
                 // Create X connections between MC and OTSi_MC for full map
-                org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection1
-                    = createXCBetweenCeps(adCep2, degCep2, spcRdmAD, spcRdmDEG, TapiStringConstants.MC,
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .connectivity.context.Connection connection1 =
+                    createXCBetweenCeps(
+                        adCep2, degCep2, spcRdmAD, spcRdmDEG, TapiStringConstants.MC,
                         LayerProtocolName.PHOTONICMEDIA);
-                LOG.info("Cross connection 1 created = {}", connection1.toString());
-                org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection2
-                    = createXCBetweenCeps(adCep3, degCep3, spcRdmAD, spcRdmDEG, TapiStringConstants.OTSI_MC,
-                    LayerProtocolName.PHOTONICMEDIA);
-                LOG.info("Cross connection 2 created = {}", connection2.toString());
+                LOG.info("Cross connection 1 created = {}", connection1);
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .connectivity.context.Connection connection2 =
+                    createXCBetweenCeps(
+                        adCep3, degCep3, spcRdmAD, spcRdmDEG, TapiStringConstants.OTSI_MC,
+                        LayerProtocolName.PHOTONICMEDIA);
+                LOG.info("Cross connection 2 created = {}", connection2);
                 this.connectionFullMap.put(connection1.key(), connection1);
                 this.connectionFullMap.put(connection2.key(), connection2);
 
@@ -807,50 +948,57 @@ public final class ConnectivityUtils {
                 String spcRdmDEG1 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow();
                 LOG.info("Degree 1 port of ROADm {} = {}", roadm, spcRdmDEG1);
 
-                ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA, deg1Cep1);
+                ConnectionEndPoint deg1Cep0 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS);
+                putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS, deg1Cep0);
+                ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS);
+                putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS, deg1Cep1);
                 ConnectionEndPoint deg1Cep2 = createCepRoadm(spcRdmDEG1, TapiStringConstants.MC);
                 putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.MC, deg1Cep2);
                 ConnectionEndPoint deg1Cep3 = createCepRoadm(spcRdmDEG1, TapiStringConstants.OTSI_MC);
                 putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.OTSI_MC, deg1Cep3);
+                cepMap.put(deg1Cep0.key(), deg1Cep0);
                 cepMap.put(deg1Cep1.key(), deg1Cep1);
                 cepMap.put(deg1Cep2.key(), deg1Cep2);
                 cepMap.put(deg1Cep3.key(), deg1Cep3);
 
-                String spcRdmDEG2 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).skip(1).findFirst()
-                    .orElseThrow();
+                String spcRdmDEG2 =
+                    rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).skip(1).findFirst().orElseThrow();
                 LOG.info("Degree 2 port of ROADm {} = {}", roadm, spcRdmDEG2);
 
-                ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA, deg2Cep1);
+                ConnectionEndPoint deg2Cep0 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS);
+                putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS, deg2Cep0);
+                ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS);
+                putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS, deg2Cep1);
                 ConnectionEndPoint deg2Cep2 = createCepRoadm(spcRdmDEG2, TapiStringConstants.MC);
                 putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.MC, deg2Cep2);
                 ConnectionEndPoint deg2Cep3 = createCepRoadm(spcRdmDEG2, TapiStringConstants.OTSI_MC);
                 putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.OTSI_MC, deg2Cep3);
+                cepMap.put(deg2Cep0.key(), deg2Cep0);
                 cepMap.put(deg2Cep1.key(), deg2Cep1);
                 cepMap.put(deg2Cep2.key(), deg2Cep2);
                 cepMap.put(deg2Cep3.key(), deg2Cep3);
 
                 LOG.info("Going to create cross connections for ROADM {}", roadm);
                 // Create X connections between MC and OTSi_MC for full map
-                org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection1
-                    = createXCBetweenCeps(deg1Cep2, deg2Cep2, spcRdmDEG1, spcRdmDEG2,
-                    TapiStringConstants.MC, LayerProtocolName.PHOTONICMEDIA);
-                LOG.info("Cross connection 1 created = {}", connection1.toString());
-                org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection2
-                    = createXCBetweenCeps(deg1Cep3, deg2Cep3, spcRdmDEG1, spcRdmDEG2,
-                    TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA);
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .connectivity.context.Connection connection1 =
+                    createXCBetweenCeps(
+                        deg1Cep2, deg2Cep2, spcRdmDEG1, spcRdmDEG2,
+                        TapiStringConstants.MC, LayerProtocolName.PHOTONICMEDIA);
+                LOG.info("Cross connection 1 created = {}", connection1);
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .connectivity.context.Connection connection2 =
+                    createXCBetweenCeps(
+                        deg1Cep3, deg2Cep3, spcRdmDEG1, spcRdmDEG2,
+                        TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA);
                 LOG.info("Cross connection 2 created = {}", connection2.toString());
                 this.connectionFullMap.put(connection1.key(), connection1);
                 this.connectionFullMap.put(connection2.key(), connection2);
 
                 // Create X connections that will be added to the service object
                 LowerConnection conn1 = new LowerConnectionBuilder().setConnectionUuid(connection1.getUuid()).build();
-                LowerConnection conn2 = new LowerConnectionBuilder().setConnectionUuid(connection2.getUuid()).build();
-
                 xcLowerMap.put(conn1.key(), conn1);
+                LowerConnection conn2 = new LowerConnectionBuilder().setConnectionUuid(connection2.getUuid()).build();
                 xcLowerMap.put(conn2.key(), conn2);
             }
         }
@@ -859,100 +1007,94 @@ public final class ConnectivityUtils {
         String spcRdmAD2 = rdmAddDropTplist.stream().filter(adp -> adp.contains(edgeRoadm2)).findFirst().orElseThrow();
         // MC top connection between edge roadms
         LOG.info("Going to created top connection between MC");
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection = createTopConnection(spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.MC,
-            LayerProtocolName.PHOTONICMEDIA, xcLowerMap, null);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection connection =
+            createTopConnection(
+                spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.MC,
+                LayerProtocolName.PHOTONICMEDIA, xcLowerMap, null);
         this.connectionFullMap.put(connection.key(), connection);
-        LOG.info("Top connection created = {}", connection.toString());
+        LOG.info("Top connection created = {}", connection);
 
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        // OTSiMC top connections that will be added to the service object
-        Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-        connServMap.put(conn.key(), conn);
         LowerConnection conn1 = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-        Map<LowerConnectionKey, LowerConnection> topLowerMap = new HashMap<>();
-        topLowerMap.put(conn1.key(), conn1);
-
         // OTSiMC top connection between edge roadms
         LOG.info("Going to created top connection between OTSiMC");
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection1 = createTopConnection(spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.OTSI_MC,
-            LayerProtocolName.PHOTONICMEDIA, topLowerMap, null);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection connection1 =
+            createTopConnection(
+                spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.OTSI_MC,
+                LayerProtocolName.PHOTONICMEDIA,
+                //topLowerMap,
+                new HashMap<>(Map.of(conn1.key(), conn1)),
+                null);
         this.connectionFullMap.put(connection1.key(), connection1);
-        LOG.info("Top connection created = {}", connection1.toString());
+        LOG.info("Top connection created = {}", connection1);
 
         // OTSiMC top connections that will be added to the service object
+        Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
         Connection conn2 = new ConnectionBuilder().setConnectionUuid(connection1.getUuid()).build();
-        connServMap.put(conn2.key(), conn2);
         this.topConnRdmRdm = conn2;
-        return connServMap;
+        return new HashMap<>(Map.of(conn.key(), conn, conn2.key(), conn2));
     }
 
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            createTopConnection(String tp1, String tp2,
-                        Map<org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-                            ConnectionEndPoint> cepMap, String qual, LayerProtocolName topPortocol,
-                        Map<LowerConnectionKey, LowerConnection> xcMap, Connection additionalLowerConn) {
+    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection createTopConnection(
+            String tp1,
+            String tp2,
+            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .cep.list.ConnectionEndPointKey, ConnectionEndPoint> cepMap,
+            String qual, LayerProtocolName topPortocol,
+            Map<LowerConnectionKey, LowerConnection> xcMap,
+            Connection additionalLowerConn) {
         // find cep for each AD MC of roadm 1 and 2
-        LOG.info("Top connection name = {}", String.join("+", "TOP", tp1, tp2, qual));
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ConnectionEndPoint adCep1 =
-            cepMap.get(new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey(
-                new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", tp1.split("\\+")[0],
-                        qual, tp1.split("\\+")[1])).getBytes(StandardCharsets.UTF_8))
-                    .toString())));
+        String topConnName = String.join("+", "TOP", tp1, tp2, qual);
+        LOG.info("Top connection name = {}", topConnName);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ConnectionEndPoint adCep1 =
+            cepMap.get(
+                new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .cep.list.ConnectionEndPointKey(new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "CEP", tp1.split("\\+")[0], qual, tp1.split("\\+")[1]))
+                        .getBytes(StandardCharsets.UTF_8)).toString())));
         LOG.info("ADCEP1 = {}", adCep1);
-        org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cep1 =
-            new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(adCep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(adCep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(adCep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connection.ConnectionEndPoint cep1 =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .connection.ConnectionEndPointBuilder()
+                .setNodeEdgePointUuid(adCep1.getParentNodeEdgePoint().getNodeEdgePointUuid())
+                .setNodeUuid(adCep1.getParentNodeEdgePoint().getNodeUuid())
+                .setTopologyUuid(adCep1.getParentNodeEdgePoint().getTopologyUuid())
                 .setConnectionEndPointUuid(adCep1.getUuid())
                 .build();
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ConnectionEndPoint adCep2 =
-            cepMap.get(new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey(
-                new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", tp2.split("\\+")[0],
-                        qual, tp2.split("\\+")[1])).getBytes(StandardCharsets.UTF_8))
-                    .toString())));
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ConnectionEndPoint adCep2 =
+            cepMap.get(
+                new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .cep.list.ConnectionEndPointKey(
+                    new Uuid(UUID.nameUUIDFromBytes(
+                        (String.join("+", "CEP", tp2.split("\\+")[0], qual, tp2.split("\\+")[1]))
+                            .getBytes(StandardCharsets.UTF_8)).toString())));
         LOG.info("ADCEP2 = {}", adCep2);
-        org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cep2 =
-            new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(adCep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(adCep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(adCep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connection.ConnectionEndPoint cep2 =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .connection.ConnectionEndPointBuilder()
+                .setNodeEdgePointUuid(adCep2.getParentNodeEdgePoint().getNodeEdgePointUuid())
+                .setNodeUuid(adCep2.getParentNodeEdgePoint().getNodeUuid())
+                .setTopologyUuid(adCep2.getParentNodeEdgePoint().getTopologyUuid())
                 .setConnectionEndPointUuid(adCep1.getUuid())
                 .build();
-        Map<ConnectionEndPointKey, org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint> ceps = new HashMap<>();
-        ceps.put(cep1.key(), cep1);
-        ceps.put(cep2.key(), cep2);
         Name connName = new NameBuilder()
             .setValueName("Connection name")
-            .setValue(String.join("+", "TOP", tp1, tp2, qual))
+            .setValue(topConnName)
             .build();
         // TODO: lower connection, supported link.......
         if (additionalLowerConn != null) {
             xcMap.putIfAbsent(new LowerConnectionKey(additionalLowerConn.getConnectionUuid()),
                 new LowerConnectionBuilder().setConnectionUuid(additionalLowerConn.getConnectionUuid()).build());
         }
-        return new org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "TOP", tp1, tp2, qual))
-                .getBytes(StandardCharsets.UTF_8)).toString()))
+        return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.ConnectionBuilder()
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes(topConnName.getBytes(StandardCharsets.UTF_8)).toString()))
             .setName(Map.of(connName.key(), connName))
-            .setConnectionEndPoint(ceps)
+            .setConnectionEndPoint(new HashMap<>(Map.of(cep1.key(), cep1, cep2.key(), cep2)))
             .setOperationalState(OperationalState.ENABLED)
             .setLayerProtocolName(topPortocol)
             .setLifecycleState(LifecycleState.INSTALLED)
@@ -961,52 +1103,43 @@ public final class ConnectivityUtils {
             .build();
     }
 
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            createXCBetweenCeps(ConnectionEndPoint cep1, ConnectionEndPoint cep2, String tp1, String tp2, String qual,
-                        LayerProtocolName xcProtocol) {
+    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.Connection createXCBetweenCeps(
+            ConnectionEndPoint cep1, ConnectionEndPoint cep2,
+            String tp1, String tp2, String qual, LayerProtocolName xcProtocol) {
+        String crossConnName = String.join("+", "XC", tp1, tp2, qual);
         LOG.info("Creation cross connection between: {} and {}", tp1, tp2);
-        LOG.info("Cross connection name = {}", String.join("+", "XC", tp1, tp2, qual));
-        LOG.info("CEP1 = {}", cep1.getClientNodeEdgePoint());
-        LOG.info("CEP2 = {}", cep2.getClientNodeEdgePoint());
-        org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cepServ1 =
-            new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(cep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(cep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(cep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
+        LOG.info("Cross connection name = {}", crossConnName);
+        LOG.debug("Parent NEP of CEP1 = {}", cep1.getParentNodeEdgePoint());
+        LOG.debug("Parent NEP CEP2 = {}", cep2.getParentNodeEdgePoint());
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connection.ConnectionEndPoint cepServ1 =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .connection.ConnectionEndPointBuilder()
+                .setNodeEdgePointUuid(cep1.getParentNodeEdgePoint().getNodeEdgePointUuid())
+                .setNodeUuid(cep1.getParentNodeEdgePoint().getNodeUuid())
+                .setTopologyUuid(cep1.getParentNodeEdgePoint().getTopologyUuid())
                 .setConnectionEndPointUuid(cep1.getUuid())
                 .build();
-        org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cepServ2 =
-            new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(cep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(cep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(cep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connection.ConnectionEndPoint cepServ2 =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .connection.ConnectionEndPointBuilder()
+                .setNodeEdgePointUuid(cep2.getParentNodeEdgePoint().getNodeEdgePointUuid())
+                .setNodeUuid(cep2.getParentNodeEdgePoint().getNodeUuid())
+                .setTopologyUuid(cep2.getParentNodeEdgePoint().getTopologyUuid())
                 .setConnectionEndPointUuid(cep2.getUuid())
                 .build();
-        Map<ConnectionEndPointKey, org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint> ceps = new HashMap<>();
-        ceps.put(cepServ1.key(), cepServ1);
-        ceps.put(cepServ2.key(), cepServ2);
         Name connName = new NameBuilder()
             .setValueName("Connection name")
-            .setValue(String.join("+", "XC", tp1, tp2, qual))
+            .setValue(crossConnName)
             .build();
         // TODO: lower connection, supported link.......
-        return new org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "XC", tp1, tp2, qual))
-                .getBytes(StandardCharsets.UTF_8)).toString()))
+        return new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .connectivity.context.ConnectionBuilder()
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes(crossConnName.getBytes(StandardCharsets.UTF_8)).toString()))
             .setName(Map.of(connName.key(), connName))
-            .setConnectionEndPoint(ceps)
+            .setConnectionEndPoint(new HashMap<>(Map.of(cepServ1.key(), cepServ1, cepServ2.key(), cepServ2)))
             .setOperationalState(OperationalState.ENABLED)
             .setLayerProtocolName(xcProtocol)
             .setLifecycleState(LifecycleState.INSTALLED)
@@ -1015,74 +1148,143 @@ public final class ConnectivityUtils {
     }
 
     private ConnectionEndPoint createCepRoadm(String id, String qualifier) {
-        LOG.info("NEP = {}", String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1]));
+        String nepId = String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1]);
+        String nodeNepId = String.join("+",id.split("\\+")[0], TapiStringConstants.PHTNC_MEDIA);
+        LOG.info("NEP = {}", nepId);
         Name cepName = new NameBuilder()
             .setValueName("ConnectionEndPoint name")
-            .setValue(String.join("+", id.split("\\+")[0], qualifier,
-                id.split("\\+")[1]))
+            .setValue(nepId)
             .build();
+        ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder()
+            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    nepId.getBytes(StandardCharsets.UTF_8))
+                .toString()))
+            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    nodeNepId.getBytes(StandardCharsets.UTF_8))
+                .toString()))
+            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.T0_FULL_MULTILAYER.getBytes(StandardCharsets.UTF_8))
+                .toString()))
+            .build();
+        String clientQualifier = "";
+        switch (qualifier) {
+            case TapiStringConstants.PHTNC_MEDIA_OTS:
+                clientQualifier = TapiStringConstants.PHTNC_MEDIA_OMS;
+                break;
+            case TapiStringConstants.PHTNC_MEDIA_OMS:
+                clientQualifier = TapiStringConstants.MC;
+                OwnedNodeEdgePoint onepMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1],
+                    false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier);
+                putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1], TapiStringConstants.MC, onepMC);
+                break;
+            case TapiStringConstants.MC:
+                clientQualifier = TapiStringConstants.OTSI_MC;
+                OwnedNodeEdgePoint onepOTSiMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1],
+                    false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier);
+                putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1],
+                    TapiStringConstants.OTSI_MC, onepOTSiMC);
+                break;
+            default:
+                LOG.debug("not currently handling client NEP for OTSiMC CEP {}", nepId);
+                break;
+        }
         ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder()
-            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8))
+            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", id.split("\\+")[0], clientQualifier, id.split("\\+")[1]))
+                        .getBytes(StandardCharsets.UTF_8))
                 .toString()))
-            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0],
-                    qualifier)).getBytes(StandardCharsets.UTF_8))
+            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    nodeNepId.getBytes(StandardCharsets.UTF_8))
+                .toString()))
+            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.T0_FULL_MULTILAYER.getBytes(StandardCharsets.UTF_8))
                 .toString()))
-            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-                .getBytes(StandardCharsets.UTF_8)).toString()))
             .build();
         // TODO: add augmentation with the corresponding cep-spec (i.e. MC, OTSiMC...)
         // TODO: add parent ONEP??
         ConnectionEndPointBuilder cepBldr = new ConnectionEndPointBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8))
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1]))
+                        .getBytes(StandardCharsets.UTF_8))
                 .toString()))
-            .setClientNodeEdgePoint(Map.of(cnep.key(), cnep))
+            .setParentNodeEdgePoint(pnep)
             .setName(Map.of(cepName.key(), cepName))
             .setConnectionPortRole(PortRole.SYMMETRIC)
-            .setConnectionPortDirection(PortDirection.BIDIRECTIONAL)
+            .setDirection(Direction.BIDIRECTIONAL)
             .setOperationalState(OperationalState.ENABLED)
             .setLifecycleState(LifecycleState.INSTALLED)
             .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA);
-        return cepBldr.build();
+        return TapiStringConstants.OTSI_MC.equals(qualifier)
+            ? cepBldr.build()
+            : cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)).build();
     }
 
-    private ConnectionEndPoint createCepXpdr(String id, String qualifier, String nodeLayer,
-                                             LayerProtocolName cepProtocol) {
+    private ConnectionEndPoint createCepXpdr(
+            String id, String qualifier, String nodeLayer, LayerProtocolName cepProtocol) {
+        String nepId = String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1]);
+        String nepNodeId = String.join("+",id.split("\\+")[0], TapiStringConstants.XPDR);
         Name cepName = new NameBuilder()
             .setValueName("ConnectionEndPoint name")
-            .setValue(String.join("+", id.split("\\+")[0], qualifier,
-                id.split("\\+")[1]))
+            .setValue(nepId)
+            .build();
+        ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder()
+            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    nepId.getBytes(StandardCharsets.UTF_8)).toString()))
+            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    nepNodeId.getBytes(StandardCharsets.UTF_8)).toString()))
+            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(
+                TapiStringConstants.T0_FULL_MULTILAYER
+                    .getBytes(StandardCharsets.UTF_8)).toString()))
             .build();
+        String clientQualifier = "";
+        String clientNodeLayer = TapiStringConstants.PHTNC_MEDIA;
+        switch (qualifier) {
+            case TapiStringConstants.PHTNC_MEDIA_OTS:
+                clientQualifier = TapiStringConstants.OTSI_MC;
+                break;
+            case TapiStringConstants.OTSI_MC:
+                clientQualifier = TapiStringConstants.E_ODU;
+                clientNodeLayer = TapiStringConstants.ODU;
+                break;
+            case TapiStringConstants.E_ODU:
+                clientQualifier = TapiStringConstants.DSR;
+                clientNodeLayer = TapiStringConstants.DSR;
+                break;
+            default :
+                LOG.debug("no client CEP for DSR NEP {}", nepId);
+                break;
+        }
         ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder()
-            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8))
-                .toString()))
-            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0],
-                    nodeLayer)).getBytes(StandardCharsets.UTF_8))
-                .toString()))
-            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-                .getBytes(StandardCharsets.UTF_8)).toString()))
+            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
+                (String.join("+", id.split("\\+")[0], clientQualifier, id.split("\\+")[1]))
+                    .getBytes(StandardCharsets.UTF_8)).toString()))
+            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes(
+                    nepNodeId.getBytes(StandardCharsets.UTF_8)).toString()))
+            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(
+                TapiStringConstants.T0_FULL_MULTILAYER
+                    .getBytes(StandardCharsets.UTF_8)).toString()))
             .build();
         // TODO: add augmentation with the corresponding cep-spec (i.e. MC, OTSiMC...)
         // TODO: add parent ONEP??
         ConnectionEndPointBuilder cepBldr = new ConnectionEndPointBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8))
-                .toString()))
-            .setClientNodeEdgePoint(Map.of(cnep.key(), cnep))
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes(
+                (String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1]))
+                    .getBytes(StandardCharsets.UTF_8)).toString()))
+            .setParentNodeEdgePoint(pnep)
             .setName(Map.of(cepName.key(), cepName))
             .setConnectionPortRole(PortRole.SYMMETRIC)
-            .setConnectionPortDirection(PortDirection.BIDIRECTIONAL)
+            .setDirection(Direction.BIDIRECTIONAL)
             .setOperationalState(OperationalState.ENABLED)
             .setLifecycleState(LifecycleState.INSTALLED)
             .setLayerProtocolName(cepProtocol);
-        return cepBldr.build();
+        return TapiStringConstants.DSR.equals(qualifier)
+            ? cepBldr.build()
+            : cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)).build();
     }
 
     private EndPoint mapServiceZEndPoint(
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceZEnd
-            serviceZEnd, PathDescription pathDescription) {
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                .service.ServiceZEnd serviceZEnd, PathDescription pathDescription) {
         EndPointBuilder endPointBuilder = new EndPointBuilder();
         // 1. Service Format: ODU, OTU, ETH
         ServiceFormat serviceFormat = serviceZEnd.getServiceFormat();
@@ -1106,13 +1308,11 @@ public final class ConnectivityUtils {
             default:
                 LOG.error("Service Format not supported");
         }
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name name =
-            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder()
+        var portZEnd = serviceZEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort();
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name name =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameBuilder()
                 .setValueName("OpenROADM info")
-                .setValue(String.join("-", serviceZEnd.getClli(),
-                    serviceZEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort()
-                        .getPortDeviceName(),
-                    serviceZEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort().getPortName()))
+                .setValue(String.join("-", serviceZEnd.getClli(), portZEnd.getPortDeviceName(), portZEnd.getPortName()))
                 .build();
         return endPointBuilder
             .setServiceInterfacePoint(new ServiceInterfacePointBuilder()
@@ -1120,26 +1320,25 @@ public final class ConnectivityUtils {
                 .build())
             .setName(Map.of(name.key(), name))
             .setAdministrativeState(AdministrativeState.UNLOCKED)
-            .setDirection(PortDirection.BIDIRECTIONAL)
+            .setDirection(Direction.BIDIRECTIONAL)
             .setLifecycleState(LifecycleState.INSTALLED)
             .setOperationalState(OperationalState.ENABLED)
             .setLayerProtocolName(layerProtocols)
             .setCapacity(new CapacityBuilder()
                 .setTotalSize(new TotalSizeBuilder()
-                    .setValue(Uint64.valueOf(serviceZEnd.getServiceRate()))
-                    .setUnit(CapacityUnit.GBPS)
+                    .setValue(Decimal64.valueOf(BigDecimal.valueOf(serviceZEnd.getServiceRate().doubleValue())))
+                    .setUnit(CAPACITYUNITGBPS.VALUE)
                     .build())
-                .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile
+//                .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile
                 .build())
             .setProtectionRole(ProtectionRole.WORK)
             .setRole(PortRole.SYMMETRIC)
-            .setLocalId(serviceZEnd.getTxDirection().values().stream().findFirst().orElseThrow()
-                .getPort().getPortDeviceName())
+            .setLocalId(portZEnd.getPortDeviceName())
             .build();
     }
 
     private EndPoint mapServiceAEndPoint(
-        org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEnd
+        org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEnd
             serviceAEnd, PathDescription pathDescription) {
         EndPointBuilder endPointBuilder = new EndPointBuilder();
         // 1. Service Format: ODU, OTU, ETH
@@ -1164,13 +1363,11 @@ public final class ConnectivityUtils {
             default:
                 LOG.error("Service Format not supported");
         }
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name name =
-            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder()
+        var portAEnd = serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort();
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name name =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameBuilder()
                 .setValueName("OpenROADM info")
-                .setValue(String.join("-", serviceAEnd.getClli(),
-                    serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort()
-                        .getPortDeviceName(),
-                    serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow().getPort().getPortName()))
+                .setValue(String.join("-", serviceAEnd.getClli(), portAEnd.getPortDeviceName(), portAEnd.getPortName()))
                 .build();
         return endPointBuilder
             .setServiceInterfacePoint(new ServiceInterfacePointBuilder()
@@ -1178,16 +1375,16 @@ public final class ConnectivityUtils {
                 .build())
             .setName(Map.of(name.key(), name))
             .setAdministrativeState(AdministrativeState.UNLOCKED)
-            .setDirection(PortDirection.BIDIRECTIONAL)
+            .setDirection(Direction.BIDIRECTIONAL)
             .setLifecycleState(LifecycleState.INSTALLED)
             .setOperationalState(OperationalState.ENABLED)
             .setLayerProtocolName(layerProtocols)
             .setCapacity(new CapacityBuilder()
                 .setTotalSize(new TotalSizeBuilder()
-                    .setValue(Uint64.valueOf(serviceAEnd.getServiceRate()))
-                    .setUnit(CapacityUnit.GBPS)
+                    .setValue(Decimal64.valueOf(BigDecimal.valueOf(serviceAEnd.getServiceRate().doubleValue())))
+                    .setUnit(CAPACITYUNITGBPS.VALUE)
                     .build())
-                .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile
+//                .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile
                 .build())
             .setProtectionRole(ProtectionRole.WORK)
             .setRole(PortRole.SYMMETRIC)
@@ -1197,285 +1394,224 @@ public final class ConnectivityUtils {
     }
 
     private Uuid getSipIdFromZend(Map<ZToAKey, ZToA> mapztoa, String serviceNodeId, ServiceFormat serviceFormat) {
-        Uuid zendUuid = null;
         if (serviceNodeId.contains("ROADM")) {
             // Service from ROADM to ROADM
             // AddDrop-AddDrop ports --> MC layer SIPs
-            ZToA firstElement = mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("0")).findFirst()
-                    .orElseThrow();
+            ZToA firstElement =
+                mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("0")).findFirst().orElseThrow();
             TerminationPoint tp = (TerminationPoint) firstElement.getResource().getResource();
-            Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP",
-                    tp.getTpNodeId(), TapiStringConstants.MC, tp.getTpId())).getBytes(StandardCharsets.UTF_8))
-                .toString());
+            Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.MC, tp.getTpId()))
+                    .getBytes(StandardCharsets.UTF_8)).toString());
             LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.MC, tp.getTpId()));
             for (ServiceInterfacePoint sip:this.sipMap.values()) {
-                if (!sip.getUuid().equals(sipUuid)) {
-                    LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
-                    continue;
+                if (sip.getUuid().equals(sipUuid)) {
+                    return sip.getUuid();
                 }
-                zendUuid = sip.getUuid();
-                break;
-            }
-        } else {
-            // Service from XPDR to XPDR
-            ZToA firstElement;
-            TerminationPoint tp;
-            Uuid sipUuid;
-            switch (serviceFormat) {
-                case ODU:
-                    firstElement = mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("2")).findFirst()
-                            .orElseThrow();
-                    tp = (TerminationPoint) firstElement.getResource().getResource();
-                    // Network-Network ports --> iODU layer SIPs TODO --> updated to E_ODU
-                    sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", tp.getTpNodeId(),
-                            TapiStringConstants.I_ODU, tp.getTpId())).getBytes(StandardCharsets.UTF_8)).toString());
-                    LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.I_ODU,
-                        tp.getTpId()));
-                    break;
-                case OTU:
-                    firstElement = mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("2")).findFirst()
-                            .orElseThrow();
-                    tp = (TerminationPoint) firstElement.getResource().getResource();
-                    // Network-Network ports --> iOTSi layer SIPs
-                    sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", tp.getTpNodeId(),
-                            TapiStringConstants.I_OTSI, tp.getTpId())).getBytes(StandardCharsets.UTF_8)).toString());
-                    LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.I_OTSI,
-                        tp.getTpId()));
-                    break;
-                case Ethernet:
-                    LOG.info("Elements ZA = {}", mapztoa.values().toString());
-                    firstElement = mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("0")).findFirst()
-                            .orElseThrow();
-                    tp = (TerminationPoint) firstElement.getResource().getResource();
-                    // Client-client ports --> DSR layer SIPs
-                    sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", tp.getTpNodeId(),
-                            TapiStringConstants.DSR, tp.getTpId())).getBytes(StandardCharsets.UTF_8)).toString());
-                    LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.DSR,
-                        tp.getTpId()));
-                    break;
-                default:
-                    sipUuid = null;
-                    LOG.warn("Service format {} not supported (?)", serviceFormat.getName());
+                LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
             }
-            for (ServiceInterfacePoint sip:this.sipMap.values()) {
-                if (!sip.getUuid().equals(sipUuid)) {
-                    LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
-                    continue;
-                }
-                zendUuid = sip.getUuid();
+            return null;
+        }
+        // Service from XPDR to XPDR
+        ZToA firstElement;
+        TerminationPoint tp;
+        Uuid sipUuid;
+        switch (serviceFormat) {
+            case ODU:
+                firstElement =
+                    mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("2")).findFirst().orElseThrow();
+                tp = (TerminationPoint) firstElement.getResource().getResource();
+                // Network-Network ports --> iODU layer SIPs TODO --> updated to E_ODU
+                sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.I_ODU, tp.getTpId()))
+                        .getBytes(StandardCharsets.UTF_8)).toString());
+                LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.I_ODU, tp.getTpId()));
+                break;
+            case OTU:
+                firstElement =
+                    mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("2")).findFirst().orElseThrow();
+                tp = (TerminationPoint) firstElement.getResource().getResource();
+                // Network-Network ports --> iOTSi layer SIPs
+                sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.I_OTSI, tp.getTpId()))
+                        .getBytes(StandardCharsets.UTF_8)).toString());
+                LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.I_OTSI, tp.getTpId()));
                 break;
+            case Ethernet:
+                LOG.info("Elements ZA = {}", mapztoa.values());
+                firstElement =
+                    mapztoa.values().stream().filter(ztoa -> ztoa.getId().equals("0")).findFirst().orElseThrow();
+                tp = (TerminationPoint) firstElement.getResource().getResource();
+                // Client-client ports --> DSR layer SIPs
+                sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.DSR, tp.getTpId()))
+                        .getBytes(StandardCharsets.UTF_8)).toString());
+                LOG.info("SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.DSR, tp.getTpId()));
+                break;
+            default:
+                sipUuid = null;
+                LOG.warn("Service format {} not supported (?)", serviceFormat.getName());
+        }
+        for (ServiceInterfacePoint sip:this.sipMap.values()) {
+            if (sip.getUuid().equals(sipUuid)) {
+                return sip.getUuid();
             }
+            LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
         }
-        return zendUuid;
+        return null;
     }
 
     private Uuid getSipIdFromAend(Map<AToZKey, AToZ> mapatoz, String serviceNodeId, ServiceFormat serviceFormat) {
-        Uuid aendUuid = null;
         LOG.info("ServiceNode = {} and ServiceFormat = {}", serviceNodeId, serviceFormat.getName());
         LOG.info("Map a to z = {}", mapatoz);
         if (serviceNodeId.contains("ROADM")) {
             // Service from ROADM to ROADM
             // AddDrop-AddDrop ports --> MC layer SIPs
-            AToZ firstElement = mapatoz.values().stream().filter(atoz -> atoz.getId().equals("0")).findFirst()
-                    .orElseThrow();
+            AToZ firstElement =
+                mapatoz.values().stream().filter(atoz -> atoz.getId().equals("0")).findFirst().orElseThrow();
             LOG.info("First element of service path = {}", firstElement.getResource().getResource());
             TerminationPoint tp = (TerminationPoint) firstElement.getResource().getResource();
-            Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP",
-                    tp.getTpNodeId(), TapiStringConstants.MC, tp.getTpId())).getBytes(StandardCharsets.UTF_8))
-                .toString());
-            LOG.info("ROADM SIP name = {}", String.join("+", tp.getTpNodeId(), TapiStringConstants.MC,
-                tp.getTpId()));
+            Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.MC, tp.getTpId()))
+                    .getBytes(StandardCharsets.UTF_8)).toString());
+            LOG.info("ROADM SIP name = {}",
+                String.join("+", tp.getTpNodeId(), TapiStringConstants.MC, tp.getTpId()));
             for (ServiceInterfacePoint sip:this.sipMap.values()) {
-                if (!sip.getUuid().equals(sipUuid)) {
-                    LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
-                    continue;
+                if (sip.getUuid().equals(sipUuid)) {
+                    return sip.getUuid();
                 }
-                aendUuid = sip.getUuid();
-                break;
+                LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
             }
-        } else {
-            // Service from XPDR to XPDR
-            AToZ firstElement;
-            TerminationPoint tp;
-            Uuid sipUuid;
-            switch (serviceFormat) {
-                case ODU:
-                    firstElement = mapatoz.values().stream().filter(atoz -> atoz.getId().equals("2")).findFirst()
-                            .orElseThrow();
-                    tp = (TerminationPoint) firstElement.getResource().getResource();
-                    // Network-Network ports --> iODU layer SIPs. TODO -> updated to eODU
-                    sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", tp.getTpNodeId(),
-                            TapiStringConstants.I_ODU, tp.getTpId())).getBytes(StandardCharsets.UTF_8)).toString());
-                    LOG.info("ODU XPDR SIP name = {}", String.join("+", tp.getTpNodeId(),
-                        TapiStringConstants.I_ODU, tp.getTpId()));
-                    break;
-                case OTU:
-                    firstElement = mapatoz.values().stream().filter(atoz -> atoz.getId().equals("2")).findFirst()
-                            .orElseThrow();
-                    tp = (TerminationPoint) firstElement.getResource().getResource();
-                    // Network-Network ports --> iOTSi layer SIPs
-                    sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", tp.getTpNodeId(),
-                            TapiStringConstants.I_OTSI, tp.getTpId())).getBytes(StandardCharsets.UTF_8)).toString());
-                    LOG.info("OTU XPDR SIP name = {}", String.join("+", tp.getTpNodeId(),
-                        TapiStringConstants.I_OTSI, tp.getTpId()));
-                    break;
-                case Ethernet:
-                    LOG.info("Elements AZ = {}", mapatoz.values().toString());
-                    firstElement = mapatoz.values().stream().filter(atoz -> atoz.getId().equals("0")).findFirst()
-                            .orElseThrow();
-                    tp = (TerminationPoint) firstElement.getResource().getResource();
-                    // Client-client ports --> DSR layer SIPs
-                    sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", tp.getTpNodeId(),
-                            TapiStringConstants.DSR, tp.getTpId())).getBytes(StandardCharsets.UTF_8)).toString());
-                    LOG.info("DSR XPDR SIP name = {}", String.join("+", tp.getTpNodeId(),
-                        TapiStringConstants.DSR, tp.getTpId()));
-                    break;
-                default:
-                    sipUuid = null;
-                    LOG.warn("Service format {} not supported (?)", serviceFormat.getName());
-            }
-            for (ServiceInterfacePoint sip:this.sipMap.values()) {
-                if (!sip.getUuid().equals(sipUuid)) {
-                    LOG.info("SIP {} doesn match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
-                    continue;
-                }
-                aendUuid = sip.getUuid();
+            return null;
+        }
+        // Service from XPDR to XPDR
+        AToZ firstElement;
+        TerminationPoint tp;
+        Uuid sipUuid;
+        switch (serviceFormat) {
+            case ODU:
+                firstElement =
+                    mapatoz.values().stream().filter(atoz -> atoz.getId().equals("2")).findFirst().orElseThrow();
+                tp = (TerminationPoint) firstElement.getResource().getResource();
+                // Network-Network ports --> iODU layer SIPs. TODO -> updated to eODU
+                sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.I_ODU, tp.getTpId()))
+                        .getBytes(StandardCharsets.UTF_8)).toString());
+                LOG.info("ODU XPDR SIP name = {}",
+                    String.join("+", tp.getTpNodeId(), TapiStringConstants.I_ODU, tp.getTpId()));
+                break;
+            case OTU:
+                firstElement =
+                    mapatoz.values().stream().filter(atoz -> atoz.getId().equals("2")).findFirst().orElseThrow();
+                tp = (TerminationPoint) firstElement.getResource().getResource();
+                // Network-Network ports --> iOTSi layer SIPs
+                sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.I_OTSI, tp.getTpId()))
+                        .getBytes(StandardCharsets.UTF_8)).toString());
+                LOG.info("OTU XPDR SIP name = {}",
+                    String.join("+", tp.getTpNodeId(), TapiStringConstants.I_OTSI, tp.getTpId()));
                 break;
+            case Ethernet:
+                LOG.info("Elements AZ = {}", mapatoz.values());
+                firstElement =
+                    mapatoz.values().stream().filter(atoz -> atoz.getId().equals("0")).findFirst().orElseThrow();
+                tp = (TerminationPoint) firstElement.getResource().getResource();
+                // Client-client ports --> DSR layer SIPs
+                sipUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    (String.join("+", "SIP", tp.getTpNodeId(), TapiStringConstants.DSR, tp.getTpId()))
+                        .getBytes(StandardCharsets.UTF_8)).toString());
+                LOG.info("DSR XPDR SIP name = {}",
+                    String.join("+", tp.getTpNodeId(), TapiStringConstants.DSR, tp.getTpId()));
+                break;
+            default:
+                sipUuid = null;
+                LOG.warn("Service format {} not supported (?)", serviceFormat.getName());
+        }
+        for (ServiceInterfacePoint sip:this.sipMap.values()) {
+            if (sip.getUuid().equals(sipUuid)) {
+                return sip.getUuid();
             }
+            LOG.debug("SIP {} does not match sipname {}", sip.getUuid().getValue(), sipUuid.getValue());
         }
-        return aendUuid;
+        return null;
     }
 
     private void putRdmCepInTopologyContext(String node, String spcRdmAD, String qual, ConnectionEndPoint cep) {
-        LOG.info("NEP id before Merge = {}", String.join("+", node, qual, spcRdmAD.split("\\+")[1]));
-        LOG.info("Node of NEP id before Merge = {}", String.join("+", node, TapiStringConstants.PHTNC_MEDIA));
+        String nepId = String.join("+", node, qual, spcRdmAD.split("\\+")[1]);
+        String nodeNepId = String.join("+", node, TapiStringConstants.PHTNC_MEDIA);
+        LOG.info("NEP id before Merge = {}", nepId);
+        LOG.info("Node of NEP id before Merge = {}", nodeNepId);
         // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, TapiStringConstants.PHTNC_MEDIA)
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, qual, spcRdmAD.split("\\+")[1])
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        this.tapiContext.updateTopologyWithCep(topoUuid, nodeUuid, nepUuid, cep);
+        this.tapiContext.updateTopologyWithCep(
+            //topoUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.T0_FULL_MULTILAYER.getBytes(StandardCharsets.UTF_8)).toString()),
+            //nodeUuid,
+            new Uuid(UUID.nameUUIDFromBytes(nodeNepId.getBytes(StandardCharsets.UTF_8)).toString()),
+            //nepUuid,
+            new Uuid(UUID.nameUUIDFromBytes(nepId.getBytes(StandardCharsets.UTF_8)).toString()),
+            cep);
     }
 
-    private void putXpdrCepInTopologyContext(String node, String spcXpdrNet, String qual, String nodeLayer,
-                                             ConnectionEndPoint cep) {
+    private void putXpdrCepInTopologyContext(
+            String node, String spcXpdrNet, String qual, String nodeLayer, ConnectionEndPoint cep) {
         // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, nodeLayer)
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, qual, spcXpdrNet.split("\\+")[1])
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        this.tapiContext.updateTopologyWithCep(topoUuid, nodeUuid, nepUuid, cep);
+        this.tapiContext.updateTopologyWithCep(
+            //topoUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.T0_FULL_MULTILAYER.getBytes(StandardCharsets.UTF_8))
+                .toString()),
+            //nodeUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                    String.join("+", node, nodeLayer).getBytes(StandardCharsets.UTF_8))
+                .toString()),
+            //nepUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                    String.join("+", node, qual, spcXpdrNet.split("\\+")[1]).getBytes(StandardCharsets.UTF_8))
+                .toString()),
+            cep);
     }
 
-    public Map<org.opendaylight.yang.gen.v1.urn
-        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey,
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection>
-            getConnectionFullMap() {
-        return this.connectionFullMap;
-    }
 
-    private String getIdBasedOnModelVersion(String nodeid) {
-        return nodeid.matches("[A-Z]{5}-[A-Z0-9]{2}-.*") ? String.join("-", nodeid.split("-")[0],
-            nodeid.split("-")[1]) : nodeid.split("-")[0];
+    private void putRdmNepInTopologyContext(String orNodeId, String orTpId, String qual, OwnedNodeEdgePoint onep) {
+        String nepId = String.join("+", orNodeId, qual, orTpId);
+        String nepNodeId = String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA);
+        LOG.info("NEP id before Merge = {}", nepId);
+        LOG.info("Node of NEP id before Merge = {}", nepNodeId);
+        // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep
+        updateTopologyWithNep(
+            //topoUuid,
+             new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.T0_FULL_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+                 .toString()),
+            //nodeUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                    nepNodeId.getBytes(Charset.forName("UTF-8")))
+                .toString()),
+            //nepUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                    nepId.getBytes(Charset.forName("UTF-8")))
+                .toString()),
+            onep);
     }
 
-    public ServiceCreateInput createORServiceInput(CreateConnectivityServiceInput input, Uuid serviceUuid) {
-        // TODO: not taking into account all the constraints. Only using EndPoints and Connectivity Constraint.
-        Map<org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPointKey,
-            org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint>
-            endPointMap = input.getEndPoint();
-        ConnectivityConstraint constraint = input.getConnectivityConstraint();
-        ConnectionType connType = null;
-        ServiceFormat serviceFormat = null;
-        String nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(),
-            TapiStringConstants.DSR);
-        String nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow().getLocalId(),
-            TapiStringConstants.DSR);
-        LOG.debug("Node a = {}", nodeAid);
-        LOG.debug("Node z = {}", nodeZid);
-        switch (constraint.getServiceLayer().getIntValue()) {
-            case 0:
-                LOG.info("ODU");
-                connType = ConnectionType.Infrastructure;
-                serviceFormat = ServiceFormat.ODU;
-                break;
-            case 1:
-                LOG.info("ETH, no need to create OTU and ODU");
-                connType = ConnectionType.Service;
-                serviceFormat = ServiceFormat.Ethernet;
-                break;
-            case 2:
-                LOG.info("DSR, need to create OTU and ODU");
-                connType = ConnectionType.Service;
-                serviceFormat = ServiceFormat.Ethernet;
-                break;
-            case 3:
-                LOG.info("PHOTONIC");
-                connType = getConnectionTypePhtnc(endPointMap.values());
-                serviceFormat = getServiceFormatPhtnc(endPointMap.values());
-                if (serviceFormat.equals(ServiceFormat.OC)) {
-                    nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(),
-                        TapiStringConstants.PHTNC_MEDIA);
-                    nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow()
-                            .getLocalId(), TapiStringConstants.PHTNC_MEDIA);
-                } else {
-                    nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(),
-                        TapiStringConstants.OTSI);
-                    nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow()
-                            .getLocalId(), TapiStringConstants.OTSI);
-                }
-                LOG.debug("Node a photonic = {}", nodeAid);
-                LOG.debug("Node z photonic = {}", nodeZid);
-                break;
-            default:
-                LOG.info("Service type {} not supported", constraint.getServiceLayer().getName());
-        }
-        // Requested Capacity for connectivity service
-        Uint64 capacity = input.getConnectivityConstraint().getRequestedCapacity().getTotalSize().getValue();
-        // map endpoints into service end points. Map the type of service from TAPI to OR
-        ServiceAEnd serviceAEnd = tapiEndPointToServiceAPoint(endPointMap.values().stream().findFirst().orElseThrow(),
-            serviceFormat, nodeAid, capacity, constraint.getServiceLayer());
-        ServiceZEnd serviceZEnd = tapiEndPointToServiceZPoint(endPointMap.values().stream().skip(1).findFirst()
-                .orElseThrow(), serviceFormat, nodeZid, capacity, constraint.getServiceLayer());
-        if (serviceAEnd == null || serviceZEnd == null) {
-            LOG.error("Couldnt map endpoints to service end");
-            return null;
-        }
-        LOG.info("Service a end = {}", serviceAEnd);
-        LOG.info("Service z end = {}", serviceZEnd);
-        return new ServiceCreateInputBuilder()
-            .setServiceAEnd(serviceAEnd)
-            .setServiceZEnd(serviceZEnd)
-            .setConnectionType(connType)
-            .setServiceName(serviceUuid.getValue())
-            .setCommonId("common id")
-            .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request-1")
-                .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url")
-                .setRequestSystemId("appname")
-                .build())
-            .setCustomer("customer")
-            .setDueDate(DateAndTime.getDefaultInstance("2018-06-15T00:00:01Z"))
-            .setOperatorContact("pw1234")
-            .build();
+    private String getIdBasedOnModelVersion(String nodeid) {
+        return nodeid.matches("[A-Z]{5}-[A-Z0-9]{2}-.*")
+            ? String.join("-", nodeid.split("-")[0], nodeid.split("-")[1])
+            : nodeid.split("-")[0];
     }
 
     private ServiceZEnd tapiEndPointToServiceZPoint(
-        org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint endPoint,
-        ServiceFormat serviceFormat, String nodeZid, Uint64 capacity, LayerProtocolName serviceLayer) {
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .create.connectivity.service.input.EndPoint endPoint,
+            ServiceFormat serviceFormat, String nodeZid, Uint64 capacity, LayerProtocolName serviceLayer) {
         // TODO -> change way this is being created. The name includes only SPDR-SA1-XPDR1.
         //  Not the rest which is needed in the txPortDeviceName.
         //  It could be obtained from the SIP which has the NEP and includes all the OR name.
         Uuid sipUuid = endPoint.getServiceInterfacePoint().getServiceInterfacePointUuid();
         // Todo -> need to find the NEP associated to that SIP
         Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeZid.getBytes(StandardCharsets.UTF_8)).toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node =
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node =
             this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid);
         if (node == null) {
             LOG.error("Node not found in datastore");
@@ -1485,10 +1621,8 @@ public final class ConnectivityUtils {
         //  connection is between 2 CLIENT ports. Otherwise it will not work...
         OwnedNodeEdgePoint nep = null;
         for (OwnedNodeEdgePoint onep : node.getOwnedNodeEdgePoint().values()) {
-            if (onep.getMappedServiceInterfacePoint() == null) {
-                continue;
-            }
-            if (onep.getMappedServiceInterfacePoint().containsKey(new MappedServiceInterfacePointKey(sipUuid))) {
+            if (onep.getMappedServiceInterfacePoint() != null
+                    && onep.getMappedServiceInterfacePoint().containsKey(new MappedServiceInterfacePointKey(sipUuid))) {
                 nep = onep;
                 break;
             }
@@ -1497,7 +1631,16 @@ public final class ConnectivityUtils {
             LOG.error("Nep not found in datastore");
             return null;
         }
-        String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue();
+        String nodeName = "";
+        for (Map.Entry<
+                    org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameKey,
+                    org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name> entry:
+                endPoint.getName().entrySet()) {
+            if (!("Node Type").equals(entry.getValue().getValueName())) {
+                nodeName = entry.getValue().getValue();
+            }
+        }
+//        String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue();
         String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]);
         String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue();
         String txPortDeviceName = nepName.split("\\+")[0];
@@ -1559,28 +1702,30 @@ public final class ConnectivityUtils {
         if (serviceFormat.equals(ServiceFormat.OTU)) {
             serviceZEndBuilder.setOtuServiceRate(OTU4.VALUE);
         }
-        if (!serviceLayer.equals(LayerProtocolName.ETH)) {
-            serviceZEndBuilder
-                .setEthernetAttributes(new EthernetAttributesBuilder().setSubrateEthSla(new SubrateEthSlaBuilder()
+        return serviceLayer.equals(LayerProtocolName.ETH)
+            ? serviceZEndBuilder.build()
+            : serviceZEndBuilder
+                .setEthernetAttributes(new EthernetAttributesBuilder()
+                    .setSubrateEthSla(new SubrateEthSlaBuilder()
                         .setCommittedBurstSize(Uint16.valueOf(64))
                         .setCommittedInfoRate(Uint32.valueOf(100000))
                         .build())
-                    .build());
-        }
-        return serviceZEndBuilder.build();
+                    .build())
+                .build();
     }
 
     private ServiceAEnd tapiEndPointToServiceAPoint(
-        org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint endPoint,
-        ServiceFormat serviceFormat, String nodeAid, Uint64 capacity, LayerProtocolName serviceLayer) {
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .create.connectivity.service.input.EndPoint endPoint,
+            ServiceFormat serviceFormat, String nodeAid, Uint64 capacity, LayerProtocolName serviceLayer) {
         // TODO -> change way this is being created. The name includes only SPDR-SA1-XPDR1.
         //  Not the rest which is needed in the txPortDeviceName.
         //  It could be obtained from the SIP which has the NEP and includes all the OR name.
         Uuid sipUuid = endPoint.getServiceInterfacePoint().getServiceInterfacePointUuid();
         // Todo -> need to find the NEP associated to that SIP
         Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeAid.getBytes(StandardCharsets.UTF_8)).toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node =
+        LOG.info("NodeA {} Uuid is {}", nodeAid, nodeUuid);
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node =
             this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid);
         if (node == null) {
             LOG.error("Node not found in datastore");
@@ -1590,10 +1735,8 @@ public final class ConnectivityUtils {
         //  connection is between 2 CLIENT ports. Otherwise it will not work...
         OwnedNodeEdgePoint nep = null;
         for (OwnedNodeEdgePoint onep : node.getOwnedNodeEdgePoint().values()) {
-            if (onep.getMappedServiceInterfacePoint() == null) {
-                continue;
-            }
-            if (onep.getMappedServiceInterfacePoint().containsKey(new MappedServiceInterfacePointKey(sipUuid))) {
+            if (onep.getMappedServiceInterfacePoint() != null
+                    && onep.getMappedServiceInterfacePoint().containsKey(new MappedServiceInterfacePointKey(sipUuid))) {
                 nep = onep;
                 break;
             }
@@ -1602,7 +1745,16 @@ public final class ConnectivityUtils {
             LOG.error("Nep not found in datastore");
             return null;
         }
-        String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue();
+        String nodeName = "";
+        for (Map.Entry<
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameKey,
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name> entry:
+                    endPoint.getName().entrySet()) {
+            if (!("Node Type").equals(entry.getValue().getValueName())) {
+                nodeName = entry.getValue().getValue();
+            }
+        }
+//        String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue();
         String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]);
         String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue();
         String txPortDeviceName = nepName.split("\\+")[0];
@@ -1622,8 +1774,8 @@ public final class ConnectivityUtils {
             .setServiceFormat(serviceFormat)
             .setServiceRate(Uint32.valueOf(capacity))
             .setEthernetAttributes(new EthernetAttributesBuilder().setSubrateEthSla(
-                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.subrate.eth
-                        .sla.SubrateEthSlaBuilder()
+                    new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
+                            .subrate.eth.sla.SubrateEthSlaBuilder()
                         .setCommittedBurstSize(Uint16.valueOf(64))
                         .setCommittedInfoRate(Uint32.valueOf(100000))
                         .build())
@@ -1665,49 +1817,64 @@ public final class ConnectivityUtils {
         } else if (serviceFormat.equals(ServiceFormat.OTU)) {
             serviceAEndBuilder.setOtuServiceRate(OTU4.VALUE);
         }
-        if (!serviceLayer.equals(LayerProtocolName.ETH)) {
-            serviceAEndBuilder
-                .setEthernetAttributes(new EthernetAttributesBuilder().setSubrateEthSla(new SubrateEthSlaBuilder()
+        return serviceLayer.equals(LayerProtocolName.ETH)
+            ? serviceAEndBuilder.build()
+            : serviceAEndBuilder
+                .setEthernetAttributes(new EthernetAttributesBuilder()
+                    .setSubrateEthSla(new SubrateEthSlaBuilder()
                         .setCommittedBurstSize(Uint16.valueOf(64))
                         .setCommittedInfoRate(Uint32.valueOf(100000))
                         .build())
-                    .build());
-        }
-        return serviceAEndBuilder.build();
+                    .build())
+                .build();
     }
 
-    private ConnectionType getConnectionTypePhtnc(Collection<org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint> endPoints) {
-        if (endPoints.stream().anyMatch(ep -> ep.getName().values().stream()
-                .anyMatch(name -> name.getValue().contains("ROADM")))) {
+    private ConnectionType getConnectionTypePhtnc(
+            Collection<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .create.connectivity.service.input.EndPoint> endPoints) {
+        return endPoints.stream()
+                .anyMatch(ep -> ep.getName().values().stream().anyMatch(name -> name.getValue().contains("ROADM")))
             // EndPoints are ROADMs
-            return ConnectionType.RoadmLine;
-        }
-        // EndPoints ar not ROADMs -> XPDR, MUXPDR, SWTICHPDR
-        return ConnectionType.Infrastructure;
+            ? ConnectionType.RoadmLine
+            // EndPoints are not ROADMs -> XPDR, MUXPDR, SWTICHPDR
+            : ConnectionType.Infrastructure;
     }
 
-    private ServiceFormat getServiceFormatPhtnc(Collection<org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint> endPoints) {
-        if (endPoints.stream().anyMatch(ep -> ep.getName().values().stream()
-                .anyMatch(name -> name.getValue().contains("ROADM")))) {
+    private ServiceFormat getServiceFormatPhtnc(
+            Collection<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .create.connectivity.service.input.EndPoint> endPoints) {
+        return endPoints.stream()
+                .anyMatch(ep -> ep.getName().values().stream().anyMatch(name -> name.getValue().contains("ROADM")))
             // EndPoints are ROADMs
-            return ServiceFormat.OC;
-        }
-        // EndPoints ar not ROADMs -> XPDR, MUXPDR, SWTICHPDR
-        return ServiceFormat.OTU;
+            ? ServiceFormat.OC
+            // EndPoints ar not ROADMs -> XPDR, MUXPDR, SWTICHPDR
+            : ServiceFormat.OTU;
     }
 
     private ConnectionEndPoint getAssociatediODUCep(String spcXpdrNetwork) {
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0],
-            TapiStringConstants.DSR).getBytes(StandardCharsets.UTF_8))).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0],
-                TapiStringConstants.I_ODU, spcXpdrNetwork.split("\\+")[1]).getBytes(StandardCharsets.UTF_8)))
-            .toString());
-        Uuid cepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP",
-            spcXpdrNetwork.split("\\+")[0], TapiStringConstants.I_ODU, spcXpdrNetwork.split("\\+")[1]))
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        return this.tapiContext.getTapiCEP(this.tapiTopoUuid, nodeUuid, nepUuid, cepUuid);
+        return this.tapiContext.getTapiCEP(
+            this.tapiTopoUuid,
+            //nodeUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                (String.join("+",
+                        spcXpdrNetwork.split("\\+")[0],
+                        TapiStringConstants.XPDR)
+                    .getBytes(StandardCharsets.UTF_8))).toString()),
+            //nepUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                (String.join("+",
+                        spcXpdrNetwork.split("\\+")[0],
+                        TapiStringConstants.I_ODU,
+                        spcXpdrNetwork.split("\\+")[1])
+                    .getBytes(StandardCharsets.UTF_8))).toString()),
+            //cepUuid,
+            new Uuid(UUID.nameUUIDFromBytes(
+                (String.join("+",
+                        "CEP",
+                        spcXpdrNetwork.split("\\+")[0],
+                        TapiStringConstants.I_ODU,
+                        spcXpdrNetwork.split("\\+")[1]))
+                    .getBytes(StandardCharsets.UTF_8)).toString()));
     }
 
     private String getAssociatedNetworkPort(String spcXpdrClient, List<String> xpdrNetworkTplist) {
@@ -1722,21 +1889,23 @@ public final class ConnectivityUtils {
     private List<String> getAssociatedClientsPort(List<String> xpdrNetworkTplist) {
         List<String> clientPortList = new ArrayList<>();
         for (String networkPort:xpdrNetworkTplist) {
-            String nodeId = String.join("-", networkPort.split("\\+")[0].split("-")[0],
+            String nodeId = String.join("-",
+                networkPort.split("\\+")[0].split("-")[0],
                 networkPort.split("\\+")[0].split("-")[1]);
             String tpId = networkPort.split("\\+")[1];
             InstanceIdentifier<Mapping> mapIID = InstanceIdentifier.builder(Network.class)
                 .child(Nodes.class, new NodesKey(nodeId))
                 .child(Mapping.class, new MappingKey(tpId)).build();
             try {
-                Optional<Mapping> optMapping = this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION,
-                    mapIID).get();
-                if (!optMapping.isPresent()) {
+                Optional<Mapping> optMapping =
+                    this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, mapIID).get();
+                if (optMapping.isEmpty()) {
                     LOG.error("Couldnt find mapping for port {} of node {}", tpId, nodeId);
                 }
                 Mapping mapping = optMapping.orElseThrow();
                 LOG.info("Mapping for node+port {}+{} = {}", nodeId, tpId, mapping);
-                String key = String.join("+", String.join("-", nodeId, tpId.split("\\-")[0]),
+                String key = String.join("+",
+                    String.join("-", nodeId, tpId.split("\\-")[0]),
                     mapping.getConnectionMapLcp());
                 LOG.info("Key to be added to list = {}", key);
                 if (!clientPortList.contains(key)) {
@@ -1754,23 +1923,28 @@ public final class ConnectivityUtils {
     private OpenroadmNodeType getOpenRoadmNodeType(List<String> xpdrNodelist) {
         List<OpenroadmNodeType> openroadmNodeTypeList = new ArrayList<>();
         for (String xpdrNode:xpdrNodelist) {
-            Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.DSR))
-                .getBytes(StandardCharsets.UTF_8)).toString());
-            InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.topology.rev181210.topology.Node> nodeIID = InstanceIdentifier.builder(
-                    Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.topology.rev181210.Context1.class).child(TopologyContext.class)
-                .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
-                .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
-                    new NodeKey(nodeUuid)).build();
+            InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                    .topology.Node> nodeIID =
+                InstanceIdentifier.builder(Context.class)
+                    .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+                    .child(TopologyContext.class)
+                    .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
+                    .child(
+                        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
+                        new NodeKey(
+                            //nodeUUID
+                            new Uuid(UUID.nameUUIDFromBytes(
+                                (String.join("+",xpdrNode, TapiStringConstants.XPDR))
+                                    .getBytes(StandardCharsets.UTF_8)).toString())))
+                    .build();
             try {
-                Optional<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> optNode
-                    this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, nodeIID).get();
-                if (!optNode.isPresent()) {
+                Optional<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> optNode =
+                    this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, nodeIID).get();
+                if (optNode.isEmpty()) {
                     return null;
                 }
-                OpenroadmNodeType openroadmNodeType = OpenroadmNodeType.forName(optNode.orElseThrow().getName().get(
-                    new NameKey("Node Type")).getValue());
+                OpenroadmNodeType openroadmNodeType =
+                    OpenroadmNodeType.forName(optNode.orElseThrow().getName().get(new NameKey("Node Type")).getValue());
                 if (!openroadmNodeTypeList.contains(openroadmNodeType)) {
                     openroadmNodeTypeList.add(openroadmNodeType);
                 }
@@ -1780,10 +1954,41 @@ public final class ConnectivityUtils {
             }
         }
         // TODO for now check that there is only one type, otherwise error
-        if (openroadmNodeTypeList.size() != 1) {
-            LOG.error("More than one xpdr type. List = {}", openroadmNodeTypeList);
-            return null;
+        if (openroadmNodeTypeList.size() == 1) {
+            return openroadmNodeTypeList.get(0);
         }
-        return openroadmNodeTypeList.get(0);
+        LOG.error("More than one xpdr type. List = {}", openroadmNodeTypeList);
+        return null;
+    }
+
+    private OwnedNodeEdgePoint createRoadmNep(
+            String orNodeId, String tpId, boolean withSip,
+            OperationalState operState, AdministrativeState adminState, String nepPhotonicSublayer) {
+        //TODO : complete implementation with SIP
+        Name nepName = new NameBuilder()
+                .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint")
+                .setValue(String.join("+", orNodeId, nepPhotonicSublayer, tpId))
+                .build();
+        return new OwnedNodeEdgePointBuilder()
+            .setUuid(
+                new Uuid(UUID.nameUUIDFromBytes(
+                        (String.join("+", orNodeId, nepPhotonicSublayer,tpId)).getBytes(StandardCharsets.UTF_8))
+                    .toString()))
+            .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
+            .setName(Map.of(nepName.key(), nepName))
+            .setSupportedCepLayerProtocolQualifierInstances(
+                new ArrayList<>(List.of(
+                    new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                        .setLayerProtocolQualifier(
+                            TapiStringConstants.MC.equals(nepPhotonicSublayer)
+                                ? PHOTONICLAYERQUALIFIERMC.VALUE
+                                : PHOTONICLAYERQUALIFIEROTSiMC.VALUE)
+                        .setNumberOfCepInstances(Uint64.valueOf(1))
+                        .build())))
+            .setDirection(Direction.BIDIRECTIONAL)
+            .setLinkPortRole(PortRole.SYMMETRIC)
+            .setAdministrativeState(adminState).setOperationalState(operState)
+            .setLifecycleState(LifecycleState.INSTALLED)
+            .build();
     }
 }
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImpl.java
deleted file mode 100644 (file)
index 6bd494f..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright © 2018 Orange, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.tapi.connectivity;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ExecutionException;
-import org.opendaylight.transportpce.common.OperationResult;
-import org.opendaylight.transportpce.common.ResponseCodes;
-import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
-import org.opendaylight.transportpce.tapi.utils.TapiContext;
-import org.opendaylight.transportpce.tapi.validation.CreateConnectivityServiceValidation;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfo;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.delete.input.ServiceDeleteReqInfoBuilder;
-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.ForwardingDirection;
-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.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.BandwidthProfileBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionEndPointDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionEndPointDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectionEndPointDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceListInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceListOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.GetConnectivityServiceListOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ServiceType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.UpdateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.UpdateConnectivityServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection;
-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.EndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.CapacityBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.ServiceInterfacePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.output.ServiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connection.details.output.ConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connection.end.point.details.output.ConnectionEndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.list.output.Service;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.list.output.ServiceKey;
-import org.opendaylight.yangtools.yang.common.ErrorType;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Top level service interface providing main TAPI Connectivity services.
- */
-public class TapiConnectivityImpl implements TapiConnectivityService {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TapiConnectivityImpl.class);
-
-    private OrgOpenroadmServiceService serviceHandler;
-    private final TapiContext tapiContext;
-    private final ConnectivityUtils connectivityUtils;
-    private TapiPceListenerImpl pceListenerImpl;
-    private TapiRendererListenerImpl rendererListenerImpl;
-
-    public TapiConnectivityImpl(OrgOpenroadmServiceService serviceHandler, TapiContext tapiContext,
-                                ConnectivityUtils connectivityUtils, TapiPceListenerImpl pceListenerImpl,
-                                TapiRendererListenerImpl rendererListenerImpl) {
-        LOG.info("inside TapiImpl constructor");
-        this.serviceHandler = serviceHandler;
-        this.tapiContext = tapiContext;
-        this.connectivityUtils = connectivityUtils;
-        this.pceListenerImpl = pceListenerImpl;
-        this.rendererListenerImpl = rendererListenerImpl;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<CreateConnectivityServiceOutput>> createConnectivityService(
-            CreateConnectivityServiceInput input) {
-        // TODO: later version of TAPI models include Name as an input parameter in connectivity.yang
-        LOG.info("RPC create-connectivity received: {}", input.getEndPoint());
-        Uuid serviceUuid = new Uuid(UUID.randomUUID().toString());
-        this.pceListenerImpl.setInput(input);
-        this.pceListenerImpl.setServiceUuid(serviceUuid);
-        this.rendererListenerImpl.setServiceUuid(serviceUuid);
-        ListenableFuture<RpcResult<ServiceCreateOutput>> output = null;
-        OperationResult validationResult = CreateConnectivityServiceValidation.validateCreateConnectivityServiceRequest(
-                input);
-        if (validationResult.isSuccess()) {
-            LOG.info("input parameter of RPC create-connectivity are being handled");
-            // check uuid of SIP in tapi context
-            Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap = this.tapiContext.getTapiContext()
-                    .getServiceInterfacePoint();
-            if (sipMap == null) {
-                return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
-                    .withError(ErrorType.RPC, "SIP list is empty")
-                    .buildFuture();
-            }
-            if (sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().findFirst()
-                        .orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))
-                    && sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().skip(1)
-                        .findFirst().orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))) {
-                LOG.info("SIPs found in sipMap");
-                // TODO: differentiate between OTN service and GbE service in TAPI
-                ServiceCreateInput sci = this.connectivityUtils.createORServiceInput(input, serviceUuid);
-                if (sci == null) {
-                    return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
-                        .withError(ErrorType.RPC, "Couldnt map Service create input")
-                        .buildFuture();
-                }
-                LOG.info("Service Create input = {}", sci);
-                output = this.serviceHandler.serviceCreate(sci);
-                if (!output.isDone()) {
-                    return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
-                        .withError(ErrorType.RPC, "Service create RPC failed")
-                        .buildFuture();
-                }
-            } else {
-                LOG.error("Unknown UUID");
-                return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
-                    .withError(ErrorType.RPC, "SIPs do not exist in tapi context")
-                    .buildFuture();
-            }
-        }
-        try {
-            if (output == null) {
-                return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
-                    .withError(ErrorType.RPC, "Failed to create service")
-                    .buildFuture();
-            }
-            LOG.info("Service create request was successful");
-            if (output.get().getResult().getConfigurationResponseCommon().getResponseCode()
-                    .equals(ResponseCodes.RESPONSE_FAILED)) {
-                return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
-                    .withError(ErrorType.RPC, "Failed to create service")
-                    .buildFuture();
-            }
-            LOG.info("Output of service request = {}", output.get().getResult());
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Error checking response code of service create", e);
-        }
-        // Connections and states should be created/updated when the pce and renderer are done :)
-        Map<EndPointKey, EndPoint> endPointList = createEndPoints(input.getEndPoint());
-        Name name = new NameBuilder()
-            .setValueName("Connectivity Service Name")
-            .setValue(serviceUuid.getValue())
-            .build();
-        ConnectivityService service = new ConnectivityServiceBuilder()
-            .setUuid(serviceUuid)
-            .setAdministrativeState(AdministrativeState.LOCKED)
-            .setOperationalState(OperationalState.DISABLED)
-            .setLifecycleState(LifecycleState.PLANNED)
-            .setServiceLayer(input.getConnectivityConstraint().getServiceLayer())
-            .setServiceLevel(input.getConnectivityConstraint().getServiceLevel())
-            .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY)
-            .setConnectivityDirection(ForwardingDirection.BIDIRECTIONAL)
-            .setName(Map.of(name.key(), name))
-            .setConnection(new HashMap<>())
-            .setEndPoint(endPointList)
-            .build();
-        // add to tapi context
-        this.tapiContext.updateConnectivityContext(Map.of(service.key(), service), new HashMap<>());
-        LOG.info("Created locked service in Datastore. Waiting for PCE and Renderer to complete tasks...");
-        // return ConnectivityServiceCreateOutput
-        return RpcResultBuilder.success(new CreateConnectivityServiceOutputBuilder()
-            .setService(new ServiceBuilder(service).build()).build()).buildFuture();
-    }
-
-    private Map<EndPointKey, EndPoint> createEndPoints(
-            Map<org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPointKey,
-                org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint> endPoints) {
-        Map<EndPointKey, EndPoint> endPointMap = new HashMap<>();
-        for (org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint ep:
-                endPoints.values()) {
-            EndPoint endpoint = new EndPointBuilder()
-                .setServiceInterfacePoint(new ServiceInterfacePointBuilder()
-                    .setServiceInterfacePointUuid(ep.getServiceInterfacePoint().getServiceInterfacePointUuid())
-                    .build())
-                .setName(ep.getName())
-                .setAdministrativeState(ep.getAdministrativeState())
-                .setDirection(ep.getDirection())
-                .setLifecycleState(ep.getLifecycleState())
-                .setOperationalState(ep.getOperationalState())
-                .setLayerProtocolName(ep.getLayerProtocolName())
-                .setCapacity(new CapacityBuilder()
-                    .setTotalSize(new TotalSizeBuilder().build())
-                    .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile
-                    .build())
-                .setProtectionRole(ep.getProtectionRole())
-                .setRole(ep.getRole())
-                .setLocalId(ep.getLocalId())
-                .build();
-            endPointMap.put(endpoint.key(), endpoint);
-        }
-        return endPointMap;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetConnectivityServiceDetailsOutput>> getConnectivityServiceDetails(
-            GetConnectivityServiceDetailsInput input) {
-        // TODO Auto-generated method stub
-        Uuid serviceUuid = getUuidFromIput(input.getServiceIdOrName());
-        ConnectivityService service = this.tapiContext.getConnectivityService(serviceUuid);
-        if (service == null) {
-            LOG.error("Service {} doesnt exist in tapi context", input.getServiceIdOrName());
-            return RpcResultBuilder.<GetConnectivityServiceDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Service doesnt exist in datastore")
-                .buildFuture();
-        }
-        return RpcResultBuilder.success(new GetConnectivityServiceDetailsOutputBuilder().setService(
-            new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.details.output.ServiceBuilder(
-                    service).build()).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<UpdateConnectivityServiceOutput>> updateConnectivityService(
-            UpdateConnectivityServiceInput input) {
-        // TODO Auto-generated method stub. More complicated as it depends on what needs to be updated... left aside
-        return null;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetConnectionDetailsOutput>> getConnectionDetails(
-            GetConnectionDetailsInput input) {
-        // TODO Auto-generated method stub
-        Uuid connectionUuid = getUuidFromIput(input.getConnectionIdOrName());
-        Connection connection = this.tapiContext.getConnection(connectionUuid);
-        if (connection == null) {
-            LOG.error("Connection {} doesnt exist in tapi context", input.getConnectionIdOrName());
-            return RpcResultBuilder.<GetConnectionDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Connection doesnt exist in datastore")
-                .buildFuture();
-        }
-        return RpcResultBuilder.success(new GetConnectionDetailsOutputBuilder().setConnection(
-                new ConnectionBuilder(connection).build()).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> deleteConnectivityService(
-            DeleteConnectivityServiceInput input) {
-        //TODO Auto-generated method stub
-        // TODO add try
-        if (input.getServiceIdOrName() != null) {
-            try {
-                Uuid serviceUuid = getUuidFromIput(input.getServiceIdOrName());
-                this.tapiContext.deleteConnectivityService(serviceUuid);
-                ListenableFuture<RpcResult<ServiceDeleteOutput>> output =
-                    this.serviceHandler.serviceDelete(new ServiceDeleteInputBuilder()
-                        .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
-                            .setServiceName(input.getServiceIdOrName())
-                            .setTailRetention(ServiceDeleteReqInfo.TailRetention.No)
-                            .build())
-                        .setSdncRequestHeader(new SdncRequestHeaderBuilder()
-                            .setRequestId("request-1")
-                            .setNotificationUrl("notification url")
-                            .setRequestSystemId("appname")
-                            .setRpcAction(RpcActions.ServiceDelete)
-                            .build())
-                        .build());
-                RpcResult<ServiceDeleteOutput> rpcResult = output.get();
-                if (!rpcResult.getResult().getConfigurationResponseCommon().getResponseCode()
-                        .equals(ResponseCodes.RESPONSE_FAILED)) {
-                    LOG.info("Service is being deleted and devices are being rolled back");
-                    return RpcResultBuilder.success(new DeleteConnectivityServiceOutputBuilder().build()).buildFuture();
-                }
-                LOG.error("Failed to delete service. Deletion process failed");
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Failed to delete service.", e);
-            }
-        }
-        return RpcResultBuilder.<DeleteConnectivityServiceOutput>failed()
-            .withError(ErrorType.RPC, "Failed to delete Service")
-            .buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetConnectivityServiceListOutput>> getConnectivityServiceList(
-            GetConnectivityServiceListInput input) {
-        // TODO Auto-generated method stub
-        Map<ConnectivityServiceKey, ConnectivityService> connMap = this.tapiContext.getConnectivityServices();
-        if (connMap == null) {
-            LOG.error("No services in tapi context");
-            return RpcResultBuilder.<GetConnectivityServiceListOutput>failed()
-                .withError(ErrorType.RPC, "No services exist in datastore")
-                .buildFuture();
-        }
-
-        Map<ServiceKey, Service> serviceMap = new HashMap<>();
-        for (ConnectivityService connectivityService: connMap.values()) {
-            Service service = new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.get.connectivity.service.list.output.ServiceBuilder(
-                    connectivityService).build();
-            serviceMap.put(service.key(), service);
-        }
-        return RpcResultBuilder.success(new GetConnectivityServiceListOutputBuilder().setService(serviceMap)
-            .build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetConnectionEndPointDetailsOutput>> getConnectionEndPointDetails(
-            GetConnectionEndPointDetailsInput input) {
-        // TODO Auto-generated method stub
-        Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName());
-        Uuid nodeUuid = getUuidFromIput(input.getNodeIdOrName());
-        Uuid nepUuid = getUuidFromIput(input.getNepIdOrName());
-        Uuid cepUuid = getUuidFromIput(input.getCepIdOrName());
-        ConnectionEndPoint cep = this.tapiContext.getTapiCEP(topoUuid, nodeUuid, nepUuid, cepUuid);
-        if (cep == null) {
-            LOG.error("Cep doesnt exist in tapi context");
-            return RpcResultBuilder.<GetConnectionEndPointDetailsOutput>failed()
-                .withError(ErrorType.RPC, "No cep with given Uuid exists in datastore")
-                .buildFuture();
-        }
-        return RpcResultBuilder.success(new GetConnectionEndPointDetailsOutputBuilder().setConnectionEndPoint(
-            new ConnectionEndPointBuilder(cep).build()).build()).buildFuture();
-    }
-
-    private Uuid getUuidFromIput(String serviceIdOrName) {
-        try {
-            UUID.fromString(serviceIdOrName);
-            LOG.info("Given attribute {} is a UUID", serviceIdOrName);
-            return new Uuid(serviceIdOrName);
-        } catch (IllegalArgumentException e) {
-            LOG.info("Given attribute {} is not a UUID", serviceIdOrName);
-            return new Uuid(UUID.nameUUIDFromBytes(serviceIdOrName.getBytes(StandardCharsets.UTF_8)).toString());
-        }
-    }
-}
index dc03a1f3e0c0c2933003a51d5bff7381036b5dea..f5cb9dd76c2efdc07011114fa9ab90c3d83f30fb 100644 (file)
@@ -15,47 +15,48 @@ import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.InstanceIdentifiers;
 import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
-import org.opendaylight.transportpce.tapi.connectivity.TapiConnectivityImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.CreateConnectivityServiceImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.DeleteConnectivityServiceImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectionDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectivityServiceDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectivityServiceListImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetLinkDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeEdgePointDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointListImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyListImpl;
+import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelNotificationHandler;
+import org.opendaylight.transportpce.tapi.listeners.TapiPceNotificationHandler;
+import org.opendaylight.transportpce.tapi.listeners.TapiRendererNotificationHandler;
+import org.opendaylight.transportpce.tapi.listeners.TapiServiceNotificationHandler;
 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
-import org.opendaylight.transportpce.tapi.topology.TapiTopologyImpl;
 import org.opendaylight.transportpce.tapi.topology.TopologyUtils;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
 import org.opendaylight.transportpce.tapi.utils.TapiInitialORMapping;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
 import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.TransportpceServicehandlerListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
 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.networks.NetworkKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TapiCommonService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.TapiTopologyService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.ServiceInterfacePoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.ServiceInterfacePoints;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
@@ -78,47 +79,34 @@ public class TapiProvider {
 
     private static final InstanceIdentifier<Nodes> MAPPING_II = InstanceIdentifier.create(Network.class)
         .child(org.opendaylight.yang.gen.v1.http
-            .org.opendaylight.transportpce.portmapping.rev220922.network.Nodes.class);
+            .org.opendaylight.transportpce.portmapping.rev231221.network.Nodes.class);
     private static final InstanceIdentifier<Link> LINK_II = InstanceIdentifier.create(Networks.class).child(
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network.class,
             new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))).augmentation(Network1.class)
         .child(Link.class);
     private final DataBroker dataBroker;
-    private final RpcProviderService rpcProviderService;
-    private final NotificationService notificationService;
     private final NetworkTransactionService networkTransactionService;
-    private final OrgOpenroadmServiceService serviceHandler;
     private final ServiceDataStoreOperations serviceDataStoreOperations;
-    private final TransportpceTapinetworkutilsService tapiNetworkUtils;
-    private TapiNotificationListener tapiNetworkModelListenerImpl;
-    private ObjectRegistration<TapiConnectivityService> rpcRegistration;
-    private ObjectRegistration<TransportpceTapinetworkutilsService> tapiNetworkutilsServiceRpcRegistration;
     private List<Registration> listeners;
-    private ListenerRegistration<TransportpcePceListener> pcelistenerRegistration;
-    private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
-    private ListenerRegistration<TransportpceServicehandlerListener> servicehandlerlistenerRegistration;
-    private ListenerRegistration<TapiNotificationListener> tapinetworkmodellistenerRegistration;
+    private Registration rpcRegistration;
+    private Registration pcelistenerRegistration;
+    private Registration rendererlistenerRegistration;
+    private Registration servicehandlerlistenerRegistration;
+    private Registration tapinetworkmodellistenerRegistration;
 
     @Activate
     public TapiProvider(@Reference DataBroker dataBroker,
             @Reference RpcProviderService rpcProviderService,
+            @Reference RpcService rpcService,
             @Reference NotificationService notificationService,
             @Reference NotificationPublishService notificationPublishService,
             @Reference NetworkTransactionService networkTransactionService,
-            @Reference OrgOpenroadmServiceService serviceHandler,
             @Reference ServiceDataStoreOperations serviceDataStoreOperations,
-            @Reference TransportpceTapinetworkutilsService tapiNetworkUtils,
-            @Reference TapiNotificationListener tapiNetworkModelListenerImpl,
+            @Reference TapiNetworkModelNotificationHandler tapiNetworkModelNotificationHandler,
             @Reference TapiNetworkModelService tapiNetworkModelServiceImpl) {
         this.dataBroker = dataBroker;
-        this.rpcProviderService = rpcProviderService;
-        this.notificationService = notificationService;
         this.networkTransactionService = networkTransactionService;
-        this.serviceHandler = serviceHandler;
         this.serviceDataStoreOperations = serviceDataStoreOperations;
-        this.tapiNetworkUtils = tapiNetworkUtils;
-        this.tapiNetworkModelListenerImpl = tapiNetworkModelListenerImpl;
-
         LOG.info("TapiProvider Session Initiated");
         TapiContext tapiContext = new TapiContext(this.networkTransactionService);
         LOG.info("Empty TAPI context created: {}", tapiContext.getTapiContext());
@@ -130,47 +118,52 @@ public class TapiProvider {
                 tapiContext, this.serviceDataStoreOperations);
         tapiInitialORMapping.performTopoInitialMapping();
         tapiInitialORMapping.performServInitialMapping();
-        TapiPceListenerImpl pceListenerImpl = new TapiPceListenerImpl(dataBroker);
-        TapiRendererListenerImpl rendererListenerImpl = new TapiRendererListenerImpl(dataBroker,
+        TapiPceNotificationHandler pceListenerImpl = new TapiPceNotificationHandler(dataBroker, connectivityUtils);
+        TapiRendererNotificationHandler rendererListenerImpl = new TapiRendererNotificationHandler(dataBroker,
                 notificationPublishService);
 
-        TapiConnectivityImpl tapi = new TapiConnectivityImpl(this.serviceHandler, tapiContext, connectivityUtils,
-                pceListenerImpl, rendererListenerImpl);
-        TapiTopologyImpl topo = new TapiTopologyImpl(this.dataBroker, tapiContext, topologyUtils, tapiLink);
-
-        rpcRegistration = rpcProviderService.registerRpcImplementation(TapiConnectivityService.class, tapi);
-        rpcProviderService.registerRpcImplementation(TapiTopologyService.class, topo);
-        rpcProviderService.registerRpcImplementation(TapiCommonService.class, topo);
+        rpcRegistration = rpcProviderService.registerRpcImplementations(
+                new CreateConnectivityServiceImpl(rpcService, tapiContext, connectivityUtils, pceListenerImpl,
+                        rendererListenerImpl),
+                new GetConnectivityServiceDetailsImpl(tapiContext),
+                new GetConnectionDetailsImpl(tapiContext),
+                new DeleteConnectivityServiceImpl(rpcService, tapiContext, networkTransactionService),
+                new GetConnectivityServiceListImpl(tapiContext),
+                new GetNodeDetailsImpl(tapiContext),
+                new GetTopologyDetailsImpl(tapiContext, topologyUtils, tapiLink, networkTransactionService),
+                new GetNodeEdgePointDetailsImpl(tapiContext),
+                new GetLinkDetailsImpl(tapiContext),
+                new GetTopologyListImpl(tapiContext),
+                new GetServiceInterfacePointDetailsImpl(tapiContext),
+                new GetServiceInterfacePointListImpl(tapiContext));
 
         this.listeners = new ArrayList<>();
         TapiNetconfTopologyListener topologyListener = new TapiNetconfTopologyListener(tapiNetworkModelServiceImpl);
         TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransactionService);
         TapiPortMappingListener tapiPortMappingListener = new TapiPortMappingListener(tapiNetworkModelServiceImpl);
-        listeners.add(dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, LINK_II), orLinkListener));
-        listeners.add(dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, InstanceIdentifiers.NETCONF_TOPOLOGY_II
+        listeners.add(dataBroker.registerTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, LINK_II), orLinkListener));
+        listeners.add(dataBroker.registerTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, InstanceIdentifiers.NETCONF_TOPOLOGY_II
                     .child(Node.class)),
                 topologyListener));
-        listeners.add(dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, MAPPING_II), tapiPortMappingListener));
-        tapiNetworkutilsServiceRpcRegistration =
-                rpcProviderService.registerRpcImplementation(TransportpceTapinetworkutilsService.class,
-                        this.tapiNetworkUtils);
+        listeners.add(dataBroker.registerTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, MAPPING_II), tapiPortMappingListener));
         TapiListener tapiListener = new TapiListener();
-        listeners.add(dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(
+        listeners.add(dataBroker.registerTreeChangeListener(
+                DataTreeIdentifier.of(
                         LogicalDatastoreType.CONFIGURATION,
                         InstanceIdentifier.create(ServiceInterfacePoints.class)),
                 tapiListener));
         // Notification Listener
-        pcelistenerRegistration = notificationService.registerNotificationListener(pceListenerImpl);
-        rendererlistenerRegistration = notificationService.registerNotificationListener(rendererListenerImpl);
-        TapiServiceHandlerListenerImpl serviceHandlerListenerImpl = new TapiServiceHandlerListenerImpl(dataBroker);
+        pcelistenerRegistration = notificationService.registerCompositeListener(pceListenerImpl.getCompositeListener());
+        rendererlistenerRegistration = notificationService
+            .registerCompositeListener(rendererListenerImpl.getCompositeListener());
+        TapiServiceNotificationHandler serviceHandlerListenerImpl = new TapiServiceNotificationHandler(dataBroker);
         servicehandlerlistenerRegistration = notificationService
-            .registerNotificationListener(serviceHandlerListenerImpl);
+            .registerCompositeListener(serviceHandlerListenerImpl.getCompositeListener());
         tapinetworkmodellistenerRegistration = notificationService
-            .registerNotificationListener(tapiNetworkModelListenerImpl);
+            .registerCompositeListener(tapiNetworkModelNotificationHandler.getCompositeListener());
     }
 
     /**
@@ -180,14 +173,16 @@ public class TapiProvider {
     public void close() {
         listeners.forEach(lis -> lis.close());
         listeners.clear();
-        if (tapiNetworkutilsServiceRpcRegistration != null) {
-            tapiNetworkutilsServiceRpcRegistration.close();
-        }
         pcelistenerRegistration.close();
         rendererlistenerRegistration.close();
         servicehandlerlistenerRegistration.close();
-        rpcRegistration.close();
         tapinetworkmodellistenerRegistration.close();
+        rpcRegistration.close();
         LOG.info("TapiProvider Session Closed");
     }
+
+    public Registration getRegisteredRpcs() {
+        return rpcRegistration;
+    }
+
 }
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/CreateConnectivityServiceImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/CreateConnectivityServiceImpl.java
new file mode 100644 (file)
index 0000000..317a079
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.binding.api.RpcService;
+import org.opendaylight.transportpce.common.OperationResult;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
+import org.opendaylight.transportpce.tapi.listeners.TapiPceNotificationHandler;
+import org.opendaylight.transportpce.tapi.listeners.TapiRendererNotificationHandler;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.transportpce.tapi.validation.CreateConnectivityServiceValidation;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
+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.ForwardingDirection;
+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.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.TotalSizeBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ServiceType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectivityConstraintBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.CapacityBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.ServiceInterfacePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.output.ServiceBuilder;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class CreateConnectivityServiceImpl implements CreateConnectivityService {
+    private static final Logger LOG = LoggerFactory.getLogger(CreateConnectivityServiceImpl.class);
+
+    private final RpcService rpcService;
+    private final TapiContext tapiContext;
+    private final ConnectivityUtils connectivityUtils;
+    private TapiPceNotificationHandler pceListenerImpl;
+    private TapiRendererNotificationHandler rendererListenerImpl;
+
+    public CreateConnectivityServiceImpl(RpcService rpcService, TapiContext tapiContext,
+            ConnectivityUtils connectivityUtils, TapiPceNotificationHandler pceListenerImpl,
+            TapiRendererNotificationHandler rendererListenerImpl) {
+        this.rpcService = rpcService;
+        this.tapiContext = tapiContext;
+        this.connectivityUtils = connectivityUtils;
+        this.pceListenerImpl = pceListenerImpl;
+        this.rendererListenerImpl = rendererListenerImpl;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<CreateConnectivityServiceOutput>> invoke(CreateConnectivityServiceInput input) {
+        // TODO: later version of TAPI models include Name as an input parameter in connectivity.yang
+        LOG.info("RPC create-connectivity received: {}", input.getEndPoint());
+        Uuid serviceUuid = new Uuid(UUID.randomUUID().toString());
+        this.pceListenerImpl.setInput(input);
+        this.pceListenerImpl.setServiceUuid(serviceUuid);
+        this.rendererListenerImpl.setServiceUuid(serviceUuid);
+        OperationResult validationResult =
+            CreateConnectivityServiceValidation.validateCreateConnectivityServiceRequest(input);
+        if (!validationResult.isSuccess()) {
+            return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
+                .withError(ErrorType.RPC, "Failed to create service")
+                .buildFuture();
+        }
+        LOG.info("input parameter of RPC create-connectivity are being handled");
+        // check uuid of SIP in tapi context
+        Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap =
+                this.tapiContext.getTapiContext().getServiceInterfacePoint();
+        if (sipMap == null) {
+            return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
+                .withError(ErrorType.RPC, "SIP list is empty")
+                .buildFuture();
+        }
+        if (!sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().findFirst()
+                    .orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))
+                || !sipMap.containsKey(new ServiceInterfacePointKey(input.getEndPoint().values().stream().skip(1)
+                    .findFirst().orElseThrow().getServiceInterfacePoint().getServiceInterfacePointUuid()))) {
+            LOG.error("Unknown UUID");
+            return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
+                .withError(ErrorType.RPC, "SIPs do not exist in tapi context")
+                .buildFuture();
+        }
+        LOG.info("SIPs found in sipMap");
+        // TODO: differentiate between OTN service and GbE service in TAPI
+        ServiceCreateInput sci = this.connectivityUtils.createORServiceInput(input, serviceUuid);
+        if (sci == null) {
+            return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
+                .withError(ErrorType.RPC, "Couldnt map Service create input")
+                .buildFuture();
+        }
+        LOG.info("Service Create input = {}", sci);
+        ListenableFuture<RpcResult<ServiceCreateOutput>> output = rpcService.getRpc(ServiceCreate.class).invoke(sci);
+        if (!output.isDone()) {
+            return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
+                .withError(ErrorType.RPC, "Service create RPC failed")
+                .buildFuture();
+        }
+        LOG.info("Service create request was successful");
+        try {
+            if (output.get().getResult().getConfigurationResponseCommon().getResponseCode()
+                    .equals(ResponseCodes.RESPONSE_FAILED)) {
+                return RpcResultBuilder.<CreateConnectivityServiceOutput>failed()
+                    .withError(ErrorType.RPC, "Failed to create service")
+                    .buildFuture();
+            }
+            LOG.info("Output of service request = {}", output.get().getResult());
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Error checking response code of service create", e);
+        }
+        // Connections and states should be created/updated when the pce and renderer are done :)
+        Name name = new NameBuilder()
+            .setValueName("Connectivity Service Name")
+            .setValue(serviceUuid.getValue())
+            .build();
+        ConnectivityService service = new ConnectivityServiceBuilder()
+            .setUuid(serviceUuid)
+            .setAdministrativeState(AdministrativeState.LOCKED)
+            .setOperationalState(OperationalState.DISABLED)
+            .setLifecycleState(LifecycleState.PLANNED)
+            .setLayerProtocolName(input.getLayerProtocolName())
+            .setConnectivityConstraint(
+                new ConnectivityConstraintBuilder()
+                    .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY)
+                    .setServiceLevel(input.getConnectivityConstraint().getServiceLevel())
+                    .build())
+            .setDirection(ForwardingDirection.BIDIRECTIONAL)
+            .setName(Map.of(name.key(), name))
+            .setConnection(new HashMap<>())
+            .setEndPoint(createEndPoints(input.getEndPoint()))
+            .build();
+        // add to tapi context
+        this.tapiContext.updateConnectivityContext(Map.of(service.key(), service), new HashMap<>());
+        LOG.info("Created locked service in Datastore. Waiting for PCE and Renderer to complete tasks...");
+        // return ConnectivityServiceCreateOutput
+        return RpcResultBuilder.success(
+                new CreateConnectivityServiceOutputBuilder()
+                    .setService(new ServiceBuilder(service).build())
+                    .build())
+            .buildFuture();
+    }
+
+    private Map<EndPointKey, EndPoint> createEndPoints(
+            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .create.connectivity.service.input.EndPointKey,
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                    .create.connectivity.service.input.EndPoint> endPoints) {
+        Map<EndPointKey, EndPoint> endPointMap = new HashMap<>();
+        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                .create.connectivity.service.input.EndPoint ep: endPoints.values()) {
+            EndPoint endpoint = new EndPointBuilder()
+                .setServiceInterfacePoint(
+                    new ServiceInterfacePointBuilder()
+                        .setServiceInterfacePointUuid(ep.getServiceInterfacePoint().getServiceInterfacePointUuid())
+                        .build())
+                .setName(ep.getName())
+                .setAdministrativeState(ep.getAdministrativeState())
+                .setDirection(ep.getDirection())
+                .setLifecycleState(ep.getLifecycleState())
+                .setOperationalState(ep.getOperationalState())
+                .setLayerProtocolName(ep.getLayerProtocolName())
+                .setCapacity(new CapacityBuilder()
+                    .setTotalSize(new TotalSizeBuilder().build())
+                // TODO: implement bandwidth profile //.setBandwidthProfile(new BandwidthProfileBuilder().build())
+                    .build())
+                .setProtectionRole(ep.getProtectionRole())
+                .setRole(ep.getRole())
+                .setLocalId(ep.getLocalId())
+                .build();
+            endPointMap.put(endpoint.key(), endpoint);
+        }
+        return endPointMap;
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/DeleteConnectivityServiceImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/DeleteConnectivityServiceImpl.java
new file mode 100644 (file)
index 0000000..34f7fbf
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.binding.api.RpcService;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.ResponseCodes;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDelete;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfo;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.delete.input.ServiceDeleteReqInfoBuilder;
+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.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.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceOutputBuilder;
+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.ConnectivityServiceKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DeleteConnectivityServiceImpl implements DeleteConnectivityService {
+    private static final Logger LOG = LoggerFactory.getLogger(DeleteConnectivityServiceImpl.class);
+
+    private final RpcService rpcService;
+    private final TapiContext tapiContext;
+    private final NetworkTransactionService networkTransactionService;
+
+    public DeleteConnectivityServiceImpl(RpcService rpcService, TapiContext tapiContext,
+            NetworkTransactionService networkTransactionService) {
+        this.rpcService = rpcService;
+        this.tapiContext = tapiContext;
+        this.networkTransactionService = networkTransactionService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> invoke(DeleteConnectivityServiceInput input) {
+        if (input.getUuid() == null) {
+            return RpcResultBuilder.<DeleteConnectivityServiceOutput>failed()
+                .withError(ErrorType.RPC, "Failed to delete Service, service uuid in input is null")
+                .buildFuture();
+        }
+        Uuid serviceUuid = input.getUuid();
+        List<String> serviceName;
+        try {
+            serviceName = getNameFromUuid(serviceUuid, "Service");
+        } catch (ExecutionException | NoSuchElementException e) {
+            LOG.error("Service {} to be deleted not found in the DataStore", serviceUuid, e);
+            return RpcResultBuilder.<DeleteConnectivityServiceOutput>failed()
+                    .withError(ErrorType.RPC, "Failed to delete Service")
+                    .buildFuture();
+        }
+        LOG.debug("The service {}, of name {} has been found in the DS", serviceUuid, serviceName);
+        try {
+            this.tapiContext.deleteConnectivityService(serviceUuid);
+            RpcResult<ServiceDeleteOutput> rpcResult =
+                rpcService.getRpc(ServiceDelete.class)
+                    .invoke(new ServiceDeleteInputBuilder()
+                            .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder()
+                                    .setServiceName(input.getUuid().getValue())
+                                    .setTailRetention(ServiceDeleteReqInfo.TailRetention.No)
+                                    .build())
+                            .setSdncRequestHeader(new SdncRequestHeaderBuilder()
+                                    .setRequestId("request-1")
+                                    .setNotificationUrl("notification url")
+                                    .setRequestSystemId("appname")
+                                    .setRpcAction(RpcActions.ServiceDelete)
+                                    .build())
+                            .build())
+                    .get();
+            if (rpcResult.getResult().getConfigurationResponseCommon().getResponseCode()
+                    .equals(ResponseCodes.RESPONSE_FAILED)) {
+                LOG.error("Failed to delete service. Deletion process failed");
+                return RpcResultBuilder.<DeleteConnectivityServiceOutput>failed()
+                    .withError(ErrorType.RPC, "Failed to delete Service, service uuid in input is null")
+                    .buildFuture();
+            }
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed to delete service.", e);
+            return RpcResultBuilder.<DeleteConnectivityServiceOutput>failed()
+                    .withError(ErrorType.RPC, "Failed to delete Service")
+                    .buildFuture();
+        }
+        LOG.info("Service is being deleted and devices are being rolled back");
+        return RpcResultBuilder.success(new DeleteConnectivityServiceOutputBuilder().build()).buildFuture();
+    }
+
+    public List<String> getNameFromUuid(Uuid uuid, String typeOfNode)
+            throws ExecutionException, NoSuchElementException {
+        if (!typeOfNode.equals("Service")) {
+            return new ArrayList<>();
+        }
+        InstanceIdentifier<ConnectivityService> nodeIID = InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class)
+                .child(ConnectivityContext.class)
+                .child(ConnectivityService.class, new ConnectivityServiceKey(uuid))
+                .build();
+        List<String> nameList = new ArrayList<>();
+        try {
+            Map<NameKey, Name> nameMap = this.networkTransactionService
+                .read(LogicalDatastoreType.OPERATIONAL, nodeIID)
+                .get().orElseThrow().getName();
+            for (Map.Entry<NameKey, Name> entry : nameMap.entrySet()) {
+                nameList.add(entry.getValue().getValue());
+            }
+            //TODO another structure (stream ?) might be more indicated here
+        } catch (InterruptedException e) {
+            LOG.error("GetNamefromUuid Interrupt exception: Service not in Datastore, Interruption of the process");
+            Thread.currentThread().interrupt();
+            // TODO: investigate on how to throw Interrupted exception (generate a check
+            // violation error)
+        } catch (ExecutionException e) {
+            throw new ExecutionException("Unable to get from mdsal service: "
+                    + nodeIID.firstKeyOf(ConnectivityService.class).getUuid().getValue(), e);
+        } catch (NoSuchElementException e) {
+            throw new NoSuchElementException("Unable to get from mdsal service: "
+                    + nodeIID.firstKeyOf(ConnectivityService.class).getUuid().getValue(), e);
+        }
+        LOG.debug("The service name of service {}, is {}", uuid, nameList);
+        return nameList;
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/DeleteTapiLinkImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/DeleteTapiLinkImpl.java
new file mode 100644 (file)
index 0000000..42b73e9
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.DeleteTapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.DeleteTapiLinkInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.DeleteTapiLinkOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.DeleteTapiLinkOutputBuilder;
+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.topology.rev221121.Context1;
+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.topology.Link;
+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.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class DeleteTapiLinkImpl implements DeleteTapiLink {
+    private static final Logger LOG = LoggerFactory.getLogger(DeleteTapiLinkImpl.class);
+
+    private TapiNetworkUtilsImpl tapiNetworkUtilsImpl;
+    private NetworkTransactionService networkTransactionService;
+
+    public DeleteTapiLinkImpl(TapiNetworkUtilsImpl tapiNetworkUtilsImpl,
+            NetworkTransactionService networkTransactionService) {
+        this.tapiNetworkUtilsImpl = tapiNetworkUtilsImpl;
+        this.networkTransactionService = networkTransactionService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<DeleteTapiLinkOutput>> invoke(DeleteTapiLinkInput input) {
+        // TODO: check if this IID is correct
+        // TODO --> need to check if the link exists in the topology
+        try {
+            InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class)
+                .child(TopologyContext.class)
+                .child(Topology.class, new TopologyKey(tapiNetworkUtilsImpl.getTapiTopoUuid()))
+                .child(Link.class, new LinkKey(input.getUuid()))
+                .build();
+            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, linkIID);
+            this.networkTransactionService.commit().get();
+            LOG.info("TAPI link deleted successfully.");
+            return RpcResultBuilder.success(new DeleteTapiLinkOutputBuilder()
+                .setResult("Link successfully deleted from tapi topology").build()).buildFuture();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed to delete TAPI link", e);
+            return RpcResultBuilder.<DeleteTapiLinkOutput>failed()
+                .withError(ErrorType.RPC, "Failed to delete link from topology")
+                .buildFuture();
+        }
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectionDetailsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectionDetailsImpl.java
new file mode 100644 (file)
index 0000000..27c3bd4
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+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.connectivity.rev221121.GetConnectionDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectionDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectionDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectionDetailsOutputBuilder;
+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.get.connection.details.output.ConnectionBuilder;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetConnectionDetailsImpl implements GetConnectionDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetConnectionDetailsImpl.class);
+
+    private final TapiContext tapiContext;
+
+    public GetConnectionDetailsImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetConnectionDetailsOutput>> invoke(GetConnectionDetailsInput input) {
+        // TODO Auto-generated method stub
+        Uuid connectionUuid = input.getUuid();
+        Connection connection = this.tapiContext.getConnection(connectionUuid);
+        if (connection == null) {
+            LOG.error("Connection {} doesnt exist in tapi context", input.getUuid());
+            return RpcResultBuilder.<GetConnectionDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Connection doesnt exist in datastore")
+                .buildFuture();
+        }
+        return RpcResultBuilder.success(new GetConnectionDetailsOutputBuilder().setConnection(
+                new ConnectionBuilder(connection).build()).build()).buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectivityServiceDetailsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectivityServiceDetailsImpl.java
new file mode 100644 (file)
index 0000000..6d5066b
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+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.connectivity.rev221121.GetConnectivityServiceDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectivityServiceDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectivityServiceDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectivityServiceDetailsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetConnectivityServiceDetailsImpl implements GetConnectivityServiceDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetConnectivityServiceDetailsImpl.class);
+
+    private final TapiContext tapiContext;
+
+    public GetConnectivityServiceDetailsImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+
+    @Override
+    public ListenableFuture<RpcResult<GetConnectivityServiceDetailsOutput>> invoke(
+            GetConnectivityServiceDetailsInput input) {
+        // TODO Auto-generated method stub
+        Uuid serviceUuid = input.getUuid();
+        ConnectivityService service = this.tapiContext.getConnectivityService(serviceUuid);
+        if (service == null) {
+            LOG.error("Service {} doesnt exist in tapi context", input.getUuid());
+            return RpcResultBuilder.<GetConnectivityServiceDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Service doesnt exist in datastore")
+                .buildFuture();
+        }
+        return RpcResultBuilder.success(new GetConnectivityServiceDetailsOutputBuilder().setService(
+            new org.opendaylight.yang.gen.v1.urn
+                .onf.otcc.yang.tapi.connectivity.rev221121.get.connectivity.service.details.output.ServiceBuilder(
+                    service).build()).build()).buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectivityServiceListImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetConnectivityServiceListImpl.java
new file mode 100644 (file)
index 0000000..724cae4
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.HashMap;
+import java.util.Map;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectivityServiceList;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectivityServiceListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectivityServiceListOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.GetConnectivityServiceListOutputBuilder;
+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.ConnectivityServiceKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.get.connectivity.service.list.output.Service;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.get.connectivity.service.list.output.ServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.get.connectivity.service.list.output.ServiceKey;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetConnectivityServiceListImpl implements GetConnectivityServiceList {
+    private static final Logger LOG = LoggerFactory.getLogger(GetConnectivityServiceListImpl.class);
+
+    private final TapiContext tapiContext;
+
+    public GetConnectivityServiceListImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetConnectivityServiceListOutput>> invoke(GetConnectivityServiceListInput input) {
+        // TODO Auto-generated method stub
+        Map<ConnectivityServiceKey, ConnectivityService> connMap = this.tapiContext.getConnectivityServices();
+        if (connMap == null) {
+            LOG.error("No services in tapi context");
+            return RpcResultBuilder.<GetConnectivityServiceListOutput>failed()
+                .withError(ErrorType.RPC, "No services exist in datastore")
+                .buildFuture();
+        }
+
+        Map<ServiceKey, Service> serviceMap = new HashMap<>();
+        for (ConnectivityService connectivityService: connMap.values()) {
+            Service service = new ServiceBuilder(connectivityService).build();
+            serviceMap.put(service.key(), service);
+        }
+        return RpcResultBuilder
+            .success(new GetConnectivityServiceListOutputBuilder().setService(serviceMap).build())
+            .buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetLinkDetailsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetLinkDetailsImpl.java
new file mode 100644 (file)
index 0000000..ba2240b
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetLinkDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetLinkDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetLinkDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetLinkDetailsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.link.details.output.LinkBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetLinkDetailsImpl implements GetLinkDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetLinkDetailsImpl.class);
+    private final TapiContext tapiContext;
+
+    public GetLinkDetailsImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetLinkDetailsOutput>> invoke(GetLinkDetailsInput input) {
+        // TODO Auto-generated method stub
+        // Link id: same as OR link id
+        Link link = this.tapiContext.getTapiLink(input.getTopologyId(), input.getLinkId());
+        if (link == null) {
+            LOG.error("Invalid TAPI link name");
+            return RpcResultBuilder.<GetLinkDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Invalid Link name")
+                .buildFuture();
+        }
+        LOG.info("debug link is : {}", link.getName());
+        return RpcResultBuilder
+                .success(new GetLinkDetailsOutputBuilder().setLink(new LinkBuilder(link).build()).build())
+                .buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetNodeDetailsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetNodeDetailsImpl.java
new file mode 100644 (file)
index 0000000..80cf31d
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetailsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.node.details.output.NodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetNodeDetailsImpl implements GetNodeDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetNodeDetailsImpl.class);
+    private final TapiContext tapiContext;
+
+    public GetNodeDetailsImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNodeDetailsOutput>> invoke(GetNodeDetailsInput input) {
+        // TODO Auto-generated method stub
+        // TODO -> maybe we get errors when having CEPs?
+        // Node id: if roadm -> ROADM+PHOTONIC_MEDIA. if xpdr -> XPDR-XPDR+DSR/OTSi
+        Node node = this.tapiContext.getTapiNode(input.getTopologyId(), input.getNodeId());
+        if (node == null) {
+            LOG.error("Invalid TAPI node name");
+            return RpcResultBuilder.<GetNodeDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Invalid Tapi Node name")
+                .buildFuture();
+        }
+        return RpcResultBuilder
+            .success(new GetNodeDetailsOutputBuilder()
+                .setNode(new NodeBuilder(node).build())
+                .build())
+            .buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetNodeEdgePointDetailsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetNodeEdgePointDetailsImpl.java
new file mode 100644 (file)
index 0000000..f26606f
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetailsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.node.edge.point.details.output.NodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetNodeEdgePointDetailsImpl implements GetNodeEdgePointDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetNodeEdgePointDetailsImpl.class);
+    private final TapiContext tapiContext;
+
+    public GetNodeEdgePointDetailsImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetNodeEdgePointDetailsOutput>> invoke(GetNodeEdgePointDetailsInput input) {
+        // TODO Auto-generated method stub
+        // TODO -> maybe we get errors when having CEPs?
+        // Node id: if roadm -> ROADMid+PHOTONIC_MEDIA. if xpdr -> XPDRid-XPDRnbr+DSR/OTSi
+        // NEP id: if roadm -> ROADMid+PHOTONIC_MEDIA/MC/OTSiMC+TPid.
+        // if xpdr -> XPDRid-XPDRnbr+DSR/eODU/iODU/iOTSi/eOTSi/PHOTONIC_MEDIA+TPid
+        OwnedNodeEdgePoint nep =
+            this.tapiContext.getTapiNEP(input.getTopologyId(), input.getNodeId(), input.getNodeEdgePointId());
+        if (nep == null) {
+            LOG.error("Invalid TAPI nep name");
+            return RpcResultBuilder.<GetNodeEdgePointDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Invalid NEP name")
+                .buildFuture();
+        }
+        return RpcResultBuilder
+                .success(new GetNodeEdgePointDetailsOutputBuilder()
+                        .setNodeEdgePoint(new NodeEdgePointBuilder(nep).build())
+                        .build())
+                .buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetServiceInterfacePointDetailsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetServiceInterfacePointDetailsImpl.java
new file mode 100644 (file)
index 0000000..fc10f05
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Map;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetailsOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.get.service._interface.point.details.output.SipBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetServiceInterfacePointDetailsImpl implements GetServiceInterfacePointDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetServiceInterfacePointDetailsImpl.class);
+    private final TapiContext tapiContext;
+
+    public GetServiceInterfacePointDetailsImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetServiceInterfacePointDetailsOutput>> invoke(
+            GetServiceInterfacePointDetailsInput input) {
+        Map<ServiceInterfacePointKey, ServiceInterfacePoint> sips =
+            this.tapiContext.getTapiContext().getServiceInterfacePoint();
+        if (sips == null || sips.isEmpty()) {
+            return RpcResultBuilder.<GetServiceInterfacePointDetailsOutput>failed()
+                .withError(ErrorType.RPC, "No sips in datastore")
+                .buildFuture();
+        }
+        var sipKey = new ServiceInterfacePointKey(input.getUuid());
+        if (!sips.containsKey(sipKey)) {
+            return RpcResultBuilder.<GetServiceInterfacePointDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Sip doesnt exist in datastore")
+                .buildFuture();
+        }
+        return RpcResultBuilder
+                .success(new GetServiceInterfacePointDetailsOutputBuilder()
+                    .setSip(new SipBuilder(sips.get(sipKey)).build())
+                    .build())
+                .buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetServiceInterfacePointListImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetServiceInterfacePointListImpl.java
new file mode 100644 (file)
index 0000000..5cfe7f1
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.HashMap;
+import java.util.Map;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointList;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointListOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointListOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.get.service._interface.point.list.output.Sip;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.get.service._interface.point.list.output.SipBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.get.service._interface.point.list.output.SipKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetServiceInterfacePointListImpl implements GetServiceInterfacePointList {
+    private static final Logger LOG = LoggerFactory.getLogger(GetServiceInterfacePointListImpl.class);
+    private final TapiContext tapiContext;
+
+    public GetServiceInterfacePointListImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetServiceInterfacePointListOutput>> invoke(
+            GetServiceInterfacePointListInput input) {
+        Map<ServiceInterfacePointKey, ServiceInterfacePoint> sips =
+                this.tapiContext.getTapiContext().getServiceInterfacePoint();
+        if (sips == null || sips.isEmpty()) {
+            return RpcResultBuilder.<GetServiceInterfacePointListOutput>failed()
+                .withError(ErrorType.RPC, "No sips in datastore")
+                .buildFuture();
+        }
+        Map<SipKey, Sip> outSipMap = new HashMap<>();
+        for (ServiceInterfacePoint sip : sips.values()) {
+            Sip si = new SipBuilder(sip).build();
+            outSipMap.put(si.key(), si);
+        }
+        return RpcResultBuilder
+            .success(new GetServiceInterfacePointListOutputBuilder().setSip(outSipMap).build())
+            .buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetTopologyDetailsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetTopologyDetailsImpl.java
new file mode 100644 (file)
index 0000000..7395f96
--- /dev/null
@@ -0,0 +1,459 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.InstanceIdentifiers;
+import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.transportpce.tapi.topology.ConvertORToTapiTopology;
+import org.opendaylight.transportpce.tapi.topology.ConvertORTopoToTapiTopo;
+import org.opendaylight.transportpce.tapi.topology.ConvertTapiTopoToAbstracted;
+import org.opendaylight.transportpce.tapi.topology.TapiTopologyException;
+import org.opendaylight.transportpce.tapi.topology.TopologyUtils;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
+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.networks.network.Link;
+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.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.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.ServiceInterfacePointKey;
+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.GetTopologyDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsOutputBuilder;
+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.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.OwnedNodeEdgePointKey;
+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.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.topology.LinkKey;
+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.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetTopologyDetailsImpl implements GetTopologyDetails {
+    private static final Logger LOG = LoggerFactory.getLogger(GetTopologyDetailsImpl.class);
+
+    private final TapiContext tapiContext;
+    private final TopologyUtils topologyUtils;
+    private final TapiLink tapiLink;
+    private final NetworkTransactionService networkTransactionService;
+    private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
+
+    public GetTopologyDetailsImpl(TapiContext tapiContext, TopologyUtils topologyUtils, TapiLink tapiLink,
+            NetworkTransactionService networkTransactionService) {
+        this.tapiContext = tapiContext;
+        this.topologyUtils = topologyUtils;
+        this.tapiLink = tapiLink;
+        this.tapiSips = new HashMap<>();
+        this.networkTransactionService = networkTransactionService;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetTopologyDetailsOutput>> invoke(GetTopologyDetailsInput input) {
+        var topoId = input.getTopologyId();
+        Uuid topologyUuidFull = new Uuid(UUID.nameUUIDFromBytes(
+                TapiStringConstants.T0_FULL_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+            .toString());
+        if (topologyUuidFull.equals(topoId)) {
+            Map<TopologyKey, Topology> topologyMap =
+                this.tapiContext.getTapiContext().augmentation(Context1.class).getTopologyContext().getTopology();
+            if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuidFull))) {
+                LOG.error("Topology {} not found in datastore", topoId);
+                return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+                    .withError(ErrorType.RPC, "Invalid Topology name")
+                    .buildFuture();
+            }
+            return RpcResultBuilder
+                .success(
+                    new GetTopologyDetailsOutputBuilder()
+                        .setTopology(
+                            this.topologyUtils.transformTopology(
+                                topologyMap.get(new TopologyKey(topoId))))
+                        .build())
+                .buildFuture();
+        }
+        if (new Uuid(UUID.nameUUIDFromBytes(
+                        TapiStringConstants.T0_TAPI_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+                    .toString())
+                .equals(topoId)) {
+            try {
+                LOG.info("Building TAPI Topology abstraction for {}", topoId);
+                return RpcResultBuilder
+                    .success(
+                        new GetTopologyDetailsOutputBuilder()
+                            .setTopology(this.topologyUtils.transformTopology(createAbsTopologyFromTapiTopo()))
+                            .build())
+                    .buildFuture();
+            } catch (TapiTopologyException e) {
+                LOG.error("error building TAPI topology");
+                return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+                    .withError(ErrorType.RPC, "Error building topology")
+                    .buildFuture();
+            }
+        }
+        try {
+            if (new Uuid(UUID.nameUUIDFromBytes(
+                            TapiStringConstants.T0_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+                        .toString())
+                    .equals(topoId)) {
+                LOG.info("Building TAPI Topology abstraction for {}", topoId);
+                return RpcResultBuilder
+                    .success(
+                        new GetTopologyDetailsOutputBuilder()
+                            .setTopology(this.topologyUtils.transformTopology(createAbstractedOtnTopology()))
+                            .build())
+                    .buildFuture();
+            }
+            if (new Uuid(UUID.nameUUIDFromBytes(
+                            TapiStringConstants.TPDR_100G.getBytes(Charset.forName("UTF-8")))
+                        .toString())
+                    .equals(topoId)) {
+                LOG.info("Building TAPI Topology abstraction for {}", topoId);
+                return RpcResultBuilder
+                    .success(
+                        new GetTopologyDetailsOutputBuilder()
+                            .setTopology(
+                                this.topologyUtils.transformTopology(
+                                    createAbstracted100GTpdrTopology(createAbstractedOtnTopology())))
+                            .build())
+                    .buildFuture();
+            }
+            return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Invalid Topology name")
+                .buildFuture();
+        } catch (TapiTopologyException e) {
+            LOG.error("error building TAPI topology");
+            return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
+                .withError(ErrorType.RPC, "Error building topology")
+                .buildFuture();
+        }
+    }
+
+    public Topology createAbstracted100GTpdrTopology(Topology topology) {
+        List<OwnedNodeEdgePoint> nep100GTpdrList = new ArrayList<>();
+        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node2 :
+                topology.nonnullNode().values().stream()
+                    .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+                    .collect(Collectors.toList())) {
+            List<OwnedNodeEdgePoint> nepList = node2.getOwnedNodeEdgePoint().values().stream()
+                    .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr")))
+                    .collect(Collectors.toList());
+            nep100GTpdrList.addAll(nepList);
+        }
+        Name topoName = new NameBuilder()
+                .setValue(TapiStringConstants.TPDR_100G)
+                .setValueName("TAPI Topology Name")
+                .build();
+        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(
+                TapiStringConstants.TPDR_100G.getBytes(Charset.forName("UTF-8")))
+            .toString());
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node =
+            createTapiNode(nep100GTpdrList, topoUuid);
+        return new TopologyBuilder()
+            .setName(Map.of(topoName.key(), topoName))
+            .setUuid(topoUuid)
+            .setNode(Map.of(node.key(), node))
+            .setLayerProtocolName(Set.of(LayerProtocolName.DSR, LayerProtocolName.ETH))
+            .build();
+    }
+
+    public Topology createAbstractedOtnTopology() throws TapiTopologyException {
+        // read openroadm-topology
+        Network openroadmTopo = readTopology(InstanceIdentifiers.OVERLAY_NETWORK_II);
+        List<Link> linkList = new ArrayList<>();
+        if (openroadmTopo.augmentation(Network1.class) != null) {
+            linkList.addAll(openroadmTopo.augmentation(Network1.class).getLink().values());
+        }
+        List<Link> xponderOutLinkList = linkList.stream()
+                .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT))
+                .collect(Collectors.toList());
+        List<Link> xponderInLinkList = linkList.stream()
+                .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDERINPUT))
+                .collect(Collectors.toList());
+        // read otn-topology
+        Network otnTopo = readTopology(InstanceIdentifiers.OTN_NETWORK_II);
+        Map<NodeId, Node> otnNodeMap = otnTopo.nonnullNode().values().stream()
+                .collect(Collectors.toMap(Node::getNodeId, node -> node));
+
+        Map<String, List<String>> networkPortMap = new HashMap<>();
+        Iterator<Entry<NodeId, Node>> itOtnNodeMap = otnNodeMap.entrySet().iterator();
+        while (itOtnNodeMap.hasNext()) {
+            Entry<NodeId, Node> entry = itOtnNodeMap.next();
+            String portMappingNodeId = entry.getValue().getSupportingNode().values().stream()
+                    .filter(sn -> sn.getNetworkRef().getValue().equals(NetworkUtils.UNDERLAY_NETWORK_ID))
+                    .findFirst()
+                    .orElseThrow().getNodeRef().getValue();
+            List<String> networkPortList = new ArrayList<>();
+            for (TerminationPoint tp : entry.getValue().augmentation(Node1.class).getTerminationPoint().values()) {
+                if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)
+                        && checkTp(entry.getKey().getValue(), portMappingNodeId, tp, xponderOutLinkList,
+                                xponderInLinkList)) {
+                    networkPortList.add(tp.getTpId().getValue());
+                }
+            }
+            if (!networkPortList.isEmpty()) {
+                networkPortMap.put(entry.getKey().getValue(), networkPortList);
+            }
+        }
+        Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodeList
+                = new HashMap<>();
+        Map<LinkKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link> tapiLinkList
+                = new HashMap<>();
+        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(
+                TapiStringConstants.T0_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+            .toString());
+        ConvertORTopoToTapiTopo tapiAbstractFactory = new ConvertORTopoToTapiTopo(topoUuid, this.tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topoUuid);
+        Iterator<Entry<String, List<String>>> it = networkPortMap.entrySet().iterator();
+        while (it.hasNext()) {
+            String nodeId = it.next().getKey();
+            tapiFactory.convertNode(otnNodeMap.get(new NodeId(nodeId)), networkPortMap.get(nodeId));
+            tapiAbstractFactory.setTapiNodes(tapiFactory.getTapiNodes());
+            tapiAbstractFactory.setTapiSips(tapiFactory.getTapiSips());
+            tapiNodeList.putAll(tapiAbstractFactory.getTapiNodes());
+            tapiLinkList.putAll(tapiAbstractFactory.getTapiLinks());
+        }
+        if (openroadmTopo.nonnullNode().values().stream().filter(nt -> nt
+                .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
+                .getNodeType().equals(OpenroadmNodeType.SRG)).count() > 0) {
+            tapiAbstractFactory.convertRoadmInfrastructure();
+            tapiNodeList.putAll(tapiAbstractFactory.getTapiNodes());
+            tapiLinkList.putAll(tapiAbstractFactory.getTapiLinks());
+        } else {
+            LOG.warn("Unable to abstract an ROADM infrasctructure from openroadm-topology");
+        }
+        if (otnTopo.augmentation(Network1.class) != null) {
+            tapiAbstractFactory.convertLinks(otnTopo.augmentation(Network1.class).getLink());
+            tapiLinkList.putAll(tapiAbstractFactory.getTapiLinks());
+        }
+        Name name = new NameBuilder().setValue(
+                TapiStringConstants.T0_MULTILAYER).setValueName("TAPI Topology Name")
+            .build();
+        LOG.info("TOPOABSTRACTED : the list of node is as follows {}", tapiNodeList);
+        this.tapiSips.putAll(tapiAbstractFactory.getTapiSips());
+        return new TopologyBuilder()
+            .setName(Map.of(name.key(), name))
+            .setUuid(topoUuid)
+            .setNode(tapiNodeList)
+            .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.DIGITALOTN))
+            .setLink(tapiLinkList)
+            .build();
+    }
+
+    public Topology createAbsTopologyFromTapiTopo() throws TapiTopologyException {
+        Uuid refTopoUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.T0_FULL_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+            .toString());
+        Topology tapiFullTopo =
+            this.tapiContext
+                .getTopologyContext().entrySet().stream().filter(topo -> topo.getKey().getUuid().equals(refTopoUuid))
+                .findAny().orElseThrow().getValue();
+        ConvertTapiTopoToAbstracted absTapiTopo = new ConvertTapiTopoToAbstracted(refTopoUuid);
+        absTapiTopo.setTapiLinks(tapiFullTopo.getLink());
+        absTapiTopo.setTapiNodes(tapiFullTopo.getNode());
+        absTapiTopo.convertRoadmInfrastructure();
+
+        Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
+            tapiNodeList = new HashMap<>(absTapiTopo.getTapiNodes());
+        LOG.info("ABSTRACTED TAPI TOPOLOGY : the list of node is as follows {}", tapiNodeList);
+        Name name = new NameBuilder()
+            .setValue(TapiStringConstants.T0_MULTILAYER)
+            .setValueName("TAPI Topology Name")
+            .build();
+        return new TopologyBuilder()
+            .setName(Map.of(name.key(), name))
+            .setUuid(
+                new Uuid(UUID.nameUUIDFromBytes(
+                        TapiStringConstants.T0_TAPI_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+                    .toString()))
+            .setNode(tapiNodeList)
+            .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.DIGITALOTN))
+            .setLink(new HashMap<>(absTapiTopo.getTapiLinks()))
+            .build();
+    }
+
+    private Network readTopology(InstanceIdentifier<Network> networkIID) throws TapiTopologyException {
+        Network topology = null;
+        ListenableFuture<Optional<Network>> topologyFuture = networkTransactionService
+                .read(LogicalDatastoreType.CONFIGURATION, networkIID);
+        try {
+            topology = topologyFuture.get().orElseThrow();
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new TapiTopologyException("Unable to get from mdsal topology: "
+                    + networkIID.firstKeyOf(Network.class).getNetworkId().getValue(), e);
+        } catch (ExecutionException e) {
+            throw new TapiTopologyException("Unable to get from mdsal topology: "
+                    + networkIID.firstKeyOf(Network.class).getNetworkId().getValue(), e);
+        }
+        return topology;
+    }
+
+    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node createTapiNode(
+            List<OwnedNodeEdgePoint> nepList, Uuid topoUuid) {
+        Name name = new NameBuilder().setValueName("Tpdr100g node name").setValue("Tpdr100g over WDM node").build();
+        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
+        for (OwnedNodeEdgePoint ownedNodeEdgePoint : nepList) {
+            onepMap.put(ownedNodeEdgePoint.key(), ownedNodeEdgePoint);
+        }
+        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(name.getValue().getBytes(Charset.forName("UTF-8"))).toString());
+        return new NodeBuilder()
+                .setUuid(nodeUuid)
+                .setName(Map.of(name.key(), name))
+                .setLayerProtocolName(Set.of(LayerProtocolName.ETH))
+                .setAdministrativeState(AdministrativeState.UNLOCKED)
+                .setOperationalState(OperationalState.ENABLED)
+                .setLifecycleState(LifecycleState.INSTALLED)
+                .setOwnedNodeEdgePoint(onepMap)
+                .setNodeRuleGroup(createNodeRuleGroupFor100gTpdrNode(topoUuid, nodeUuid, nepList))
+                .build();
+    }
+
+    private boolean checkTp(
+            String nodeIdTopo, String nodeIdPortMap, TerminationPoint tp, List<Link> xpdOut, List<Link> xpdIn) {
+        String networkLcp =
+            tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERCLIENT)
+                ? tp.augmentation(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1.class)
+                    .getAssociatedConnectionMapTp().iterator().next().getValue()
+                : tp.getTpId().getValue();
+        ListenableFuture<Optional<Mapping>> mappingOpt =
+            networkTransactionService.read(
+                LogicalDatastoreType.CONFIGURATION,
+                InstanceIdentifier.create(
+                    org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network.class)
+                        .child(Nodes.class, new NodesKey(nodeIdPortMap))
+                        .child(Mapping.class, new MappingKey(networkLcp)));
+        if (!mappingOpt.isDone()) {
+            LOG.error("Impossible to get mapping of associated network port {} of tp {}",
+                    networkLcp, tp.getTpId().getValue());
+            return false;
+        }
+        Mapping mapping;
+        try {
+            mapping = mappingOpt.get().orElseThrow();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Error getting mapping for {}", networkLcp, e);
+            return false;
+        }
+        long count = 0;
+        switch (mapping.getPortDirection()) {
+            case "bidirectional":
+                count += xpdOut.stream().filter(lk -> lk.getSource().getSourceNode().getValue().equals(nodeIdTopo)
+                        && lk.getSource().getSourceTp().getValue().equals(networkLcp)).count();
+                count += xpdIn.stream().filter(lk -> lk.getDestination().getDestNode().getValue().equals(nodeIdTopo)
+                        && lk.getDestination().getDestTp().getValue().equals(networkLcp)).count();
+                return count == 2;
+            case "tx":
+            case "rx":
+                @Nullable
+                String partnerLcp = mapping.getPartnerLcp();
+                if (mapping.getPortQual().equals("tx")) {
+                    count += xpdOut.stream().filter(lk -> lk.getSource().getSourceNode().getValue().equals(nodeIdTopo)
+                            && lk.getSource().getSourceTp().getValue().equals(networkLcp)).count();
+                    count += xpdIn.stream().filter(lk -> lk.getDestination().getDestNode().getValue().equals(nodeIdTopo)
+                            && lk.getDestination().getDestTp().getValue().equals(partnerLcp)).count();
+                }
+                if (mapping.getPortQual().equals("rx")) {
+                    count += xpdIn.stream().filter(lk -> lk.getDestination().getDestNode().getValue().equals(nodeIdTopo)
+                            && lk.getDestination().getDestTp().getValue().equals(networkLcp)).count();
+                    count += xpdOut.stream().filter(lk -> lk.getSource().getSourceNode().getValue().equals(nodeIdTopo)
+                            && lk.getSource().getSourceTp().getValue().equals(partnerLcp)).count();
+                }
+                return count == 2;
+            default:
+                LOG.error("Invalid port direction for {}", networkLcp);
+                return false;
+        }
+    }
+
+    private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupFor100gTpdrNode(
+            Uuid topoUuid, Uuid nodeUuid, Collection<OwnedNodeEdgePoint> onepl) {
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint> nepMap
+            = new HashMap<>();
+        for (OwnedNodeEdgePoint onep : onepl) {
+            var nep = new NodeEdgePointBuilder()
+                .setTopologyUuid(topoUuid)
+                .setNodeUuid(nodeUuid)
+                .setNodeEdgePointUuid(onep.key().getUuid())
+                .build();
+            nepMap.put(nep.key(), nep);
+        }
+        Rule rule = new RuleBuilder()
+                .setLocalId("forward")
+                .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
+                .setRuleType(new HashSet<RuleType>(Set.of(RuleType.FORWARDING)))
+                .build();
+        NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes(
+                        ("rdm infra node rule group").getBytes(Charset.forName("UTF-8")))
+                    .toString()))
+                .setRule(new HashMap<RuleKey, Rule>(Map.of(rule.key(), rule)))
+                .setNodeEdgePoint(nepMap)
+                .build();
+        return new HashMap<NodeRuleGroupKey, NodeRuleGroup>(Map.of(nodeRuleGroup.key(), nodeRuleGroup));
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetTopologyListImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/GetTopologyListImpl.java
new file mode 100644 (file)
index 0000000..9ebc6a5
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.HashMap;
+import java.util.Map;
+import org.opendaylight.transportpce.tapi.utils.TapiContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyList;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyListOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyListOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.TopologyBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GetTopologyListImpl implements GetTopologyList {
+    private static final Logger LOG = LoggerFactory.getLogger(GetTopologyListImpl.class);
+    private final TapiContext tapiContext;
+
+    public GetTopologyListImpl(TapiContext tapiContext) {
+        this.tapiContext = tapiContext;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<GetTopologyListOutput>> invoke(GetTopologyListInput input) {
+        // TODO Auto-generated method stub
+        // TODO -> maybe we get errors when having CEPs?
+        Map<TopologyKey, Topology> topologyMap = this.tapiContext.getTopologyContext();
+        if (topologyMap.isEmpty()) {
+            LOG.error("No topologies exist in tapi context");
+            return RpcResultBuilder.<GetTopologyListOutput>failed()
+                .withError(ErrorType.APPLICATION, "No topologies exist in tapi context")
+                .buildFuture();
+        }
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.TopologyKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.Topology>
+                newTopoMap = new HashMap<>();
+        for (Topology topo : topologyMap.values()) {
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.Topology
+                    newTopo = new TopologyBuilder(topo).build();
+            newTopoMap.put(newTopo.key(), newTopo);
+        }
+        return RpcResultBuilder
+                .success(new GetTopologyListOutputBuilder().setTopology(newTopoMap).build())
+                .buildFuture();
+    }
+
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/InitRoadmRoadmTapiLinkImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/InitRoadmRoadmTapiLinkImpl.java
new file mode 100644 (file)
index 0000000..d46075e
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Set;
+import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
+import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitRoadmRoadmTapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitRoadmRoadmTapiLinkInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitRoadmRoadmTapiLinkOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitRoadmRoadmTapiLinkOutputBuilder;
+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.topology.rev221121.topology.Link;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class InitRoadmRoadmTapiLinkImpl implements InitRoadmRoadmTapiLink {
+    private static final Logger LOG = LoggerFactory.getLogger(InitRoadmRoadmTapiLinkImpl.class);
+
+    private TapiLink tapiLink;
+    private TapiNetworkUtilsImpl tapiNetworkUtilsImpl;
+
+    public InitRoadmRoadmTapiLinkImpl(TapiLink tapiLink, TapiNetworkUtilsImpl tapiNetworkUtilsImpl) {
+        this.tapiLink = tapiLink;
+        this.tapiNetworkUtilsImpl = tapiNetworkUtilsImpl;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<InitRoadmRoadmTapiLinkOutput>> invoke(InitRoadmRoadmTapiLinkInput input) {
+        // TODO --> need to check if the nodes and neps exist in the topology
+        String sourceNode = input.getRdmANode();
+        String sourceTp = input.getDegATp();
+        String destNode = input.getRdmZNode();
+        String destTp = input.getDegZTp();
+        Link link = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp,
+            TapiStringConstants.OMS_RDM_RDM_LINK, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
+            TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS,
+            this.tapiLink.getAdminState(sourceNode, sourceTp, destNode, destTp),
+            this.tapiLink.getOperState(sourceNode, sourceTp, destNode, destTp),
+            Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()),
+            tapiNetworkUtilsImpl.getTapiTopoUuid());
+        if (link == null) {
+            LOG.error("Error creating link object");
+            return RpcResultBuilder.<InitRoadmRoadmTapiLinkOutput>failed()
+                .withError(ErrorType.RPC, "Failed to create link in topology")
+                .buildFuture();
+        }
+        InitRoadmRoadmTapiLinkOutputBuilder output = new InitRoadmRoadmTapiLinkOutputBuilder();
+        if (tapiNetworkUtilsImpl.putLinkInTopology(link)) {
+            output.setResult("Link created in tapi topology. Link-uuid = " + link.getUuid());
+        }
+        return RpcResultBuilder.success(output.build()).buildFuture();
+    }
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/InitXpdrRdmTapiLinkImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/rpc/InitXpdrRdmTapiLinkImpl.java
new file mode 100644 (file)
index 0000000..90c3d61
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.impl.rpc;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Set;
+import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
+import org.opendaylight.transportpce.tapi.utils.TapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitXpdrRdmTapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitXpdrRdmTapiLinkInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitXpdrRdmTapiLinkOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitXpdrRdmTapiLinkOutputBuilder;
+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.topology.rev221121.topology.Link;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class InitXpdrRdmTapiLinkImpl implements InitXpdrRdmTapiLink {
+    private static final Logger LOG = LoggerFactory.getLogger(InitXpdrRdmTapiLinkImpl.class);
+
+    private TapiLink tapiLink;
+    private TapiNetworkUtilsImpl tapiNetworkUtilsImpl;
+
+    public InitXpdrRdmTapiLinkImpl(TapiLink tapiLink, TapiNetworkUtilsImpl tapiNetworkUtilsImpl) {
+        this.tapiLink = tapiLink;
+        this.tapiNetworkUtilsImpl = tapiNetworkUtilsImpl;
+    }
+
+    @Override
+    public ListenableFuture<RpcResult<InitXpdrRdmTapiLinkOutput>> invoke(InitXpdrRdmTapiLinkInput input) {
+        // TODO --> need to check if the nodes and neps exist in the topology
+        String destNode = input.getRdmNode();
+        String destTp = input.getAddDropTp();
+        String sourceNode = input.getXpdrNode();
+        String sourceTp = input.getNetworkTp();
+        Link link = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp,
+            TapiStringConstants.OMS_XPDR_RDM_LINK, TapiStringConstants.OTSI, TapiStringConstants.PHTNC_MEDIA,
+            TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS,
+            this.tapiLink.getAdminState(sourceNode, sourceTp, destNode, destTp),
+            this.tapiLink.getOperState(sourceNode, sourceTp, destNode, destTp),
+            Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()),
+            tapiNetworkUtilsImpl.getTapiTopoUuid());
+        if (link == null) {
+            LOG.error("Error creating link object");
+            return RpcResultBuilder.<InitXpdrRdmTapiLinkOutput>failed()
+                .withError(ErrorType.RPC, "Failed to create link in topology")
+                .buildFuture();
+        }
+        InitXpdrRdmTapiLinkOutputBuilder output = new InitXpdrRdmTapiLinkOutputBuilder();
+        if (tapiNetworkUtilsImpl.putLinkInTopology(link)) {
+            output.setResult("Link created in tapi topology. Link-uuid = " + link.getUuid());
+        }
+        return RpcResultBuilder.success(output.build()).buildFuture();
+    }
+
+}
similarity index 87%
rename from tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelListenerImpl.java
rename to tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelNotificationHandler.java
index ceef1feb24e3f722e613581fd44df9ff8c8087dc..b312517e27835232826819c053bfd0b2fb1ee5dc 100644 (file)
@@ -19,53 +19,55 @@ 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.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationServiceBuilder;
-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.DateAndTime;
-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.OperationalState;
-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.global._class.Name;
-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.connectivity.rev181210.OwnedNodeEdgePoint1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.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.context.ConnectivityContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NameAndValueChange;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Notification;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameKey;
-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.NodeEdgePointRef;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePointKey;
-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.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationServiceBuilder;
+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.DateAndTime;
+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.OperationalState;
+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.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE;
+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.connection.LowerConnection;
+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.context.ConnectivityContext;
+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.NameAndValueChange;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Notification;
+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.notification.rev221121.notification.TargetObjectName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameKey;
+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.NodeEdgePointRef;
+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.OwnedNodeEdgePoint;
+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.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
 import org.opendaylight.yangtools.yang.binding.EnumTypeObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.service.component.annotations.Activate;
@@ -74,10 +76,10 @@ import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Component
-public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
+@Component(service = TapiNetworkModelNotificationHandler.class)
+public class TapiNetworkModelNotificationHandler {
 
-    private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkModelListenerImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkModelNotificationHandler.class);
     private final NetworkTransactionService networkTransactionService;
     private final NotificationPublishService notificationPublishService;
     private final List<ConnectivityService> connectivityServiceChanges = new ArrayList<>();
@@ -86,7 +88,7 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
     private final List<LayerProtocolName> orderedServiceLayerList;
 
     @Activate
-    public TapiNetworkModelListenerImpl(@Reference NetworkTransactionService networkTransactionService,
+    public TapiNetworkModelNotificationHandler(@Reference NetworkTransactionService networkTransactionService,
             @Reference NotificationPublishService notificationPublishService) {
         this.networkTransactionService = networkTransactionService;
         this.notificationPublishService = notificationPublishService;
@@ -95,19 +97,22 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
         LOG.debug("TapiNetworkModelListenerImpl instantiated");
     }
 
-    @Override
-    public void onNotification(Notification notification) {
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(Notification.class, this::onNotification)));
+    }
+
+    private void onNotification(Notification notification) {
         LOG.info("Received network model notification {}", notification);
-        if (notification.getNotificationType() == NotificationType.ATTRIBUTEVALUECHANGE
-                && notification.getTargetObjectType() == ObjectType.NODEEDGEPOINT) {
+        if (notification.getNotificationType().equals(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE)
+                && notification.getTargetObjectType().equals(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE)) {
             if (notification.getChangedAttributes() == null) {
                 return;
             }
             // TODO: need to re-think this to update first the connections from roadm to roadm and then the others
             updateConnections(notification.getChangedAttributes().keySet().stream()
                     .map(changedAttributesKey -> new Uuid(changedAttributesKey.getValueName()))
-                    .collect(Collectors.toList()),
-                notification.getChangedAttributes().values().stream()
+                    .collect(Collectors.toList()), notification.getChangedAttributes().values().stream()
                     .map(NameAndValueChange::getNewValue)
                     .collect(Collectors.toList()));
             updateConnectivityServices();
@@ -118,6 +123,12 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
         }
     }
 
+//    @Override
+//    public void onEventNotification(EventNotification notification) {
+//        LOG.info("Received network model notification {}", notification);
+//        //TODO: see if implementation needed and if in TAPI2.4, something supersedes this method
+//    }
+
     private PublishTapiNotificationService createNbiNotification(ConnectivityService connService) {
         if (connService == null) {
             LOG.error("ConnService is null");
@@ -154,12 +165,12 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
             .setUuid(new Uuid(UUID.randomUUID().toString()))
             .setTopic(connService.getUuid().getValue())
             .setTargetObjectIdentifier(connService.getUuid())
-            .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
+            .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE)
             .setChangedAttributes(changedStates)
             .setEventTimeStamp(datetime)
             .setTargetObjectName(targetObjectNames)
-            .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE)
-            .setLayerProtocolName(connService.getServiceLayer())
+            .setTargetObjectType(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE)
+            .setLayerProtocolName(connService.getLayerProtocolName())
             .build();
     }
 
@@ -177,7 +188,7 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
             this.connectivityServiceChanges.clear();
             InstanceIdentifier<ConnectivityContext> connectivityContextIID =
                 InstanceIdentifier.builder(Context.class).augmentation(
-                        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                     .child(ConnectivityContext.class)
                     .build();
             Optional<ConnectivityContext> optConnContext =
@@ -200,7 +211,7 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
 
                 InstanceIdentifier<ConnectivityService> connServIID = InstanceIdentifier
                     .builder(Context.class).augmentation(org.opendaylight.yang.gen.v1
-                                .urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                                .urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                     .child(ConnectivityContext.class)
                     .child(ConnectivityService.class, new ConnectivityServiceKey(connService.getUuid()))
                     .build();
@@ -240,11 +251,11 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
             LOG.info("No connections on service = {}", connService);
             return new EnumTypeObject[]{null, null};
         }
-        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210
+        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
                 .connectivity.service.Connection connection : connService.getConnection().values()) {
             InstanceIdentifier<Connection> connIID =
                 InstanceIdentifier.builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                     .child(ConnectivityContext.class)
                     .child(Connection.class, new ConnectionKey(connection.getConnectionUuid()))
                     .build();
@@ -270,14 +281,14 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
         try {
             //should it return a list of connections?
             InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext> connectivityContextIID =
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext> connectivityContextIID =
                 InstanceIdentifier.builder(Context.class).augmentation(
-                            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                         .child(org.opendaylight.yang.gen.v1.urn
-                                .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                                .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                         .build();
             Optional<org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext> optConnContext =
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext> optConnContext =
                 this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, connectivityContextIID).get();
             if (optConnContext.isEmpty()) {
                 LOG.error(TapiStringConstants.TAPI_CONNECTION_UPDATE_ERROR);
@@ -300,13 +311,13 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
                 if (connService.getConnection() == null) {
                     continue;
                 }
-                for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210
+                for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
                         .connectivity.service.Connection connection : connService.getConnection().values()) {
                     InstanceIdentifier<Connection> connIID =
                         InstanceIdentifier.builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                            .onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                                 .child(org.opendaylight.yang.gen.v1.urn
-                                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                                 .child(Connection.class, new ConnectionKey(connection.getConnectionUuid()))
                                 .build();
                     Optional<Connection> optConn =
@@ -328,7 +339,7 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
                         // To check if the oneps are from the original Top connection
                         newConnState = getConnectionState(changedOneps, onepStates, newConn);
                     }
-
+                    LOG.debug("Analysing connection = {} ", newConn.getName().toString());
                     LOG.info("Previous connection state = {} & New connection state = {}",
                             newConn.getOperationalState().getName(), newConnState.getName());
                     Connection changedConn = new ConnectionBuilder(newConn).setOperationalState(newConnState).build();
@@ -350,7 +361,7 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
         Map<ConnectivityServiceKey, ConnectivityService> orderedServiceMap = new HashMap<>();
         for (LayerProtocolName lpn:this.orderedServiceLayerList) {
             for (ConnectivityService connServ:connServMap.values()) {
-                if (connServ.getServiceLayer().equals(lpn)) {
+                if (connServ.getLayerProtocolName().equals(lpn)) {
                     LOG.info("Layer of service is equal to entry of lpn = {}", lpn);
                     orderedServiceMap.put(connServ.key(), connServ);
                 }
@@ -370,9 +381,9 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
             for (LowerConnection lowerConn:lowerConnections) {
                 InstanceIdentifier<Connection> connIID =
                     InstanceIdentifier.builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                             .child(org.opendaylight.yang.gen.v1.urn
-                                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                             .child(Connection.class, new ConnectionKey(lowerConn.getConnectionUuid()))
                             .build();
                 Optional<Connection> optConn =
@@ -431,7 +442,7 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
             LOG.info("Didnt transform correctly the states");
             for (Uuid connectionNep : connectionNeps) {
                 Optional<org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint> ocep
+                        .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint> ocep
                     = conn.getConnectionEndPoint().values().stream()
                         .filter(connectionEndPoint -> connectionEndPoint.getNodeEdgePointUuid() == connectionNep)
                         .findFirst();
@@ -470,9 +481,9 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
             for (LowerConnection lowerConn:lowerConnections) {
                 InstanceIdentifier<Connection> connIID =
                     InstanceIdentifier.builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                            .onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                         .child(org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.context
+                            .onf.otcc.yang.tapi.connectivity.rev221121.context
                             .ConnectivityContext.class)
                         .child(Connection.class, new ConnectionKey(lowerConn.getConnectionUuid()))
                         .build();
@@ -510,14 +521,14 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
             for (ConnectivityService supportedConnService : connServices) {
                 // TODO currently supporting service uuid is saved in service layer, replace with name as soon
                 // as name is implemented
-                if (supportedConnService.getServiceLayer() != layer) {
+                if (supportedConnService.getLayerProtocolName() != layer) {
                     continue;
                 }
                 InstanceIdentifier<ConnectivityService> supportedConnServIID = InstanceIdentifier
                     .builder(Context.class).augmentation(org.opendaylight.yang.gen.v1
-                        .urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1.class)
+                        .urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1.class)
                     .child(org.opendaylight.yang.gen.v1
-                        .urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                        .urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                     .child(ConnectivityService.class, new ConnectivityServiceKey(supportedConnService.getUuid()))
                     .build();
                 Optional<ConnectivityService> optNewConnService = this.networkTransactionService.read(
@@ -527,8 +538,9 @@ public class TapiNetworkModelListenerImpl implements TapiNotificationListener {
                     continue;
                 }
                 ConnectivityService newConnService = optNewConnService.orElseThrow();
-                if (supportedConnService.getServiceLevel() != null
-                        && supportedConnService.getServiceLevel().equals(supportingConnService.getValue())
+                if (supportedConnService.getConnectivityConstraint().getServiceLevel() != null
+                        && supportedConnService.getConnectivityConstraint().getServiceLevel()
+                            .equals(supportingConnService.getValue())
                         && newConnService.getAdministrativeState() != AdministrativeState.LOCKED
                         && newConnService.getOperationalState() != OperationalState.DISABLED) {
 
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceListenerImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceListenerImpl.java
deleted file mode 100644 (file)
index c6a0f00..0000000
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*
- * Copyright © 2021 Nokia, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.tapi.listeners;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.concurrent.ExecutionException;
-import java.util.stream.Collectors;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
-import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-import org.opendaylight.transportpce.tapi.TapiStringConstants;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.ServicePathRpcResult;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.TransportpcePceListener;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescriptionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.path.description.atoz.direction.AToZ;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.Node;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev210705.pce.resource.resource.resource.TerminationPoint;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.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.connectivity.rev181210.Context1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1Builder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnectionKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.end.point.ClientNodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.end.point.ClientNodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityServiceKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.Connection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepList;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepListBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.OwnedNodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.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.topology.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class TapiPceListenerImpl implements TransportpcePceListener {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TapiPceListenerImpl.class);
-
-    private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-        .getBytes(Charset.forName("UTF-8"))).toString());
-    private ServicePathRpcResult servicePathRpcResult;
-    private CreateConnectivityServiceInput input;
-    private Uuid serviceUuid;
-    private final DataBroker dataBroker;
-    private final NetworkTransactionService networkTransactionService;
-    private final Map<org.opendaylight.yang.gen.v1.urn
-        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey,
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection>
-        connectionFullMap; // this variable is for complete connection objects
-    private Connection topConnRdmRdm;
-    private Connection topConnXpdrXpdrPhtn;
-    private Connection topConnXpdrXpdrOdu;
-
-    public TapiPceListenerImpl(DataBroker dataBroker) {
-        this.connectionFullMap = new HashMap<>();
-        this.dataBroker = dataBroker;
-        this.networkTransactionService = new NetworkTransactionImpl(this.dataBroker);
-        this.topConnRdmRdm = null;
-        this.topConnXpdrXpdrPhtn = null;
-        this.topConnXpdrXpdrOdu = null;
-    }
-
-    @Override
-    public void onServicePathRpcResult(ServicePathRpcResult notification) {
-        if (compareServicePathRpcResult(notification)) {
-            LOG.warn("ServicePathRpcResult already wired !");
-            return;
-        }
-        servicePathRpcResult = notification;
-        switch (servicePathRpcResult.getNotificationType().getIntValue()) {
-            /* path-computation-request. */
-            case 1:
-                onPathComputationResult(notification);
-                break;
-            /* cancel-resource-reserve. */
-            case 2:
-                onCancelResourceResult(notification.getServiceName());
-                break;
-            default:
-                break;
-        }
-    }
-
-    /**
-     * Process path computation request result.
-     * @param notification the result notification.
-     */
-    private void onPathComputationResult(ServicePathRpcResult notification) {
-        this.connectionFullMap.clear();
-        LOG.info("PCE '{}' Notification received : {}",servicePathRpcResult.getNotificationType().getName(),
-            notification);
-        if (servicePathRpcResult.getStatus() == RpcStatusEx.Failed) {
-            LOG.error("PCE path computation failed !");
-            return;
-        } else if (servicePathRpcResult.getStatus() == RpcStatusEx.Pending) {
-            LOG.warn("PCE path computation returned a Penging RpcStatusEx code!");
-            return;
-        } else if (servicePathRpcResult.getStatus() != RpcStatusEx.Successful) {
-            LOG.error("PCE path computation returned an unknown RpcStatusEx code!");
-            return;
-        }
-
-        LOG.info("PCE calculation done OK !");
-        if (servicePathRpcResult.getPathDescription() == null) {
-            LOG.error("'PathDescription' parameter is null ");
-            return;
-        }
-        PathDescription pathDescription = new PathDescriptionBuilder()
-            .setAToZDirection(servicePathRpcResult.getPathDescription().getAToZDirection())
-            .setZToADirection(servicePathRpcResult.getPathDescription().getZToADirection())
-            .build();
-        LOG.info("PathDescription for TAPI gets : {}", pathDescription);
-        if (input == null) {
-            LOG.error("Input is null !");
-            return;
-        }
-        // TODO: check kind of service: based on the device Id of the input,
-        //  verify the type of XPDR and the capacity and determine if it is an OTN service or pure WDM service
-        // Create connections and ceps for the connectivity service.
-        //  Connections must be with a locked stated. As the renderer hasnt implemented yet the oc's
-        Map<ConnectionKey, Connection> connectionMap = createConnectionsAndCepsForService(pathDescription,
-            input.getConnectivityConstraint().getServiceLayer());
-        // add connections to connection context and to connectivity context
-        updateConnectionContextWithConn(this.connectionFullMap, connectionMap, serviceUuid);
-    }
-
-    private Map<ConnectionKey, Connection> createConnectionsAndCepsForService(PathDescription pathDescription,
-                                                                              LayerProtocolName serviceProtName) {
-        Map<ConnectionKey, Connection> connectionServMap = new HashMap<>();
-        // build lists with ROADM nodes, XPDR/MUX/SWITCH nodes, ROADM DEG TTPs, ROADM SRG TTPs, XPDR CLIENT TTPs
-        //  and XPDR NETWORK TTPs (if any). From the path description. This will help to build the uuid of the CEPs
-        //  and the connections
-        String resourceType;
-        List<String> xpdrClientTplist = new ArrayList<>();
-        List<String> xpdrNetworkTplist = new ArrayList<>();
-        List<String> rdmAddDropTplist = new ArrayList<>();
-        List<String> rdmDegTplist = new ArrayList<>();
-        List<String> rdmNodelist = new ArrayList<>();
-        List<String> xpdrNodelist = new ArrayList<>();
-        for (AToZ elem:pathDescription.getAToZDirection().getAToZ().values().stream()
-            .sorted((Comparator.comparing(atoz -> Integer.valueOf(atoz.getId())))).collect(Collectors.toList())) {
-            resourceType = elem.getResource().getResource().implementedInterface().getSimpleName();
-            switch (resourceType) {
-                case TapiStringConstants.TP:
-                    TerminationPoint tp = (TerminationPoint) elem.getResource().getResource();
-                    String tpID = tp.getTpId();
-                    String tpNode;
-                    if (tpID.contains("CLIENT")) {
-                        tpNode = tp.getTpNodeId();
-                        if (!xpdrClientTplist.contains(String.join("+", tpNode, tpID))) {
-                            xpdrClientTplist.add(String.join("+", tpNode, tpID));
-                        }
-                    }
-                    if (tpID.contains("NETWORK")) {
-                        tpNode = tp.getTpNodeId();
-                        if (!xpdrNetworkTplist.contains(String.join("+", tpNode, tpID))) {
-                            xpdrNetworkTplist.add(String.join("+", tpNode, tpID));
-                        }
-                    }
-                    if (tpID.contains("PP")) {
-                        tpNode = getIdBasedOnModelVersion(tp.getTpNodeId());
-                        LOG.info("ROADM Node of tp = {}", tpNode);
-                        if (!rdmAddDropTplist.contains(String.join("+", tpNode, tpID))) {
-                            rdmAddDropTplist.add(String.join("+", tpNode, tpID));
-                        }
-                    }
-                    if (tpID.contains("TTP")) {
-                        tpNode = getIdBasedOnModelVersion(tp.getTpNodeId());
-                        LOG.info("ROADM Node of tp = {}", tpNode);
-                        if (!rdmDegTplist.contains(String.join("+", tpNode, tpID))) {
-                            rdmDegTplist.add(String.join("+", tpNode, tpID));
-                        }
-                    }
-                    break;
-                case TapiStringConstants.NODE:
-                    Node node = (Node) elem.getResource().getResource();
-                    String nodeId = node.getNodeId();
-                    if (nodeId.contains("XPDR") || nodeId.contains("SPDR") || nodeId.contains("MXPDR")) {
-                        LOG.info("Node id = {}", nodeId);
-                        if (!xpdrNodelist.contains(nodeId)) {
-                            xpdrNodelist.add(nodeId); // should contain only 2
-                        }
-                    }
-                    if (nodeId.contains("ROADM")) {
-                        nodeId = getIdBasedOnModelVersion(nodeId);
-                        LOG.info("Node id = {}", nodeId);
-                        if (!rdmNodelist.contains(nodeId)) {
-                            rdmNodelist.add(nodeId);
-                        }
-                    }
-                    break;
-                default:
-                    LOG.warn("Resource is a {}", resourceType);
-            }
-        }
-        LOG.info("ROADM node list = {}", rdmNodelist.toString());
-        LOG.info("ROADM degree list = {}", rdmDegTplist.toString());
-        LOG.info("ROADM addrop list = {}", rdmAddDropTplist.toString());
-        LOG.info("XPDR node list = {}", xpdrNodelist.toString());
-        LOG.info("XPDR network list = {}", xpdrNetworkTplist.toString());
-        LOG.info("XPDR client list = {}", xpdrClientTplist.toString());
-        // TODO -> for 10GB eth and ODU services there are no ROADMs in path description as they use the OTU link,
-        //  but for 100GB eth all is created at once. Check if the roadm list is empty to determine whether we need
-        //  to trigger all the steps or not
-        String edgeRoadm1 = "";
-        String edgeRoadm2 = "";
-        if (!rdmNodelist.isEmpty()) {
-            edgeRoadm1 = rdmNodelist.get(0);
-            edgeRoadm2 = rdmNodelist.get(rdmNodelist.size() - 1);
-            LOG.info("edgeRoadm1 = {}", edgeRoadm1);
-            LOG.info("edgeRoadm2 = {}", edgeRoadm2);
-        }
-        // create corresponding CEPs and Connections. Connections should be added to the corresponding context
-        // CEPs must be included in the topology context as an augmentation for each ONEP!!
-        // TODO -> Maybe we dont need to create the connections and ceps if the previous service doesnt exist??
-        //  As mentioned above, for 100GbE service creation there are ROADMs in the path description.
-        //  What are the configurations needed here? No OTU, ODU... what kind of cross connections is needed?
-        //  this needs to be changed
-
-        // TODO: OpenROADM getNodeType from the NamesList to verify what needs to be created
-        OpenroadmNodeType openroadmNodeType = getOpenRoadmNodeType(xpdrNodelist);
-        switch (serviceProtName) {
-            case PHOTONICMEDIA:
-                // Identify number of ROADMs
-                // - XC Connection between MC CEPs mapped from MC NEPs (within a roadm)
-                // - XC Connection between OTSiMC CEPs mapped from OTSiMC NEPs (within a roadm)
-                // - Top Connection MC betwwen MC CEPs of different roadms
-                // - Top Connection OTSiMC betwwen OTSiMC CEPs of extreme roadms
-                connectionServMap.putAll(createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist,
-                    edgeRoadm1, edgeRoadm2));
-                if (!pathDescription.getAToZDirection().getAToZ().values().stream().findFirst().orElseThrow().getId()
-                        .contains("ROADM")) {
-                    // - XC Connection OTSi betwwen iOTSi y eOTSi of xpdr
-                    // - Top connection OTSi between network ports of xpdrs in the Photonic media layer -> i_OTSi
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsPht(xpdrNetworkTplist, xpdrNodelist));
-                    this.topConnRdmRdm = null;
-                }
-                break;
-            case ODU:
-                // TODO: verify if this is correct
-                LOG.info("OTN ODU service");
-                // - XC Connection OTSi between iODU and eODU of xpdr
-                // - Top connection in the ODU layer, between xpdr iODU ports
-                if (openroadmNodeType.equals(OpenroadmNodeType.MUXPDR)) {
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsOdu(xpdrNetworkTplist, xpdrNodelist));
-                    this.topConnXpdrXpdrPhtn = null;
-                }
-                break;
-            case ETH:
-                LOG.info("WDM service");
-                if (openroadmNodeType.equals(OpenroadmNodeType.TPDR)) {
-                    // TODO: WDM service. Only och/otu4 needed and then directly DSR top connection.
-                    //  Need to find the associated client ports of the network port
-                    // - Same as for PHOTONIC MEDIA service
-                    // - Do we nedd cross connection in the ODU layer??
-                    // - Top connection DSR between client ports of the transponder
-                    connectionServMap.putAll(createRoadmCepsAndConnections(rdmAddDropTplist, rdmDegTplist, rdmNodelist,
-                        edgeRoadm1, edgeRoadm2));
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsPht(xpdrNetworkTplist, xpdrNodelist));
-                    this.topConnRdmRdm = null;
-                    xpdrClientTplist = getAssociatedClientsPort(xpdrNetworkTplist);
-                    LOG.info("Associated client ports = {}", xpdrClientTplist);
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsEth(xpdrClientTplist, xpdrNodelist,
-                        connectionServMap));
-                    this.topConnXpdrXpdrPhtn = null;
-                }
-                break;
-            case DSR:
-                LOG.info("OTN XGE/ODUe service");
-                // - XC connection between iODU and eODU
-                // - Top connection between eODU ports
-                // - Top connection between DSR ports
-                if (openroadmNodeType.equals(OpenroadmNodeType.SWITCH)) {
-                    // TODO: We create both ODU and DSR because there is no ODU service creation for the switch
-                    // - XC Connection OTSi betwwen iODU and eODU of xpdr
-                    // - Top connection in the ODU layer, between xpdr eODU ports (?)
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist,
-                        xpdrNodelist));
-                    this.topConnXpdrXpdrPhtn = null;
-                }
-                if (openroadmNodeType.equals(OpenroadmNodeType.MUXPDR)) {
-                    // TODO: OTN service but mux has 3 steps at rendering. Verify that things exist
-                    connectionServMap.putAll(createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist,
-                        xpdrNodelist));
-                    this.topConnXpdrXpdrOdu = null;
-                }
-                break;
-            default:
-                LOG.error("Service type format {} not supported", serviceProtName.getName());
-        }
-        return connectionServMap;
-    }
-
-    /**
-     * Process cancel resource result.
-     * @param serviceName Service name to build uuid.
-     */
-    private void onCancelResourceResult(String serviceName) {
-        if (servicePathRpcResult.getStatus() == RpcStatusEx.Failed) {
-            LOG.info("PCE cancel resource failed !");
-            return;
-        } else if (servicePathRpcResult.getStatus() == RpcStatusEx.Pending) {
-            LOG.warn("PCE cancel returned a Penging RpcStatusEx code!");
-            return;
-        } else if (servicePathRpcResult.getStatus() != RpcStatusEx.Successful) {
-            LOG.error("PCE cancel returned an unknown RpcStatusEx code!");
-            return;
-        }
-        LOG.info("PCE cancel resource done OK !");
-        Uuid suuid = new Uuid(UUID.nameUUIDFromBytes(serviceName.getBytes(Charset.forName("UTF-8")))
-            .toString());
-        // get connections of connectivity service and remove them from tapi context and then remove
-        //  service from context. The CEPs are maintained as they could be reused by another service
-        ConnectivityService connService = getConnectivityService(suuid);
-        if (connService == null) {
-            LOG.error("Service doesnt exist in tapi context");
-            return;
-        }
-        for (Connection connection:connService.getConnection().values()) {
-            deleteConnection(connection.getConnectionUuid());
-        }
-        deleteConnectivityService(suuid);
-    }
-
-    @SuppressFBWarnings(
-        value = "ES_COMPARING_STRINGS_WITH_EQ",
-        justification = "false positives, not strings but real object references comparisons")
-    private Boolean compareServicePathRpcResult(ServicePathRpcResult notification) {
-        if (servicePathRpcResult == null) {
-            return false;
-        }
-        if (servicePathRpcResult.getNotificationType() != notification.getNotificationType()) {
-            return false;
-        }
-        if (servicePathRpcResult.getServiceName() != notification.getServiceName()) {
-            return false;
-        }
-        if (servicePathRpcResult.getStatus() != notification.getStatus()) {
-            return false;
-        }
-        if (servicePathRpcResult.getStatusMessage() != notification.getStatusMessage()) {
-            return false;
-        }
-        return true;
-    }
-
-    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsEth(List<String> xpdrClientTplist,
-                                                                           List<String> xpdrNodelist,
-                                                                           Map<ConnectionKey, Connection> lowerConn) {
-        // TODO: do we need to create cross connection between iODU and eODU??
-        // add the lower connections of the previous steps for this kind of service
-        Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
-        for (Connection lowConn: lowerConn.values()) {
-            LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(lowConn.getConnectionUuid()).build();
-            xcMap.put(conn.key(), conn);
-        }
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMapDsr = new HashMap<>();
-        // Create 1 cep per Xpdr in the CLIENT
-        // 1 top connection DSR between the CLIENT xpdrs
-        for (String xpdr:xpdrNodelist) {
-            LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                    .orElseThrow();
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR,
-                LayerProtocolName.DSR);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1);
-
-            cepMapDsr.put(netCep1.key(), netCep1);
-        }
-        String spcXpdr1 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-
-        // DSR top connection between edge xpdr CLIENT DSR
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connectionDsr = createTopConnection(spcXpdr1, spcXpdr2, cepMapDsr, TapiStringConstants.DSR,
-                LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn);
-        this.connectionFullMap.put(connectionDsr.key(), connectionDsr);
-
-        // DSR top connection that will be added to the service object
-        Connection conn1 = new ConnectionBuilder().setConnectionUuid(connectionDsr.getUuid()).build();
-        connServMap.put(conn1.key(), conn1);
-
-        return connServMap;
-    }
-
-    private Map<ConnectionKey,Connection> createXpdrCepsAndConnectionsDsr(List<String> xpdrClientTplist,
-                                                                          List<String> xpdrNetworkTplist,
-                                                                          List<String> xpdrNodelist) {
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMapDsr = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMapOdu = new HashMap<>();
-        // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will
-        //  be added to the lower connection of a top connection
-        Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
-
-        // Create 1 cep per Xpdr in the CLIENT, 1 cep per Xpdr eODU, 1 XC between eODU and iODE,
-        // 1 top connection between eODU and a top connection DSR between the CLIENT xpdrs
-        for (String xpdr:xpdrNodelist) {
-            LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                    .orElseThrow();
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR,
-                LayerProtocolName.DSR);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1);
-
-            ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU,
-                TapiStringConstants.DSR, LayerProtocolName.ODU);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.DSR,
-                netCep2);
-
-            String spcXpdrNetwork = getAssociatedNetworkPort(spcXpdrClient, xpdrNetworkTplist);
-            ConnectionEndPoint netCep3 = getAssociatediODUCep(spcXpdrNetwork);
-
-            cepMapDsr.put(netCep1.key(), netCep1);
-            cepMapOdu.put(netCep2.key(), netCep2);
-            // Create x connection between I_ODU and E_ODU within xpdr
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-                connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrClient, spcXpdrNetwork,
-                    TapiStringConstants.ODU, LayerProtocolName.ODU);
-            this.connectionFullMap.put(connection.key(), connection);
-
-            // Create X connection that will be added to the service object
-            LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-            xcMap.put(conn.key(), conn);
-        }
-
-        String spcXpdr1 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrClientTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-
-        // eODU top connection between edge xpdr CLIENT eODU
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connectionOdu = createTopConnection(spcXpdr1, spcXpdr2, cepMapOdu, TapiStringConstants.E_ODU,
-                LayerProtocolName.ODU, xcMap, this.topConnXpdrXpdrOdu);
-        this.connectionFullMap.put(connectionOdu.key(), connectionOdu);
-
-        // ODU top connection that will be added to the service object and also lower connection
-        Connection conn = new ConnectionBuilder().setConnectionUuid(connectionOdu.getUuid()).build();
-        connServMap.put(conn.key(), conn);
-        LowerConnection lowerConn = new LowerConnectionBuilder().setConnectionUuid(connectionOdu.getUuid()).build();
-        xcMap.put(lowerConn.key(), lowerConn);
-
-        // DSR top connection between edge xpdr CLIENT DSR
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connectionDsr = createTopConnection(spcXpdr1, spcXpdr2, cepMapDsr, TapiStringConstants.DSR,
-                LayerProtocolName.DSR, xcMap, this.topConnXpdrXpdrPhtn);
-        this.connectionFullMap.put(connectionDsr.key(), connectionDsr);
-
-        // DSR top connection that will be added to the service object
-        Connection conn1 = new ConnectionBuilder().setConnectionUuid(connectionDsr.getUuid()).build();
-        connServMap.put(conn1.key(), conn1);
-
-        return connServMap;
-    }
-
-    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsOdu(List<String> xpdrNetworkTplist,
-                                                                           List<String> xpdrNodelist) {
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMap = new HashMap<>();
-        // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will
-        //  be added to the lower connection of a top connection
-        Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
-        // Create 1 cep per Xpdr in the I_ODU and a top
-        // connection iODU between the xpdrs
-        for (String xpdr:xpdrNodelist) {
-            LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                    .orElseThrow();
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_ODU,
-                TapiStringConstants.DSR, LayerProtocolName.ODU);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.DSR,
-                netCep1);
-
-            cepMap.put(netCep1.key(), netCep1);
-        }
-
-        // ODU top connection between edge xpdr i_ODU
-        String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_ODU,
-                LayerProtocolName.ODU, xcMap, this.topConnXpdrXpdrPhtn);
-        this.connectionFullMap.put(connection.key(), connection);
-
-        // ODU top connection that will be added to the service object
-        Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-        connServMap.put(conn.key(), conn);
-        this.topConnXpdrXpdrOdu = conn;
-
-        return connServMap;
-    }
-
-    private Map<ConnectionKey, Connection> createXpdrCepsAndConnectionsPht(List<String> xpdrNetworkTplist,
-                                                                           List<String> xpdrNodelist) {
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMap = new HashMap<>();
-        // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will
-        //  be added to the lower connection of a top connection
-        Map<LowerConnectionKey, LowerConnection> xcMap = new HashMap<>();
-
-        // create ceps and xc connections within xpdr
-        for (String xpdr:xpdrNodelist) {
-            LOG.info("Creating ceps and xc for xpdr {}", xpdr);
-            String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst()
-                .orElseThrow();
-            // There should be 1 network tp per xpdr
-            // TODO photonic media model should be updated to have the corresponding CEPs. I will just create
-            //  3 different MC CEPs giving different IDs to show that they are different
-            // Create 3 CEPs for each xpdr otsi node and the corresponding cross connection matchin the NEPs
-            ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA,
-                TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.OTSI,
-                netCep1);
-            ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.E_OTSI,
-                TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.E_OTSI, TapiStringConstants.OTSI,
-                netCep2);
-            ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI,
-                TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI,
-                netCep3);
-            cepMap.put(netCep1.key(), netCep1);
-            cepMap.put(netCep2.key(), netCep2);
-            cepMap.put(netCep3.key(), netCep3);
-
-            // Create x connection between I_OTSi and E_OTSi within xpdr
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-                connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrNetwork, spcXpdrNetwork,
-                    TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA);
-            this.connectionFullMap.put(connection.key(), connection);
-
-            // Create X connection that will be added to the service object
-            LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-            xcMap.put(conn.key(), conn);
-        }
-        // OTSi top connection between edge I_OTSI Xpdr
-        String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(0))).findFirst().orElseThrow();
-        String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist
-            .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow();
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_OTSI,
-                LayerProtocolName.PHOTONICMEDIA, xcMap, this.topConnRdmRdm);
-        this.connectionFullMap.put(connection.key(), connection);
-
-        // OTSi top connection that will be added to the service object
-        Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-        connServMap.put(conn.key(), conn);
-        this.topConnXpdrXpdrPhtn = conn;
-        return connServMap;
-    }
-
-    private Map<ConnectionKey, Connection> createRoadmCepsAndConnections(List<String> rdmAddDropTplist,
-                                                                         List<String> rdmDegTplist,
-                                                                         List<String> rdmNodelist,
-                                                                         String edgeRoadm1, String edgeRoadm2) {
-        // TODO: will need to check if things exist already or not
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-            ConnectionEndPoint> cepMap = new HashMap<>();
-        // create ceps and x connections within roadm
-        Map<LowerConnectionKey, LowerConnection> xcLowerMap = new HashMap<>();
-        for (String roadm : rdmNodelist) {
-            LOG.info("Creating ceps and xc for roadm {}", roadm);
-            if (roadm.equals(edgeRoadm1) || roadm.equals(edgeRoadm2)) {
-                LOG.info("EDGE ROADM, cross connections needed between SRG and DEG");
-                String spcRdmAD = rdmAddDropTplist.stream().filter(adp -> adp.contains(roadm)).findFirst()
-                    .orElseThrow();
-                LOG.info("AD port of ROADm {} = {}", roadm, spcRdmAD);
-                // There should be only 1 AD and 1 DEG per roadm
-                // TODO photonic media model should be updated to have the corresponding CEPs. I will just create
-                //  3 different MC CEPs giving different IDs to show that they are different
-                // Create 3 CEPs for each AD and DEG and the corresponding cross connections, matching the NEPs
-                // created in the topology creation
-                // add CEPs to the topology to the corresponding ONEP
-                ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA, adCep1);
-                ConnectionEndPoint adCep2 = createCepRoadm(spcRdmAD, TapiStringConstants.MC);
-                putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.MC, adCep2);
-                ConnectionEndPoint adCep3 = createCepRoadm(spcRdmAD, TapiStringConstants.OTSI_MC);
-                putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.OTSI_MC, adCep3);
-                cepMap.put(adCep1.key(), adCep1);
-                cepMap.put(adCep2.key(), adCep2);
-                cepMap.put(adCep3.key(), adCep3);
-
-                String spcRdmDEG = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow();
-                LOG.info("Degree port of ROADm {} = {}", roadm, spcRdmDEG);
-
-                ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA, degCep1);
-                ConnectionEndPoint degCep2 = createCepRoadm(spcRdmDEG, TapiStringConstants.MC);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.MC, degCep2);
-                ConnectionEndPoint degCep3 = createCepRoadm(spcRdmDEG, TapiStringConstants.OTSI_MC);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.OTSI_MC, degCep3);
-                cepMap.put(degCep1.key(), degCep1);
-                cepMap.put(degCep2.key(), degCep2);
-                cepMap.put(degCep3.key(), degCep3);
-
-                LOG.info("Going to create cross connections for ROADM {}", roadm);
-                // Create X connections between MC and OTSi_MC for full map
-                org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection1
-                    = createXCBetweenCeps(adCep2, degCep2, spcRdmAD, spcRdmDEG, TapiStringConstants.MC,
-                        LayerProtocolName.PHOTONICMEDIA);
-                LOG.info("Cross connection 1 created = {}", connection1.toString());
-                org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection2
-                    = createXCBetweenCeps(adCep3, degCep3, spcRdmAD, spcRdmDEG, TapiStringConstants.OTSI_MC,
-                        LayerProtocolName.PHOTONICMEDIA);
-                LOG.info("Cross connection 2 created = {}", connection2.toString());
-                this.connectionFullMap.put(connection1.key(), connection1);
-                this.connectionFullMap.put(connection2.key(), connection2);
-
-                // Create X connections that will be added to the service object
-                LowerConnection conn1 = new LowerConnectionBuilder().setConnectionUuid(connection1.getUuid()).build();
-                LowerConnection conn2 = new LowerConnectionBuilder().setConnectionUuid(connection2.getUuid()).build();
-
-                xcLowerMap.put(conn1.key(), conn1);
-                xcLowerMap.put(conn2.key(), conn2);
-            } else {
-                LOG.info("MIDDLE ROADM, cross connections needed between DEG and DEG");
-                String spcRdmDEG1 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow();
-                LOG.info("Degree 1 port of ROADm {} = {}", roadm, spcRdmDEG1);
-
-                ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA, deg1Cep1);
-                ConnectionEndPoint deg1Cep2 = createCepRoadm(spcRdmDEG1, TapiStringConstants.MC);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.MC, deg1Cep2);
-                ConnectionEndPoint deg1Cep3 = createCepRoadm(spcRdmDEG1, TapiStringConstants.OTSI_MC);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.OTSI_MC, deg1Cep3);
-                cepMap.put(deg1Cep1.key(), deg1Cep1);
-                cepMap.put(deg1Cep2.key(), deg1Cep2);
-                cepMap.put(deg1Cep3.key(), deg1Cep3);
-
-                String spcRdmDEG2 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).skip(1).findFirst()
-                    .orElseThrow();
-                LOG.info("Degree 2 port of ROADm {} = {}", roadm, spcRdmDEG2);
-
-                ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA, deg2Cep1);
-                ConnectionEndPoint deg2Cep2 = createCepRoadm(spcRdmDEG2, TapiStringConstants.MC);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.MC, deg2Cep2);
-                ConnectionEndPoint deg2Cep3 = createCepRoadm(spcRdmDEG2, TapiStringConstants.OTSI_MC);
-                putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.OTSI_MC, deg2Cep3);
-                cepMap.put(deg2Cep1.key(), deg2Cep1);
-                cepMap.put(deg2Cep2.key(), deg2Cep2);
-                cepMap.put(deg2Cep3.key(), deg2Cep3);
-
-                LOG.info("Going to create cross connections for ROADM {}", roadm);
-                // Create X connections between MC and OTSi_MC for full map
-                org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection1
-                    = createXCBetweenCeps(deg1Cep2, deg2Cep2, spcRdmDEG1, spcRdmDEG2,
-                        TapiStringConstants.MC, LayerProtocolName.PHOTONICMEDIA);
-                LOG.info("Cross connection 1 created = {}", connection1.toString());
-                org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection connection2
-                    = createXCBetweenCeps(deg1Cep3, deg2Cep3, spcRdmDEG1, spcRdmDEG2,
-                        TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA);
-                LOG.info("Cross connection 2 created = {}", connection2.toString());
-                this.connectionFullMap.put(connection1.key(), connection1);
-                this.connectionFullMap.put(connection2.key(), connection2);
-
-                // Create X connections that will be added to the service object
-                LowerConnection conn1 = new LowerConnectionBuilder().setConnectionUuid(connection1.getUuid()).build();
-                LowerConnection conn2 = new LowerConnectionBuilder().setConnectionUuid(connection2.getUuid()).build();
-
-                xcLowerMap.put(conn1.key(), conn1);
-                xcLowerMap.put(conn2.key(), conn2);
-            }
-        }
-        LOG.info("Going to create top connections between roadms");
-        String spcRdmAD1 = rdmAddDropTplist.stream().filter(adp -> adp.contains(edgeRoadm1)).findFirst().orElseThrow();
-        String spcRdmAD2 = rdmAddDropTplist.stream().filter(adp -> adp.contains(edgeRoadm2)).findFirst().orElseThrow();
-        // MC top connection between edge roadms
-        LOG.info("Going to created top connection between MC");
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection = createTopConnection(spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.MC,
-                LayerProtocolName.PHOTONICMEDIA, xcLowerMap, null);
-        this.connectionFullMap.put(connection.key(), connection);
-        LOG.info("Top connection created = {}", connection.toString());
-
-        Map<ConnectionKey, Connection> connServMap = new HashMap<>();
-        // OTSiMC top connections that will be added to the service object
-        Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-        connServMap.put(conn.key(), conn);
-        LowerConnection conn1 = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build();
-        Map<LowerConnectionKey, LowerConnection> topLowerMap = new HashMap<>();
-        topLowerMap.put(conn1.key(), conn1);
-
-        // OTSiMC top connection between edge roadms
-        LOG.info("Going to created top connection between OTSiMC");
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            connection1 = createTopConnection(spcRdmAD1, spcRdmAD2, cepMap, TapiStringConstants.OTSI_MC,
-                LayerProtocolName.PHOTONICMEDIA, topLowerMap, null);
-        this.connectionFullMap.put(connection1.key(), connection1);
-        LOG.info("Top connection created = {}", connection1.toString());
-
-        // OTSiMC top connections that will be added to the service object
-        Connection conn2 = new ConnectionBuilder().setConnectionUuid(connection1.getUuid()).build();
-        connServMap.put(conn2.key(), conn2);
-        this.topConnRdmRdm = conn2;
-        return connServMap;
-    }
-
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            createTopConnection(String tp1, String tp2,
-                        Map<org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey,
-                            ConnectionEndPoint> cepMap, String qual, LayerProtocolName topPortocol,
-                        Map<LowerConnectionKey, LowerConnection> xcMap, Connection additionalLowerConn) {
-        // find cep for each AD MC of roadm 1 and 2
-        LOG.info("Top connection name = {}", String.join("+", "TOP", tp1, tp2, qual));
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ConnectionEndPoint adCep1 =
-            cepMap.get(new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey(
-                new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", tp1.split("\\+")[0],
-                        qual, tp1.split("\\+")[1])).getBytes(Charset.forName("UTF-8")))
-                    .toString())));
-        LOG.info("ADCEP1 = {}", adCep1.toString());
-        org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cep1 =
-            new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(adCep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(adCep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(adCep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
-                .setConnectionEndPointUuid(adCep1.getUuid())
-                .build();
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ConnectionEndPoint adCep2 =
-            cepMap.get(new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey(
-                new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", tp2.split("\\+")[0],
-                        qual, tp2.split("\\+")[1])).getBytes(Charset.forName("UTF-8")))
-                    .toString())));
-        LOG.info("ADCEP2 = {}", adCep2.toString());
-        org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cep2 =
-            new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(adCep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(adCep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(adCep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
-                .setConnectionEndPointUuid(adCep1.getUuid())
-                .build();
-        Map<ConnectionEndPointKey, org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint> ceps = new HashMap<>();
-        ceps.put(cep1.key(), cep1);
-        ceps.put(cep2.key(), cep2);
-        Name connName = new NameBuilder()
-            .setValueName("Connection name")
-            .setValue(String.join("+", "TOP", tp1, tp2, qual))
-            .build();
-        // TODO: lower connection, supported link.......
-        if (additionalLowerConn != null) {
-            xcMap.putIfAbsent(new LowerConnectionKey(additionalLowerConn.getConnectionUuid()),
-                new LowerConnectionBuilder().setConnectionUuid(additionalLowerConn.getConnectionUuid()).build());
-        }
-        return new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "TOP", tp1, tp2, qual))
-                .getBytes(Charset.forName("UTF-8"))).toString()))
-            .setName(Map.of(connName.key(), connName))
-            .setConnectionEndPoint(ceps)
-            .setOperationalState(OperationalState.DISABLED)
-            .setLayerProtocolName(topPortocol)
-            .setLifecycleState(LifecycleState.POTENTIALAVAILABLE)
-            .setDirection(ForwardingDirection.BIDIRECTIONAL)
-            .setLowerConnection(xcMap)
-            .build();
-    }
-
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
-            createXCBetweenCeps(ConnectionEndPoint cep1, ConnectionEndPoint cep2, String tp1, String tp2, String qual,
-                        LayerProtocolName xcProtocol) {
-        LOG.info("Creation cross connection between: {} and {}", tp1, tp2);
-        LOG.info("Cross connection name = {}", String.join("+", "XC", tp1, tp2, qual));
-        LOG.info("CEP1 = {}", cep1.getClientNodeEdgePoint().toString());
-        LOG.info("CEP2 = {}", cep2.getClientNodeEdgePoint().toString());
-        org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cepServ1 =
-            new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(cep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(cep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(cep1.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
-                .setConnectionEndPointUuid(cep1.getUuid())
-                .build();
-        org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint cepServ2 =
-            new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPointBuilder()
-                .setNodeEdgePointUuid(cep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid())
-                .setTopologyUuid(cep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getTopologyUuid())
-                .setNodeUuid(cep2.getClientNodeEdgePoint()
-                    .values().stream().findFirst().orElseThrow().getNodeUuid())
-                .setConnectionEndPointUuid(cep2.getUuid())
-                .build();
-        Map<ConnectionEndPointKey, org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.connectivity.rev181210.connection.ConnectionEndPoint> ceps = new HashMap<>();
-        ceps.put(cepServ1.key(), cepServ1);
-        ceps.put(cepServ2.key(), cepServ2);
-        Name connName = new NameBuilder()
-            .setValueName("Connection name")
-            .setValue(String.join("+", "XC", tp1, tp2, qual))
-            .build();
-        // TODO: lower connection, supported link.......
-        return new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "XC", tp1, tp2, qual))
-                .getBytes(Charset.forName("UTF-8"))).toString()))
-            .setName(Map.of(connName.key(), connName))
-            .setConnectionEndPoint(ceps)
-            .setOperationalState(OperationalState.ENABLED)
-            .setLayerProtocolName(xcProtocol)
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setDirection(ForwardingDirection.BIDIRECTIONAL)
-            .build();
-    }
-
-    private ConnectionEndPoint createCepRoadm(String id, String qualifier) {
-        LOG.info("NEP = {}", String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1]));
-        Name cepName = new NameBuilder()
-            .setValueName("ConnectionEndPoint name")
-            .setValue(String.join("+", id.split("\\+")[0], qualifier,
-                id.split("\\+")[1]))
-            .build();
-        ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder()
-            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0],
-                    "PHOTONIC_MEDIA")).getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-                .getBytes(Charset.forName("UTF-8"))).toString()))
-            .build();
-        // TODO: add augmentation with the corresponding cep-spec (i.e. MC, OTSiMC...)
-        // TODO: add parent ONEP??
-        ConnectionEndPointBuilder cepBldr = new ConnectionEndPointBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setClientNodeEdgePoint(Map.of(cnep.key(), cnep))
-            .setName(Map.of(cepName.key(), cepName))
-            .setConnectionPortRole(PortRole.SYMMETRIC)
-            .setConnectionPortDirection(PortDirection.BIDIRECTIONAL)
-            .setOperationalState(OperationalState.ENABLED)
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA);
-        return cepBldr.build();
-    }
-
-    private ConnectionEndPoint createCepXpdr(String id, String qualifier, String nodeLayer,
-                                             LayerProtocolName cepProtocol) {
-        Name cepName = new NameBuilder()
-            .setValueName("ConnectionEndPoint name")
-            .setValue(String.join("+", id.split("\\+")[0], qualifier,
-                id.split("\\+")[1]))
-            .build();
-        ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder()
-            .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0],
-                    nodeLayer)).getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-                .getBytes(Charset.forName("UTF-8"))).toString()))
-            .build();
-        // TODO: add augmentation with the corresponding cep-spec (i.e. MC, OTSiMC...)
-        // TODO: add parent ONEP??
-        ConnectionEndPointBuilder cepBldr = new ConnectionEndPointBuilder()
-            .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0],
-                    qualifier, id.split("\\+")[1])).getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setClientNodeEdgePoint(Map.of(cnep.key(), cnep))
-            .setName(Map.of(cepName.key(), cepName))
-            .setConnectionPortRole(PortRole.SYMMETRIC)
-            .setConnectionPortDirection(PortDirection.BIDIRECTIONAL)
-            .setOperationalState(OperationalState.ENABLED)
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setLayerProtocolName(cepProtocol);
-        return cepBldr.build();
-    }
-
-    private void putRdmCepInTopologyContext(String node, String spcRdmAD, String qual, ConnectionEndPoint cep) {
-        LOG.info("NEP id before Merge = {}", String.join("+", node, qual, spcRdmAD.split("\\+")[1]));
-        LOG.info("Node of NEP id before Merge = {}", String.join("+", node, TapiStringConstants.PHTNC_MEDIA));
-        // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, TapiStringConstants.PHTNC_MEDIA)
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, qual, spcRdmAD.split("\\+")[1])
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        updateTopologyWithCep(topoUuid, nodeUuid, nepUuid, cep);
-    }
-
-    private void putXpdrCepInTopologyContext(String node, String spcXpdrNet, String qual, String nodeLayer,
-                                             ConnectionEndPoint cep) {
-        // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, nodeLayer)
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", node, qual, spcXpdrNet.split("\\+")[1])
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        updateTopologyWithCep(topoUuid, nodeUuid, nepUuid, cep);
-    }
-
-    public void updateTopologyWithCep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, ConnectionEndPoint cep) {
-        // TODO: verify this is correct. Should we identify the context IID with the context UUID??
-        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
-            .child(Topology.class, new TopologyKey(topoUuid))
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
-                new NodeKey(nodeUuid))
-            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
-            .build();
-        try {
-            Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
-                LogicalDatastoreType.OPERATIONAL, onepIID).get();
-            if (!optionalOnep.isPresent()) {
-                LOG.error("ONEP is not present in datastore");
-                return;
-            }
-            OwnedNodeEdgePoint onep = optionalOnep.orElseThrow();
-            LOG.info("ONEP found = {}", onep.toString());
-            // TODO -> If cep exists -> skip merging to datasore
-            OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
-            if (onep1 != null && onep1.getCepList() != null && onep1.getCepList().getConnectionEndPoint() != null) {
-                if (onep1.getCepList().getConnectionEndPoint().containsKey(
-                        new org.opendaylight.yang.gen.v1
-                            .urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey(cep.key()))) {
-                    LOG.info("CEP already in topology, skipping merge");
-                    return;
-                }
-            }
-            // Updated ONEP
-            CepList cepList = new CepListBuilder().setConnectionEndPoint(Map.of(cep.key(), cep)).build();
-            OwnedNodeEdgePoint1 onep1Bldr = new OwnedNodeEdgePoint1Builder().setCepList(cepList).build();
-            OwnedNodeEdgePoint newOnep = new OwnedNodeEdgePointBuilder(onep)
-                .addAugmentation(onep1Bldr)
-                .build();
-            LOG.info("New ONEP is {}", newOnep.toString());
-            // merge in datastore
-            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID,
-                newOnep);
-            this.networkTransactionService.commit().get();
-            LOG.info("CEP added successfully.");
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Couldnt update cep in topology", e);
-        }
-    }
-
-    private void updateConnectionContextWithConn(
-            Map<org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey,
-                org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection> connFullMap,
-            Map<ConnectionKey, Connection> connMap, Uuid suuid) {
-        // TODO: verify this is correct. Should we identify the context IID with the context UUID??
-        try {
-            ConnectivityService connServ = getConnectivityService(suuid);
-            ConnectivityService updtConnServ = new ConnectivityServiceBuilder(connServ)
-                .setConnection(connMap)
-                .build();
-
-            // Perform the merge operation with the new conn service and the connection context updated
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext
-                connectivityContext = new ConnectivityContextBuilder()
-                    .setConnectivityService(Map.of(updtConnServ.key(), updtConnServ))
-                    .setConnection(connFullMap)
-                    .build();
-            InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext> connectivitycontextIID =
-                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
-                    .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
-                    .build();
-            // merge in datastore
-            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, connectivitycontextIID,
-                connectivityContext);
-            this.networkTransactionService.commit().get();
-            LOG.info("TAPI connectivity merged successfully.");
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Failed to merge TAPI connectivity", e);
-        }
-    }
-
-    private ConnectivityService getConnectivityService(Uuid suuid) {
-        try {
-            // First read connectivity service with service uuid and update info
-            InstanceIdentifier<ConnectivityService> connectivityServIID =
-                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
-                    .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
-                    .child(ConnectivityService.class, new ConnectivityServiceKey(suuid))
-                    .build();
-
-            Optional<ConnectivityService> optConnServ =
-                this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, connectivityServIID).get();
-            if (!optConnServ.isPresent()) {
-                LOG.error("Connectivity service not found in tapi context");
-                return null;
-            }
-            return optConnServ.orElseThrow();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Connectivity service not found in tapi context. Error:", e);
-            return null;
-        }
-    }
-
-    private void deleteConnectivityService(Uuid suuid) {
-        // First read connectivity service with service uuid and update info
-        InstanceIdentifier<ConnectivityService> connectivityServIID =
-            InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
-                .child(org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
-                .child(ConnectivityService.class, new ConnectivityServiceKey(suuid))
-                .build();
-        try {
-            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, connectivityServIID);
-            this.networkTransactionService.commit().get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Failed to delete TAPI connectivity service", e);
-        }
-    }
-
-    private void deleteConnection(Uuid connectionUuid) {
-        // First read connectivity service with service uuid and update info
-        InstanceIdentifier<org.opendaylight.yang.gen.v1
-                .urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection> connectionIID =
-            InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
-                .child(org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
-                .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection.class,
-                    new org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey(
-                        connectionUuid))
-                .build();
-        try {
-            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, connectionIID);
-            this.networkTransactionService.commit().get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Failed to delete TAPI connection", e);
-        }
-    }
-
-    private String getIdBasedOnModelVersion(String nodeid) {
-        return nodeid.matches("[A-Z]{5}-[A-Z0-9]{2}-.*")
-            ? String.join("-", nodeid.split("-")[0], nodeid.split("-")[1]) : nodeid.split("-")[0];
-    }
-
-    private ConnectionEndPoint getAssociatediODUCep(String spcXpdrNetwork) {
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0],
-            TapiStringConstants.DSR).getBytes(Charset.forName("UTF-8")))).toString());
-        Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0],
-                TapiStringConstants.I_ODU, spcXpdrNetwork.split("\\+")[1]).getBytes(Charset.forName("UTF-8"))))
-            .toString());
-        Uuid cepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP",
-            spcXpdrNetwork.split("\\+")[0], TapiStringConstants.I_ODU, spcXpdrNetwork.split("\\+")[1]))
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        InstanceIdentifier<OwnedNodeEdgePoint> nepIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
-            .child(Topology.class, new TopologyKey(topoUuid))
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
-                new NodeKey(nodeUuid)).child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)).build();
-        try {
-            Optional<OwnedNodeEdgePoint> optNode = this.networkTransactionService
-                .read(LogicalDatastoreType.OPERATIONAL, nepIID).get();
-            if (!optNode.isPresent()) {
-                LOG.error("Node is not present in datastore");
-                return null;
-            }
-            if (optNode.orElseThrow().augmentation(OwnedNodeEdgePoint1.class) == null) {
-                LOG.error("Node doesnt have ceps");
-                return null;
-            }
-            return optNode.orElseThrow().augmentation(OwnedNodeEdgePoint1.class).getCepList().getConnectionEndPoint()
-                .get(new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey(cepUuid));
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Couldnt read node in topology", e);
-            return null;
-        }
-    }
-
-    private String getAssociatedNetworkPort(String spcXpdrClient, List<String> xpdrNetworkTplist) {
-        for (String networkPort:xpdrNetworkTplist) {
-            if (networkPort.split("\\+")[0].equals(spcXpdrClient.split("\\+")[0])) {
-                return networkPort;
-            }
-        }
-        return null;
-    }
-
-    private OpenroadmNodeType getOpenRoadmNodeType(List<String> xpdrNodelist) {
-        List<OpenroadmNodeType> openroadmNodeTypeList = new ArrayList<>();
-        for (String xpdrNode:xpdrNodelist) {
-            Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.DSR))
-                .getBytes(Charset.forName("UTF-8"))).toString());
-            InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.topology.rev181210.topology.Node> nodeIID
-                = InstanceIdentifier.builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.topology.rev181210.Context1.class).child(TopologyContext.class)
-                    .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
-                    .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
-                            new NodeKey(nodeUuid)).build();
-            try {
-                Optional<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> optNode
-                    = this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, nodeIID).get();
-                if (!optNode.isPresent()) {
-                    return null;
-                }
-                OpenroadmNodeType openroadmNodeType = OpenroadmNodeType.forName(optNode.orElseThrow().getName().get(
-                    new NameKey("Node Type")).getValue());
-                if (!openroadmNodeTypeList.contains(openroadmNodeType)) {
-                    openroadmNodeTypeList.add(openroadmNodeType);
-                }
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Couldnt read node in topology", e);
-                return null;
-            }
-        }
-        // TODO for now check that there is only one type, otherwise error
-        if (openroadmNodeTypeList.size() != 1) {
-            LOG.error("More than one xpdr type. List = {}", openroadmNodeTypeList);
-            return null;
-        }
-        return openroadmNodeTypeList.get(0);
-    }
-
-    private List<String> getAssociatedClientsPort(List<String> xpdrNetworkTplist) {
-        List<String> clientPortList = new ArrayList<>();
-        for (String networkPort:xpdrNetworkTplist) {
-            String nodeId = String.join("-", networkPort.split("\\+")[0].split("-")[0],
-                networkPort.split("\\+")[0].split("-")[1]);
-            String tpId = networkPort.split("\\+")[1];
-            InstanceIdentifier<Mapping> mapIID = InstanceIdentifier.builder(Network.class)
-                .child(Nodes.class, new NodesKey(nodeId))
-                .child(Mapping.class, new MappingKey(tpId)).build();
-            try {
-                Optional<Mapping> optMapping = this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION,
-                    mapIID).get();
-                if (!optMapping.isPresent()) {
-                    LOG.error("Couldnt find mapping for port {} of node {}", tpId, nodeId);
-                }
-                Mapping mapping = optMapping.orElseThrow();
-                LOG.info("Mapping for node+port {}+{} = {}", nodeId, tpId, mapping);
-                String key = String.join("+", String.join("-", nodeId, tpId.split("\\-")[0]),
-                    mapping.getConnectionMapLcp());
-                LOG.info("Key to be added to list = {}", key);
-                if (!clientPortList.contains(key)) {
-                    clientPortList.add(key);
-                }
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Couldnt read mapping from datastore", e);
-                return null;
-            }
-
-        }
-        return clientPortList;
-    }
-
-    public void setInput(CreateConnectivityServiceInput input) {
-        this.input = input;
-    }
-
-    public void setServiceUuid(Uuid serviceUuid) {
-        this.serviceUuid = serviceUuid;
-    }
-}
\ No newline at end of file
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceNotificationHandler.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceNotificationHandler.java
new file mode 100644 (file)
index 0000000..3137fab
--- /dev/null
@@ -0,0 +1,376 @@
+/*
+ * Copyright © 2021 Nokia, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.listeners;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.ServicePathRpcResult;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.service.path.rpc.result.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx;
+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.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.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.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.Connection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContextBuilder;
+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.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.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TapiPceNotificationHandler {
+
+    private static final Logger LOG = LoggerFactory.getLogger(TapiPceNotificationHandler.class);
+
+    private ServicePathRpcResult servicePathRpcResult;
+    private CreateConnectivityServiceInput input;
+    private Uuid serviceUuid;
+    private final DataBroker dataBroker;
+    private final NetworkTransactionService networkTransactionService;
+    private final ConnectivityUtils connectivityUtils;
+    private final Map<org.opendaylight.yang.gen.v1.urn
+        .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey,
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection>
+        connectionFullMap; // this variable is for complete connection objects
+
+    public TapiPceNotificationHandler(DataBroker dataBroker, ConnectivityUtils connecUtil) {
+        this.connectionFullMap = new HashMap<>();
+        this.dataBroker = dataBroker;
+        this.networkTransactionService = new NetworkTransactionImpl(this.dataBroker);
+        this.connectivityUtils = connecUtil;
+    }
+
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(ServicePathRpcResult.class, this::onServicePathRpcResult)));
+    }
+
+    private void onServicePathRpcResult(ServicePathRpcResult notification) {
+        if (compareServicePathRpcResult(notification)) {
+            LOG.warn("ServicePathRpcResult already wired !");
+            return;
+        }
+        servicePathRpcResult = notification;
+        switch (servicePathRpcResult.getNotificationType().getIntValue()) {
+            /* path-computation-request. */
+            case 1:
+                onPathComputationResult(notification);
+                break;
+            /* cancel-resource-reserve. */
+            case 2:
+                onCancelResourceResult(notification.getServiceName());
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Process path computation request result.
+     * @param notification the result notification.
+     */
+    private void onPathComputationResult(ServicePathRpcResult notification) {
+        this.connectionFullMap.clear();
+        LOG.info("PCE '{}' Notification received : {}",servicePathRpcResult.getNotificationType().getName(),
+            notification);
+        if (servicePathRpcResult.getStatus() == RpcStatusEx.Failed) {
+            LOG.error("PCE path computation failed !");
+            return;
+        } else if (servicePathRpcResult.getStatus() == RpcStatusEx.Pending) {
+            LOG.warn("PCE path computation returned a Penging RpcStatusEx code!");
+            return;
+        } else if (servicePathRpcResult.getStatus() != RpcStatusEx.Successful) {
+            LOG.error("PCE path computation returned an unknown RpcStatusEx code!");
+            return;
+        }
+
+        LOG.info("PCE calculation done OK !");
+        if (servicePathRpcResult.getPathDescription() == null) {
+            LOG.error("'PathDescription' parameter is null ");
+            return;
+        }
+        PathDescription pathDescription = new PathDescriptionBuilder()
+            .setAToZDirection(servicePathRpcResult.getPathDescription().getAToZDirection())
+            .setZToADirection(servicePathRpcResult.getPathDescription().getZToADirection())
+            .build();
+        LOG.info("PathDescription for TAPI gets : {}", pathDescription);
+        if (input == null) {
+            LOG.error("Input is null !");
+            return;
+        }
+        // TODO: check kind of service: based on the device Id of the input,
+        //  verify the type of XPDR and the capacity and determine if it is an OTN service or pure WDM service
+        // Create connections and ceps for the connectivity service.
+        //  Connections must be with a locked stated. As the renderer hasnt implemented yet the oc's
+        Map<ConnectionKey, Connection> connectionMap = connectivityUtils.createConnectionsFromService(
+                pathDescription, input.getLayerProtocolName());
+        this.connectionFullMap.putAll(connectivityUtils.getConnectionFullMap());
+        LOG.debug("Connection Map from createConnectionsAndCepsForService is {}, LAYERPROTOCOL of service is {} ",
+            connectionMap.toString(), input.getLayerProtocolName());
+        // add connections to connection context and to connectivity context
+        updateConnectionContextWithConn(this.connectionFullMap, connectionMap, serviceUuid);
+    }
+
+    /**
+     * Process cancel resource result.
+     * @param serviceName Service name to build uuid.
+     */
+    private void onCancelResourceResult(String serviceName) {
+        if (servicePathRpcResult.getStatus() == RpcStatusEx.Failed) {
+            LOG.info("PCE cancel resource failed !");
+            return;
+        } else if (servicePathRpcResult.getStatus() == RpcStatusEx.Pending) {
+            LOG.warn("PCE cancel returned a Penging RpcStatusEx code!");
+            return;
+        } else if (servicePathRpcResult.getStatus() != RpcStatusEx.Successful) {
+            LOG.error("PCE cancel returned an unknown RpcStatusEx code!");
+            return;
+        }
+        LOG.info("PCE cancel resource done OK !");
+        Uuid suuid = new Uuid(UUID.nameUUIDFromBytes(serviceName.getBytes(Charset.forName("UTF-8")))
+            .toString());
+        // get connections of connectivity service and remove them from tapi context and then remove
+        //  service from context. The CEPs are maintained as they could be reused by another service
+        ConnectivityService connService = getConnectivityService(suuid);
+        if (connService == null) {
+            LOG.error("Service doesnt exist in tapi context");
+            return;
+        }
+        for (Connection connection:connService.getConnection().values()) {
+            deleteConnection(connection.getConnectionUuid());
+        }
+        deleteConnectivityService(suuid);
+    }
+
+    @SuppressFBWarnings(
+        value = "ES_COMPARING_STRINGS_WITH_EQ",
+        justification = "false positives, not strings but real object references comparisons")
+    private Boolean compareServicePathRpcResult(ServicePathRpcResult notification) {
+        if (servicePathRpcResult == null) {
+            return false;
+        }
+        if (servicePathRpcResult.getNotificationType() != notification.getNotificationType()) {
+            return false;
+        }
+        if (servicePathRpcResult.getServiceName() != notification.getServiceName()) {
+            return false;
+        }
+        if (servicePathRpcResult.getStatus() != notification.getStatus()) {
+            return false;
+        }
+        if (servicePathRpcResult.getStatusMessage() != notification.getStatusMessage()) {
+            return false;
+        }
+        return true;
+    }
+
+
+    public void updateTopologyWithCep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, ConnectionEndPoint cep) {
+        // TODO: verify this is correct. Should we identify the context IID with the context UUID??
+        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
+            .child(Topology.class, new TopologyKey(topoUuid))
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
+                new NodeKey(nodeUuid))
+            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
+            .build();
+        try {
+            Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, onepIID).get();
+            if (!optionalOnep.isPresent()) {
+                LOG.error("ONEP is not present in datastore");
+                return;
+            }
+            OwnedNodeEdgePoint onep = optionalOnep.orElseThrow();
+            LOG.info("ONEP found = {}", onep.toString());
+            // TODO -> If cep exists -> skip merging to datasore
+            OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
+            if (onep1 != null && onep1.getCepList() != null && onep1.getCepList().getConnectionEndPoint() != null) {
+                if (onep1.getCepList().getConnectionEndPoint().containsKey(
+                        new org.opendaylight.yang.gen.v1
+                            .urn.onf.otcc.yang.tapi.connectivity.rev221121.cep.list.ConnectionEndPointKey(cep.key()))) {
+                    LOG.info("CEP already in topology, skipping merge");
+                    return;
+                }
+            }
+            // Updated ONEP
+            CepList cepList = new CepListBuilder().setConnectionEndPoint(Map.of(cep.key(), cep)).build();
+            OwnedNodeEdgePoint1 onep1Bldr = new OwnedNodeEdgePoint1Builder().setCepList(cepList).build();
+            OwnedNodeEdgePoint newOnep = new OwnedNodeEdgePointBuilder(onep)
+                .addAugmentation(onep1Bldr)
+                .build();
+            LOG.info("New ONEP is {}", newOnep.toString());
+            // merge in datastore
+            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID,
+                newOnep);
+            this.networkTransactionService.commit().get();
+            LOG.info("CEP added successfully.");
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Couldnt update cep in topology", e);
+        }
+    }
+
+    public void updateTopologyWithNep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, OwnedNodeEdgePoint onep) {
+        // TODO: verify this is correct. Should we identify the context IID with the context UUID??
+        InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
+            .child(Topology.class, new TopologyKey(topoUuid))
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
+                new NodeKey(nodeUuid))
+            .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
+            .build();
+        try {
+            Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
+                LogicalDatastoreType.OPERATIONAL, onepIID).get();
+            if (optionalOnep.isPresent()) {
+                LOG.error("ONEP is already present in datastore");
+                return;
+            }
+            // merge in datastore
+            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID,
+                onep);
+            this.networkTransactionService.commit().get();
+            LOG.info("NEP {} added successfully.", onep.getName().toString());
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Couldnt put NEP {} in topology, error = ", onep.getName().toString(), e);
+        }
+    }
+
+
+    private void updateConnectionContextWithConn(
+            Map<org.opendaylight.yang.gen.v1.urn
+                    .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey,
+                org.opendaylight.yang.gen.v1.urn
+                    .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection> connFullMap,
+            Map<ConnectionKey, Connection> connMap, Uuid suuid) {
+        // TODO: verify this is correct. Should we identify the context IID with the context UUID??
+        try {
+            ConnectivityService connServ = getConnectivityService(suuid);
+            ConnectivityService updtConnServ = new ConnectivityServiceBuilder(connServ)
+                .setConnection(connMap)
+                .build();
+
+            // Perform the merge operation with the new conn service and the connection context updated
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext
+                connectivityContext = new ConnectivityContextBuilder()
+                    .setConnectivityService(Map.of(updtConnServ.key(), updtConnServ))
+                    .setConnection(connFullMap)
+                    .build();
+            InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext> connectivitycontextIID =
+                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
+                    .child(org.opendaylight.yang.gen.v1.urn
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
+                    .build();
+            // merge in datastore
+            this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, connectivitycontextIID,
+                connectivityContext);
+            this.networkTransactionService.commit().get();
+            LOG.info("TAPI connectivity merged successfully.");
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed to merge TAPI connectivity", e);
+        }
+    }
+
+    private ConnectivityService getConnectivityService(Uuid suuid) {
+        try {
+            // First read connectivity service with service uuid and update info
+            InstanceIdentifier<ConnectivityService> connectivityServIID =
+                InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
+                    .child(org.opendaylight.yang.gen.v1.urn
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
+                    .child(ConnectivityService.class, new ConnectivityServiceKey(suuid))
+                    .build();
+
+            Optional<ConnectivityService> optConnServ =
+                this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, connectivityServIID).get();
+            if (optConnServ.isEmpty()) {
+                LOG.error("Connectivity service not found in tapi context");
+                return null;
+            }
+            return optConnServ.orElseThrow();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Connectivity service not found in tapi context. Error:", e);
+            return null;
+        }
+    }
+
+    private void deleteConnectivityService(Uuid suuid) {
+        // First read connectivity service with service uuid and update info
+        InstanceIdentifier<ConnectivityService> connectivityServIID =
+            InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
+                .child(org.opendaylight.yang.gen.v1.urn
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
+                .child(ConnectivityService.class, new ConnectivityServiceKey(suuid))
+                .build();
+        try {
+            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, connectivityServIID);
+            this.networkTransactionService.commit().get();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed to delete TAPI connectivity service", e);
+        }
+    }
+
+    private void deleteConnection(Uuid connectionUuid) {
+        // First read connectivity service with service uuid and update info
+        InstanceIdentifier<org.opendaylight.yang.gen.v1
+                .urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection> connectionIID =
+            InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
+                .child(org.opendaylight.yang.gen.v1.urn
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
+                .child(org.opendaylight.yang.gen.v1.urn
+                        .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection.class,
+                    new org.opendaylight.yang.gen.v1.urn
+                            .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey(
+                        connectionUuid))
+                .build();
+        try {
+            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, connectionIID);
+            this.networkTransactionService.commit().get();
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.error("Failed to delete TAPI connection", e);
+        }
+    }
+
+    public void setInput(CreateConnectivityServiceInput input) {
+        this.input = input;
+    }
+
+    public void setServiceUuid(Uuid serviceUuid) {
+        this.serviceUuid = serviceUuid;
+    }
+}
\ No newline at end of file
similarity index 84%
rename from tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererListenerImpl.java
rename to tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererNotificationHandler.java
index 32d36391b767d2213a83a4429f68564925e15190..f65f35808cd2ef6484bafa54b51cae4e4a61d7b9 100644 (file)
@@ -15,61 +15,67 @@ import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.RendererRpcResultSp;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererListener;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService;
-import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationServiceBuilder;
-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.DateAndTime;
-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.Uuid;
-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.NameKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1;
-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.Connection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameKey;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationService;
+import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.PublishTapiNotificationServiceBuilder;
+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.DateAndTime;
+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.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.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1;
+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.Connection;
+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.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.notification.rev221121.notification.TargetObjectName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TapiRendererListenerImpl implements TransportpceRendererListener {
+public class TapiRendererNotificationHandler {
 
-    private static final Logger LOG = LoggerFactory.getLogger(TapiRendererListenerImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(TapiRendererNotificationHandler.class);
     private final DataBroker dataBroker;
     private Uuid serviceUuid;
     private RendererRpcResultSp serviceRpcResultSp;
     private final NetworkTransactionService networkTransactionService;
     private final NotificationPublishService notificationPublishService;
 
-    public TapiRendererListenerImpl(DataBroker dataBroker, NotificationPublishService notificationPublishService) {
+    public TapiRendererNotificationHandler(DataBroker dataBroker,
+            NotificationPublishService notificationPublishService) {
         this.dataBroker = dataBroker;
         this.networkTransactionService = new NetworkTransactionImpl(this.dataBroker);
         this.notificationPublishService = notificationPublishService;
     }
 
-    @Override
-    public void onRendererRpcResultSp(RendererRpcResultSp notification) {
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(RendererRpcResultSp.class, this::onRendererRpcResultSp)));
+    }
+
+    private void onRendererRpcResultSp(RendererRpcResultSp notification) {
         if (compareServiceRpcResultSp(notification)) {
             LOG.warn("ServiceRpcResultSp already wired !");
             return;
@@ -184,7 +190,7 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
             InstanceIdentifier<ConnectivityService> connectivityServIID =
                 InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                     .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                     .child(ConnectivityService.class, new ConnectivityServiceKey(suuid))
                     .build();
 
@@ -206,23 +212,23 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
         try {
             // First read connection with connection uuid and update info
             InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection> connectionIID =
+                .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection> connectionIID =
                 InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                     .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                     .child(org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection.class,
+                            .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection.class,
                         new ConnectionKey(connectionUuid))
                     .build();
 
             Optional<org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection> optConn =
+                .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection> optConn =
                 this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, connectionIID).get();
             if (!optConn.isPresent()) {
                 LOG.error("Connection not found in tapi context");
                 return;
             }
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection
                 newConnection = new ConnectionBuilder(optConn.orElseThrow()).setLifecycleState(LifecycleState.INSTALLED)
                     .setOperationalState(OperationalState.ENABLED).build();
             // merge in datastore
@@ -242,7 +248,7 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
             InstanceIdentifier<ConnectivityService> connServIID =
                 InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                     .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                     .child(ConnectivityService.class, new ConnectivityServiceKey(updtConnServ.getUuid()))
                     .build();
 
@@ -268,7 +274,7 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
         InstanceIdentifier<ConnectivityService> connectivityServIID =
             InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                 .child(org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                 .child(ConnectivityService.class, new ConnectivityServiceKey(suuid))
                 .build();
         try {
@@ -282,14 +288,14 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
     private void deleteConnection(Uuid connectionUuid) {
         // First read connectivity service with service uuid and update info
         InstanceIdentifier<org.opendaylight.yang.gen.v1
-            .urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection> connectionIID =
+            .urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection> connectionIID =
             InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                 .child(org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                 .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection.class,
+                        .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection.class,
                     new org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey(
+                        .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey(
                             connectionUuid))
                 .build();
         try {
@@ -351,12 +357,12 @@ public class TapiRendererListenerImpl implements TransportpceRendererListener {
             .setUuid(new Uuid(UUID.randomUUID().toString()))
             .setTopic(connService.getUuid().getValue())
             .setTargetObjectIdentifier(connService.getUuid())
-            .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
+            .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE)
             .setChangedAttributes(changedStates)
             .setEventTimeStamp(datetime)
             .setTargetObjectName(targetObjectNames)
-            .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE)
-            .setLayerProtocolName(connService.getServiceLayer())
+            .setTargetObjectType(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE)
+            .setLayerProtocolName(connService.getLayerProtocolName())
             .build();
     }
 
similarity index 61%
rename from tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiServiceHandlerListenerImpl.java
rename to tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiServiceNotificationHandler.java
index 03ad2e5e397630f1f8a30d9557c4d4e77b862ff6..b1930d8726d13e2da6982a9092cec7e811080ae6 100644 (file)
@@ -7,24 +7,28 @@
  */
 package org.opendaylight.transportpce.tapi.listeners;
 
+import java.util.Set;
 import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.NotificationService.CompositeListener;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.ServiceRpcResultSh;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev201125.TransportpceServicehandlerListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TapiServiceHandlerListenerImpl implements TransportpceServicehandlerListener {
+public class TapiServiceNotificationHandler {
 
-    private static final Logger LOG = LoggerFactory.getLogger(TapiServiceHandlerListenerImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(TapiServiceNotificationHandler.class);
     private final DataBroker dataBroker;
 
-    public TapiServiceHandlerListenerImpl(DataBroker dataBroker) {
+    public TapiServiceNotificationHandler(DataBroker dataBroker) {
         this.dataBroker = dataBroker;
+    }
 
+    public CompositeListener getCompositeListener() {
+        return new CompositeListener(Set.of(
+            new CompositeListener.Component<>(ServiceRpcResultSh.class, this::onServiceRpcResultSh)));
     }
 
-    @Override
-    public void onServiceRpcResultSh(ServiceRpcResultSh notification) {
+    private void onServiceRpcResultSh(ServiceRpcResultSh notification) {
         LOG.info("Avoid dataBroker error {}", dataBroker.getClass().getCanonicalName());
     }
 }
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORToTapiTopology.java
new file mode 100644 (file)
index 0000000..7d188bb
--- /dev/null
@@ -0,0 +1,1358 @@
+/*
+ * Copyright © 2023 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.topology;
+
+import java.math.RoundingMode;
+import java.nio.charset.Charset;
+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.Set;
+import java.util.TreeMap;
+import java.util.UUID;
+import java.util.stream.Collectors;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
+import org.opendaylight.transportpce.common.fixedflex.GridUtils;
+import org.opendaylight.transportpce.tapi.TapiStringConstants;
+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.degree.rev230526.degree.used.wavelengths.UsedWavelengths;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev230526.degree.used.wavelengths.UsedWavelengthsKey;
+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.rev230526.networks.network.node.termination.point.PpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.TxTtpAttributes;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.networks.network.node.termination.point.XpdrNetworkAttributes;
+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.otn.network.topology.rev230526.Node1;
+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.networks.network.Node;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
+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.CAPACITYUNITGBPS;
+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.LAYERPROTOCOLQUALIFIER;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.AvailableCapacityBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.TotalPotentialCapacityBuilder;
+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.payload.structure.CapacityBuilder;
+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.digital.otn.rev221121.ODUTYPEODU0;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODUCN;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.OTUTYPEOTUCN;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPEGigE;
+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.PHOTONICLAYERQUALIFIEROTSi;
+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.PhotonicMediaNodeEdgePointSpecBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.photonic.media.node.edge.point.spec.SpectrumCapabilityPacBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.AvailableSpectrumKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.OccupiedSpectrumKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrum;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.spectrum.capability.pac.SupportableSpectrumKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULECANNOTFORWARDACROSSGROUP;
+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.RuleType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.inter.rule.group.AssociatedNodeRuleGroup;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.inter.rule.group.AssociatedNodeRuleGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.inter.rule.group.AssociatedNodeRuleGroupKey;
+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.InterRuleGroupBuilder;
+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.RiskParameterPacBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructure;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.AvailablePayloadStructureBuilder;
+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.MappedServiceInterfacePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructure;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedPayloadStructureBuilder;
+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.LinkKey;
+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.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.common.Decimal64;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ConvertORToTapiTopology {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ConvertORToTapiTopology.class);
+    private static final TreeMap<Integer, String> OPMODE_LOOPRATE_MAP;
+    private static final int OPMODE_LOOPRATE_MAX;
+    private static final Map<String, Map<String, Map<LAYERPROTOCOLQUALIFIER, Uint64>>> LPN_MAP;
+    private String ietfNodeId;
+    private OpenroadmNodeType ietfNodeType;
+    private AdminStates ietfNodeAdminState;
+    private State ietfNodeOperState;
+    private List<TerminationPoint> oorClientPortList;
+    private List<TerminationPoint> oorNetworkPortList;
+    private OduSwitchingPools oorOduSwitchingPool;
+    private Uuid tapiTopoUuid;
+    private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
+        tapiNodes;
+    private Map<LinkKey, Link> tapiLinks;
+    private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
+    private Map<String, Uuid> uuidMap;
+
+    static {
+        OPMODE_LOOPRATE_MAP = new TreeMap<>(Comparator.reverseOrder());
+        OPMODE_LOOPRATE_MAP.putAll(Map.of(8, "800G", 6, "600G" , 4, "400G" , 3, "300G" , 2, "200G" , 1, "100G"));
+        OPMODE_LOOPRATE_MAX = Collections.max(OPMODE_LOOPRATE_MAP.keySet());
+        LPN_MAP = new HashMap<>(Map.of(
+            "ETH", new HashMap<>(Map.of(
+                "If1GEODU0", Map.of(
+                    ODUTYPEODU0.VALUE, Uint64.valueOf(0), DIGITALSIGNALTYPEGigE.VALUE, Uint64.valueOf(0)),
+                "If10GEODU2e", Map.of(
+                    ODUTYPEODU2E.VALUE, Uint64.valueOf(0), DIGITALSIGNALTYPE10GigELAN.VALUE, Uint64.valueOf(0)),
+                "If10GEODU2", Map.of(
+                    ODUTYPEODU2.VALUE, Uint64.valueOf(0), DIGITALSIGNALTYPE10GigELAN.VALUE, Uint64.valueOf(0)),
+                "If10GE", Map.of(DIGITALSIGNALTYPE10GigELAN.VALUE, Uint64.valueOf(0)),
+                "If100GEODU4", Map.of(
+                    ODUTYPEODU4.VALUE, Uint64.valueOf(0), DIGITALSIGNALTYPE100GigE.VALUE, Uint64.valueOf(0)),
+                "If100GE", Map.of(DIGITALSIGNALTYPE100GigE.VALUE, Uint64.valueOf(0)),
+                "IfOCH", Map.of(ODUTYPEODU4.VALUE, Uint64.valueOf(0)))),
+            "ODU", new HashMap<>(Map.of(
+                "If1GEODU0", Map.of(ODUTYPEODU0.VALUE, Uint64.valueOf(0)),
+                "If10GEODU2e", Map.of(ODUTYPEODU2E.VALUE, Uint64.valueOf(0)),
+                "If10GEODU2", Map.of(ODUTYPEODU2.VALUE, Uint64.valueOf(0)),
+                "If100GEODU4", Map.of(ODUTYPEODU4.VALUE, Uint64.valueOf(0)))),
+            "PHOTONIC_MEDIA", new HashMap<>(Map.of(
+                "IfOCHOTUCnODUCn",
+                    Map.of(ODUTYPEODUCN.VALUE, Uint64.valueOf(1), OTUTYPEOTUCN.VALUE, Uint64.valueOf(1)),
+                "IfOCH",
+                    Map.of(ODUTYPEODUCN.VALUE, Uint64.valueOf(1), OTUTYPEOTUCN.VALUE, Uint64.valueOf(1),
+                        PHOTONICLAYERQUALIFIEROTSiMC.VALUE, Uint64.valueOf(1),
+                        PHOTONICLAYERQUALIFIEROTS.VALUE, Uint64.valueOf(1))))));
+        LPN_MAP.get("ETH").put("IfOCHOTU4ODU4", LPN_MAP.get("ETH").get("IfOCH"));
+        LPN_MAP.put("DSR", LPN_MAP.get("ETH"));
+        LPN_MAP.get("ODU").put("If10GE", LPN_MAP.get("ODU").get("If10GEODU2"));
+        LPN_MAP.get("ODU").put("If100GE", LPN_MAP.get("ODU").get("If100GEODU4"));
+        LPN_MAP.get("ODU").put("IfOCHOTU4ODU4", LPN_MAP.get("ODU").get("If100GEODU4"));
+        LPN_MAP.get("ODU").put("IfOCH", LPN_MAP.get("ODU").get("If100GEODU4"));
+        LPN_MAP.get("PHOTONIC_MEDIA").put("IfOtsiOtucnOducn", LPN_MAP.get("PHOTONIC_MEDIA").get("IfOCHOTUCnODUCn"));
+        LPN_MAP.get("PHOTONIC_MEDIA").put("IfOCHOTUCnODUCnRegen", LPN_MAP.get("PHOTONIC_MEDIA").get("IfOCHOTUCnODUCn"));
+        LPN_MAP
+            .get("PHOTONIC_MEDIA").put("IfOCHOTUCnODUCnUniregen", LPN_MAP.get("PHOTONIC_MEDIA").get("IfOCHOTUCnODUCn"));
+        LPN_MAP.get("PHOTONIC_MEDIA").put("IfOCHOTU4ODU4", LPN_MAP.get("PHOTONIC_MEDIA").get("IfOCH"));
+        LPN_MAP.get("PHOTONIC_MEDIA").put("IfOCHOTU4ODU4Regen", LPN_MAP.get("PHOTONIC_MEDIA").get("IfOCH"));
+        LPN_MAP.get("PHOTONIC_MEDIA").put("IfOCHOTU4ODU4Uniregen", LPN_MAP.get("PHOTONIC_MEDIA").get("IfOCH"));
+    }
+
+
+    public ConvertORToTapiTopology(Uuid tapiTopoUuid) {
+        this.tapiTopoUuid = tapiTopoUuid;
+        this.tapiNodes = new HashMap<>();
+        this.tapiLinks = new HashMap<>();
+        this.uuidMap = new HashMap<>();
+        this.tapiSips = new HashMap<>();
+    }
+
+    public void convertNode(Node ietfNode, List<String> networkPorts) {
+        this.ietfNodeId = ietfNode.getNodeId().getValue();
+        var ietfAug =
+            ietfNode.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class);
+        if (ietfAug == null) {
+            return;
+        }
+        this.ietfNodeType = ietfAug.getNodeType();
+        this.ietfNodeAdminState = ietfAug.getAdministrativeState();
+        this.ietfNodeOperState = ietfAug.getOperationalState();
+        var ietfAugTopo =
+            ietfNode.augmentation(
+                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class);
+        this.oorNetworkPortList = ietfAugTopo.getTerminationPoint().values().stream()
+            .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
+                    == OpenroadmTpType.XPONDERNETWORK.getIntValue()
+                && networkPorts.contains(tp.getTpId().getValue()))
+            .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
+            .collect(Collectors.toList());
+        if (this.ietfNodeType.equals(OpenroadmNodeType.TPDR)) {
+            this.oorOduSwitchingPool = createOduSwitchingPoolForTp100G();
+            List<TpId> tpList = this.oorOduSwitchingPool.getNonBlockingList().values().stream()
+                .flatMap(nbl -> nbl.getTpList().stream())
+                .collect(Collectors.toList());
+            this.oorClientPortList = ietfAugTopo.getTerminationPoint().values().stream()
+                .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
+                        == OpenroadmTpType.XPONDERCLIENT.getIntValue()
+                    && tpList.contains(tp.getTpId()))
+                .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
+                .collect(Collectors.toList());
+            this.oorClientPortList.forEach(tp -> LOG.info("tp = {}", tp.getTpId()));
+        } else {
+            this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools()
+                .values().stream().findFirst().orElseThrow();
+            this.oorClientPortList = ietfAugTopo.getTerminationPoint().values().stream()
+                .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
+                    == OpenroadmTpType.XPONDERCLIENT.getIntValue())
+                .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
+                .collect(Collectors.toList());
+        }
+
+        // node creation [DSR/ODU] ([DSR/ODU] and OTSI merged in R 2.4.X)
+        LOG.info("creation of a DSR/ODU node for {}", this.ietfNodeId);
+        String nodeIdXpdr = String.join("+", this.ietfNodeId, TapiStringConstants.XPDR);
+        this.uuidMap.put(nodeIdXpdr,
+                //nodeUuid
+                new Uuid(UUID.nameUUIDFromBytes(nodeIdXpdr.getBytes(Charset.forName("UTF-8"))).toString()));
+        Name nameDsr = new NameBuilder().setValueName("dsr/odu node name").setValue(nodeIdXpdr).build();
+        Name namePhot = new NameBuilder().setValueName("otsi node name").setValue(nodeIdXpdr).build();
+        Name nameNodeType = new NameBuilder().setValueName("Node Type").setValue(this.ietfNodeType.getName()).build();
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode =
+            createTapiNode(
+                Map.of(nameDsr.key(), nameDsr, namePhot.key(), namePhot, nameNodeType.key(), nameNodeType),
+                //dsrLayerProtocols
+                Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU,
+                       LayerProtocolName.DIGITALOTN, LayerProtocolName.PHOTONICMEDIA));
+        LOG.debug("XPDR Node {} should have {} NEPs and SIPs",
+            this.ietfNodeId, this.oorClientPortList.size() + this.oorNetworkPortList.size());
+        LOG.info("XPDR Node {} has {} NEPs and {} SIPs",
+            this.ietfNodeId,
+            dsrNode.getOwnedNodeEdgePoint().values().size(),
+            dsrNode.getOwnedNodeEdgePoint().values().stream()
+                .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count());
+        tapiNodes.put(dsrNode.key(), dsrNode);
+    }
+
+    public Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(String topoType, Uuid nodeUuid,
+            String subNodeName, List<OwnedNodeEdgePointKey> onepl, FORWARDINGRULE forwardingRule, int index) {
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
+                nepMap = new HashMap<>();
+        for (OwnedNodeEdgePointKey onepKey : onepl) {
+            var nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                    .node.rule.group.NodeEdgePointBuilder()
+                .setTopologyUuid(tapiTopoUuid)
+                .setNodeUuid(nodeUuid)
+                .setNodeEdgePointUuid(onepKey.getUuid())
+                .build();
+            nepMap.put(nep.key(), nep);
+        }
+        String nrgNameValue = String.join("-", subNodeName, "node-rule-group-" + index);
+        Rule rule = new RuleBuilder()
+            .setLocalId("forward")
+            .setForwardingRule(forwardingRule)
+            .setRuleType(new HashSet<RuleType>(Set.of(RuleType.FORWARDING)))
+            .build();
+        Name nrgName = new NameBuilder().setValueName("nrg name").setValue(nrgNameValue).build();
+        NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
+            .setName(Map.of(nrgName.key(), nrgName))
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes((nrgNameValue).getBytes(Charset.forName("UTF-8"))).toString()))
+            .setRule(new HashMap<RuleKey, Rule>(Map.of(rule.key(), rule)))
+            .setNodeEdgePoint(nepMap)
+            .build();
+        return new HashMap<>(Map.of(nodeRuleGroup.key(), nodeRuleGroup));
+    }
+
+    public Map<NodeRuleGroupKey, NodeRuleGroup> createAllNodeRuleGroupForRdmNode(
+            String topoType, Uuid nodeUuid, String orNodeId, Collection<OwnedNodeEdgePoint> onepl) {
+        List<OwnedNodeEdgePoint> otsNepList = topoType.equals("T0ML") ? onepl.stream().collect(Collectors.toList())
+                : onepl.stream()
+                    .filter(onep -> onep.getName().keySet().contains(new NameKey("PHOTONIC_MEDIA_OTSNodeEdgePoint")))
+                    .collect(Collectors.toList());
+        LOG.info("Creating NRG for {} {}", topoType, otsNepList);
+        List<OwnedNodeEdgePointKey> degOnepKeyList = new ArrayList<>();
+        List<String> srgNames = new ArrayList<>();
+        Map<OwnedNodeEdgePointKey,String> srgMap = new HashMap<>();
+        for (OwnedNodeEdgePoint onep : otsNepList) {
+            String onepName = onep.getName()
+                .get(new NameKey(topoType.equals("T0ML") ? "NodeEdgePoint name" : "PHOTONIC_MEDIA_OTSNodeEdgePoint"))
+                .getValue();
+            String subNodeName = topoType.equals("T0ML") ? "ROADMINFRA-SRG-PP"
+                : String.join("-", onepName.split("\\+")[0], onepName.split("\\+")[2]);
+            if (subNodeName.contains("DEG")) {
+                subNodeName = subNodeName.split("\\-TTP")[0];
+                degOnepKeyList.add(onep.key());
+            } else if (subNodeName.contains("SRG")) {
+                subNodeName = subNodeName.split("\\-PP")[0];
+                srgMap.put(onep.key(), subNodeName);
+                if (!srgNames.contains(subNodeName)) {
+                    srgNames.add(subNodeName);
+                }
+            }
+        }
+        int index = 0;
+        Map<NodeRuleGroupKey, NodeRuleGroup> globalNrgMap = new  HashMap<>();
+        if (topoType.equals("Full")) {
+            globalNrgMap.putAll(createNodeRuleGroupForRdmNode(
+                    topoType, nodeUuid, String.join("-", orNodeId, "DEG"),
+                    degOnepKeyList, FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, index));
+            index++;
+        }
+        for (String srgName : srgNames) {
+            globalNrgMap.putAll(createNodeRuleGroupForRdmNode(
+                topoType,
+                nodeUuid,
+                srgName,
+                srgMap.entrySet().stream()
+                    .filter(item -> item.getValue().equals(srgName))
+                    .map(item -> item.getKey())
+                    .collect(Collectors.toList()),
+                // For T0ML we consider any port of ROADM INFRA can connect to potentially any other port
+                //topoType.equals("T0ML") ? FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE
+                topoType.equals("T0ML") ? FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE
+                    : FORWARDINGRULECANNOTFORWARDACROSSGROUP.VALUE,
+                // Whereas for Abstracted or Full Topology we consider any port of the same SRG can not forward to
+                // another port of the same SRG. Connectivity between SRGS will be defined through inter-rule-group
+                index));
+            index++;
+            LOG.debug("AllNodeRuleGroup : creating a NRG for {}", srgName);
+        }
+        return globalNrgMap;
+    }
+
+    public Map<InterRuleGroupKey, InterRuleGroup> createInterRuleGroupForRdmNode(
+            String topoType, Uuid nodeUuid,String orNodeId, List<NodeRuleGroupKey> nrgList) {
+        Map<AssociatedNodeRuleGroupKey, AssociatedNodeRuleGroup> associatedNrgMap = new HashMap<>();
+        for (NodeRuleGroupKey nrgKey : nrgList) {
+            AssociatedNodeRuleGroup associatedNrg = new AssociatedNodeRuleGroupBuilder()
+                .setTopologyUuid(tapiTopoUuid)
+                .setNodeUuid(nodeUuid)
+                .setNodeRuleGroupUuid(nrgKey.getUuid())
+                .build();
+            associatedNrgMap.put(associatedNrg.key(), associatedNrg);
+        }
+        var rule = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                .inter.rule.group.RuleBuilder()
+            .setLocalId("forward")
+            .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
+            .setRuleType(new HashSet<RuleType>(Set.of(RuleType.FORWARDING)))
+            .build();
+        String irgNameValue = topoType.equals("Full") ? orNodeId + " inter rule group-" : "rdm infra inter rule group-";
+        Name irgName = new NameBuilder().setValueName("irg name").setValue(irgNameValue).build();
+        InterRuleGroup interRuleGroup = new InterRuleGroupBuilder()
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes((irgNameValue).getBytes(Charset.forName("UTF-8"))).toString()))
+            .setName(Map.of(irgName.key(), irgName))
+            .setRule(new HashMap<>(Map.of(rule.key(), rule)))
+            .setAssociatedNodeRuleGroup(associatedNrgMap)
+            .build();
+        return new HashMap<>(Map.of(new InterRuleGroupKey(interRuleGroup.getUuid()), interRuleGroup));
+    }
+
+    public Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> createMSIP(
+            int nb, LayerProtocolName layerProtocol, String tpId, String nodeid,
+            Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
+            OperationalState operState, AdministrativeState adminState) {
+        // add them to SIP context
+        Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> msipl = new HashMap<>();
+        for (int i = 0; i < nb; i++) {
+            String sipName = nb == 1 ? String.join("+", "SIP", nodeid, tpId)
+                    : String.join("+", "SIP", nodeid, tpId, "Nber", String.valueOf(i));
+            LOG.info("SIP = {}", sipName);
+            Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes(sipName.getBytes(Charset.forName("UTF-8"))).toString());
+            MappedServiceInterfacePoint msip =
+                new MappedServiceInterfacePointBuilder().setServiceInterfacePointUuid(sipUuid).build();
+            ServiceInterfacePoint sip =
+                createSIP(sipUuid, layerProtocol, tpId, nodeid, supportedInterfaceCapability, operState, adminState);
+            this.tapiSips.put(sip.key(), sip);
+            msipl.put(msip.key(), msip);
+            LOG.debug("SIP created {}", sip.getUuid());
+            LOG.debug("This SIP corresponds to SIP+nodeId {} + TpId {}", nodeid, tpId);
+        }
+        return msipl;
+    }
+
+    public List<AvailablePayloadStructure> createAvailablePayloadStructureForPhtncMedia(
+            Boolean otsiProvisioned,
+            Collection<SupportedInterfaceCapability> sicList,
+            List<OperationalModeKey> supportedOpModes) {
+        if (supportedOpModes == null || supportedOpModes.isEmpty()) {
+            return null;
+        }
+        Integer nepRate = 0;
+        Integer loopRate = 0;
+        for (OperationalModeKey operationalMode : supportedOpModes) {
+            for (Map.Entry<Integer, String> entry: OPMODE_LOOPRATE_MAP.entrySet()) {
+                if (operationalMode.toString().contains(entry.getValue())) {
+                    loopRate = entry.getKey();
+                    break;
+                }
+            }
+            if (loopRate > nepRate) {
+                nepRate = loopRate;
+                if (nepRate >= OPMODE_LOOPRATE_MAX) {
+                    break;
+                }
+            }
+        }
+        List<AvailablePayloadStructure> aps = new ArrayList<>();
+        Integer cepInstanceNber = otsiProvisioned ? 0 : 1;
+        for (SupportedInterfaceCapability sic : sicList) {
+            switch (sic.getIfCapType().toString().split("\\{")[0]) {
+                case "IfOCHOTU4ODU4":
+                case "IfOCHOTU4ODU4Regen":
+                case "IfOCHOTU4ODU4Uniregen":
+                    aps.add(new AvailablePayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(cepInstanceNber))
+                        .setCapacity(
+                            new CapacityBuilder()
+                                .setUnit(CAPACITYUNITGBPS.VALUE)
+                                .setValue(Decimal64.valueOf(100.0 * cepInstanceNber, RoundingMode.DOWN))
+                                .build())
+                        .build());
+                    break;
+                case "IfOCHOTUCnODUCn":
+                case "IfOtsiOtucnOducn":
+                case "IfOCHOTUCnODUCnRegen":
+                case "IfOCHOTUCnODUCnUniregen":
+                    aps.add(new AvailablePayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
+                            ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(nepRate * cepInstanceNber))
+                        .setCapacity(
+                            new CapacityBuilder()
+                                .setUnit(CAPACITYUNITGBPS.VALUE)
+                                .setValue(Decimal64.valueOf(nepRate * 100.0 * cepInstanceNber, RoundingMode.DOWN))
+                                .build())
+                        .build());
+                    break;
+                default:
+                    break;
+            }
+        }
+        return aps.stream().distinct().toList();
+    }
+
+    public List<SupportedPayloadStructure> createSupportedPayloadStructureForPhtncMedia(
+            Collection<SupportedInterfaceCapability> sicList, List<OperationalModeKey> supportedOpModes) {
+        if (supportedOpModes == null || supportedOpModes.isEmpty()) {
+            return null;
+        }
+        Integer nepRate = 0;
+        Integer loopRate = 0;
+        for (OperationalModeKey operationalMode : supportedOpModes) {
+            for (Map.Entry<Integer, String> entry: OPMODE_LOOPRATE_MAP.entrySet()) {
+                if (operationalMode.toString().contains(entry.getValue())) {
+                    loopRate = entry.getKey();
+                    break;
+                }
+            }
+            if (loopRate > nepRate) {
+                nepRate = loopRate;
+                if (nepRate >= OPMODE_LOOPRATE_MAX) {
+                    break;
+                }
+            }
+        }
+        List<SupportedPayloadStructure> sps = new ArrayList<>();
+        for (SupportedInterfaceCapability sic : sicList) {
+            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+            switch (ifCapType) {
+                case "IfOCHOTU4ODU4":
+                case "IfOCHOTU4ODU4Regen":
+                case "IfOCHOTU4ODU4Uniregen":
+                    sps.add(new SupportedPayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(PHOTONICLAYERQUALIFIEROTSi.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(1))
+                        .setCapacity(
+                            new CapacityBuilder()
+                                .setUnit(CAPACITYUNITGBPS.VALUE)
+                                .setValue(Decimal64.valueOf(100.0, RoundingMode.DOWN))
+                                .build())
+                        .build());
+                    break;
+                case "IfOCHOTUCnODUCn":
+                case "IfOtsiOtucnOducn":
+                case "IfOCHOTUCnODUCnRegen":
+                case "IfOCHOTUCnODUCnUniregen":
+                    sps.add(new SupportedPayloadStructureBuilder()
+                        .setMultiplexingSequence(Set.of(
+                            PHOTONICLAYERQUALIFIEROTSi.VALUE, OTUTYPEOTUCN.VALUE,
+                            ODUTYPEODUCN.VALUE, ODUTYPEODU4.VALUE))
+                        .setNumberOfCepInstances(Uint64.valueOf(nepRate))
+                        .setCapacity(
+                            new CapacityBuilder()
+                                .setUnit(CAPACITYUNITGBPS.VALUE)
+                                .setValue(Decimal64.valueOf(nepRate * 100.0, RoundingMode.DOWN))
+                                .build())
+                        .build());
+                    break;
+                default:
+                    break;
+            }
+        }
+        return sps.stream().distinct().toList();
+    }
+
+    public List<SupportedCepLayerProtocolQualifierInstances> createSupportedCepLayerProtocolQualifier(
+            Collection<SupportedInterfaceCapability> sicList, LayerProtocolName lpn) {
+        if (sicList == null) {
+            return new ArrayList<>(List.of(
+                new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                    .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+                    .setNumberOfCepInstances(Uint64.valueOf(1))
+                    .build()));
+        }
+        LOG.debug("SIC list = {}", sicList);
+        List<SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
+        String lpnName = lpn.getName();
+        for (SupportedInterfaceCapability sic : sicList) {
+            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+            if (!LPN_MAP.containsKey(lpnName)) {
+                LOG.error("Layer Protocol Name is unknown {}", lpnName);
+                break;
+            }
+            var ifCapTypeMap = LPN_MAP.get(lpnName);
+            if (!ifCapTypeMap.containsKey(ifCapType)) {
+                LOG.error("IfCapability type {} not managed", ifCapType);
+                break;
+            }
+            for (LAYERPROTOCOLQUALIFIER qualifier: ifCapTypeMap.get(ifCapType).keySet()) {
+                sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                    .setLayerProtocolQualifier(qualifier)
+                    .setNumberOfCepInstances(Uint64.valueOf(1))
+                    .build());
+            }
+        }
+        return sclpqiList.stream().distinct().toList();
+    }
+
+    public Map<Double, Double> getXpdrUsedWavelength(TerminationPoint tp) {
+        var tpAug = tp.augmentation(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class);
+        if (tpAug == null) {
+            return null;
+        }
+        XpdrNetworkAttributes xnatt = tpAug.getXpdrNetworkAttributes();
+        if (xnatt == null) {
+            return null;
+        }
+        var xnattWvlgth = xnatt.getWavelength();
+        if (xnattWvlgth == null) {
+            return null;
+        }
+        var freq = xnattWvlgth.getFrequency();
+        if (freq == null) {
+            return null;
+        }
+        var width = xnattWvlgth.getWidth();
+        if (width == null) {
+            return null;
+        }
+        Double freqValue = freq.getValue().doubleValue();
+        Double widthValue = width.getValue().doubleValue();
+        return new HashMap<>(Map.of(freqValue - widthValue * 0.001 / 2, freqValue + widthValue * 0.001 / 2));
+    }
+
+    public Map<Double, Double> getPPUsedWavelength(TerminationPoint tp) {
+        var tpAug = tp.augmentation(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class);
+        if (tpAug == null) {
+            return null;
+        }
+        PpAttributes ppAtt = tpAug.getPpAttributes();
+        if (ppAtt == null) {
+            return null;
+        }
+        var usedWvl = ppAtt.getUsedWavelength();
+        if (usedWvl == null || usedWvl.isEmpty()) {
+            return null;
+        }
+        var usedWvlfirstValue = usedWvl.entrySet().iterator().next().getValue();
+        Double centFreq = usedWvlfirstValue.getFrequency().getValue().doubleValue();
+        Double width = usedWvlfirstValue.getWidth().getValue().doubleValue();
+        return  new HashMap<>(Map.of(centFreq - width * 0.001 / 2, centFreq + width * 0.001 / 2));
+    }
+
+    public Map<Double, Double> getTTPUsedFreqMap(TerminationPoint tp) {
+        byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
+        Arrays.fill(byteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
+        var termPoint1 = tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
+            .TerminationPoint1.class);
+        if (termPoint1 == null) {
+            return null;
+        }
+        TxTtpAttributes txttpAtt = termPoint1.getTxTtpAttributes();
+        if (txttpAtt  == null) {
+            return null;
+        }
+        var txttpAttUsedWvl = txttpAtt.getUsedWavelengths();
+        if (txttpAttUsedWvl == null || txttpAttUsedWvl.isEmpty()) {
+            var txttpAttAvlFreqMaps = txttpAtt.getAvailFreqMaps();
+            if (txttpAttAvlFreqMaps == null || !txttpAttAvlFreqMaps.keySet().toString().contains(GridConstant.C_BAND)) {
+                return null;
+            }
+            byte[] freqBitSet = new byte[GridConstant.NB_OCTECTS];
+            LOG.debug("Creation of Bitset {}", freqBitSet);
+            freqBitSet = txttpAttAvlFreqMaps.entrySet().stream()
+                .filter(afm -> afm.getKey().toString().equals(GridConstant.C_BAND))
+                .findFirst().orElseThrow().getValue().getFreqMap();
+            for (int i = 0; i < GridConstant.EFFECTIVE_BITS; i++) {
+                if (freqBitSet[i] == 0) {
+                    freqBitSet[i] = 1;
+                } else {
+                    freqBitSet[i] = 0;
+                }
+            }
+            return getFreqMapFromBitSet(freqBitSet);
+        }
+        Map<Double,Double> freqMap = new HashMap<>();
+        for (Map.Entry<UsedWavelengthsKey, UsedWavelengths> usedLambdas : txttpAttUsedWvl.entrySet()) {
+            Double centFreq = usedLambdas.getValue().getFrequency().getValue().doubleValue();
+            Double width = usedLambdas.getValue().getWidth().getValue().doubleValue();
+            freqMap.put(centFreq - width * 0.001 / 2, centFreq + width * 0.001 / 2);
+        }
+        return freqMap;
+    }
+
+    public Map<Double, Double> getTTPAvailableFreqMap(TerminationPoint tp) {
+        var termPoint1 = tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526
+            .TerminationPoint1.class);
+        if (termPoint1 == null) {
+            return null;
+        }
+        TxTtpAttributes txttpAtt = termPoint1.getTxTtpAttributes();
+        if (txttpAtt == null) {
+            return null;
+        }
+        var avlFreqMaps = txttpAtt.getAvailFreqMaps();
+        if (avlFreqMaps == null || !avlFreqMaps.keySet().toString().contains(GridConstant.C_BAND)) {
+            return null;
+        }
+        byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
+        LOG.debug("Creation of Bitset {}", byteArray);
+        return getFreqMapFromBitSet(
+            avlFreqMaps.entrySet().stream()
+                .filter(afm -> afm.getKey().toString().equals(GridConstant.C_BAND))
+                .findFirst().orElseThrow().getValue().getFreqMap());
+    }
+
+    public Map<Double, Double> getTTP11AvailableFreqMap(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1 tp) {
+        if (tp == null) {
+            return null;
+        }
+        TxTtpAttributes txttpAtt = tp.getTxTtpAttributes();
+        if (txttpAtt == null) {
+            return null;
+        }
+        var avlFreqMaps = txttpAtt.getAvailFreqMaps();
+        if (avlFreqMaps == null || !avlFreqMaps.keySet().toString().contains(GridConstant.C_BAND)) {
+            return null;
+        }
+        byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
+        LOG.debug("Creation of Bitset {}", byteArray);
+        return getFreqMapFromBitSet(
+            avlFreqMaps.entrySet().stream()
+                .filter(afm -> afm.getKey().toString().equals(GridConstant.C_BAND))
+                .findFirst().orElseThrow().getValue().getFreqMap());
+    }
+
+    public Map<Double, Double> getPP11UsedWavelength(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1 tp) {
+        if (tp == null) {
+            return null;
+        }
+        PpAttributes ppAtt = tp.getPpAttributes();
+        if (ppAtt == null) {
+            return null;
+        }
+        var usedWvl = ppAtt.getUsedWavelength();
+        if (usedWvl == null || usedWvl.isEmpty()) {
+            return null;
+        }
+        var usedWvlFirstValue = usedWvl.entrySet().iterator().next().getValue();
+        Double centFreq = usedWvlFirstValue.getFrequency().getValue().doubleValue();
+        Double width = usedWvlFirstValue.getWidth().getValue().doubleValue();
+        return new HashMap<>(Map.of(centFreq - width * 0.001 / 2, centFreq + width * 0.001 / 2));
+    }
+
+    public Map<Double, Double> getTTP11UsedFreqMap(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1 tp) {
+        byte[] byteArray = new byte[GridConstant.NB_OCTECTS];
+        Arrays.fill(byteArray, (byte) GridConstant.AVAILABLE_SLOT_VALUE);
+        if (tp == null) {
+            return null;
+        }
+        TxTtpAttributes txttpAtt = tp.getTxTtpAttributes();
+        if (txttpAtt == null) {
+            return null;
+        }
+        var txttpAttUsedWvl = txttpAtt.getUsedWavelengths();
+        if (txttpAttUsedWvl == null || txttpAttUsedWvl.isEmpty()) {
+            var txttpAttAvlFreqMaps = txttpAtt.getAvailFreqMaps();
+            if (txttpAttAvlFreqMaps == null || !txttpAttAvlFreqMaps.keySet().toString().contains(GridConstant.C_BAND)) {
+                return null;
+            }
+            byte[] freqBitSet = new byte[GridConstant.NB_OCTECTS];
+            LOG.debug("Creation of Bitset {}", freqBitSet);
+            freqBitSet = txttpAttAvlFreqMaps.entrySet().stream()
+                .filter(afm -> afm.getKey().toString().equals(GridConstant.C_BAND))
+                .findFirst().orElseThrow().getValue().getFreqMap();
+            for (int i = 0; i < GridConstant.EFFECTIVE_BITS; i++) {
+                if (freqBitSet[i] == 0) {
+                    freqBitSet[i] = 1;
+                } else {
+                    freqBitSet[i] = 0;
+                }
+            }
+            return getFreqMapFromBitSet(freqBitSet);
+        }
+        Map<Double,Double> freqMap = new HashMap<>();
+        for (Map.Entry<UsedWavelengthsKey, UsedWavelengths> usedLambdas : txttpAttUsedWvl.entrySet()) {
+            var usedLambdasValue = usedLambdas.getValue();
+            Double centFreq = usedLambdasValue.getFrequency().getValue().doubleValue();
+            Double width = usedLambdasValue.getWidth().getValue().doubleValue();
+            freqMap.put(centFreq - width * 0.001 / 2, centFreq + width * 0.001 / 2);
+        }
+        return freqMap;
+    }
+
+    public Map<Double, Double> getFreqMapFromBitSet(byte[] byteArray) {
+        // Provides a Map <LowerFreq, HigherFreq> describing start and stop frequencies of all slots that are available
+        // in the ByteArray describing the spectrum : bit sets initially sets to 1/true
+        // In case the byte array has been inverted before calling this method, it provides respectively a map
+        // describing all occupied slots!
+        Map<Double,Double> freqMap = new HashMap<>();
+        Double startFreq = GridConstant.START_EDGE_FREQUENCY;
+        Double stopFreq = 0.0;
+        boolean occupied = false;
+        if (byteArray[0] == 0) {
+            occupied = true;
+        }
+        for (int index = 0 ; index < GridConstant.EFFECTIVE_BITS ; index++) {
+            if (occupied) {
+                if (byteArray[index] == 1) {
+                    startFreq = GridUtils.getStartFrequencyFromIndex(index).doubleValue();
+                    stopFreq = GridUtils.getStartFrequencyFromIndex(index).doubleValue();
+                    occupied = false;
+                }
+            } else {
+                if (byteArray[index] == 0) {
+                    stopFreq = GridUtils.getStartFrequencyFromIndex(index).doubleValue();
+                    occupied = true;
+                }
+            }
+            if (occupied) {
+                if (stopFreq.doubleValue() > startFreq.doubleValue()) {
+                    freqMap.put(startFreq, stopFreq);
+                    startFreq = stopFreq;
+                }
+            } else {
+                if (index == GridConstant.EFFECTIVE_BITS - 1 && startFreq.doubleValue() == stopFreq.doubleValue()) {
+                    stopFreq = GridUtils.getStopFrequencyFromIndex(index).doubleValue();
+                    freqMap.put(startFreq, stopFreq);
+                }
+            }
+        }
+        return freqMap;
+    }
+
+    public OwnedNodeEdgePointBuilder addPayloadStructureAndPhotSpecToOnep(String nodeId,
+            Map<Double, Double> freqMap, List<OperationalModeKey> operModeList,
+            Collection<SupportedInterfaceCapability> sicColl, OwnedNodeEdgePointBuilder onepBldr, String keyword) {
+        if (!String.join("+", nodeId, TapiStringConstants.OTSI_MC).equals(keyword)
+                && !String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS).equals(keyword)) {
+            return onepBldr;
+        }
+        LOG.debug("Entering LOOP Step1");
+        double naz = 0.01;
+        Double lowSupFreq = GridConstant.START_EDGE_FREQUENCY * 1E09 ;
+        Double upSupFreq = lowSupFreq + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + naz;
+        lowSupFreq += naz;
+        // Creating OTS & OTSI_MC NEP specific attributes
+        onepBldr.setSupportedPayloadStructure(
+            createSupportedPayloadStructureForPhtncMedia(sicColl,operModeList));
+        SpectrumCapabilityPacBuilder spectrumPac = new SpectrumCapabilityPacBuilder();
+        OccupiedSpectrumBuilder ospecBd = new OccupiedSpectrumBuilder();
+        if (freqMap == null || freqMap.isEmpty()) {
+//                TODO: verify if we need to fill OcupiedSpectrum as follows when no lambda provisioned
+//                ospecBd
+//                    .setUpperFrequency(Uint64.valueOf(0))
+//                    .setLowerFrequency(Uint64.valueOf(0));
+            onepBldr.setAvailablePayloadStructure(
+                createAvailablePayloadStructureForPhtncMedia(false, sicColl,operModeList));
+            AvailableSpectrum  aspec = new AvailableSpectrumBuilder()
+                .setLowerFrequency(Uint64.valueOf(Math.round(lowSupFreq)))
+                .setUpperFrequency(Uint64.valueOf(Math.round(upSupFreq)))
+                .build();
+            spectrumPac.setAvailableSpectrum(
+                new HashMap<AvailableSpectrumKey, AvailableSpectrum>(Map.of(
+                    new AvailableSpectrumKey(aspec.getLowerFrequency(), aspec.getUpperFrequency()), aspec)));
+        } else {
+            LOG.debug("Entering LOOP Step2");
+            onepBldr.setAvailablePayloadStructure(
+                createAvailablePayloadStructureForPhtncMedia(true, sicColl,operModeList));
+            for (Map.Entry<Double, Double> frequency : freqMap.entrySet()) {
+                ospecBd
+                    .setLowerFrequency(Uint64.valueOf(Math.round(frequency.getKey().doubleValue() * 1E09)))
+                    .setUpperFrequency(Uint64.valueOf(Math.round(frequency.getValue().doubleValue() * 1E09)));
+            }
+            OccupiedSpectrum ospec = ospecBd.build();
+            spectrumPac.setOccupiedSpectrum(
+                new HashMap<OccupiedSpectrumKey, OccupiedSpectrum>(Map.of(
+                    new OccupiedSpectrumKey(ospec.getLowerFrequency(), ospec.getUpperFrequency()), ospec)));
+        }
+        LOG.debug("Entering LOOP Step3");
+        SupportableSpectrum  sspec = new SupportableSpectrumBuilder()
+            .setLowerFrequency(Uint64.valueOf(Math.round(lowSupFreq)))
+            .setUpperFrequency(Uint64.valueOf(Math.round(upSupFreq)))
+            .build();
+        spectrumPac.setSupportableSpectrum(
+            new HashMap<SupportableSpectrumKey, SupportableSpectrum>(Map.of(
+                new SupportableSpectrumKey(sspec.getLowerFrequency(), sspec.getUpperFrequency()), sspec)));
+        LOG.debug("Entering LOOP Step4");
+        var onep1 = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
+                .OwnedNodeEdgePoint1Builder()
+            .setPhotonicMediaNodeEdgePointSpec(
+                new PhotonicMediaNodeEdgePointSpecBuilder().setSpectrumCapabilityPac(spectrumPac.build()).build())
+            .build();
+        LOG.debug("creating Photonic NEP SPEC for node {} and nep {}", nodeId, onep1);
+        onepBldr.addAugmentation(onep1);
+        LOG.debug("Entering LOOP Step5");
+        return onepBldr;
+    }
+
+
+    public OwnedNodeEdgePointBuilder addPhotSpecToRoadmOnep(String nodeId,
+            Map<Double, Double> usedFreqMap, Map<Double, Double> availableFreqMap,
+            OwnedNodeEdgePointBuilder onepBldr, String keyword) {
+        if (!String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS).equals(keyword)
+                && !String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OMS).equals(keyword)) {
+            return onepBldr;
+        }
+        // Creating OTS/OMS NEP specific attributes
+        double naz = 0.01;
+        Double lowSupFreq = GridConstant.START_EDGE_FREQUENCY * 1E09 ;
+        Double upSupFreq = lowSupFreq + GridConstant.GRANULARITY * GridConstant.EFFECTIVE_BITS * 1E06 + naz;
+        lowSupFreq += naz;
+        SpectrumCapabilityPacBuilder spectrumPac = new SpectrumCapabilityPacBuilder();
+        Map<Double, Double> freqMap = null;
+        if (usedFreqMap == null || usedFreqMap.isEmpty()) {
+            freqMap = Map.of(lowSupFreq, upSupFreq);
+        } else {
+            Map<OccupiedSpectrumKey, OccupiedSpectrum> ospecMap = new HashMap<>();
+            OccupiedSpectrumBuilder ospecBd = new OccupiedSpectrumBuilder();
+            for (Map.Entry<Double, Double> frequency : usedFreqMap.entrySet()) {
+                ospecBd
+                    .setLowerFrequency(Uint64.valueOf(Math.round(frequency.getKey().doubleValue() * 1E09)))
+                    .setUpperFrequency(Uint64.valueOf(Math.round(frequency.getValue().doubleValue() * 1E09)));
+                OccupiedSpectrum ospec = ospecBd.build();
+                ospecMap.put(new OccupiedSpectrumKey(ospec.getLowerFrequency(), ospec.getUpperFrequency()), ospec);
+            }
+            spectrumPac.setOccupiedSpectrum(ospecMap);
+        }
+        if (availableFreqMap != null && !availableFreqMap.isEmpty()) {
+            freqMap = availableFreqMap;
+        }
+        if (freqMap != null) {
+            Map<AvailableSpectrumKey, AvailableSpectrum> aspecMap = new HashMap<>();
+            AvailableSpectrumBuilder aspecBd = new AvailableSpectrumBuilder();
+            for (Map.Entry<Double, Double> frequency : availableFreqMap.entrySet()) {
+                aspecBd
+                    .setLowerFrequency(Uint64.valueOf(Math.round(frequency.getKey().doubleValue() * 1E09)))
+                    .setUpperFrequency(Uint64.valueOf(Math.round(frequency.getValue().doubleValue() * 1E09)));
+                AvailableSpectrum aspec = aspecBd.build();
+                aspecMap.put(new AvailableSpectrumKey(aspec.getLowerFrequency(), aspec.getUpperFrequency()), aspec);
+            }
+            spectrumPac.setAvailableSpectrum(aspecMap);
+        }
+        SupportableSpectrum  sspec = new SupportableSpectrumBuilder()
+            .setLowerFrequency(Uint64.valueOf(Math.round(lowSupFreq)))
+            .setUpperFrequency(Uint64.valueOf(Math.round(upSupFreq)))
+            .build();
+        spectrumPac.setSupportableSpectrum(
+            new HashMap<SupportableSpectrumKey, SupportableSpectrum>(Map.of(
+                new SupportableSpectrumKey(sspec.getLowerFrequency(), sspec.getUpperFrequency()), sspec)));
+        var onep1 = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121
+                .OwnedNodeEdgePoint1Builder()
+            .setPhotonicMediaNodeEdgePointSpec(
+                new PhotonicMediaNodeEdgePointSpecBuilder().setSpectrumCapabilityPac(spectrumPac.build()).build())
+            .build();
+        onepBldr.addAugmentation(onep1);
+        LOG.debug("Add Photonic Node Edge point Spec to {} including available Spectrum {} = ",
+            onepBldr.getName(),
+            onep1.getPhotonicMediaNodeEdgePointSpec().getSpectrumCapabilityPac().getAvailableSpectrum());
+        return onepBldr;
+    }
+
+    private OduSwitchingPools createOduSwitchingPoolForTp100G() {
+        Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
+        int count = 1;
+        for (TerminationPoint tp : this.oorNetworkPortList) {
+            NonBlockingList nbl = new NonBlockingListBuilder()
+                .setNblNumber(Uint16.valueOf(count))
+                .setTpList(new HashSet<>(Set.of(
+                    tp.getTpId(),
+                    tp.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526
+                            .TerminationPoint1.class)
+                        .getAssociatedConnectionMapTp().iterator().next())))
+                .build();
+            nblMap.put(nbl.key(), nbl);
+            count++;
+        }
+        return new OduSwitchingPoolsBuilder()
+            .setNonBlockingList(nblMap)
+            .setSwitchingPoolNumber(Uint16.valueOf(1))
+            .build();
+    }
+
+    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node createTapiNode(
+            Map<NameKey, Name> nodeNames, Set<LayerProtocolName> layerProtocols) {
+        Uuid nodeUuid = null;
+        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
+        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = new HashMap<>();
+        if (layerProtocols.contains(LayerProtocolName.DSR)
+                || layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
+            Rule rule = new RuleBuilder()
+                .setLocalId("forward")
+                .setForwardingRule(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE)
+                .setRuleType(new HashSet<>(Set.of(RuleType.FORWARDING)))
+                .build();
+            nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, new HashMap<>(Map.of(rule.key(), rule)));
+        } else {
+            var nodeName = nodeNames.get(nodeNames.keySet().iterator().next());
+            LOG.error("Undefined LayerProtocolName for {} node {}", nodeName.getValueName(), nodeName.getValue());
+        }
+     // Empty random creation of mandatory fields for avoiding errors....
+        CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
+            .setCostAlgorithm("Restricted Shortest Path - RSP")
+            .setCostName("HOP_COUNT")
+            .setCostValue(TapiStringConstants.COST_HOP_VALUE)
+            .build();
+        LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
+            .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(Set.of("risk identifier1", "risk identifier2"))
+            .build();
+        return new NodeBuilder()
+            .setUuid(nodeUuid)
+            .setName(nodeNames)
+            .setLayerProtocolName(layerProtocols)
+            .setAdministrativeState(transformAsToTapiAdminState(this.ietfNodeAdminState.getName()))
+            .setOperationalState(transformOsToTapiOperationalState(this.ietfNodeOperState.getName()))
+            .setLifecycleState(LifecycleState.INSTALLED)
+            .setOwnedNodeEdgePoint(onepl)
+            .setNodeRuleGroup(nodeRuleGroupList)
+            .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
+            .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
+            .setRiskParameterPac(
+                new RiskParameterPacBuilder()
+                    .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+                    .build())
+            .setErrorCharacteristic("error")
+            .setLossCharacteristic("loss")
+            .setRepeatDeliveryCharacteristic("repeat delivery")
+            .setDeliveryOrderCharacteristic("delivery order")
+            .setUnavailableTimeCharacteristic("unavailable time")
+            .setServerIntegrityProcessCharacteristic("server integrity process")
+            .build();
+    }
+
+    private Uuid getNodeUuid4Dsr(
+            Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
+            Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList,
+            Map<RuleKey, Rule> ruleList) {
+        // client NEP DSR creation on DSR/ODU node
+        for (int i = 0; i < oorClientPortList.size(); i++) {
+            String nodeIdDsr = String.join("+",
+                this.ietfNodeId, TapiStringConstants.DSR, oorClientPortList.get(i).getTpId().getValue());
+            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(nodeIdDsr.getBytes(Charset.forName("UTF-8"))).toString());
+            LOG.info("NEP = {} has Uuid {} ", nodeIdDsr, nepUuid);
+            this.uuidMap.put(nodeIdDsr, nepUuid);
+            Name name = new NameBuilder()
+                .setValue(nodeIdDsr)
+                .setValueName(OpenroadmNodeType.TPDR.equals(this.ietfNodeType) ? "100G-tpdr" : "NodeEdgePoint_C")
+                .build();
+            OwnedNodeEdgePoint onep = createNep(
+                oorClientPortList.get(i),
+                Map.of(name.key(), name),
+                LayerProtocolName.DSR, LayerProtocolName.DSR, true,
+                String.join("+", this.ietfNodeId, TapiStringConstants.DSR));
+            onepl.put(onep.key(), onep);
+        }
+        // CLIENT NEP E_ODU creation on DSR/ODU node
+        for (int i = 0; i < oorClientPortList.size(); i++) {
+            String nodeIdEodu = String.join("+",
+                this.ietfNodeId, TapiStringConstants.E_ODU, oorClientPortList.get(i).getTpId().getValue());
+            Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(nodeIdEodu.getBytes(Charset.forName("UTF-8"))).toString());
+            LOG.info("NEP = {} has Uuid {} ", nodeIdEodu, nepUuid1);
+            this.uuidMap.put(nodeIdEodu, nepUuid1);
+            Name onedName = new NameBuilder()
+                .setValueName("eNodeEdgePoint_N")
+                .setValue(nodeIdEodu)
+                .build();
+            OwnedNodeEdgePoint onep = createNep(
+                oorClientPortList.get(i),
+                Map.of(onedName.key(), onedName),
+                LayerProtocolName.ODU, LayerProtocolName.DSR, false,
+                String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU));
+            onepl.put(onep.key(), onep);
+        }
+        // NETWORK NEPs I_ODU creation on DSR/ODU node
+        for (int i = 0; i < oorNetworkPortList.size(); i++) {
+            String nodeIdIodu = String.join("+",
+                this.ietfNodeId, TapiStringConstants.I_ODU, oorNetworkPortList.get(i).getTpId().getValue());
+            Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(nodeIdIodu.getBytes(Charset.forName("UTF-8"))).toString());
+            LOG.info("NEP = {} has Uuid {} ", nodeIdIodu, nepUuid1);
+            this.uuidMap.put(nodeIdIodu, nepUuid1);
+            Name onedName = new NameBuilder()
+                .setValueName("iNodeEdgePoint_N")
+                .setValue(nodeIdIodu)
+                .build();
+            OwnedNodeEdgePoint onep = createNep(
+                oorNetworkPortList.get(i),
+                Map.of(onedName.key(), onedName),
+                LayerProtocolName.ODU, LayerProtocolName.DSR, true,
+                String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU));
+            onepl.put(onep.key(), onep);
+        }
+        // NETWORK NEP OTS network on DSR/ODU node
+        for (int i = 0; i < oorNetworkPortList.size(); i++) {
+            String nodeIdPmOts = String.join("+",
+                this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, oorNetworkPortList.get(i).getTpId().getValue());
+            Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(nodeIdPmOts.getBytes(Charset.forName("UTF-8"))).toString());
+            LOG.info("NEP = {} has Uuid {} ", nodeIdPmOts, nepUuid2);
+            this.uuidMap.put(nodeIdPmOts, nepUuid2);
+            Name onedName = new NameBuilder()
+                .setValueName("eNodeEdgePoint")
+                .setValue(nodeIdPmOts)
+                .build();
+            OwnedNodeEdgePoint onep = createNep(
+                oorNetworkPortList.get(i),
+                Map.of(onedName.key(), onedName),
+                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
+                String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS));
+            onepl.put(onep.key(), onep);
+        }
+        for (int i = 0; i < oorNetworkPortList.size(); i++) {
+            String nodeIdOtMc = String.join("+",
+                this.ietfNodeId, TapiStringConstants.OTSI_MC, oorNetworkPortList.get(i).getTpId().getValue());
+            Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(nodeIdOtMc.getBytes(Charset.forName("UTF-8"))).toString());
+            LOG.info("NEP = {} has Uuid {} ", nodeIdOtMc, nepUuid3);
+            this.uuidMap.put(nodeIdOtMc, nepUuid3);
+            Name onedName = new NameBuilder()
+                .setValueName("PhotMedNodeEdgePoint")
+                .setValue(nodeIdOtMc)
+                .build();
+            OwnedNodeEdgePoint onep = createNep(
+                oorNetworkPortList.get(i),
+                Map.of(onedName.key(), onedName),
+                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
+                String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC));
+            onepl.put(onep.key(), onep);
+        }
+        // create NodeRuleGroup
+        int count = 1;
+        LOG.debug("ODU switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values());
+        String ietfXpdr = String.join("+", this.ietfNodeId, TapiStringConstants.XPDR);
+        for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) {
+            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
+                    nepList = new HashMap<>();
+            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointKey,
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint>
+                    oduNepList = new HashMap<>();
+            LOG.debug("UUidMap={}", this.uuidMap.keySet());
+            LOG.debug("TP list = {}", nbl.getTpList());
+            for (TpId tp : nbl.getTpList()) {
+                String tpValue = tp.getValue();
+                LOG.debug("TP={}", tpValue);
+                String ietfEoduTp = String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, tpValue);
+                LOG.debug("UuidKey={}", ietfEoduTp);
+                String ietfIoduTp = String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, tpValue);
+                if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR, tpValue))
+                        || this.uuidMap.containsKey(ietfIoduTp)) {
+                    var nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                                .node.rule.group.NodeEdgePointBuilder()
+                            .setTopologyUuid(tapiTopoUuid)
+                            .setNodeUuid(this.uuidMap.get(ietfXpdr))
+                            .setNodeEdgePointUuid(this.uuidMap.get(
+                                String.join("+",
+                                    this.ietfNodeId,
+                                    tpValue.contains("CLIENT") ? TapiStringConstants.DSR : TapiStringConstants.I_ODU,
+                                    tpValue)))
+                            .build();
+                    nepList.put(nep.key(), nep);
+                }
+                if (this.uuidMap.containsKey(ietfEoduTp)) {
+                    var nep1 = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                                .node.rule.group.NodeEdgePointBuilder()
+                            .setTopologyUuid(tapiTopoUuid)
+                            .setNodeUuid(this.uuidMap.get(ietfXpdr))
+                            .setNodeEdgePointUuid(this.uuidMap.get(ietfEoduTp))
+                            .build();
+                    oduNepList.put(nep1.key(), nep1);
+                }
+                if (this.uuidMap.containsKey(ietfIoduTp)) {
+                // TODO already checked with DSR above -> potential factorization ?
+                    var nep2 = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                                .node.rule.group.NodeEdgePointBuilder()
+                            .setTopologyUuid(tapiTopoUuid)
+                            .setNodeUuid(this.uuidMap.get(ietfXpdr))
+                            .setNodeEdgePointUuid(this.uuidMap.get(ietfIoduTp))
+                            .build();
+                    oduNepList.put(nep2.key(), nep2);
+                }
+            }
+            LOG.debug("NEPLIST (DSR/I_ODU) of [dsr node rule group] is {}", nepList);
+            LOG.debug("NEPLIST (E_ODU/I_ODU) of [odu node rule group] is {}", nepList);
+            // Empty random creation of mandatory fields for avoiding errors....
+            CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
+                .setCostAlgorithm("Restricted Shortest Path - RSP")
+                .setCostName("HOP_COUNT")
+                .setCostValue(TapiStringConstants.COST_HOP_VALUE)
+                .build();
+            LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
+                .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(Set.of("risk identifier1", "risk identifier2"))
+                .build();
+            Name nrgName = new NameBuilder()
+                .setValueName("nrg name")
+                .setValue("odu node rule group " + count)
+                .build();
+            NodeRuleGroup nodeRuleGroup1 = new NodeRuleGroupBuilder()
+                .setName(Map.of(nrgName.key(), nrgName))
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes(("dsr 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();
+            nodeRuleGroupList.put(nodeRuleGroup1.key(), nodeRuleGroup1);
+            NodeRuleGroup nodeRuleGroup2 = new NodeRuleGroupBuilder()
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes(("odu node rule group " + count)
+                    .getBytes(Charset.forName("UTF-8"))).toString()))
+                .setRule(ruleList)
+                .setNodeEdgePoint(oduNepList)
+                .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+                .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
+                .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
+                .build();
+            nodeRuleGroupList.put(nodeRuleGroup2.key(), nodeRuleGroup2);
+            count++;
+        }
+        return this.uuidMap.get(ietfXpdr);
+    }
+
+    private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, Map<NameKey, Name> nepNames,
+            LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip, String keyword) {
+        var tp1 = oorTp.augmentation(
+            org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1.class);
+        var oorTpId = oorTp.getTpId();
+        var oorTpIdValue = oorTpId.getValue();
+        if (tp1.getTpSupportedInterfaces() == null) {
+            LOG.warn("Tp supported interface doesnt exist on TP {}", oorTpIdValue);
+            return null;
+        }
+        TerminationPoint1 oorTpAug = oorTp.augmentation(TerminationPoint1.class);
+        var oorTpAugAdmState = oorTpAug.getAdministrativeState();
+        AdministrativeState adminState =
+            oorTpAugAdmState == null ? null : transformAsToTapiAdminState(oorTpAugAdmState.getName());
+        var oorTpAugOprState = oorTpAug.getOperationalState();
+        OperationalState operState =
+            oorTpAugOprState == null ? null : transformOsToTapiOperationalState(oorTpAugOprState.getName());
+        Collection<SupportedInterfaceCapability> sicColl =
+            tp1.getTpSupportedInterfaces().getSupportedInterfaceCapability().values();
+        OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
+            .setUuid(this.uuidMap.get(String.join("+", keyword, oorTpIdValue)))
+            .setLayerProtocolName(nepProtocol)
+            .setName(nepNames)
+            .setSupportedCepLayerProtocolQualifierInstances(
+                createSupportedCepLayerProtocolQualifier(sicColl, nepProtocol))
+            .setDirection(Direction.BIDIRECTIONAL)
+            .setLinkPortRole(PortRole.SYMMETRIC)
+            .setAdministrativeState(adminState)
+            .setOperationalState(operState)
+            .setLifecycleState(LifecycleState.INSTALLED);
+        if (withSip) {
+            onepBldr.setMappedServiceInterfacePoint(
+                createMSIP(1, nepProtocol, oorTpIdValue, keyword, sicColl, operState, adminState));
+        }
+        if (oorTpAug.getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
+            List<OperationalModeKey> opModeList = new ArrayList<>();
+            var tp11 = oorTp.augmentation(
+                org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev230526.TerminationPoint1.class);
+            if (tp11 == null || tp11.getXpdrNetworkAttributes() == null) {
+                for (SupportedInterfaceCapability sic : sicColl) {
+                    String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+                    switch (ifCapType) {
+                        case "IfOCHOTUCnODUCn":
+                        case "IfOCHOTUCnODUCnUniregen":
+                        case "IfOCHOTUCnODUCnRegen":
+                            opModeList.add(new OperationalModeKey("400G"));
+                            LOG.warn(TopologyUtils.NOOPMODEDECLARED + "400G rate available", oorTpId);
+                            break;
+                        default:
+                            break;
+                    }
+                }
+                opModeList.add(new OperationalModeKey("100G"));
+                LOG.warn(TopologyUtils.NOOPMODEDECLARED + "100G rate available", oorTpId);
+            } else {
+                opModeList = tp11.getXpdrNetworkAttributes().getSupportedOperationalModes().getOperationalMode()
+                    .keySet().stream().toList();
+            }
+            onepBldr = addPayloadStructureAndPhotSpecToOnep(
+                this.ietfNodeId, getXpdrUsedWavelength(oorTp), opModeList, sicColl, onepBldr, keyword);
+        }
+        OwnedNodeEdgePoint onep = onepBldr.build();
+        LOG.debug("ConvertORToTapiTopology 1360, onep = {}", onep);
+        return onep;
+    }
+
+    private ServiceInterfacePoint createSIP(Uuid sipUuid, LayerProtocolName layerProtocol, String tpId,
+        String nodeid, Collection<SupportedInterfaceCapability> supportedInterfaceCapability,
+        OperationalState operState, AdministrativeState adminState) {
+    // TODO: what value should be set in total capacity and available capacity??
+        LOG.debug("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())
+            .setSupportedCepLayerProtocolQualifierInstances(createSipSupportedLayerProtocolQualifier(
+                supportedInterfaceCapability, layerProtocol))
+            .build();
+    }
+
+    private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+                .service._interface.point.SupportedCepLayerProtocolQualifierInstances>
+             createSipSupportedLayerProtocolQualifier(
+                Collection<SupportedInterfaceCapability> supportedInterfaceCapability, LayerProtocolName lpn) {
+        if (supportedInterfaceCapability == null) {
+            return new ArrayList<>(List.of(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+                    .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+                .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+                .setNumberOfCepInstances(Uint64.valueOf(1))
+                .build()));
+        }
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+            .service._interface.point.SupportedCepLayerProtocolQualifierInstances> sclpqiList = new ArrayList<>();
+        String lpnName = lpn.getName();
+        for (SupportedInterfaceCapability sic : supportedInterfaceCapability) {
+            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
+            if (!LPN_MAP.containsKey(lpnName)) {
+                LOG.error("Layer Protocol Name is unknown {}", lpnName);
+                break;
+            }
+            var ifCapTypeMap = LPN_MAP.get(lpnName);
+            if (!ifCapTypeMap.containsKey(ifCapType)) {
+                LOG.error("IfCapability type {} not managed", ifCapType);
+                break;
+            }
+            for (Map.Entry<LAYERPROTOCOLQUALIFIER, Uint64> entry: ifCapTypeMap.get(ifCapType).entrySet()) {
+                sclpqiList.add(
+                    new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121
+                            .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder()
+                        .setLayerProtocolQualifier(entry.getKey())
+                        .setNumberOfCepInstances(entry.getValue())
+                        .build());
+            }
+        }
+        return sclpqiList.stream().distinct().toList();
+    }
+
+    public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
+            getTapiNodes() {
+        return tapiNodes;
+    }
+
+    public Map<LinkKey, Link> getTapiLinks() {
+        return tapiLinks;
+    }
+
+    public AdministrativeState transformAsToTapiAdminState(String adminState) {
+        return adminState == null ? null
+            : adminState.equals(AdminStates.InService.getName())
+                    || adminState.equals(AdministrativeState.UNLOCKED.getName())
+                ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
+    }
+
+    public OperationalState transformOsToTapiOperationalState(String operState) {
+        return operState == null ? null
+            : operState.equals("inService") || operState.equals(OperationalState.ENABLED.getName())
+                ? OperationalState.ENABLED : OperationalState.DISABLED;
+    }
+
+    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getTapiSips() {
+        return tapiSips;
+    }
+
+    public void setTapiSips(Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSip) {
+        this.tapiSips.putAll(tapiSip);
+    }
+
+}
index 53f0766d877bc50b2d8cd171ad65ea32719c9b90..3ab60048ddeb0d06e5e4830e15fe0ff98cbe3465 100644 (file)
@@ -9,85 +9,59 @@ package org.opendaylight.transportpce.tapi.topology;
 
 import java.nio.charset.Charset;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
+import org.opendaylight.transportpce.common.fixedflex.GridConstant;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+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.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1;
+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.otn.network.topology.rev230526.Node1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
 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.rev181210.AdministrativeState;
-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.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.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.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.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.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.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.yangtools.yang.common.Uint16;
+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.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.ServiceInterfacePointKey;
+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.topology.rev221121.node.NodeRuleGroup;
+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.RiskParameterPacBuilder;
+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.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.LinkKey;
+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.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.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -97,173 +71,90 @@ public class ConvertORTopoToTapiFullTopo {
     private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoToTapiFullTopo.class);
     private String ietfNodeId;
     private OpenroadmNodeType ietfNodeType;
-    private AdminStates ietfNodeAdminState;
-    private State ietfNodeOperState;
-    private List<TerminationPoint> oorClientPortList;
-    private List<TerminationPoint> oorNetworkPortList;
-    private OduSwitchingPools oorOduSwitchingPool;
     private Uuid tapiTopoUuid;
-    private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
+    private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
         tapiNodes;
     private Map<LinkKey, Link> tapiLinks;
     private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
-    private Map<String, Uuid> uuidMap;
     private final TapiLink tapiLink;
+    private static String topologicalMode;
 
 
     public ConvertORTopoToTapiFullTopo(Uuid tapiTopoUuid, TapiLink tapiLink) {
         this.tapiTopoUuid = tapiTopoUuid;
         this.tapiNodes = new HashMap<>();
         this.tapiLinks = new HashMap<>();
-        this.uuidMap = new HashMap<>();
         this.tapiSips = new HashMap<>();
         this.tapiLink = tapiLink;
-    }
-
-    public void convertNode(Node ietfNode, List<String> networkPorts) {
-        this.ietfNodeId = ietfNode.getNodeId().getValue();
-        if (ietfNode.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-                == null) {
-            return;
-        }
-        this.ietfNodeType = ietfNode.augmentation(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class).getNodeType();
-        this.ietfNodeAdminState = ietfNode.augmentation(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-                .getAdministrativeState();
-        this.ietfNodeOperState = ietfNode.augmentation(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-                .getOperationalState();
-        this.oorNetworkPortList = ietfNode.augmentation(
-            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
-                .getTerminationPoint().values().stream()
-                .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                    == OpenroadmTpType.XPONDERNETWORK.getIntValue()
-                    && networkPorts.contains(tp.getTpId().getValue()))
-                .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
-                .collect(Collectors.toList());
-        if (!OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
-            this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools()
-                .values().stream().findFirst().orElseThrow();
-            this.oorClientPortList = ietfNode.augmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
-                    .getTerminationPoint().values().stream()
-                    .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                        == OpenroadmTpType.XPONDERCLIENT.getIntValue())
-                    .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
-                    .collect(Collectors.toList());
-        } else {
-            this.oorOduSwitchingPool = createOduSwitchingPoolForTp100G();
-            List<TpId> tpList = this.oorOduSwitchingPool.getNonBlockingList().values().stream()
-                .flatMap(nbl -> nbl.getTpList().stream())
-                .collect(Collectors.toList());
-            this.oorClientPortList = ietfNode.augmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
-                    .getTerminationPoint().values().stream()
-                    .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                        == OpenroadmTpType.XPONDERCLIENT.getIntValue() && tpList.contains(tp.getTpId()))
-                    .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
-                    .collect(Collectors.toList());
-            this.oorClientPortList.forEach(tp -> LOG.info("tp = {}", tp.getTpId()));
+        if (topologicalMode == null) {
+            ConvertORTopoToTapiFullTopo.topologicalMode = "Full";
         }
-
-        // node creation [DSR/ODU]
-        LOG.info("creation of a DSR/ODU node for {}", this.ietfNodeId);
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId,
-            TapiStringConstants.DSR)).getBytes(Charset.forName("UTF-8"))).toString());
-        this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR), nodeUuid);
-        Name nameDsrNode = new NameBuilder().setValueName("dsr/odu node name").setValue(
-            String.join("+", this.ietfNodeId, TapiStringConstants.DSR)).build();
-        Name nameNodeType = new NameBuilder().setValueName("Node Type")
-            .setValue(this.ietfNodeType.getName()).build();
-        Set<LayerProtocolName> dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU);
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
-            .Node dsrNode = createTapiNode(Map.of(nameDsrNode.key(), nameDsrNode, nameNodeType.key(), nameNodeType),
-            dsrLayerProtocols);
-        LOG.info("DSR Node {} should have {} NEPs and {} SIPs", this.ietfNodeId,
-            this.oorClientPortList.size() + 2 * this.oorNetworkPortList.size(),
-            this.oorClientPortList.size() + this.oorNetworkPortList.size());
-        LOG.info("DSR Node {} has {} NEPs and {} SIPs", this.ietfNodeId,
-            dsrNode.getOwnedNodeEdgePoint().values().size(), dsrNode.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count());
-        tapiNodes.put(dsrNode.key(), dsrNode);
-
-        // node creation [otsi]
-        LOG.info("creation of an OTSi node for {}", this.ietfNodeId);
-        nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI), nodeUuid);
-        Name nameOtsiNode =  new NameBuilder().setValueName("otsi node name").setValue(
-            String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)).build();
-        Set<LayerProtocolName> otsiLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
-            .Node otsiNode = createTapiNode(Map.of(nameOtsiNode.key(), nameOtsiNode, nameNodeType.key(), nameNodeType),
-            otsiLayerProtocols);
-        LOG.info("OTSi Node {} should have {} NEPs and {} SIPs", this.ietfNodeId, 3 * this.oorNetworkPortList.size(),
-            this.oorNetworkPortList.size());
-        LOG.info("OTSi Node {} has {} NEPs and {} SIPs", this.ietfNodeId,
-            otsiNode.getOwnedNodeEdgePoint().values().size(), otsiNode.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count());
-        tapiNodes.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");
-        createTapiTransitionalLinks();
     }
 
-    public void convertRdmToRdmLinks(List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-            .ietf.network.topology.rev180226.networks.network.Link> rdmTordmLinkList) {
+    public void convertRdmToRdmLinks(
+            List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> rdmTordmLinkList) {
         List<String> linksToNotConvert = new ArrayList<>();
         LOG.info("creation of {} roadm to roadm links", rdmTordmLinkList.size() / 2);
-        for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .Link link : rdmTordmLinkList) {
-            if (!linksToNotConvert.contains(link.getLinkId().getValue())) {
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-                        .ietf.network.topology.rev180226.networks.network.Link oppositeLink = rdmTordmLinkList.stream()
-                    .filter(l -> l.getLinkId().equals(link.augmentation(Link1.class).getOppositeLink()))
-                    .findAny().orElse(null);
-
-                AdminStates oppLnkAdmState = null;
-                State oppLnkOpState = null;
-                if (oppositeLink != null) {
-                    oppLnkAdmState = oppositeLink.augmentation(Link1.class).getAdministrativeState();
-                    oppLnkOpState = oppositeLink.augmentation(Link1.class).getOperationalState();
-                }
-                String adminState =
-                    link.augmentation(Link1.class).getAdministrativeState() == null
-                        || oppLnkAdmState == null
-                    ? null
-                    : this.tapiLink.setTapiAdminState(
-                        link.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName();
-                String operState =
-                    link.augmentation(Link1.class).getOperationalState() == null
-                        || oppLnkOpState == null
-                    ? null
-                    : this.tapiLink.setTapiOperationalState(
-                        link.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName();
-
-                Link tapLink = this.tapiLink.createTapiLink(String.join("-",
-                        link.getSource().getSourceNode().getValue().split("-")[0],
-                        link.getSource().getSourceNode().getValue().split("-")[1]),
-                    link.getSource().getSourceTp().getValue(), String.join("-",
-                        link.getDestination().getDestNode().getValue().split("-")[0],
-                        link.getDestination().getDestNode().getValue().split("-")[1]),
-                    link.getDestination().getDestTp().getValue(), TapiStringConstants.OMS_RDM_RDM_LINK,
-                    TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
-                    TapiStringConstants.PHTNC_MEDIA, adminState, operState, Set.of(LayerProtocolName.PHOTONICMEDIA),
-                    Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), this.tapiTopoUuid);
-                linksToNotConvert.add(link
-                    .augmentation(Link1.class)
-                    .getOppositeLink().getValue());
-                tapiLinks.put(tapLink.key(), tapLink);
+        for (var link : rdmTordmLinkList) {
+            if (linksToNotConvert.contains(link.getLinkId().getValue())) {
+                continue;
             }
+            var lnk1 = link.augmentation(Link1.class);
+            var lnk1OppLnk = lnk1.getOppositeLink();
+            var oppositeLink = rdmTordmLinkList.stream()
+                .filter(l -> l.getLinkId().equals(lnk1OppLnk))
+                .findAny().orElse(null);
+            AdminStates oppLnkAdmState = null;
+            State oppLnkOpState = null;
+            if (oppositeLink != null) {
+                oppLnkAdmState = oppositeLink.augmentation(Link1.class).getAdministrativeState();
+                oppLnkOpState = oppositeLink.augmentation(Link1.class).getOperationalState();
+            }
+            var linkSrc = link.getSource();
+            String linkSrcNodeValue = linkSrc.getSourceNode().getValue();
+            var linkDst = link.getDestination();
+            String linkDstNodeValue = linkDst.getDestNode().getValue();
+            var lnkAdmState = lnk1.getAdministrativeState();
+            var lnkOpState = lnk1.getOperationalState();
+            Link tapLink = this.tapiLink.createTapiLink(
+                String.join("-", linkSrcNodeValue.split("-")[0], linkSrcNodeValue.split("-")[1]),
+                linkSrc.getSourceTp().getValue(),
+                String.join("-", linkDstNodeValue.split("-")[0], linkDstNodeValue.split("-")[1]),
+                linkDst.getDestTp().getValue(),
+                TapiStringConstants.OMS_RDM_RDM_LINK,
+                TapiStringConstants.PHTNC_MEDIA,
+                TapiStringConstants.PHTNC_MEDIA,
+                TapiStringConstants.PHTNC_MEDIA_OTS,
+                TapiStringConstants.PHTNC_MEDIA_OTS,
+                //adminState,
+                lnkAdmState == null || oppLnkAdmState == null
+                    ? null : this.tapiLink.setTapiAdminState(lnkAdmState, oppLnkAdmState).getName(),
+                //operState,
+                lnkOpState == null || oppLnkOpState == null
+                    ? null : this.tapiLink.setTapiOperationalState(lnkOpState, oppLnkOpState).getName(),
+                Set.of(LayerProtocolName.PHOTONICMEDIA),
+                Set.of(LayerProtocolName.PHOTONICMEDIA.getName()),
+                this.tapiTopoUuid);
+            linksToNotConvert.add(lnk1OppLnk.getValue());
+            tapiLinks.put(tapLink.key(), tapLink);
+        }
+    }
+
+    public void convertRoadmNode(Node roadm, Network openroadmTopo, String topoMode) {
+        setTopologicalMode(topoMode);
+        if (topoMode.equals("Full")) {
+            convertRoadmNodeFull(roadm, openroadmTopo);
+        } else {
+            convertRoadmNodeAbstracted(openroadmTopo);
         }
     }
 
-    public void convertRoadmNode(Node roadm, Network openroadmTopo) {
+    private void convertRoadmNodeFull(Node roadm, Network openroadmTopo) {
         this.ietfNodeId = roadm.getNodeId().getValue();
         this.ietfNodeType = roadm.augmentation(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class).getNodeType();
+                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
+            .getNodeType();
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> oneplist = new HashMap<>();
         // 1. Get degree and srg nodes to map TPs into NEPs
         if (openroadmTopo.getNode() == null) {
@@ -274,185 +165,200 @@ public class ConvertORTopoToTapiFullTopo {
         int numSips = 0;
         List<Node> nodeList = new ArrayList<Node>(openroadmTopo.getNode().values());
         for (Node node:nodeList) {
-            if (node.getSupportingNode().values().stream().noneMatch(sp -> sp.getNodeRef().getValue()
-                .equals(this.ietfNodeId))) {
-                LOG.warn("Abstracted node {} is not part of {}",
-                    node.getNodeId().getValue(), this.ietfNodeId);
+            String nodeId = node.getNodeId().getValue();
+            if (node.getSupportingNode().values().stream()
+                    .noneMatch(sp -> sp.getNodeRef().getValue().equals(this.ietfNodeId))) {
+                LOG.debug("Abstracted node {} is not part of {}", nodeId, this.ietfNodeId);
                 continue;
             }
-            if (node.augmentation(Node1.class) == null
-                && node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-                .ietf.network.topology.rev180226.Node1.class) == null) {
-                LOG.warn("Abstracted node {} doesnt have type of node or is not disaggregated",
-                    node.getNodeId().getValue());
+            var node1 = node.augmentation(
+                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class);
+            if (node.augmentation(Node1.class) == null && node1 == null) {
+                LOG.warn("Abstracted node {} doesnt have type of node or is not disaggregated", nodeId);
                 continue;
             }
-            OpenroadmNodeType nodeType = node.augmentation(org.opendaylight.yang.gen.v1.http
-                .org.openroadm.common.network.rev211210.Node1.class).getNodeType();
-            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1 node1 =
-                node.augmentation(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-                    .ietf.network.topology.rev180226.Node1.class);
-            LOG.info("TPs of node: {}", node1.getTerminationPoint().values());
+            OpenroadmNodeType nodeType = node.augmentation(
+                        org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
+                .getNodeType();
+            var node1TpValues = node1.getTerminationPoint().values();
+            LOG.info("TPs of node: {}", node1TpValues);
             switch (nodeType.getIntValue()) {
                 case 11:
                     LOG.info("Degree node");
                     // Get only external TPs of the degree
-                    List<TerminationPoint> degPortList = node1.getTerminationPoint().values().stream()
+                    List<TerminationPoint> degPortList = node1TpValues.stream()
                         .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                            == OpenroadmTpType.DEGREETXRXTTP.getIntValue()
+                                == OpenroadmTpType.DEGREETXRXTTP.getIntValue()
                             || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                            == OpenroadmTpType.DEGREERXTTP.getIntValue()
+                                == OpenroadmTpType.DEGREERXTTP.getIntValue()
                             || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                            == OpenroadmTpType.DEGREETXTTP.getIntValue())
+                                == OpenroadmTpType.DEGREETXTTP.getIntValue())
                         .collect(Collectors.toList());
                     // Convert TP List in NEPs and put it in onepl
                     LOG.info("Degree port List: {}", degPortList);
                     // TODO: deg port could be sip. e.g. MDONS
-                    oneplist.putAll(populateNepsForRdmNode(degPortList, false));
-                    // oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), degPortList, false));
-                    numNeps += degPortList.size() * 3;
+                    oneplist.putAll(populateNepsForRdmNode(
+                        nodeId, degPortList, false, TapiStringConstants.PHTNC_MEDIA_OTS));
+                    oneplist.putAll(populateNepsForRdmNode(
+                        nodeId, degPortList, false, TapiStringConstants.PHTNC_MEDIA_OMS));
+                    numNeps += degPortList.size() * 2;
                     break;
                 case 12:
                     LOG.info("SRG node");
                     // Get only external TPs of the srg
-                    List<TerminationPoint> srgPortList = node1.getTerminationPoint().values().stream()
+                    List<TerminationPoint> srgPortList = node1TpValues.stream()
                         .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                            == OpenroadmTpType.SRGTXRXPP.getIntValue()
+                                == OpenroadmTpType.SRGTXRXPP.getIntValue()
                             || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                            == OpenroadmTpType.SRGRXPP.getIntValue()
+                                == OpenroadmTpType.SRGRXPP.getIntValue()
                             || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                            == OpenroadmTpType.SRGTXPP.getIntValue())
+                                == OpenroadmTpType.SRGTXPP.getIntValue())
                         .collect(Collectors.toList());
                     // Convert TP List in NEPs and put it in onepl
                     LOG.info("Srg port List: {}", srgPortList);
-                    oneplist.putAll(populateNepsForRdmNode(srgPortList, true));
-                    // oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), srgPortList, true));
-                    numNeps += srgPortList.size() * 3;
+                    oneplist.putAll(populateNepsForRdmNode(
+                        nodeId, srgPortList, true, TapiStringConstants.PHTNC_MEDIA_OTS));
+                    numNeps += srgPortList.size();
                     numSips += srgPortList.size();
                     break;
                 default:
-                    LOG.error("Node {} tyoe not supported", nodeType.getName());
+                    LOG.error("Node {} type not supported", nodeType.getName());
             }
         }
         // create tapi Node
         // UUID
-        LOG.info("Creation of PHOTONIC node for {}", roadm.getNodeId().getValue());
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", roadm.getNodeId().getValue(),
-            TapiStringConstants.PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString());
+        String nodeIdPhMed = String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA);
+        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeIdPhMed.getBytes(Charset.forName("UTF-8"))).toString());
+        LOG.info("Creation of PHOTONIC node for {}, of Uuid {}", this.ietfNodeId, nodeUuid);
         // Names
-        Name nodeNames =  new NameBuilder().setValueName("roadm node name")
-            .setValue(String.join("+", roadm.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA)).build();
-        Name nameNodeType = new NameBuilder().setValueName("Node Type")
-            .setValue(this.ietfNodeType.getName()).build();
-        // Protocol Layer
-        Set<LayerProtocolName> layerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
+        Name nodeNames =  new NameBuilder().setValueName("roadm node name").setValue(nodeIdPhMed).build();
+        Name nameNodeType = new NameBuilder().setValueName("Node Type").setValue(this.ietfNodeType.getName()).build();
         // Build tapi node
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
-            .Node roadmNode = createRoadmTapiNode(nodeUuid,
-            Map.of(nodeNames.key(), nodeNames, nameNodeType.key(), nameNodeType), layerProtocols, oneplist);
+        LOG.debug("CONVERTTOFULL SRG OTSNode of retrieved OnepMap {} ",
+            oneplist.entrySet().stream()
+                .filter(e -> e.getValue().getSupportedCepLayerProtocolQualifierInstances()
+                    .contains(
+                        new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                            .setNumberOfCepInstances(Uint64.valueOf(1))
+                            .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+                            .build()))
+                .collect(Collectors.toList()));
+        //org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node
+        var roadmNode = createRoadmTapiNode(
+            nodeUuid,
+            Map.of(nodeNames.key(), nodeNames, nameNodeType.key(), nameNodeType),
+            // Protocol Layer
+            Set.of(LayerProtocolName.PHOTONICMEDIA),
+            oneplist,
+            "Full");
         // TODO add states corresponding to device config
-        LOG.info("ROADM node {} should have {} NEPs and {} SIPs", roadm.getNodeId().getValue(), numNeps, numSips);
-        LOG.info("ROADM node {} has {} NEPs and {} SIPs", roadm.getNodeId().getValue(),
+        LOG.info("ROADM node {} should have {} NEPs and {} SIPs", this.ietfNodeId, numNeps, numSips);
+        LOG.info("ROADM node {} has {} NEPs and {} SIPs",
+            this.ietfNodeId,
             roadmNode.nonnullOwnedNodeEdgePoint().values().size(),
             roadmNode.nonnullOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getMappedServiceInterfacePoint() != null).count());
-
+                .filter(nep -> nep.getMappedServiceInterfacePoint() != null)
+                .count());
         tapiNodes.put(roadmNode.key(), roadmNode);
     }
 
-    private OduSwitchingPools createOduSwitchingPoolForTp100G() {
-        Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
-        int count = 1;
-        for (TerminationPoint tp : this.oorNetworkPortList) {
-            TpId tpid1 = tp.getTpId();
-            TpId tpid2 = tp.augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
-                    .getAssociatedConnectionMapTp().iterator().next();
-            Set<TpId> tpList = new HashSet<>();
-            tpList.add(tpid1);
-            tpList.add(tpid2);
-            NonBlockingList nbl = new NonBlockingListBuilder()
-                .setNblNumber(Uint16.valueOf(count))
-                .setTpList(tpList)
-                .build();
-            nblMap.put(nbl.key(), nbl);
-            count++;
+    private void convertRoadmNodeAbstracted(Network openroadmTopo) {
+        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> oneMap = new HashMap<>();
+        // 1. Get degree and srg nodes to map TPs into NEPs
+        if (openroadmTopo.getNode() == null) {
+            LOG.warn("Openroadm-topology is null.");
+            return;
         }
-        return new OduSwitchingPoolsBuilder()
-            .setNonBlockingList(nblMap)
-            .setSwitchingPoolNumber(Uint16.valueOf(1))
-            .build();
-    }
-
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node
-            createTapiNode(Map<NameKey, Name> nodeNames, Set<LayerProtocolName> layerProtocols) {
-        Uuid nodeUuid = null;
-        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
-        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = 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);
-        if (layerProtocols.contains(LayerProtocolName.DSR)) {
-            nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList);
-        } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
-            nodeUuid = getNodeUuid4Photonic(onepl, nodeRuleGroupList, ruleList);
-        } else {
-            LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next())
-                .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue());
+        int numNeps = 0;
+        int numSips = 0;
+        List<Node> nodeList = new ArrayList<Node>(openroadmTopo.getNode().values());
+        for (Node node:nodeList) {
+            var node1 = node.augmentation(
+                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class);
+            String nodeId = node.getNodeId().getValue();
+            if (node.augmentation(Node1.class) == null && node1 == null) {
+                LOG.warn("Abstracted node {} doesnt have type of node or is not disaggregated", nodeId);
+                continue;
+            }
+            OpenroadmNodeType nodeType = node.augmentation(
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
+                .getNodeType();
+            if (nodeType.getIntValue() != 11) {
+                // Only consider ROADMS SRG Nodes
+                continue;
+            }
+            LOG.debug("Handling SRG node in Topology abstraction {}", nodeId);
+            // Get only external TPs of the srg
+            List<TerminationPoint> srgPortList = node1.getTerminationPoint().values().stream()
+                .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
+                        == OpenroadmTpType.SRGTXRXPP.getIntValue()
+                    || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
+                        == OpenroadmTpType.SRGRXPP.getIntValue()
+                    || tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
+                        == OpenroadmTpType.SRGTXPP.getIntValue())
+                .collect(Collectors.toList());
+            // Convert TP List in NEPs and put it in onepl
+            LOG.debug("Srg port List: {}", srgPortList);
+            oneMap.putAll(populateNepsForRdmNode(nodeId, srgPortList, true, TapiStringConstants.PHTNC_MEDIA_OTS));
+            numNeps += srgPortList.size();
+            numSips += srgPortList.size();
         }
-        // Empty random creation of mandatory fields for avoiding errors....
-        CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
-            .setCostAlgorithm("Restricted Shortest Path - RSP")
-            .setCostName("HOP_COUNT")
-            .setCostValue(TapiStringConstants.COST_HOP_VALUE)
-            .build();
-        LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
-            .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-            .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
-            .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
-            .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
-            .setTrafficPropertyName("FIXED_LATENCY")
-            .build();
-        return new NodeBuilder()
-            .setUuid(nodeUuid)
-            .setName(nodeNames)
-            .setLayerProtocolName(layerProtocols)
-            .setAdministrativeState(this.tapiLink.setTapiAdminState(this.ietfNodeAdminState.getName()))
-            .setOperationalState(this.tapiLink.setTapiOperationalState(this.ietfNodeOperState.getName()))
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setOwnedNodeEdgePoint(onepl)
-            .setNodeRuleGroup(nodeRuleGroupList)
-            .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
-            .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
-            .setErrorCharacteristic("error")
-            .setLossCharacteristic("loss")
-            .setRepeatDeliveryCharacteristic("repeat delivery")
-            .setDeliveryOrderCharacteristic("delivery order")
-            .setUnavailableTimeCharacteristic("unavailable time")
-            .setServerIntegrityProcessCharacteristic("server integrity process")
-            .build();
+        // create a unique ROADM tapi Node
+        LOG.info("abstraction of the ROADM infrastructure towards a photonic node");
+        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.RDM_INFRA.getBytes(Charset.forName("UTF-8")))
+                .toString());
+        Name nodeName =
+            new NameBuilder().setValueName("roadm node name").setValue(TapiStringConstants.RDM_INFRA).build();
+        Name nameNodeType =
+            new NameBuilder().setValueName("Node Type").setValue(OpenroadmNodeType.ROADM.getName()).build();
+        // Build tapi node
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node roadmNode =
+            createRoadmTapiNode(
+                nodeUuid,
+                Map.of(nodeName.key(), nodeName, nameNodeType.key(), nameNodeType),
+                Set.of(LayerProtocolName.PHOTONICMEDIA),
+                oneMap,
+                "Abstracted");
+        // TODO add states corresponding to device config
+        LOG.info("ROADM node {} should have {} NEPs and {} SIPs", TapiStringConstants.RDM_INFRA, numNeps, numSips);
+        LOG.info("ROADM node {} has {} NEPs and {} SIPs",
+            TapiStringConstants.RDM_INFRA,
+            roadmNode.nonnullOwnedNodeEdgePoint().values().size(),
+            roadmNode.nonnullOwnedNodeEdgePoint().values().stream()
+                .filter(nep -> nep.getMappedServiceInterfacePoint() != null)
+                .count());
+        tapiNodes.put(roadmNode.key(), roadmNode);
     }
 
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node
-                createRoadmTapiNode(Uuid nodeUuid, Map<NameKey, Name> nameMap, Set<LayerProtocolName> layerProtocols,
-                        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> oneplist) {
+    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node createRoadmTapiNode(
+            Uuid nodeUuid, Map<NameKey, Name> nameMap, Set<LayerProtocolName> layerProtocols,
+            Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap, String topoMode) {
         // Empty random creation of mandatory fields for avoiding errors....
-        CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
-            .setCostAlgorithm("Restricted Shortest Path - RSP")
-            .setCostName("HOP_COUNT")
-            .setCostValue(TapiStringConstants.COST_HOP_VALUE)
-            .build();
-        LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
-            .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-            .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
-            .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
-            .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
-            .setTrafficPropertyName("FIXED_LATENCY")
-            .build();
+        CostCharacteristic costCharacteristic =
+            new CostCharacteristicBuilder()
+                .setCostAlgorithm("Restricted Shortest Path - RSP")
+                .setCostName("HOP_COUNT")
+                .setCostValue(TapiStringConstants.COST_HOP_VALUE)
+                .build();
+        LatencyCharacteristic latencyCharacteristic =
+            new LatencyCharacteristicBuilder()
+                .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(Set.of("risk identifier1", "risk identifier2"))
+                .build();
+
+        var tapiFactory = new ConvertORToTapiTopology(this.tapiTopoUuid);
+        String choosenMode = topoMode.equals("Full") ? "Full" : "Abstracted";
+        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap =
+            tapiFactory.createAllNodeRuleGroupForRdmNode(choosenMode, nodeUuid, this.ietfNodeId, onepMap.values());
         return new NodeBuilder()
             .setUuid(nodeUuid)
             .setName(nameMap)
@@ -460,10 +366,18 @@ public class ConvertORTopoToTapiFullTopo {
             .setAdministrativeState(AdministrativeState.UNLOCKED)
             .setOperationalState(OperationalState.ENABLED)
             .setLifecycleState(LifecycleState.INSTALLED)
-            .setOwnedNodeEdgePoint(oneplist)
-            .setNodeRuleGroup(createNodeRuleGroupForRdmNode(nodeUuid, oneplist.values()))
+            .setOwnedNodeEdgePoint(onepMap)
+            .setNodeRuleGroup(nodeRuleGroupMap)
+            .setInterRuleGroup(
+                tapiFactory.createInterRuleGroupForRdmNode(
+                    choosenMode, nodeUuid, this.ietfNodeId,
+                    nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList())))
             .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
             .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
+            .setRiskParameterPac(
+                new RiskParameterPacBuilder()
+                    .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+                    .build())
             .setErrorCharacteristic("error")
             .setLossCharacteristic("loss")
             .setRepeatDeliveryCharacteristic("repeat delivery")
@@ -473,634 +387,159 @@ public class ConvertORTopoToTapiFullTopo {
             .build();
     }
 
-    private Uuid getNodeUuid4Photonic(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
-                                      Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList,
-                                      Map<RuleKey, Rule> ruleList) {
-        Uuid nodeUuid;
-        nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI));
-        // iNep creation on otsi node
-        for (int i = 0; i < oorNetworkPortList.size(); i++) {
-            LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                oorNetworkPortList.get(i).getTpId().getValue()));
-            Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                    oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
-                .toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1);
-            Name onedName = new NameBuilder()
-                .setValueName("iNodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                    oorNetworkPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
-                String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI));
-            onepl.put(onep.key(), onep);
-        }
-        // eNep creation on otsi node
-        for (int i = 0; i < oorNetworkPortList.size(); i++) {
-            LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                oorNetworkPortList.get(i).getTpId().getValue()));
-            Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                    oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
-                .toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2);
-            Name onedName = new NameBuilder()
-                .setValueName("eNodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                    oorNetworkPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, false,
-                String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI));
-            onepl.put(onep.key(), onep);
-        }
-        // Photonic Media Nep creation on otsi node
-        for (int i = 0; i < oorNetworkPortList.size(); i++) {
-            LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA,
-                oorNetworkPortList.get(i).getTpId().getValue()));
-            Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA,
-                    oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
-                .toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA,
-                oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3);
-            Name onedName = new NameBuilder()
-                .setValueName("PhotMedNodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA,
-                    oorNetworkPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, false,
-                String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA));
-            onepl.put(onep.key(), onep);
-        }
-        // create NodeRuleGroup
-        int count = 1;
-        LOG.info("OTSi switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values());
-        for (TerminationPoint tp : this.oorNetworkPortList) {
-            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
-                nepList = new HashMap<>();
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                .NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-                .node.rule.group.NodeEdgePointBuilder()
-                .setTopologyUuid(tapiTopoUuid)
-                .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)))
-                .setNodeEdgePointUuid(
-                    this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                        tp.getTpId().getValue())))
-                .build();
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                .NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-                .node.rule.group.NodeEdgePointBuilder()
-                .setTopologyUuid(tapiTopoUuid)
-                .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)))
-                .setNodeEdgePointUuid(
-                    this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                        tp.getTpId().getValue())))
-                .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(TapiStringConstants.COST_HOP_VALUE)
-                .build();
-            LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
-                .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-                .setQueingLatencyCharacteristic(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();
-            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();
-            nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup);
-            count++;
-        }
-        return nodeUuid;
-    }
-
-    private Uuid getNodeUuid4Dsr(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
-                                 Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList, Map<RuleKey, Rule> ruleList) {
-        Uuid nodeUuid;
-        nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.DSR));
-        // client nep creation on DSR node
-        for (int i = 0; i < oorClientPortList.size(); i++) {
-            LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                oorClientPortList.get(i).getTpId().getValue()));
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                    oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                    oorClientPortList.get(i).getTpId().getValue()), nepUuid);
-            NameBuilder nameBldr = new NameBuilder().setValue(
-                String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                    oorClientPortList.get(i).getTpId().getValue()));
-            Name name;
-            if (OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
-                name = nameBldr.setValueName("100G-tpdr").build();
-            } else {
-                name = nameBldr.setValueName("NodeEdgePoint_C").build();
-            }
-
-            OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(name.key(), name),
-                LayerProtocolName.DSR, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
-                    TapiStringConstants.DSR));
-            onepl.put(onep.key(), onep);
-        }
-        // network nep creation on I_ODU node
-        for (int i = 0; i < oorNetworkPortList.size(); i++) {
-            LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
-                oorNetworkPortList.get(i).getTpId().getValue()));
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
-                    oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
-                oorNetworkPortList.get(i).getTpId().getValue()), nepUuid);
-            Name onedName = new NameBuilder()
-                .setValueName("iNodeEdgePoint_N")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
-                    oorNetworkPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.ODU, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
-                    TapiStringConstants.I_ODU));
-            onepl.put(onep.key(), onep);
-        }
-        // network nep creation on E_ODU node
-        for (int i = 0; i < oorClientPortList.size(); i++) {
-            LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
-                oorClientPortList.get(i).getTpId().getValue()));
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
-                    oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
-                oorClientPortList.get(i).getTpId().getValue()), nepUuid);
-            Name onedName = new NameBuilder()
-                .setValueName("eNodeEdgePoint_N")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU,
-                    oorClientPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.ODU, LayerProtocolName.DSR, false, String.join("+", this.ietfNodeId,
-                    TapiStringConstants.E_ODU));
-            onepl.put(onep.key(), onep);
-        }
-        // create NodeRuleGroup
-        int count = 1;
-        LOG.info("ODU switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values());
-        for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) {
-            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
-                nepList = new HashMap<>();
-            LOG.info("UUidMap={}", this.uuidMap.keySet());
-            LOG.info("TP list = {}", nbl.getTpList());
-            for (TpId tp : nbl.getTpList()) {
-                LOG.info("TP={}", tp.getValue());
-                LOG.info("UuidKey={}", String.join("+", this.ietfNodeId,
-                    TapiStringConstants.E_ODU, tp.getValue()));
-                if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId,
-                            TapiStringConstants.E_ODU, tp.getValue()))
-                        && this.uuidMap.containsKey(String.join("+", this.ietfNodeId,
-                            TapiStringConstants.DSR, tp.getValue()))) {
-                    org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint
-                        nep1 = new org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointBuilder()
-                        .setTopologyUuid(tapiTopoUuid)
-                        .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
-                            TapiStringConstants.DSR)))
-                        .setNodeEdgePointUuid(this.uuidMap.get(String.join(
-                            "+", this.ietfNodeId, TapiStringConstants.DSR, tp.getValue())))
-                        .build();
-                    org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint
-                        nep2 = new org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointBuilder()
-                        .setTopologyUuid(tapiTopoUuid)
-                        .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
-                            TapiStringConstants.DSR)))
-                        .setNodeEdgePointUuid(this.uuidMap.get(String.join(
-                            "+", this.ietfNodeId, TapiStringConstants.E_ODU, tp.getValue())))
-                        .build();
-                    nepList.put(nep1.key(), nep1);
-                    nepList.put(nep2.key(), nep2);
-                }
-            }
-            // Empty random creation of mandatory fields for avoiding errors....
-            CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
-                .setCostAlgorithm("Restricted Shortest Path - RSP")
-                .setCostName("HOP_COUNT")
-                .setCostValue(TapiStringConstants.COST_HOP_VALUE)
-                .build();
-            LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
-                .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-                .setQueingLatencyCharacteristic(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();
-            NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
-                .setUuid(new Uuid(UUID.nameUUIDFromBytes(("dsr 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();
-            nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup);
-            count++;
-        }
-        return nodeUuid;
-    }
-
-    private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, Map<NameKey, Name> nepNames,
-                                         LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol, boolean withSip,
-                                         String keyword) {
-        String key = String.join("+", keyword, oorTp.getTpId().getValue());
-        OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
-            .setUuid(this.uuidMap.get(key))
-            .setLayerProtocolName(nepProtocol)
-            .setName(nepNames);
-        if (withSip) {
-            onepBldr.setMappedServiceInterfacePoint(createMSIP(1, nepProtocol, oorTp, keyword));
-        }
-        AdministrativeState adminState = null;
-        OperationalState operState = null;
-        if (oorTp.augmentation(TerminationPoint1.class).getAdministrativeState() != null) {
-            adminState = this.tapiLink.setTapiAdminState(oorTp.augmentation(TerminationPoint1.class)
-                .getAdministrativeState().getName());
-        }
-        if (oorTp.augmentation(TerminationPoint1.class).getOperationalState() != null) {
-            operState = this.tapiLink.setTapiOperationalState(oorTp.augmentation(TerminationPoint1.class)
-                .getOperationalState().getName());
-        }
-        onepBldr.setSupportedCepLayerProtocolQualifier(createSupportedLayerProtocolQualifier(oorTp, nepProtocol))
-            .setLinkPortDirection(PortDirection.BIDIRECTIONAL)
-            .setLinkPortRole(PortRole.SYMMETRIC)
-            .setAdministrativeState(adminState)
-            .setOperationalState(operState)
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-            .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
-        return onepBldr.build();
-    }
-
-    private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> populateNepsForRdmNode(List<TerminationPoint> tpList,
-                                                                                  boolean withSip) {
-        // create neps for MC and OTSiMC and Photonic Media
+    public Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> populateNepsForRdmNode(
+            String nodeId, List<TerminationPoint> tpList, boolean withSip, String nepPhotonicSublayer) {
+        // create neps for MC and and Photonic Media OTS/OMS
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
         for (TerminationPoint tp:tpList) {
+            String tpId = tp.getTpId().getValue();
             // Admin and oper state common for all tps
+            OpenroadmTpType tpType = tp.augmentation(TerminationPoint1.class).getTpType();
+            // PHOTONIC MEDIA nep
+            LOG.debug("PHOTO NEP = {}",
+                String.join("+", this.ietfNodeId, nepPhotonicSublayer, tpId));
+            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)) {
+                ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(this.tapiTopoUuid);
+                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.getPPUsedWavelength(tp);
+                        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 {} NEP {} for Node {}",
+                                usedFreqMap,
+                                String.join("+", this.ietfNodeId, nepPhotonicSublayer, tpId),
+                                nodeId);
+                            onepMap.putAll(populateNepsForRdmNode(
+                                nodeId, new ArrayList<>(List.of(tp)), true, TapiStringConstants.MC));
+                            onepMap.putAll(populateNepsForRdmNode(
+                                nodeId, new ArrayList<>(List.of(tp)), true, TapiStringConstants.OTSI_MC));
+                        }
+                        break;
+                    case DEGREERXTTP:
+                    case DEGREETXTTP:
+                    case DEGREETXRXTTP:
+                        usedFreqMap = tapiFactory.getTTPUsedFreqMap(tp);
+                        availableFreqMap = tapiFactory.getTTPAvailableFreqMap(tp);
+                        break;
+                    default:
+                        break;
+                }
+                LOG.debug("calling add Photonic NEP spec for Roadm");
+                onepBd = tapiFactory.addPhotSpecToRoadmOnep(
+                    nodeId, usedFreqMap, availableFreqMap, onepBd, nepPhotonicSublayer);
+            }
             AdminStates admin = tp.augmentation(TerminationPoint1.class).getAdministrativeState();
             State oper = tp.augmentation(TerminationPoint1.class).getOperationalState();
-            // PHOTONIC MEDIA nep
-            LOG.info("PHOTO NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA,
-                tp.getTpId().getValue()));
             Name nepName = new NameBuilder()
-                .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA,
-                    tp.getTpId().getValue()))
+                .setValueName(nepPhotonicSublayer + "NodeEdgePoint")
+                .setValue(String.join("+", this.ietfNodeId, nepPhotonicSublayer, tpId))
                 .build();
-
-            OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder()
-                .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId,
-                    TapiStringConstants.PHTNC_MEDIA, tp.getTpId().getValue()))
-                    .getBytes(Charset.forName("UTF-8"))).toString()))
+            OwnedNodeEdgePoint onep = onepBd
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes(
+                        (String.join("+", this.ietfNodeId, nepPhotonicSublayer, tpId))
+                            .getBytes(Charset.forName("UTF-8")))
+                    .toString()))
                 .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
                 .setName(Map.of(nepName.key(), nepName))
-                .setSupportedCepLayerProtocolQualifier(Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE))
-                .setLinkPortDirection(PortDirection.BIDIRECTIONAL)
+                .setSupportedCepLayerProtocolQualifierInstances(
+                    new ArrayList<>(List.of(
+                        new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                            .setLayerProtocolQualifier(
+                                TapiStringConstants.PHTNC_MEDIA_OMS.equals(nepPhotonicSublayer)
+                                    ? PHOTONICLAYERQUALIFIEROMS.VALUE
+                                    : PHOTONICLAYERQUALIFIEROTS.VALUE)
+                            .setNumberOfCepInstances(Uint64.valueOf(1))
+                            .build())))
+                .setDirection(Direction.BIDIRECTIONAL)
                 .setLinkPortRole(PortRole.SYMMETRIC)
                 .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName()))
                 .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName()))
                 .setLifecycleState(LifecycleState.INSTALLED)
-                .setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-                .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL)
                 .build();
             onepMap.put(onep.key(), onep);
-
-            // MC nep
-            LOG.info("MC NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.MC,
-                tp.getTpId().getValue()));
-            Name nepName1 = new NameBuilder()
-                .setValueName(TapiStringConstants.MC + "NodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.MC, tp.getTpId().getValue()))
-                .build();
-            OwnedNodeEdgePointBuilder onepBldr1 = new OwnedNodeEdgePointBuilder()
-                .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId,
-                    TapiStringConstants.MC, tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()))
-                .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
-                .setName(Map.of(nepName1.key(), nepName1))
-                .setSupportedCepLayerProtocolQualifier(Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE))
-                .setLinkPortDirection(PortDirection.BIDIRECTIONAL)
-                .setLinkPortRole(PortRole.SYMMETRIC)
-                .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName()))
-                .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName()))
-                .setLifecycleState(LifecycleState.INSTALLED)
-                .setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-                .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
-            if (withSip) {
-                onepBldr1.setMappedServiceInterfacePoint(createMSIP(1, LayerProtocolName.PHOTONICMEDIA,
-                    tp, String.join("+", this.ietfNodeId, TapiStringConstants.MC)));
-            }
-            OwnedNodeEdgePoint onep1 = onepBldr1.build();
-            onepMap.put(onep1.key(), onep1);
-
-            // OTSiMC nep
-            LOG.info("OTSi NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
-                tp.getTpId().getValue()));
-            Name nepName2 = new NameBuilder()
-                .setValueName(TapiStringConstants.OTSI_MC + "NodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC,
-                    tp.getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep2 = new OwnedNodeEdgePointBuilder()
-                .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId,
-                        TapiStringConstants.OTSI_MC, tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
-                    .toString()))
-                .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
-                .setName(Map.of(nepName2.key(), nepName2))
-                .setSupportedCepLayerProtocolQualifier(Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE))
-                .setLinkPortDirection(PortDirection.BIDIRECTIONAL)
-                .setLinkPortRole(PortRole.SYMMETRIC)
-                .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName()))
-                .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName()))
-                .setLifecycleState(LifecycleState.INSTALLED)
-                .setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-                .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL)
-                .build();
-            onepMap.put(onep2.key(), onep2);
         }
         return onepMap;
     }
 
-    private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(Uuid nodeUuid,
-                                                                               Collection<OwnedNodeEdgePoint> onepl) {
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
-            nepMap = new HashMap<>();
-        for (OwnedNodeEdgePoint onep : onepl) {
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint
-                nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                .NodeEdgePointBuilder()
-                .setTopologyUuid(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((this.ietfNodeId + " node rule group")
-                .getBytes(Charset.forName("UTF-8"))).toString()))
-            .setRule(ruleList)
-            .setNodeEdgePoint(nepMap)
-            .build();
-        nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
-        return nodeRuleGroupMap;
-    }
-
-    private Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> createMSIP(int nb,
-                                                                                        LayerProtocolName layerProtocol,
-                                                                                        TerminationPoint tp,
-                                                                                        String nodeid) {
-        // add them to SIP context
-        Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> msipl = new HashMap<>();
-        for (int i = 0; i < nb; i++) {
-            LOG.info("SIP = {}", String.join("+", "SIP", nodeid, tp.getTpId().getValue()));
-            Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeid,
-                tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
-            MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder()
-                .setServiceInterfacePointUuid(sipUuid).build();
-            ServiceInterfacePoint sip = createSIP(sipUuid, layerProtocol, tp, nodeid);
-            this.tapiSips.put(sip.key(), sip);
-            msipl.put(msip.key(), msip);
-        }
-        return msipl;
-    }
-
-    private ServiceInterfacePoint createSIP(Uuid sipUuid, LayerProtocolName layerProtocol, TerminationPoint tp,
-                                            String nodeid) {
-        // TODO: what value should be set in total capacity and available capacity??
-        // LOG.info("SIP name = {}", String.join("+", nodeid, tp.getTpId().getValue()));
-        Name sipName = new NameBuilder()
-            .setValueName("SIP name")
-            .setValue(String.join("+", nodeid, tp.getTpId().getValue()))
-            .build();
-        AdministrativeState adminState = null;
-        OperationalState operState = null;
-        if (tp.augmentation(TerminationPoint1.class).getAdministrativeState() != null) {
-            adminState = this.tapiLink.setTapiAdminState(tp.augmentation(TerminationPoint1.class)
-                .getAdministrativeState().getName());
-        }
-        if (tp.augmentation(TerminationPoint1.class).getOperationalState() != null) {
-            operState = this.tapiLink.setTapiOperationalState(tp.augmentation(TerminationPoint1.class)
-                .getOperationalState().getName());
-        }
-        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(tp, layerProtocol))
-            .build();
-    }
-
-    private Set<LAYERPROTOCOLQUALIFIER> createSupportedLayerProtocolQualifier(TerminationPoint tp,
-                                                                              LayerProtocolName lpn) {
-        Set<LAYERPROTOCOLQUALIFIER> sclpqSet = new HashSet<>();
-        org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1 tp1 =
-            tp.augmentation(org.opendaylight.yang.gen.v1.http
-                .org.openroadm.otn.network.topology.rev211210.TerminationPoint1.class);
-        if (tp1 == null) {
-            return new HashSet<>(sclpqSet);
-        }
-        if (tp1.getTpSupportedInterfaces() == null) {
-            LOG.warn("Tp supported interface doesnt exist on TP {}", tp.getTpId().getValue());
-            return new HashSet<>(sclpqSet);
-        }
-        Collection<SupportedInterfaceCapability> sicList = tp1.getTpSupportedInterfaces()
-            .getSupportedInterfaceCapability().values();
-        for (SupportedInterfaceCapability sic : sicList) {
-            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
-            switch (lpn.getName()) {
-                case "DSR":
-                    switch (ifCapType) {
-                        // 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":
-                            sclpqSet.add(ODUTYPEODU0.VALUE);
-                            sclpqSet.add(DIGITALSIGNALTYPEGigE.VALUE);
-                            break;
-                        case "If10GEODU2e":
-                            sclpqSet.add(ODUTYPEODU2E.VALUE);
-                            sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If10GEODU2":
-                            sclpqSet.add(ODUTYPEODU2.VALUE);
-                            sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If10GE":
-                            sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If100GEODU4":
-                            sclpqSet.add(DIGITALSIGNALTYPE100GigE.VALUE);
-                            sclpqSet.add(ODUTYPEODU4.VALUE);
-                            break;
-                        case "If100GE":
-                            sclpqSet.add(DIGITALSIGNALTYPE100GigE.VALUE);
-                            break;
-                        case "IfOCHOTU4ODU4":
-                        case "IfOCH":
-                            sclpqSet.add(ODUTYPEODU4.VALUE);
-                            break;
-                        default:
-                            LOG.error("IfCapability type not managed");
-                            break;
-                    }
-                    break;
-                case "ODU":
-                    switch (ifCapType) {
-                        // 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":
-                            sclpqSet.add(ODUTYPEODU0.VALUE);
-                            break;
-                        case "If10GEODU2e":
-                            sclpqSet.add(ODUTYPEODU2E.VALUE);
-                            break;
-                        case "If10GEODU2":
-                        case "If10GE":
-                            sclpqSet.add(ODUTYPEODU2.VALUE);
-                            break;
-                        case "If100GEODU4":
-                        case "If100GE":
-                        case "IfOCHOTU4ODU4":
-                        case "IfOCH":
-                            sclpqSet.add(ODUTYPEODU4.VALUE);
-                            break;
-                        default:
-                            LOG.error("IfCapability type not managed");
-                            break;
-                    }
-                    break;
-                case "PHOTONIC_MEDIA":
-                    if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
-                        sclpqSet.add(PHOTONICLAYERQUALIFIEROTSi.VALUE);
-                        sclpqSet.add(PHOTONICLAYERQUALIFIEROMS.VALUE);
-                    }
-                    break;
-                default:
-                    LOG.error("Layer Protocol Name is unknown");
-                    break;
-            }
-        }
-        return sclpqSet;
-    }
-
-    private void createTapiTransitionalLinks() {
-        for (TerminationPoint tp : this.oorNetworkPortList) {
-            Link transiLink = tapiLink.createTapiLink(this.ietfNodeId, tp.getTpId().getValue(), this.ietfNodeId,
-                tp.getTpId().getValue(), TapiStringConstants.TRANSITIONAL_LINK, TapiStringConstants.DSR,
-                TapiStringConstants.OTSI, TapiStringConstants.I_ODU, TapiStringConstants.I_OTSI,
-                "inService", "inService", Set.of(LayerProtocolName.ODU, LayerProtocolName.PHOTONICMEDIA),
-                Set.of(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()),
-                this.tapiTopoUuid);
-            this.tapiLinks.put(transiLink.key(), transiLink);
-        }
-    }
-
-    public void convertXpdrToRdmLinks(List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-            .ietf.network.topology.rev180226.networks.network.Link> xpdrRdmLinkList) {
+    public void convertXpdrToRdmLinks(
+            List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> xpdrRdmLinkList) {
         List<String> linksToNotConvert = new ArrayList<>();
         LOG.info("creation of {} xpdr to roadm links", xpdrRdmLinkList.size() / 2);
-        // LOG.info("Link list = {}", xpdrRdmLinkList.toString());
-        for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-            .ietf.network.topology.rev180226.networks.network.Link link:xpdrRdmLinkList) {
-            if (!linksToNotConvert.contains(link.getLinkId().getValue())) {
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-                    .ietf.network.topology.rev180226.networks.network.Link oppositeLink = xpdrRdmLinkList.stream()
-                    .filter(l -> l.getLinkId().equals(link.augmentation(Link1.class).getOppositeLink())).findAny()
-                    .orElse(null);
-
-                AdminStates oppLnkAdmState = null;
-                State oppLnkOpState = null;
-                if (oppositeLink != null) {
-                    oppLnkAdmState = oppositeLink.augmentation(Link1.class).getAdministrativeState();
-                    oppLnkOpState = oppositeLink.augmentation(Link1.class).getOperationalState();
-                }
-                String adminState =
-                    link.augmentation(Link1.class).getAdministrativeState() == null
-                        || oppLnkAdmState == null
-                    ? null
-                    : this.tapiLink.setTapiAdminState(
-                        link.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName();
-                String operState =
-                    link.augmentation(Link1.class).getOperationalState() == null
-                        || oppLnkOpState == null
-                    ? null
-                    : this.tapiLink.setTapiOperationalState(
-                        link.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName();
-
-                String sourceNode = (link.getSource().getSourceNode().getValue().contains("ROADM"))
+        LOG.debug("Link list = {}", xpdrRdmLinkList);
+        for (var link:xpdrRdmLinkList) {
+            if (linksToNotConvert.contains(link.getLinkId().getValue())) {
+                continue;
+            }
+            var oppositeLink = xpdrRdmLinkList.stream()
+                .filter(l -> l.getLinkId().equals(link.augmentation(Link1.class).getOppositeLink()))
+                .findAny().orElse(null);
+            AdminStates oppLnkAdmState = null;
+            State oppLnkOpState = null;
+            if (oppositeLink != null) {
+                oppLnkAdmState = oppositeLink.augmentation(Link1.class).getAdministrativeState();
+                oppLnkOpState = oppositeLink.augmentation(Link1.class).getOperationalState();
+            }
+            String sourceNode =
+                link.getSource().getSourceNode().getValue().contains("ROADM")
                     ? getIdBasedOnModelVersion(link.getSource().getSourceNode().getValue())
                     : link.getSource().getSourceNode().getValue();
-                String sourceTp = link.getSource().getSourceTp().getValue();
-                String sourceNodeQual = sourceNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA
-                    : TapiStringConstants.OTSI;
-                String destNode = (link.getDestination().getDestNode().getValue().contains("ROADM"))
+            String destNode =
+                link.getDestination().getDestNode().getValue().contains("ROADM")
                     ? getIdBasedOnModelVersion(link.getDestination().getDestNode().getValue())
                     : link.getDestination().getDestNode().getValue();
-                String destTp = link.getDestination().getDestTp().getValue();
-                String destNodeQual = destNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA
-                    : TapiStringConstants.OTSI;
-                Link tapLink = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp,
-                    TapiStringConstants.OMS_XPDR_RDM_LINK, sourceNodeQual, destNodeQual,
-                    TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, adminState,
-                    operState, Set.of(LayerProtocolName.PHOTONICMEDIA),
-                    Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), this.tapiTopoUuid);
-                linksToNotConvert.add(link.augmentation(Link1.class).getOppositeLink().getValue());
-                this.tapiLinks.put(tapLink.key(), tapLink);
-            }
+            Link tapLink = this.tapiLink.createTapiLink(
+                sourceNode, link.getSource().getSourceTp().getValue(),
+                destNode, link.getDestination().getDestTp().getValue(),
+                TapiStringConstants.OMS_XPDR_RDM_LINK,
+                sourceNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA : TapiStringConstants.XPDR,
+                destNode.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA : TapiStringConstants.XPDR,
+                TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS,
+                //adminState,
+                link.augmentation(Link1.class).getAdministrativeState() == null || oppLnkAdmState == null
+                    ? null
+                    : this.tapiLink.setTapiAdminState(
+                        link.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName(),
+                //operState,
+                link.augmentation(Link1.class).getOperationalState() == null || oppLnkOpState == null
+                    ? null
+                    : this.tapiLink.setTapiOperationalState(
+                        link.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName(),
+                Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()),
+                this.tapiTopoUuid);
+            linksToNotConvert.add(link.augmentation(Link1.class).getOppositeLink().getValue());
+            this.tapiLinks.put(tapLink.key(), tapLink);
         }
     }
 
@@ -1114,7 +553,12 @@ public class ConvertORTopoToTapiFullTopo {
         }
     }
 
-    public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
+    public void setTapiNodes(Map<NodeKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeMap) {
+        this.tapiNodes.putAll(nodeMap);
+    }
+
+    public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
             getTapiNodes() {
         return tapiNodes;
     }
@@ -1123,7 +567,19 @@ public class ConvertORTopoToTapiFullTopo {
         return tapiLinks;
     }
 
+    public void setTapiSips(Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSip) {
+        this.tapiSips.putAll(tapiSip);
+    }
+
     public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getTapiSips() {
         return tapiSips;
     }
+
+    public static void setTopologicalMode(String topoMode) {
+        ConvertORTopoToTapiFullTopo.topologicalMode = topoMode;
+    }
+
+    public String getTopologicalMode() {
+        return topologicalMode;
+    }
 }
index 850c2d67648274b810a3708c3726930f76792b00..e1cffb7982e1d9f8d10c448378562184530f0403 100644 (file)
@@ -9,10 +9,8 @@ package org.opendaylight.transportpce.tapi.topology;
 
 import java.nio.charset.Charset;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -22,66 +20,46 @@ import java.util.UUID;
 import java.util.stream.Collectors;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 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.rev201211.xpdr.odu.switching.pools.OduSwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.Node1;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.TpId;
-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.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.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.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.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.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.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.link.NodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointKey;
-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.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.topology.Link;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.LinkBuilder;
-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.NodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey;
-import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
+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.Direction;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePointKey;
+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.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.RiskParameterPacBuilder;
+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.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.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.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.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -89,18 +67,11 @@ import org.slf4j.LoggerFactory;
 public class ConvertORTopoToTapiTopo {
 
     private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoToTapiTopo.class);
-    private String ietfNodeId;
-    private OpenroadmNodeType ietfNodeType;
-    private AdminStates ietfNodeAdminState;
-    private State ietfNodeOperState;
-    private List<TerminationPoint> oorClientPortList;
-    private List<TerminationPoint> oorNetworkPortList;
-    private OduSwitchingPools oorOduSwitchingPool;
     private Uuid tapiTopoUuid;
-    private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
+    private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
         tapiNodes;
     private Map<LinkKey, Link> tapiLinks;
-    private Map<String, Uuid> uuidMap;
+    private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
     private final TapiLink tapiLink;
 
 
@@ -108,651 +79,253 @@ public class ConvertORTopoToTapiTopo {
         this.tapiTopoUuid = tapiTopoUuid;
         this.tapiNodes = new HashMap<>();
         this.tapiLinks = new HashMap<>();
-        this.uuidMap = new HashMap<>();
+        this.tapiSips = new HashMap<>();
         this.tapiLink = tapiLink;
     }
 
-    public void convertNode(Node ietfNode, List<String> networkPorts) {
-        this.ietfNodeId = ietfNode.getNodeId().getValue();
-        if (ietfNode.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-                == null) {
-            return;
-        }
-        this.ietfNodeType = ietfNode.augmentation(
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class).getNodeType();
-        this.ietfNodeAdminState = ietfNode.augmentation(
-                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-            .getAdministrativeState();
-        this.ietfNodeOperState = ietfNode.augmentation(
-                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-            .getOperationalState();
-        this.oorNetworkPortList = ietfNode.augmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
-            .getTerminationPoint().values().stream()
-            .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                == OpenroadmTpType.XPONDERNETWORK.getIntValue()
-                && networkPorts.contains(tp.getTpId().getValue()))
-            .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
-            .collect(Collectors.toList());
-        if (!OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
-            this.oorOduSwitchingPool = ietfNode.augmentation(Node1.class).getSwitchingPools().getOduSwitchingPools()
-                .values().stream().findFirst().orElseThrow();
-            this.oorClientPortList = ietfNode.augmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
-                .getTerminationPoint().values().stream()
-                .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                    == OpenroadmTpType.XPONDERCLIENT.getIntValue())
-                .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
-                .collect(Collectors.toList());
-        } else {
-            this.oorOduSwitchingPool = createOduSwitchingPoolForTp100G();
-            List<TpId> tpList = this.oorOduSwitchingPool.getNonBlockingList().values().stream()
-                .flatMap(nbl -> nbl.getTpList().stream())
-                .collect(Collectors.toList());
-            this.oorClientPortList = ietfNode.augmentation(
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1.class)
-                .getTerminationPoint().values().stream()
-                .filter(tp -> tp.augmentation(TerminationPoint1.class).getTpType().getIntValue()
-                    == OpenroadmTpType.XPONDERCLIENT.getIntValue() && tpList.contains(tp.getTpId()))
-                .sorted((tp1, tp2) -> tp1.getTpId().getValue().compareTo(tp2.getTpId().getValue()))
-                .collect(Collectors.toList());
-            this.oorClientPortList.forEach(tp -> LOG.info("tp = {}", tp.getTpId()));
-        }
-
-        // node creation [DSR/ODU]
-        LOG.info("creation of a DSR/ODU node for {}", this.ietfNodeId);
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId,
-            TapiStringConstants.DSR)).getBytes(Charset.forName("UTF-8"))).toString());
-        this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR), nodeUuid);
-        Name nameDsr = new NameBuilder().setValueName("dsr/odu node name")
-            .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.DSR)).build();
-        Name nameNodeType = new NameBuilder().setValueName("Node Type")
-            .setValue(this.ietfNodeType.getName()).build();
-        Set<LayerProtocolName> dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU);
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
-            .Node dsrNode = createTapiNode(Map.of(nameDsr.key(), nameDsr, nameNodeType.key(), nameNodeType),
-            dsrLayerProtocols);
-        tapiNodes.put(dsrNode.key(), dsrNode);
-
-        // node creation [otsi]
-        LOG.info("creation of an OTSi node for {}", this.ietfNodeId);
-        nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI), nodeUuid);
-        Name nameOtsi =  new NameBuilder().setValueName("otsi node name")
-            .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)).build();
-        Set<LayerProtocolName> otsiLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology
-            .Node otsiNode = createTapiNode(Map.of(nameOtsi.key(), nameOtsi, nameNodeType.key(), nameNodeType),
-            otsiLayerProtocols);
-        tapiNodes.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");
-        createTapiTransitionalLinks();
-    }
-
     public void convertLinks(Map<
-            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-                .LinkKey,
-            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-                .Link> otnLinkMap) {
-        List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .Link> otnLinkList = new ArrayList<>(otnLinkMap.values());
-        Collections.sort(otnLinkList, (l1, l2) -> l1.getLinkId().getValue()
-            .compareTo(l2.getLinkId().getValue()));
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.LinkKey,
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> otnLinkMap) {
+        List<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> otnLinkList = new ArrayList<>(otnLinkMap.values());
+        Collections.sort(otnLinkList, (l1, l2) -> l1.getLinkId().getValue().compareTo(l2.getLinkId().getValue()));
         List<String> linksToNotConvert = new ArrayList<>();
         LOG.info("creation of {} otn links", otnLinkMap.size() / 2);
-        for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-                .Link otnlink : otnLinkList) {
-            if (!linksToNotConvert.contains(otnlink.getLinkId().getValue())) {
-                org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks
-                    .network.Link oppositeLink = otnLinkMap.get(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns
-                        .yang.ietf.network.topology.rev180226.networks.network.LinkKey(otnlink.augmentation(Link1.class)
-                    .getOppositeLink()));
-
-                AdminStates oppLnkAdmState = null;
-                State oppLnkOpState = null;
-                String oppositeLinkId = null;
-                if (oppositeLink != null) {
-                    oppLnkAdmState = oppositeLink.augmentation(Link1.class).getAdministrativeState();
-                    oppLnkOpState = oppositeLink.augmentation(Link1.class).getOperationalState();
-                    oppositeLinkId = oppositeLink.getLinkId().getValue();
-                }
-                String adminState =
-                    otnlink.augmentation(Link1.class).getAdministrativeState() == null
-                        || oppLnkAdmState == null
-                    ? null
+        for (var otnlink : otnLinkList) {
+            String otnlinkId = otnlink.getLinkId().getValue();
+            if (linksToNotConvert.contains(otnlinkId)) {
+                continue;
+            }
+            var otnlinkAug = otnlink.augmentation(Link1.class);
+            var oppositeLink = otnLinkMap.get(
+                new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                    .networks.network.LinkKey(otnlinkAug.getOppositeLink()));
+            AdminStates oppLnkAdmState = null;
+            State oppLnkOpState = null;
+            String oppositeLinkId = null;
+            if (oppositeLink != null) {
+                var oppositeLinkAug = oppositeLink.augmentation(Link1.class);
+                oppLnkAdmState = oppositeLinkAug.getAdministrativeState();
+                oppLnkOpState = oppositeLinkAug.getOperationalState();
+                oppositeLinkId = oppositeLink.getLinkId().getValue();
+            }
+            // TODO: Handle not only OTU4 but also other cases
+            String prefix = otnlinkId.split("-")[0];
+            String tpsQual = prefix.equals("OTU4") ? TapiStringConstants.I_OTSI : TapiStringConstants.E_ODU;
+            LayerProtocolName layerProtocolName =
+                prefix.equals("OTU4") ? LayerProtocolName.PHOTONICMEDIA : LayerProtocolName.ODU;
+            var otnlinkSrc = otnlink.getSource();
+            var otnlinkDst = otnlink.getDestination();
+            Link tapLink = this.tapiLink.createTapiLink(
+                otnlinkSrc.getSourceNode().getValue(),
+                otnlinkSrc.getSourceTp().getValue(),
+                otnlinkDst.getDestNode().getValue(),
+                otnlinkDst.getDestTp().getValue(),
+                TapiStringConstants.OTN_XPDR_XPDR_LINK,
+                // nodesQual, nodesQual,
+                TapiStringConstants.XPDR, TapiStringConstants.XPDR,
+                tpsQual, tpsQual,
+                otnlinkAug.getAdministrativeState() == null || oppLnkAdmState == null ? null
                     : this.tapiLink.setTapiAdminState(
-                        otnlink.augmentation(Link1.class).getAdministrativeState(), oppLnkAdmState).getName();
-                String operState = otnlink.augmentation(Link1.class).getOperationalState() == null
-                        || oppLnkOpState == null
-                    ? null
+                        otnlinkAug.getAdministrativeState(), oppLnkAdmState).getName(),
+                otnlinkAug.getOperationalState() == null || oppLnkOpState == null ? null
                     : this.tapiLink.setTapiOperationalState(
-                        otnlink.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName();
-
-                String prefix = otnlink.getLinkId().getValue().split("-")[0];
-                String nodesQual = prefix.equals("OTU4") ? TapiStringConstants.OTSI : TapiStringConstants.DSR;
-                String tpsQual = prefix.equals("OTU4") ? TapiStringConstants.I_OTSI : TapiStringConstants.E_ODU;
-                LayerProtocolName layerProtocolName = prefix.equals("OTU4") ? LayerProtocolName.PHOTONICMEDIA
-                    : LayerProtocolName.ODU;
-
-                Link tapLink = this.tapiLink.createTapiLink(otnlink.getSource().getSourceNode().getValue(),
-                    otnlink.getSource().getSourceTp().getValue(), otnlink.getDestination().getDestNode().getValue(),
-                    otnlink.getDestination().getDestTp().getValue(), TapiStringConstants.OTN_XPDR_XPDR_LINK, nodesQual,
-                    nodesQual, tpsQual, tpsQual, adminState, operState, Set.of(layerProtocolName),
-                    Set.of(layerProtocolName.getName()), this.tapiTopoUuid);
-                linksToNotConvert.add(oppositeLinkId);
-                tapiLinks.put(tapLink.key(), tapLink);
-            }
+                        otnlinkAug.getOperationalState(), oppLnkOpState).getName(),
+                Set.of(layerProtocolName),
+                Set.of(layerProtocolName.getName()),
+                this.tapiTopoUuid);
+            linksToNotConvert.add(oppositeLinkId);
+            tapiLinks.put(tapLink.key(), tapLink);
+            LOG.debug("Links converted are as follow  {}", tapiLinks);
         }
     }
 
     public void convertRoadmInfrastructure() {
         LOG.info("abstraction of the ROADM infrastructure towards a photonic node");
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.RDM_INFRA
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Name nodeName =  new NameBuilder().setValueName("otsi node name").setValue(TapiStringConstants.RDM_INFRA)
-            .build();
-        Name nameNodeType = new NameBuilder().setValueName("Node Type")
-            .setValue(OpenroadmNodeType.ROADM.getName()).build();
+        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(
+                    TapiStringConstants.RDM_INFRA.getBytes(Charset.forName("UTF-8")))
+                .toString());
+        Name nodeName =
+            new NameBuilder().setValueName("otsi node name").setValue(TapiStringConstants.RDM_INFRA).build();
+        Name nodeName2 =
+            new NameBuilder().setValueName("roadm node name").setValue(TapiStringConstants.RDM_INFRA).build();
+        Name nameNodeType =
+            new NameBuilder().setValueName("Node Type").setValue(OpenroadmNodeType.ROADM.getName()).build();
         Set<LayerProtocolName> nodeLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
-
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiPhotonicNodes
-            = pruneTapiPhotonicNodes();
-        Map<String, String> photonicNepUuisMap = convertListNodeWithListNepToMapForUuidAndName(tapiPhotonicNodes);
+        //At that stage, there is no Roadm in the tapiPhotonicNodes Map / only the transponders
+        Map<String, String> photonicNepUuisMap =
+            convertListNodeWithListNepToMapForUuidAndName(pruneTapiPhotonicNodes());
         // nep creation for rdm infra abstraction node
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = createNepForRdmNode(photonicNepUuisMap.size());
         // node rule group creation
-        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList
-            = createNodeRuleGroupForRdmNode(nodeUuid, onepMap.values());
+        var tapiFactory = new ConvertORToTapiTopology(this.tapiTopoUuid);
+        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap
+            = tapiFactory.createAllNodeRuleGroupForRdmNode("T0ML", nodeUuid, null, onepMap.values());
+        // Empty random creation of mandatory fields for avoiding errors....
+        CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
+            .setCostAlgorithm("Restricted Shortest Path - RSP")
+            .setCostName("HOP_COUNT")
+            .setCostValue(TapiStringConstants.COST_HOP_VALUE)
+            .build();
+        LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
+            .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(Set.of("risk identifier1", "risk identifier2"))
+            .build();
         // build RDM infra node abstraction
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node rdmNode = new NodeBuilder()
+        var rdmNode = new NodeBuilder()
             .setUuid(nodeUuid)
-            .setName(Map.of(nodeName.key(), nodeName, nameNodeType.key(), nameNodeType))
+            .setName(Map.of(nodeName.key(), nodeName, nodeName2.key(), nodeName2, nameNodeType.key(), nameNodeType))
             .setLayerProtocolName(nodeLayerProtocols)
             .setAdministrativeState(AdministrativeState.UNLOCKED)
             .setOperationalState(OperationalState.ENABLED)
             .setLifecycleState(LifecycleState.INSTALLED)
             .setOwnedNodeEdgePoint(onepMap)
-            .setNodeRuleGroup(nodeRuleGroupList)
+            .setNodeRuleGroup(nodeRuleGroupMap)
+            .setInterRuleGroup(
+                tapiFactory.createInterRuleGroupForRdmNode("T0ML", nodeUuid, null,
+                    nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList())))
+            .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
+            .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
+            .setRiskParameterPac(
+                new RiskParameterPacBuilder()
+                    .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+                    .build())
             .build();
         tapiNodes.put(rdmNode.key(), rdmNode);
-
-        // OMS link creation between photonoci nodes and RDM infra abstraction node
+    // OTS link creation between photonic nodes and RDM infra abstraction node :
+      //onepMap is a list of nep which Uuid is formed from THE ROADM node name, "nep" and an integer (order of the nep)
+      // It has absolutely no relationship with the real ROADM infrastructure (SRG ports)
+      //rdmInfraNepUuisMap is a Map <ROADMnodeUuuid--NepUuid; ROADMnodeName--nepName> built from onepMap
+      //photonicNepUuisMap is a Map <TSPnodeUuuid--eNepUuid; TSPnodeName--nepName> built from TapiPhotonicNode
         Map<String, String> rdmInfraNepUuisMap = convertListNodeWithListNepToMapForUuidAndName(List.of(rdmNode));
-        if (photonicNepUuisMap.size() != rdmInfraNepUuisMap.size()) {
-            LOG.warn("Unable to build OMS links between photonics nodes and RDM infrasctructure abstraction");
+        if (photonicNepUuisMap.size() == rdmInfraNepUuisMap.size()) {
+            //Tapi OtsLinks are created between Neps corresponding to the eNEPs of transponders (existing network ports)
+            //and Generic NEPS with abstracted names created in the ROADM infrastructure corresponding to tps mirroring
+            //transponders NETWORK PORTs. There is a simplification here considering that any network port of
+            //transponders will have a mirroring SRG client port in the ROADM infrastructure.
+            // TODO: Do not understand that we build OTS link without checking that existing transponder ports
+            //are effectively connected. Need some consolidation
+            createTapiOtsLinks(photonicNepUuisMap, rdmInfraNepUuisMap);
         } else {
-            createTapiOmsLinks(photonicNepUuisMap, rdmInfraNepUuisMap);
+            LOG.warn("Unable to build OTS links between photonics nodes and RDM infrasctructure abstraction");
         }
     }
 
-    private OduSwitchingPools createOduSwitchingPoolForTp100G() {
-        Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
-        int count = 1;
-        for (TerminationPoint tp : this.oorNetworkPortList) {
-            TpId tpid1 = tp.getTpId();
-            TpId tpid2 = tp.augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
-                    .getAssociatedConnectionMapTp().iterator().next();
-            Set<TpId> tpList = new HashSet<>();
-            tpList.add(tpid1);
-            tpList.add(tpid2);
-            NonBlockingList nbl = new NonBlockingListBuilder()
-                .setNblNumber(Uint16.valueOf(count))
-                .setTpList(tpList)
-                .build();
-            nblMap.put(nbl.key(), nbl);
-            count++;
-        }
-        return new OduSwitchingPoolsBuilder()
-            .setNonBlockingList(nblMap)
-            .setSwitchingPoolNumber(Uint16.valueOf(1))
-            .build();
-    }
-
-    private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
+    private List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
             pruneTapiPhotonicNodes() {
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
             prunedTapiPhotonicNodes = new ArrayList<>();
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiPhotonicNodes
-            = this.tapiNodes.values().stream()
-            .filter(n -> LayerProtocolName.PHOTONICMEDIA.equals(n.getLayerProtocolName().stream().findFirst()
-                    .orElseThrow()))
-            .collect(Collectors.toList());
-        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node
-            : tapiPhotonicNodes) {
+        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node :
+                this.tapiNodes.values().stream()
+                    .filter(n -> n.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
+                    .collect(Collectors.toList())) {
             Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepM = new HashMap<>();
             for (Map.Entry<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> entry : node.getOwnedNodeEdgePoint().entrySet()) {
                 if (entry.getValue().getName().values().stream()
-                    .filter(name -> name.getValueName().startsWith("eNodeEdgePoint")).count() > 0) {
+                    .filter(name -> name.getValueName().equals("eNodeEdgePoint")).count() > 0) {
                     onepM.put(entry.getKey(), entry.getValue());
                 }
             }
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node prunedNode
-                = new NodeBuilder(node).setOwnedNodeEdgePoint(onepM).build();
-            prunedTapiPhotonicNodes.add(prunedNode);
+            prunedTapiPhotonicNodes.add(new NodeBuilder(node).setOwnedNodeEdgePoint(onepM).build());
         }
         return prunedTapiPhotonicNodes;
     }
 
     private Map<String, String> convertListNodeWithListNepToMapForUuidAndName(
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> nodes) {
+            List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodes) {
         Map<String, String> uuidNameMap = new HashMap<>();
-        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node : nodes) {
+        for (var node : nodes) {
+            String nodeName = node.getName().get(new NameKey("otsi node name")).getValue();
+            String nodeUuid = node.getUuid().getValue();
             for (OwnedNodeEdgePoint nep : node.nonnullOwnedNodeEdgePoint().values()) {
-                String nodeUuid = node.getUuid().getValue();
-                String nepUuid = nep.getUuid().getValue();
-                String nodeName = node.getName().get(new NameKey("otsi node name")).getValue();
-                String nepName = nep.getName().get(new NameKey(nep.getName().keySet().stream().findFirst()
-                        .orElseThrow()))
-                    .getValue();
-                uuidNameMap.put(String.join("--", nodeUuid, nepUuid), String.join("--", nodeName, nepName));
+                uuidNameMap.put(
+                    String.join("--", nodeUuid, nep.getUuid().getValue()),
+                    String.join("--", nodeName,
+                        nep.getName().get(new NameKey(nep.getName().keySet().stream().findFirst().orElseThrow()))
+                            .getValue()));
             }
         }
         return uuidNameMap;
     }
 
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node
-            createTapiNode(Map<NameKey, Name> nodeNames, Set<LayerProtocolName> layerProtocols) {
-        Uuid nodeUuid = null;
-        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl = new HashMap<>();
-        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList = 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);
-        if (layerProtocols.contains(LayerProtocolName.DSR)) {
-            nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList);
-        } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) {
-            nodeUuid = getNodeUuid4Photonic(onepl, nodeRuleGroupList, ruleList);
-        } else {
-            LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next())
-                .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue());
-        }
-        return new NodeBuilder()
-            .setUuid(nodeUuid)
-            .setName(nodeNames)
-            .setLayerProtocolName(layerProtocols)
-            .setAdministrativeState(this.tapiLink.setTapiAdminState(this.ietfNodeAdminState.getName()))
-            .setOperationalState(this.tapiLink.setTapiOperationalState(this.ietfNodeOperState.getName()))
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setOwnedNodeEdgePoint(onepl)
-            .setNodeRuleGroup(nodeRuleGroupList)
-            .build();
-    }
-
-    private Uuid getNodeUuid4Photonic(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
-                                      Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList,
-                                      Map<RuleKey, Rule> ruleList) {
-        Uuid nodeUuid;
-        nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI));
-        // iNep creation on otsi node
-        for (int i = 0; i < oorNetworkPortList.size(); i++) {
-            Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                        oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
-                .toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1);
-            Name onedName = new NameBuilder()
-                .setValueName("iNodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                    oorNetworkPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
-                String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI));
-            onepl.put(onep.key(), onep);
-        }
-        // eNep creation on otsi node
-        for (int i = 0; i < oorNetworkPortList.size(); i++) {
-            Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                        oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8")))
-                .toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2);
-            Name onedName = new NameBuilder()
-                .setValueName("eNodeEdgePoint")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                    oorNetworkPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true,
-                String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI));
-            onepl.put(onep.key(), onep);
-        }
-        // create NodeRuleGroup
-        int count = 1;
-        for (TerminationPoint tp : this.oorNetworkPortList) {
-            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
-                nepList = new HashMap<>();
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                .NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-                .node.rule.group.NodeEdgePointBuilder()
-                .setTopologyUuid(tapiTopoUuid)
-                .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)))
-                .setNodeEdgePointUuid(
-                    this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI,
-                        tp.getTpId().getValue()))).build();
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                .NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-                .node.rule.group.NodeEdgePointBuilder()
-                .setTopologyUuid(tapiTopoUuid)
-                .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)))
-                .setNodeEdgePointUuid(
-                    this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI,
-                        tp.getTpId().getValue())))
-                .build();
-            nepList.put(inep.key(), inep);
-            nepList.put(enep.key(), enep);
-            NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
-                .setUuid(new Uuid(
-                    UUID.nameUUIDFromBytes(("otsi node rule group " + count).getBytes(Charset.forName("UTF-8")))
-                        .toString()))
-                .setRule(ruleList)
-                .setNodeEdgePoint(nepList)
-                .build();
-            nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup);
-            count++;
-        }
-        return nodeUuid;
-    }
-
-    private Uuid getNodeUuid4Dsr(Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepl,
-                                 Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupList, Map<RuleKey, Rule> ruleList) {
-        Uuid nodeUuid;
-        nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.DSR));
-        // client nep creation on DSR/ODU node
-        for (int i = 0; i < oorClientPortList.size(); i++) {
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                    oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                oorClientPortList.get(i).getTpId().getValue()), nepUuid);
-            NameBuilder nameBldr = new NameBuilder().setValue(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                oorClientPortList.get(i).getTpId().getValue()));
-            Name name;
-            if (OpenroadmNodeType.TPDR.equals(this.ietfNodeType)) {
-                name = nameBldr.setValueName("100G-tpdr").build();
-            } else {
-                name = nameBldr.setValueName("NodeEdgePoint_C").build();
-            }
-
-            OwnedNodeEdgePoint onep = createNep(oorClientPortList.get(i), Map.of(name.key(), name),
-                LayerProtocolName.ETH, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
-                    TapiStringConstants.DSR));
-            onepl.put(onep.key(), onep);
-        }
-        // network nep creation on DSR/ODU node
-        for (int i = 0; i < oorNetworkPortList.size(); i++) {
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(
-                (String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
-                    oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString());
-            this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
-                oorNetworkPortList.get(i).getTpId().getValue()), nepUuid);
-            Name onedName = new NameBuilder()
-                .setValueName("iNodeEdgePoint_N")
-                .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU,
-                    oorNetworkPortList.get(i).getTpId().getValue()))
-                .build();
-
-            OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName),
-                LayerProtocolName.ODU, LayerProtocolName.DSR, true, String.join("+", this.ietfNodeId,
-                    TapiStringConstants.I_ODU));
-            onepl.put(onep.key(), onep);
-        }
-        // create NodeRuleGroup
-        int count = 1;
-        for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) {
-            Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
-                nepList = new HashMap<>();
-            for (TpId tp : nbl.getTpList()) {
-                if (this.uuidMap.containsKey(String.join("+", this.ietfNodeId, TapiStringConstants.DSR,
-                        tp.getValue())) || this.uuidMap.containsKey(String.join(
-                    "+", this.ietfNodeId, TapiStringConstants.I_ODU, tp.getValue()))) {
-                    String qual = tp.getValue().contains("CLIENT") ? TapiStringConstants.DSR
-                        : TapiStringConstants.I_ODU;
-                    org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint
-                        nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                        .NodeEdgePointBuilder()
-                        .setTopologyUuid(tapiTopoUuid)
-                        .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
-                            TapiStringConstants.DSR)))
-                        .setNodeEdgePointUuid(this.uuidMap.get(String.join("+", this.ietfNodeId,
-                            qual, tp.getValue())))
-                        .build();
-                    nepList.put(nep.key(), nep);
-                }
-            }
-            NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
-                .setUuid(new Uuid(
-                    UUID.nameUUIDFromBytes(("dsr node rule group " + count).getBytes(Charset.forName("UTF-8")))
-                        .toString()))
-                .setRule(ruleList)
-                .setNodeEdgePoint(nepList)
-                .build();
-            nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup);
-            count++;
-        }
-        return nodeUuid;
-    }
-
-    private OwnedNodeEdgePoint createNep(TerminationPoint oorTp, Map<NameKey, Name> nepNames,
-                                         LayerProtocolName nepProtocol, LayerProtocolName nodeProtocol,
-                                         boolean withSip, String keyword) {
-        String key = String.join("+", keyword, oorTp.getTpId().getValue());
-        AdministrativeState adminState = (oorTp.augmentation(TerminationPoint1.class).getAdministrativeState() != null)
-            ? this.tapiLink.setTapiAdminState(oorTp.augmentation(TerminationPoint1.class).getAdministrativeState()
-                .getName())
-            : null;
-        OperationalState operState = (oorTp.augmentation(TerminationPoint1.class).getOperationalState() != null)
-            ? this.tapiLink.setTapiOperationalState(oorTp.augmentation(TerminationPoint1.class).getOperationalState()
-                .getName())
-            : null;
-        OwnedNodeEdgePointBuilder onepBldr = new OwnedNodeEdgePointBuilder()
-            .setUuid(this.uuidMap.get(key))
-            .setLayerProtocolName(nepProtocol)
-            .setName(nepNames)
-            .setSupportedCepLayerProtocolQualifier(createSupportedCepLayerProtocolQualifier(oorTp, nodeProtocol))
-            .setLinkPortDirection(PortDirection.BIDIRECTIONAL)
-            .setLinkPortRole(PortRole.SYMMETRIC)
-            .setAdministrativeState(adminState)
-            .setOperationalState(operState)
-            .setLifecycleState(LifecycleState.INSTALLED)
-            .setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-            .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL);
-        if (withSip) {
-            onepBldr.setMappedServiceInterfacePoint(createSIP(1, oorTp, keyword));
-        }
-        return onepBldr.build();
-    }
-
     private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> createNepForRdmNode(int nbNep) {
         Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
         for (int i = 1; i <= nbNep; i++) {
-            Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "roadm node", "nep", String.valueOf(i)))
-                .getBytes(Charset.forName("UTF-8"))).toString());
             Name nepName = new NameBuilder()
                 .setValueName("NodeEdgePoint name")
                 .setValue(new StringBuilder("NodeEdgePoint_").append(i).toString())
                 .build();
             OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder()
-                .setUuid(nepUuid)
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes(
+                        (String.join("+", "roadm node", "nep", String.valueOf(i))).getBytes(Charset.forName("UTF-8")))
+                    .toString()))
                 .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
                 .setName(Map.of(nepName.key(), nepName))
-                .setSupportedCepLayerProtocolQualifier(Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE))
-                .setLinkPortDirection(PortDirection.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
+                .setSupportedCepLayerProtocolQualifierInstances(
+                    new ArrayList<>(List.of(
+                        new SupportedCepLayerProtocolQualifierInstancesBuilder()
+                            .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE)
+                            .setNumberOfCepInstances(Uint64.valueOf(1))
+                            .build())))
+                .setDirection(Direction.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC)
                 .setAdministrativeState(AdministrativeState.UNLOCKED).setOperationalState(OperationalState.ENABLED)
-                .setLifecycleState(LifecycleState.INSTALLED).setTerminationDirection(TerminationDirection.BIDIRECTIONAL)
-                .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL)
+                .setLifecycleState(LifecycleState.INSTALLED)
                 .build();
             onepMap.put(onep.key(), onep);
         }
         return onepMap;
     }
 
-    private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupForRdmNode(Uuid nodeUuid,
-                                                                               Collection<OwnedNodeEdgePoint> onepl) {
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
-            nepMap = new HashMap<>();
-        for (OwnedNodeEdgePoint onep : onepl) {
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint
-                nep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                    .NodeEdgePointBuilder()
-                .setTopologyUuid(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(("rdm infra node rule group").getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setRule(ruleList)
-            .setNodeEdgePoint(nepMap)
-            .build();
-        nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
-        return nodeRuleGroupMap;
-    }
-
-    private Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> createSIP(int nb, TerminationPoint tp,
-                                                                                       String nodeId) {
-        Map<MappedServiceInterfacePointKey, MappedServiceInterfacePoint> msipl = new HashMap<>();
-        for (int i = 0; i < nb; i++) {
-            MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder()
-                .setServiceInterfacePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeId,
-                    tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()))
-                .build();
-            msipl.put(msip.key(), msip);
-        }
-        return msipl;
-    }
-
-    private Set<LAYERPROTOCOLQUALIFIER>
-            createSupportedCepLayerProtocolQualifier(TerminationPoint tp, LayerProtocolName lpn) {
-        Set<LAYERPROTOCOLQUALIFIER> sclpqSet = new HashSet<>();
-        Collection<SupportedInterfaceCapability> sicList = tp.augmentation(
-                org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.TerminationPoint1.class)
-            .getTpSupportedInterfaces()
-            .getSupportedInterfaceCapability().values();
-        for (SupportedInterfaceCapability sic : sicList) {
-            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
-            switch (lpn.getName()) {
-                case "DSR":
-                    switch (ifCapType) {
-                        case "If10GEODU2e":
-                            sclpqSet.add(ODUTYPEODU2E.VALUE);
-                            sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If10GEODU2":
-                            sclpqSet.add(ODUTYPEODU2.VALUE);
-                            sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If10GE":
-                            sclpqSet.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If100GEODU4":
-                            sclpqSet.add(DIGITALSIGNALTYPE100GigE.VALUE);
-                            sclpqSet.add(ODUTYPEODU4.VALUE);
-                            break;
-                        case "If100GE":
-                            sclpqSet.add(DIGITALSIGNALTYPE100GigE.VALUE);
-                            break;
-                        case "IfOCHOTU4ODU4":
-                        case "IfOCH":
-                            sclpqSet.add(ODUTYPEODU4.VALUE);
-                            break;
-                        default:
-                            LOG.error("IfCapability type not managed");
-                            break;
-                    }
-                    break;
-                case "PHOTONIC_MEDIA":
-                    if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
-                        sclpqSet.add(PHOTONICLAYERQUALIFIEROTSi.VALUE);
-                        sclpqSet.add(PHOTONICLAYERQUALIFIEROMS.VALUE);
-                    }
-                    break;
-                default:
-                    LOG.error("Layer Protocol Name is unknown");
-                    break;
-            }
-        }
-        return sclpqSet;
-    }
-
-    private void createTapiTransitionalLinks() {
-        for (TerminationPoint tp : this.oorNetworkPortList) {
-            Link transiLink = tapiLink.createTapiLink(this.ietfNodeId, tp.getTpId().getValue(), this.ietfNodeId,
-                tp.getTpId().getValue(), TapiStringConstants.TRANSITIONAL_LINK, TapiStringConstants.DSR,
-                TapiStringConstants.OTSI, TapiStringConstants.I_ODU, TapiStringConstants.I_OTSI,
-                "inService", "inService", Set.of(LayerProtocolName.ODU, LayerProtocolName.PHOTONICMEDIA),
-                Set.of(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()),
-                this.tapiTopoUuid);
-            this.tapiLinks.put(transiLink.key(), transiLink);
-        }
-    }
-
-    private void createTapiOmsLinks(Map<String, String> photonicNepUuisMap, Map<String, String> rdmInfraNepUuisMap) {
-        Iterator<Entry<String, String>> it1 = photonicNepUuisMap.entrySet().iterator();
+    private void createTapiOtsLinks(Map<String, String> photonicNepUuisMap, Map<String, String> rdmInfraNepUuisMap) {
         Iterator<Entry<String, String>> it2 = rdmInfraNepUuisMap.entrySet().iterator();
-        while (it1.hasNext()) {
-            Map<NodeEdgePointKey, NodeEdgePoint> nepMap = new HashMap<>();
-            Map.Entry<String, String> photonicEntry = it1.next();
+        for (Map.Entry<String, String> photonicEntry : photonicNepUuisMap.entrySet()) {
             Map.Entry<String, String> rdmEntry = it2.next();
-            Uuid sourceUuidTp = new Uuid(photonicEntry.getKey().split("--")[1]);
-            Uuid sourceUuidNode = new Uuid(photonicEntry.getKey().split("--")[0]);
-            Uuid destUuidTp = new Uuid(rdmEntry.getKey().split("--")[1]);
-            Uuid destUuidNode = new Uuid(rdmEntry.getKey().split("--")[0]);
+            String photonicEntryKey = photonicEntry.getKey();
             NodeEdgePoint sourceNep = new NodeEdgePointBuilder()
                 .setTopologyUuid(this.tapiTopoUuid)
-                .setNodeUuid(sourceUuidNode)
-                .setNodeEdgePointUuid(sourceUuidTp)
+                .setNodeUuid(new Uuid(photonicEntryKey.split("--")[0]))
+                .setNodeEdgePointUuid(new Uuid(photonicEntryKey.split("--")[1]))
                 .build();
-            nepMap.put(sourceNep.key(), sourceNep);
+            String rdmEntryKey = rdmEntry.getKey();
             NodeEdgePoint destNep = new NodeEdgePointBuilder()
                 .setTopologyUuid(this.tapiTopoUuid)
-                .setNodeUuid(destUuidNode)
-                .setNodeEdgePointUuid(destUuidTp)
+                .setNodeUuid(new Uuid(rdmEntryKey.split("--")[0]))
+                .setNodeEdgePointUuid(new Uuid(rdmEntryKey.split("--")[1]))
                 .build();
-            nepMap.put(destNep.key(), destNep);
-            Name linkName = new NameBuilder().setValueName("OMS link name")
-                .setValue(String.join(" and ", photonicEntry.getValue(), rdmEntry.getValue()))
+            String linkNameValue = String.join(" and ", photonicEntry.getValue(), rdmEntry.getValue());
+            Name linkName = new NameBuilder()
+                .setValueName("OTS link name")
+                .setValue(linkNameValue)
                 .build();
-            Link omsLink = new LinkBuilder()
-                .setUuid(new Uuid(
-                    UUID.nameUUIDFromBytes((String.join(" and ", photonicEntry.getValue(), rdmEntry.getValue()))
-                            .getBytes(Charset.forName("UTF-8")))
-                        .toString()))
+            Link otsLink = new LinkBuilder()
+                .setUuid(new Uuid(UUID.nameUUIDFromBytes(linkNameValue.getBytes(Charset.forName("UTF-8")))
+                    .toString()))
                 .setName(Map.of(linkName.key(), linkName))
                 .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA))
-                .setNodeEdgePoint(nepMap)
+                .setNodeEdgePoint(
+                    new HashMap<NodeEdgePointKey, NodeEdgePoint>(Map.of(
+                        sourceNep.key(), sourceNep, destNep.key(), destNep)))
                 .setDirection(ForwardingDirection.BIDIRECTIONAL)
                 .build();
-            this.tapiLinks.put(omsLink.key(), omsLink);
+            this.tapiLinks.put(otsLink.key(), otsLink);
         }
     }
 
-    public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
+    public void setTapiNodes(Map<NodeKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeMap) {
+        this.tapiNodes.putAll(nodeMap);
+    }
+
+    public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
             getTapiNodes() {
         return tapiNodes;
     }
@@ -760,4 +333,12 @@ public class ConvertORTopoToTapiTopo {
     public Map<LinkKey, Link> getTapiLinks() {
         return tapiLinks;
     }
-}
\ No newline at end of file
+
+    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getTapiSips() {
+        return tapiSips;
+    }
+
+    public void setTapiSips(Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSip) {
+        this.tapiSips.putAll(tapiSip);
+    }
+}
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertTapiTopoToAbstracted.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertTapiTopoToAbstracted.java
new file mode 100644 (file)
index 0000000..e9bc55a
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+ * Copyright © 2024 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.transportpce.tapi.topology;
+
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmNodeType;
+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.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.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.ServiceInterfacePointKey;
+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.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.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.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.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.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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class ConvertTapiTopoToAbstracted {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ConvertTapiTopoToAbstracted.class);
+    private Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
+        tapiNodes;
+    private Map<LinkKey, Link> tapiLinks;
+    private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
+    private Uuid refTopoUuid;
+
+    public ConvertTapiTopoToAbstracted(Uuid reftopoUuid) {
+        this.tapiNodes = new HashMap<>();
+        this.tapiLinks = new HashMap<>();
+        this.tapiSips = new HashMap<>();
+        this.refTopoUuid = reftopoUuid;
+    }
+
+    public void convertRoadmInfrastructure() {
+        LOG.info("abstraction of the ROADM infrastructure towards a photonic node");
+        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.RDM_INFRA
+            .getBytes(Charset.forName("UTF-8"))).toString());
+        Name nodeName =  new NameBuilder().setValueName("otsi node name").setValue(TapiStringConstants.RDM_INFRA)
+            .build();
+        Name nameNodeType = new NameBuilder().setValueName("Node Type")
+            .setValue(OpenroadmNodeType.ROADM.getName()).build();
+        Set<LayerProtocolName> nodeLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
+        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = pruneTapiRoadmNeps();
+        var tapiFactory = new ConvertORToTapiTopology(this.refTopoUuid);
+        Map<NodeRuleGroupKey, NodeRuleGroup> nodeRuleGroupMap
+            = tapiFactory.createAllNodeRuleGroupForRdmNode("Abstracted", nodeUuid, null, onepMap.values());
+        Map<InterRuleGroupKey, InterRuleGroup> interRuleGroupMap
+            = tapiFactory.createInterRuleGroupForRdmNode("Abstracted", nodeUuid, null,
+                nodeRuleGroupMap.entrySet().stream().map(e -> e.getKey()).collect(Collectors.toList()));
+        // Empty random creation of mandatory fields for avoiding errors....
+        CostCharacteristic costCharacteristic = new CostCharacteristicBuilder()
+            .setCostAlgorithm("Restricted Shortest Path - RSP")
+            .setCostName("HOP_COUNT")
+            .setCostValue(TapiStringConstants.COST_HOP_VALUE)
+            .build();
+        LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
+            .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(Set.of("risk identifier1", "risk identifier2"))
+            .build();
+        RiskParameterPac riskParamPac = new RiskParameterPacBuilder()
+            .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic))
+            .build();
+        // build RDM infra node abstraction
+        Node rdmNode = new NodeBuilder()
+            .setUuid(nodeUuid)
+            .setName(Map.of(nodeName.key(), nodeName, nameNodeType.key(), nameNodeType))
+            .setLayerProtocolName(nodeLayerProtocols)
+            .setAdministrativeState(AdministrativeState.UNLOCKED)
+            .setOperationalState(OperationalState.ENABLED)
+            .setLifecycleState(LifecycleState.INSTALLED)
+            .setOwnedNodeEdgePoint(onepMap)
+            .setNodeRuleGroup(nodeRuleGroupMap)
+            .setInterRuleGroup(interRuleGroupMap)
+            .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
+            .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
+            .setRiskParameterPac(riskParamPac)
+            .build();
+        purgeTapiNodes();
+        tapiNodes.put(rdmNode.key(), rdmNode);
+        purgeTapiLinks();
+    }
+
+    private Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> pruneTapiRoadmNeps() {
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiPhotonicNodes
+            = this.tapiNodes.values().stream()
+                .filter(n -> n.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
+                    && !n.getLayerProtocolName().contains(LayerProtocolName.DIGITALOTN)
+                    && !n.getLayerProtocolName().contains(LayerProtocolName.DSR)
+                    && !n.getLayerProtocolName().contains(LayerProtocolName.ODU))
+                .collect(Collectors.toList());
+        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
+        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node
+            : tapiPhotonicNodes) {
+            for (Map.Entry<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> entry : node.getOwnedNodeEdgePoint().entrySet()) {
+                if (entry.getValue().getName().values().stream()
+                            .filter(name -> name.getValueName().equals("PHOTONIC_MEDIA_OTSNodeEdgePoint")).count() > 0
+                        && !(entry.getValue().getName().values().stream()
+                            .filter(name -> name.getValue().contains("DEG")).count() > 0)) {
+                    onepMap.put(entry.getKey(), entry.getValue());
+                }
+                if (entry.getValue().getName().values().stream()
+                        .filter(name -> name.getValueName().equals("OTSI_MCNodeEdgePoint")).count() > 0
+                    && !(entry.getValue().getName().values().stream()
+                        .filter(name -> name.getValue().contains("DEG")).count() > 0)) {
+                    onepMap.put(entry.getKey(), entry.getValue());
+                }
+            }
+        }
+        return onepMap;
+    }
+
+    private void purgeTapiLinks() {
+        this.tapiLinks = this.tapiLinks.values().stream()
+            .filter(l -> l.getName().containsKey(new NameKey(TapiStringConstants.VALUE_NAME_OTS_XPDR_RDM_LINK))
+                || l.getName().containsKey(new NameKey(TapiStringConstants.VALUE_NAME_OTN_XPDR_XPDR_LINK)))
+            .collect(Collectors.toMap(Link::key, link -> link));
+    }
+
+    private void purgeTapiNodes() {
+        this.tapiNodes = this.tapiNodes.values().stream()
+            .filter(n -> !n.getName().containsKey(new NameKey(TapiStringConstants.VALUE_NAME_ROADM_NODE)))
+            .collect(Collectors.toMap(Node::key, node -> node));
+    }
+
+
+    public void setTapiNodes(Map<NodeKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeMap) {
+        this.tapiNodes.putAll(nodeMap);
+    }
+
+    public Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
+            getTapiNodes() {
+        return tapiNodes;
+    }
+
+    public void setTapiLinks(Map<LinkKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link> linkMap) {
+        this.tapiLinks.putAll(linkMap);
+    }
+
+    public Map<LinkKey, Link> getTapiLinks() {
+        return tapiLinks;
+    }
+
+    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getTapiSips() {
+        return tapiSips;
+    }
+
+    public void setTapiSips(Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSip) {
+        this.tapiSips.putAll(tapiSip);
+    }
+}
+
index a7f1e29f14108f582b84890091abab99049ed35a..8a44695f6261c25d7d3621f28e96d096015d1876 100644 (file)
@@ -7,16 +7,15 @@
  */
 package org.opendaylight.transportpce.tapi.topology;
 
-import java.util.Collection;
+import java.util.List;
 import java.util.Optional;
-import javax.annotation.Nonnull;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
 import org.opendaylight.transportpce.common.StringConstants;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.ConnectionOper.ConnectionStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.oper.available.capabilities.AvailableCapability;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.ConnectionOper.ConnectionStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev240120.connection.oper.available.capabilities.AvailableCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev231121.NetconfNode;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,16 +29,17 @@ public class TapiNetconfTopologyListener implements DataTreeChangeListener<Node>
         this.tapiNetworkModelService = tapiNetworkModelService;
     }
 
-    public void onDataTreeChanged(@Nonnull Collection<DataTreeModification<Node>> changes) {
+    @Override
+    public void onDataTreeChanged(List<DataTreeModification<Node>> changes) {
         LOG.info("onDataTreeChanged - {}", this.getClass().getSimpleName());
         for (DataTreeModification<Node> change : changes) {
             DataObjectModification<Node> rootNode = change.getRootNode();
-            if (rootNode.getDataBefore() == null) {
+            if (rootNode.dataBefore() == null) {
                 continue;
             }
-            String nodeId = rootNode.getDataBefore().key().getNodeId().getValue();
-            NetconfNode netconfNodeBefore = rootNode.getDataBefore().augmentation(NetconfNode.class);
-            switch (rootNode.getModificationType()) {
+            String nodeId = rootNode.dataBefore().key().getNodeId().getValue();
+            NetconfNode netconfNodeBefore = rootNode.dataBefore().augmentation(NetconfNode.class);
+            switch (rootNode.modificationType()) {
                 case DELETE:
                     this.tapiNetworkModelService.deleteTapinode(nodeId);
                     // TODO -> unregistration to NETCONF stream not yet supported
@@ -47,7 +47,7 @@ public class TapiNetconfTopologyListener implements DataTreeChangeListener<Node>
                     LOG.info("Device {} correctly disconnected from controller", nodeId);
                     break;
                 case WRITE:
-                    NetconfNode netconfNodeAfter = rootNode.getDataAfter().augmentation(NetconfNode.class);
+                    NetconfNode netconfNodeAfter = rootNode.dataAfter().augmentation(NetconfNode.class);
                     if (ConnectionStatus.Connecting.equals(netconfNodeBefore.getConnectionStatus())
                             && ConnectionStatus.Connected.equals(netconfNodeAfter.getConnectionStatus())) {
                         LOG.info("Connecting Node: {}", nodeId);
@@ -70,7 +70,7 @@ public class TapiNetconfTopologyListener implements DataTreeChangeListener<Node>
                     }
                     break;
                 default:
-                    LOG.debug("Unknown modification type {}", rootNode.getModificationType().name());
+                    LOG.debug("Unknown modification type {}", rootNode.modificationType().name());
                     break;
             }
         }
index d402692d6bb82406f295c9127d6999154dc8dfc2..0019f72f5d30aea73291493099f9d6a879e35cb7 100644 (file)
@@ -7,8 +7,8 @@
  */
 package org.opendaylight.transportpce.tapi.topology;
 
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.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;
 
 public interface TapiNetworkModelService {
 
index 9b6b89f3daabca1e024d722f71bcb164ee7da7ee..8706dc301dc4fea8194387c18ee171fce8a4a2d0 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.transportpce.tapi.topology;
 
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -24,126 +25,134 @@ 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.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.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.rev201211.xpdr.odu.switching.pools.OduSwitchingPools;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.OduSwitchingPoolsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.types.rev201211.xpdr.odu.switching.pools.odu.switching.pools.NonBlockingListKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapability;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.xpdr.tp.supported.interfaces.SupportedInterfaceCapabilityKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev201211.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.OwnedNodeEdgePoint1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1Builder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey;
-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.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepList;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepListBuilder;
-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.notification.rev181210.NotificationBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesKey;
-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.NodeEdgePointRef;
-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.LinkBuilder;
-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 {
 
@@ -154,6 +163,9 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     private final NetworkTransactionService networkTransactionService;
     private final R2RTapiLinkDiscovery linkDiscovery;
     private final TapiLink tapiLink;
+    private final ConvertORToTapiTopology tapiFactory;
+    private String topologicalMode;
+    private final ConvertORTopoToTapiFullTopo tapiFullFactory;
     private final NotificationPublishService notificationPublishService;
     private Map<ServiceInterfacePointKey, ServiceInterfacePoint> sipMap = new HashMap<>();
 
@@ -164,8 +176,11 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             @Reference final NotificationPublishService notificationPublishService) {
         this.networkTransactionService = networkTransactionService;
         this.linkDiscovery = new R2RTapiLinkDiscovery(networkTransactionService, deviceTransactionManager, tapiLink);
-        this.tapiLink = tapiLink;
         this.notificationPublishService = notificationPublishService;
+        this.tapiFactory = new ConvertORToTapiTopology(tapiTopoUuid);
+        this.tapiLink = tapiLink;
+        this.tapiFullFactory = new ConvertORTopoToTapiFullTopo(tapiTopoUuid, tapiLink);
+        this.topologicalMode = tapiFullFactory.getTopologicalMode();
     }
 
     @Override
@@ -204,23 +219,51 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             }
             // 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()
@@ -229,7 +272,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             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()
@@ -270,8 +313,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     @SuppressWarnings("rawtypes")
     private void sendNotification(List<Uuid> changedOneps, Mapping mapping) {
         Notification notification = new NotificationBuilder()
-            .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE)
-            .setTargetObjectType(ObjectType.NODEEDGEPOINT)
+            .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();
@@ -307,9 +352,12 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 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)
@@ -319,8 +367,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                             .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");
@@ -357,6 +407,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                                 .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();
                 }
@@ -386,17 +440,11 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         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") && mapping.getLogicalConnectionPoint().contains("CLIENT")) {
+        } 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.XPDR + xpdrNb;
-            uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.DSR))
-                    .getBytes(StandardCharsets.UTF_8)).toString()));
-        } else if (nodeId.contains("PDR") && mapping.getLogicalConnectionPoint().contains("NETWORK")) {
-            int xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]);
-            String xpdrNodeId = nodeId + TapiStringConstants.XPDR + xpdrNb;
-            uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.DSR))
-                    .getBytes(StandardCharsets.UTF_8)).toString()));
-            uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.OTSI))
+            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");
@@ -430,35 +478,21 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                                                        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))
+        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();
+            String.join("+", nodeId, TapiStringConstants.XPDR)).build();
+        Name nameOtsi =  new NameBuilder().setValueName("otsi node name").setValue(
+            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);
-        Node dsrNode = createTapiXpdrNode(Map.of(nameDsr.key(), nameDsr, nameNodeType.key(), nameNodeType),
-            dsrLayerProtocols, nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType, oorOduSwitchingPool);
+        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);
-
-        // node creation [otsi]
-        LOG.info("creation of an OTSi node for {}", nodeId);
-        Uuid nodeUuidOtsi = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.OTSI))
-            .getBytes(StandardCharsets.UTF_8)).toString());
-        Name nameOtsi =  new NameBuilder().setValueName("otsi node name").setValue(
-            String.join("+", nodeId, TapiStringConstants.OTSI)).build();
-        Set<LayerProtocolName> otsiLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA);
-        Node otsiNode = createTapiXpdrNode(Map.of(nameOtsi.key(), nameOtsi, nameNodeType.key(), nameNodeType),
-            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);
-        mergeLinkinTopology(linkMap);
-
         return nodeMap;
     }
 
@@ -482,41 +516,79 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     }
 
     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) {
@@ -563,10 +635,15 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             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(StandardCharsets.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
@@ -619,31 +696,28 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     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")
@@ -652,12 +726,19 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .build();
         LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
             .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-            .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_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)
@@ -674,72 +755,77 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .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(StandardCharsets.UTF_8)).toString());
-            Name onedName = new NameBuilder()
-                .setValueName("iNodeEdgePoint")
-                .setValue(String.join("+", nodeId, TapiStringConstants.I_OTSI,
-                    xpdrNetMaps.get(i).getLogicalConnectionPoint()))
-                .build();
-
-            List<SupportedIfCapability> newSupIfCapList =
-                    new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
-
-            OwnedNodeEdgePoint onep = createNep(nepUuid1, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
-                Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA,
-                true, String.join("+", nodeId, TapiStringConstants.I_OTSI), newSupIfCapList,
-                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,
+                (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();
 
             List<SupportedIfCapability> newSupIfCapList =
-                    new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
+                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(nepUuid2, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
+            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), newSupIfCapList,
+                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,
+                (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();
 
             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(nepUuid3, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
+            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), newSupIfCapList,
+                false, String.join("+", nodeId, TapiStringConstants.OTSI_MC), newSupIfCapList, opModeList,
                 transformOperState(xpdrNetMaps.get(i).getPortOperState()),
                 transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
             onepl.put(onep.key(), onep);
@@ -770,9 +856,9 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             List<SupportedIfCapability> newSupIfCapList =
                     new ArrayList<>(xpdrClMaps.get(i).getSupportedInterfaceCapability());
 
-            OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
+            OwnedNodeEdgePoint onep = createNep(nodeId, nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
                 Map.of(name.key(), name), LayerProtocolName.DSR, LayerProtocolName.DSR, true,
-                String.join("+", nodeId, TapiStringConstants.DSR), newSupIfCapList,
+                String.join("+", nodeId, TapiStringConstants.DSR), newSupIfCapList, null,
                 transformOperState(xpdrClMaps.get(i).getPortOperState()),
                 transformAdminState(xpdrClMaps.get(i).getPortAdminState()));
             onepl.put(onep.key(), onep);
@@ -792,11 +878,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
 
             List<SupportedIfCapability> newSupIfCapList =
                     new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability());
-
-            OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrNetMaps.get(i).getLogicalConnectionPoint(),
+            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), newSupIfCapList,
+                String.join("+", nodeId, TapiStringConstants.I_ODU), newSupIfCapList, null,
                 transformOperState(xpdrNetMaps.get(i).getPortOperState()),
                 transformAdminState(xpdrNetMaps.get(i).getPortAdminState()));
             onepl.put(onep.key(), onep);
@@ -817,10 +902,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             List<SupportedIfCapability> newSupIfCapList =
                     new ArrayList<>(xpdrClMaps.get(i).getSupportedInterfaceCapability());
 
-            OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(),
+            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), newSupIfCapList,
+                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);
@@ -839,148 +924,81 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         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<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(StandardCharsets.UTF_8)).toString());
-        Name nepName = new NameBuilder()
-                .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint")
-                .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA, tpId))
-                .build();
-        OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder()
-            .setUuid(nepUuid)
-            .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
-            .setName(Map.of(nepName.key(), nepName))
-            .setSupportedCepLayerProtocolQualifier(Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE))
-            .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(StandardCharsets.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(Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE))
-                .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(StandardCharsets.UTF_8)).toString());
-        Name nepName2 = new NameBuilder()
-                .setValueName(TapiStringConstants.OTSI_MC + "NodeEdgePoint")
-                .setValue(String.join("+", orNodeId, TapiStringConstants.OTSI_MC, 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 onep2 = new OwnedNodeEdgePointBuilder()
-            .setUuid(nepUuid2)
-            .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA)
-            .setName(Map.of(nepName2.key(), nepName2))
-            .setSupportedCepLayerProtocolQualifier(Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE))
-            .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<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(StandardCharsets.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<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(StandardCharsets.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
@@ -993,11 +1011,23 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .build();
         LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
             .setFixedLatencyCharacteristic(TapiStringConstants.COST_HOP_VALUE)
-            .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_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(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, nameNodeType.key(), nameNodeType))
@@ -1005,8 +1035,9 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .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")
@@ -1015,54 +1046,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             .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(StandardCharsets.UTF_8)).toString()))
-                .setRule(ruleList)
-                .setNodeEdgePoint(nepMap)
-                .build();
-        nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
-        return nodeRuleGroupMap;
-    }
-
-    private Map<LinkKey, Link> createTapiTransitionalLinks(String nodeId, List<Mapping> xpdrNetMaps) {
-        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", Set.of(LayerProtocolName.ODU, LayerProtocolName.PHOTONICMEDIA),
-                Set.of(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()),
-                this.tapiTopoUuid);
-            linkMap.put(transiLink.key(), transiLink);
-        }
-        // return a map of links and then we can do merge the corresponding link map into the topology context
-        return linkMap;
-    }
-
     private OduSwitchingPools createTpdrSwitchPool(List<Mapping> xpdrNetMaps) {
         Map<NonBlockingListKey, NonBlockingList> nblMap = new HashMap<>();
         int count = 1;
@@ -1136,76 +1123,15 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 .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(StandardCharsets.UTF_8)).toString()))
-                .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
-                    TapiStringConstants.I_OTSI, tpMapping.getLogicalConnectionPoint()))
-                    .getBytes(StandardCharsets.UTF_8)).toString()))
-                .build();
-            NodeEdgePoint enep = new NodeEdgePointBuilder()
-                .setTopologyUuid(this.tapiTopoUuid)
-                .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId,
-                    TapiStringConstants.OTSI)).getBytes(StandardCharsets.UTF_8)).toString()))
-                .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes(
-                    (String.join("+", nodeId, TapiStringConstants.E_OTSI,
-                        tpMapping.getLogicalConnectionPoint())).getBytes(StandardCharsets.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(TapiStringConstants.COST_HOP_VALUE)
-                .build();
-            LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
-                .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-                .setQueingLatencyCharacteristic(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();
-            NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder()
-                .setUuid(new Uuid(
-                    UUID.nameUUIDFromBytes(("otsi node rule group " + count).getBytes(StandardCharsets.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("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()) {
@@ -1246,7 +1172,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
                 .build();
             LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
                 .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-                .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
+                .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
                 .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
                 .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
                 .setTrafficPropertyName("FIXED_LATENCY")
@@ -1271,98 +1197,6 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
         return nodeRuleGroupMap;
     }
 
-    private Set<LAYERPROTOCOLQUALIFIER> createSupportedLayerProtocolQualifier(
-            List<SupportedIfCapability> sicList, LayerProtocolName lpn) {
-        if (sicList == null) {
-            return Set.of(PHOTONICLAYERQUALIFIEROMS.VALUE);
-        }
-        Map<SupportedInterfaceCapabilityKey, SupportedInterfaceCapability> supIfMap = new HashMap<>();
-        LOG.info("SIC list = {}", sicList);
-        for (SupportedIfCapability supInterCapa : sicList) {
-            SupportedInterfaceCapability supIfCapa = new SupportedInterfaceCapabilityBuilder()
-                    .withKey(new SupportedInterfaceCapabilityKey(supInterCapa))
-                    .setIfCapType(supInterCapa)
-                    .build();
-            supIfMap.put(supIfCapa.key(), supIfCapa);
-        }
-        Set<LAYERPROTOCOLQUALIFIER> sclpqList = new HashSet<>();
-        for (SupportedInterfaceCapability sic : supIfMap.values()) {
-            String ifCapType = sic.getIfCapType().toString().split("\\{")[0];
-            switch (lpn.getName()) {
-                case "DSR":
-                    switch (ifCapType) {
-                        // 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.VALUE);
-                            sclpqList.add(DIGITALSIGNALTYPEGigE.VALUE);
-                            break;
-                        case "If10GEODU2e":
-                            sclpqList.add(ODUTYPEODU2E.VALUE);
-                            sclpqList.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If10GEODU2":
-                            sclpqList.add(ODUTYPEODU2.VALUE);
-                            sclpqList.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If10GE":
-                            sclpqList.add(DIGITALSIGNALTYPE10GigELAN.VALUE);
-                            break;
-                        case "If100GEODU4":
-                            sclpqList.add(DIGITALSIGNALTYPE100GigE.VALUE);
-                            sclpqList.add(ODUTYPEODU4.VALUE);
-                            break;
-                        case "If100GE":
-                            sclpqList.add(DIGITALSIGNALTYPE100GigE.VALUE);
-                            break;
-                        case "IfOCHOTU4ODU4":
-                        case "IfOCH":
-                            sclpqList.add(ODUTYPEODU4.VALUE);
-                            break;
-                        default:
-                            LOG.error("IfCapability type not managed");
-                            break;
-                    }
-                    break;
-                case "ODU":
-                    switch (ifCapType) {
-                        // 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.VALUE);
-                            break;
-                        case "If10GEODU2e":
-                            sclpqList.add(ODUTYPEODU2E.VALUE);
-                            break;
-                        case "If10GEODU2":
-                        case "If10GE":
-                            sclpqList.add(ODUTYPEODU2.VALUE);
-                            break;
-                        case "If100GEODU4":
-                        case "If100GE":
-                        case "IfOCHOTU4ODU4":
-                        case "IfOCH":
-                            sclpqList.add(ODUTYPEODU4.VALUE);
-                            break;
-                        default:
-                            LOG.error("IfCapability type not managed");
-                            break;
-                    }
-                    break;
-                case "PHOTONIC_MEDIA":
-                    if (ifCapType.equals("IfOCHOTU4ODU4") || ifCapType.equals("IfOCH")) {
-                        sclpqList.add(PHOTONICLAYERQUALIFIEROTSi.VALUE);
-                        sclpqList.add(PHOTONICLAYERQUALIFIEROMS.VALUE);
-                    }
-                    break;
-                default:
-                    LOG.error("Layer Protocol Name is unknown {}", lpn.getName());
-                    break;
-            }
-        }
-        return sclpqList;
-    }
-
     private String getNodeType(XpdrNodeTypes xponderType) {
         switch (xponderType.getIntValue()) {
             case 1:
@@ -1483,7 +1317,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     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;
@@ -1539,7 +1373,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     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);
@@ -1553,7 +1387,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
     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);
@@ -1563,4 +1397,224 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService {
             LOG.error("Error committing into datastore", e);
         }
     }
+
+    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;
+        }
+    }
+
 }
index 5190aac02a5a0f16a7fcb0db3093a7f43f12ca1f..afa28afcf4a52cdbe5ea51b0812ea1de017d0412 100644 (file)
  */
 package org.opendaylight.transportpce.tapi.topology;
 
-import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import java.nio.charset.Charset;
 import java.util.Map;
-import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.transportpce.tapi.impl.rpc.DeleteTapiLinkImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.InitRoadmRoadmTapiLinkImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.InitXpdrRdmTapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.DeleteTapiLinkInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.DeleteTapiLinkOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.DeleteTapiLinkOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.InitRoadmRoadmTapiLinkInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.InitRoadmRoadmTapiLinkOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.InitRoadmRoadmTapiLinkOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.InitXpdrRdmTapiLinkInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.InitXpdrRdmTapiLinkOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.InitXpdrRdmTapiLinkOutputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
-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.LayerProtocolName;
-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.topology.rev181210.Context1;
-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.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.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.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.DeleteTapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitRoadmRoadmTapiLink;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728.InitXpdrRdmTapiLink;
+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.Uuid;
+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.context.TopologyContext;
+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.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.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.ErrorType;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component
-public class TapiNetworkUtilsImpl implements TransportpceTapinetworkutilsService {
+public class TapiNetworkUtilsImpl {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiNetworkUtilsImpl.class);
     private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
             .getBytes(Charset.forName("UTF-8"))).toString());
+
     private final NetworkTransactionService networkTransactionService;
-    private final TapiLink tapiLink;
+    private Registration reg;
 
     @Activate
-    public TapiNetworkUtilsImpl(@Reference NetworkTransactionService networkTransactionService,
-            @Reference TapiLink tapiLink) {
+    public TapiNetworkUtilsImpl(@Reference RpcProviderService rpcProviderService,
+            @Reference NetworkTransactionService networkTransactionService, @Reference TapiLink tapiLink) {
         this.networkTransactionService = networkTransactionService;
-        this.tapiLink = tapiLink;
+        this.reg = rpcProviderService.registerRpcImplementations(ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+            .put(InitRoadmRoadmTapiLink.class, new InitRoadmRoadmTapiLinkImpl(tapiLink, this))
+            .put(InitXpdrRdmTapiLink.class, new InitXpdrRdmTapiLinkImpl(tapiLink, null))
+            .put(DeleteTapiLink.class, new DeleteTapiLinkImpl(this, networkTransactionService))
+            .build());
+        LOG.info("TapiNetworkUtilsImpl instantiated");
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitRoadmRoadmTapiLinkOutput>> initRoadmRoadmTapiLink(
-            InitRoadmRoadmTapiLinkInput input) {
-        // TODO --> need to check if the nodes and neps exist in the topology
-        String sourceNode = input.getRdmANode();
-        String sourceTp = input.getDegATp();
-        String destNode = input.getRdmZNode();
-        String destTp = input.getDegZTp();
-        Link link = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp,
-            TapiStringConstants.OMS_RDM_RDM_LINK, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
-            TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
-            this.tapiLink.getAdminState(sourceNode, sourceTp, destNode, destTp),
-            this.tapiLink.getOperState(sourceNode, sourceTp, destNode, destTp),
-            Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid);
-        InitRoadmRoadmTapiLinkOutputBuilder output = new InitRoadmRoadmTapiLinkOutputBuilder();
-        if (link == null) {
-            LOG.error("Error creating link object");
-            return RpcResultBuilder.<InitRoadmRoadmTapiLinkOutput>failed()
-                .withError(ErrorType.RPC, "Failed to create link in topology")
-                .buildFuture();
-        }
-        if (putLinkInTopology(link)) {
-            output = new InitRoadmRoadmTapiLinkOutputBuilder()
-                .setResult("Link created in tapi topology. Link-uuid = " + link.getUuid());
-        }
-        return RpcResultBuilder.success(output.build()).buildFuture();
+    @Deactivate
+    public void close() {
+        this.reg.close();
+        LOG.info("TapiNetworkUtilsImpl Closed");
     }
 
-    @Override
-    public ListenableFuture<RpcResult<InitXpdrRdmTapiLinkOutput>> initXpdrRdmTapiLink(InitXpdrRdmTapiLinkInput input) {
-        // TODO --> need to check if the nodes and neps exist in the topology
-        String destNode = input.getRdmNode();
-        String destTp = input.getAddDropTp();
-        String sourceNode = input.getXpdrNode();
-        String sourceTp = input.getNetworkTp();
-        Link link = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp,
-            TapiStringConstants.OMS_XPDR_RDM_LINK, TapiStringConstants.OTSI, TapiStringConstants.PHTNC_MEDIA,
-            TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
-            this.tapiLink.getAdminState(sourceNode, sourceTp, destNode, destTp),
-            this.tapiLink.getOperState(sourceNode, sourceTp, destNode, destTp),
-            Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid);
-        InitXpdrRdmTapiLinkOutputBuilder output = new InitXpdrRdmTapiLinkOutputBuilder();
-        if (link == null) {
-            LOG.error("Error creating link object");
-            return RpcResultBuilder.<InitXpdrRdmTapiLinkOutput>failed()
-                .withError(ErrorType.RPC, "Failed to create link in topology")
-                .buildFuture();
-        }
-        if (putLinkInTopology(link)) {
-            output = new InitXpdrRdmTapiLinkOutputBuilder()
-                .setResult("Link created in tapi topology. Link-uuid = " + link.getUuid());
-        }
-        return RpcResultBuilder.success(output.build()).buildFuture();
+
+    public Registration getRegisteredRpc() {
+        return reg;
     }
 
-    @Override
-    public ListenableFuture<RpcResult<DeleteTapiLinkOutput>> deleteTapiLink(DeleteTapiLinkInput input) {
-        // TODO: check if this IID is correct
-        // TODO --> need to check if the link exists in the topology
-        try {
-            InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Context.class)
-                    .augmentation(Context1.class).child(TopologyContext.class).child(Topology.class,
-                            new TopologyKey(tapiTopoUuid)).child(Link.class, new LinkKey(input.getUuid())).build();
-            this.networkTransactionService.delete(LogicalDatastoreType.OPERATIONAL, linkIID);
-            this.networkTransactionService.commit().get();
-            LOG.info("TAPI link deleted successfully.");
-            return RpcResultBuilder.success(new DeleteTapiLinkOutputBuilder()
-                .setResult("Link successfully deleted from tapi topology").build()).buildFuture();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Failed to delete TAPI link", e);
-            return RpcResultBuilder.<DeleteTapiLinkOutput>failed()
-                .withError(ErrorType.RPC, "Failed to delete link from topology")
-                .buildFuture();
-        }
+    public Uuid getTapiTopoUuid() {
+        return tapiTopoUuid;
     }
 
-    private boolean putLinkInTopology(Link tapLink) {
+    public boolean putLinkInTopology(Link tapLink) {
         // TODO is this merge correct? Should we just merge topology by changing the nodes map??
         // TODO: verify this is correct. Should we identify the context IID with the context UUID??
         LOG.info("Creating tapi node in TAPI topology context");
index 6acfd4e829d13f26ec5d78299744b30e4e9dd8df..37d24071f24bb03ea868eeb88f74ea2334f4fc4a 100644 (file)
@@ -8,9 +8,8 @@
 package org.opendaylight.transportpce.tapi.topology;
 
 import java.nio.charset.Charset;
-import java.util.Collection;
+import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ExecutionException;
@@ -22,8 +21,8 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
 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.networks.Network;
@@ -32,14 +31,14 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.LinkKey;
-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.LayerProtocolName;
-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.topology.rev181210.Context1;
-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.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.common.rev221121.Context;
+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.Uuid;
+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.context.TopologyContext;
+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.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,8 +48,9 @@ public class TapiOrLinkListener implements DataTreeChangeListener<Link> {
     private static final Logger LOG = LoggerFactory.getLogger(TapiOrLinkListener.class);
     private final TapiLink tapiLink;
     private final NetworkTransactionService networkTransactionService;
-    private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-        .getBytes(Charset.forName("UTF-8"))).toString());
+    private final Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(
+                TapiStringConstants.T0_FULL_MULTILAYER.getBytes(Charset.forName("UTF-8")))
+            .toString());
 
     public TapiOrLinkListener(final TapiLink tapiLink, final NetworkTransactionService networkTransactionService) {
         this.tapiLink = tapiLink;
@@ -58,57 +58,61 @@ public class TapiOrLinkListener implements DataTreeChangeListener<Link> {
     }
 
     @Override
-    public void onDataTreeChanged(@NonNull Collection<DataTreeModification<Link>> changes) {
+    public void onDataTreeChanged(@NonNull List<DataTreeModification<Link>> changes) {
         LOG.info("onDataTreeChanged - {}", this.getClass().getSimpleName());
         for (DataTreeModification<Link> change : changes) {
-            if (change.getRootNode().getDataBefore() == null && change.getRootNode().getDataAfter() != null) {
-                LOG.info("New link in openroadm topology");
-                Link link = change.getRootNode().getDataAfter();
-                // Todo: XPDR links are unidirectional, therefore we need to check for the current one and
-                //  the opposite one. But first check the type
-                Link1 link1 = link.augmentation(Link1.class);
-                if (link1 == null) {
-                    LOG.error("No type in link. We cannot trigger the TAPI link creation");
-                    return;
-                }
-                if (!(link1.getLinkType().equals(OpenroadmLinkType.XPONDERINPUT)
-                        || link1.getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT))) {
-                    LOG.warn("Not triggering creation of link for type = {}", link1.getLinkType().getName());
-                    return;
-                }
-                if (!oppositeLinkExists(link1.getOppositeLink())) {
-                    LOG.warn("Opposite link doest exist. Not creating TAPI link");
-                    return;
-                }
-                LOG.info("Opposite link already in datastore. Creatin TAPI bidirectional link");
-                String srcNode = getRoadmOrXpdr(link.getSource().getSourceNode().getValue());
-                String srcTp = link.getSource().getSourceTp().getValue();
-                String destNode = getRoadmOrXpdr(link.getDestination().getDestNode().getValue());
-                String destTp = link.getDestination().getDestTp().getValue();
-                putTapiLinkInTopology(this.tapiLink.createTapiLink(srcNode, srcTp, destNode, destTp,
-                    TapiStringConstants.OMS_XPDR_RDM_LINK, getQual(srcNode), getQual(destNode),
-                    TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA,
-                    link1.getAdministrativeState().getName(), link1.getOperationalState().getName(),
-                    Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()),
-                    tapiTopoUuid));
+            if (change.getRootNode().dataBefore() != null) {
+                continue;
             }
+            Link link = change.getRootNode().dataAfter();
+            if (link == null) {
+                continue;
+            }
+            LOG.info("New link in openroadm topology");
+            // Todo: XPDR links are unidirectional, therefore we need to check for the current one and
+            //  the opposite one. But first check the type
+            Link1 link1 = link.augmentation(Link1.class);
+            if (link1 == null) {
+                LOG.error("No type in link. We cannot trigger the TAPI link creation");
+                return;
+            }
+            if (!(link1.getLinkType().equals(OpenroadmLinkType.XPONDERINPUT)
+                    || link1.getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT))) {
+                LOG.warn("Not triggering creation of link for type = {}", link1.getLinkType().getName());
+                return;
+            }
+            if (!oppositeLinkExists(link1.getOppositeLink())) {
+                LOG.warn("Opposite link doest exist. Not creating TAPI link");
+                return;
+            }
+            LOG.info("Opposite link already in datastore. Creatin TAPI bidirectional link");
+            String srcNode = getRoadmOrXpdr(link.getSource().getSourceNode().getValue());
+            String srcTp = link.getSource().getSourceTp().getValue();
+            String destNode = getRoadmOrXpdr(link.getDestination().getDestNode().getValue());
+            String destTp = link.getDestination().getDestTp().getValue();
+            putTapiLinkInTopology(this.tapiLink.createTapiLink(srcNode, srcTp, destNode, destTp,
+                TapiStringConstants.OMS_XPDR_RDM_LINK, getQual(srcNode), getQual(destNode),
+                TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS,
+                link1.getAdministrativeState().getName(), link1.getOperationalState().getName(),
+                Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()),
+                tapiTopoUuid));
         }
     }
 
     private void putTapiLinkInTopology(
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link tapiXpdrLink) {
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link tapiXpdrLink) {
         LOG.info("Creating tapi link in TAPI topology context");
-        InstanceIdentifier<Topology> topoIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(Context1.class).child(TopologyContext.class)
-            .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
-            .build();
-
-        Topology topology = new TopologyBuilder().setUuid(this.tapiTopoUuid)
-            .setLink(Map.of(tapiXpdrLink.key(), tapiXpdrLink)).build();
-
         // merge in datastore
-        this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, topoIID,
-            topology);
+        this.networkTransactionService.merge(
+            LogicalDatastoreType.OPERATIONAL,
+            InstanceIdentifier.builder(Context.class)
+                .augmentation(Context1.class).child(TopologyContext.class)
+                .child(Topology.class, new TopologyKey(this.tapiTopoUuid))
+                .build(),
+            new TopologyBuilder()
+                .setUuid(this.tapiTopoUuid)
+                .setLink(Map.of(tapiXpdrLink.key(), tapiXpdrLink))
+                .build());
         try {
             this.networkTransactionService.commit().get();
         } catch (InterruptedException | ExecutionException e) {
@@ -118,21 +122,21 @@ public class TapiOrLinkListener implements DataTreeChangeListener<Link> {
     }
 
     private String getQual(String node) {
-        if (node.contains("ROADM")) {
-            return TapiStringConstants.PHTNC_MEDIA;
-        }
-        return TapiStringConstants.OTSI;
+        return node.contains("ROADM") ? TapiStringConstants.PHTNC_MEDIA : TapiStringConstants.XPDR;
     }
 
     private boolean oppositeLinkExists(LinkId oppositeLink) {
         try {
-            InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Networks.class)
-                .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
-                .augmentation(Network1.class).child(Link.class, new LinkKey(oppositeLink)).build();
-
-            Optional<Link> optLink =
-                this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, linkIID).get();
-            if (!optLink.isPresent()) {
+            if (this.networkTransactionService
+                    .read(
+                        LogicalDatastoreType.CONFIGURATION,
+                        InstanceIdentifier.builder(Networks.class)
+                            .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+                            .augmentation(Network1.class)
+                            .child(Link.class, new LinkKey(oppositeLink))
+                            .build())
+                    .get()
+                    .isEmpty()) {
                 LOG.error("Opposite link not found in datastore {}", oppositeLink.getValue());
                 return false;
             }
@@ -144,9 +148,8 @@ public class TapiOrLinkListener implements DataTreeChangeListener<Link> {
     }
 
     private String getRoadmOrXpdr(String node) {
-        if (node.contains("ROADM")) {
-            return String.join("-", node.split("-")[0], node.split("-")[1]);
-        }
-        return node;
+        return node.contains("ROADM")
+            ? String.join("-", node.split("-")[0], node.split("-")[1])
+            : node;
     }
 }
index 309643c20ad122f082bd3914231892ecc3b05bf8..e90efcdd3144f989fd8c135ed6dc8b7d9157140d 100644 (file)
@@ -7,14 +7,14 @@
  */
 package org.opendaylight.transportpce.tapi.topology;
 
-import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,43 +29,51 @@ public class TapiPortMappingListener implements DataTreeChangeListener<Nodes> {
     }
 
     @Override
-    public void onDataTreeChanged(@NonNull Collection<DataTreeModification<Nodes>> changes) {
+    public void onDataTreeChanged(@NonNull List<DataTreeModification<Nodes>> changes) {
         for (DataTreeModification<Nodes> change : changes) {
-            LOG.debug("TAPI module: Change in Node = {}", change.getRootNode());
+            var rootNode = change.getRootNode();
+            LOG.debug("TAPI module: Change in Node = {}", rootNode);
             // Data before needs to be not null
-            if (change.getRootNode().getDataAfter() != null && change.getRootNode().getDataBefore() != null) {
-                Nodes nodesAft = change.getRootNode().getDataAfter();
-                Nodes nodesBef = change.getRootNode().getDataBefore();
-                // TODO -> need to filter out the ones that are not after creation.
-                //  (Mapping before = null & Mapping after != null) is the rule for a first time connected device
-                String nodeId = nodesAft.getNodeId();
-                Map<MappingKey, Mapping> mappingAft = nodesAft.getMapping();
-                Map<MappingKey, Mapping> mappingBef = nodesBef.getMapping();
-                LOG.info("Change in node {} with OR version = {}", nodeId,
-                    nodesAft.getNodeInfo().getOpenroadmVersion().getName());
-                if (mappingAft == null) {
-                    LOG.warn("Mapping already existed in the datastore, which means that node {} already existed "
-                        + "in TAPI topology. The action to take will be different", nodeId);
+            Nodes nodesAft = rootNode.dataAfter();
+            if (nodesAft == null) {
+                continue;
+            }
+            Nodes nodesBef = rootNode.dataBefore();
+            if (nodesBef == null) {
+                this.tapiNetworkModelService.createTapiNode(
+                    nodesAft.getNodeId(), nodesAft.getNodeInfo().getOpenroadmVersion().getIntValue(), nodesAft);
+                continue;
+            }
+            // TODO -> need to filter out the ones that are not after creation.
+            //  (Mapping before = null & Mapping after != null) is the rule for a first time connected device
+            String nodeId = nodesAft.getNodeId();
+            Map<MappingKey, Mapping> mappingAft = nodesAft.getMapping();
+            Map<MappingKey, Mapping> mappingBef = nodesBef.getMapping();
+            LOG.info("Change in node {} with OR version = {}",
+                nodeId, nodesAft.getNodeInfo().getOpenroadmVersion().getName());
+            //TODO avoid long message and concatenation in following LOG messages
+            if (mappingAft == null) {
+                LOG.warn("Mapping already existed in the datastore, which means that node {} already existed "
+                    + "in TAPI topology. The action to take will be different", nodeId);
+                continue;
+            }
+            if (mappingBef == null) {
+                LOG.info("New mapping for node {} = {}", nodeId, mappingAft);
+                LOG.info("As the mapping is now created for the first time, "
+                    + "we can proceed with the creation of the node {} in the TAPI topology", nodeId);
+                this.tapiNetworkModelService.createTapiNode(
+                    nodeId, nodesAft.getNodeInfo().getOpenroadmVersion().getIntValue(), nodesAft);
+                continue;
+            }
+            for (Map.Entry<MappingKey, Mapping> entry : mappingAft.entrySet()) {
+                Mapping oldMapping = mappingBef.get(entry.getKey());
+                Mapping newMapping = mappingAft.get(entry.getKey());
+                if (oldMapping == null || newMapping == null) {
                     continue;
                 }
-                if (mappingBef == null) {
-                    LOG.info("New mapping for node {} = {}", nodeId, mappingAft);
-                    LOG.info("As the mapping is now created for the first time, "
-                        + "we can proceed with the creation of the node {} in the TAPI topology", nodeId);
-                    this.tapiNetworkModelService.createTapiNode(nodeId,
-                        nodesAft.getNodeInfo().getOpenroadmVersion().getIntValue(), nodesAft);
-                } else {
-                    for (Map.Entry<MappingKey, Mapping> entry : mappingAft.entrySet()) {
-                        Mapping oldMapping = mappingBef.get(entry.getKey());
-                        Mapping newMapping = mappingAft.get(entry.getKey());
-                        if (oldMapping == null || newMapping == null) {
-                            continue;
-                        }
-                        if (!oldMapping.getPortAdminState().equals(newMapping.getPortAdminState())
-                                || !oldMapping.getPortOperState().equals(newMapping.getPortOperState())) {
-                            this.tapiNetworkModelService.updateTapiTopology(nodeId, entry.getValue());
-                        }
-                    }
+                if (!oldMapping.getPortAdminState().equals(newMapping.getPortAdminState())
+                        || !oldMapping.getPortOperState().equals(newMapping.getPortOperState())) {
+                    this.tapiNetworkModelService.updateTapiTopology(nodeId, entry.getValue());
                 }
             }
         }
diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java
deleted file mode 100644 (file)
index efa6656..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-/*
- * Copyright © 2019 Orange, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.transportpce.tapi.topology;
-
-import com.google.common.util.concurrent.FluentFuture;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.ExecutionException;
-import java.util.stream.Collectors;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.transportpce.common.InstanceIdentifiers;
-import org.opendaylight.transportpce.common.NetworkUtils;
-import org.opendaylight.transportpce.tapi.TapiStringConstants;
-import org.opendaylight.transportpce.tapi.utils.TapiContext;
-import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.network.Node;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Network1;
-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.networks.network.Link;
-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.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.GetServiceInterfacePointDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointListInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointListOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointListOutputBuilder;
-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.TapiCommonService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.UpdateServiceInterfacePointInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.UpdateServiceInterfacePointOutput;
-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.get.service._interface.point.list.output.Sip;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.get.service._interface.point.list.output.SipBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.get.service._interface.point.list.output.SipKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.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.GetLinkDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetLinkDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetLinkDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeEdgePointDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeEdgePointDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeEdgePointDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyListInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyListOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyListOutputBuilder;
-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.TapiTopologyService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.link.details.output.LinkBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.node.edge.point.details.output.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.details.output.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.details.output.TopologyBuilder;
-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.OwnedNodeEdgePointKey;
-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.topology.LinkKey;
-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.TopologyKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.ErrorType;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService {
-
-    private static final Logger LOG = LoggerFactory.getLogger(TapiTopologyImpl.class);
-    private final DataBroker dataBroker;
-    private final TapiContext tapiContext;
-    private final TopologyUtils topologyUtils;
-    private final TapiLink tapiLink;
-
-    public TapiTopologyImpl(DataBroker dataBroker, TapiContext tapiContext, TopologyUtils topologyUtils,
-                            TapiLink tapiLink) {
-        this.dataBroker = dataBroker;
-        this.tapiContext = tapiContext;
-        this.topologyUtils = topologyUtils;
-        this.tapiLink = tapiLink;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetNodeDetailsOutput>> getNodeDetails(GetNodeDetailsInput input) {
-        // TODO Auto-generated method stub
-        // TODO -> maybe we get errors when having CEPs?
-        Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName());
-        // Node id: if roadm -> ROADM+PHOTONIC_MEDIA. if xpdr -> XPDR-XPDR+DSR/OTSi
-        Uuid nodeUuid = getUuidFromIput(input.getNodeIdOrName());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node = this.tapiContext
-                .getTapiNode(topoUuid, nodeUuid);
-        if (node == null) {
-            LOG.error("Invalid TAPI node name");
-            return RpcResultBuilder.<GetNodeDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Invalid Tapi Node name")
-                .buildFuture();
-        }
-        return RpcResultBuilder.success(new GetNodeDetailsOutputBuilder()
-                .setNode(new org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.topology.rev181210.get.node.details.output.NodeBuilder(node).build())
-                .build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetTopologyDetailsOutput>> getTopologyDetails(GetTopologyDetailsInput input) {
-        // TODO -> Add check for Full T0 Multilayer
-        if (!TapiStringConstants.T0_MULTILAYER.equals(input.getTopologyIdOrName())
-            && !TapiStringConstants.TPDR_100G.equals(input.getTopologyIdOrName())) {
-            if (TapiStringConstants.T0_FULL_MULTILAYER.equals(input.getTopologyIdOrName())) {
-                Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(input.getTopologyIdOrName()
-                    .getBytes(Charset.forName("UTF-8"))).toString());
-                Context context = this.tapiContext.getTapiContext();
-                Map<TopologyKey,
-                    org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology>
-                    topologyMap = context.augmentation(Context1.class).getTopologyContext().getTopology();
-                if (!(topologyMap != null && topologyMap.containsKey(new TopologyKey(topoUuid)))) {
-                    LOG.error("Topology {} not found in datastore", input.getTopologyIdOrName());
-                    return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
-                        .withError(ErrorType.RPC, "Invalid Topology name")
-                        .buildFuture();
-                }
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology
-                    topology = topologyMap.get(new TopologyKey(topoUuid));
-                return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder()
-                        .setTopology(this.topologyUtils.transformTopology(topology))
-                        .build())
-                    .buildFuture();
-            }
-            LOG.error("Invalid TAPI topology name");
-            return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Invalid Topology name")
-                .buildFuture();
-        }
-        try {
-            LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyIdOrName());
-            Topology topology = createAbstractedOtnTopology();
-            if (TapiStringConstants.TPDR_100G.equals(input.getTopologyIdOrName())) {
-                topology = createAbstracted100GTpdrTopology(topology);
-            }
-            return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder().setTopology(topology).build())
-                .buildFuture();
-        } catch (TapiTopologyException e) {
-            LOG.error("error building TAPI topology");
-            return RpcResultBuilder.<GetTopologyDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Error building topology")
-                .buildFuture();
-        }
-    }
-
-    private Topology createAbstracted100GTpdrTopology(Topology topology) {
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> dsrNodes =
-            topology.nonnullNode().values().stream()
-                .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-                .collect(Collectors.toList());
-        List<OwnedNodeEdgePoint> nep100GTpdrList = new ArrayList<>();
-        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node2: dsrNodes) {
-            List<OwnedNodeEdgePoint> nepList = node2.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr"))).collect(Collectors.toList());
-            nep100GTpdrList.addAll(nepList);
-        }
-        Name topoName = new NameBuilder().setValue(TapiStringConstants.TPDR_100G)
-            .setValueName("TAPI Topology Name").build();
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(
-            TapiStringConstants.TPDR_100G.getBytes(Charset.forName("UTF-8"))).toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node =
-            createTapiNode(nep100GTpdrList, topoUuid);
-        return new TopologyBuilder()
-            .setName(Map.of(topoName.key(), topoName))
-            .setUuid(topoUuid)
-            .setNode(Map.of(node.key(), node))
-            .build();
-    }
-
-    private Network readTopology(InstanceIdentifier<Network> networkIID) throws TapiTopologyException {
-        Network topology = null;
-        FluentFuture<Optional<Network>> topologyFuture = dataBroker.newReadOnlyTransaction()
-            .read(LogicalDatastoreType.CONFIGURATION, networkIID);
-        try {
-            topology = topologyFuture.get().orElseThrow();
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
-                .firstKeyOf(Network.class).getNetworkId().getValue(), e);
-        } catch (ExecutionException e) {
-            throw new TapiTopologyException("Unable to get from mdsal topology: " + networkIID
-                .firstKeyOf(Network.class).getNetworkId().getValue(), e);
-        }
-        return topology;
-    }
-
-    private Topology createAbstractedOtnTopology() throws TapiTopologyException {
-        // read openroadm-topology
-        Network openroadmTopo = readTopology(InstanceIdentifiers.OVERLAY_NETWORK_II);
-        List<Link> linkList = new ArrayList<>();
-        if (openroadmTopo.augmentation(Network1.class) != null) {
-            linkList.addAll(openroadmTopo.augmentation(Network1.class).getLink().values());
-        }
-        List<Link> xponderOutLinkList = linkList.stream()
-                .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT))
-                .collect(Collectors.toList());
-        List<Link> xponderInLinkList = linkList.stream()
-                .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDERINPUT))
-                .collect(Collectors.toList());
-        // read otn-topology
-        Network otnTopo = readTopology(InstanceIdentifiers.OTN_NETWORK_II);
-        Map<NodeId, Node> otnNodeMap = otnTopo.nonnullNode().values().stream()
-            .collect(Collectors.toMap(Node::getNodeId, node -> node));
-
-        Map<String, List<String>> networkPortMap = new HashMap<>();
-        Iterator<Entry<NodeId, Node>> itOtnNodeMap = otnNodeMap.entrySet().iterator();
-        while (itOtnNodeMap.hasNext()) {
-            Entry<NodeId, Node> entry = itOtnNodeMap.next();
-            String portMappingNodeId = entry.getValue().getSupportingNode().values().stream()
-                .filter(sn -> sn.getNetworkRef().getValue().equals(NetworkUtils.UNDERLAY_NETWORK_ID))
-                .findFirst()
-                .orElseThrow().getNodeRef().getValue();
-            List<String> networkPortList = new ArrayList<>();
-            for (TerminationPoint tp: entry.getValue().augmentation(Node1.class).getTerminationPoint().values()) {
-                if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)
-                        && checkTp(entry.getKey().getValue(), portMappingNodeId, tp, xponderOutLinkList,
-                        xponderInLinkList)) {
-                    networkPortList.add(tp.getTpId().getValue());
-                }
-            }
-            if (!networkPortList.isEmpty()) {
-                networkPortMap.put(entry.getKey().getValue(), networkPortList);
-            }
-        }
-        Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
-            tapiNodeList = new HashMap<>();
-        Map<LinkKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link>
-            tapiLinkList = new HashMap<>();
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topoUuid, this.tapiLink);
-        Iterator<Entry<String, List<String>>> it = networkPortMap.entrySet().iterator();
-        while (it.hasNext()) {
-            String nodeId = it.next().getKey();
-            tapiFactory.convertNode(otnNodeMap.get(new NodeId(nodeId)), networkPortMap.get(nodeId));
-            tapiNodeList.putAll(tapiFactory.getTapiNodes());
-            tapiLinkList.putAll(tapiFactory.getTapiLinks());
-        }
-        if (openroadmTopo.nonnullNode().values().stream().filter(nt ->
-                nt.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-                    .getNodeType().equals(OpenroadmNodeType.SRG)).count() > 0) {
-            tapiFactory.convertRoadmInfrastructure();
-            tapiNodeList.putAll(tapiFactory.getTapiNodes());
-            tapiLinkList.putAll(tapiFactory.getTapiLinks());
-        } else {
-            LOG.warn("Unable to abstract an ROADM infrasctructure from openroadm-topology");
-        }
-        if (otnTopo.augmentation(Network1.class) != null) {
-            Map<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-                    .ietf.network.topology.rev180226.networks.network.LinkKey, Link> otnLinkMap =
-                otnTopo.augmentation(Network1.class).getLink();
-            tapiFactory.convertLinks(otnLinkMap);
-            tapiLinkList.putAll(tapiFactory.getTapiLinks());
-        }
-        Name name = new NameBuilder()
-            .setValue(TapiStringConstants.T0_MULTILAYER)
-            .setValueName("TAPI Topology Name")
-            .build();
-        return new TopologyBuilder()
-                .setName(Map.of(name.key(), name))
-                .setUuid(topoUuid)
-                .setNode(tapiNodeList)
-                .setLink(tapiLinkList).build();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetNodeEdgePointDetailsOutput>> getNodeEdgePointDetails(
-            GetNodeEdgePointDetailsInput input) {
-        // TODO Auto-generated method stub
-        // TODO -> maybe we get errors when having CEPs?
-        Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName());
-        // Node id: if roadm -> ROADMid+PHOTONIC_MEDIA. if xpdr -> XPDRid-XPDRnbr+DSR/OTSi
-        Uuid nodeUuid = getUuidFromIput(input.getNodeIdOrName());
-        // NEP id: if roadm -> ROADMid+PHOTONIC_MEDIA/MC/OTSiMC+TPid.
-        // if xpdr -> XPDRid-XPDRnbr+DSR/eODU/iODU/iOTSi/eOTSi/PHOTONIC_MEDIA+TPid
-        Uuid nepUuid = getUuidFromIput(input.getEpIdOrName());
-        OwnedNodeEdgePoint nep = this.tapiContext.getTapiNEP(topoUuid, nodeUuid, nepUuid);
-        if (nep == null) {
-            LOG.error("Invalid TAPI nep name");
-            return RpcResultBuilder.<GetNodeEdgePointDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Invalid NEP name")
-                .buildFuture();
-        }
-        return RpcResultBuilder.success(new GetNodeEdgePointDetailsOutputBuilder()
-                .setNodeEdgePoint(new NodeEdgePointBuilder(nep).build()).build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetLinkDetailsOutput>> getLinkDetails(GetLinkDetailsInput input) {
-        // TODO Auto-generated method stub
-        Uuid topoUuid = getUuidFromIput(input.getTopologyIdOrName());
-        // Link id: same as OR link id
-        Uuid linkUuid = getUuidFromIput(input.getLinkIdOrName());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link link = this.tapiContext
-                .getTapiLink(topoUuid, linkUuid);
-        if (link == null) {
-            LOG.error("Invalid TAPI link name");
-            return RpcResultBuilder.<GetLinkDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Invalid Link name")
-                .buildFuture();
-        }
-        return RpcResultBuilder.success(new GetLinkDetailsOutputBuilder().setLink(new LinkBuilder(link).build())
-                .build()).buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetTopologyListOutput>> getTopologyList(GetTopologyListInput input) {
-        // TODO Auto-generated method stub
-        // TODO -> maybe we get errors when having CEPs?
-        Map<TopologyKey,
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology>
-                topologyMap = this.tapiContext.getTopologyContext();
-        if (topologyMap.isEmpty()) {
-            LOG.error("No topologies exist in tapi context");
-            return RpcResultBuilder.<GetTopologyListOutput>failed()
-                .withError(ErrorType.APPLICATION, "No topologies exist in tapi context")
-                .buildFuture();
-        }
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.list.output.TopologyKey,
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.list.output.Topology>
-                newTopoMap = new HashMap<>();
-        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology
-                topo:topologyMap.values()) {
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.list.output.Topology
-                newTopo = new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.topology.rev181210.get.topology.list.output.TopologyBuilder(topo).build();
-            newTopoMap.put(newTopo.key(), newTopo);
-        }
-        return RpcResultBuilder.success(new GetTopologyListOutputBuilder().setTopology(newTopoMap).build())
-                .buildFuture();
-    }
-
-    private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node
-            createTapiNode(List<OwnedNodeEdgePoint> nepList, Uuid topoUuid) {
-        Name name = new NameBuilder().setValueName("Tpdr100g node name").setValue("Tpdr100g over WDM node").build();
-        Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
-        for (OwnedNodeEdgePoint ownedNodeEdgePoint: nepList) {
-            onepMap.put(ownedNodeEdgePoint.key(), ownedNodeEdgePoint);
-        }
-        Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(name.getValue().getBytes(Charset.forName("UTF-8"))).toString());
-        return new NodeBuilder()
-                .setUuid(nodeUuid)
-                .setName(Map.of(name.key(), name))
-                .setLayerProtocolName(Set.of(LayerProtocolName.ETH))
-                .setAdministrativeState(AdministrativeState.UNLOCKED)
-                .setOperationalState(OperationalState.ENABLED)
-                .setLifecycleState(LifecycleState.INSTALLED)
-                .setOwnedNodeEdgePoint(onepMap)
-                .setNodeRuleGroup(createNodeRuleGroupFor100gTpdrNode(topoUuid, nodeUuid, nepList))
-                .build();
-    }
-
-    private boolean checkTp(String nodeIdTopo, String nodeIdPortMap, TerminationPoint tp, List<Link> xpdOut,
-                            List<Link> xpdIn) {
-        String networkLcp;
-        if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERCLIENT)) {
-            networkLcp = tp.augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
-                    .getAssociatedConnectionMapTp().iterator().next().getValue();
-        } else {
-            networkLcp = tp.getTpId().getValue();
-        }
-        @NonNull
-        KeyedInstanceIdentifier<Mapping, MappingKey> pmIID = InstanceIdentifier.create(
-            org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network.class)
-            .child(Nodes.class, new NodesKey(nodeIdPortMap)).child(Mapping.class, new MappingKey(networkLcp));
-        @NonNull
-        FluentFuture<Optional<Mapping>> mappingOpt = dataBroker.newReadOnlyTransaction().read(
-            LogicalDatastoreType.CONFIGURATION, pmIID);
-        Mapping mapping = null;
-        if (mappingOpt.isDone()) {
-            try {
-                mapping = mappingOpt.get().orElseThrow();
-            } catch (InterruptedException | ExecutionException e) {
-                LOG.error("Error getting mapping for {}", networkLcp, e);
-                return false;
-            }
-        } else {
-            LOG.error("Impossible to get mapping of associated network port {} of tp {}", networkLcp, tp.getTpId()
-                .getValue());
-            return false;
-        }
-        String networkPortDirection = mapping.getPortDirection();
-        long count = 0;
-        switch (networkPortDirection) {
-            case "bidirectional":
-                count += xpdOut.stream().filter(lk -> lk.getSource().getSourceNode().getValue().equals(nodeIdTopo)
-                    && lk.getSource().getSourceTp().getValue().equals(networkLcp)).count();
-                count += xpdIn.stream().filter(lk -> lk.getDestination().getDestNode().getValue().equals(nodeIdTopo)
-                    && lk.getDestination().getDestTp().getValue().equals(networkLcp)).count();
-                return (count == 2);
-            case "tx":
-            case "rx":
-                @Nullable
-                String partnerLcp = mapping.getPartnerLcp();
-                if (mapping.getPortQual().equals("tx")) {
-                    count += xpdOut.stream().filter(lk -> lk.getSource().getSourceNode().getValue().equals(nodeIdTopo)
-                        && lk.getSource().getSourceTp().getValue().equals(networkLcp)).count();
-                    count += xpdIn.stream().filter(lk -> lk.getDestination().getDestNode().getValue().equals(nodeIdTopo)
-                        && lk.getDestination().getDestTp().getValue().equals(partnerLcp)).count();
-                }
-                if (mapping.getPortQual().equals("rx")) {
-                    count += xpdIn.stream().filter(lk -> lk.getDestination().getDestNode().getValue().equals(nodeIdTopo)
-                        && lk.getDestination().getDestTp().getValue().equals(networkLcp)).count();
-                    count += xpdOut.stream().filter(lk -> lk.getSource().getSourceNode().getValue().equals(nodeIdTopo)
-                        && lk.getSource().getSourceTp().getValue().equals(partnerLcp)).count();
-                }
-                return (count == 2);
-            default:
-                LOG.error("Invalid port direction for {}", networkLcp);
-                return false;
-        }
-    }
-
-    private Map<NodeRuleGroupKey, NodeRuleGroup> createNodeRuleGroupFor100gTpdrNode(
-            Uuid topoUuid, Uuid nodeUuid, Collection<OwnedNodeEdgePoint> onepl) {
-
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePointKey,
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint>
-            nepMap = new HashMap<>();
-        for (OwnedNodeEdgePoint onep: onepl) {
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group.NodeEdgePoint nep =
-                new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.node.rule.group
-                    .NodeEdgePointBuilder()
-                        .setTopologyUuid(topoUuid)
-                        .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(("rdm infra node rule group").getBytes(Charset.forName("UTF-8")))
-                .toString()))
-            .setRule(ruleList)
-            .setNodeEdgePoint(nepMap)
-            .build();
-        nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup);
-        return nodeRuleGroupMap;
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetServiceInterfacePointDetailsOutput>>
-            getServiceInterfacePointDetails(GetServiceInterfacePointDetailsInput input) {
-        Uuid sipUuid = getUuidFromIput(input.getSipIdOrName());
-        Map<ServiceInterfacePointKey, ServiceInterfacePoint> sips =
-            this.tapiContext.getTapiContext().getServiceInterfacePoint();
-        if (sips == null || sips.isEmpty()) {
-            return RpcResultBuilder.<GetServiceInterfacePointDetailsOutput>failed()
-                .withError(ErrorType.RPC, "No sips in datastore")
-                .buildFuture();
-        }
-        if (!sips.containsKey(new ServiceInterfacePointKey(sipUuid))) {
-            return RpcResultBuilder.<GetServiceInterfacePointDetailsOutput>failed()
-                .withError(ErrorType.RPC, "Sip doesnt exist in datastore")
-                .buildFuture();
-        }
-        org.opendaylight.yang.gen.v1.urn
-            .onf.otcc.yang.tapi.common.rev181210.get.service._interface.point.details.output.Sip outSip =
-                new org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.common.rev181210.get.service._interface.point.details.output.SipBuilder(
-                        sips.get(new ServiceInterfacePointKey(sipUuid)))
-                    .build();
-        return RpcResultBuilder.success(new GetServiceInterfacePointDetailsOutputBuilder().setSip(outSip).build())
-            .buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<GetServiceInterfacePointListOutput>>
-            getServiceInterfacePointList(GetServiceInterfacePointListInput input) {
-        Map<ServiceInterfacePointKey, ServiceInterfacePoint> sips =
-            this.tapiContext.getTapiContext().getServiceInterfacePoint();
-        if (sips == null || sips.isEmpty()) {
-            return RpcResultBuilder.<GetServiceInterfacePointListOutput>failed()
-                .withError(ErrorType.RPC, "No sips in datastore")
-                .buildFuture();
-        }
-        Map<SipKey, Sip> outSipMap = new HashMap<>();
-        for (ServiceInterfacePoint sip : sips.values()) {
-            Sip si = new SipBuilder(sip).build();
-            outSipMap.put(si.key(), si);
-        }
-        return RpcResultBuilder.success(new GetServiceInterfacePointListOutputBuilder().setSip(outSipMap).build())
-            .buildFuture();
-    }
-
-    @Override
-    public ListenableFuture<RpcResult<UpdateServiceInterfacePointOutput>>
-            updateServiceInterfacePoint(UpdateServiceInterfacePointInput input) {
-        // TODO --> not yet implemented
-        return null;
-    }
-
-    private Uuid getUuidFromIput(String serviceIdOrName) {
-        try {
-            UUID.fromString(serviceIdOrName);
-            LOG.info("Given attribute {} is a UUID", serviceIdOrName);
-            return new Uuid(serviceIdOrName);
-        } catch (IllegalArgumentException e) {
-            LOG.info("Given attribute {} is not a UUID", serviceIdOrName);
-            return new Uuid(UUID.nameUUIDFromBytes(serviceIdOrName.getBytes(StandardCharsets.UTF_8)).toString());
-        }
-    }
-}
index 420fdea34a41eb8396b52f8c4679f6c7cfa1bb10..9eca76d6990f102d839379d905b0fea1e0ce58e3 100644 (file)
@@ -30,37 +30,41 @@ import org.opendaylight.transportpce.common.NetworkUtils;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.MappingKey;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.Nodes;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmNodeType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.mapping.MappingKey;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.Nodes;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.network.NodesKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+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.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.topology.rev180226.Network1;
 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.networks.network.Link;
 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.rev181210.LayerProtocolName;
-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.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.tapi.context.ServiceInterfacePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1;
-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.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.common.rev221121.Context;
+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.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.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.topology.rev221121.context.TopologyContext;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.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.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.slf4j.Logger;
@@ -73,6 +77,8 @@ public final class TopologyUtils {
     private static final Logger LOG = LoggerFactory.getLogger(TopologyUtils.class);
     private Map<ServiceInterfacePointKey, ServiceInterfacePoint> tapiSips;
     private final TapiLink tapiLink;
+    private String topologicalMode;
+    public static final String NOOPMODEDECLARED = "No operational mode declared in Topo for Tp {}, assumes by default ";
 
     public TopologyUtils(NetworkTransactionService networkTransactionService, DataBroker dataBroker,
                          TapiLink tapiLink) {
@@ -80,6 +86,8 @@ public final class TopologyUtils {
         this.dataBroker = dataBroker;
         this.tapiSips = new HashMap<>();
         this.tapiLink = tapiLink;
+        // TODO: Initially set topological mode to Full. Shall be set through the setter at controller initialization
+        this.topologicalMode = "Full";
     }
 
     public Network readTopology(InstanceIdentifier<Network> networkIID) throws TapiTopologyException {
@@ -101,13 +109,43 @@ public final class TopologyUtils {
         return topology;
     }
 
+    public List<String> readTopologyName(Uuid topoUuid) throws TapiTopologyException {
+        Topology topology = null;
+        InstanceIdentifier<Topology> topoIID = InstanceIdentifier.builder(
+                Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
+                .onf.otcc.yang.tapi.topology.rev221121.Context1.class).child(TopologyContext.class)
+                .child(Topology.class, new TopologyKey(topoUuid)).build();
+
+        ListenableFuture<Optional<Topology>> topologyFuture =
+                this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, topoIID);
+        try {
+            topology = topologyFuture.get().orElseThrow();
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new TapiTopologyException("Unable to get from mdsal topology: " + topoIID
+                    .firstKeyOf(Topology.class).getUuid().getValue(), e);
+        } catch (ExecutionException e) {
+            throw new TapiTopologyException("Unable to get from mdsal topology: " + topoIID
+                .firstKeyOf(Topology.class).getUuid().getValue(), e);
+        } catch (NoSuchElementException e) {
+            return null;
+        }
+        List<String> nameList = new ArrayList<>();
+        for (Map.Entry<NameKey, Name> entry : topology.getName().entrySet()) {
+            nameList.add(entry.getValue().getValue());
+        }
+        LOG.debug("Topology nameList {} = ", nameList.toString());
+        return nameList;
+    }
+
     public Topology createFullOtnTopology() throws TapiTopologyException {
         // read openroadm-topology
         Network openroadmTopo = readTopology(InstanceIdentifiers.OVERLAY_NETWORK_II);
-        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
-            .getBytes(Charset.forName("UTF-8"))).toString());
+        String topoType = this.topologicalMode.equals("Full") ? TapiStringConstants.T0_FULL_MULTILAYER
+            : TapiStringConstants.T0_TAPI_MULTILAYER;
+        Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(topoType.getBytes(Charset.forName("UTF-8"))).toString());
         Name name = new NameBuilder()
-            .setValue(TapiStringConstants.T0_FULL_MULTILAYER)
+            .setValue(topoType)
             .setValueName("TAPI Topology Name")
             .build();
         if (openroadmTopo != null) {
@@ -152,85 +190,102 @@ public final class TopologyUtils {
                     networkPortMap.put(entry.getKey().getValue(), networkPortList);
                 }
             }
-            Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node>
+            Map<NodeKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node>
                 tapiNodeList = new HashMap<>();
-            Map<LinkKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link>
+            Map<LinkKey, org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link>
                 tapiLinkList = new HashMap<>();
-            ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topoUuid, this.tapiLink);
+            ConvertORTopoToTapiFullTopo tapiFullFactory = new ConvertORTopoToTapiFullTopo(topoUuid, this.tapiLink);
+            ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topoUuid);
             Iterator<Map.Entry<String, List<String>>> it = networkPortMap.entrySet().iterator();
             while (it.hasNext()) {
                 String nodeId = it.next().getKey();
                 tapiFactory.convertNode(otnNodeMap.get(new NodeId(nodeId)), networkPortMap.get(nodeId));
+                this.tapiSips.putAll(tapiFactory.getTapiSips());
+                tapiFullFactory.setTapiNodes(tapiFactory.getTapiNodes());
+                tapiFullFactory.setTapiSips(tapiFactory.getTapiSips());
                 tapiNodeList.putAll(tapiFactory.getTapiNodes());
-                tapiLinkList.putAll(tapiFactory.getTapiLinks());
+                tapiLinkList.putAll(tapiFullFactory.getTapiLinks());
             }
             // roadm infrastructure not abstracted
             // read openroadm-network
             Network openroadmNet = readTopology(InstanceIdentifiers.UNDERLAY_NETWORK_II);
-            if (openroadmNet != null && openroadmNet.nonnullNode().values().stream().filter(nt ->
-                nt.augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Node1.class)
-                    .getNodeType().equals(OpenroadmNodeType.ROADM)).count() > 0) {
+            if (openroadmNet != null && openroadmNet.nonnullNode().values().stream()
+                .filter(nt -> nt
+                    .augmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
+                    .getNodeType()
+                    .equals(OpenroadmNodeType.ROADM))
+                .count() > 0) {
                 // map roadm nodes
-                for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-                    .ietf.network.rev180226.networks.network.Node roadm:openroadmNet.nonnullNode().values().stream()
-                    .filter(nt -> nt.augmentation(org.opendaylight.yang.gen.v1.http
-                        .org.openroadm.common.network.rev211210.Node1.class)
-                        .getNodeType().equals(OpenroadmNodeType.ROADM))
-                    .collect(Collectors.toList())) {
-                    tapiFactory.convertRoadmNode(roadm, openroadmTopo);
-                    tapiNodeList.putAll(tapiFactory.getTapiNodes());
+                if (this.topologicalMode.equals("Full")) {
+                    for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks
+                        .network.Node roadm:openroadmNet.nonnullNode().values().stream()
+                        .filter(nt -> nt
+                            .augmentation(
+                                org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Node1.class)
+                            .getNodeType()
+                            .equals(OpenroadmNodeType.ROADM))
+                        .collect(Collectors.toList())) {
+                        tapiFullFactory.convertRoadmNode(roadm, openroadmTopo, "Full");
+                        this.tapiSips.putAll(tapiFullFactory.getTapiSips());
+                        tapiNodeList.putAll(tapiFullFactory.getTapiNodes());
+                        tapiLinkList.putAll(tapiFullFactory.getTapiLinks());
+                        // map roadm to roadm link
+                        List<Link> rdmTordmLinkList = linkList.stream()
+                            .filter(lk -> lk.augmentation(Link1.class).getLinkType()
+                                .equals(OpenroadmLinkType.ROADMTOROADM))
+                            .collect(Collectors.toList());
+                        tapiFullFactory.convertRdmToRdmLinks(rdmTordmLinkList);
+                        tapiLinkList.putAll(tapiFullFactory.getTapiLinks());
+                    }
+                } else {
+                    tapiFullFactory.convertRoadmNode(null, openroadmTopo, "Abstracted");
+                    this.tapiSips.putAll(tapiFullFactory.getTapiSips());
+                    tapiNodeList.putAll(tapiFullFactory.getTapiNodes());
+                    tapiLinkList.putAll(tapiFullFactory.getTapiLinks());
                 }
+
             } else {
                 LOG.warn("No roadm nodes exist in the network");
             }
-            // map roadm to roadm link
-            List<Link> rdmTordmLinkList = linkList.stream()
-                .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.ROADMTOROADM))
-                .collect(Collectors.toList());
-            tapiFactory.convertRdmToRdmLinks(rdmTordmLinkList);
-            tapiLinkList.putAll(tapiFactory.getTapiLinks());
+
             // map xpdr_input to roadm and xpdr_output to roadm links.
             xponderInLinkList.addAll(xponderOutLinkList);
-            tapiFactory.convertXpdrToRdmLinks(xponderInLinkList);
-            tapiLinkList.putAll(tapiFactory.getTapiLinks());
+            tapiFullFactory.convertXpdrToRdmLinks(xponderInLinkList);
+            tapiLinkList.putAll(tapiFullFactory.getTapiLinks());
 
             // Retrieve created sips map in TapiFactory when mapping all the nodes
-            this.tapiSips = tapiFactory.getTapiSips();
+            this.tapiSips.putAll(tapiFullFactory.getTapiSips());
             return new TopologyBuilder()
                 .setName(Map.of(name.key(), name))
                 .setUuid(topoUuid)
                 .setNode(tapiNodeList)
                 .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU,
-                    LayerProtocolName.DSR))
+                    LayerProtocolName.DSR, LayerProtocolName.DIGITALOTN))
                 .setLink(tapiLinkList).build();
         }
         return new TopologyBuilder()
             .setName(Map.of(name.key(), name))
             .setUuid(topoUuid)
             .setLayerProtocolName(Set.of(LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.ODU,
-                LayerProtocolName.DSR))
+                LayerProtocolName.DSR, LayerProtocolName.DIGITALOTN))
             .build();
     }
 
-    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
-        return tapiSips;
-    }
-
     public boolean checkTp(String nodeIdTopo, String nodeIdPortMap, TerminationPoint tp, List<Link> xpdOut,
                            List<Link> xpdIn) {
         LOG.info("Inside Checktp for node {}-{}", nodeIdTopo, nodeIdPortMap);
         String networkLcp;
         if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERCLIENT)) {
             networkLcp = tp.augmentation(
-                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1.class)
-                    .getAssociatedConnectionMapTp().iterator().next().getValue();
+                    org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1.class)
+                .getAssociatedConnectionMapTp().iterator().next().getValue();
         } else {
             networkLcp = tp.getTpId().getValue();
         }
         LOG.info("Network LCP associated = {}", networkLcp);
         @NonNull
         KeyedInstanceIdentifier<Mapping, MappingKey> pmIID = InstanceIdentifier.create(
-                org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network.class)
+                org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network.class)
                 .child(Nodes.class, new NodesKey(nodeIdPortMap)).child(Mapping.class, new MappingKey(networkLcp));
         @NonNull
         FluentFuture<Optional<Mapping>> mappingOpt = this.dataBroker.newReadOnlyTransaction().read(
@@ -250,7 +305,6 @@ public final class TopologyUtils {
         }
         LOG.info("Mapping found = {}", mapping);
         String networkPortDirection = mapping.getPortDirection();
-        // long count = 0;
         switch (networkPortDirection) {
             // TODO -> remove the part of counting only if the Network LCP is part of a Link.
             //  We want to have all OTN nodes in the TAPI topology
@@ -268,50 +322,56 @@ public final class TopologyUtils {
         }
     }
 
-    public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.details.output.Topology
+    public org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.details.output.Topology
             transformTopology(Topology topology) {
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
             .get.topology.details.output.TopologyBuilder topologyBuilder =
-                new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
+                new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
             .get.topology.details.output.TopologyBuilder()
                 .setUuid(topology.getUuid())
                 .setName(topology.getName())
                 .setLayerProtocolName(topology.getLayerProtocolName())
-                .setNode(topology.getNode())
                 .setLink(topology.getLink());
-        if (topology.getNode() == null) {
-            topologyBuilder.setNode(topology.getNode());
+        if (topology.nonnullNode().isEmpty()) {
             return topologyBuilder.build();
         }
-        // TODO -> Need to remove CEPs from NEPs. If not error from get Topology details output
         Map<NodeKey, Node> mapNode = new HashMap<>();
-        for (Node node: topology.getNode().values()) {
+        for (Node node: topology.nonnullNode().values()) {
             Map<OwnedNodeEdgePointKey, OwnedNodeEdgePoint> onepMap = new HashMap<>();
-            for (OwnedNodeEdgePoint onep: node.getOwnedNodeEdgePoint().values()) {
-                OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
-                if (onep1 == null) {
-                    onepMap.put(onep.key(), onep);
-                    continue;
-                }
-                OwnedNodeEdgePointBuilder newOnepBuilder = new OwnedNodeEdgePointBuilder()
+            for (OwnedNodeEdgePoint onep: node.nonnullOwnedNodeEdgePoint().values()) {
+//                    OwnedNodeEdgePoint1 onep1 = onep.augmentation(OwnedNodeEdgePoint1.class);
+//                    if (onep1 == null) {
+//                        onepMap.put(onep.key(), onep);
+//                        continue;
+//                    }
+                OwnedNodeEdgePoint newOnep = new OwnedNodeEdgePointBuilder()
                         .setUuid(onep.getUuid())
                         .setLayerProtocolName(onep.getLayerProtocolName())
                         .setName(onep.getName())
-                        .setSupportedCepLayerProtocolQualifier(onep.getSupportedCepLayerProtocolQualifier())
+                        .setSupportedCepLayerProtocolQualifierInstances(onep
+                            .getSupportedCepLayerProtocolQualifierInstances())
                         .setAdministrativeState(onep.getAdministrativeState())
                         .setOperationalState(onep.getOperationalState())
                         .setLifecycleState(onep.getLifecycleState())
-                        .setTerminationDirection(onep.getTerminationDirection())
-                        .setTerminationState(onep.getTerminationState())
-                        .setLinkPortDirection(onep.getLinkPortDirection())
-                        .setLinkPortRole(onep.getLinkPortRole());
-                if (onep.getMappedServiceInterfacePoint() != null) {
-                    newOnepBuilder.setMappedServiceInterfacePoint(onep.getMappedServiceInterfacePoint());
-                }
-                OwnedNodeEdgePoint nep = newOnepBuilder.build();
-                onepMap.put(nep.key(), nep);
+//                            .setTerminationDirection(onep.getTerminationDirection())
+//                            .setTerminationState(onep.getTerminationState())
+                        .setDirection(onep.getDirection())
+                        .setSupportedPayloadStructure(onep.getSupportedPayloadStructure())
+                        .setAvailablePayloadStructure(onep.getAvailablePayloadStructure())
+                        .setLinkPortRole(onep.getLinkPortRole())
+                        .setMappedServiceInterfacePoint(onep.nonnullMappedServiceInterfacePoint())
+                        .build();
+                onepMap.put(newOnep.key(), newOnep);
             }
-            Node newNode = new NodeBuilder(node)
+            Node newNode = new NodeBuilder()
+                    .setUuid(node.getUuid())
+                    .setName(node.getName())
+                    .setOperationalState(node.getOperationalState())
+                    .setAdministrativeState(node.getAdministrativeState())
+                    .setLifecycleState(node.getLifecycleState())
+                    .setLayerProtocolName(node.getLayerProtocolName())
+                    .setNodeRuleGroup(node.getNodeRuleGroup())
+                    .setInterRuleGroup(node.getInterRuleGroup())
                     .setOwnedNodeEdgePoint(onepMap)
                     .build();
             mapNode.put(newNode.key(), newNode);
@@ -319,4 +379,17 @@ public final class TopologyUtils {
         topologyBuilder.setNode(mapNode);
         return topologyBuilder.build();
     }
+
+    public Map<ServiceInterfacePointKey, ServiceInterfacePoint> getSipMap() {
+        return tapiSips;
+    }
+
+    public void setTopologicalMode(String topoMode) {
+        this.topologicalMode = topoMode;
+    }
+
+    public String getTopologicalMode() {
+        return topologicalMode;
+    }
+
 }
index 019b745a1b0897965cd7dc0a2e04cac3db1a833b..79d4d19849534c9f5cadc53cd99da8a209047cd5 100644 (file)
@@ -7,7 +7,7 @@
  */
 package org.opendaylight.transportpce.tapi.utils;
 
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ServiceEndpoint;
 
 public class GenericServiceEndpoint {
     private ServiceEndpoint value;
index 46acd557a79394e1f836d6bb88e634d47ca4d691..59be16ab51881333b2293cc21844ba5f7929372f 100644 (file)
@@ -12,11 +12,11 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.EndPointType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.service._interface.points.ServiceEndPoint;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.EndPointType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.service._interface.points.ServiceEndPoint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 12ee2b61cef827e5722862bc71fc81265d86dd8a..f2e5b8ddbb2988067a2683da69c5a1b4ad20841a 100644 (file)
@@ -15,43 +15,43 @@ import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
-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.LayerProtocolName;
-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.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.tapi.context.ServiceInterfacePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1Builder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.OwnedNodeEdgePoint1Builder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.cep.list.ConnectionEndPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connection.LowerConnectionKey;
-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.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.ConnectivityServiceKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContextBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepList;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.topology.context.topology.node.owned.node.edge.point.CepListBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder;
-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.context.TopologyContextBuilder;
-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.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.NwTopologyServiceBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.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.LayerProtocolName;
+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.tapi.context.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1Builder;
+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.ConnectionEndPointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionKey;
+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.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.ConnectivityServiceKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContextBuilder;
+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.context.NotificationContextBuilder;
+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.context.TopologyContextBuilder;
+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.topology.Link;
+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.NwTopologyServiceBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -88,8 +88,8 @@ public class TapiContext {
                     .setValueName("Network Topo Service Name")
                     .build();
 
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1 topologyContext
-                = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1Builder()
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1 topologyContext
+                = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1Builder()
                     .setTopologyContext(new TopologyContextBuilder()
                         .setNwTopologyService(new NwTopologyServiceBuilder()
                             .setTopology(new HashMap<>())
@@ -103,8 +103,8 @@ public class TapiContext {
                         .build())
                     .build();
 
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1 notificationContext
-                = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1Builder()
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1 notificationContext
+                = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1Builder()
                     .setNotificationContext(new NotificationContextBuilder()
                         .setNotification(new HashMap<>())
                         .setNotifSubscription(new HashMap<>())
@@ -163,7 +163,7 @@ public class TapiContext {
                     .build();
             InstanceIdentifier<TopologyContext> topologycontextIID =
                     InstanceIdentifier.builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.topology.rev181210.Context1.class)
+                            .onf.otcc.yang.tapi.topology.rev221121.Context1.class)
                             .child(TopologyContext.class)
                             .build();
             // merge in datastore
@@ -195,22 +195,24 @@ public class TapiContext {
                                           Map<ConnectionKey, Connection> connectionFullMap) {
         // TODO: verify this is correct. Should we identify the context IID with the context UUID??
         try {
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext
                 connectivityContext = new ConnectivityContextBuilder()
                 .setConnectivityService(connServMap)
                 .setConnection(connectionFullMap)
                 .build();
             InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext> connectivitycontextIID =
+                .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext> connectivitycontextIID =
                     InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                         .child(org.opendaylight.yang.gen.v1.urn
-                            .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                            .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                         .build();
             // merge in datastore
             this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, connectivitycontextIID,
                 connectivityContext);
             this.networkTransactionService.commit().get();
             LOG.info("TAPI connectivity merged successfully.");
+            LOG.debug("TAPI connectivity merged successfully for services {}", connServMap.entrySet().iterator()
+                    .next().getKey().toString());
         } catch (InterruptedException | ExecutionException e) {
             LOG.error("Failed to merge TAPI connectivity", e);
         }
@@ -219,10 +221,10 @@ public class TapiContext {
     public void updateTopologyWithCep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, ConnectionEndPoint cep) {
         // TODO: verify this is correct. Should we identify the context IID with the context UUID??
         InstanceIdentifier<OwnedNodeEdgePoint> onepIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
             .child(Topology.class, new TopologyKey(topoUuid))
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
                     new NodeKey(nodeUuid))
             .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid))
             .build();
@@ -230,7 +232,7 @@ public class TapiContext {
             Optional<OwnedNodeEdgePoint> optionalOnep = this.networkTransactionService.read(
                     LogicalDatastoreType.OPERATIONAL, onepIID).get();
             if (!optionalOnep.isPresent()) {
-                LOG.error("ONEP is not present in datastore");
+                LOG.error("ONEP is not present in datastore for topoUuid {}, NodeUuid {}", topoUuid, nodeUuid);
                 return;
             }
             OwnedNodeEdgePoint onep = optionalOnep.orElseThrow();
@@ -261,10 +263,10 @@ public class TapiContext {
 
     public Node getTapiNode(Uuid topoUuid, Uuid nodeUuid) {
         InstanceIdentifier<Node> nodeIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
             .child(Topology.class, new TopologyKey(topoUuid))
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
                         new NodeKey(nodeUuid)).build();
         try {
             Optional<Node> optNode = this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, nodeIID)
@@ -287,13 +289,14 @@ public class TapiContext {
                     .setUuid(onep.getUuid())
                     .setLayerProtocolName(onep.getLayerProtocolName())
                     .setName(onep.getName())
-                    .setSupportedCepLayerProtocolQualifier(onep.getSupportedCepLayerProtocolQualifier())
+                    .setSupportedCepLayerProtocolQualifierInstances(
+                        onep.getSupportedCepLayerProtocolQualifierInstances())
                     .setAdministrativeState(onep.getAdministrativeState())
                     .setOperationalState(onep.getOperationalState())
                     .setLifecycleState(onep.getLifecycleState())
-                    .setTerminationDirection(onep.getTerminationDirection())
-                    .setTerminationState(onep.getTerminationState())
-                    .setLinkPortDirection(onep.getLinkPortDirection())
+//                    .setTerminationDirection(onep.getTerminationDirection())
+//                    .setTerminationState(onep.getTerminationState())
+                    .setDirection(onep.getDirection())
                     .setLinkPortRole(onep.getLinkPortRole());
                 if (onep.getMappedServiceInterfacePoint() != null) {
                     newOnepBuilder.setMappedServiceInterfacePoint(onep.getMappedServiceInterfacePoint());
@@ -314,10 +317,10 @@ public class TapiContext {
 
     public OwnedNodeEdgePoint getTapiNEP(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid) {
         InstanceIdentifier<OwnedNodeEdgePoint> nepIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
             .child(Topology.class, new TopologyKey(topoUuid))
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
                 new NodeKey(nodeUuid)).child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)).build();
         try {
             Optional<OwnedNodeEdgePoint> optNode = this.networkTransactionService
@@ -336,8 +339,8 @@ public class TapiContext {
 
     public Link getTapiLink(Uuid topoUuid, Uuid linkUuid) {
         InstanceIdentifier<Link> linkIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
             .child(Topology.class, new TopologyKey(topoUuid))
             .child(Link.class, new LinkKey(linkUuid)).build();
         try {
@@ -357,7 +360,7 @@ public class TapiContext {
     public Map<TopologyKey, Topology> getTopologyContext() {
         InstanceIdentifier<TopologyContext> topologycontextIID =
                 InstanceIdentifier.builder(Context.class).augmentation(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.topology.rev181210.Context1.class)
+                        .onf.otcc.yang.tapi.topology.rev221121.Context1.class)
                         .child(TopologyContext.class)
                         .build();
         try {
@@ -380,7 +383,7 @@ public class TapiContext {
             InstanceIdentifier<ConnectivityService> connectivityServIID =
                 InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                     .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                     .child(ConnectivityService.class, new ConnectivityServiceKey(serviceUuid))
                     .build();
 
@@ -405,14 +408,14 @@ public class TapiContext {
             return;
         }
         for (org.opendaylight.yang.gen.v1
-                .urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.Connection connection:
+                .urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.Connection connection:
                     connectivityService.getConnection().values()) {
-            deleteConnection(connection.getConnectionUuid(), serviceUuid, connectivityService.getServiceLayer());
+            deleteConnection(connection.getConnectionUuid(), serviceUuid, connectivityService.getLayerProtocolName());
         }
         InstanceIdentifier<ConnectivityService> connectivityServIID =
                 InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                         .child(org.opendaylight.yang.gen.v1.urn
-                                .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                                .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                         .child(ConnectivityService.class, new ConnectivityServiceKey(serviceUuid))
                         .build();
         try {
@@ -427,14 +430,14 @@ public class TapiContext {
     private void deleteConnection(Uuid connectionUuid, Uuid serviceUuid, LayerProtocolName serviceLayer) {
         // First read connectivity service with service uuid and update info
         InstanceIdentifier<org.opendaylight.yang.gen.v1
-            .urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection> connectionIID =
+            .urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection> connectionIID =
             InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                 .child(org.opendaylight.yang.gen.v1.urn
-                    .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                    .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                 .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.Connection.class,
+                        .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection.class,
                     new org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectionKey(
+                        .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey(
                         connectionUuid))
                 .build();
         Connection connection = getConnection(connectionUuid);
@@ -500,7 +503,7 @@ public class TapiContext {
             }
             if (connService.getConnection().containsKey(
                     new org.opendaylight.yang.gen.v1
-                        .urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionKey(
+                        .urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionKey(
                             connection.getUuid()))) {
                 LOG.info("isNotUsedByOtherService: Connection {} is in used by service {}. Cannot remove it from "
                         + "context", connection.getUuid().getValue(), connService.getUuid().getValue());
@@ -508,7 +511,7 @@ public class TapiContext {
             }
             LOG.info("isNotUsedByOtherService: Going to check lower connections");
             for (org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.Connection
+                        .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.Connection
                     conn:connService.getConnection().values()) {
                 Connection connection1 = getConnection(conn.getConnectionUuid());
                 if (connection1 == null || connection1.getLowerConnection() == null) {
@@ -532,7 +535,7 @@ public class TapiContext {
             InstanceIdentifier<Connection> connIID =
                 InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                     .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                     .child(Connection.class, new ConnectionKey(connectionUuid))
                     .build();
 
@@ -553,14 +556,14 @@ public class TapiContext {
         try {
             // First read connectivity service with service uuid and update info
             InstanceIdentifier<org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext> connectivityContextIID =
+                .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext> connectivityContextIID =
                 InstanceIdentifier.builder(Context.class).augmentation(Context1.class)
                     .child(org.opendaylight.yang.gen.v1.urn
-                        .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext.class)
+                        .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext.class)
                     .build();
 
             Optional<org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContext> optConnContext =
+                .onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext> optConnContext =
                     this.networkTransactionService.read(LogicalDatastoreType.OPERATIONAL, connectivityContextIID)
                         .get();
             if (!optConnContext.isPresent()) {
@@ -576,15 +579,15 @@ public class TapiContext {
 
     public ConnectionEndPoint getTapiCEP(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, Uuid cepUuid) {
         InstanceIdentifier<OwnedNodeEdgePoint> nepIID = InstanceIdentifier.builder(Context.class)
-            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1.class)
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContext.class)
+            .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class)
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class)
             .child(Topology.class, new TopologyKey(topoUuid))
-            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node.class,
+            .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class,
                 new NodeKey(nodeUuid)).child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)).build();
         try {
             Optional<OwnedNodeEdgePoint> optNode = this.networkTransactionService
                 .read(LogicalDatastoreType.OPERATIONAL, nepIID).get();
-            if (!optNode.isPresent()) {
+            if (optNode.isEmpty()) {
                 LOG.error(NODE_NOT_PRESENT);
                 return null;
             }
index 2b5c7203af2a8cb9ed23361eb559d2ac84392137..ab23e7c4e60eba762bfdcd5e6a8293a70ccfd306 100644 (file)
@@ -16,16 +16,16 @@ import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOper
 import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
 import org.opendaylight.transportpce.tapi.topology.TapiTopologyException;
 import org.opendaylight.transportpce.tapi.topology.TopologyUtils;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.Service;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceList;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.tapi.context.ServiceInterfacePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.context.ConnectivityService;
-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.topology.rev181210.topology.context.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.Service;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceList;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.tapi.context.ServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService;
+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.topology.rev221121.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 4fbacab6245addcec3cd774ef17f91684ad27815..150af47bdb0fee5af10b33cae684f33c4e182d2b 100644 (file)
@@ -10,11 +10,11 @@ package org.opendaylight.transportpce.tapi.utils;
 import java.util.Set;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-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.LayerProtocolName;
-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.Uuid;
-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.common.rev221121.AdministrativeState;
+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.OperationalState;
+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.topology.rev221121.topology.Link;
 
 public interface TapiLink {
 
index 01ac664141ddebf3d5c78dc3f61c2e1c28acdef7..25d0e64d4a3aad9d9547eb35fca52f0df5b2db09 100644 (file)
@@ -19,44 +19,44 @@ import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.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.NameBuilder;
-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.ProtectionType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.RestorationPolicy;
-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.link.NodeEdgePoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.NodeEdgePointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.link.ResilienceTypeBuilder;
-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.OwnedNodeEdgePointKey;
-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.LinkBuilder;
-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.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.Topology;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.TopologyKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.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.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanism;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.validation.pac.ValidationMechanismBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Context;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.TotalSizeBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.AvailableCapacityBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.pac.TotalPotentialCapacityBuilder;
+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.topology.rev221121.Context1;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.ProtectionType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RestorationPolicy;
+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.link.NodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.NodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.link.ResilienceTypeBuilder;
+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.OwnedNodeEdgePointKey;
+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.Node;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey;
+import org.opendaylight.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.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.validation.pac.ValidationMechanism;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.validation.pac.ValidationMechanismBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
@@ -108,7 +108,7 @@ public class TapiLinkImpl implements TapiLink {
             case TapiStringConstants.OMS_RDM_RDM_LINK:
                 LOG.info("Roadm to roadm link");
                 linkName
-                    .setValueName("OMS link name")
+                    .setValueName(TapiStringConstants.VALUE_NAME_OMS_RDM_RDM_LINK)
                     .setValue(linkKey);
                 break;
             case TapiStringConstants.TRANSITIONAL_LINK:
@@ -118,7 +118,7 @@ public class TapiLinkImpl implements TapiLink {
                     .setValue(linkKey);
                 break;
             case TapiStringConstants.OMS_XPDR_RDM_LINK:
-                LOG.info("Xpdr to roadm link");
+                LOG.info(TapiStringConstants.VALUE_NAME_OTS_XPDR_RDM_LINK);
                 linkName
                     .setValueName("XPDR-RDM link name")
                     .setValue(linkKey);
@@ -126,7 +126,7 @@ public class TapiLinkImpl implements TapiLink {
             case TapiStringConstants.OTN_XPDR_XPDR_LINK:
                 LOG.info("OTN Xpdr to roadm link");
                 linkName
-                    .setValueName("otn link name")
+                    .setValueName(TapiStringConstants.VALUE_NAME_OTN_XPDR_XPDR_LINK)
                     .setValue(linkKey);
                 break;
             default:
@@ -141,7 +141,7 @@ public class TapiLinkImpl implements TapiLink {
             .build();
         LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder()
             .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE)
-            .setQueingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
+            .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE)
             .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE)
             .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE)
             .setTrafficPropertyName("FIXED_LATENCY")
@@ -164,16 +164,16 @@ public class TapiLinkImpl implements TapiLink {
             .setNodeEdgePoint(nepList)
             .setDirection(ForwardingDirection.BIDIRECTIONAL)
             .setAvailableCapacity(new AvailableCapacityBuilder().setTotalSize(
-                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
+                    new TotalSizeBuilder().setUnit(CAPACITYUNITGBPS.VALUE).setValue(Decimal64.valueOf("100")).build())
                 .build())
-            .setResilienceType(new ResilienceTypeBuilder().setProtectionType(ProtectionType.NOPROTECTON)
+            .setResilienceType(new ResilienceTypeBuilder().setProtectionType(ProtectionType.NOPROTECTION)
                 .setRestorationPolicy(RestorationPolicy.NA)
                 .build())
             .setAdministrativeState(setTapiAdminState(adminState))
             .setOperationalState(setTapiOperationalState(operState))
             .setLifecycleState(LifecycleState.INSTALLED)
             .setTotalPotentialCapacity(new TotalPotentialCapacityBuilder().setTotalSize(
-                    new TotalSizeBuilder().setUnit(CapacityUnit.GBPS).setValue(Uint64.valueOf(100)).build())
+                    new TotalSizeBuilder().setUnit(CAPACITYUNITGBPS.VALUE).setValue(Decimal64.valueOf("100")).build())
                 .build())
             .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic))
             .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic))
@@ -188,6 +188,7 @@ public class TapiLinkImpl implements TapiLink {
             .build();
     }
 
+    @Override
     public AdministrativeState setTapiAdminState(String adminState) {
         if (adminState == null) {
             return null;
@@ -197,6 +198,7 @@ public class TapiLinkImpl implements TapiLink {
                 : AdministrativeState.LOCKED;
     }
 
+    @Override
     public AdministrativeState setTapiAdminState(AdminStates adminState1, AdminStates adminState2) {
         if (adminState1 == null || adminState2 == null) {
             return null;
@@ -206,6 +208,7 @@ public class TapiLinkImpl implements TapiLink {
             ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED;
     }
 
+    @Override
     public OperationalState setTapiOperationalState(String operState) {
         if (operState == null) {
             return null;
@@ -214,6 +217,7 @@ public class TapiLinkImpl implements TapiLink {
             ? OperationalState.ENABLED : OperationalState.DISABLED;
     }
 
+    @Override
     public OperationalState setTapiOperationalState(State operState1, State operState2) {
         if (operState1 == null || operState2 == null) {
             return null;
@@ -222,13 +226,14 @@ public class TapiLinkImpl implements TapiLink {
             ? OperationalState.ENABLED : OperationalState.DISABLED;
     }
 
+    @Override
     public String getOperState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) {
         Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
             .getBytes(Charset.forName("UTF-8"))).toString());
         Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
             TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
         Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
-            TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
+            TapiStringConstants.PHTNC_MEDIA_OTS, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
         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))
@@ -237,7 +242,7 @@ public class TapiLinkImpl implements TapiLink {
         Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
             TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
         Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
-            TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
+            TapiStringConstants.PHTNC_MEDIA_OTS, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
         InstanceIdentifier<OwnedNodeEdgePoint> onep1IID = InstanceIdentifier.builder(Context.class)
             .augmentation(Context1.class).child(TopologyContext.class)
             .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid))
@@ -261,13 +266,14 @@ public class TapiLinkImpl implements TapiLink {
         }
     }
 
+    @Override
     public String getAdminState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) {
         Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER
             .getBytes(Charset.forName("UTF-8"))).toString());
         Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
             TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
         Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId,
-            TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
+            TapiStringConstants.PHTNC_MEDIA_OTS, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString());
         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))
@@ -276,7 +282,7 @@ public class TapiLinkImpl implements TapiLink {
         Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
             TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString());
         Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId,
-            TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
+            TapiStringConstants.PHTNC_MEDIA_OTS, destTpId).getBytes(Charset.forName("UTF-8"))).toString());
         InstanceIdentifier<OwnedNodeEdgePoint> onep1IID = InstanceIdentifier.builder(Context.class)
             .augmentation(Context1.class).child(TopologyContext.class)
             .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid))
index eee640f42effb7437473c1ab07c52cd2fcbffb47..1a3521661abad576b2c1b64a2323c9da495812e1 100644 (file)
@@ -7,17 +7,13 @@
  */
 package org.opendaylight.transportpce.tapi.utils;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataObjectModification;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
 import org.opendaylight.mdsal.binding.api.DataTreeModification;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.ServiceInterfacePoints;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.service._interface.points.ServiceEndPoint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.ServiceInterfacePoints;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.service._interface.points.ServiceEndPoint;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,53 +21,42 @@ import org.slf4j.LoggerFactory;
 public class TapiListener implements DataTreeChangeListener<ServiceInterfacePoints> {
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiListener.class);
+    private static final String SE_JAVA_INTF =
+        "interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928"
+            + ".service._interface.points.ServiceEndPoint";
 
     @Override
-    public void onDataTreeChanged(@NonNull Collection<DataTreeModification<ServiceInterfacePoints>> changes) {
+    public void onDataTreeChanged(@NonNull List<DataTreeModification<ServiceInterfacePoints>> changes) {
         LOG.info("onDataTreeChanged in TapiListener");
         for (DataTreeModification<ServiceInterfacePoints> change : changes) {
             DataObjectModification<ServiceInterfacePoints> rootSIP = change.getRootNode();
-            switch (rootSIP.getModificationType()) {
+            switch (rootSIP.modificationType()) {
                 case WRITE:
                     LOG.info("onDataTreeChanged in TapiListener : WRITE");
-                    ServiceInterfacePoints data = rootSIP.getDataAfter();
-                    List<ServiceEndPoint> listSEP = new ArrayList<>(data.getServiceEndPoint().values());
                     MappingUtils.deleteMap();
-                    for (ServiceEndPoint sep : listSEP) {
+                    for (ServiceEndPoint sep : rootSIP.dataAfter().getServiceEndPoint().values()) {
                         MappingUtils.addMapSEP(sep);
                     }
                     MappingUtils.afficheMap();
                     break;
                 case SUBTREE_MODIFIED:
                     LOG.info("onDataTreeChanged in TapiListener : SUBTREE_MODIFIED");
-                    Iterator<? extends DataObjectModification<? extends DataObject>> iterator = rootSIP
-                        .getModifiedChildren().iterator();
-                    while (iterator.hasNext()) {
-                        DataObjectModification<? extends DataObject> dom = iterator.next();
+                    for (DataObjectModification<? extends DataObject> dom :
+                            rootSIP.getModifiedChildren(ServiceEndPoint.class)) {
                         // to delete existing child entry
-                        if (dom.getDataAfter() == null) {
-                            DataObject dataObject = dom.getDataBefore();
-                            ServiceEndPoint sep = null;
-                            sep = (ServiceEndPoint) dataObject;
-                            Uuid uuid = sep.getUuid();
-                            MappingUtils.deleteMapEntry(uuid);
+                        DataObject dataAfter = dom.dataAfter();
+                        if (dataAfter == null) {
+                            MappingUtils.deleteMapEntry(((ServiceEndPoint) dom.dataBefore()).getUuid());
                             MappingUtils.afficheMap();
-                            break;
+                            continue;
                         }
-
                         // to add new child entry
-                        if (dom.getDataType().toString().compareTo("interface org.opendaylight.yang.gen.v1.urn.opendayl"
-                            + "ight.params.xml.ns.yang.tapi.rev180928.service._interface.points.ServiceEndPoint") == 0
-                            && dom.getDataBefore() == null) {
-                            DataObject dataObject = dom.getDataAfter();
-                            ServiceEndPoint sep = null;
-                            sep = (ServiceEndPoint) dataObject;
-                            MappingUtils.addMapSEP(sep);
-                            MappingUtils.afficheMap();
-                        } else {
+                        if (dom.dataBefore() != null || dom.dataType().toString().compareTo(SE_JAVA_INTF) != 0) {
                             LOG.error("data input type is not a valid 'service-end-point'");
+                            continue;
                         }
-                        break;
+                        MappingUtils.addMapSEP((ServiceEndPoint) dataAfter);
+                        MappingUtils.afficheMap();
                     }
                     break;
                 case DELETE:
index c25c8a10477eb286eb7665508b5518b964e3ace5..b36f75c78fe5b57f931b2789a9933ade6974f05f 100644 (file)
@@ -9,17 +9,19 @@ package org.opendaylight.transportpce.tapi.validation;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import org.opendaylight.transportpce.common.OperationResult;
 import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
 import org.opendaylight.transportpce.tapi.validation.checks.ConnConstraintCheck;
 import org.opendaylight.transportpce.tapi.validation.checks.EndPointCheck;
 import org.opendaylight.transportpce.tapi.validation.checks.ResilienceConstraintCheck;
 import org.opendaylight.transportpce.tapi.validation.checks.TopoConstraintCheck;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.ConnectivityConstraint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.ResilienceConstraint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.TopologyConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.ConnectivityConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.ResilienceConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraintKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,14 +66,17 @@ public final class CreateConnectivityServiceValidation {
             return OperationResult.failed(resilienceConstraintCheckResult.getMessage());
         }
 
-        LOG.info("checking TopoConstraint...");
-        TopologyConstraint topoConstraint = input.getTopologyConstraint();
-        ComplianceCheckResult topoConstraintCheckResult = TopoConstraintCheck.check(topoConstraint);
-        if (topoConstraintCheckResult.hasPassed()) {
-            LOG.info("create-connectivity-service topo constraints compliant !");
-        } else {
-            return OperationResult.failed(topoConstraintCheckResult.getMessage());
+        if (input.getTopologyConstraint() != null) {
+            LOG.info("checking TopoConstraint...");
+            Map<TopologyConstraintKey, TopologyConstraint> topoConstraintMap = input.getTopologyConstraint();
+            for (Map.Entry<TopologyConstraintKey, TopologyConstraint> topoConstraint: topoConstraintMap.entrySet()) {
+                ComplianceCheckResult topoConstraintCheckResult = TopoConstraintCheck.check(topoConstraint.getValue());
+                if (!topoConstraintCheckResult.hasPassed()) {
+                    return OperationResult.failed(topoConstraintCheckResult.getMessage());
+                }
+            }
         }
+        LOG.info("create-connectivity-service topo constraints compliant !");
         return OperationResult.ok("Validation successful.");
     }
 
index 490d27c10df2c2288786571367c45623d2b89c0f..247d1de88df0d8be8787618512808a0349e53779 100644 (file)
@@ -8,8 +8,8 @@
 package org.opendaylight.transportpce.tapi.validation.checks;
 
 import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ServiceType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.ConnectivityConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ServiceType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.ConnectivityConstraint;
 
 public final class ConnConstraintCheck {
 
index 105889d1bb905dc8b7d98d71bc4761ca2608e526..6ea4ebc8542ff3d7893640e60df04007a2cbc897 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.transportpce.tapi.validation.checks;
 
 import java.util.List;
 import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index 4f19d6c3c457cf213135ab7d42213c4ba8e92e97..3ca1214938bbd5901ad48861b05009f82f08ded5 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.transportpce.tapi.validation.checks;
 
 import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.ResilienceConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.ResilienceConstraint;
 
 public final class ResilienceConstraintCheck {
 
index 8a07469702b91dc9f2f8531e02c8b314dd7bced2..7e94a539193b305bdd15d07b04b90963254c2abd 100644 (file)
@@ -8,7 +8,7 @@
 package org.opendaylight.transportpce.tapi.validation.checks;
 
 import org.opendaylight.transportpce.servicehandler.validation.checks.ComplianceCheckResult;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.TopologyConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraint;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -23,14 +23,14 @@ public final class TopoConstraintCheck {
         return ((value != null) && (!value.isEmpty()));
     }
 
-    public static ComplianceCheckResult check(TopologyConstraint tc) {
+    public static ComplianceCheckResult check(TopologyConstraint topoConstraint) {
         boolean result = true;
         String message = "";
-        LOG.info("tc = {}", tc);
-        if (checkNull(tc)) {
+        LOG.info("tc = {}", topoConstraint);
+        if (checkNull(topoConstraint)) {
             LOG.info("tc is null");
             message = "Topology constraints are not managet yet";
-        } else if (checkEmpty(tc)) {
+        } else if (checkEmpty(topoConstraint)) {
             result = false;
             message = "Topology constraints are not managet yet";
         }
@@ -42,7 +42,7 @@ public final class TopoConstraintCheck {
         if (tc == null) {
             return true;
         }
-        if (tc.getAvoidTopology() == null) {
+        if (tc.getExcludeTopology() == null) {
             return true;
         }
         if (tc.getExcludeLink() == null) {
@@ -75,7 +75,7 @@ public final class TopoConstraintCheck {
         if (tc == null) {
             return true;
         }
-        if (tc.getAvoidTopology() != null && tc.getAvoidTopology().isEmpty()) {
+        if (tc.getExcludeTopology() != null && tc.getExcludeTopology().isEmpty()) {
             return true;
         }
         if (tc.getExcludeLink() != null && tc.getExcludeLink().isEmpty()) {
@@ -99,7 +99,8 @@ public final class TopoConstraintCheck {
         if (tc.getIncludeTopology() != null && tc.getIncludeTopology().isEmpty()) {
             return true;
         }
-        return tc.getPreferredTransportLayer() != null && tc.getPreferredTransportLayer().isEmpty();
+        //TODO: check this changes : do not understand the rational of this class
+        return tc.getPreferredTransportLayer() != null && tc.getPreferredTransportLayer() == null;
 
     }
 }
index d65f99d96872d8a61b426617a0a2c2bb7fece440..8e1313ea9c32e58d7d921ec250771d2d32e29d29 100644 (file)
@@ -10,9 +10,9 @@ package org.opendaylight.transportpce.tapi.connectivity;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.when;
 
-import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -26,21 +26,24 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.common.InstanceIdentifiers;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.pce.service.PathComputationService;
 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
 import org.opendaylight.transportpce.servicehandler.catalog.CatalogDataStoreOperations;
-import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
 import org.opendaylight.transportpce.servicehandler.listeners.NetworkListener;
 import org.opendaylight.transportpce.servicehandler.listeners.PceListener;
 import org.opendaylight.transportpce.servicehandler.listeners.RendererListener;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.CreateConnectivityServiceImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.DeleteConnectivityServiceImpl;
+import org.opendaylight.transportpce.tapi.listeners.TapiPceNotificationHandler;
+import org.opendaylight.transportpce.tapi.listeners.TapiRendererNotificationHandler;
+import org.opendaylight.transportpce.tapi.listeners.TapiServiceNotificationHandler;
 import org.opendaylight.transportpce.tapi.topology.TopologyUtils;
 import org.opendaylight.transportpce.tapi.utils.TapiConnectivityDataUtils;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
@@ -50,16 +53,23 @@ import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceOutput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreate;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDelete;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceOutput;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,11 +83,11 @@ public class TapiConnectivityImplTest extends AbstractTest {
     @Mock
     private NotificationPublishService notificationPublishService;
     @Mock
-    private TapiPceListenerImpl tapipceListenerImpl;
+    private TapiPceNotificationHandler tapipceNotificationHandler;
     @Mock
-    private TapiRendererListenerImpl tapirendererListenerImpl;
+    private TapiRendererNotificationHandler tapirendererNotificationHandler;
     @Mock
-    private TapiServiceHandlerListenerImpl tapiserviceHandlerListenerImpl;
+    private TapiServiceNotificationHandler tapiserviceNotificationHandler;
     @Mock
     private PceListener pceListenerImpl;
     @Mock
@@ -86,6 +96,14 @@ public class TapiConnectivityImplTest extends AbstractTest {
     private NetworkListener networkModelListenerImpl;
     @Mock
     public CatalogDataStoreOperations catalogDataStoreOperations;
+    @Mock
+    private RpcProviderService rpcProviderService;
+    @Mock
+    private RpcService rpcService;
+    @Mock
+    private ServiceCreate serviceCreate;
+    @Mock
+    private ServiceDelete serviceDelete;
 
     private static final Logger LOG = LoggerFactory.getLogger(TapiConnectivityImplTest.class);
     private static ServiceDataStoreOperations serviceDataStoreOperations;
@@ -129,15 +147,11 @@ public class TapiConnectivityImplTest extends AbstractTest {
 
     @Test
     void createConnServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
-            rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
-            networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations);
-
-        TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(serviceHandler, tapiContext, connectivityUtils,
-            tapipceListenerImpl, tapirendererListenerImpl);
-
-        ListenableFuture<RpcResult<CreateConnectivityServiceOutput>> result =
-            tapiConnectivity.createConnectivityService(new CreateConnectivityServiceInputBuilder().build());
+        when(rpcService.getRpc(any()))
+            .thenReturn(new CreateConnectivityServiceImpl(rpcService, tapiContext, connectivityUtils,
+                    tapipceNotificationHandler, tapirendererNotificationHandler));
+        ListenableFuture<RpcResult<CreateConnectivityServiceOutput>> result = rpcService
+                .getRpc(CreateConnectivityService.class).invoke(new CreateConnectivityServiceInputBuilder().build());
         result.addListener(new Runnable() {
             @Override
             public void run() {
@@ -154,41 +168,34 @@ public class TapiConnectivityImplTest extends AbstractTest {
     @Test
     void createConnServiceShouldBeSuccessfulWhenPerformPCESuccessful()
             throws ExecutionException, InterruptedException {
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
-            rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
-            networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations);
-
+        ConfigurationResponseCommon crc = new ConfigurationResponseCommonBuilder()
+                .setRequestId("request 1")
+                .setResponseCode("OK")
+                .setAckFinalIndicator("requestProcessed").build();
+        when(rpcService.getRpc(any())).thenReturn(serviceCreate);
+        doReturn(RpcResultBuilder
+                .success(new ServiceCreateOutputBuilder()
+                    .setConfigurationResponseCommon(crc)
+                    .build())
+                .buildFuture())
+            .when(serviceCreate).invoke(any());
         CreateConnectivityServiceInput input = TapiConnectivityDataUtils.buildConnServiceCreateInput();
-        when(pathComputationService.pathComputationRequest(any())).thenReturn(Futures.immediateFuture(any()));
 
-        TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(serviceHandler, tapiContext, connectivityUtils,
-            tapipceListenerImpl, tapirendererListenerImpl);
         ListenableFuture<RpcResult<CreateConnectivityServiceOutput>> result =
-            tapiConnectivity.createConnectivityService(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-
-        endSignal.await();
-
+                    new CreateConnectivityServiceImpl(rpcService, tapiContext, connectivityUtils,
+                        tapipceNotificationHandler, tapirendererNotificationHandler)
+                .invoke(input);
+        LOG.info("INPUT= {}", input.toString());
         RpcResult<CreateConnectivityServiceOutput> rpcResult = result.get();
         assertTrue(rpcResult.isSuccessful());
     }
 
     @Test
     void deleteConnServiceShouldBeFailedWithEmptyInput() throws ExecutionException, InterruptedException {
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
-            rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
-            networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations);
-
-        TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(serviceHandler, tapiContext, connectivityUtils,
-            tapipceListenerImpl, tapirendererListenerImpl);
-
-        ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> result =
-            tapiConnectivity.deleteConnectivityService(new DeleteConnectivityServiceInputBuilder().build());
+        when(rpcService.getRpc(any()))
+            .thenReturn(new DeleteConnectivityServiceImpl(rpcService, tapiContext, networkTransactionService));
+        ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> result = rpcService
+                .getRpc(DeleteConnectivityService.class).invoke(new DeleteConnectivityServiceInputBuilder().build());
         result.addListener(new Runnable() {
             @Override
             public void run() {
@@ -204,15 +211,11 @@ public class TapiConnectivityImplTest extends AbstractTest {
 
     @Test
     void deleteConnServiceShouldBeFailedWithNonExistService() throws ExecutionException, InterruptedException {
+        when(rpcService.getRpc(any()))
+            .thenReturn(new DeleteConnectivityServiceImpl(rpcService, tapiContext, networkTransactionService));
         DeleteConnectivityServiceInput input = TapiConnectivityDataUtils.buildConnServiceDeleteInput1();
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
-            rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
-            networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations);
-
-        TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(serviceHandler, tapiContext, connectivityUtils,
-            tapipceListenerImpl, tapirendererListenerImpl);
-        ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> result =
-            tapiConnectivity.deleteConnectivityService(input);
+        ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> result = rpcService
+                .getRpc(DeleteConnectivityService.class).invoke(input);
         result.addListener(new Runnable() {
             @Override
             public void run() {
@@ -228,32 +231,26 @@ public class TapiConnectivityImplTest extends AbstractTest {
 
     @Test
     void deleteConnServiceShouldBeSuccessForExistingService() throws ExecutionException, InterruptedException {
-        when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any()));
-
-        OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(pathComputationService,
-            rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl,
-            networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations);
-
-        TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(serviceHandler, tapiContext, connectivityUtils,
-            tapipceListenerImpl, tapirendererListenerImpl);
-
+        ConfigurationResponseCommon crc = new ConfigurationResponseCommonBuilder()
+            .setRequestId("request 1")
+            .setResponseCode("OK")
+            .setAckFinalIndicator("requestProcessed").build();
+        when(rpcService.getRpc(any())).thenReturn(serviceDelete);
+        doReturn(RpcResultBuilder
+                .success(new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
+                        .ServiceDeleteOutputBuilder()
+                    .setConfigurationResponseCommon(crc)
+                    .build())
+                .buildFuture())
+            .when(serviceDelete).invoke(any());
         ServiceCreateInput createInput = TapiConnectivityDataUtils.buildServiceCreateInput();
         serviceDataStoreOperations.createService(createInput);
         tapiContext.updateConnectivityContext(TapiConnectivityDataUtils.createConnService(), new HashMap<>());
-
         DeleteConnectivityServiceInput input = TapiConnectivityDataUtils.buildConnServiceDeleteInput();
         ListenableFuture<RpcResult<DeleteConnectivityServiceOutput>> result =
-            tapiConnectivity.deleteConnectivityService(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-
-        endSignal.await();
-
+                new DeleteConnectivityServiceImpl(rpcService, tapiContext, networkTransactionService).invoke(input);
+        LOG.debug("RESULT = {}", result.toString());
         RpcResult<DeleteConnectivityServiceOutput> rpcResult = result.get();
         assertTrue(rpcResult.isSuccessful());
     }
-}
\ No newline at end of file
+}
index b815d1b5363d8607ea2e0ee91a94d1c89740d434..4e2a9f22c3e69aad5d6634f1aa0edea5a0c8071f 100644 (file)
@@ -24,16 +24,24 @@ import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
+import org.opendaylight.transportpce.tapi.impl.rpc.CreateConnectivityServiceImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.DeleteConnectivityServiceImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectionDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectivityServiceDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetConnectivityServiceListImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetLinkDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeEdgePointDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointListImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyListImpl;
+import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelNotificationHandler;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TapiCommonService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.TapiTopologyService;
 
 @ExtendWith(MockitoExtension.class)
 public class TapiProviderTest {
@@ -41,21 +49,19 @@ public class TapiProviderTest {
     @Mock
     private DataBroker dataBroker;
     @Mock
-    private RpcProviderService rpcProviderRegistry;
+    private RpcProviderService rpcProviderService;
     @Mock
     private NotificationService notificationService;
     @Mock
+    private RpcService rpcService;
+    @Mock
     private NotificationPublishService notificationPublishService;
     @Mock
     private NetworkTransactionService networkTransactionService;
     @Mock
-    private OrgOpenroadmServiceService serviceHandler;
-    @Mock
     private ServiceDataStoreOperations serviceDataStoreOperations;
     @Mock
-    private TransportpceTapinetworkutilsService tapiNetworkUtils;
-    @Mock
-    private TapiNotificationListener tapiNetworkModelListenerImpl;
+    private TapiNetworkModelNotificationHandler tapiNetworkModelNotificationHandler;
     @Mock
     private TapiNetworkModelService tapiNetworkModelServiceImpl;
 
@@ -63,13 +69,23 @@ public class TapiProviderTest {
     void testInitRegisterTapiToRpcRegistry() {
         when(networkTransactionService.read(any(), any())).thenReturn(Futures.immediateFuture(Optional.empty()));
         doReturn(emptyFluentFuture()).when(networkTransactionService).commit();
-        new TapiProvider(dataBroker, rpcProviderRegistry, notificationService, notificationPublishService,
-                networkTransactionService, serviceHandler, serviceDataStoreOperations, tapiNetworkUtils,
-                tapiNetworkModelListenerImpl, tapiNetworkModelServiceImpl);
+        new TapiProvider(dataBroker, rpcProviderService, rpcService, notificationService, notificationPublishService,
+                networkTransactionService, serviceDataStoreOperations,
+                tapiNetworkModelNotificationHandler, tapiNetworkModelServiceImpl);
 
-        verify(rpcProviderRegistry, times(1)).registerRpcImplementation(any(), any(TapiConnectivityService.class));
-        verify(rpcProviderRegistry, times(2)).registerRpcImplementation(any(), any(TapiTopologyService.class));
-        verify(rpcProviderRegistry, times(2)).registerRpcImplementation(any(), any(TapiCommonService.class));
-        verify(dataBroker, times(4)).registerDataTreeChangeListener(any(), any());
+        verify(rpcProviderService, times(1)).registerRpcImplementations(
+                any(CreateConnectivityServiceImpl.class),
+                any(GetConnectivityServiceDetailsImpl.class),
+                any(GetConnectionDetailsImpl.class),
+                any(DeleteConnectivityServiceImpl.class),
+                any(GetConnectivityServiceListImpl.class),
+                any(GetNodeDetailsImpl.class),
+                any(GetTopologyDetailsImpl.class),
+                any(GetNodeEdgePointDetailsImpl.class),
+                any(GetLinkDetailsImpl.class),
+                any(GetTopologyListImpl.class),
+                any(GetServiceInterfacePointDetailsImpl.class),
+                any(GetServiceInterfacePointListImpl.class));
+        verify(dataBroker, times(4)).registerTreeChangeListener(any(), any());
     }
-}
\ No newline at end of file
+}
index 4c72bd5439ef5a720abeba8509bede4b364fad5b..57e4ba097f17b7dcdac1e6dc6ee8ea69e2f853a5 100644 (file)
@@ -14,6 +14,7 @@ import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.hasItems;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -43,13 +44,13 @@ import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmLinkType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmLinkType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
 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;
@@ -66,37 +67,37 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 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.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.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.global._class.Name;
-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.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.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.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.node.NodeRuleGroup;
-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.OwnedNodeEdgePointKey;
-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.Rule;
+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.Direction;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LAYERPROTOCOLQUALIFIER;
+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.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU0;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN;
+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.PHOTONICLAYERQUALIFIEROTSi;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULECANNOTFORWARDACROSSGROUP;
+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.RuleType;
+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.OwnedNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances;
+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.Rule;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -210,14 +211,14 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 networkPortList.add(tp.getTpId().getValue());
             }
         }
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         tapiFactory.convertNode(tpdr, networkPortList);
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
+        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8")))
             .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node dsrNode = tapiFactory
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory
             .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(dsrNodeUuid));
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(dsrNodeUuid));
         Uuid enetworkNepUuid = new Uuid(
             UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eODU+XPDR1-CLIENT1").getBytes(Charset.forName("UTF-8")))
                 .toString());
@@ -231,32 +232,6 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         OwnedNodeEdgePoint inepN = dsrNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inetworkNepUuid));
         assertNull(inepN.getAdministrativeState(), "Administrative State should not be present");
         assertNull(inepN.getOperationalState(), "Operational State should not be present");
-
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node otsiNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(otsiNodeUuid));
-        Uuid enepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid));
-        assertNull(enep.getAdministrativeState(), "Administrative State should not be present");
-        assertNull(enep.getOperationalState(), "Operational State should not be present");
-
-        Uuid inepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid));
-        assertNull(inep.getAdministrativeState(), "Administrative State should not be present");
-        assertNull(inep.getOperationalState(), "Operational State should not be present");
-
-        Uuid photnepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint photnep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(photnepUuid));
-        assertNull(photnep.getAdministrativeState(), "Administrative State should not be present");
-        assertNull(photnep.getOperationalState(), "Operational State should not be present");
     }
 
     @Test
@@ -269,14 +244,14 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 networkPortList.add(tp.getTpId().getValue());
             }
         }
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         tapiFactory.convertNode(tpdr, networkPortList);
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
+        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8")))
             .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node dsrNode = tapiFactory
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory
             .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(dsrNodeUuid));
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(dsrNodeUuid));
         Uuid enetworkNepUuid = new Uuid(
             UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eODU+XPDR1-CLIENT1").getBytes(Charset.forName("UTF-8")))
                 .toString());
@@ -292,35 +267,6 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         assertEquals(AdministrativeState.LOCKED, inepN.getAdministrativeState(),
             "Administrative State should be Locked");
         assertEquals(OperationalState.DISABLED, inepN.getOperationalState(), "Operational State should be Disabled");
-
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node otsiNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(otsiNodeUuid));
-        Uuid enepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid));
-        assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled");
-
-        Uuid inepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid));
-        assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled");
-
-        Uuid photnepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint photnep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(photnepUuid));
-        assertEquals(AdministrativeState.LOCKED, photnep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, photnep.getOperationalState(), "Operational State should be Disabled");
     }
 
     @Test
@@ -333,14 +279,14 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 networkPortList.add(tp.getTpId().getValue());
             }
         }
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         tapiFactory.convertNode(tpdr, networkPortList);
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
+        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8")))
             .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node dsrNode = tapiFactory
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory
             .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(dsrNodeUuid));
+                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(dsrNodeUuid));
         Uuid enetworkNepUuid = new Uuid(
             UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eODU+XPDR1-CLIENT1").getBytes(Charset.forName("UTF-8")))
                 .toString());
@@ -357,39 +303,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             "Administrative State should be Locked");
         assertEquals(OperationalState.DISABLED, inepN.getOperationalState(), "Operational State should be Disabled");
 
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node otsiNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(otsiNodeUuid));
-        Uuid enepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid));
-        assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled");
-
-        Uuid inepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid));
-        assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled");
-
-        Uuid photnepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint photnep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(photnepUuid));
-        assertEquals(AdministrativeState.LOCKED, photnep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, photnep.getOperationalState(), "Operational State should be Disabled");
     }
 
     @Test
     void convertNodeForTransponder100G() {
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : tpdr100G.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -397,32 +315,22 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(tpdr100G, networkPortList);
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes
             = tapiFactory.getTapiNodes().values().stream()
             .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
             .collect(Collectors.toList());
 
-        assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2");
-        assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2");
+        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)");
+        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link");
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkDsrNode(tapiNodes.get(1), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1");
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
+        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8")))
             .toString());
-        checkOtsiNode(tapiNodes.get(0), otsiNodeUuid, "tpdr", "XPDR-A1-XPDR1");
-
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link> tapiLinks
-            = tapiFactory.getTapiLinks().values().stream()
-            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        checkTransitionalLink(tapiLinks.get(1), dsrNodeUuid, otsiNodeUuid,
-            "XPDR-A1-XPDR1+iODU+XPDR1-NETWORK1", "XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1", "XPDR-A1-XPDR1");
+        checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1");
     }
 
     @Test
     void convertNodeForOtnMuxponder() {
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -430,31 +338,21 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxA, networkPortList);
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes
             = tapiFactory.getTapiNodes().values().stream()
             .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
             .collect(Collectors.toList());
 
-        assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2");
-        assertEquals(1, tapiFactory.getTapiLinks().size(), "Link list size should be 1");
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
+        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)");
+        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link");
+        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8")))
             .toString());
         checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "mux", "SPDR-SA1-XPDR1");
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "mux", "SPDR-SA1-XPDR1");
-
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link> tapiLinks
-            = tapiFactory.getTapiLinks().values().stream()
-            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        checkTransitionalLink(tapiLinks.get(0), dsrNodeUuid, otsiNodeUuid,
-            "SPDR-SA1-XPDR1+iODU+XPDR1-NETWORK1", "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1", "SPDR-SA1-XPDR1");
     }
 
     @Test
     void convertNodeForOtnSwitch() {
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : otnSwitch.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -462,86 +360,87 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnSwitch, networkPortList);
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes
             = tapiFactory.getTapiNodes().values().stream()
             .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
             .collect(Collectors.toList());
 
-        assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2");
-        assertEquals(4, tapiFactory.getTapiLinks().size(), "Link list size should be 4");
+        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)");
+        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link");
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+DSR".getBytes(Charset.forName("UTF-8")))
+        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+XPONDER".getBytes(Charset.forName("UTF-8")))
             .toString());
         checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "switch", "SPDR-SA1-XPDR2");
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "switch", "SPDR-SA1-XPDR2");
-
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link> tapiLinks
-            = tapiFactory.getTapiLinks().values().stream()
-            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        checkTransitionalLink(tapiLinks.get(2), dsrNodeUuid, otsiNodeUuid,
-            "SPDR-SA1-XPDR2+iODU+XPDR2-NETWORK4", "SPDR-SA1-XPDR2+iOTSi+XPDR2-NETWORK4", "SPDR-SA1-XPDR2");
     }
 
     @Test
     void convertNodeForRoadmWhenNoOtnMuxAttached() {
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
-        tapiFactory.convertRoadmNode(roadmA, openroadmNet);
+        ConvertORTopoToTapiFullTopo tapiFullFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        tapiFullFactory.convertRoadmNode(roadmA, openroadmNet, "Full");
 
-        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1");
-        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be empty");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            = tapiFactory.getTapiNodes().values().stream().collect(Collectors.toList());
+        assertEquals(1, tapiFullFactory.getTapiNodes().size(), "Node list size should be 1");
+        assertEquals(0, tapiFullFactory.getTapiLinks().size(), "Link list size should be empty");
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes
+            = tapiFullFactory.getTapiNodes().values().stream().collect(Collectors.toList());
         Uuid roadmNodeUuid = new Uuid(UUID.nameUUIDFromBytes((roadmA.getNodeId().getValue() + "+PHOTONIC_MEDIA")
             .getBytes(Charset.forName("UTF-8"))).toString());
-        checkOtsiNode(tapiNodes.get(0), roadmNodeUuid, "roadm", "ROADM-A1");
+        checkOtsiNode(tapiNodes.get(getNodeRank("ROADM-A1", tapiNodes)), roadmNodeUuid, "roadm", "ROADM-A1");
     }
 
     @Test
     void convertNodeForRoadmWhenRoadmNeighborAttached() {
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
-        tapiFactory.convertRoadmNode(roadmA, openroadmNet);
-        tapiFactory.convertRoadmNode(roadmC, openroadmNet);
+        ConvertORTopoToTapiFullTopo tapiFullFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        tapiFullFactory.convertRoadmNode(roadmA, openroadmNet, "Full");
+        tapiFullFactory.convertRoadmNode(roadmC, openroadmNet, "Full");
 
         List<Link> rdmTordmLinkList = ortopoLinks.values().stream()
             .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.ROADMTOROADM))
             .collect(Collectors.toList());
-        tapiFactory.convertRdmToRdmLinks(rdmTordmLinkList);
-
-        assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2");
-        assertEquals(1, tapiFactory.getTapiLinks().size(), "Link list size should be 1");
-
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            = tapiFactory.getTapiNodes().values().stream().collect(Collectors.toList());
+        tapiFullFactory.convertRdmToRdmLinks(rdmTordmLinkList);
+
+        assertEquals(2, tapiFullFactory.getTapiNodes().size(), "Node list size should be 2");
+        assertEquals(1, tapiFullFactory.getTapiLinks().size(), "Link list size should be 1");
+
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes
+            = tapiFullFactory.getTapiNodes().values().stream().collect(Collectors.toList());
+        int myInt = 0;
+        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node : tapiNodes) {
+            if (node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
+                && !node.getLayerProtocolName().contains(LayerProtocolName.DSR)) {
+                LOG.info("LOOP ROADM node found at rank {}, with Name {} and Uuid {}",
+                    myInt, node.getName().toString(), node.getUuid());
+            }
+            myInt++;
+        }
         Uuid roadmaNodeUuid = new Uuid(UUID.nameUUIDFromBytes((roadmA.getNodeId().getValue() + "+PHOTONIC_MEDIA")
             .getBytes(Charset.forName("UTF-8"))).toString());
-        checkOtsiNode(tapiNodes.get(1), roadmaNodeUuid, "roadm", "ROADM-A1");
+        LOG.info("ROADM node found at rank {} from getrank", getNodeRank("ROADM-A1", tapiNodes));
+        checkOtsiNode(tapiNodes.get(getNodeRank("ROADM-A1", tapiNodes)), roadmaNodeUuid, "roadm", "ROADM-A1");
 
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link> links
-            = tapiFactory.getTapiLinks().values().stream()
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link> links
+            = tapiFullFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
         Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-A1+PHOTONIC_MEDIA".getBytes(Charset.forName("UTF-8")))
             .toString());
         Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-C1+PHOTONIC_MEDIA".getBytes(Charset.forName("UTF-8")))
             .toString());
-        Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-A1+PHOTONIC_MEDIA+DEG2-TTP-TXRX"
+        Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-A1+PHOTONIC_MEDIA_OTS+DEG2-TTP-TXRX"
             .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-C1+PHOTONIC_MEDIA+DEG1-TTP-TXRX")
+        Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-C1+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRX")
             .getBytes(Charset.forName("UTF-8"))).toString());
         Uuid linkUuid =
             new Uuid(UUID.nameUUIDFromBytes(
-                "ROADM-C1+PHOTONIC_MEDIA+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA+DEG2-TTP-TXRX"
+                "ROADM-C1+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA_OTS+DEG2-TTP-TXRX"
                     .getBytes(Charset.forName("UTF-8"))).toString());
         checkOmsLink(links.get(0), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid,
-            "ROADM-C1+PHOTONIC_MEDIA+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA+DEG2-TTP-TXRX");
+            "ROADM-C1+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA_OTS+DEG2-TTP-TXRX");
     }
 
     @Test
     void convertNodeForRoadmWhenOtnMuxAttached() {
-        ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORTopoToTapiFullTopo tapiFullFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -549,7 +448,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxA, networkPortListA);
-        tapiFactory.convertRoadmNode(roadmA, openroadmNet);
+        tapiFullFactory.setTapiNodes(tapiFactory.getTapiNodes());
+        tapiFullFactory.convertRoadmNode(roadmA, openroadmNet, "Full");
         List<Link> xponderOutLinkList = ortopoLinks.values().stream()
             .filter(lk -> lk.augmentation(Link1.class).getLinkType().equals(OpenroadmLinkType.XPONDEROUTPUT))
             .filter(lk1 -> ((lk1.getSource().getSourceNode().equals(otnMuxA.getNodeId())
@@ -565,41 +465,48 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                     || lk1.getDestination().getDestNode().getValue().contains(roadmA.getNodeId().getValue()))))
             .collect(Collectors.toList());
         xponderInLinkList.addAll(xponderOutLinkList);
-        tapiFactory.convertXpdrToRdmLinks(xponderInLinkList);
-        assertEquals(3, tapiFactory.getTapiNodes().size(), "Node list size should be 3");
-        assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            = tapiFactory.getTapiNodes().values().stream()
+        tapiFullFactory.convertXpdrToRdmLinks(xponderInLinkList);
+        assertEquals(2, tapiFullFactory.getTapiNodes().size(),
+            "Node list size should be 2 (XPDR, DSR-ODU merged; ROADM)");
+        assertEquals(1, tapiFullFactory.getTapiLinks().size(),
+            "Link list size should be 1 : no more transitional link");
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeMap =
+            tapiFactory.getTapiNodes();
+        nodeMap.putAll(tapiFullFactory.getTapiNodes());
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes
+            = nodeMap.values().stream()
             .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
             .collect(Collectors.toList());
         Uuid roadmNodeUuid = new Uuid(UUID.nameUUIDFromBytes((roadmA.getNodeId().getValue() + "+PHOTONIC_MEDIA")
             .getBytes(Charset.forName("UTF-8"))).toString());
-        checkOtsiNode(tapiNodes.get(1), roadmNodeUuid, "roadm", "ROADM-A1");
+        checkOtsiNode(tapiNodes.get(getNodeRank("ROADM-A1", tapiNodes)), roadmNodeUuid, "roadm", "ROADM-A1");
 
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link> links
-            = tapiFactory.getTapiLinks().values().stream()
-            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
+        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8")))
             .toString());
         Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-A1+PHOTONIC_MEDIA".getBytes(Charset.forName("UTF-8")))
             .toString());
-        Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1"
+        LOG.info("ROADM-A1+PHOTONIC_MEDIA UUID is {}", node2Uuid);
+        Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1"
             .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-A1+PHOTONIC_MEDIA+SRG1-PP2-TXRX")
+        Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-A1+PHOTONIC_MEDIA_OTS+SRG1-PP2-TXRX")
             .getBytes(Charset.forName("UTF-8"))).toString());
         Uuid linkUuid =
             new Uuid(UUID.nameUUIDFromBytes(
-                "ROADM-A1+PHOTONIC_MEDIA+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1"
+                "ROADM-A1+PHOTONIC_MEDIA_OTS+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1"
                     .getBytes(Charset.forName("UTF-8"))).toString());
-        checkXpdrRdmLink(links.get(1), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid,
-            "ROADM-A1+PHOTONIC_MEDIA+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1");
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link> links
+            = tapiFullFactory.getTapiLinks().values().stream()
+            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
+            .collect(Collectors.toList());
+        checkXpdrRdmLink(links.get(0), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid,
+            "ROADM-A1+PHOTONIC_MEDIA_OTS+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1");
     }
 
-    private void checkDsrNode(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node,
-            Uuid nodeUuid, String dsrNodeType, String nodeId) {
-        assertEquals(nodeUuid, node.getUuid(), "incorrect node uuid");
-        assertEquals(nodeId + "+DSR", node.getName().get(new NameKey("dsr/odu node name")).getValue(),
+    private void checkDsrNode(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node,
+            Uuid node9Uuid, String dsrNodeType, String nodeId) {
+        assertEquals(node9Uuid, node.getUuid(), "incorrect node uuid");
+        assertEquals(nodeId + "+XPONDER", node.getName().get(new NameKey("dsr/odu node name")).getValue(),
             "incorrect node name");
         assertEquals(AdministrativeState.UNLOCKED, node.getAdministrativeState(),
             "administrative state should be UNLOCKED");
@@ -607,7 +514,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         assertEquals(OperationalState.ENABLED, node.getOperationalState(), "operational state should be ENABLED");
         assertThat("one value-name should be 'dsr/odu node name'",
             new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("dsr/odu node name")));
-        assertEquals(2, node.getLayerProtocolName().size(), "dsr node should manage 2 protocol layers : dsr and odu");
+        assertEquals(4, node.getLayerProtocolName().size(), "dsr node should manage 4 protocol layers : dsr and odu"
+            + " DIGITALOTN, PHOTONICMEDIA");
         assertThat("dsr node should manage 2 protocol layers : dsr and odu",
             node.getLayerProtocolName(), hasItems(LayerProtocolName.DSR, LayerProtocolName.ODU));
         List<OwnedNodeEdgePoint> inepsN = node.nonnullOwnedNodeEdgePoint().values().stream()
@@ -646,7 +554,9 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 List<NodeRuleGroup> nrgList = node.nonnullNodeRuleGroup().values().stream()
                     .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
                     .collect(Collectors.toList());
-                checkNodeRuleGroupForSwitchDSR(nrgList, client4NepUuid, enetworkNepUuid, nodeUuid);
+// keep trace of the previous test performed before the structure of the NRG was modified
+//                checkNodeRuleGroupForSwitchDSR(nrgList, client4NepUuid, enetworkNepUuid, node9Uuid);
+                checkNodeRuleGroupForSwitchDSR(nrgList, client4NepUuid, inetworkNepUuid, node9Uuid);
                 break;
             case "mux":
                 nepsC = node.nonnullOwnedNodeEdgePoint().values().stream()
@@ -663,19 +573,21 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 checkNepClient10G(nep3, client3NepUuid, nodeId + "+DSR+XPDR1-CLIENT3", "NodeEdgePoint_C");
                 OwnedNodeEdgePoint enep4 = enepsN.get(3);
                 OwnedNodeEdgePoint inep4 = inepsN.get(0);
-                Uuid enetworkNepUuid2 = new Uuid(
+                Uuid eclientNepUuid2 = new Uuid(
                     UUID.nameUUIDFromBytes((nodeId + "+eODU+XPDR1-CLIENT3").getBytes(Charset.forName("UTF-8")))
                         .toString());
                 Uuid inetworkNepUuid2 = new Uuid(
                     UUID.nameUUIDFromBytes((nodeId + "+iODU+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
                         .toString());
-                checkNepeODU4(enep4, enetworkNepUuid2, nodeId + "+eODU+XPDR1-CLIENT3", "eNodeEdgePoint_N", false);
+                checkNepeODU4(enep4, eclientNepUuid2, nodeId + "+eODU+XPDR1-CLIENT3", "eNodeEdgePoint_N", false);
                 checkNepNetworkODU4(inep4, inetworkNepUuid2, nodeId + "+iODU+XPDR1-NETWORK1", "iNodeEdgePoint_N",
                     true);
                 List<NodeRuleGroup> nrgList2 = node.nonnullNodeRuleGroup().values().stream()
                     .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
                     .collect(Collectors.toList());
-                checkNodeRuleGroupForMuxDSR(nrgList2, client3NepUuid, enetworkNepUuid2, nodeUuid);
+// keep trace of the previous test performed before the structure of the NRG was modified
+//                checkNodeRuleGroupForMuxDSR(nrgList2, client3NepUuid, eclientNepUuid2, node9Uuid);
+                checkNodeRuleGroupForMuxDSR(nrgList2, client3NepUuid, inetworkNepUuid2, node9Uuid);
                 break;
             case "tpdr":
                 nepsC = node.nonnullOwnedNodeEdgePoint().values().stream()
@@ -704,7 +616,9 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 List<NodeRuleGroup> nrgList3 = node.nonnullNodeRuleGroup().values().stream()
                     .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
                     .collect(Collectors.toList());
-                checkNodeRuleGroupForTpdrDSR(nrgList3, client1NepUuid, enetworkNepUuid3, nodeUuid);
+// keep trace of the previous test performed before the structure of the NRG was modified
+//                checkNodeRuleGroupForTpdrDSR(nrgList3, client1NepUuid, enetworkNepUuid3, node9Uuid);
+                checkNodeRuleGroupForTpdrDSR(nrgList3, client1NepUuid, inetworkNepUuid3, node9Uuid);
                 break;
             default:
                 fail();
@@ -713,20 +627,24 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
     }
 
     private void checkOtsiNode(
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node,
             Uuid nodeUuid, String otsiNodeType, String nodeId) {
+        if (!node.getUuid().equals(nodeUuid)) {
+            LOG.info("ERRORUUID on Node.getNodeId {}, NodeId {}", node.getName().toString(), nodeId);
+            LOG.info("ERRORUUID TapiUuid {}, transmitted Node Uuid {}", node.getUuid(), nodeUuid);
+        }
         assertEquals(nodeUuid, node.getUuid(), "incorrect node uuid");
         List<OwnedNodeEdgePoint> nepsI = null;
         List<OwnedNodeEdgePoint> nepsE = null;
         List<OwnedNodeEdgePoint> nepsP = null;
-        List<OwnedNodeEdgePoint> nepsMc = null;
-        List<OwnedNodeEdgePoint> nepsOtsimc = null;
+        List<OwnedNodeEdgePoint> nepsOMS = null;
+        List<OwnedNodeEdgePoint> nepsOTS = null;
         List<OwnedNodeEdgePoint> nepsPhot = null;
         if (!otsiNodeType.equals("roadm")) {
-            assertEquals(nodeId + "+OTSi", node.getName().get(new NameKey("otsi node name")).getValue(),
+            assertEquals(nodeId + "+XPONDER", node.getName().get(new NameKey("dsr/odu node name")).getValue(),
                 "incorrect node name");
             assertThat("one value-name should be 'dsr/odu node name'",
-                new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("otsi node name")));
+                new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("dsr/odu node name")));
             nepsI = node.nonnullOwnedNodeEdgePoint().values().stream()
                 .filter(n -> n.getName().containsKey(new NameKey("iNodeEdgePoint")))
                 .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue()))
@@ -744,18 +662,22 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 "incorrect node name");
             assertThat("one value-name should be 'dsr/odu node name'",
                 new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("roadm node name")));
-            nepsMc = node.nonnullOwnedNodeEdgePoint().values().stream()
-                .filter(n -> n.getName().containsKey(new NameKey("MEDIA_CHANNELNodeEdgePoint")))
+            nepsOMS = node.nonnullOwnedNodeEdgePoint().values().stream()
+                .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OMSNodeEdgePoint")))
                 .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue()))
                 .collect(Collectors.toList());
-            nepsOtsimc = node.nonnullOwnedNodeEdgePoint().values().stream()
-                .filter(n -> n.getName().containsKey(new NameKey("OTSi_MEDIA_CHANNELNodeEdgePoint")))
+            nepsOTS = node.nonnullOwnedNodeEdgePoint().values().stream()
+                .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OTSNodeEdgePoint")))
                 .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue()))
                 .collect(Collectors.toList());
             nepsPhot = node.nonnullOwnedNodeEdgePoint().values().stream()
-                .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIANodeEdgePoint")))
+                .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OMSNodeEdgePoint")))
                 .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue()))
                 .collect(Collectors.toList());
+            nepsPhot.addAll(node.nonnullOwnedNodeEdgePoint().values().stream()
+                .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OTSNodeEdgePoint")))
+                .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue()))
+                .collect(Collectors.toList()));
         }
         assertEquals(AdministrativeState.UNLOCKED, node.getAdministrativeState(),
             "administrative state should be UNLOCKED");
@@ -778,9 +700,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 checkNepOtsiNode(nep1, inepUuid, nodeId + "+iOTSi+XPDR2-NETWORK2", "iNodeEdgePoint", true);
                 OwnedNodeEdgePoint nep2 = nepsE.get(0);
                 Uuid enepUuid = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR2-NETWORK2").getBytes(Charset.forName("UTF-8")))
+                    UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+XPDR2-NETWORK2")
+                        .getBytes(Charset.forName("UTF-8")))
                         .toString());
-                checkNepOtsiNode(nep2, enepUuid, nodeId + "+eOTSi+XPDR2-NETWORK2", "eNodeEdgePoint", false);
+                checkNepOtsiNode(nep2, enepUuid, nodeId + "+PHOTONIC_MEDIA_OTS+XPDR2-NETWORK2",
+                    "eNodeEdgePoint", false);
                 OwnedNodeEdgePoint photNep = nepsP.get(1);
                 Uuid pnepUuid = new Uuid(
                     UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA+XPDR2-NETWORK2")
@@ -798,9 +722,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 assertEquals(1, nepsP.size(), "Mux-OTSi node should have 1 photNEPs");
                 OwnedNodeEdgePoint nep3 = nepsE.get(0);
                 Uuid enepUuid2 = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
+                    UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1")
+                        .getBytes(Charset.forName("UTF-8")))
                         .toString());
-                checkNepOtsiNode(nep3, enepUuid2, nodeId + "+eOTSi+XPDR1-NETWORK1", "eNodeEdgePoint", false);
+                checkNepOtsiNode(nep3, enepUuid2, nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1",
+                    "eNodeEdgePoint", false);
                 OwnedNodeEdgePoint nep4 = nepsI.get(0);
                 Uuid inepUuid2 = new Uuid(
                     UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
@@ -823,9 +749,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 assertEquals(2, nepsP.size(), "Tpdr-OTSi node should have 2 photNEPs");
                 OwnedNodeEdgePoint nep5 = nepsE.get(0);
                 Uuid enepUuid3 = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
+                    UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1")
+                        .getBytes(Charset.forName("UTF-8")))
                         .toString());
-                checkNepOtsiNode(nep5, enepUuid3, nodeId + "+eOTSi+XPDR1-NETWORK1", "eNodeEdgePoint", false);
+                checkNepOtsiNode(nep5, enepUuid3, nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1",
+                    "eNodeEdgePoint", false);
                 OwnedNodeEdgePoint nep6 = nepsI.get(0);
                 Uuid inepUuid3 = new Uuid(
                     UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
@@ -843,47 +771,46 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
                 checkNodeRuleGroupForTpdrOTSi(nrgList3, enepUuid3, inepUuid3, nodeUuid);
                 break;
             case "roadm":
-                assertEquals(10, nepsMc.size(), "Roadm node should have 10 MC NEPs");
-                assertEquals(10, nepsOtsimc.size(), "Roadm node should have 10 OTSiMC NEPs");
-                assertEquals(10, nepsPhot.size(), "Roadm node should have 10 PHOT_MEDIA NEPs");
+// Keep trace of MC NEP test to be restored after the new policy for creating NEP is applied
+//                assertEquals(0, nepsMc.size(), "MC NEP no more configured, Roadm node should have 0 MC NEPs");
+//                assertEquals(0, nepsOtsimc.size(), "Roadm node should have 10 OTSiMC NEPs");
+                assertEquals(12, nepsPhot.size(), "Roadm node should have 12 PHOT_MEDIA NEPs (2x4 OTS +2x(OTS+OMS)");
                 // For Degree node
-                OwnedNodeEdgePoint nep7 = nepsMc.get(6);
+                OwnedNodeEdgePoint nep7 = nepsOMS.get(getRank("DEG1-TTP", nepsOMS));
                 Uuid mcnepUuid3 = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId + "+MEDIA_CHANNEL+DEG1-TTP-TXRX").getBytes(Charset.forName("UTF-8")))
-                        .toString());
-                checkNepOtsiRdmNode(nep7, mcnepUuid3, nodeId + "+MEDIA_CHANNEL+DEG1-TTP-TXRX",
-                    "MEDIA_CHANNELNodeEdgePoint", false);
-                OwnedNodeEdgePoint nep8 = nepsOtsimc.get(0);
-                Uuid otmcnepUuid3 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+OTSi_MEDIA_CHANNEL+DEG1-TTP-TXRX")
+                    UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX").getBytes(Charset
+                        .forName("UTF-8"))).toString());
+                checkNepOtsiRdmNode(nep7, mcnepUuid3, nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX",
+                    "PHOTONIC_MEDIA_OMSNodeEdgePoint", false);
+                OwnedNodeEdgePoint nep8 = nepsOTS.get(getRank("DEG1-TTP", nepsOTS));
+                Uuid otmcnepUuid3 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRX")
                     .getBytes(Charset.forName("UTF-8"))).toString());
-                checkNepOtsiRdmNode(nep8, otmcnepUuid3, nodeId + "+OTSi_MEDIA_CHANNEL+DEG1-TTP-TXRX",
-                    "OTSi_MEDIA_CHANNELNodeEdgePoint", false);
-                OwnedNodeEdgePoint photNep3 = nepsPhot.get(3);
-                Uuid pnep3Uuid = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA+DEG1-TTP-TXRX")
+                checkNepOtsiRdmNode(nep8, otmcnepUuid3, nodeId + "+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRX",
+                    "PHOTONIC_MEDIA_OTSNodeEdgePoint", false);
+                OwnedNodeEdgePoint omsNep3 = nepsOMS.get(getRank("DEG1-TTP", nepsOMS));
+                Uuid omsNep3Uuid = new Uuid(
+                    UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX")
                         .getBytes(Charset.forName("UTF-8"))).toString());
-                checkNepOtsiRdmNode(photNep3, pnep3Uuid, nodeId + "+PHOTONIC_MEDIA+DEG1-TTP-TXRX",
-                    "PHOTONIC_MEDIANodeEdgePoint", false);
+                checkNepOtsiRdmNode(omsNep3, omsNep3Uuid, nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX",
+                    "PHOTONIC_MEDIA_OMSNodeEdgePoint", false);
                 // For srg node
-                OwnedNodeEdgePoint nep9 = nepsMc.get(0);
-                Uuid mcnepUuid4 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+MEDIA_CHANNEL+SRG1-PP1-TXRX")
-                    .getBytes(Charset.forName("UTF-8"))).toString());
-                checkNepOtsiRdmNode(nep9, mcnepUuid4, nodeId + "+MEDIA_CHANNEL+SRG1-PP1-TXRX",
-                    "MEDIA_CHANNELNodeEdgePoint", true);
-                OwnedNodeEdgePoint nep10 = nepsOtsimc.get(9);
-                Uuid otmcnepUuid4 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+OTSi_MEDIA_CHANNEL+SRG1-PP1-TXRX")
+                OwnedNodeEdgePoint nep10 = nepsOTS.get(getRank("SRG1-PP1", nepsOTS));
+                Uuid otsnepUuid4 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP1-TXRX")
                     .getBytes(Charset.forName("UTF-8"))).toString());
-                checkNepOtsiRdmNode(nep10, otmcnepUuid4, nodeId + "+OTSi_MEDIA_CHANNEL+SRG1-PP1-TXRX",
-                    "OTSi_MEDIA_CHANNELNodeEdgePoint", false);
-                OwnedNodeEdgePoint photNep4 = nepsPhot.get(4);
-                Uuid pnep4Uuid = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA+SRG1-PP1-TXRX")
+                checkNepOtsiRdmNode(nep10, otsnepUuid4, nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP1-TXRX",
+                    "PHOTONIC_MEDIA_OTSNodeEdgePoint", false);
+                OwnedNodeEdgePoint otsNep4 = nepsOTS.get(getRank("SRG1-PP3", nepsOTS));
+                Uuid otsNep4Uuid = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP3-TXRX")
                     .getBytes(Charset.forName("UTF-8"))).toString());
-                checkNepOtsiRdmNode(photNep4, pnep4Uuid, nodeId + "+PHOTONIC_MEDIA+SRG1-PP1-TXRX",
-                    "PHOTONIC_MEDIANodeEdgePoint", false);
+                checkNepOtsiRdmNode(otsNep4, otsNep4Uuid, nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP3-TXRX",
+                    "PHOTONIC_MEDIA_OTSNodeEdgePoint", false);
                 List<NodeRuleGroup> nrgList4 = node.nonnullNodeRuleGroup().values().stream()
-                    .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
+                    .sorted((nrg1, nrg2) -> nrg1.getName().entrySet().iterator().next().getValue().toString()
+                        .compareTo(nrg2.getName().entrySet().iterator().next().getValue().toString()))
                     .collect(Collectors.toList());
-                checkNodeRuleGroupForRdm(nrgList4, 30);
+                LOG.info("NODERULEGROUP List nrgLIst4 is as follows {}", nrgList4.toString());
+                List<Integer> nepNumber = new ArrayList<>(List.of(2, 4, 4));
+                checkNodeRuleGroupForRdm(nrgList4, nepNumber);
                 break;
             default:
                 fail();
@@ -898,10 +825,20 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         assertEquals(portName, name.getValue(), "value of client nep should be '" + portName + "'");
         assertEquals(nepName, name.getValueName(),
             "value-name of client nep for '" + portName + "' should be '" + nepName + "'");
-        assertEquals(3, nep.getSupportedCepLayerProtocolQualifier().size(), "Client nep should support 3 kind of cep");
+        LOG.info("checkNEPClient10G-NEP {} has following supported CEP {}", nepName, nep
+            .getSupportedCepLayerProtocolQualifierInstances().toString());
+        assertEquals(3, nep.getSupportedCepLayerProtocolQualifierInstances()
+            .size(), "Client nep should support 3 kind of cep");
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        List<SupportedCepLayerProtocolQualifierInstances> lsclpqi = nep
+                .getSupportedCepLayerProtocolQualifierInstances();
+        for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(3, lpql.size(), "Client nep should support 3 kind of cep");
         assertThat("client nep should support 3 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItems(ODUTYPEODU2.VALUE, ODUTYPEODU2E.VALUE, DIGITALSIGNALTYPE10GigELAN.VALUE));
+            lpql, hasItems(ODUTYPEODU2.VALUE, ODUTYPEODU2E.VALUE, DIGITALSIGNALTYPE10GigELAN.VALUE));
+
         assertEquals(LayerProtocolName.DSR, nep.getLayerProtocolName(), "client nep should be of DSR protocol type");
         checkCommonPartOfNep(nep, false);
     }
@@ -915,10 +852,16 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         assertEquals(nepName, name.getValueName(),
             "value-name of eODU nep for '" + portName + "' should be '" + nepName + "'");
         // TODO: depending on the type of node there is one type or another
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        List<SupportedCepLayerProtocolQualifierInstances> lsclpqi = nep
+                .getSupportedCepLayerProtocolQualifierInstances();
+        for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
         assertThat("eODU nep should support 1, 2 or 3 kind of cep, depending on client port",
-            nep.getSupportedCepLayerProtocolQualifier().size(), anyOf(is(1), is(2), is(3)));
+            lpql.size(), anyOf(is(1), is(2), is(3)));
         assertTrue(
-            nep.getSupportedCepLayerProtocolQualifier().stream().anyMatch(splc -> splc.equals(ODUTYPEODU0.VALUE)
+            lpql.stream().anyMatch(splc -> splc.equals(ODUTYPEODU0.VALUE)
                 || splc.equals(ODUTYPEODU2.VALUE) || splc.equals(ODUTYPEODU2E.VALUE)
                 || splc.equals(ODUTYPEODU4.VALUE)),
             "eODU nep should support 1 kind of cep");
@@ -934,22 +877,28 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         assertEquals(portName, name.getValue(), "value of network nep should be '" + portName + "'");
         assertEquals(nepName, name.getValueName(),
             "value-name of network nep for '" + portName + "' should be '" + nepName + "'");
-        assertEquals(1, nep.getSupportedCepLayerProtocolQualifier().size(), "Network nep should support 1 kind of cep");
-        assertThat("network nep should support 1 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItem(ODUTYPEODU4.VALUE));
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        List<SupportedCepLayerProtocolQualifierInstances> lsclpqi = nep
+                .getSupportedCepLayerProtocolQualifierInstances();
+        for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(1, lpql.size(), "Network nep should support 1 kind of cep");
+        assertThat("network nep should support 1 kind of cep", lpql, hasItem(ODUTYPEODU4.VALUE));
         assertEquals(LayerProtocolName.ODU, nep.getLayerProtocolName(), "network nep should be of ODU protocol type");
         checkCommonPartOfNep(nep, withSip);
     }
 
     private void checkNodeRuleGroupForTpdrDSR(List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid,
             Uuid nodeUuid) {
-        assertEquals(2, nrgList.size(), "transponder DSR should contain 2 node rule group");
+        assertEquals(4, nrgList.size(), "transponder DSR should contain 4 node rule group (DSR-I_ODU/I-ODU-E_ODU)");
         for (NodeRuleGroup nodeRuleGroup : nrgList) {
             assertEquals(2, nodeRuleGroup.getNodeEdgePoint().size(),
                 "each node-rule-group should contain 2 NEP for transponder DSR");
         }
-        List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(0).nonnullNodeEdgePoint().values());
+        Integer indNrg = nrgContainsClientAndNetwork(nrgList, clientNepUuid, networkNepUuid);
+        assertNotNull("One node-rule-group shall contains client and network Neps", indNrg);
+        List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(indNrg).nonnullNodeEdgePoint().values());
         assertThat("node-rule-group nb 1 should be between nep-client1 and nep-network1",
             nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(),
             either(containsString(networkNepUuid.getValue())).or(containsString(clientNepUuid.getValue())));
@@ -963,22 +912,18 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         List<Rule> rule = new ArrayList<>(nrgList.get(1).nonnullRule().values());
         assertEquals(1, rule.size(), "node-rule-group nb 1 should contain a single rule");
         assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, rule.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().stream().findFirst().orElseThrow(),
+            "the rule type should be 'FORWARDING'");
     }
 
     private void checkNodeRuleGroupForMuxDSR(List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid,
             Uuid nodeUuid) {
-        assertEquals(4, nrgList.size(), "muxponder DSR should contain 4 node rule group");
-        for (NodeRuleGroup nodeRuleGroup : nrgList) {
-            assertEquals(2, nodeRuleGroup.getNodeEdgePoint().size(),
-                "each node-rule-group should contain 2 NEP for muxponder DSR");
-        }
-        List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(2).nonnullNodeEdgePoint().values());
-        assertThat("node-rule-group nb 2 should be between nep-client4 and nep-network1",
-            nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(),
-            either(containsString(networkNepUuid.getValue())).or(containsString(clientNepUuid.getValue())));
+        assertEquals(8, nrgList.size(), "muxponder DSR should contain 8 node rule group (DSR-I_ODU/I-ODU-E_ODU)");
+        Integer indNrg = nrgContainsClientAndNetwork(nrgList, clientNepUuid, networkNepUuid);
+        assertNotNull("One node-rule-group shall contains client and network Neps", indNrg);
+        List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(indNrg).nonnullNodeEdgePoint().values());
         assertThat("node-rule-group nb 2 should be between nep-client4 and nep-network1",
             nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(),
             either(containsString(networkNepUuid.getValue())).or(containsString(clientNepUuid.getValue())));
@@ -989,22 +934,34 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         List<Rule> rule = new ArrayList<>(nrgList.get(1).nonnullRule().values());
         assertEquals(1, rule.size(), "node-rule-group nb 2 should contain a single rule");
         assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, rule.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().stream().findFirst().orElseThrow(),
+            "the rule type should be 'FORWARDING'");
     }
 
     private void checkNodeRuleGroupForSwitchDSR(List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid,
             Uuid nodeUuid) {
-        assertEquals(1, nrgList.size(), "Switch-DSR should contain a single node rule group");
-        assertEquals(8, nrgList.get(0).getNodeEdgePoint().size(), "Switch-DSR node-rule-group should contain 8 NEP");
+        assertEquals(2, nrgList.size(), "Switch-DSR should contain 2 node rule group (DSR-I_ODU/I-ODU-E_ODU)");
+        Integer indNrg = nrgContainsClientAndNetwork(nrgList, clientNepUuid, networkNepUuid);
+        assertNotNull("One node-rule-group shall contains client and network Neps", indNrg);
+        assertEquals(8, nrgList.get(indNrg).getNodeEdgePoint().size(), "Switch-DSR nrg should contain 8 NEP");
         List<NodeEdgePoint> nrg = nrgList.get(0).nonnullNodeEdgePoint().values().stream()
             .sorted((nrg1, nrg2) -> nrg1.getNodeEdgePointUuid().getValue()
                 .compareTo(nrg2.getNodeEdgePointUuid().getValue()))
             .collect(Collectors.toList());
+        Integer xxxxx = 0;
+        for (NodeEdgePoint nep : nrg) {
+            LOG.info("nep number {} UUID is {} ", xxxxx, nep.getNodeEdgePointUuid());
+            xxxxx++;
+        }
+        LOG.info("nep SPDR-SA1-XPDR2+iODU+XPDR2-NETWORK1 UUID is {} ", UUID.nameUUIDFromBytes(
+            ("SPDR-SA1-XPDR2" + "+iODU+XPDR2-NETWORK1").getBytes(Charset.forName("UTF-8"))).toString());
+        LOG.info("nep SPDR-SA1-XPDR2+DSR+XPDR2-CLIENT4 UUID is {} ", UUID.nameUUIDFromBytes(
+            ("SPDR-SA1-XPDR2" + "+DSR+XPDR2-CLIENT4").getBytes(Charset.forName("UTF-8"))).toString());
         assertEquals(networkNepUuid, nrg.get(6).getNodeEdgePointUuid(),
             "in the sorted node-rule-group, nep number 7 should be XPDR2-NETWORK1");
-        assertEquals(clientNepUuid, nrg.get(3).getNodeEdgePointUuid(),
+        assertEquals(clientNepUuid, nrg.get(5).getNodeEdgePointUuid(),
             "in the sorted node-rule-group, nep number 4 should be XPDR2-CLIENT4");
         assertEquals(nodeUuid, nrg.get(4).getNodeUuid(),
             "any item of the node-rule-group should have the same nodeUuid");
@@ -1014,26 +971,33 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(),
+            "the rule type should be 'FORWARDING'");
     }
 
-    private void checkNodeRuleGroupForRdm(List<NodeRuleGroup> nrgList, int nbNeps) {
-        assertEquals(1, nrgList.size(), "RDM infra node - OTSi should contain a single node rule groups");
-        if (nbNeps > 0) {
-            List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(0).getNodeEdgePoint().values());
-            assertEquals(nbNeps, nodeEdgePointList.size(),
-                "RDM infra node -rule-group should contain " + nbNeps + " NEP");
-        } else {
-            assertNull(nrgList.get(0).getNodeEdgePoint(), "RDM infra node -rule-group should contain no NEP");
+    private void checkNodeRuleGroupForRdm(List<NodeRuleGroup> nrgList, List<Integer> nbNeps) {
+        assertEquals(3, nrgList.size(), "RDM infra node - OTS should contain 3 node rule groups");
+        int index = 0;
+        for (NodeRuleGroup nrg : nrgList) {
+            List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrg.getNodeEdgePoint().values());
+            assertEquals(nbNeps.get(index), nodeEdgePointList.size(),
+                "RDM infra node -rule-group should contain " + nbNeps.get(index) + " NEP");
+            List<Rule> ruleList = new ArrayList<>(nrg.nonnullRule().values());
+            assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
+            assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
+            assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(),
+                "the rule type should be 'FORWARDING'");
+            if (nrg.getName().entrySet().iterator().next().getValue().toString().contains("DEG")) {
+                assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
+                    "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
+            } else {
+                assertEquals(FORWARDINGRULECANNOTFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
+                    "the forwarding rule should be 'CANNOTFORWARDACROSSGROUP'");
+            }
+            index++;
         }
-        List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
-        assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
-        assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
-            "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
     }
 
     private void checkNodeRuleGroupForTpdrOTSi(List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid,
@@ -1054,9 +1018,10 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(),
+            "the rule type should be 'FORWARDING'");
     }
 
     private void checkNodeRuleGroupForMuxOTSi(List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid,
@@ -1077,9 +1042,10 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(),
+            "the rule type should be 'FORWARDING'");
     }
 
     private void checkNodeRuleGroupForSwitchOTSi(List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid,
@@ -1104,9 +1070,10 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         List<Rule> ruleList0 = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList0.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList0.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList0.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList0.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType().stream().findFirst().orElseThrow(),
+            "the rule type should be 'FORWARDING'");
     }
 
     private void checkNepClient100GSwitch(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName) {
@@ -1116,9 +1083,16 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             "value of client nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(),
             "value-name of client nep for '" + portName + "' should be '" + nepName + "'");
-        assertEquals(2, nep.getSupportedCepLayerProtocolQualifier().size(), "Client nep should support 2 kind of cep");
-        assertThat("client nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        List<SupportedCepLayerProtocolQualifierInstances> lsclpqi = nep
+                .getSupportedCepLayerProtocolQualifierInstances();
+        for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        LOG.info("checkNEPClient100G-NEP {} has following supported CEP {}", nepName, nep
+            .getSupportedCepLayerProtocolQualifierInstances().toString());
+        assertEquals(2, lpql.size(), "Client nep should support 2 kind of cep");
+        assertThat("client nep should support 2 kind of cep", lpql,
             hasItems(ODUTYPEODU4.VALUE, DIGITALSIGNALTYPE100GigE.VALUE));
         assertEquals(LayerProtocolName.DSR, nep.getLayerProtocolName(), "client nep should be of DSR protocol type");
         checkCommonPartOfNep(nep, false);
@@ -1130,10 +1104,14 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         assertEquals(portName, nameList.get(0).getValue(), "value of client nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(),
             "value-name of client nep for '" + portName + "' should be 100G-tpdr'");
-        assertEquals(1, nep.getSupportedCepLayerProtocolQualifier().size(), "Client nep should support 1 kind of cep");
-        assertThat("client nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItems(DIGITALSIGNALTYPE100GigE.VALUE));
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        List<SupportedCepLayerProtocolQualifierInstances> lsclpqi = nep
+                .getSupportedCepLayerProtocolQualifierInstances();
+        for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(1, lpql.size(), "Client nep should support 1 kind of cep");
+        assertThat("client nep should support 2 kind of cep", lpql, hasItems(DIGITALSIGNALTYPE100GigE.VALUE));
         assertEquals(LayerProtocolName.DSR, nep.getLayerProtocolName(), "client nep should be of DSR protocol type");
         checkCommonPartOfNep(nep, false);
     }
@@ -1144,11 +1122,15 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
         assertEquals(portName, nameList.get(0).getValue(), "value of OTSi nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(), "value-name of OTSi nep should be '" + nepName + "'");
-        assertEquals(2, nep.getSupportedCepLayerProtocolQualifier().size(),
-            "OTSi nep should support 2 kind of cep");
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        List<SupportedCepLayerProtocolQualifierInstances> lsclpqi = nep
+                .getSupportedCepLayerProtocolQualifierInstances();
+        for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(2, lpql.size(), "OTSi nep should support 2 kind of cep");
         assertThat("OTSi nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE, PHOTONICLAYERQUALIFIEROTSi.VALUE));
+            lpql, hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE, PHOTONICLAYERQUALIFIEROTSi.VALUE));
         assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(),
             "OTSi nep should be of PHOTONIC_MEDIA protocol type");
         checkCommonPartOfNep(nep, withSip);
@@ -1156,81 +1138,56 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
 
     private void checkNepOtsiRdmNode(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName,
             boolean withSip) {
+        if (!nep.getUuid().equals(nepUuid)) {
+            LOG.info("ERRORUUIDNEP on Nep {}, expected {}", nep.getName().toString(), portName);
+        }
         assertEquals(nepUuid, nep.getUuid(), "bad uuid for " + portName);
         List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
         assertEquals(portName, nameList.get(0).getValue(),
             "value of OTSi nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(),
             "value-name of OTSi nep should be '" + nepName + "'");
-        assertEquals(1, nep.getSupportedCepLayerProtocolQualifier().size(),
-            "OTSi nep of RDM infra node should support only 1 kind of cep");
-        assertThat("OTSi nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE));
-        assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(),
-            "OTSi nep should be of PHOTONIC_MEDIA protocol type");
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        List<SupportedCepLayerProtocolQualifierInstances> lsclpqi = nep
+                .getSupportedCepLayerProtocolQualifierInstances();
+        for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        if (nepName.contains("OMS")) {
+            assertEquals(1, lpql.size(), "OTSi nep of RDM infra node should support only 1 kind of cep");
+            assertThat("OTSi nep should support 1 kind of cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE));
+            assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(),
+                "OTSi nep should be of PHOTONIC_MEDIA protocol type");
+        } else if (nepName.contains("OTS")) {
+            assertEquals(1, lpql.size(), "OTSi nep of RDM infra node should support only 1 kind of cep");
+            assertThat("OTSi nep should support 1 kind of cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROTS.VALUE));
+            assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(),
+                "OTSi nep should be of PHOTONIC_MEDIA protocol type");
+        }
         checkCommonPartOfNep(nep, withSip);
     }
 
     private void checkCommonPartOfNep(OwnedNodeEdgePoint nep, boolean withSip) {
-        assertEquals(PortDirection.BIDIRECTIONAL, nep.getLinkPortDirection(),
-            "link port direction should be DIRECTIONAL");
+        assertEquals(Direction.BIDIRECTIONAL, nep.getDirection(), "link port direction should be DIRECTIONAL");
         assertEquals(AdministrativeState.UNLOCKED, nep.getAdministrativeState(),
             "administrative state should be UNLOCKED");
-        assertEquals(TerminationState.TERMINATEDBIDIRECTIONAL, nep.getTerminationState(),
-            "termination state should be TERMINATED BIDIRECTIONAL");
+//       TODO: convert this test since terminationState is migrated to CEP attribute in TAPI 2.4
+//        assertEquals(TerminationState.TERMINATEDBIDIRECTIONAL, nep.getTerminationState(),
+//            "termination state should be TERMINATED BIDIRECTIONAL");
         assertEquals(LifecycleState.INSTALLED, nep.getLifecycleState(), "life-cycle state should be INSTALLED");
         if (withSip) {
             assertEquals(1, nep.getMappedServiceInterfacePoint().size(), "Given nep should support 1 SIP");
         }
-        assertEquals(TerminationDirection.BIDIRECTIONAL, nep.getTerminationDirection(),
-            "termination direction should be BIDIRECTIONAL");
+//      TODO: convert this test since terminationState is migrated to CEP attribute in TAPI 2.4
+//        assertEquals(TerminationDirection.BIDIRECTIONAL, nep.getTerminationDirection(),
+//            "termination direction should be BIDIRECTIONAL");
         assertEquals(OperationalState.ENABLED, nep.getOperationalState(),
             "operational state of client nep should be ENABLED");
         assertEquals(PortRole.SYMMETRIC, nep.getLinkPortRole(),
             "link-port-role of client nep should be SYMMETRIC");
     }
 
-    private void checkTransitionalLink(
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link link, Uuid node1Uuid,
-            Uuid node2Uuid, String tp1, String tp2, String ietfNodeId) {
-        Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes((tp1 + "to" + tp2).getBytes(Charset.forName("UTF-8")))
-            .toString());
-        assertEquals(linkUuid, link.getUuid(), "bad uuid for link between DSR node " + tp1 + " and iOTSI port " + tp2);
-        assertEquals(CapacityUnit.GBPS, link.getAvailableCapacity().getTotalSize().getUnit(),
-            "Available capacity unit should be GBPS");
-        assertEquals(Uint64.valueOf(100), link.getAvailableCapacity().getTotalSize().getValue(),
-            "Available capacity -total size value should be 100");
-        assertEquals(2, link.getTransitionedLayerProtocolName().size(),
-            "transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA");
-        assertThat("transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA",
-            link.getTransitionedLayerProtocolName(),
-            hasItems(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()));
-        assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(),
-            "transitional link should be BIDIRECTIONAL");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-            .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
-        assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(),
-            "topology uuid should be the same for the two termination point of the link");
-        assertEquals(topologyUuid, nodeEdgePointList.get(1).getTopologyUuid(),
-            "topology uuid should be the same for the two termination point of the link");
-        assertThat("transitional links should terminate on DSR node and Photonic node",
-            nodeEdgePointList.get(0).getNodeUuid().getValue(),
-            either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue())));
-        assertThat("transitional links should terminate on DSR node and Photonic node",
-            nodeEdgePointList.get(1).getNodeUuid().getValue(),
-            either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue())));
-        Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(tp1.getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nep2Uuid = new Uuid(UUID.nameUUIDFromBytes(tp2.getBytes(Charset.forName("UTF-8"))).toString());
-        assertThat("transitional links should terminate on " + tp1 + " and " + tp2 + " neps",
-            nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(),
-            either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue())));
-        assertThat("transitional links should terminate on DSR node and Photonic node",
-            nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(),
-            either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue())));
-    }
-
-    private void checkOmsLink(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link link,
+    private void checkOmsLink(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link link,
             Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid, String linkName) {
         assertEquals(linkName, link.getName().get(new NameKey("OMS link name")).getValue(), "bad name for the link");
         assertEquals(linkUuid, link.getUuid(), "bad uuid for link");
@@ -1239,7 +1196,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             link.getLayerProtocolName().stream().findFirst().orElseThrow().getName(),
             "oms link should be between 2 nodes of protocol layers PHOTONIC_MEDIA");
         assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(),"otn tapi link should be BIDIRECTIONAL");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
             .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
         assertEquals(2 , nodeEdgePointList.size(), "oms link should be between 2 neps");
         assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(),
@@ -1261,7 +1218,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
     }
 
     private void checkXpdrRdmLink(
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Link link, Uuid node1Uuid,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link link, Uuid node1Uuid,
             Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid, String linkName) {
         assertEquals(linkName, link.getName().get(new NameKey("XPDR-RDM link name")).getValue(),
             "bad name for the link");
@@ -1272,7 +1229,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
             "oms link should be between 2 nodes of protocol layers PHOTONIC_MEDIA");
         assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(),
             "otn tapi link should be BIDIRECTIONAL");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
             .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
         assertEquals(2 , nodeEdgePointList.size(), "oms link should be between 2 neps");
         assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(),
@@ -1316,4 +1273,54 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest {
         tpdr1Bldr.setTerminationPoint(tps);
         return new NodeBuilder(initialNode).addAugmentation(tpdr1Bldr.build()).build();
     }
-}
\ No newline at end of file
+
+    private int getRank(String searchedChar, List<OwnedNodeEdgePoint> onepList) {
+        int foundAtRank = 0;
+        int rank = 0;
+        for (OwnedNodeEdgePoint onep: onepList) {
+            for (Map.Entry<NameKey, Name> entry: onep.getName().entrySet()) {
+                if (entry.getValue().getValue().contains(searchedChar)) {
+                    foundAtRank = rank;
+                }
+            }
+            rank++;
+        }
+        LOG.info("searched Char {} found at rank {}", searchedChar, foundAtRank);
+        return foundAtRank;
+    }
+
+    private int getNodeRank(String searchedChar,
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeList) {
+        int foundAtRank = 0;
+        int rank = 0;
+        for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node: nodeList) {
+            for (Map.Entry<NameKey, Name> entry: node.getName().entrySet()) {
+                if (entry.getValue().getValue().contains(searchedChar)) {
+                    foundAtRank = rank;
+                }
+            }
+            rank++;
+        }
+        LOG.info("searched Char {} found at rank {}", searchedChar, foundAtRank);
+        return foundAtRank;
+    }
+
+    private Integer nrgContainsClientAndNetwork(List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid) {
+        // 1 NRG should at least contain the NEP of interest in the NEP List
+        Integer indexNrg = 0;
+        for (NodeRuleGroup nrg : nrgList) {
+            Boolean foundClient = false;
+            Boolean foundNetwork = false;
+            for (NodeEdgePoint nep : nrg.nonnullNodeEdgePoint().values()) {
+                foundClient = foundClient || nep.getNodeEdgePointUuid().equals(clientNepUuid);
+                foundNetwork = foundNetwork || nep.getNodeEdgePointUuid().equals(networkNepUuid);
+            }
+            if (foundClient && foundNetwork) {
+                return indexNrg;
+            }
+            indexNrg++;
+        }
+        return null;
+    }
+
+}
index 0cdcce3b99df6e1edc24bf464b46ea97f3a358b0..395f9b34fc591f48940d9711660b1faff516de71 100644 (file)
@@ -14,6 +14,7 @@ import static org.hamcrest.CoreMatchers.hasItems;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import com.google.common.util.concurrent.FluentFuture;
@@ -41,13 +42,13 @@ import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.Link1Builder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.TerminationPoint1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.Link1Builder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.OpenroadmTpType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev230526.OpenroadmTpType;
 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;
@@ -63,41 +64,43 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top
 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.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.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.global._class.Name;
-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.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.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.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.node.NodeRuleGroup;
-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.OwnedNodeEdgePointKey;
-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.Rule;
-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.common.rev221121.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LAYERPROTOCOLQUALIFIER;
+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.NameKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU2E;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.ODUTYPEODU4;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN;
+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.PHOTONICLAYERQUALIFIEROTSi;
+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.RuleType;
+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.OwnedNodeEdgePoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint;
+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.topology.Link;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+
 public class ConvertORTopoToTapiTopoTest extends AbstractTest {
     private static final Logger LOG = LoggerFactory.getLogger(ConvertORTopoToTapiTopoTest.class);
 
@@ -114,54 +117,64 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
 
     @BeforeAll
     static void setUp() throws InterruptedException, ExecutionException {
-        TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(),
-            TapiTopologyDataUtils.OPENROADM_TOPOLOGY_FILE, InstanceIdentifiers.OVERLAY_NETWORK_II);
-        TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(),
-            TapiTopologyDataUtils.OTN_TOPOLOGY_FILE, InstanceIdentifiers.OTN_NETWORK_II);
-        TopologyDataUtils.writePortmappingFromFileToDatastore(getDataStoreContextUtil(),
+        TopologyDataUtils.writeTopologyFromFileToDatastore(
+            getDataStoreContextUtil(),
+            TapiTopologyDataUtils.OPENROADM_TOPOLOGY_FILE,
+            InstanceIdentifiers.OVERLAY_NETWORK_II);
+        TopologyDataUtils.writeTopologyFromFileToDatastore(
+            getDataStoreContextUtil(),
+            TapiTopologyDataUtils.OTN_TOPOLOGY_FILE,
+            InstanceIdentifiers.OTN_NETWORK_II);
+        TopologyDataUtils.writePortmappingFromFileToDatastore(
+            getDataStoreContextUtil(),
             TapiTopologyDataUtils.PORTMAPPING_FILE);
-
-        KeyedInstanceIdentifier<Node, NodeKey> muxAIID = InstanceIdentifier.create(Networks.class)
-            .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network
-                .class, new NetworkKey(new NetworkId("otn-topology")))
-            .child(Node.class, new NodeKey(new NodeId("SPDR-SA1-XPDR1")));
         FluentFuture<Optional<Node>> muxAFuture = dataBroker.newReadOnlyTransaction()
-            .read(LogicalDatastoreType.CONFIGURATION, muxAIID);
-        KeyedInstanceIdentifier<Node, NodeKey> muxCIID = InstanceIdentifier.create(Networks.class)
-            .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network
-                .class, new NetworkKey(new NetworkId("otn-topology")))
-            .child(Node.class, new NodeKey(new NodeId("SPDR-SC1-XPDR1")));
-        FluentFuture<Optional<Node>> muxCFuture = dataBroker.newReadOnlyTransaction()
-            .read(LogicalDatastoreType.CONFIGURATION, muxCIID);
-        KeyedInstanceIdentifier<Node, NodeKey> switchIID = InstanceIdentifier.create(Networks.class)
-            .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network
-                .class, new NetworkKey(new NetworkId("otn-topology")))
-            .child(Node.class, new NodeKey(new NodeId("SPDR-SA1-XPDR2")));
-        FluentFuture<Optional<Node>> switchFuture = dataBroker.newReadOnlyTransaction()
-            .read(LogicalDatastoreType.CONFIGURATION, switchIID);
-
+            .read(LogicalDatastoreType.CONFIGURATION,
+            //muxAIID
+            InstanceIdentifier.create(Networks.class)
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+                        .networks.Network.class,
+                    new NetworkKey(new NetworkId("otn-topology")))
+                .child(Node.class, new NodeKey(new NodeId("SPDR-SA1-XPDR1"))));
+        FluentFuture<Optional<Node>> muxCFuture =
+            dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION,
+            //muxCIID
+            InstanceIdentifier.create(Networks.class)
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+                        .networks.Network.class,
+                    new NetworkKey(new NetworkId("otn-topology")))
+                .child(Node.class, new NodeKey(new NodeId("SPDR-SC1-XPDR1"))));
+        FluentFuture<Optional<Node>> switchFuture =
+            dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION,
+            //switchIID
+            InstanceIdentifier.create(Networks.class)
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+                        .networks.Network.class,
+                    new NetworkKey(new NetworkId("otn-topology")))
+                .child(Node.class, new NodeKey(new NodeId("SPDR-SA1-XPDR2"))));
         otnMuxA = muxAFuture.get().orElseThrow();
         otnMuxC = muxCFuture.get().orElseThrow();
         otnSwitch = switchFuture.get().orElseThrow();
-
-        KeyedInstanceIdentifier<Node, NodeKey> tpdrIID = InstanceIdentifier.create(Networks.class)
-            .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network
-                .class, new NetworkKey(new NetworkId("otn-topology")))
-            .child(Node.class, new NodeKey(new NodeId("XPDR-A1-XPDR1")));
-        FluentFuture<Optional<Node>> tpdrFuture = dataBroker.newReadOnlyTransaction()
-            .read(LogicalDatastoreType.CONFIGURATION, tpdrIID);
+        FluentFuture<Optional<Node>> tpdrFuture =
+            dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.CONFIGURATION,
+            //tpdrIID
+            InstanceIdentifier.create(Networks.class)
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+                        .networks.Network.class,
+                    new NetworkKey(new NetworkId("otn-topology")))
+                .child(Node.class, new NodeKey(new NodeId("XPDR-A1-XPDR1"))));
         tpdr100G = tpdrFuture.get().orElseThrow();
-
-        InstanceIdentifier<Network1> linksIID = InstanceIdentifier.create(Networks.class)
-            .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.networks.Network
-                .class, new NetworkKey(new NetworkId("otn-topology")))
-            .augmentation(Network1.class);
         FluentFuture<Optional<Network1>> linksFuture = dataBroker.newReadOnlyTransaction()
-            .read(LogicalDatastoreType.CONFIGURATION, linksIID);
+            .read(LogicalDatastoreType.CONFIGURATION,
+            //linksIID
+            InstanceIdentifier.create(Networks.class)
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226
+                        .networks.Network.class,
+                    new NetworkKey(new NetworkId("otn-topology")))
+                .augmentation(Network1.class));
         otnLinks = linksFuture.get().orElseThrow().getLink();
-
-        topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
-            Charset.forName("UTF-8"))).toString());
+        topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER
+            .getBytes(Charset.forName("UTF-8"))).toString());
         networkTransactionService = new NetworkTransactionImpl(getDataBroker());
         tapiLink = new TapiLinkImpl(networkTransactionService);
         LOG.info("TEST SETUP READY");
@@ -176,14 +189,14 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
                 networkPortList.add(tp.getTpId().getValue());
             }
         }
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         tapiFactory.convertNode(tpdr, networkPortList);
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node dsrNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(dsrNodeUuid));
+        Uuid dsrNodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        var dsrNode = tapiFactory.getTapiNodes()
+            .get(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                .topology.NodeKey(dsrNodeUuid));
         Uuid networkNepUuid = new Uuid(
             UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iODU+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
                 .toString());
@@ -191,44 +204,26 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         assertNull(nepN.getAdministrativeState(), "Administrative State should not be present");
         assertNull(nepN.getOperationalState(), "Operational State should not be present");
 
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node otsiNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(otsiNodeUuid));
-        Uuid enepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        Uuid inepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid));
-        assertNull(enep.getAdministrativeState(), "Administrative State should not be present");
-        assertNull(enep.getOperationalState(), "Operational State should not be present");
-
-        OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid));
-        assertNull(inep.getAdministrativeState(), "Administrative State should not be present");
-        assertNull(inep.getOperationalState(), "Operational State should not be present");
     }
 
     @Test
     void convertNodeWhenBadStates1() {
-        Node tpdr = changeTerminationPointState(tpdr100G, "XPDR1-NETWORK1", AdminStates.OutOfService,
-            State.OutOfService);
+        Node tpdr =
+            changeTerminationPointState(tpdr100G, "XPDR1-NETWORK1", AdminStates.OutOfService, State.OutOfService);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : tpdr100G.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortList.add(tp.getTpId().getValue());
             }
         }
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         tapiFactory.convertNode(tpdr, networkPortList);
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node dsrNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(dsrNodeUuid));
+        Uuid dsrNodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        var dsrNode = tapiFactory.getTapiNodes()
+            .get(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                    .topology.NodeKey(dsrNodeUuid));
         Uuid networkNepUuid = new Uuid(
             UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iODU+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
                 .toString());
@@ -236,47 +231,25 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         assertEquals(AdministrativeState.LOCKED, nepN.getAdministrativeState(),
             "Administrative State should be Locked");
         assertEquals(OperationalState.DISABLED, nepN.getOperationalState(), "Operational State should be Disabled");
-
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node otsiNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(otsiNodeUuid));
-        Uuid enepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        Uuid inepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid));
-        assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled");
-
-        OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid));
-        assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled");
     }
 
     @Test
     void convertNodeWhenBadStates2() {
-        Node tpdr = changeTerminationPointState(tpdr100G, "XPDR1-NETWORK1", AdminStates.Maintenance,
-            State.Degraded);
+        Node tpdr = changeTerminationPointState(tpdr100G, "XPDR1-NETWORK1", AdminStates.Maintenance, State.Degraded);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : tpdr100G.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortList.add(tp.getTpId().getValue());
             }
         }
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         tapiFactory.convertNode(tpdr, networkPortList);
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node dsrNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(dsrNodeUuid));
+        Uuid dsrNodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        var dsrNode = tapiFactory.getTapiNodes()
+            .get(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                    .topology.NodeKey(dsrNodeUuid));
         Uuid networkNepUuid = new Uuid(
             UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iODU+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
                 .toString());
@@ -284,46 +257,29 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         assertEquals(AdministrativeState.LOCKED, nepN.getAdministrativeState(),
             "Administrative State should be Locked");
         assertEquals(OperationalState.DISABLED, nepN.getOperationalState(), "Operational State should be Disabled");
-
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node otsiNode = tapiFactory
-            .getTapiNodes().get(new
-                org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.NodeKey(otsiNodeUuid));
-        Uuid enepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        Uuid inepUuid = new Uuid(
-            UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8")))
-                .toString());
-        OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid));
-        assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled");
-
-        OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid));
-        assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(),
-            "Administrative State should be Locked");
-        assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled");
     }
 
     @Test
     void convertOtnLinkWhenNoState() {
-        HashMap<LinkKey, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-            .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link
-            link = changeOtnLinkState(otnLinks.get(new LinkKey(
+        HashMap<LinkKey,
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link link =
+            changeOtnLinkState(otnLinks.get(new LinkKey(
                 new LinkId("ODTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1"))), null, null);
         otnLinksAlt.replace(link.key(), link);
 
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortListA.add(tp.getTpId().getValue());
             }
         }
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         tapiFactory.convertNode(otnMuxA, networkPortListA);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
         List<String> networkPortListC = new ArrayList<>();
         for (TerminationPoint tp : otnMuxC.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -331,36 +287,41 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxC, networkPortListC);
-        tapiFactory.convertLinks(otnLinksAlt);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
+        tapiAbsFactory.convertLinks(otnLinksAlt);
 
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
+        List<Link> tapiLinks = tapiAbsFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
-        assertNull(tapiLinks.get(3).getAdministrativeState(), "Administrative State should not be present");
+        assertNull(tapiLinks.get(1).getAdministrativeState(), "Administrative State should not be present");
         assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(),
             "Administrative state should be UNLOCKED");
-        assertNull(tapiLinks.get(3).getOperationalState(), "Operational State should not be present");
+        assertNull(tapiLinks.get(1).getOperationalState(), "Operational State should not be present");
         assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(),
             "Operational state should be ENABLED");
     }
 
     @Test
     void convertOtnLinkWhenNoStateOnOppositeLink() {
-        HashMap<LinkKey, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-            .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link
-            link = changeOtnLinkState(otnLinks.get(new LinkKey(
+        HashMap<LinkKey,
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link link =
+            changeOtnLinkState(otnLinks.get(new LinkKey(
                 new LinkId("ODTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1"))), null, null);
         otnLinksAlt.replace(link.key(), link);
 
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortListA.add(tp.getTpId().getValue());
             }
         }
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         tapiFactory.convertNode(otnMuxA, networkPortListA);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
         List<String> networkPortListC = new ArrayList<>();
         for (TerminationPoint tp : otnMuxC.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -368,37 +329,41 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxC, networkPortListC);
-        tapiFactory.convertLinks(otnLinksAlt);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
+        tapiAbsFactory.convertLinks(otnLinksAlt);
 
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
+        List<Link> tapiLinks = tapiAbsFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
-        assertNull(tapiLinks.get(3).getAdministrativeState(), "Administrative State should not be present");
+        assertNull(tapiLinks.get(1).getAdministrativeState(), "Administrative State should not be present");
         assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(),
             "Administrative state should be UNLOCKED");
-        assertNull(tapiLinks.get(3).getOperationalState(), "Operational State should not be present");
+        assertNull(tapiLinks.get(1).getOperationalState(), "Operational State should not be present");
         assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(),
             "Operational state should be ENABLED");
     }
 
     @Test
     void convertOtnLinkWhenBadState1() {
-        HashMap<LinkKey, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-            .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link
-            link = changeOtnLinkState(otnLinks.get(new LinkKey(
+        HashMap<LinkKey,
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link link =
+            changeOtnLinkState(otnLinks.get(new LinkKey(
                 new LinkId("ODTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1"))),
                 AdminStates.OutOfService, State.OutOfService);
         otnLinksAlt.replace(link.key(), link);
-
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortListA.add(tp.getTpId().getValue());
             }
         }
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         tapiFactory.convertNode(otnMuxA, networkPortListA);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
         List<String> networkPortListC = new ArrayList<>();
         for (TerminationPoint tp : otnMuxC.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -406,16 +371,17 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxC, networkPortListC);
-        tapiFactory.convertLinks(otnLinksAlt);
-
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
+        tapiAbsFactory.convertLinks(otnLinksAlt);
+        List<Link> tapiLinks = tapiAbsFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
-        assertEquals(AdministrativeState.LOCKED, tapiLinks.get(3).getAdministrativeState(),
+        LOG.info("TapiLinks are as follow : {}", tapiLinks);
+        assertEquals(AdministrativeState.LOCKED, tapiLinks.get(1).getAdministrativeState(),
             "Administrative state should be LOCKED");
         assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(),
             "Administrative state should be UNLOCKED");
-        assertEquals(OperationalState.DISABLED, tapiLinks.get(3).getOperationalState(),
+        assertEquals(OperationalState.DISABLED, tapiLinks.get(1).getOperationalState(),
             "Operational state should be DISABLED");
         assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(),
             "Operational state should be ENABLED");
@@ -423,22 +389,25 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
 
     @Test
     void convertOtnLinkWhenBadState2() {
-        HashMap<LinkKey, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-            .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link
-            link = changeOtnLinkState(otnLinks.get(new LinkKey(
+        HashMap<LinkKey,
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link link =
+            changeOtnLinkState(otnLinks.get(new LinkKey(
                 new LinkId("ODTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1"))),
                 AdminStates.Maintenance, State.Degraded);
         otnLinksAlt.replace(link.key(), link);
-
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortListA.add(tp.getTpId().getValue());
             }
         }
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         tapiFactory.convertNode(otnMuxA, networkPortListA);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
         List<String> networkPortListC = new ArrayList<>();
         for (TerminationPoint tp : otnMuxC.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -446,16 +415,16 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxC, networkPortListC);
-        tapiFactory.convertLinks(otnLinksAlt);
-
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
+        tapiAbsFactory.convertLinks(otnLinksAlt);
+        List<Link> tapiLinks = tapiAbsFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
-        assertEquals(AdministrativeState.LOCKED, tapiLinks.get(3).getAdministrativeState(),
+        assertEquals(AdministrativeState.LOCKED, tapiLinks.get(1).getAdministrativeState(),
             "Administrative state should be LOCKED");
         assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(),
             "Administrative state should be UNLOCKED");
-        assertEquals(OperationalState.DISABLED, tapiLinks.get(3).getOperationalState(),
+        assertEquals(OperationalState.DISABLED, tapiLinks.get(1).getOperationalState(),
             "Operational state should be DISABLED");
         assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(),
             "Operational state should be ENABLED");
@@ -463,22 +432,25 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
 
     @Test
     void convertOtnLinkWhenBadStateOnOppositeLink() {
-        HashMap<LinkKey, org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
-            .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link
-            link = changeOtnLinkState(otnLinks.get(new LinkKey(
+        HashMap<LinkKey,
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link> otnLinksAlt = new HashMap<>(otnLinks);
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link link =
+            changeOtnLinkState(otnLinks.get(new LinkKey(
                 new LinkId("ODTU4-SPDR-SC1-XPDR1-XPDR1-NETWORK1toSPDR-SA1-XPDR1-XPDR1-NETWORK1"))),
                 AdminStates.OutOfService, State.OutOfService);
         otnLinksAlt.replace(link.key(), link);
-
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortListA.add(tp.getTpId().getValue());
             }
         }
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         tapiFactory.convertNode(otnMuxA, networkPortListA);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
         List<String> networkPortListC = new ArrayList<>();
         for (TerminationPoint tp : otnMuxC.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -486,16 +458,17 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxC, networkPortListC);
-        tapiFactory.convertLinks(otnLinksAlt);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
+        tapiAbsFactory.convertLinks(otnLinksAlt);
 
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
+        List<Link> tapiLinks = tapiAbsFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
-        assertEquals(AdministrativeState.LOCKED, tapiLinks.get(3).getAdministrativeState(),
+        assertEquals(AdministrativeState.LOCKED, tapiLinks.get(1).getAdministrativeState(),
             "Administrative state should be LOCKED");
         assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(),
             "Administrative state should be UNLOCKED");
-        assertEquals(OperationalState.DISABLED, tapiLinks.get(3).getOperationalState(),
+        assertEquals(OperationalState.DISABLED, tapiLinks.get(1).getOperationalState(),
             "Operational state should be DISABLED");
         assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(),
             "Operational state should be ENABLED");
@@ -503,7 +476,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
 
     @Test
     void convertNodeForTransponder100G() {
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : tpdr100G.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -511,31 +484,22 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(tpdr100G, networkPortList);
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            tapiFactory.getTapiNodes().values().stream()
-            .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
-            .collect(Collectors.toList());
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes =
+            tapiFactory.getTapiNodes().values().stream()
+                .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
+                .collect(Collectors.toList());
 
-        assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2");
-        assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2");
+        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)");
+        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 (no more transitional links)");
 
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkDsrNode(tapiNodes.get(1), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1+DSR");
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkOtsiNode(tapiNodes.get(0), otsiNodeUuid, "tpdr", "XPDR-A1-XPDR1+OTSi");
-
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
-            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        checkTransitionalLink(tapiLinks.get(1), dsrNodeUuid, otsiNodeUuid,
-            "XPDR-A1-XPDR1+iODU+XPDR1-NETWORK1", "XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1", "XPDR-A1-XPDR1");
+        Uuid dsrNodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        checkDsrNode(tapiNodes.get(getNodeRank("SPDR-SA1", tapiNodes)), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1+XPONDER");
     }
 
     @Test
     void convertNodeForOtnMuxponder() {
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -543,30 +507,21 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxA, networkPortList);
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            = tapiFactory.getTapiNodes().values().stream()
-            .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
-            .collect(Collectors.toList());
-
-        assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2");
-        assertEquals(1, tapiFactory.getTapiLinks().size(), "Link list size should be 1");
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "mux", "SPDR-SA1-XPDR1+DSR");
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "mux", "SPDR-SA1-XPDR1+OTSi");
-
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
-            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        checkTransitionalLink(tapiLinks.get(0), dsrNodeUuid, otsiNodeUuid,
-            "SPDR-SA1-XPDR1+iODU+XPDR1-NETWORK1", "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1", "SPDR-SA1-XPDR1");
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes =
+            tapiFactory.getTapiNodes().values().stream()
+                .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
+                .collect(Collectors.toList());
+
+        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR & ODU merged");
+        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0, no more transitional links");
+        Uuid dsrNodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        checkDsrNode(tapiNodes.get(getNodeRank("SPDR-SA1", tapiNodes)), dsrNodeUuid, "mux", "SPDR-SA1-XPDR1+XPONDER");
     }
 
     @Test
     void convertNodeForOtnSwitch() {
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortList = new ArrayList<>();
         for (TerminationPoint tp : otnSwitch.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -574,38 +529,32 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnSwitch, networkPortList);
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            = tapiFactory.getTapiNodes().values().stream()
-            .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
-            .collect(Collectors.toList());
-
-        assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2");
-        assertEquals(4, tapiFactory.getTapiLinks().size(), "Link list size should be 4");
-
-        Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "switch", "SPDR-SA1-XPDR2+DSR");
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "switch", "SPDR-SA1-XPDR2+OTSi");
-
-        List<Link> tapiLinks = tapiFactory.getTapiLinks().values().stream()
-            .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        checkTransitionalLink(tapiLinks.get(2), dsrNodeUuid, otsiNodeUuid,
-            "SPDR-SA1-XPDR2+iODU+XPDR2-NETWORK4", "SPDR-SA1-XPDR2+iOTSi+XPDR2-NETWORK4", "SPDR-SA1-XPDR2");
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes =
+            tapiFactory.getTapiNodes().values().stream()
+                .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
+                .collect(Collectors.toList());
+
+        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR/ODU merged)");
+        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link");
+
+        Uuid dsrNodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        checkDsrNode(tapiNodes.get(getNodeRank("SPDR-SA1", tapiNodes)), dsrNodeUuid, "switch",
+            "SPDR-SA1-XPDR2+XPONDER");
     }
 
     @Test
     void convertOtnLink() {
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
                 networkPortListA.add(tp.getTpId().getValue());
             }
         }
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
         tapiFactory.convertNode(otnMuxA, networkPortListA);
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
         List<String> networkPortListC = new ArrayList<>();
         for (TerminationPoint tp : otnMuxC.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -613,58 +562,66 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxC, networkPortListC);
-        tapiFactory.convertLinks(otnLinks);
-        assertEquals(4, tapiFactory.getTapiLinks().size(), "Link list size should be 4");
-
-        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+DSR".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1"
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1"
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid tp3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1"
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid tp4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1"
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid link1Uuid =
-            new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1toSPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1"
-                .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid link2Uuid =
-            new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1toSPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1"
-                .getBytes(Charset.forName("UTF-8"))).toString());
-
-        List<Link> links = tapiFactory.getTapiLinks().values().stream()
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
+
+        tapiAbsFactory.convertLinks(otnLinks);
+        assertEquals(2, tapiAbsFactory.getTapiLinks().size(), "Link list size should be 2 : no transitional link");
+
+        Uuid node1Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid node2Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid node3Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid node4Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid tp1Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid tp2Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid tp3Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8")))
+                .toString());
+        Uuid tp4Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8")))
+                .toString());
+        Uuid link1Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1toSPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1"
+                    .getBytes(Charset.forName("UTF-8")))
+                .toString());
+        Uuid link2Uuid = new Uuid(
+            UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1toSPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1"
+                    .getBytes(Charset.forName("UTF-8")))
+                .toString());
+        List<Link> links = tapiAbsFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
-        checkOtnLink(links.get(3), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link1Uuid,
+        LOG.info("Node3 {}, Node4 = {},", node3Uuid, node4Uuid);
+        checkOtnLink(links.get(1), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link1Uuid,
             "SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1toSPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1");
-        checkOtnLink(links.get(2), node3Uuid, node4Uuid, tp3Uuid, tp4Uuid, link2Uuid,
+        checkOtnLink(links.get(0), node3Uuid, node4Uuid, tp3Uuid, tp4Uuid, link2Uuid,
             "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1toSPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1");
+        LOG.info("The link we check  has name {}", links.get(0).getName());
     }
 
     @Test
     void convertRoadmInfrastructureWhenNoXponderAttached() {
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
-        tapiFactory.convertRoadmInfrastructure();
-
-        assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1");
-        assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be empty");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            = tapiFactory.getTapiNodes().values().stream().collect(Collectors.toList());
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkOtsiNode(tapiNodes.get(0), otsiNodeUuid, "infra", "ROADM-infra");
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        tapiAbsFactory.convertRoadmInfrastructure();
+
+        assertEquals(1, tapiAbsFactory.getTapiNodes().size(), "Node list size should be 1");
+        assertEquals(0, tapiAbsFactory.getTapiLinks().size(), "Link list size should be empty");
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes =
+            tapiAbsFactory.getTapiNodes().values().stream().collect(Collectors.toList());
+        Uuid photNodeUuid = new Uuid(
+            UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8"))).toString());
+        checkOtsiNode(tapiNodes.get(0), photNodeUuid, "infra", "ROADM-infra");
     }
 
     @Test
     void convertRoadmInfrastructureWhenOtnMuxAttached() {
-        ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORTopoToTapiTopo tapiAbsFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink);
+        ConvertORToTapiTopology tapiFactory = new ConvertORToTapiTopology(topologyUuid);
         List<String> networkPortListA = new ArrayList<>();
         for (TerminationPoint tp : otnMuxA.augmentation(Node1.class).getTerminationPoint().values()) {
             if (tp.augmentation(TerminationPoint1.class).getTpType().equals(OpenroadmTpType.XPONDERNETWORK)) {
@@ -672,39 +629,52 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             }
         }
         tapiFactory.convertNode(otnMuxA, networkPortListA);
-        tapiFactory.convertRoadmInfrastructure();
-
-        assertEquals(3, tapiFactory.getTapiNodes().size(), "Node list size should be 3");
-        assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node> tapiNodes
-            = tapiFactory.getTapiNodes().values().stream()
-            .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
-            .collect(Collectors.toList());
-        Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        checkOtsiNode(tapiNodes.get(2), otsiNodeUuid, "infra", "ROADM-infra");
-
-        List<Link> links = tapiFactory.getTapiLinks().values().stream()
+        tapiAbsFactory.setTapiNodes(tapiFactory.getTapiNodes());
+        tapiAbsFactory.convertRoadmInfrastructure();
+        LOG.info("ERRORLINK List of link = {}", tapiAbsFactory.getTapiLinks().toString());
+        assertEquals(2, tapiAbsFactory.getTapiNodes().size(),
+            "Node list size should be 2");
+        assertEquals(1, tapiAbsFactory.getTapiLinks().size(), "Link list size should be 1");
+
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeMap =
+                tapiFactory.getTapiNodes();
+        nodeMap.putAll(tapiAbsFactory.getTapiNodes());
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> tapiNodes =
+            nodeMap.values().stream()
+                .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue()))
+                .collect(Collectors.toList());
+        checkOtsiNode(
+            tapiNodes.get(getNodeRank("ROADM", tapiNodes)),
+            //otsiNodeUuid,
+            new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8"))).toString()),
+            "infra", "ROADM-infra");
+        List<Link> links = tapiAbsFactory.getTapiLinks().values().stream()
             .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue()))
             .collect(Collectors.toList());
-        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8")))
-            .toString());
-        Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1"
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("roadm node+nep+1")
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid linkUuid =
-            new Uuid(UUID.nameUUIDFromBytes(
-                "SPDR-SA1-XPDR1+OTSi--SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1 and ROADM-infra--NodeEdgePoint_1"
-                    .getBytes(Charset.forName("UTF-8"))).toString());
-        checkOmsLink(links.get(1), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid,
-            "SPDR-SA1-XPDR1+OTSi--SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1 and ROADM-infra--NodeEdgePoint_1");
+        String str1 =
+            "SPDR-SA1-XPDR1+XPONDER--SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1 and ROADM-infra--NodeEdgePoint_1";
+        LOG.info("LinksCheck 0 = {} ", links.get(0).getName());
+        checkOmsLink(links.get(0),
+            //node1Uuid,
+            new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))).toString()),
+            //node2Uuid,
+            new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8"))).toString()),
+            //tp1Uuid,
+            new Uuid(
+                UUID.nameUUIDFromBytes(
+                        "SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1".getBytes(Charset.forName("UTF-8")))
+                    .toString()),
+            //tp2Uuid,
+            new Uuid(UUID.nameUUIDFromBytes(("roadm node+nep+1").getBytes(Charset.forName("UTF-8"))).toString()),
+            //linkUuid,
+            new Uuid(UUID.nameUUIDFromBytes(str1.getBytes(Charset.forName("UTF-8"))).toString()),
+            str1);
     }
 
-    private void checkDsrNode(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node,
-                              Uuid nodeUuid, String dsrNodeType, String nodeId) {
+    private void checkDsrNode(
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node,
+            Uuid nodeUuid, String dsrNodeType, String nodeId) {
         assertEquals(nodeUuid, node.getUuid(), "incorrect node uuid");
         assertEquals(nodeId, node.getName().get(new NameKey("dsr/odu node name")).getValue(), "incorrect node name");
         assertEquals(AdministrativeState.UNLOCKED, node.getAdministrativeState(),
@@ -713,10 +683,11 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         assertEquals(OperationalState.ENABLED, node.getOperationalState(), "operational state should be ENABLED");
         assertThat("one value-name should be 'dsr/odu node name'",
             new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("dsr/odu node name")));
-        assertEquals(2, node.getLayerProtocolName().size(),
-            "dsr node should manage 2 protocol layers : dsr and odu");
-        assertThat("dsr node should manage 2 protocol layers : dsr and odu",
-            node.getLayerProtocolName(), hasItems(LayerProtocolName.DSR, LayerProtocolName.ODU));
+        assertEquals(4, node.getLayerProtocolName().size(),
+            "dsr node should manage 4 protocol layers : dsr, odu, DIGITALOTN and photonic");
+        assertThat("dsr node should manage 3 protocol layers : dsr, odu and photonic",
+            node.getLayerProtocolName(), hasItems(LayerProtocolName.DSR, LayerProtocolName.ODU,
+                LayerProtocolName.PHOTONICMEDIA));
         List<OwnedNodeEdgePoint> nepsN = node.nonnullOwnedNodeEdgePoint().values().stream()
             .filter(n -> n.getName().containsKey(new NameKey("iNodeEdgePoint_N")))
             .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue()))
@@ -804,8 +775,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
     }
 
     private void checkOtsiNode(
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.Node node,
-        Uuid nodeUuid, String otsiNodeType, String nodeId) {
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node,
+            Uuid nodeUuid, String otsiNodeType, String nodeId) {
         assertEquals(nodeUuid, node.getUuid(), "incorrect node uuid");
         assertEquals(nodeId, node.getName().get(new NameKey("otsi node name")).getValue(), "incorrect node name");
         assertEquals(AdministrativeState.UNLOCKED, node.getAdministrativeState(),
@@ -838,10 +809,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
                     otnSwitch.getNodeId().getValue(), TapiStringConstants.I_OTSI);
                 OwnedNodeEdgePoint nep2 = nepsE.get(0);
                 Uuid enepUuid = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+eOTSi+XPDR2-NETWORK2")
+                    UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+PHOTONIC_MEDIA_OTS+XPDR2-NETWORK2")
                         .getBytes(Charset.forName("UTF-8"))).toString());
                 checkNepOtsiNode(nep2, enepUuid, "XPDR2-NETWORK2", "eNodeEdgePoint",
-                    otnSwitch.getNodeId().getValue(), TapiStringConstants.E_OTSI);
+                    otnSwitch.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA_OTS);
                 List<NodeRuleGroup> nrgList = node.nonnullNodeRuleGroup().values().stream()
                     .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue()))
                     .collect(Collectors.toList());
@@ -852,10 +823,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
                 assertEquals(1, nepsI.size(), "Mux-OTSi node should have 1 iNEPs");
                 OwnedNodeEdgePoint nep3 = nepsE.get(0);
                 Uuid enepUuid2 = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+eOTSi+XPDR1-NETWORK1")
+                    UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1")
                         .getBytes(Charset.forName("UTF-8"))).toString());
                 checkNepOtsiNode(nep3, enepUuid2, "XPDR1-NETWORK1", "eNodeEdgePoint",
-                    otnMuxA.getNodeId().getValue(), TapiStringConstants.E_OTSI);
+                    otnMuxA.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA_OTS);
                 OwnedNodeEdgePoint nep4 = nepsI.get(0);
                 Uuid inepUuid2 = new Uuid(
                     UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+iOTSi+XPDR1-NETWORK1")
@@ -872,10 +843,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
                 assertEquals(2, nepsI.size(), "Tpdr-OTSi node should have 2 iNEPs");
                 OwnedNodeEdgePoint nep5 = nepsE.get(0);
                 Uuid enepUuid3 = new Uuid(
-                    UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+eOTSi+XPDR1-NETWORK1")
+                    UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1")
                         .getBytes(Charset.forName("UTF-8"))).toString());
                 checkNepOtsiNode(nep5, enepUuid3, "XPDR1-NETWORK1", "eNodeEdgePoint",
-                    tpdr100G.getNodeId().getValue(), TapiStringConstants.E_OTSI);
+                    tpdr100G.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA_OTS);
                 OwnedNodeEdgePoint nep6 = nepsI.get(0);
                 Uuid inepUuid3 = new Uuid(
                     UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+iOTSi+XPDR1-NETWORK1")
@@ -907,27 +878,30 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         }
     }
 
-    private void checkNepClient10G(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName,
-                                   String nodeId, String extension) {
+    private void checkNepClient10G(
+            OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName, String nodeId, String extension) {
         assertEquals(nepUuid, nep.getUuid(), "bad uuid for " + portName);
-        List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
-        Name name = nameList.get(0);
-        assertEquals(String.join("+", nodeId, extension, portName), name.getValue(),
+        Name name = new ArrayList<>(nep.nonnullName().values()).get(0);
+        assertEquals(
+            String.join("+", nodeId, extension, portName),
+            name.getValue(),
             "value of client nep should be '" + portName + "'");
         assertEquals(nepName, name.getValueName(),
             "value-name of client nep for '" + portName + "' should be '" + nepName + "'");
-        assertEquals(3, nep.getSupportedCepLayerProtocolQualifier().size(),
-            "Client nep should support 3 kind of cep");
-        assertThat("client nep should support 3 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        for (SupportedCepLayerProtocolQualifierInstances entry : nep.getSupportedCepLayerProtocolQualifierInstances()) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(3, lpql.size(), "Client nep should support 3 kind of cep");
+        assertThat("client nep should support 3 kind of cep", lpql,
             hasItems(ODUTYPEODU2.VALUE, ODUTYPEODU2E.VALUE, DIGITALSIGNALTYPE10GigELAN.VALUE));
-        assertEquals(LayerProtocolName.ETH, nep.getLayerProtocolName(), "client nep should be of ETH protocol type");
+        assertEquals(LayerProtocolName.DSR, nep.getLayerProtocolName(), "client nep should be of DSR(ETH) protocol ");
         checkCommonPartOfNep(nep, false);
         checkSIP(nep, portName, nodeId, extension);
     }
 
-    private void checkNepNetworkODU4(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName,
-                                     String nodeId, String extension) {
+    private void checkNepNetworkODU4(
+            OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName, String nodeId, String extension) {
         assertEquals(nepUuid, nep.getUuid(), "bad uuid for " + portName);
         List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
         Name name = nameList.get(0);
@@ -935,19 +909,20 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             "value of network nep should be '" + portName + "'");
         assertEquals(nepName, name.getValueName(),
             "value-name of network nep for '" + portName + "' should be '" + nepName + "'");
-        assertEquals(1, nep.getSupportedCepLayerProtocolQualifier().size(),
-            "Network nep should support 1 kind of cep");
-        assertThat("network nep should support 1 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItem(ODUTYPEODU4.VALUE));
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        for (SupportedCepLayerProtocolQualifierInstances entry :nep.getSupportedCepLayerProtocolQualifierInstances()) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(1, lpql.size(), "Network nep should support 1 kind of cep");
+        assertThat("network nep should support 1 kind of cep", lpql, hasItem(ODUTYPEODU4.VALUE));
         assertEquals(LayerProtocolName.ODU, nep.getLayerProtocolName(), "network nep should be of ODU protocol type");
         checkCommonPartOfNep(nep, false);
         checkSIP(nep, portName, nodeId, extension);
     }
 
-    private void checkNodeRuleGroupForTpdrDSR(List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid,
-                                              Uuid nodeUuid) {
-        assertEquals(2, nrgList.size(), "transponder DSR should contain 2 node rule group");
+    private void checkNodeRuleGroupForTpdrDSR(
+            List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid, Uuid nodeUuid) {
+        assertEquals(4, nrgList.size(), "transponder DSR should contain 4 node rule group (2*DSR/I_ODU+2*E_ODU/I_ODU)");
         for (NodeRuleGroup nodeRuleGroup : nrgList) {
             assertEquals(2, nodeRuleGroup.getNodeEdgePoint().size(),
                 "each node-rule-group should contain 2 NEP for transponder DSR");
@@ -966,14 +941,15 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Rule> rule = new ArrayList<>(nrgList.get(1).nonnullRule().values());
         assertEquals(1, rule.size(), "node-rule-group nb 1 should contain a single rule");
         assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, rule.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
-    private void checkNodeRuleGroupForMuxDSR(List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid,
-                                             Uuid nodeUuid) {
-        assertEquals(4, nrgList.size(), "muxponder DSR should contain 4 node rule group");
+    private void checkNodeRuleGroupForMuxDSR(
+            List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid, Uuid nodeUuid) {
+        assertEquals(8, nrgList.size(), "muxponder DSR should contain 8 node rule group (4*DSR/I_ODU + 4*E_ODU/I_ODU)");
         for (NodeRuleGroup nodeRuleGroup : nrgList) {
             assertEquals(2, nodeRuleGroup.getNodeEdgePoint().size(),
                 "each node-rule-group should contain 2 NEP for muxponder DSR");
@@ -992,14 +968,15 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Rule> rule = new ArrayList<>(nrgList.get(1).nonnullRule().values());
         assertEquals(1, rule.size(), "node-rule-group nb 2 should contain a single rule");
         assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, rule.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
-    private void checkNodeRuleGroupForSwitchDSR(List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid,
-                                                Uuid nodeUuid) {
-        assertEquals(1, nrgList.size(), "Switch-DSR should contain a single node rule group");
+    private void checkNodeRuleGroupForSwitchDSR(
+            List<NodeRuleGroup> nrgList, Uuid clientNepUuid, Uuid networkNepUuid, Uuid nodeUuid) {
+        assertEquals(2, nrgList.size(), "Switch-DSR should contain 2 node rule groups (DSR/I_ODU + E_ODU/I_ODU)");
         assertEquals(8, nrgList.get(0).getNodeEdgePoint().size(), "Switch-DSR node-rule-group should contain 8 NEP");
         List<NodeEdgePoint> nrg = nrgList.get(0).nonnullNodeEdgePoint().values().stream()
             .sorted((nrg1, nrg2) -> nrg1.getNodeEdgePointUuid().getValue()
@@ -1017,13 +994,19 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
     private void checkNodeRuleGroupForRdmInfra(List<NodeRuleGroup> nrgList, int nbNeps) {
-        assertEquals(1, nrgList.size(), "RDM infra node - OTSi should contain a single node rule groups");
+        // if no XPDR is connected, no OTS is created and no NodeRuleGroup is created
+        assertTrue(nrgList.size() <= 1, "RDM infra node - OTSi should contain maximum one node rule groups");
+        // When a nrg is present it shall respect the following
+        if (nrgList.isEmpty()) {
+            return;
+        }
         if (nbNeps > 0) {
             List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(0).getNodeEdgePoint().values());
             assertEquals(nbNeps, nodeEdgePointList.size(),
@@ -1034,13 +1017,14 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
-    private void checkNodeRuleGroupForTpdrOTSi(List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid,
-                                               Uuid nodeUuid) {
+    private void checkNodeRuleGroupForTpdrOTSi(
+            List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid, Uuid nodeUuid) {
         assertEquals(2, nrgList.size(), "Tpdr-OTSi should contain two node rule groups");
         List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(0).getNodeEdgePoint().values());
         assertEquals(2, nodeEdgePointList.size(), "Tpdr-OTSi node-rule-group should contain 2 NEP");
@@ -1057,13 +1041,14 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
-    private void checkNodeRuleGroupForMuxOTSi(List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid,
-                                              Uuid nodeUuid) {
+    private void checkNodeRuleGroupForMuxOTSi(
+            List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid, Uuid nodeUuid) {
         assertEquals(1, nrgList.size(), "Mux-OTSi should contain a single node rule group");
         List<NodeEdgePoint> nodeEdgePointList = new ArrayList<>(nrgList.get(0).getNodeEdgePoint().values());
         assertEquals(2, nodeEdgePointList.size(), "Mux-OTSi node-rule-group should contain 2 NEP");
@@ -1080,13 +1065,14 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
-    private void checkNodeRuleGroupForSwitchOTSi(List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid,
-                                                 Uuid nodeUuid) {
+    private void checkNodeRuleGroupForSwitchOTSi(
+            List<NodeRuleGroup> nrgList, Uuid enepUuid, Uuid inepUuid, Uuid nodeUuid) {
         assertEquals(4, nrgList.size(), "Switch-OTSi should contain 4 node rule group");
         for (NodeRuleGroup nodeRuleGroup : nrgList) {
             assertEquals(2, nodeRuleGroup.getNodeEdgePoint().size(),
@@ -1107,55 +1093,64 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Rule> ruleList0 = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList0.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList0.get(0).getLocalId(),"local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList0.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList0.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
-    private void checkNepClient100GSwitch(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName,
-                                          String nodeId, String extension) {
+    private void checkNepClient100GSwitch(
+            OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName, String nodeId, String extension) {
         assertEquals(nepUuid, nep.getUuid(), "bad uuid for " + portName);
         List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
         assertEquals(String.join("+", nodeId, extension, portName), nameList.get(0).getValue(),
             "value of client nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(),
             "value-name of client nep for '" + portName + "' should be '" + nepName + "'");
-        assertEquals(2, nep.getSupportedCepLayerProtocolQualifier().size(), "Client nep should support 2 kind of cep");
-        assertThat("client nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        for (SupportedCepLayerProtocolQualifierInstances entry : nep.getSupportedCepLayerProtocolQualifierInstances()) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(2, lpql.size(), "Client nep should support 2 kind of cep");
+        assertThat("client nep should support 2 kind of cep", lpql,
             hasItems(ODUTYPEODU4.VALUE, DIGITALSIGNALTYPE100GigE.VALUE));
-        assertEquals(LayerProtocolName.ETH, nep.getLayerProtocolName(), "client nep should be of ETH protocol type");
+        assertEquals(LayerProtocolName.DSR, nep.getLayerProtocolName(), "client nep should be of DSR(ETH) protocol");
         checkCommonPartOfNep(nep, false);
         checkSIP(nep, portName, nodeId, extension);
     }
 
-    private void checkNepClient100GTpdr(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName,
-                                        String nodeId, String extension) {
+    private void checkNepClient100GTpdr(
+            OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName, String nodeId, String extension) {
         assertEquals(nepUuid, nep.getUuid(), "bad uuid for " + portName);
         List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
         assertEquals(String.join("+", nodeId, extension, portName), nameList.get(0).getValue(),
             "value of client nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(),
             "value-name of client nep for '" + portName + "' should be 100G-tpdr'");
-        assertEquals(1, nep.getSupportedCepLayerProtocolQualifier().size(), "Client nep should support 1 kind of cep");
-        assertThat("client nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItems(DIGITALSIGNALTYPE100GigE.VALUE));
-        assertEquals(LayerProtocolName.ETH, nep.getLayerProtocolName(), "client nep should be of ETH protocol type");
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        for (SupportedCepLayerProtocolQualifierInstances entry : nep.getSupportedCepLayerProtocolQualifierInstances()) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(1, lpql.size(), "Client nep should support 1 kind of cep");
+        assertThat("client nep should support 2 kind of cep", lpql, hasItems(DIGITALSIGNALTYPE100GigE.VALUE));
+        assertEquals(LayerProtocolName.DSR, nep.getLayerProtocolName(), "client nep should be of DSR(ETH) protocol");
         checkCommonPartOfNep(nep, false);
         checkSIP(nep, portName, nodeId, extension);
     }
 
-    private void checkNepOtsiNode(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName,
-                                  String nodeId, String extension) {
+    private void checkNepOtsiNode(
+            OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName, String nodeId, String extension) {
         assertEquals(nepUuid, nep.getUuid(), "bad uuid for " + portName);
         List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
         assertEquals(String.join("+", nodeId, extension, portName), nameList.get(0).getValue(),
             "value of OTSi nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(), "value-name of OTSi nep should be '" + nepName + "'");
-        assertEquals(2, nep.getSupportedCepLayerProtocolQualifier().size(), "OTSi nep should support 2 kind of cep");
-        assertThat("OTSi nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        for (SupportedCepLayerProtocolQualifierInstances entry : nep.getSupportedCepLayerProtocolQualifierInstances()) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(2, lpql.size(), "OTSi nep should support 2 kind of cep");
+        assertThat("OTSi nep should support 2 kind of cep", lpql,
             hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE, PHOTONICLAYERQUALIFIEROTSi.VALUE));
         assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(),
             "OTSi nep should be of PHOTONIC_MEDIA protocol type");
@@ -1165,8 +1160,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
     }
 
     private void checkSIP(OwnedNodeEdgePoint nep, String portName, String nodeId, String extension) {
-        Uuid sipUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeId, extension, portName))
-            .getBytes(Charset.forName("UTF-8"))).toString());
+        Uuid sipUuid = new Uuid(
+            UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeId, extension, portName))
+                    .getBytes(Charset.forName("UTF-8")))
+                .toString());
         assertEquals(
             sipUuid,
             nep.getMappedServiceInterfacePoint().get(new MappedServiceInterfacePointKey(sipUuid))
@@ -1180,11 +1177,12 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
         List<Name> nameList = new ArrayList<>(nep.nonnullName().values());
         assertEquals(portName, nameList.get(0).getValue(), "value of OTSi nep should be '" + portName + "'");
         assertEquals(nepName, nameList.get(0).getValueName(), "value-name of OTSi nep should be '" + nepName + "'");
-        assertEquals(1, nep.getSupportedCepLayerProtocolQualifier().size(),
-            "OTSi nep of RDM infra node should support only 1 kind of cep");
-        assertThat("OTSi nep should support 2 kind of cep",
-            nep.getSupportedCepLayerProtocolQualifier(),
-            hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE));
+        List<LAYERPROTOCOLQUALIFIER> lpql = new ArrayList<>();
+        for (SupportedCepLayerProtocolQualifierInstances entry : nep.getSupportedCepLayerProtocolQualifierInstances()) {
+            lpql.add(entry.getLayerProtocolQualifier());
+        }
+        assertEquals(1, lpql.size(), "OTSi nep of RDM infra node should support only 1 kind of cep");
+        assertThat("OTSi nep should support OTS cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROTS.VALUE));
         assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(),
             "OTSi nep should be of PHOTONIC_MEDIA protocol type");
         assertEquals(0, nep.nonnullMappedServiceInterfacePoint().size(), "OTSi nep of RDM infra should support no SIP");
@@ -1192,67 +1190,31 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
     }
 
     private void checkCommonPartOfNep(OwnedNodeEdgePoint nep, boolean isRdm) {
-        assertEquals(PortDirection.BIDIRECTIONAL, nep.getLinkPortDirection(),
+        assertEquals(Direction.BIDIRECTIONAL, nep.getDirection(),
             "link port direction should be DIRECTIONAL");
         assertEquals(AdministrativeState.UNLOCKED, nep.getAdministrativeState(),
             "administrative state should be UNLOCKED");
-        assertEquals(TerminationState.TERMINATEDBIDIRECTIONAL, nep.getTerminationState(),
-            "termination state should be TERMINATED BIDIRECTIONAL");
+//      TODO: convert this test since terminationState is migrated to CEP attribute in TAPI 2.4
+//        assertEquals(TerminationState.TERMINATEDBIDIRECTIONAL, nep.getTerminationState(),
+//            "termination state should be TERMINATED BIDIRECTIONAL");
         assertEquals(LifecycleState.INSTALLED, nep.getLifecycleState(),
             "life-cycle state should be INSTALLED");
         if (!isRdm) {
             assertEquals(1, nep.getMappedServiceInterfacePoint().size(), "client nep should support 1 SIP");
         }
-        assertEquals(TerminationDirection.BIDIRECTIONAL, nep.getTerminationDirection(),
-            "termination direction should be BIDIRECTIONAL");
+//      TODO: convert this test since terminationState is migrated to CEP attribute in TAPI 2.4
+//        assertEquals(TerminationDirection.BIDIRECTIONAL, nep.getTerminationDirection(),
+//            "termination direction should be BIDIRECTIONAL");
         assertEquals(OperationalState.ENABLED, nep.getOperationalState(),
             "operational state of client nep should be ENABLED");
         assertEquals(PortRole.SYMMETRIC, nep.getLinkPortRole(), "link-port-role of client nep should be SYMMETRIC");
     }
 
-    private void checkTransitionalLink(Link link, Uuid node1Uuid, Uuid node2Uuid, String tp1, String tp2,
-                                       String ietfNodeId) {
-        Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes((tp1 + "to" + tp2)
-            .getBytes(Charset.forName("UTF-8"))).toString());
-        assertEquals(linkUuid, link.getUuid(), "bad uuid for link between DSR node " + tp1 + " and iOTSI port " + tp2);
-        assertEquals(CapacityUnit.GBPS, link.getAvailableCapacity().getTotalSize().getUnit(),
-            "Available capacity unit should be GBPS");
-        assertEquals(Uint64.valueOf(100), link.getAvailableCapacity().getTotalSize().getValue(),
-            "Available capacity -total size value should be 100");
-        assertEquals(2, link.getTransitionedLayerProtocolName().size(),
-            "transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA");
-        assertThat("transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA",
-            link.getTransitionedLayerProtocolName(),
-            hasItems(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()));
-        assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(),
-            "transitional link should be BIDIRECTIONAL");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-            .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
-        assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(),
-            "topology uuid should be the same for the two termination point of the link");
-        assertEquals(topologyUuid, nodeEdgePointList.get(1).getTopologyUuid(),
-            "topology uuid should be the same for the two termination point of the link");
-        assertThat("transitional links should terminate on DSR node and Photonic node",
-            nodeEdgePointList.get(0).getNodeUuid().getValue(),
-            either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue())));
-        assertThat("transitional links should terminate on DSR node and Photonic node",
-            nodeEdgePointList.get(1).getNodeUuid().getValue(),
-            either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue())));
-        Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(tp1.getBytes(Charset.forName("UTF-8"))).toString());
-        Uuid nep2Uuid = new Uuid(UUID.nameUUIDFromBytes(tp2.getBytes(Charset.forName("UTF-8"))).toString());
-        assertThat("transitional links should terminate on " + tp1 + " and " + tp2 + " neps",
-            nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(),
-            either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue())));
-        assertThat("transitional links should terminate on DSR node and Photonic node",
-            nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(),
-            either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue())));
-    }
-
-    private void checkOtnLink(Link link, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid,
-                              String linkName) {
+    private void checkOtnLink(
+            Link link, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid, String linkName) {
         assertEquals(linkName, link.getName().get(new NameKey("otn link name")).getValue(), "bad name for the link");
         assertEquals(linkUuid, link.getUuid(), "bad uuid for link");
-        assertEquals(CapacityUnit.GBPS, link.getAvailableCapacity().getTotalSize().getUnit(),
+        assertEquals(CAPACITYUNITGBPS.VALUE, link.getAvailableCapacity().getTotalSize().getUnit(),
             "Available capacity unit should be MBPS");
         String prefix = linkName.split("-")[0];
         if ("OTU4".equals(prefix)) {
@@ -1262,9 +1224,9 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             assertEquals(Uint64.valueOf(100000), link.getAvailableCapacity().getTotalSize().getValue(),
                 "Available capacity -total size value should be 100 000");
         }
-        assertEquals(CapacityUnit.GBPS, link.getTotalPotentialCapacity().getTotalSize().getUnit(),
+        assertEquals(CAPACITYUNITGBPS.VALUE, link.getTotalPotentialCapacity().getTotalSize().getUnit(),
             "Total capacity unit should be GBPS");
-        assertEquals(Uint64.valueOf(100), link.getTotalPotentialCapacity().getTotalSize().getValue(),
+        assertEquals(Decimal64.valueOf("100"), link.getTotalPotentialCapacity().getTotalSize().getValue(),
             "Total capacity -total size value should be 100");
         if ("OTU4".equals(prefix)) {
             assertEquals(
@@ -1278,8 +1240,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
                 "otn link should be between 2 nodes of protocol layers ODU");
         }
         assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(), "otn tapi link should be BIDIRECTIONAL");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-            .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
+        LOG.info("OUTPUT: Node1UUID = {}, Node2UU2D = {},", node1Uuid, node2Uuid);
+        LOG.info("NEPLIST = {}", nodeEdgePointList);
         assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(),
             "topology uuid should be the same for the two termination point of the link");
         assertEquals(topologyUuid, nodeEdgePointList.get(1).getTopologyUuid(),
@@ -1301,17 +1265,17 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
             "administrative state should be UNLOCKED");
     }
 
-    private void checkOmsLink(Link link, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid,
-                              String linkName) {
-        assertEquals(linkName, link.getName().get(new NameKey("OMS link name")).getValue(), "bad name for the link");
+    private void checkOmsLink(
+            Link link, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid, String linkName) {
+        assertEquals(linkName, link.getName().get(new NameKey("OTS link name")).getValue(), "bad name for the link");
         assertEquals(linkUuid, link.getUuid(), "bad uuid for link");
         assertEquals(
             LayerProtocolName.PHOTONICMEDIA.getName(),
             link.getLayerProtocolName().stream().findFirst().orElseThrow().getName(),
             "oms link should be between 2 nodes of protocol layers PHOTONIC_MEDIA");
         assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(), "otn tapi link should be BIDIRECTIONAL");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
-            .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
+                .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
         assertEquals(2, nodeEdgePointList.size(), "oms link should be between 2 neps");
         assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(),
             "topology uuid should be the same for the two termination point of the link");
@@ -1332,34 +1296,50 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest {
     }
 
     private Node changeTerminationPointState(Node initialNode, String tpid, AdminStates admin, State oper) {
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder tpdr1Bldr
-            = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.Node1Builder(
-            initialNode.augmentation(Node1.class));
+        var tpdr1Bldr = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .Node1Builder(initialNode.augmentation(Node1.class));
         Map<TerminationPointKey, TerminationPoint> tps = new HashMap<>(tpdr1Bldr.getTerminationPoint());
-        TerminationPointBuilder tpBldr = new TerminationPointBuilder(
-            tps.get(new TerminationPointKey(new TpId(tpid))));
-        TerminationPoint1Builder tp1Bldr = new TerminationPoint1Builder(tpBldr.augmentation(TerminationPoint1.class));
-        tp1Bldr.setAdministrativeState(admin)
-            .setOperationalState(oper);
+        TerminationPointBuilder tpBldr = new TerminationPointBuilder(tps.get(new TerminationPointKey(new TpId(tpid))));
+        TerminationPoint1Builder tp1Bldr =
+            new TerminationPoint1Builder(tpBldr.augmentation(TerminationPoint1.class))
+                .setAdministrativeState(admin)
+                .setOperationalState(oper);
         tpBldr.addAugmentation(tp1Bldr.build());
         tps.replace(tpBldr.key(), tpBldr.build());
-        tpdr1Bldr.setTerminationPoint(tps);
-        return new NodeBuilder(initialNode).addAugmentation(tpdr1Bldr.build()).build();
+        return new NodeBuilder(initialNode).addAugmentation(tpdr1Bldr.setTerminationPoint(tps).build()).build();
     }
 
-    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .Link changeOtnLinkState(
-            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .Link initiallink, AdminStates admin, State oper) {
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link changeOtnLinkState(
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.Link initiallink,
+            AdminStates admin,
+            State oper) {
+        var linkBldr = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226
+                .networks.network.LinkBuilder(initiallink);
+        return linkBldr
+            .addAugmentation(
+                new Link1Builder(linkBldr.augmentation(Link1.class))
+                    .setAdministrativeState(admin)
+                    .setOperationalState(oper)
+                    .build())
+            .build();
+    }
 
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .LinkBuilder linkBldr = new
-            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network
-            .LinkBuilder(initiallink);
-        Link1Builder link1Bldr = new Link1Builder(linkBldr.augmentation(Link1.class));
-        link1Bldr.setAdministrativeState(admin)
-            .setOperationalState(oper);
-        linkBldr.addAugmentation(link1Bldr.build());
-        return linkBldr.build();
+    private int getNodeRank(
+            String searchedChar,
+            List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> nodeList) {
+        int foundAtRank = 0;
+        int rank = 0;
+        for (var node: nodeList) {
+            for (Map.Entry<NameKey, Name> entry: node.getName().entrySet()) {
+                if (entry.getValue().getValue().contains(searchedChar)) {
+                    foundAtRank = rank;
+                }
+            }
+            rank++;
+        }
+        LOG.info("searched Char {} found at rank {}", searchedChar, foundAtRank);
+        return foundAtRank;
     }
-}
\ No newline at end of file
+}
index b09340b2582751a1964073bd7782392e443a9d8c..4fc51dc7986924dbb6afc5ba03d4fde83f18c8e2 100644 (file)
@@ -7,37 +7,42 @@
  */
 package org.opendaylight.transportpce.tapi.topology;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.mockito.Mockito.mock;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
 import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Optional;
+import java.nio.charset.Charset;
+import java.util.UUID;
 import java.util.concurrent.ExecutionException;
-import org.eclipse.jdt.annotation.NonNull;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.ReadTransaction;
-import org.opendaylight.mdsal.common.api.CommitInfo;
-import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyDetailsImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.topology.details.output.Topology;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+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.topology.rev221121.GetTopologyDetails;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsOutput;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
+@ExtendWith(MockitoExtension.class)
 public class TapiTopologyImplExceptionTest {
+    @Mock
+    private RpcService rpcService;
+    @Mock
+    private NetworkTransactionService networkTransactionService;
     @Mock
     private TapiContext tapiContext;
     @Mock
@@ -47,58 +52,18 @@ public class TapiTopologyImplExceptionTest {
 
     @Test
     void getTopologyDetailsWithExceptionTest() throws InterruptedException, ExecutionException {
-        DataBroker dataBroker = mock(DataBroker.class);
-        when(dataBroker.newReadOnlyTransaction())
-                .thenReturn(new ReadTransactionMock());
-        NetworkTransactionService networkTransactionService = mock(NetworkTransactionService.class);
-        Answer<FluentFuture<CommitInfo>> answer = new Answer<FluentFuture<CommitInfo>>() {
-
-            @Override
-            public FluentFuture<CommitInfo> answer(InvocationOnMock invocation) throws Throwable {
-                return CommitInfo.emptyFluentFuture();
-            }
-
-        };
-        when(networkTransactionService.commit()).then(answer);
-        tapiContext = new TapiContext(networkTransactionService);
-
-        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(
-            TapiStringConstants.T0_MULTILAYER);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(dataBroker, tapiContext, topologyUtils, tapiLink);
-        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
-        RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
-        if (rpcResult.isSuccessful()) {
-            Topology topology = rpcResult.getResult().getTopology();
-            assertNull(topology, "Topology should be null");
-        } else {
-            assertNull(null, "Topology should be null");
-        }
-    }
-
-    private class ReadTransactionMock implements ReadTransaction {
-
-        @Override
-        public @NonNull Object getIdentifier() {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public <T extends DataObject> @NonNull FluentFuture<Optional<T>> read(@NonNull LogicalDatastoreType store,
-                                                                              @NonNull InstanceIdentifier<T> path) {
-            return FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException()));
-        }
-
-        @Override
-        public @NonNull FluentFuture<Boolean> exists(@NonNull LogicalDatastoreType store,
-                                                     @NonNull InstanceIdentifier<?> path) {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public void close() {
-            // TODO Auto-generated method stub
-        }
+        when(networkTransactionService.read(any(), any()))
+            .thenReturn(FluentFuture.from(Futures.immediateFailedFuture(new InterruptedException())));
+        when(rpcService.getRpc(GetTopologyDetails.class))
+            .thenReturn(new GetTopologyDetailsImpl(tapiContext, topologyUtils, tapiLink, networkTransactionService));
+        Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
+            Charset.forName("UTF-8"))).toString());
+        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
+        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = rpcService
+                .getRpc(GetTopologyDetails.class).invoke(input);
+        assertFalse(result.get().isSuccessful(), "RpcResult is not successful");
+        assertNull(result.get().getResult(), "RpcResult result should be null");
+        assertEquals(ErrorType.RPC, result.get().getErrors().get(0).getErrorType());
+        assertEquals("Error building topology", result.get().getErrors().get(0).getMessage());
     }
 }
\ No newline at end of file
index 5898a6e1515540b9b7495b002566f55906cb7299..427b637578d8840976ce20c6e62382d9eebcd020 100644 (file)
@@ -14,8 +14,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -29,6 +29,10 @@ import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.Nullable;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.transportpce.common.InstanceIdentifiers;
 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
@@ -36,6 +40,12 @@ import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOper
 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
 import org.opendaylight.transportpce.tapi.TapiStringConstants;
 import org.opendaylight.transportpce.tapi.connectivity.ConnectivityUtils;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetLinkDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetNodeEdgePointDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointDetailsImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetServiceInterfacePointListImpl;
+import org.opendaylight.transportpce.tapi.impl.rpc.GetTopologyDetailsImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiContext;
 import org.opendaylight.transportpce.tapi.utils.TapiInitialORMapping;
 import org.opendaylight.transportpce.tapi.utils.TapiLink;
@@ -43,47 +53,50 @@ import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
 import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils;
 import org.opendaylight.transportpce.test.AbstractTest;
 import org.opendaylight.transportpce.test.utils.TopologyDataUtils;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointListInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointListOutput;
-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.OperationalState;
-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.get.service._interface.point.list.output.Sip;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.get.service._interface.point.list.output.SipKey;
-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.NameKey;
-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.GetLinkDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetLinkDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeEdgePointDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeEdgePointDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsOutput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Node;
-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.get.topology.details.output.Topology;
-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.OwnedNodeEdgePoint;
-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.Rule;
-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.common.rev221121.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointListOutput;
+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.OperationalState;
+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.get.service._interface.point.list.output.Sip;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.get.service._interface.point.list.output.SipKey;
+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.NameKey;
+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.GetLinkDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetLinkDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsOutput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Node;
+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.get.topology.details.output.Topology;
+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.OwnedNodeEdgePoint;
+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.Rule;
+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.LinkKey;
+import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.Uint64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@ExtendWith(MockitoExtension.class)
 public class TapiTopologyImplTest extends AbstractTest {
     private static final Logger LOG = LoggerFactory.getLogger(TapiTopologyImplTest.class);
 
-    private static ListeningExecutorService executorService;
-    private static CountDownLatch endSignal;
+    @Mock
+    private RpcService rpcService;
     private static final int NUM_THREADS = 3;
     private static NetworkTransactionService networkTransactionService;
     private static TapiContext tapiContext;
@@ -95,8 +108,8 @@ public class TapiTopologyImplTest extends AbstractTest {
 
     @BeforeAll
     static void setUp() throws InterruptedException, ExecutionException {
-        executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUM_THREADS));
-        endSignal = new CountDownLatch(1);
+        MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(NUM_THREADS));
+        new CountDownLatch(1);
         TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(),
             TapiTopologyDataUtils.OPENROADM_TOPOLOGY_FILE, InstanceIdentifiers.OVERLAY_NETWORK_II);
         TopologyDataUtils.writeTopologyFromFileToDatastore(getDataStoreContextUtil(),
@@ -120,19 +133,17 @@ public class TapiTopologyImplTest extends AbstractTest {
     }
 
     @Test
-    void getTopologyDetailsForTransponder100GTopologyWhenSuccessful()
-            throws ExecutionException, InterruptedException {
-        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(
-            TapiStringConstants.TPDR_100G);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
-        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-        endSignal.await();
+    void getTopologyDetailsForTransponder100GTopologyWhenSuccessful() throws ExecutionException, InterruptedException {
+        Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes(
+            Charset.forName("UTF-8"))).toString());
+        LOG.info("TPDR100GUuid = {}", topologyUuid);
+        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
+//        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(networkTransactionService, tapiContext, topologyUtils,
+//            tapiLink);
+        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = new GetTopologyDetailsImpl(tapiContext,
+                topologyUtils, tapiLink, networkTransactionService)
+            .invoke(input);
+        LOG.info("RESULT of getTopoDetailsTopo/name = {}", result.get().getResult().getTopology().getName().toString());
         RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
         @Nullable
         Topology topology = rpcResult.getResult().getTopology();
@@ -160,34 +171,36 @@ public class TapiTopologyImplTest extends AbstractTest {
         List<Rule> ruleList = new ArrayList<>(nrgList.get(0).nonnullRule().values());
         assertEquals(1, ruleList.size(), "node-rule-group should contain a single rule");
         assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'");
-        assertEquals(ForwardingRule.MAYFORWARDACROSSGROUP, ruleList.get(0).getForwardingRule(),
+        assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(),
             "the forwarding rule should be 'MAYFORWARDACROSSGROUP'");
-        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'");
+        assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(),
+            "the rule type should be 'FORWARDING'");
     }
 
     @Test
-    void getTopologyDetailsForOtnTopologyWithOtnLinksWhenSuccessful()
-            throws ExecutionException, InterruptedException {
-        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(
-            TapiStringConstants.T0_MULTILAYER);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
-        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-        endSignal.await();
+    void getTopologyDetailsForOtnTopologyWithOtnLinksWhenSuccessful() throws ExecutionException, InterruptedException {
+        Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes(
+            Charset.forName("UTF-8"))).toString());
+        LOG.info("T0MultilayerUuid = {}", topologyUuid);
+        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
+        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = new GetTopologyDetailsImpl(tapiContext,
+                topologyUtils, tapiLink, networkTransactionService)
+            .invoke(input);
         RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
         @Nullable
         Topology topology = rpcResult.getResult().getTopology();
         assertNotNull(topology, "Topology should not be null");
-        assertEquals(13, topology.getNode().size(), "Node list size should be 13");
+        for (Map.Entry<
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> entry :
+                topology.getNode().entrySet()) {
+            LOG.debug("NODESDETECTED = {}",entry.getValue().getName().toString());
+        }
+        assertEquals(7, topology.getNode().size(), "Node list size should be 7");
         long nb1 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
             .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
-                .equals("XPDR-A1-XPDR1+DSR"))
+                .equals("XPDR-A1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr"))))
             .count();
@@ -195,7 +208,7 @@ public class TapiTopologyImplTest extends AbstractTest {
         long nb2 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
             .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
-                .equals("SPDR-SA1-XPDR1+DSR"))
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C"))))
             .count();
@@ -203,7 +216,7 @@ public class TapiTopologyImplTest extends AbstractTest {
         long nb3 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
             .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
-                .equals("SPDR-SA1-XPDR1+DSR"))
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N"))))
             .count();
@@ -211,7 +224,7 @@ public class TapiTopologyImplTest extends AbstractTest {
         long nb4 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
             .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
-                .equals("SPDR-SA1-XPDR2+DSR"))
+                .equals("SPDR-SA1-XPDR2+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C"))))
             .count();
@@ -219,12 +232,40 @@ public class TapiTopologyImplTest extends AbstractTest {
         long nb5 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
             .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
-                .equals("SPDR-SA1-XPDR2+DSR"))
+                .equals("SPDR-SA1-XPDR2+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N"))))
             .count();
         assertEquals(2, nb5, "SPDR-SA1-XPDR2 (switch) should have 2 network neps");
-        assertEquals(18, topology.getLink().size(), "Link list size should be 18");
+        long nb7 = topology.getNode().values().stream()
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
+                && node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("otsi node name")).getValue()
+                .equals("XPDR-A1-XPDR1+XPONDER"))
+            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
+                .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
+            .count();
+        assertEquals(1, nb7, "XPDR-A1-XPDR1 should only have 1 OTSI network nep");
+        long nb8 = topology.getNode().values().stream()
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
+                && node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("otsi node name")).getValue()
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
+            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
+                .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
+            .count();
+        assertEquals(1, nb8, "SPDR-SA1-XPDR1 (mux) should have a single OTSI network nep");
+        long nb9 = topology.getNode().values().stream()
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
+                && node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("otsi node name")).getValue()
+                .equals("SPDR-SA1-XPDR2+XPONDER"))
+            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
+                .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
+            .count();
+        assertEquals(2, nb9, "SPDR-SA1-XPDR2 (switch) should have 2 OTSI network nep");
+
+        assertEquals(10, topology.getLink().size(), "Link list size should be 10, no more transitionnal links");
         Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes("T0 - Multi-layer topology".getBytes()).toString());
         assertEquals(topoUuid, topology.getUuid(), "incorrect topology uuid");
         assertEquals(
@@ -237,24 +278,21 @@ public class TapiTopologyImplTest extends AbstractTest {
         long nbPhotonicNodes = topology.nonnullNode().values().stream()
             .filter(n -> n.getName().containsKey(new NameKey("otsi node name"))).count();
         assertEquals(6, nbDsrOduNodes, "Node list should contain 6 DSR-ODU nodes");
-        assertEquals(7, nbPhotonicNodes, "Node list should contain 7 Photonics nodes");
-        long nbTransititionalLinks = topology.getLink().values().stream()
-            .filter(l -> l.getName().containsKey(new NameKey("transitional link name"))).count();
-        long nbOmsLinks = topology.getLink().values().stream()
-            .filter(l -> l.getName().containsKey(new NameKey("OMS link name"))).count();
+        assertEquals(7, nbPhotonicNodes, "Node list should contain 7 Photonics node");
+        long nbOtsLinks = topology.getLink().values().stream()
+            .filter(l -> l.getName().containsKey(new NameKey("OTS link name"))).count();
         long nbOtnLinks = topology.getLink().values().stream()
             .filter(l -> l.getName().containsKey(new NameKey("otn link name"))).count();
-        assertEquals(8, nbTransititionalLinks, "Link list should contain 8 transitional links");
-        assertEquals(8, nbOmsLinks, "Link list should contain 8 transitional links");
+        assertEquals(8, nbOtsLinks, "Link list should contain 8 OTS links");
         assertEquals(2, nbOtnLinks, "Link list should contain 2 OTN links");
 
-        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(StandardCharsets.UTF_8))
+        Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8))
             .toString());
-        Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+DSR".getBytes(StandardCharsets.UTF_8))
+        Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8))
             .toString());
-        Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(StandardCharsets.UTF_8))
+        Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8))
             .toString());
-        Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+OTSi".getBytes(StandardCharsets.UTF_8))
+        Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8))
             .toString());
         Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1"
             .getBytes(StandardCharsets.UTF_8)).toString());
@@ -279,197 +317,167 @@ public class TapiTopologyImplTest extends AbstractTest {
             "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1toSPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1");
         checkOtnLink(links.get(1), topoUuid, node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link2Uuid,
             "SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1toSPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1");
+
     }
 
     @Test
     void getTopologyDetailsForFullTapiTopologyWithLinksWhenSuccessful()
             throws ExecutionException, InterruptedException {
-        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(
-            TapiStringConstants.T0_FULL_MULTILAYER);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
-        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-        endSignal.await();
+        Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
+            Charset.forName("UTF-8"))).toString());
+        LOG.info("T0FullMultilayerUuid = {}", topologyUuid);
+        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
+        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = new GetTopologyDetailsImpl(tapiContext,
+                topologyUtils, tapiLink, networkTransactionService)
+            .invoke(input);
         RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
         @Nullable
         Topology topology = rpcResult.getResult().getTopology();
         assertNotNull(topology, "Topology should not be null");
-        // 2 Nodes per Xpdr/Spdr node (DSR-ODU & PHOT) + 1 Node per Roadm
-        assertEquals(18, topology.getNode().size(), "Node list size should be 18");
+        // 2 ROADM Nodes, 2 XPDR Nodes, 6 SPDR Nodes
+        assertEquals(10, topology.getNode().size(), "Node list size should be 10");
+        List<Map<NameKey, Name>> nodeNames = topology.getNode().values().stream()
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
+            .map(Node::getName).collect(Collectors.toList());
+        LOG.info("TopologyNodes = {}", nodeNames.toString());
+        Node nodeTsp = topology.getNode().values().stream()
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("XPDR-A1-XPDR1+XPONDER"))
+            .findAny().orElseThrow();
+        LOG.debug("XPDRA1 NEPs = {}", nodeTsp.getOwnedNodeEdgePoint().toString());
         long nb1 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("XPDR-A1-XPDR1+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("XPDR-A1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr"))))
             .count();
         // 2 client ports in configuration -> removed the checkTp so we have 2 NEPs
-        assertEquals(2, nb1, "XPDR-A1-XPDR1+DSR should only have two client neps");
+        assertEquals(2, nb1, "XPDR-A1-XPDR1+XPONDER should only have two client neps");
         long inb1 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("XPDR-A1-XPDR1+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("XPDR-A1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N"))))
             .count();
-        assertEquals(2, inb1, "XPDR-A1-XPDR1+DSR should only have two internal network neps");
+        assertEquals(2, inb1, "XPDR-A1-XPDR1+XPONDER should only have two internal network neps");
         long enb1 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("XPDR-A1-XPDR1+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("XPDR-A1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N"))))
             .count();
-        assertEquals(2, enb1, "XPDR-A1-XPDR1+DSR should only have two external network neps");
+        assertEquals(2, enb1, "XPDR-A1-XPDR1+XPONDER should only have two external network neps");
         long nb2 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR1+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C"))))
             .count();
-        assertEquals(4, nb2, "SPDR-SA1-XPDR1+DSR (mux) should have 4 client neps");
+        assertEquals(4, nb2, "SPDR-SA1-XPDR1+XPONDER (mux) should have 4 client neps");
         long inb3 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR1+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N"))))
             .count();
-        assertEquals(1, inb3, "SPDR-SA1-XPDR1+DSR (mux) should have a single internal network nep");
+        assertEquals(1, inb3, "SPDR-SA1-XPDR1+XPONDER (mux) should have a single internal network nep");
         long enb3 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR1+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N"))))
             .count();
-        assertEquals(4, enb3, "SPDR-SA1-XPDR1+DSR (mux) should have 4 external network nep");
+        assertEquals(4, enb3, "SPDR-SA1-XPDR1+XPONDER (mux) should have 4 external network nep");
         long nb4 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR2+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR2+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C"))))
             .count();
-        assertEquals(4, nb4, "SPDR-SA1-XPDR2+DSR (switch) should have 4 client neps");
+        assertEquals(4, nb4, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 client neps");
         long inb5 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR2+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR2+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N"))))
             .count();
-        assertEquals(4, inb5, "SPDR-SA1-XPDR2+DSR (switch) should have 4 internal network neps");
+        assertEquals(4, inb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 internal network neps");
         long enb5 = topology.getNode().values().stream()
             .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR2+DSR"))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N"))))
             .count();
-        assertEquals(4, enb5, "SPDR-SA1-XPDR2+DSR (switch) should have 4 external network neps");
+        assertEquals(4, enb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 external network neps");
 
-        // Now lets check for the Photonic media nodes (same nodes as for DSR + 1 Roadm node)
-        nb1 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("XPDR-A1-XPDR1+OTSi"))
-            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint"))))
-            .count();
-        // 2 client ports in configuration -> removed the checkTp so we have 2 NEPs
-        assertEquals(2, nb1, "XPDR-A1-XPDR1+OTSi should only have two internal network neps");
         inb1 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("XPDR-A1-XPDR1+OTSi"))
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("XPDR-A1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
+                .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N"))))
             .count();
-        assertEquals(2, inb1, "XPDR-A1-XPDR1+OTSi should only have two external network neps");
+        assertEquals(2, inb1, "XPDR-A1-XPDR1+XPONDER should only have two external network neps");
         enb1 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("XPDR-A1-XPDR1+OTSi"))
-            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("PhotMedNodeEdgePoint"))))
-            .count();
-        assertEquals(2, enb1, "XPDR-A1-XPDR1+OTSi should only have two photonic network neps");
-        nb2 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR1+OTSi"))
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("XPDR-A1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint"))))
+                .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N"))))
             .count();
-        assertEquals(1, nb2, "SPDR-SA1-XPDR1+OTSi (mux) should have a single internal network nep");
+        assertEquals(2, enb1, "XPDR-A1-XPDR1+XPONDER should only have two photonic network neps");
         inb3 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR1+OTSi"))
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR1+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
             .count();
-        assertEquals(1, inb3, "SPDR-SA1-XPDR1+OTSi (mux) should have a single external network nep");
-        enb3 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR1+OTSi"))
-            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("PhotMedNodeEdgePoint"))))
-            .count();
-        assertEquals(1, enb3, "SPDR-SA1-XPDR1+OTSi (mux) should have a single photonic network nep");
-        nb4 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR2+OTSi"))
-            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint"))))
-            .count();
-        assertEquals(4, nb4, "SPDR-SA1-XPDR2+OTSi (switch) should have 4 internal network neps");
+        assertEquals(1, inb3, "SPDR-SA1-XPDR1+XPONDER (mux) should have a single external network nep");
         inb5 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR2+OTSi"))
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue()
+                .equals("SPDR-SA1-XPDR2+XPONDER"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
                 .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint"))))
             .count();
-        assertEquals(4, inb5, "SPDR-SA1-XPDR2+OTSi (switch) should have 4 external network neps");
-        enb5 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue()
-                .equals("SPDR-SA1-XPDR2+OTSi"))
-            .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().containsKey(new NameKey("PhotMedNodeEdgePoint"))))
-            .count();
-        assertEquals(4, enb5, "SPDR-SA1-XPDR2+OTSi (switch) should have 4 photonic network neps");
-        // We should have 3 neps per DEGREE-TTP port and 3 neps per SRG-PP port
+        assertEquals(4, inb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 external network neps");
         long inb6 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue().equals(
-                "ROADM-A1+PHOTONIC_MEDIA"))
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
+                && !node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue()
+                .equals("ROADM-A1+PHOTONIC_MEDIA"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().values().stream().findFirst().orElseThrow().getValue().contains("DEG")))
+                .filter(nep -> nep.getName().values().stream().findAny().orElseThrow().getValue().contains("DEG")))
             .count();
-        assertEquals(6, inb6, "ROADM-A1+PHOTONIC_MEDIA (DEGREE) should have 6 network neps");
+        assertEquals(4, inb6, "ROADM-A1+PHOTONIC_MEDIA (DEGREE) should have 4 network neps");
         long enb6 = topology.getNode().values().stream()
-            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA))
-            .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue().equals(
-                "ROADM-A1+PHOTONIC_MEDIA"))
+            .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)
+                && !node.getLayerProtocolName().contains(LayerProtocolName.DSR))
+            .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue()
+                .equals("ROADM-A1+PHOTONIC_MEDIA"))
             .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream()
-                .filter(nep -> nep.getName().values().stream().findFirst().orElseThrow().getValue().contains("SRG")))
+                .filter(nep -> nep.getName().values().stream().findAny().orElseThrow().getValue().contains("SRG")))
             .count();
-        assertEquals(24, enb6, "ROADM-A1+PHOTONIC_MEDIA (SRG) should have 24 network neps");
+        assertEquals(8, enb6, "ROADM-A1+PHOTONIC_MEDIA (SRG) should have 8 network neps (OTS)");
 
         // Links in openroadm topology which include Roadm-to-Roadm and Xpdr-to-Roadm (ortopo / 2)
-        // + transitional links -> 1 per network port of Xpdr + OTN links / 2
-        assertEquals(25, topology.getLink().size(), "Link list size should be 25");
+        // + transitional links -> 0 per network port of Xpdr + OTN links / 2
+        List<String> linkList = new ArrayList<>();
+        for (Map.Entry<LinkKey, Link> entry : topology.getLink().entrySet()) {
+            linkList.add(entry.getValue().getName().entrySet().iterator().next().getValue().toString());
+        }
+        assertEquals(9, topology.getLink().size(), "Link list size should be 8 XPDR To SRG and 1 DEG2A-DEG1C");
         Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes("T0 - Full Multi-layer topology".getBytes()).toString());
         assertEquals(topoUuid, topology.getUuid(), "incorrect topology uuid");
         assertEquals(
@@ -485,69 +493,45 @@ public class TapiTopologyImplTest extends AbstractTest {
         assertEquals(8, nbDsrOduNodes, "Node list should contain 8 DSR-ODU nodes");
         // We need to add the Roadms as Photonic nodes. Instead of 1 node as roadm infra we have 2 roadm nodes
         assertEquals(8, nbPhotonicNodes, "Node list should contain 8 Photonics nodes");
-        long nbTransititionalLinks = topology.getLink().values().stream()
-            .filter(l -> l.getName().containsKey(new NameKey("transitional link name"))).count();
         // Roadm-to-Roadm
         long nbOmsLinks = topology.getLink().values().stream()
             .filter(l -> l.getName().containsKey(new NameKey("OMS link name"))).count();
         // Xpdr-to-Roadm
         long nbOmsLinks1 = topology.getLink().values().stream()
             .filter(l -> l.getName().containsKey(new NameKey("XPDR-RDM link name"))).count();
-        // 1 transitional link per NETWORK port
-        assertEquals(16, nbTransititionalLinks, "Link list should contain 16 transitional links");
         // 1 OMS per ROADM-to-ROADM link + Existing XPDR-tp-ROADM link in openroadm topology
         assertEquals(9, nbOmsLinks + nbOmsLinks1, "Link list should contain 9 OMS links");
     }
 
     @Test
-    void getNodeAndNepsDetailsWhenSuccessful()
-            throws ExecutionException, InterruptedException {
-        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(
-            TapiStringConstants.T0_FULL_MULTILAYER);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
-        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-        endSignal.await();
+    void getNodeAndNepsDetailsWhenSuccessful() throws ExecutionException, InterruptedException {
+        Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
+            Charset.forName("UTF-8"))).toString());
+        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
+        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = new GetTopologyDetailsImpl(tapiContext,
+                    topologyUtils, tapiLink, networkTransactionService)
+                .invoke(input);
         RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
         @Nullable
         Topology topology = rpcResult.getResult().getTopology();
         for (Node node:topology.getNode().values()) {
-            String nodeName = node.getName().values().stream().findFirst().orElseThrow().getValue();
-            GetNodeDetailsInput input1 = TapiTopologyDataUtils.buildGetNodeDetailsInput(
-                TapiStringConstants.T0_FULL_MULTILAYER, nodeName);
-            ListenableFuture<RpcResult<GetNodeDetailsOutput>> result1 = tapiTopoImpl.getNodeDetails(input1);
-            result.addListener(new Runnable() {
-                @Override
-                public void run() {
-                    endSignal.countDown();
-                }
-            }, executorService);
-            endSignal.await();
+            Uuid nodeUuid = node.getUuid();
+            GetNodeDetailsInput input1 = TapiTopologyDataUtils.buildGetNodeDetailsInput(topologyUuid, nodeUuid);
+            ListenableFuture<RpcResult<GetNodeDetailsOutput>> result1 = new GetNodeDetailsImpl(tapiContext)
+                    .invoke(input1);
             RpcResult<GetNodeDetailsOutput> rpcResult1 = result1.get();
             @Nullable
             Node node1 = rpcResult1.getResult().getNode();
             assertNotNull(node1, "Node should not be null");
             for (OwnedNodeEdgePoint onep:node1.getOwnedNodeEdgePoint().values()) {
-                String onepName = onep.getName().values().stream().findFirst().orElseThrow().getValue();
+                Uuid onepUuid = onep.getUuid();
                 GetNodeEdgePointDetailsInput input2 = TapiTopologyDataUtils.buildGetNodeEdgePointDetailsInput(
-                    TapiStringConstants.T0_FULL_MULTILAYER, nodeName, onepName);
-                ListenableFuture<RpcResult<GetNodeEdgePointDetailsOutput>> result2
-                    = tapiTopoImpl.getNodeEdgePointDetails(input2);
-                result.addListener(new Runnable() {
-                    @Override
-                    public void run() {
-                        endSignal.countDown();
-                    }
-                }, executorService);
-                endSignal.await();
+                    topologyUuid, nodeUuid, onepUuid);
+                ListenableFuture<RpcResult<GetNodeEdgePointDetailsOutput>> result2 =
+                        new GetNodeEdgePointDetailsImpl(tapiContext).invoke(input2);
                 RpcResult<GetNodeEdgePointDetailsOutput> rpcResult2 = result2.get();
                 org.opendaylight.yang.gen.v1
-                    .urn.onf.otcc.yang.tapi.topology.rev181210.get.node.edge.point.details.output.NodeEdgePoint
+                    .urn.onf.otcc.yang.tapi.topology.rev221121.get.node.edge.point.details.output.NodeEdgePoint
                     onep1 = rpcResult2.getResult().getNodeEdgePoint();
                 assertNotNull(onep1, "Node Edge Point should not be null");
             }
@@ -555,73 +539,45 @@ public class TapiTopologyImplTest extends AbstractTest {
     }
 
     @Test
-    void getLinkDetailsWhenSuccessful()
-            throws ExecutionException, InterruptedException {
-        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(
-            TapiStringConstants.T0_FULL_MULTILAYER);
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
-        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = tapiTopoImpl.getTopologyDetails(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-        endSignal.await();
+    void getLinkDetailsWhenSuccessful() throws ExecutionException, InterruptedException {
+        Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes(
+            Charset.forName("UTF-8"))).toString());
+        GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid);
+        ListenableFuture<RpcResult<GetTopologyDetailsOutput>> result = new GetTopologyDetailsImpl(tapiContext,
+                topologyUtils, tapiLink, networkTransactionService)
+            .invoke(input);
         RpcResult<GetTopologyDetailsOutput> rpcResult = result.get();
         @Nullable
         Topology topology = rpcResult.getResult().getTopology();
         for (Link link:topology.getLink().values()) {
-            String linkName = link.getName().values().stream().findFirst().orElseThrow().getValue();
+            Uuid linkUuid = link.getUuid();
             GetLinkDetailsInput input1 = TapiTopologyDataUtils.buildGetLinkDetailsInput(
-                TapiStringConstants.T0_FULL_MULTILAYER, linkName);
-            ListenableFuture<RpcResult<GetLinkDetailsOutput>> result1 = tapiTopoImpl.getLinkDetails(input1);
-            result.addListener(new Runnable() {
-                @Override
-                public void run() {
-                    endSignal.countDown();
-                }
-            }, executorService);
-            endSignal.await();
+                topologyUuid, linkUuid);
+            ListenableFuture<RpcResult<GetLinkDetailsOutput>> result1 = new GetLinkDetailsImpl(tapiContext)
+                    .invoke(input1);
             RpcResult<GetLinkDetailsOutput> rpcResult1 = result1.get();
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.get.link.details.output.Link link1
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.link.details.output.Link link1
                 = rpcResult1.getResult().getLink();
             assertNotNull(link1, "Link should not be null");
         }
     }
 
     @Test
-    void getSipDetailsWhenSuccessful()
-            throws ExecutionException, InterruptedException {
+    void getSipDetailsWhenSuccessful() throws ExecutionException, InterruptedException {
         GetServiceInterfacePointListInput input = TapiTopologyDataUtils.buildServiceInterfacePointListInput();
-        TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink);
-        ListenableFuture<RpcResult<GetServiceInterfacePointListOutput>> result = tapiTopoImpl
-            .getServiceInterfacePointList(input);
-        result.addListener(new Runnable() {
-            @Override
-            public void run() {
-                endSignal.countDown();
-            }
-        }, executorService);
-        endSignal.await();
+        ListenableFuture<RpcResult<GetServiceInterfacePointListOutput>> result =
+                new GetServiceInterfacePointListImpl(tapiContext).invoke(input);
         RpcResult<GetServiceInterfacePointListOutput> rpcResult = result.get();
         Map<SipKey, Sip> sipMap = rpcResult.getResult().getSip();
         for (Sip sip:sipMap.values()) {
             Uuid sipUuid = sip.getUuid();
             GetServiceInterfacePointDetailsInput input1 = TapiTopologyDataUtils
                 .buildGetServiceInterfacePointDetailsInput(sipUuid);
-            ListenableFuture<RpcResult<GetServiceInterfacePointDetailsOutput>> result1
-                = tapiTopoImpl.getServiceInterfacePointDetails(input1);
-            result.addListener(new Runnable() {
-                @Override
-                public void run() {
-                    endSignal.countDown();
-                }
-            }, executorService);
-            endSignal.await();
+            ListenableFuture<RpcResult<GetServiceInterfacePointDetailsOutput>> result1 =
+                    new GetServiceInterfacePointDetailsImpl(tapiContext).invoke(input1);
             RpcResult<GetServiceInterfacePointDetailsOutput> rpcResult1 = result1.get();
             org.opendaylight.yang.gen.v1
-                .urn.onf.otcc.yang.tapi.common.rev181210.get.service._interface.point.details.output.Sip sip1
+                .urn.onf.otcc.yang.tapi.common.rev221121.get.service._interface.point.details.output.Sip sip1
                 = rpcResult1.getResult().getSip();
             assertNotNull(sip1, "Sip should not be null");
         }
@@ -631,7 +587,7 @@ public class TapiTopologyImplTest extends AbstractTest {
             Uuid linkUuid, String linkName) {
         assertEquals(linkName, link.getName().get(new NameKey("otn link name")).getValue(), "bad name for the link");
         assertEquals(linkUuid, link.getUuid(), "bad uuid for link");
-        assertEquals(CapacityUnit.GBPS, link.getAvailableCapacity().getTotalSize().getUnit(),
+        assertEquals(CAPACITYUNITGBPS.VALUE, link.getAvailableCapacity().getTotalSize().getUnit(),
             "Available capacity unit should be MBPS");
         String prefix = linkName.split("-")[0];
         if ("OTU4".equals(prefix)) {
@@ -641,9 +597,9 @@ public class TapiTopologyImplTest extends AbstractTest {
             assertEquals(Uint64.valueOf(100000), link.getAvailableCapacity().getTotalSize().getValue(),
                 "Available capacity -total size value should be 100 000");
         }
-        assertEquals(CapacityUnit.GBPS, link.getTotalPotentialCapacity().getTotalSize().getUnit(),
+        assertEquals(CAPACITYUNITGBPS.VALUE, link.getTotalPotentialCapacity().getTotalSize().getUnit(),
             "Total capacity unit should be GBPS");
-        assertEquals(Uint64.valueOf(100), link.getTotalPotentialCapacity().getTotalSize().getValue(),
+        assertEquals(Decimal64.valueOf("100"), link.getTotalPotentialCapacity().getTotalSize().getValue(),
             "Total capacity -total size value should be 100");
         if ("OTU4".equals(prefix)) {
             assertEquals("otn link should be between 2 nodes of protocol layers PHOTONIC_MEDIA",
@@ -656,7 +612,7 @@ public class TapiTopologyImplTest extends AbstractTest {
         }
         assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(),
             "transitional link should be BIDIRECTIONAL");
-        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210
+        List<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121
             .link.NodeEdgePoint> nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values());
         assertEquals(topoUuid, nodeEdgePointList.get(0).getTopologyUuid(),
             "topology uuid should be the same for the two termination point of the link");
index cd4347f0290974322a2f7a92a675126c4499c21c..bb3b4774dd81e0eb0fb80d4cff722ff3548f7e24 100644 (file)
@@ -12,54 +12,58 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.RpcActions;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.sdnc.request.header.SdncRequestHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirection;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.lgx.LgxBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.RpcActions;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.sdnc.request.header.SdncRequestHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.RxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.lgx.LgxBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.create.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.CapacityUnit;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ForwardingDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LifecycleState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortDirection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.PortRole;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.capacity.TotalSizeBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.CreateConnectivityServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.DeleteConnectivityServiceInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ProtectionRole;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.ServiceType;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.constraint.RequestedCapacityBuilder;
-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.Connection;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.ConnectionKey;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.end.point.ServiceInterfacePointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.ConnectivityConstraintBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPoint;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.create.connectivity.service.input.EndPointKey;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.create.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.capacity.TotalSizeBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.DeleteConnectivityServiceInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ProtectionRole;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ServiceType;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.constraint.RequestedCapacityBuilder;
+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.Connection;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectionKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectivityConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.ConnectivityConstraintBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.ServiceInterfacePointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPointBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPointKey;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraint;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraintBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraintKey;
+import org.opendaylight.yangtools.yang.common.Decimal64;
 import org.opendaylight.yangtools.yang.common.Uint32;
-import org.opendaylight.yangtools.yang.common.Uint64;
 import org.opendaylight.yangtools.yang.common.Uint8;
 
 public final class TapiConnectivityDataUtils {
@@ -73,18 +77,21 @@ public final class TapiConnectivityDataUtils {
 
         return new CreateConnectivityServiceInputBuilder()
             .setEndPoint(endPointMap)
-            .setConnectivityConstraint(new ConnectivityConstraintBuilder().setServiceLayer(LayerProtocolName.DSR)
-                .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).setServiceLevel("some service-level")
-                .setRequestedCapacity(new RequestedCapacityBuilder()
-                    .setTotalSize(new TotalSizeBuilder().setUnit(CapacityUnit.GBPS)
-                        .setValue(Uint64.valueOf(10)).build()).build()).build())
-            .setState("some state")
+            .setLayerProtocolName(LayerProtocolName.DSR)
+            .setConnectivityConstraint(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121
+                        .create.connectivity.service.input.ConnectivityConstraintBuilder()
+                    .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).setServiceLevel("some service-level")
+                    .setRequestedCapacity(new RequestedCapacityBuilder()
+                    .setTotalSize(new TotalSizeBuilder().setUnit(CAPACITYUNITGBPS.VALUE)
+                        .setValue(Decimal64.valueOf("10")).build()).build()).build())
+            .setState(AdministrativeState.UNLOCKED)
+            .setTopologyConstraint(getTopoConstraintMap())
             .build();
     }
 
     public static DeleteConnectivityServiceInput buildConnServiceDeleteInput() {
         return new DeleteConnectivityServiceInputBuilder()
-            .setServiceIdOrName(UUID.nameUUIDFromBytes("service 1".getBytes(StandardCharsets.UTF_8)).toString())
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes("service 1".getBytes(StandardCharsets.UTF_8)).toString()))
             .build();
     }
 
@@ -93,7 +100,7 @@ public final class TapiConnectivityDataUtils {
         return new EndPointBuilder().setLayerProtocolName(LayerProtocolName.DSR)
             .setAdministrativeState(AdministrativeState.UNLOCKED)
             .setOperationalState(OperationalState.ENABLED)
-            .setDirection(PortDirection.BIDIRECTIONAL)
+            .setDirection(Direction.BIDIRECTIONAL)
             .setRole(PortRole.SYMMETRIC)
             .setProtectionRole(ProtectionRole.NA)
             .setLocalId("SPDR-SC1-XPDR1")
@@ -107,7 +114,7 @@ public final class TapiConnectivityDataUtils {
         return new EndPointBuilder().setLayerProtocolName(LayerProtocolName.DSR)
             .setAdministrativeState(AdministrativeState.UNLOCKED)
             .setOperationalState(OperationalState.ENABLED)
-            .setDirection(PortDirection.BIDIRECTIONAL)
+            .setDirection(Direction.BIDIRECTIONAL)
             .setRole(PortRole.SYMMETRIC)
             .setProtectionRole(ProtectionRole.NA)
             .setLocalId("SPDR-SA1-XPDR1")
@@ -168,20 +175,28 @@ public final class TapiConnectivityDataUtils {
             .build());
     }
 
+    private static Map<TopologyConstraintKey, TopologyConstraint> getTopoConstraintMap() {
+        Map<TopologyConstraintKey, TopologyConstraint> topoConstraintMap = new HashMap<>();
+        TopologyConstraint topoConstraint = new TopologyConstraintBuilder()
+            .setLocalId("localIdTopoConstraint").build();
+        topoConstraintMap.put(topoConstraint.key(), topoConstraint);
+        return topoConstraintMap;
+    }
+
     public static Map<ConnectivityServiceKey, ConnectivityService> createConnService() {
         EndPoint endPoint1 = getEndPoint1Builder().build();
         EndPoint endPoint2 = getEndPoint2Builder().build();
 
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPoint
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPoint
             endPoint11 = new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointBuilder(endPoint1).build();
+                .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointBuilder(endPoint1).build();
 
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPoint
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPoint
             endPoint12 = new org.opendaylight.yang.gen.v1.urn
-                .onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointBuilder(endPoint2).build();
+                .onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointBuilder(endPoint2).build();
 
-        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPointKey,
-            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.connectivity.service.EndPoint>
+        Map<org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointKey,
+            org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPoint>
                 endPointMap = new HashMap<>();
         endPointMap.put(endPoint11.key(), endPoint11);
         endPointMap.put(endPoint12.key(), endPoint12);
@@ -191,18 +206,22 @@ public final class TapiConnectivityDataUtils {
             .build();
         connectionMap.put(connection.key(), connection);
 
-        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name name =
-            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder()
+        org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name name =
+            new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameBuilder()
                 .setValueName("Connectivity Service Name").setValue("service 1")
                 .build();
+        ConnectivityConstraint conCons = new ConnectivityConstraintBuilder()
+            .setServiceLevel(null)
+            .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY)
+            .build();
         ConnectivityService connServ = new ConnectivityServiceBuilder()
             .setAdministrativeState(AdministrativeState.LOCKED)
             .setOperationalState(OperationalState.DISABLED)
             .setLifecycleState(LifecycleState.PLANNED)
             .setUuid(new Uuid(UUID.nameUUIDFromBytes("service 1".getBytes(StandardCharsets.UTF_8)).toString()))
-            .setServiceLayer(LayerProtocolName.DSR)
-            .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY)
-            .setConnectivityDirection(ForwardingDirection.BIDIRECTIONAL)
+            .setLayerProtocolName(LayerProtocolName.DSR)
+            .setConnectivityConstraint(conCons)
+            .setDirection(ForwardingDirection.BIDIRECTIONAL)
             .setName(Map.of(name.key(), name))
             .setConnection(connectionMap)
             .setEndPoint(endPointMap)
@@ -214,7 +233,8 @@ public final class TapiConnectivityDataUtils {
 
     public static DeleteConnectivityServiceInput buildConnServiceDeleteInput1() {
         return new DeleteConnectivityServiceInputBuilder()
-            .setServiceIdOrName("random-service").build();
+            .setUuid(new Uuid(UUID.nameUUIDFromBytes("service 1".getBytes(StandardCharsets.UTF_8)).toString()))
+            .build();
     }
 
     private TapiConnectivityDataUtils() {
index 8b5b655a925fce9f093b3db147f6402c5046fb56..bfc61279fb199b47c6e17435a81cde377b68110c 100644 (file)
@@ -8,19 +8,19 @@
 
 package org.opendaylight.transportpce.tapi.utils;
 
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointDetailsInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointListInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.GetServiceInterfacePointListInputBuilder;
-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.topology.rev181210.GetLinkDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetLinkDetailsInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeDetailsInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeEdgePointDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetNodeEdgePointDetailsInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInput;
-import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.GetTopologyDetailsInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointDetailsInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointListInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.GetServiceInterfacePointListInputBuilder;
+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.topology.rev221121.GetLinkDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetLinkDetailsInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeDetailsInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetNodeEdgePointDetailsInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInput;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.GetTopologyDetailsInputBuilder;
 
 public final class TapiTopologyDataUtils {
     public static final String OPENROADM_TOPOLOGY_FILE = "src/test/resources/openroadm-topology.xml";
@@ -28,23 +28,23 @@ public final class TapiTopologyDataUtils {
     public static final String OTN_TOPOLOGY_FILE = "src/test/resources/otn-topology.xml";
     public static final String PORTMAPPING_FILE = "src/test/resources/portmapping.xml";
 
-    public static GetTopologyDetailsInput buildGetTopologyDetailsInput(String topoName) {
+    public static GetTopologyDetailsInput buildGetTopologyDetailsInput(Uuid topoId) {
         return new GetTopologyDetailsInputBuilder()
-            .setTopologyIdOrName(topoName)
+            .setTopologyId(topoId)
             .build();
     }
 
-    public static GetNodeDetailsInput buildGetNodeDetailsInput(String topoName, String nodeName) {
+    public static GetNodeDetailsInput buildGetNodeDetailsInput(Uuid topoId, Uuid nodeId) {
         return new GetNodeDetailsInputBuilder()
-            .setTopologyIdOrName(topoName)
-            .setNodeIdOrName(nodeName)
+            .setTopologyId(topoId)
+            .setNodeId(nodeId)
             .build();
     }
 
-    public static GetLinkDetailsInput buildGetLinkDetailsInput(String topoName, String linkName) {
+    public static GetLinkDetailsInput buildGetLinkDetailsInput(Uuid topoId, Uuid linkId) {
         return new GetLinkDetailsInputBuilder()
-            .setTopologyIdOrName(topoName)
-            .setLinkIdOrName(linkName)
+            .setTopologyId(topoId)
+            .setLinkId(linkId)
             .build();
     }
 
@@ -55,16 +55,16 @@ public final class TapiTopologyDataUtils {
 
     public static GetServiceInterfacePointDetailsInput buildGetServiceInterfacePointDetailsInput(Uuid sipUuid) {
         return new GetServiceInterfacePointDetailsInputBuilder()
-            .setSipIdOrName(sipUuid.getValue())
+            .setUuid(sipUuid)
             .build();
     }
 
-    public static GetNodeEdgePointDetailsInput buildGetNodeEdgePointDetailsInput(String topoName, String nodeName,
-            String onepName) {
+    public static GetNodeEdgePointDetailsInput buildGetNodeEdgePointDetailsInput(Uuid topoId, Uuid nodeId,
+            Uuid onepId) {
         return new GetNodeEdgePointDetailsInputBuilder()
-            .setTopologyIdOrName(topoName)
-            .setNodeIdOrName(nodeName)
-            .setEpIdOrName(onepName)
+            .setTopologyId(topoId)
+            .setNodeId(nodeId)
+            .setNodeEdgePointId(onepId)
             .build();
     }
 
index 2bafb07dfb62ef6a37680a801fe0213e01f92845..652237719738c4975f5108da27ce2bc17bd56058 100644 (file)
   <parent>
     <groupId>org.opendaylight.mdsal</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>11.0.7</version>
+    <version>13.0.1</version>
     <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.transportpce</groupId>
   <artifactId>test-common</artifactId>
-  <version>8.0.0-SNAPSHOT</version>
+  <version>10.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
   <properties>
-    <transportpce.models.version>18.0.1</transportpce.models.version>
+    <transportpce.models.version>20.0.0-SNAPSHOT</transportpce.models.version>
   </properties>
 
   <dependencyManagement>
@@ -37,7 +37,7 @@
       <dependency>
         <groupId>org.opendaylight.netconf</groupId>
         <artifactId>netconf-artifacts</artifactId>
-        <version>5.0.4</version>
+        <version>7.0.4</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
@@ -62,7 +62,7 @@
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-common-10.1.0</artifactId>
+      <artifactId>openroadm-common-13.1.0</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-network-10.1.0</artifactId>
+      <artifactId>openroadm-network-13.1.0</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.transportpce.models</groupId>
-      <artifactId>openroadm-service-10.1.0</artifactId>
+      <artifactId>openroadm-service-13.1.0</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.mdsal</groupId>
       <artifactId>mdsal-binding-runtime-spi</artifactId>
     </dependency>
-    <!-- Sodium bump: javax.annotation.Nullable and friends -->
     <dependency>
-      <groupId>com.google.code.findbugs</groupId>
-      <artifactId>jsr305</artifactId>
-      <version>3.0.2</version>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
       <optional>true</optional>
     </dependency>
     <dependency>
index ccb2546c9c3c33d6bc0733174489228f27f2ade9..267ad301aa39b56072cee0ee661a30abb0d7da5f 100644 (file)
@@ -13,7 +13,7 @@ import java.io.InputStream;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,8 +45,8 @@ public abstract class AbstractDeviceTest {
      * @param intialDataQName {@link QName} of initial simulator data
      * @return device simulator (wrapper)
      */
-    public DeviceWrapper createDeviceWrapper(@Nonnull String key, @Nonnull InputStream initialDataXmlInputStream,
-            @Nonnull QName intialDataQName) {
+    public DeviceWrapper createDeviceWrapper(@NonNull String key, @NonNull InputStream initialDataXmlInputStream,
+            @NonNull QName intialDataQName) {
         DeviceWrapper deviceWrapper =
                 DeviceWrapper.createDeviceWrapper(key, initialDataXmlInputStream, intialDataQName);
         LOG.info("Creating a new device wrapper {}, {}", key, deviceWrapper);
@@ -60,7 +60,7 @@ public abstract class AbstractDeviceTest {
      * @param deviceIdentifier identifier of device simulator
      * @return stored device or null if not found
      */
-    public DeviceWrapper getDevice(@Nonnull String deviceIdentifier) {
+    public DeviceWrapper getDevice(@NonNull String deviceIdentifier) {
         Preconditions.checkArgument(!Strings.isNullOrEmpty(deviceIdentifier));
         return internalStorage.get(deviceIdentifier);
     }
index 6b429fd09edb8e841ea3c1ab39bceaf38d160f23..c94230bbb2647e86e4c630654b8589dbfd774aa5 100644 (file)
@@ -20,12 +20,17 @@ import org.opendaylight.mdsal.binding.api.NotificationPublishService;
 import org.opendaylight.mdsal.binding.api.NotificationService;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingAdapterFactory;
 import org.opendaylight.mdsal.binding.dom.adapter.ConstantAdapterContext;
+import org.opendaylight.mdsal.binding.dom.adapter.spi.AdapterFactory;
 import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext;
 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
 import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+import org.opendaylight.mdsal.dom.api.DOMNotificationPublishService;
+import org.opendaylight.mdsal.dom.api.DOMNotificationService;
 import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter;
+import org.opendaylight.mdsal.dom.broker.RouterDOMNotificationService;
+import org.opendaylight.mdsal.dom.broker.RouterDOMPublishNotificationService;
 import org.opendaylight.mdsal.dom.broker.SerializedDOMDataBroker;
 import org.opendaylight.mdsal.dom.spi.FixedDOMSchemaService;
 import org.opendaylight.mdsal.dom.spi.store.DOMStore;
@@ -44,7 +49,9 @@ public class DataStoreContextImpl implements DataStoreContext {
     private final NotificationPublishService notificationPublishService;
     private EffectiveModelContext schemaCtx;
     private BindingDOMCodecServices bindingDOMCodecServices;
-    private BindingAdapterFactory adapterFactory ;
+    private AdapterFactory adapterFactory;
+    private DOMNotificationService domNotificationService;
+    private DOMNotificationPublishService domNotificationPublishService;
 
     @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR")
     public DataStoreContextImpl() {
@@ -57,6 +64,8 @@ public class DataStoreContextImpl implements DataStoreContext {
         bindingDOMCodecServices = new BindingCodecContext(BindingRuntimeHelpers.createRuntimeContext());
         adapterFactory = new BindingAdapterFactory(new ConstantAdapterContext(bindingDOMCodecServices));
         domNotificationRouter = new DOMNotificationRouter(16);
+        domNotificationService = new RouterDOMNotificationService(domNotificationRouter);
+        domNotificationPublishService = new RouterDOMPublishNotificationService(domNotificationRouter);
         datastores = createDatastores();
         domDataBroker = createDOMDataBroker();
         dataBroker = createDataBroker();
@@ -76,12 +85,12 @@ public class DataStoreContextImpl implements DataStoreContext {
 
     @Override
     public final NotificationService createNotificationService() {
-        return adapterFactory.createNotificationService(domNotificationRouter);
+        return adapterFactory.createNotificationService(domNotificationService);
     }
 
     @Override
     public final NotificationPublishService createNotificationPublishService() {
-        return adapterFactory.createNotificationPublishService(domNotificationRouter);
+        return adapterFactory.createNotificationPublishService(domNotificationPublishService);
     }
 
     @Override
@@ -115,13 +124,11 @@ public class DataStoreContextImpl implements DataStoreContext {
     }
 
     private DOMStore createConfigurationDatastore() {
-        return InMemoryDOMDataStoreFactory.create("CFG",
-                FixedDOMSchemaService.of(bindingDOMCodecServices.getRuntimeContext()));
+        return InMemoryDOMDataStoreFactory.create("DOM-CFG", new FixedDOMSchemaService(schemaCtx));
     }
 
     private DOMStore createOperationalDatastore() {
-        return InMemoryDOMDataStoreFactory.create("OPER",
-                FixedDOMSchemaService.of(bindingDOMCodecServices.getRuntimeContext()));
+        return InMemoryDOMDataStoreFactory.create("DOM-OPER", new FixedDOMSchemaService(schemaCtx));
     }
 
     @Override
index 5c94f6e03112bd4061473f0b09388bd15a5679f4..ebd1ec0da88c0b3445253540f725df75dfcafb8d 100644 (file)
@@ -18,7 +18,7 @@ import java.util.List;
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
@@ -91,8 +91,8 @@ public final class DeviceWrapper {
      * @param intialDataQName {@link QName} of initial data
      * @return device simulator
      */
-    public static DeviceWrapper createDeviceWrapper(@Nonnull String key, @Nonnull InputStream initialDataXmlInputStream,
-            @Nonnull QName intialDataQName) {
+    public static DeviceWrapper createDeviceWrapper(@NonNull String key, @NonNull InputStream initialDataXmlInputStream,
+            @NonNull QName intialDataQName) {
         requireNonNull(initialDataXmlInputStream, "Input stream cannot be null");
         requireNonNull(intialDataQName, "QName cannot be null");
         return createDeviceWrapper(key, Lists.newArrayList(
@@ -109,8 +109,8 @@ public final class DeviceWrapper {
      * @param initialData {@link List} of {@link Entry} values
      * @return created {@link DeviceWrapper} with all initial data provided by initial data
      */
-    public static DeviceWrapper createDeviceWrapper(@Nonnull String key,
-            @Nonnull List<Entry<QName, InputStream>> initialData) {
+    public static DeviceWrapper createDeviceWrapper(@NonNull String key,
+            @NonNull List<Entry<QName, InputStream>> initialData) {
         Preconditions.checkArgument(!Strings.isNullOrEmpty(key), "The provided key cannot be null or empty");
         Preconditions.checkArgument(initialData != null && !initialData.isEmpty(),
                 "Initial data cannot be null or empty");
index 389728d80cf5bbff3ee4bd65564048dbf2aade7d..59be4bb4b434c7ada421f771616aa4a741e73e25 100644 (file)
@@ -8,9 +8,8 @@
 package org.opendaylight.transportpce.test.converter;
 
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -72,8 +71,8 @@ public abstract class AbstractDataObjectConverter implements DataObjectConverter
     @Override
     @SuppressWarnings("unchecked")
     public <T extends DataObject> Optional<T> getDataObject(
-            @Nonnull NormalizedNode normalizedNode,
-            @Nonnull QName rootNode) {
+            @NonNull NormalizedNode normalizedNode,
+            @NonNull QName rootNode) {
         //Preconditions.checkNotNull(normalizedNode);
         if (normalizedNode instanceof ContainerNode) {
             YangInstanceIdentifier.PathArgument directChildIdentifier =
@@ -97,7 +96,7 @@ public abstract class AbstractDataObjectConverter implements DataObjectConverter
 
     @Override
     @SuppressWarnings("unchecked")
-    public <T extends DataObject> Optional<T> getDataObjectFromRpc(@Nonnull NormalizedNode normalizedNode) {
+    public <T extends DataObject> Optional<T> getDataObjectFromRpc(@NonNull NormalizedNode normalizedNode) {
 
         if (! (normalizedNode instanceof ContainerNode)) {
             LOG.error("converting normalized node is not ContainerNode. It's actual type is {}",
@@ -111,11 +110,10 @@ public abstract class AbstractDataObjectConverter implements DataObjectConverter
 
     @Override
     @SuppressWarnings({"rawtypes","unchecked"})
-    public <T extends DataObject> Optional<NormalizedNode> toNormalizedNodes(@Nonnull T object,
+    public <T extends DataObject> Optional<NormalizedNode> toNormalizedNodes(@NonNull T object,
             Class dataObjectClass) {
-        Entry<YangInstanceIdentifier, NormalizedNode> normalizedNode =
-                codecRegistry.toNormalizedNode(InstanceIdentifier.create(dataObjectClass), object);
-        return Optional.ofNullable(normalizedNode.getValue());
+        return Optional.of(codecRegistry.toNormalizedDataObject(InstanceIdentifier.create(dataObjectClass), object)
+            .node());
     }
 
     @Override
index d8614ffa7534dd90ffa30201b7d4f3e223cd05ff..0e87da06fbee720f1ddf49187a3db5872cf67f34 100644 (file)
@@ -11,7 +11,7 @@ import java.io.InputStream;
 import java.io.Reader;
 import java.io.Writer;
 import java.util.Optional;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.Notification;
@@ -22,29 +22,29 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 public interface DataObjectConverter {
 
     <T extends DataObject> Optional<T> getDataObject(
-            @Nonnull NormalizedNode normalizedNode,
-            @Nonnull QName rootNode);
+            @NonNull NormalizedNode normalizedNode,
+            @NonNull QName rootNode);
 
     <T extends DataObject> Optional<T> getDataObjectFromRpc(
-            @Nonnull NormalizedNode normalizedNode);
+            @NonNull NormalizedNode normalizedNode);
 
     Optional<NormalizedNode> transformIntoNormalizedNode(
-            @Nonnull InputStream inputStream);
+            @NonNull InputStream inputStream);
 
     Optional<NormalizedNode> transformIntoNormalizedNode(
-            @Nonnull Reader inputReader, SchemaNode parentSchema);
+            @NonNull Reader inputReader, SchemaNode parentSchema);
 
     Optional<NormalizedNode> transformIntoNormalizedNode(
-            @Nonnull Reader inputReader);
+            @NonNull Reader inputReader);
 
-    <T extends DataObject> Writer writerFromDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+    <T extends DataObject> Writer writerFromDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
             ConvertType<T> convertType);
 
-    <T extends DataObject> Writer writerFromRpcDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+    <T extends DataObject> Writer writerFromRpcDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
             ConvertType<T> convertType, QName rpcOutputQName, String rpcName);
 
     @SuppressWarnings("rawtypes")
-    <T extends DataObject> Optional<NormalizedNode> toNormalizedNodes(@Nonnull T object, Class dataObjectClass);
+    <T extends DataObject> Optional<NormalizedNode> toNormalizedNodes(@NonNull T object, Class dataObjectClass);
 
     interface ConvertType<T> {
         Optional<NormalizedNode> toNormalizedNodes(T object, Class<T> clazz);
index fbb31f694fbfe4e36143c44c202cf78e7151e447..06a645dfcad9044f7c70932c69926a062f208b81 100644 (file)
@@ -17,7 +17,7 @@ import java.io.StringWriter;
 import java.io.Writer;
 import java.nio.charset.StandardCharsets;
 import java.util.Optional;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.transportpce.test.DataStoreContext;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -30,7 +30,7 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
 import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -53,7 +53,7 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
      * @param dataStoreContextUtil datastore context util used to extract codec and schema context
      * @return {@link AbstractDataObjectConverter}
      */
-    public static DataObjectConverter createWithDataStoreUtil(@Nonnull DataStoreContext dataStoreContextUtil) {
+    public static DataObjectConverter createWithDataStoreUtil(@NonNull DataStoreContext dataStoreContextUtil) {
         return new JSONDataObjectConverter(dataStoreContextUtil.getSchemaContext(),
                 dataStoreContextUtil.getBindingDOMCodecServices());
     }
@@ -65,8 +65,8 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
      * @param codecRegistry codec registry used for converting
      * @return converter
      */
-    public static DataObjectConverter createWithSchemaContext(@Nonnull EffectiveModelContext schemaContext,
-            @Nonnull BindingNormalizedNodeSerializer codecRegistry) {
+    public static DataObjectConverter createWithSchemaContext(@NonNull EffectiveModelContext schemaContext,
+            @NonNull BindingNormalizedNodeSerializer codecRegistry) {
         return new JSONDataObjectConverter(schemaContext, codecRegistry);
     }
 
@@ -78,26 +78,26 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
      */
     @Override
     public Optional<NormalizedNode> transformIntoNormalizedNode(
-            @Nonnull InputStream inputStream) {
+        @   NonNull InputStream inputStream) {
         JsonReader reader = new JsonReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
         return parseInputJSON(reader);
     }
 
     @Override
     public Optional<NormalizedNode> transformIntoNormalizedNode(
-            @Nonnull Reader inputReader, SchemaNode parentSchema) {
+            @NonNull Reader inputReader, SchemaNode parentSchema) {
         throw new UnsupportedOperationException("Not Implemented yet");
     }
 
     @Override
     public Optional<NormalizedNode> transformIntoNormalizedNode(
-            @Nonnull Reader inputReader) {
+            @NonNull Reader inputReader) {
         JsonReader reader = new JsonReader(inputReader);
         return parseInputJSON(reader);
     }
 
     @Override
-    public <T extends DataObject> Writer writerFromDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+    public <T extends DataObject> Writer writerFromDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
             ConvertType<T> convertType) {
         Writer writer = new StringWriter();
         JsonWriter jsonWriter = new JsonWriter(writer);
@@ -116,7 +116,7 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
     }
 
     @Override
-    public <T extends DataObject> Writer writerFromRpcDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+    public <T extends DataObject> Writer writerFromRpcDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
             ConvertType<T> convertType, QName rpcOutputQName, String rpcName) {
         return null;
     }
@@ -129,7 +129,7 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
      */
     private Optional<NormalizedNode> parseInputJSON(
             JsonReader reader) {
-        NormalizedNodeResult result = new NormalizedNodeResult();
+        NormalizationResultHolder result = new NormalizationResultHolder();
         try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
             JsonParserStream jsonParser = JsonParserStream.create(streamWriter,
                 JSONCodecFactorySupplier.RFC7951.getShared(getSchemaContext()))) {
@@ -138,7 +138,7 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter {
             LOG.warn("An error occured during parsing Json input stream", e);
             return Optional.empty();
         }
-        return Optional.ofNullable(result.getResult());
+        return Optional.ofNullable(result.getResult().data());
     }
 
 }
index da2ff82154319f95cf2b4076d20cbd3590789791..653efb160ad0cdbf12b486fd42d671b9e8c75fe0 100644 (file)
@@ -12,9 +12,7 @@ import java.io.InputStream;
 import java.io.Reader;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.net.URISyntaxException;
 import java.util.Optional;
-import javax.annotation.Nonnull;
 import javax.xml.XMLConstants;
 import javax.xml.parsers.FactoryConfigurationError;
 import javax.xml.stream.XMLInputFactory;
@@ -22,6 +20,7 @@ import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
 import org.opendaylight.transportpce.test.DataStoreContext;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -33,7 +32,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWrit
 import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -41,7 +40,6 @@ import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
 
 public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
 
@@ -70,7 +68,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
      * @param dataStoreContextUtil datastore context util used to extract codec and schema context
      * @return {@link AbstractDataObjectConverter}
      */
-    public static XMLDataObjectConverter createWithDataStoreUtil(@Nonnull DataStoreContext dataStoreContextUtil) {
+    public static XMLDataObjectConverter createWithDataStoreUtil(@NonNull DataStoreContext dataStoreContextUtil) {
         BindingNormalizedNodeSerializer bindingToNormalizedNodeCodec =
                 dataStoreContextUtil.getBindingDOMCodecServices();
         return new XMLDataObjectConverter(dataStoreContextUtil.getSchemaContext(), bindingToNormalizedNodeCodec);
@@ -83,8 +81,8 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
      * @param codecRegistry codec registry used for converting
      * @return new {@link XMLDataObjectConverter}
      */
-    public static XMLDataObjectConverter createWithSchemaContext(@Nonnull EffectiveModelContext schemaContext,
-            @Nonnull BindingNormalizedNodeSerializer codecRegistry) {
+    public static XMLDataObjectConverter createWithSchemaContext(@NonNull EffectiveModelContext schemaContext,
+            @NonNull BindingNormalizedNodeSerializer codecRegistry) {
         return new XMLDataObjectConverter(schemaContext, codecRegistry);
     }
 
@@ -95,7 +93,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
      * @return {@link Optional} instance of {@link NormalizedNode}.
      */
     @Override
-    public Optional<NormalizedNode> transformIntoNormalizedNode(@Nonnull InputStream inputStream) {
+    public Optional<NormalizedNode> transformIntoNormalizedNode(@NonNull InputStream inputStream) {
         try {
             XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputStream);
             return parseInputXML(reader);
@@ -106,7 +104,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
     }
 
     @Override
-    public Optional<NormalizedNode> transformIntoNormalizedNode(@Nonnull Reader inputReader) {
+    public Optional<NormalizedNode> transformIntoNormalizedNode(@NonNull Reader inputReader) {
         try {
             XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputReader);
             return parseInputXML(reader);
@@ -127,7 +125,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
      * @param inputReader of the given XML
      * @return {@link Optional} instance of {@link NormalizedNode}.
      */
-    public Optional<NormalizedNode> transformInschemaContexttoNormalizedNode(@Nonnull Reader inputReader) {
+    public Optional<NormalizedNode> transformInschemaContexttoNormalizedNode(@NonNull Reader inputReader) {
         try {
             XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputReader);
             return parseInputXML(reader);
@@ -138,7 +136,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
     }
 
     @Override
-    public <T extends DataObject> Writer writerFromRpcDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+    public <T extends DataObject> Writer writerFromRpcDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
             ConvertType<T> convertType, QName rpcOutputQName, String rpcName) {
         Writer writer = new StringWriter();
         XMLStreamWriter xmlStreamWriter = createXmlStreamWriter(writer);
@@ -169,7 +167,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
      *
      */
     @Override
-    public <T extends DataObject> Writer writerFromDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+    public <T extends DataObject> Writer writerFromDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
             ConvertType<T> convertType) {
 
         Writer writer = new StringWriter();
@@ -194,17 +192,17 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
     }
 
     private Optional<NormalizedNode> parseInputXML(XMLStreamReader reader, SchemaNode parentSchemaNode) {
-        NormalizedNodeResult result = new NormalizedNodeResult();
+        NormalizationResultHolder result = new NormalizationResultHolder();
         EffectiveStatementInference schema = SchemaInferenceStack.of(getSchemaContext()).toInference();
         try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
                 XmlParserStream xmlParser = XmlParserStream
                     .create(streamWriter, schema)) {
             xmlParser.parse(reader);
-        } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) {
+        } catch (XMLStreamException | IOException e) {
             LOG.warn("An error occured during parsing XML input stream", e);
             return Optional.empty();
         }
-        return Optional.ofNullable(result.getResult());
+        return Optional.ofNullable(result.getResult().data());
     }
 
     private NormalizedNodeWriter createWriterBackedNormalizedNodeWriter(Writer backingWriter) {
index edd5f76b40993c29c28c55bae371b64148ae8719..c06dcb451e6854726c63dfa3b6452f6f36992c8e 100644 (file)
@@ -9,9 +9,11 @@
 package org.opendaylight.transportpce.test.stub;
 
 import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.MountPoint;
 import org.opendaylight.mdsal.binding.api.MountPointService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMMountPointServiceAdapter;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public class MountPointServiceStub implements MountPointService {
@@ -31,8 +33,7 @@ public class MountPointServiceStub implements MountPointService {
     }
 
     @Override
-    public <T extends MountPointListener> ListenerRegistration<T> registerListener(InstanceIdentifier<?> path,
-        T listener) {
-        return null;
+    public @NonNull Registration registerListener(InstanceIdentifier<?> path, MountPointListener listener) {
+        return new BindingDOMMountPointServiceAdapter(null, null).registerListener(path, listener);
     }
 }
index 362a40b638b9c8570bb285b839cae2693033c6c3..6e8b55737fd92242d081f530f7b7ceba22fd5cee 100644 (file)
@@ -5,30 +5,27 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.transportpce.test.stub;
 
 import java.util.Optional;
-import javax.annotation.Nonnull;
 import org.opendaylight.mdsal.binding.api.BindingService;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.MountPoint;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public class MountPointStub implements MountPoint {
 
     private DataBroker dataBroker;
 
-    private RpcConsumerRegistry rpcConsumerRegistry;
+    private RpcService rpcService;
 
     public MountPointStub(DataBroker dataBroker) {
         this.dataBroker = dataBroker;
     }
 
-    public void setRpcConsumerRegistry(
-            RpcConsumerRegistry rpcConsumerRegistry) {
-        this.rpcConsumerRegistry = rpcConsumerRegistry;
+    public void setRpcService(RpcService rpcService) {
+        this.rpcService = rpcService;
     }
 
     @Override
@@ -37,13 +34,12 @@ public class MountPointStub implements MountPoint {
         if (service.isInstance(dataBroker)) {
             return Optional.ofNullable((T) dataBroker);
         }
-        if (service.isInstance(rpcConsumerRegistry)) {
-            return Optional.ofNullable((T) rpcConsumerRegistry);
+        if (service.isInstance(rpcService)) {
+            return Optional.ofNullable((T) rpcService);
         }
         return Optional.empty();
     }
 
-    @Nonnull
     @Override
     public InstanceIdentifier<?> getIdentifier() {
         throw new UnsupportedOperationException();
index a67edb21e9987e95ec5232a9e20cdc63e1d16f28..44c5252aebcd378426b14608ef57f4f05064b794 100644 (file)
@@ -20,7 +20,7 @@ import org.opendaylight.mdsal.common.api.CommitInfo;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.transportpce.test.DataStoreContext;
 import org.opendaylight.transportpce.test.converter.XMLDataObjectConverter;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev231221.Network;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -32,7 +32,7 @@ public final class TopologyDataUtils {
 
     private static final Logger LOG = LoggerFactory.getLogger(TopologyDataUtils.class);
 
-    @SuppressWarnings({"unchecked","rawtypes"})
+    @SuppressWarnings("rawtypes")
     // FIXME check if the InstanceIdentifier raw type can be avoided
     // Raw types use are discouraged since they lack type safety.
     // Resulting Problems are observed at run time and not at compile time
diff --git a/tests/Xtesting/Dockerfile b/tests/Xtesting/Dockerfile
new file mode 100644 (file)
index 0000000..82963d4
--- /dev/null
@@ -0,0 +1,32 @@
+FROM alpine:3.18
+
+ARG BRANCH=master
+
+RUN apk --update add \
+        build-base \
+        checkbashisms \
+        curl \
+        linux-headers \
+        git \
+        gcc \
+        libxml2-dev \
+        libxslt-dev \
+        maven \
+        openjdk17-jdk \
+        openssl-dev \
+        python3 \
+        python3-dev \
+        py3-pip \
+        py3-psutil \
+        py3-tox \
+        py3-wheel \
+    && \
+    git init /src/transportpce && \
+    (cd /src/transportpce && \
+        git fetch --tags https://git.opendaylight.org/gerrit/transportpce.git $BRANCH && \
+        git checkout FETCH_HEAD) && \
+    pip install xtesting \
+        -r /src/transportpce/tests/requirements.txt \
+        -r /src/transportpce/tests/test-requirements.txt
+COPY testcases.yaml /etc/xtesting/testcases.yaml
+CMD ["run_tests", "-t", "all"]
diff --git a/tests/Xtesting/INSTALL.txt b/tests/Xtesting/INSTALL.txt
new file mode 100644 (file)
index 0000000..2ee3a5e
--- /dev/null
@@ -0,0 +1,17 @@
+## required steps on a brand new debian 12 system
+# apt-get install git sudo
+# adduser opnfv
+# adduser opnfv sudo
+# su - opnfv
+git clone https://git.opendaylight.org/gerrit/transportpce
+cd transportpce/tests/Xtesting
+sudo apt-get install virtualenv
+virtualenv xtesting -p python3 --system-site-packages
+. xtesting/bin/activate
+pip install ansible
+ansible-galaxy install -r requirements.yml
+ansible-playbook site.yml
+deactivate
+sudo docker build -t 127.0.0.1:5000/tpce0 .
+sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2
+sudo docker push 127.0.0.1:5000/tpce0
diff --git a/tests/Xtesting/patch.diff b/tests/Xtesting/patch.diff
new file mode 100644 (file)
index 0000000..d8999db
--- /dev/null
@@ -0,0 +1,31 @@
+diff --git a/tox.ini b/tox.ini
+index 7cae5c70..dd44b57a 100644
+--- a/tox.ini
++++ b/tox.ini
+@@ -94,7 +94,7 @@ commands =
+   ./build_karaf_for_tests.sh
+ [testenv:tests121]
+-depends = buildcontroller,build_karaf_tests121,sims121,testsPCE
++depends = buildcontroller,build_karaf_tests121,sims121
+ # testsPCE dependency is only here to chain tests in the gate and avoid resources starvation
+ allowlist_externals = launch_tests.sh
+ passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+@@ -127,7 +127,7 @@ commands =
+   ./build_karaf_for_tests.sh
+ [testenv:tests221]
+-depends = buildcontroller,build_karaf_tests221,sims221,tests71
++depends = buildcontroller,build_karaf_tests221,sims221,tests_tapi
+ # tests71 dependency is only here to chain tests in the gate and avoid ressources starvation
+ allowlist_externals = launch_tests.sh
+ passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+@@ -152,7 +152,7 @@ commands =
+   ./build_karaf_for_tests.sh
+ [testenv:tests71]
+-depends = buildcontroller,build_karaf_tests71,sims71,tests_tapi
++depends = buildcontroller,build_karaf_tests71,sims71
+ allowlist_externals = launch_tests.sh
+ passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+ setenv =
diff --git a/tests/Xtesting/requirements.yml b/tests/Xtesting/requirements.yml
new file mode 100644 (file)
index 0000000..a546126
--- /dev/null
@@ -0,0 +1,16 @@
+---
+roles:
+  - name: collivier.xtesting
+    src: https://github.com/collivier/ansible-role-xtesting
+    version: master
+  # to use xtesting GitHub repo master branch until a version > 4.2.0
+  # is published in ansible catalog to bring the following fix
+  # https://github.com/collivier/ansible-role-xtesting/pull/19
+
+collections:
+  - name: ansible.posix
+  - name: community.general
+  - name: community.grafana
+  - name: community.kubernetes
+  - name: community.docker
+  - name: community.postgresql
diff --git a/tests/Xtesting/site.yml b/tests/Xtesting/site.yml
new file mode 100644 (file)
index 0000000..fc832f3
--- /dev/null
@@ -0,0 +1,21 @@
+---
+- hosts:
+    - 127.0.0.1
+  roles:
+    - role: collivier.xtesting
+      project: transportpce
+      repo: 127.0.0.1
+      dport: 5000
+      gerrit: git.opendaylight.org
+      gerrit_project: transportpce
+      suites:
+        - container: tpce0
+          tests:
+            - combined
+#            - linters
+#            - build
+#            - PCE
+#            - 121
+#            - 221
+#            - 71
+#            - hybrid
diff --git a/tests/Xtesting/testcases.yaml b/tests/Xtesting/testcases.yaml
new file mode 100644 (file)
index 0000000..67cd870
--- /dev/null
@@ -0,0 +1,108 @@
+---
+tiers:
+    -
+        name: suites
+        order: 0
+        description: 'transportPCE tests by category'
+        testcases:
+            -
+                case_name: linters
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'linters suite'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && tox -o -p auto -e docs,docs-linkcheck,pre-commit,checkbashisms,pylint'
+                        console: true
+            -
+                case_name: build
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'build transportpce with karaf and lighty.io'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && tox -e buildcontroller,buildlighty'
+                        console: true
+            -
+                case_name: PCE
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'run PCE tests'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && tox -e buildcontroller,testsPCE'
+                        console: true
+            -
+                case_name: 121
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'run OpenROADM device 1.2.1 tests suite'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && tox -e buildcontroller,build_karaf_tests121,sims121,tests121'
+                        console: true
+            -
+                case_name: 221
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'run OpenROADM device 2.2.1 tests suite'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && tox -e buildcontroller,build_karaf_tests221,sims221,tests221'
+                        console: true
+            -
+                case_name: 71
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'run OpenROADM device 7.1 tests suite'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && tox -e buildcontroller,build_karaf_tests71,sims71,tests71'
+                        console: true
+            -
+                case_name: hybrid
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'run OpenROADM device mixed versions tests suite'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && tox -e buildcontroller,build_karaf_tests_hybrid,tests_hybrid'
+                        console: true
+    -
+        name: combined
+        order: 1
+        description: 'combine all transportPCE tests'
+        testcases:
+            -
+                case_name: combined
+                project_name: transportpce
+                criteria: 100
+                blocking: true
+                clean_flag: false
+                description: 'run all transportPCE tests in parallell with tox'
+                run:
+                    name: 'bashfeature'
+                    args:
+                        cmd: 'cd /src/transportpce && git apply tests/Xtesting/patch.diff && tox -o -p auto'
+                        console: true
index d250dcf1cae94ca0f885a7ac31e99a326cb144a4..00a8fe28b88b5576555ba92f80eb15cca00d9088 100755 (executable)
@@ -19,7 +19,7 @@ fi
 
 #build controller, source JDK_JAVA_OPTIONS to remove illegal reflective acces warnings introduced by Java11
 . "$current_dir"/reflectwarn.sh
-mvn clean install -B -q -s tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true -Dodlparent.spotbugs.skip -Dodlparent.checkstyle.skip
+mvn clean install -B -q -s tests/odl_settings.xml -Pq
 
 #patch Karaf exec for the same reason at runtime and also to have the possibility to use alternative ports
 ./karaf/target/assembly/ressources/post_install_for_tests.sh
index e2d13cd12eba411c3a645576e7a49b68aa897c5d..cb637bbd458916b4dbc40561d8ca3d12f57797e6 100755 (executable)
@@ -18,5 +18,5 @@ fi
 . $USE_ODL_ALT_KARAF_ENV
 . ./reflectwarn.sh
 cd  ../$USE_ODL_ALT_KARAF_INSTALL_DIR
-mvn clean install -B -q -s ../tests/odl_settings.xml -DskipTests -Dmaven.javadoc.skip=true
+mvn clean install -B -q -s ../tests/odl_settings.xml -Pq
 ./target/assembly/ressources/post_install_for_tests.sh
index 7b7c0b5d80741a5eda5a6f7c0a77f9712c0fae0f..a4c21ba1b1fef4761d2f3325fff5618c1a2daeff 100755 (executable)
@@ -19,6 +19,9 @@ for VERSION in $VERSIONS_LIST
 do
     case "$VERSION" in
         "1.2.1") PLUGIN_VERSION=1.0.9
+        #update 1.2.1 openroadm device configuration samples to be compliant with honeynode
+        #device models ("multi-wavelegnth" instead of "multi-wavelength" whose typo has been solved with 2.2.1 device models)
+        sed -i_ 's/multi-wavelegnth/multi-wavelength/g' $(dirname $0)/sample_configs/openroadm/1.2.1/oper-ROADM*.xml
         ;;
         "2.2.1") PLUGIN_VERSION=2.0.10
         ;;
diff --git a/tests/install_lightynode.sh b/tests/install_lightynode.sh
new file mode 100755 (executable)
index 0000000..aa9cd5e
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+#set -x
+
+PLUGIN_VERSION=${1:-19.1.0.5}
+
+#check if curl exists
+if ! [ -x "$(command -v curl)" ];then
+    echo "curl is not installed." >&2
+    exit 1
+fi
+#check if unzip exists
+if ! [ -x "$(command -v unzip)" ];then
+    echo "unzip is not installed." >&2
+    exit 1
+fi
+
+if [ -n "$2" ];then
+    echo "Using lighynode version $1 $2"
+    FILE_NAME="lighty-openroadm-device-$(echo $1 | cut -d - -f 1)-$2-bin.zip"
+    TARGET_URL="https://gitlab.com/api/v4/projects/36076125/packages/maven/io/lighty/transportpce/netconf/device/lighty-openroadm-device/$PLUGIN_VERSION/${FILE_NAME}"
+else
+    echo "Using lighynode version $PLUGIN_VERSION"
+    TARGET_URL="https://gitlab.com/api/v4/projects/36076125/packages/maven/io/lighty/transportpce/netconf/device/lighty-openroadm-device/$PLUGIN_VERSION/lighty-openroadm-device-$PLUGIN_VERSION-bin.zip"
+fi
+
+TARGET_DIR=$(dirname $0)/lightynode
+INSTALL_DIR=$TARGET_DIR/lightynode-openroadm-device
+ARTIFACT_ZIPFILE=$TARGET_DIR/artifact.zip
+if ! [ -d "$TARGET_DIR" ];then
+    echo "Creating 'lightynode' directory."
+    mkdir lightynode
+fi
+
+#clean lightynode install directory
+if [ -d "$INSTALL_DIR" ];then
+    echo "Removing $INSTALL_DIR directory"
+    rm -rf $INSTALL_DIR
+fi
+
+#download lightynode  and install it
+#complete source code can be found at https://gitlab.com/Orange-OpenSource/lfn/odl/lightynode-simulator.git
+echo "Installing lightynode device to $INSTALL_DIR directory "
+curl --retry-delay 10 --retry 3 -sS --fail --location --request GET $TARGET_URL -o $ARTIFACT_ZIPFILE || exit 2
+unzip -q -o $ARTIFACT_ZIPFILE -d $TARGET_DIR
+rm -f $ARTIFACT_ZIPFILE
+mv $TARGET_DIR/lighty-openroadm-device-$PLUGIN_VERSION $INSTALL_DIR
+
+#update 1.2.1 openroadm device configuration samples to be compliant with 1.2.1
+#device models ("multi-wavelegnth" instead of "multi-wavelength" whose typo has been solved with 2.2.1 device models)
+sed -i_ 's/multi-wavelength/multi-wavelegnth/g' $(dirname $0)/sample_configs/openroadm/1.2.1/oper-ROADM*.xml
diff --git a/tests/install_sims.sh b/tests/install_sims.sh
new file mode 100755 (executable)
index 0000000..69f8afd
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+#set -x
+
+cd $(dirname $0)
+
+if [ "$USE_SIMS" = "honeynode" ];then
+    ./install_honeynode.sh $@
+else
+    ./install_lightynode.sh
+fi
+
+exit
diff --git a/tests/lightynode/.gitkeep b/tests/lightynode/.gitkeep
new file mode 100644 (file)
index 0000000..e69de29
index 5ebd5e2e7e5284c53e9b5ce37a494f002859846c..e1c86aa270e84cef7a588a0692c96022339b85ca 100644 (file)
@@ -1,2 +1,4 @@
+dict2xml>=1.6.0 # MIT License
+netconf_client>=2.0.0 # Apache License 2.0
 psutil>=5.6.7 # 3-clause / New BSD License
 requests!=2.12.2,>=2.10.0 # Apache License 2.0
diff --git a/tests/sample_configs/honeynode-topo-3-RDM.json b/tests/sample_configs/honeynode-topo-3-RDM.json
new file mode 100644 (file)
index 0000000..8828e18
--- /dev/null
@@ -0,0 +1,1074 @@
+{
+    "ietf-network:network": [
+        {
+            "network-id": "openroadm-topology",
+            "network-types": {
+                "org-openroadm-common-network:openroadm-common-network": {}
+            },
+            "ietf-network-topology:link": [
+                {
+                    "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG3",
+                        "source-tp": "SRG3-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG3-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG3"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG1",
+                        "source-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-TTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-B1-SRG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-SRG1-SRG1-CP-TXRXtoROADM-B1-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-C1-SRG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG1",
+                        "source-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-TTP-TXRX",
+                        "dest-node": "ROADM-B1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX",
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-current": "12.0",
+                            "auto-spanloss": true,
+                            "spanloss-base": "11.4",
+                            "engineered-spanloss": "12.2",
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": "100000.0",
+                                    "pmd": "0.5",
+                                    "fiber-type": "smf"
+                                }
+                            ]
+                        }
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG3-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG3"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-B1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG1-DEG1-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-DEG1",
+                        "source-tp": "DEG1-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-TTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-TTP-TXRXtoROADM-B1-DEG1-DEG1-TTP-TXRX",
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-current": "12.0",
+                            "auto-spanloss": true,
+                            "spanloss-base": "11.4",
+                            "engineered-spanloss": "12.2",
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": "100000.0",
+                                    "pmd": "0.5",
+                                    "fiber-type": "smf"
+                                }
+                            ]
+                        }
+                    }
+                },
+                {
+                    "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-A1-SRG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-SRG1-SRG1-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-B1-DEG2-DEG2-CTP-TXRXtoROADM-B1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-B1-SRG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-SRG1-SRG1-CP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-DEG2",
+                        "source-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-TTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX",
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-current": "12.0",
+                            "auto-spanloss": true,
+                            "spanloss-base": "11.4",
+                            "engineered-spanloss": "12.2",
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": "100000.0",
+                                    "pmd": "0.5",
+                                    "fiber-type": "smf"
+                                }
+                            ]
+                        }
+                    }
+                },
+                {
+                    "link-id": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG2-DEG2-CTP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-DEG2",
+                        "source-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-TTP-TXRX",
+                        "dest-node": "ROADM-C1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-DEG1-DEG1-TTP-TXRXtoROADM-A1-DEG2-DEG2-TTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-C1-DEG2-DEG2-TTP-TXRXtoROADM-B1-DEG2-DEG2-TTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG2",
+                        "source-tp": "DEG2-TTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ROADM-TO-ROADM",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-TTP-TXRX",
+                        "dest-node": "ROADM-B1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG2-DEG2-TTP-TXRX",
+                    "org-openroadm-network-topology:OMS-attributes": {
+                        "span": {
+                            "spanloss-current": "12.0",
+                            "auto-spanloss": true,
+                            "spanloss-base": "11.4",
+                            "engineered-spanloss": "12.2",
+                            "link-concatenation": [
+                                {
+                                    "SRLG-Id": 0,
+                                    "SRLG-length": "100000.0",
+                                    "pmd": "0.5",
+                                    "fiber-type": "smf"
+                                }
+                            ]
+                        }
+                    }
+                },
+                {
+                    "link-id": "ROADM-B1-SRG1-SRG1-CP-TXRXtoROADM-B1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-B1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-C1-DEG1-DEG1-CTP-TXRXtoROADM-C1-SRG1-SRG1-CP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-C1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "DROP-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "SRG1-CP-TXRX",
+                        "dest-node": "ROADM-C1-SRG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-C1-SRG1-SRG1-CP-TXRXtoROADM-C1-DEG1-DEG1-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-B1-DEG2-DEG2-CTP-TXRXtoROADM-B1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-DEG2",
+                        "source-tp": "DEG2-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-B1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-B1-SRG1-SRG1-CP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-SRG1",
+                        "source-tp": "SRG1-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-B1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-DEG2-DEG2-CTP-TXRXtoROADM-B1-SRG1-SRG1-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-A1-SRG3-SRG3-CP-TXRXtoROADM-A1-DEG1-DEG1-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-A1-SRG3",
+                        "source-tp": "SRG3-CP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "ADD-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG1-CTP-TXRX",
+                        "dest-node": "ROADM-A1-DEG1"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-A1-DEG1-DEG1-CTP-TXRXtoROADM-A1-SRG3-SRG3-CP-TXRX"
+                },
+                {
+                    "link-id": "ROADM-B1-DEG1-DEG1-CTP-TXRXtoROADM-B1-DEG2-DEG2-CTP-TXRX",
+                    "source": {
+                        "source-node": "ROADM-B1-DEG1",
+                        "source-tp": "DEG1-CTP-TXRX"
+                    },
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:link-type": "EXPRESS-LINK",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "destination": {
+                        "dest-tp": "DEG2-CTP-TXRX",
+                        "dest-node": "ROADM-B1-DEG2"
+                    },
+                    "org-openroadm-common-network:opposite-link": "ROADM-B1-DEG2-DEG2-CTP-TXRXtoROADM-B1-DEG1-DEG1-CTP-TXRX"
+                }
+            ],
+            "node": [
+                {
+                    "node-id": "ROADM-B1-DEG1",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeB"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-B1"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    }
+                },
+                {
+                    "node-id": "ROADM-A1-SRG3",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG3-PP3-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG3-PP4-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG3-PP2-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG3-CP-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-CP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG3-PP1-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        },
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-B1-DEG2",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:tx-ttp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:ctp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeB"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-B1"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    }
+                },
+                {
+                    "node-id": "ROADM-C1-SRG1",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:pp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-CP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:cp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-C1"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-A1-SRG1",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-CP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        },
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        }
+                    ]
+                },
+                {
+                    "node-id": "ROADM-A1-DEG1",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        },
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    }
+                },
+                {
+                    "node-id": "ROADM-A1-DEG2",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-A1"
+                        },
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeA"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    }
+                },
+                {
+                    "node-id": "ROADM-C1-DEG2",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG2-TTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:tx-ttp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "tp-id": "DEG2-CTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:ctp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-C1"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 2,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    }
+                },
+                {
+                    "node-id": "ROADM-C1-DEG1",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-common-network:node-type": "DEGREE",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "DEG1-CTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-CTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "DEG1-TTP-TXRX",
+                            "org-openroadm-common-network:tp-type": "DEGREE-TXRX-TTP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeC"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-C1"
+                        }
+                    ],
+                    "org-openroadm-network-topology:degree-attributes": {
+                        "degree-number": 1,
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    }
+                },
+                {
+                    "node-id": "ROADM-B1-SRG1",
+                    "org-openroadm-common-network:operational-state": "inService",
+                    "org-openroadm-network-topology:srg-attributes": {
+                        "avail-freq-maps": [
+                            {
+                                "map-name": "cband",
+                                "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                "start-edge-freq": "191.325",
+                                "freq-map-granularity": "6.25",
+                                "effective-bits": 768
+                            }
+                        ]
+                    },
+                    "org-openroadm-common-network:node-type": "SRG",
+                    "org-openroadm-common-network:administrative-state": "inService",
+                    "ietf-network-topology:termination-point": [
+                        {
+                            "tp-id": "SRG1-PP4-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-PP1-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:pp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        },
+                        {
+                            "tp-id": "SRG1-PP2-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-PP3-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-PP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService"
+                        },
+                        {
+                            "tp-id": "SRG1-CP-TXRX",
+                            "org-openroadm-common-network:tp-type": "SRG-TXRX-CP",
+                            "org-openroadm-common-network:operational-state": "inService",
+                            "org-openroadm-common-network:administrative-state": "inService",
+                            "org-openroadm-network-topology:cp-attributes": {
+                                "avail-freq-maps": [
+                                    {
+                                        "map-name": "cband",
+                                        "freq-map": "//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8A",
+                                        "start-edge-freq": "191.325",
+                                        "freq-map-granularity": "6.25",
+                                        "effective-bits": 768
+                                    }
+                                ]
+                            }
+                        }
+                    ],
+                    "supporting-node": [
+                        {
+                            "network-ref": "clli-network",
+                            "node-ref": "NodeB"
+                        },
+                        {
+                            "network-ref": "openroadm-network",
+                            "node-ref": "ROADM-B1"
+                        }
+                    ]
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
index 9e3646ada688aa99ec2ba4ba1fba777311375e04..a9dc27df697397fbd82d4748ec738ad5838f9aab 100644 (file)
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
index 3aeba3ca67c44829d28cb3cd482978cef5b69570..a21936b6a95ec41673c616c0623ea6e1d576f2c9 100644 (file)
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
index 9ef8d0884b23f614e37a346b9fec0b4a66b96bc7..17457964129a02481c14f5d8f538b8ed07ab70bb 100644 (file)
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
index a958bef4325fb05470644008a6e9e7c7be8f6a19..f60da3f29cdbc5db823d97e53aa9a52e6116b0a3 100644 (file)
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
index db7f3a9feaa04c36598fd1c45eed8a4015f04437..2937e25f7a61b985c4c3deea49e739649dd086c7 100644 (file)
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>C1</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C2</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C3</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C4</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C5</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C6</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C7</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C8</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>C9</port-name>
         <port-type>Client</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>L1</port-name>
         <port-type>LINE</port-type>
         <port-qual>roadm-external</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <circuit-id>1</circuit-id>
         <administrative-state>inService</administrative-state>
         <port-name>LOG1</port-name>
         <port-type>Logical</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-DEMUX</port-name>
         <port-type>OSC</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>OSC-PORT</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>ETH-PLUG</port-name>
         <port-type>1GEX</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG1</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG2</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG3</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
         <port-name>AD-DEG4</port-name>
         <port-type>Edge</port-type>
         <port-qual>roadm-internal</port-qual>
-        <port-wavelength-type>multi-wavelength</port-wavelength-type>
+        <port-wavelength-type>multi-wavelegnth</port-wavelength-type>
         <port-direction>bidirectional</port-direction>
         <administrative-state>inService</administrative-state>
         <operational-state>inService</operational-state>
index 2b99e3aef97770f664f43385655cc38edc7d6d8c..656b07c6777f2a5be7023497a5b6c67c3fde39d0 100644 (file)
   </current-pm-entry>
   </current-pm-list>
 
+  <current-pm-description xmlns="http://honeynode-simulator/pm-handling">
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+  </current-pm-description>
+
  </data>
index d09d3906706dead55083c48289efad162aee4d4a..26b766ddf9dd61bb321002597052b6e7ee4ff718 100644 (file)
       </connection-ports>
     </degree>
   </org-openroadm-device>
- </data>
+
+  <current-pm-list xmlns="http://org/openroadm/pm">
+  <current-pm-entry>
+    <pm-resource-instance xmlns:d="http://org/openroadm/device">/d:org-openroadm-device/d:interface[d:name='OTS-DEG1-TTP-TXRX']</pm-resource-instance>
+    <pm-resource-type>interface</pm-resource-type>
+    <pm-resource-type-extension></pm-resource-type-extension>
+    <retrieval-time>2018-06-07T13:22:58+00:00</retrieval-time>
+    <current-pm>
+      <type>opticalPowerOutput</type>
+      <extension></extension>
+      <location>nearEnd</location>
+      <direction>tx</direction>
+      <measurement>
+        <granularity>15min</granularity>
+        <pmParameterValue>2.5</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+      <measurement>
+        <granularity>24Hour</granularity>
+        <pmParameterValue>2.23</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+    </current-pm>
+    <current-pm>
+      <type>opticalPowerInput</type>
+      <extension></extension>
+      <location>nearEnd</location>
+      <direction>rx</direction>
+      <measurement>
+        <granularity>15min</granularity>
+        <pmParameterValue>-21.1</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+      <measurement>
+        <granularity>24Hour</granularity>
+        <pmParameterValue>-49.3</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+    </current-pm>
+    <current-pm>
+      <type>opticalReturnLoss</type>
+      <extension></extension>
+      <location>nearEnd</location>
+      <direction>rx</direction>
+      <measurement>
+        <granularity>15min</granularity>
+        <pmParameterValue>40</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+      <measurement>
+        <granularity>24Hour</granularity>
+        <pmParameterValue>44</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+    </current-pm>
+  </current-pm-entry>
+  <current-pm-entry>
+    <pm-resource-instance xmlns:d="http://org/openroadm/device">/d:org-openroadm-device/d:interface[d:name='OTS-DEG2-TTP-TXRX']</pm-resource-instance>
+    <pm-resource-type>interface</pm-resource-type>
+    <pm-resource-type-extension></pm-resource-type-extension>
+    <retrieval-time>2018-06-07T13:22:58+00:00</retrieval-time>
+    <current-pm>
+      <type>opticalPowerOutput</type>
+      <extension></extension>
+      <location>nearEnd</location>
+      <direction>tx</direction>
+      <measurement>
+        <granularity>15min</granularity>
+        <pmParameterValue>2.5</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+      <measurement>
+        <granularity>24Hour</granularity>
+        <pmParameterValue>2.23</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+    </current-pm>
+    <current-pm>
+      <type>opticalPowerInput</type>
+      <extension></extension>
+      <location>nearEnd</location>
+      <direction>rx</direction>
+      <measurement>
+        <granularity>15min</granularity>
+        <pmParameterValue>-21.1</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+      <measurement>
+        <granularity>24Hour</granularity>
+        <pmParameterValue>-49.3</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+    </current-pm>
+    <current-pm>
+      <type>opticalReturnLoss</type>
+      <extension></extension>
+      <location>nearEnd</location>
+      <direction>rx</direction>
+      <measurement>
+        <granularity>15min</granularity>
+        <pmParameterValue>40</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+      <measurement>
+        <granularity>24Hour</granularity>
+        <pmParameterValue>44</pmParameterValue>
+        <pmParameterUnit>dBm</pmParameterUnit>
+        <validity>complete</validity>
+      </measurement>
+    </current-pm>
+  </current-pm-entry>
+  </current-pm-list>
+
+  <current-pm-description xmlns="http://honeynode-simulator/pm-handling">
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+  </current-pm-description>
+
+</data>
index bbd709d524c2fe57ae536236b969dad3d273a39d..47f8f1e367f4267c29013b273cdf9365d9b55cf7 100644 (file)
   </current-pm-entry>
   </current-pm-list>
 
- </data>
+  <current-pm-description xmlns="http://honeynode-simulator/pm-handling">
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:opticalTransport</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerOutput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of the first NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[TX/TXRX]-[frequency]-->
+      <!--Its value will be changed as additional NMC are created-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>0</default-current-value>
+      <max-value>21.82</max-value>
+      <min-value>-9.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>5</evolution-range>
+    </pm-generation-rules>
+    <pm-generation-rules>
+      <triggering-interface xmlns:org-openroadm-interfaces="http://org/openroadm/interfaces">org-openroadm-interfaces:openROADMOpticalMultiplex</triggering-interface>
+      <pm-name-prefix>opticalPowerInput</pm-name-prefix>
+      <!--This PM is generated on ROADMs on creation of a NMC (MediaChannel) interface nmc-ttp-DEGX-TTP-[RX/TXRX]-[frequency]-->
+      <analog>true</analog>
+      <!--Default value is purely indicative, the value shall be set trough pm-interact RPC according to a value calculated from span loss and Power mask -->
+      <!--The value set through the RPC will be the value to keep as a reference out of any forced mode use to simulate a failure -->
+      <default-current-value>-17.0</default-current-value>
+      <max-value>-9.0</max-value>
+      <min-value>-25.0</min-value>
+      <!--Evolution range is a percentage of the min max range expressed in dB-->
+      <evolution-range>10</evolution-range>
+    </pm-generation-rules>
+  </current-pm-description>
+
+</data>
diff --git a/tests/sample_configs/portmapping-3-RDM-221.json b/tests/sample_configs/portmapping-3-RDM-221.json
new file mode 100644 (file)
index 0000000..fcc93e6
--- /dev/null
@@ -0,0 +1,353 @@
+{
+    "nodes": [
+        {
+            "node-id": "ROADM-C1",
+            "node-info": {
+                "node-type": "rdm",
+                "node-model": "model2",
+                "openroadm-version": "2.2.1",
+                "node-clli": "NodeC",
+                "node-vendor": "vendorA",
+                "node-ip-address": "127.0.0.13"
+            },
+            "cp-to-degree": [
+                {
+                    "circuit-pack-name": "1/0/ETH-PLUG",
+                    "interface-name": "1GE-interface-1",
+                    "degree-number": 1
+                },
+                {
+                    "circuit-pack-name": "2/0/ETH-PLUG",
+                    "interface-name": "1GE-interface-2",
+                    "degree-number": 2
+                },
+                {
+                    "circuit-pack-name": "2/0",
+                    "interface-name": "1GE-interface-2",
+                    "degree-number": 2
+                },
+                {
+                    "circuit-pack-name": "1/0",
+                    "interface-name": "1GE-interface-1",
+                    "degree-number": 1
+                }
+            ],
+            "mapping": [
+                {
+                    "logical-connection-point": "SRG1-PP3-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C3"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP2-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C2"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP4-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C4"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP1-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C1"
+                },
+                {
+                    "logical-connection-point": "DEG1-TTP-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-oms": "OMS-DEG1-TTP-TXRX",
+                    "supporting-circuit-pack-name": "1/0",
+                    "supporting-ots": "OTS-DEG1-TTP-TXRX",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "L1"
+                },
+                {
+                    "logical-connection-point": "DEG2-TTP-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-oms": "OMS-DEG2-TTP-TXRX",
+                    "supporting-circuit-pack-name": "2/0",
+                    "supporting-ots": "OTS-DEG2-TTP-TXRX",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "L1"
+                }
+            ],
+            "mc-capabilities": [
+                {
+                    "mc-node-name": "DEG1-TTP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                },
+                {
+                    "mc-node-name": "DEG2-TTP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                },
+                {
+                    "mc-node-name": "SRG1-PP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                }
+            ]
+        },
+        {
+            "node-id": "ROADM-A1",
+            "node-info": {
+                "node-type": "rdm",
+                "node-model": "model2",
+                "openroadm-version": "2.2.1",
+                "node-clli": "NodeA",
+                "node-vendor": "vendorA",
+                "node-ip-address": "127.0.0.11"
+            },
+            "cp-to-degree": [
+                {
+                    "circuit-pack-name": "1/0/ETH-PLUG",
+                    "interface-name": "1GE-interface-1",
+                    "degree-number": 1
+                },
+                {
+                    "circuit-pack-name": "2/0/ETH-PLUG",
+                    "interface-name": "1GE-interface-2",
+                    "degree-number": 2
+                },
+                {
+                    "circuit-pack-name": "2/0",
+                    "interface-name": "1GE-interface-2",
+                    "degree-number": 2
+                },
+                {
+                    "circuit-pack-name": "1/0",
+                    "interface-name": "1GE-interface-1",
+                    "degree-number": 1
+                }
+            ],
+            "mapping": [
+                {
+                    "logical-connection-point": "SRG1-PP2-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C2"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP4-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C4"
+                },
+                {
+                    "logical-connection-point": "SRG3-PP4-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "5/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C4"
+                },
+                {
+                    "logical-connection-point": "SRG3-PP3-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "5/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C3"
+                },
+                {
+                    "logical-connection-point": "DEG2-TTP-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-oms": "OMS-DEG2-TTP-TXRX",
+                    "supporting-circuit-pack-name": "2/0",
+                    "supporting-ots": "OTS-DEG2-TTP-TXRX",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "L1"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP3-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C3"
+                },
+                {
+                    "logical-connection-point": "SRG3-PP2-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "5/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C2"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP1-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C1"
+                },
+                {
+                    "logical-connection-point": "DEG1-TTP-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-oms": "OMS-DEG1-TTP-TXRX",
+                    "supporting-circuit-pack-name": "1/0",
+                    "supporting-ots": "OTS-DEG1-TTP-TXRX",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "L1"
+                },
+                {
+                    "logical-connection-point": "SRG3-PP1-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "5/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C1"
+                }
+            ],
+            "mc-capabilities": [
+                {
+                    "mc-node-name": "DEG2-TTP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                },
+                {
+                    "mc-node-name": "DEG1-TTP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                },
+                {
+                    "mc-node-name": "SRG3-PP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                },
+                {
+                    "mc-node-name": "SRG1-PP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                }
+            ]
+        },
+        {
+            "node-id": "ROADM-B1",
+            "node-info": {
+                "node-type": "rdm",
+                "node-model": "model2",
+                "openroadm-version": "2.2.1",
+                "node-clli": "NodeB",
+                "node-vendor": "vendorA",
+                "node-ip-address": "127.0.0.12"
+            },
+            "cp-to-degree": [
+                {
+                    "circuit-pack-name": "1/0/ETH-PLUG",
+                    "interface-name": "1GE-interface-1",
+                    "degree-number": 1
+                },
+                {
+                    "circuit-pack-name": "2/0/ETH-PLUG",
+                    "interface-name": "1GE-interface-2",
+                    "degree-number": 2
+                },
+                {
+                    "circuit-pack-name": "2/0",
+                    "interface-name": "1GE-interface-2",
+                    "degree-number": 2
+                },
+                {
+                    "circuit-pack-name": "1/0",
+                    "interface-name": "1GE-interface-1",
+                    "degree-number": 1
+                }
+            ],
+            "mapping": [
+                {
+                    "logical-connection-point": "SRG1-PP3-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C3"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP2-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C2"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP4-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C4"
+                },
+                {
+                    "logical-connection-point": "SRG1-PP1-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-circuit-pack-name": "3/0",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "C1"
+                },
+                {
+                    "logical-connection-point": "DEG1-TTP-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-oms": "OMS-DEG1-TTP-TXRX",
+                    "supporting-circuit-pack-name": "1/0",
+                    "supporting-ots": "OTS-DEG1-TTP-TXRX",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "L1"
+                },
+                {
+                    "logical-connection-point": "DEG2-TTP-TXRX",
+                    "port-oper-state": "InService",
+                    "supporting-oms": "OMS-DEG2-TTP-TXRX",
+                    "supporting-circuit-pack-name": "2/0",
+                    "supporting-ots": "OTS-DEG2-TTP-TXRX",
+                    "port-direction": "bidirectional",
+                    "port-admin-state": "InService",
+                    "supporting-port": "L1"
+                }
+            ],
+            "mc-capabilities": [
+                {
+                    "mc-node-name": "DEG1-TTP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                },
+                {
+                    "mc-node-name": "DEG2-TTP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                },
+                {
+                    "mc-node-name": "SRG1-PP",
+                    "slot-width-granularity": "50.0",
+                    "center-freq-granularity": "50.0"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file
index d409cfa600a76e3e98be80d21d4819c797faf71c..84c4650ad575eb2f2e2d07cad4c875798f1c7682 100644 (file)
@@ -86,5 +86,4 @@ class TransportPCEtesting(unittest.TestCase):
 
 if __name__ == "__main__":
     # logging.basicConfig(filename='./transportpce_tests/log/response.log',filemode='w',level=logging.DEBUG)
-    #logging.debug('I am there')
     unittest.main(verbosity=2)
index 55b05a419754c90fd11ccd266987b41f8ddc2c95..b277c23c9750b1be77baa331b99be830b9acfa3d 100644 (file)
@@ -64,7 +64,7 @@ class TransportOlmTesting(unittest.TestCase):
         response = test_utils.mount_device("ROADMC01", ('roadmc-full', self.NODE_VERSION))
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_to_roadmA(self):
+    def test_05_connect_xpdrA_to_roadmA(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRA01', 'xpdr-num': '1', 'network-num': '1',
@@ -78,7 +78,7 @@ class TransportOlmTesting(unittest.TestCase):
                              'rdm-node': 'ROADMA01', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
         self.assertEqual(response['status_code'], requests.codes.ok)
 
-    def test_07_connect_xprdC_to_roadmC(self):
+    def test_07_connect_xpdrC_to_roadmC(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRC01', 'xpdr-num': '1', 'network-num': '1',
@@ -482,9 +482,9 @@ class TransportOlmTesting(unittest.TestCase):
         self.assertIn('Request processed', response['output']['result'])
         time.sleep(10)
 
-    #"""to test case where SRG where the xpdr is connected to has no optical range data"""
+    # """to test case where SRG where the xpdr is connected to has no optical range data"""
 
-    def test_31_connect_xprdA_to_roadmA(self):
+    def test_31_connect_xpdrA_to_roadmA(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRA01', 'xpdr-num': '1', 'network-num': '2',
index 68bd01bfc338ad8fdb62f7367a494109272395a8..2b428ea0a5fb9087e848f30837ad2aeca6b84141 100644 (file)
@@ -106,7 +106,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         response = test_utils.mount_device("ROADMC01", ('roadmc-full', self.NODE_VERSION))
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+    def test_05_connect_xpdrA_N1_to_roadmA_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRA01', 'xpdr-num': '1', 'network-num': '1',
@@ -124,7 +124,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
+    def test_07_connect_xpdrC_N1_to_roadmC_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRC01', 'xpdr-num': '1', 'network-num': '1',
@@ -282,7 +282,7 @@ class TransportPCEFulltesting(unittest.TestCase):
                 self.assertEqual(freq_map_array[95], 0, "Lambda 1 should not be available")
         time.sleep(1)
 
-    def test_18_connect_xprdA_N2_to_roadmA_PP2(self):
+    def test_18_connect_xpdrA_N2_to_roadmA_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRA01', 'xpdr-num': '1', 'network-num': '2',
@@ -300,7 +300,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_20_connect_xprdC_N2_to_roadmC_PP2(self):
+    def test_20_connect_xpdrC_N2_to_roadmC_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRC01', 'xpdr-num': '1', 'network-num': '2',
index 7b28099915e289bbeae59aa5afa7d853fcd6a88c..e5b02e733e9300dd6952958113cee8ca84e91ba6 100644 (file)
@@ -218,13 +218,17 @@ class TransportPCEPortMappingTesting(unittest.TestCase):
                          response['switching-pool-lcp'][0]['switching-pool-type'])
         self.assertEqual(1,
                          len(response['switching-pool-lcp'][0]['non-blocking-list']))
-        self.assertIn(
-            {'nbl-number': 2,
-             'lcp-list': ['XPDR2-NETWORK3', 'XPDR2-NETWORK4', 'XPDR2-CLIENT1', 'XPDR2-CLIENT3',
-                          'XPDR2-CLIENT2', 'XPDR2-NETWORK1', 'XPDR2-CLIENT4', 'XPDR2-NETWORK2'],
-             'interconnect-bandwidth-unit': 1000000000,
-             'interconnect-bandwidth': 0},
-            response['switching-pool-lcp'][0]['non-blocking-list'])
+        expected_sorted_list = ['XPDR2-CLIENT1', 'XPDR2-CLIENT2', 'XPDR2-CLIENT3', 'XPDR2-CLIENT4',
+                                'XPDR2-NETWORK1', 'XPDR2-NETWORK2', 'XPDR2-NETWORK3', 'XPDR2-NETWORK4']
+        expected_subset_response = {
+            "nbl-number": 2,
+            "interconnect-bandwidth-unit": 1000000000,
+            "interconnect-bandwidth": 0}
+        subset = {k: v for k, v in response['switching-pool-lcp'][0]['non-blocking-list'][0].items()
+                  if k in expected_subset_response}
+        self.assertDictEqual(subset, expected_subset_response)
+        self.assertEqual(sorted(response['switching-pool-lcp'][0]['non-blocking-list'][0]['lcp-list']),
+                         expected_sorted_list)
 
     def test_20_spdr_switching_pool_3(self):
         response = test_utils.get_portmapping_node_attr("SPDR-SA1", "switching-pool-lcp", "3")
index 20b7bc1270c7261bab4b0d1d35ce1c20b7227d44..625b3c981eb4938e2f05fd664f20e244f9b66e16 100644 (file)
@@ -98,5 +98,4 @@ class TransportPCEtesting(unittest.TestCase):
 
 if __name__ == "__main__":
     # logging.basicConfig(filename='./transportpce_tests/log/response.log',filemode='w',level=logging.DEBUG)
-    #logging.debug('I am there')
     unittest.main(verbosity=2)
index cf432d4b0a95364de0d2885e16f75cd3166be27d..55c4eaf52d31ebdf7bc927f9555eebb41cc9f9ff 100644 (file)
@@ -64,7 +64,7 @@ class TransportOlmTesting(unittest.TestCase):
         response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION))
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_to_roadmA(self):
+    def test_05_connect_xpdrA_to_roadmA(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
@@ -78,7 +78,7 @@ class TransportOlmTesting(unittest.TestCase):
                              'rdm-node': 'ROADM-A1', 'srg-num': '1', 'termination-point-num': 'SRG1-PP1-TXRX'}})
         self.assertEqual(response['status_code'], requests.codes.ok)
 
-    def test_07_connect_xprdC_to_roadmC(self):
+    def test_07_connect_xpdrC_to_roadmC(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -467,9 +467,9 @@ class TransportOlmTesting(unittest.TestCase):
         self.assertIn('Request processed', response['output']['result'])
         time.sleep(10)
 
-   #"""to test case where SRG where the xpdr is connected to has no optical range data"""
+   # """to test case where SRG where the xpdr is connected to has no optical range data"""
 
-    def test_31_connect_xprdA_to_roadmA(self):
+    def test_31_connect_xpdrA_to_roadmA(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '2',
index c60c2d2a8c0d6f43800d10e4381ebb0c628447ca..624f0930ea47bbcca8f873b05b2ec5d7121aed5f 100644 (file)
@@ -167,7 +167,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION))
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+    def test_05_connect_xpdrA_N1_to_roadmA_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
@@ -185,7 +185,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_07_connect_xprdC_xpdr1_N1_to_roadmC_PP1(self):
+    def test_07_connect_xpdrC_xpdr1_N1_to_roadmC_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -194,7 +194,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_08_connect_roadmC_PP1_to_xpdrC_xprd1_N1(self):
+    def test_08_connect_roadmC_PP1_to_xpdrC_xpdr1_N1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-rdm-xpdr-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -203,7 +203,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_09_connect_xprdA_N2_to_roadmA_PP2(self):
+    def test_09_connect_xpdrA_N2_to_roadmA_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '2',
@@ -221,7 +221,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_11_connect_xprdC_xpdr2_N1_to_roadmC_PP2(self):
+    def test_11_connect_xpdrC_xpdr2_N1_to_roadmC_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '2', 'network-num': '1',
index b84c942f1f7e046904760becb25e465e8fcf206b..b9b467f0aef450651774a55238cacbbf47a12931 100644 (file)
@@ -46,10 +46,20 @@ class TransportPCE400GPortMappingTesting(unittest.TestCase):
                                ]
                            }
                            }
+    SUBSET_NETWORK1_CHECK_DICT = {"logical-connection-point": "XPDR4-NETWORK1",
+                                  "supporting-port": "L1",
+                                  "port-direction": "bidirectional",
+                                  "port-qual": "xpdr-network",
+                                  "supporting-circuit-pack-name": "1/1/6-PLUG-NET",
+                                  "xpdr-type": "regen",
+                                  "port-admin-state": "InService",
+                                  "port-oper-state": "InService"
+                                  }
     REGEN_CAPABILITIES = ["OTUC2-REGEN",
                           "OTUC3-REGEN",
                           "OTUC4-REGEN",
                           ]
+    SUP_INT_CAPA = ["org-openroadm-port-types:if-otsi-otsigroup"]
     NODE_VERSION = "7.1"
 
     @classmethod
@@ -146,24 +156,30 @@ class TransportPCE400GPortMappingTesting(unittest.TestCase):
     def test_05_get_portmapping_network1(self):
         response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR4-NETWORK1")
         self.assertEqual(response["status_code"], requests.codes.ok)
-        self.NETWORK1_CHECK_DICT["supporting-otucn"] = "XPDR4-NETWORK1-OTUC4"
-        self.NETWORK1_CHECK_DICT["lcp-hash-val"] = "AKkLPpWaa8x+"
-        self.NETWORK1_CHECK_DICT["connection-map-lcp"] = "XPDR4-NETWORK2"
-        self.assertIn(
-            self.NETWORK1_CHECK_DICT,
-            response["mapping"])
+        self.SUBSET_NETWORK1_CHECK_DICT["supporting-otucn"] = "XPDR4-NETWORK1-OTUC4"
+        self.SUBSET_NETWORK1_CHECK_DICT["lcp-hash-val"] = "AKkLPpWaa8x+"
+        self.SUBSET_NETWORK1_CHECK_DICT["connection-map-lcp"] = "XPDR4-NETWORK2"
+        subset = {k: v for k, v in response["mapping"][0].items() if k in self.SUBSET_NETWORK1_CHECK_DICT}
+        self.assertDictEqual(subset, self.SUBSET_NETWORK1_CHECK_DICT)
+        self.assertEqual(sorted(response["mapping"][0]["regen-profiles"]["regen-profile"]),
+                         self.REGEN_CAPABILITIES)
+        self.assertEqual(sorted(response["mapping"][0]["supported-interface-capability"]),
+                         self.SUP_INT_CAPA)
 
     def test_06_get_portmapping_network1(self):
         response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR4-NETWORK2")
         self.assertEqual(response["status_code"], requests.codes.ok)
-        self.NETWORK1_CHECK_DICT["logical-connection-point"] = "XPDR4-NETWORK2"
-        self.NETWORK1_CHECK_DICT["supporting-otucn"] = "XPDR4-NETWORK2-OTUC4"
-        self.NETWORK1_CHECK_DICT["lcp-hash-val"] = "AKkLPpWaa8x9"
-        self.NETWORK1_CHECK_DICT["connection-map-lcp"] = "XPDR4-NETWORK1"
-        self.NETWORK1_CHECK_DICT["supporting-circuit-pack-name"] = "1/1/5-PLUG-NET"
-        self.assertIn(
-            self.NETWORK1_CHECK_DICT,
-            response["mapping"])
+        self.SUBSET_NETWORK1_CHECK_DICT["logical-connection-point"] = "XPDR4-NETWORK2"
+        self.SUBSET_NETWORK1_CHECK_DICT["supporting-otucn"] = "XPDR4-NETWORK2-OTUC4"
+        self.SUBSET_NETWORK1_CHECK_DICT["lcp-hash-val"] = "AKkLPpWaa8x9"
+        self.SUBSET_NETWORK1_CHECK_DICT["connection-map-lcp"] = "XPDR4-NETWORK1"
+        self.SUBSET_NETWORK1_CHECK_DICT["supporting-circuit-pack-name"] = "1/1/5-PLUG-NET"
+        subset = {k: v for k, v in response["mapping"][0].items() if k in self.SUBSET_NETWORK1_CHECK_DICT}
+        self.assertDictEqual(subset, self.SUBSET_NETWORK1_CHECK_DICT)
+        self.assertEqual(sorted(response["mapping"][0]["regen-profiles"]["regen-profile"]),
+                         self.REGEN_CAPABILITIES)
+        self.assertEqual(sorted(response["mapping"][0]["supported-interface-capability"]),
+                         self.SUP_INT_CAPA)
 
     def test_07_check_interface_oduc4(self):
         response = test_utils.check_node_attribute_request(
index cb7294af65d0847262f2875b348381fda5155481..5eef9402223464cb8bb694129a70ade302f566e2 100644 (file)
@@ -8,28 +8,29 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
+# pylint: disable=line-too-long
 SIMS = {
-    ('xpdra', '1.2.1'): {'port': '17830', 'configfile': 'oper-XPDRA.xml', 'logfile': 'xpdra-121.log'},
-    ('roadma', '1.2.1'): {'port': '17831', 'configfile': 'oper-ROADMA.xml', 'logfile': 'roadma-121.log'},
-    ('roadmb', '1.2.1'): {'port': '17832', 'configfile': 'oper-ROADMB.xml', 'logfile': 'roadmb-121.log'},
-    ('roadmc', '1.2.1'): {'port': '17833', 'configfile': 'oper-ROADMC.xml', 'logfile': 'roadmc-121.log'},
-    ('xpdrc', '1.2.1'): {'port': '17834', 'configfile': 'oper-XPDRC.xml', 'logfile': 'xpdrc-121.log'},
-    ('roadma-full', '1.2.1'): {'port': '17821', 'configfile': 'oper-ROADMA-full.xml', 'logfile': 'roadma-121.log'},
-    ('roadmc-full', '1.2.1'): {'port': '17823', 'configfile': 'oper-ROADMC-full.xml', 'logfile': 'roadmc-121.log'},
-    ('xpdra', '2.2.1'): {'port': '17840', 'configfile': 'oper-XPDRA.xml', 'logfile': 'xpdra-221.log'},
-    ('roadma', '2.2.1'): {'port': '17841', 'configfile': 'oper-ROADMA.xml', 'logfile': 'roadma-221.log'},
-    ('roadmb', '2.2.1'): {'port': '17842', 'configfile': 'oper-ROADMB.xml', 'logfile': 'roadmb-221.log'},
-    ('roadmc', '2.2.1'): {'port': '17843', 'configfile': 'oper-ROADMC.xml', 'logfile': 'roadmc-221.log'},
-    ('roadmd', '2.2.1'): {'port': '17847', 'configfile': 'oper-ROADMD.xml', 'logfile': 'roadmd-221.log'},
-    ('xpdrc', '2.2.1'): {'port': '17844', 'configfile': 'oper-XPDRC.xml', 'logfile': 'xpdrc-221.log'},
-    ('spdra', '2.2.1'): {'port': '17845', 'configfile': 'oper-SPDRA.xml', 'logfile': 'spdra-221.log'},
-    ('spdrc', '2.2.1'): {'port': '17846', 'configfile': 'oper-SPDRC.xml', 'logfile': 'spdrc-221.log'},
-    ('spdrb', '2.2.1'): {'port': '17848', 'configfile': 'oper-SPDRB.xml', 'logfile': 'spdrb-221.log'},
-    ('xpdra', '7.1'): {'port': '17850', 'configfile': 'oper-XPDRA.xml', 'logfile': 'xpdra-71.log'},
-    ('roadma', '7.1'): {'port': '17851', 'configfile': 'oper-ROADMA.xml', 'logfile': 'roadma-71.log'},
-    ('roadmb', '7.1'): {'port': '17852', 'configfile': 'oper-ROADMB.xml', 'logfile': 'roadmb-71.log'},
-    ('roadmc', '7.1'): {'port': '17853', 'configfile': 'oper-ROADMC.xml', 'logfile': 'roadmc-71.log'},
-    ('xpdrc', '7.1'): {'port': '17854', 'configfile': 'oper-XPDRC.xml', 'logfile': 'xpdrc-71.log'},
-    ('xpdra2', '7.1'): {'port': '17857', 'configfile': 'oper-XPDRA2.xml', 'logfile': 'xpdra2-71.log'},
-    ('xpdrc2', '7.1'): {'port': '17858', 'configfile': 'oper-XPDRC2.xml', 'logfile': 'xpdrc2-71.log'}
+    ('xpdra', '1.2.1'): {'port': '17830', 'configfile': 'oper-XPDRA.xml', 'logfile': 'xpdra-121.log', 'restconf_baseurl': 'http://127.0.0.1:8130/restconf'},
+    ('roadma', '1.2.1'): {'port': '17831', 'configfile': 'oper-ROADMA.xml', 'logfile': 'roadma-121.log', 'restconf_baseurl': 'http://127.0.0.1:8131/restconf'},
+    ('roadmb', '1.2.1'): {'port': '17832', 'configfile': 'oper-ROADMB.xml', 'logfile': 'roadmb-121.log', 'restconf_baseurl': 'http://127.0.0.1:8132/restconf'},
+    ('roadmc', '1.2.1'): {'port': '17833', 'configfile': 'oper-ROADMC.xml', 'logfile': 'roadmc-121.log', 'restconf_baseurl': 'http://127.0.0.1:8133/restconf'},
+    ('xpdrc', '1.2.1'): {'port': '17834', 'configfile': 'oper-XPDRC.xml', 'logfile': 'xpdrc-121.log', 'restconf_baseurl': 'http://127.0.0.1:8134/restconf'},
+    ('roadma-full', '1.2.1'): {'port': '17821', 'configfile': 'oper-ROADMA-full.xml', 'logfile': 'roadma-121.log', 'restconf_baseurl': 'http://127.0.0.1:8121/restconf'},
+    ('roadmc-full', '1.2.1'): {'port': '17823', 'configfile': 'oper-ROADMC-full.xml', 'logfile': 'roadmc-121.log', 'restconf_baseurl': 'http://127.0.0.1:8123/restconf'},
+    ('xpdra', '2.2.1'): {'port': '17840', 'configfile': 'oper-XPDRA.xml', 'logfile': 'xpdra-221.log', 'restconf_baseurl': 'http://127.0.0.1:8140/restconf'},
+    ('roadma', '2.2.1'): {'port': '17841', 'configfile': 'oper-ROADMA.xml', 'logfile': 'roadma-221.log', 'restconf_baseurl': 'http://127.0.0.1:8141/restconf'},
+    ('roadmb', '2.2.1'): {'port': '17842', 'configfile': 'oper-ROADMB.xml', 'logfile': 'roadmb-221.log', 'restconf_baseurl': 'http://127.0.0.1:8142/restconf'},
+    ('roadmc', '2.2.1'): {'port': '17843', 'configfile': 'oper-ROADMC.xml', 'logfile': 'roadmc-221.log', 'restconf_baseurl': 'http://127.0.0.1:8143/restconf'},
+    ('roadmd', '2.2.1'): {'port': '17847', 'configfile': 'oper-ROADMD.xml', 'logfile': 'roadmd-221.log', 'restconf_baseurl': 'http://127.0.0.1:8147/restconf'},
+    ('xpdrc', '2.2.1'): {'port': '17844', 'configfile': 'oper-XPDRC.xml', 'logfile': 'xpdrc-221.log', 'restconf_baseurl': 'http://127.0.0.1:8144/restconf'},
+    ('spdra', '2.2.1'): {'port': '17845', 'configfile': 'oper-SPDRA.xml', 'logfile': 'spdra-221.log', 'restconf_baseurl': 'http://127.0.0.1:8145/restconf'},
+    ('spdrc', '2.2.1'): {'port': '17846', 'configfile': 'oper-SPDRC.xml', 'logfile': 'spdrc-221.log', 'restconf_baseurl': 'http://127.0.0.1:8146/restconf'},
+    ('spdrb', '2.2.1'): {'port': '17848', 'configfile': 'oper-SPDRB.xml', 'logfile': 'spdrb-221.log', 'restconf_baseurl': 'http://127.0.0.1:8148/restconf'},
+    ('xpdra', '7.1'): {'port': '17850', 'configfile': 'oper-XPDRA.xml', 'logfile': 'xpdra-71.log', 'restconf_baseurl': 'http://127.0.0.1:8150/restconf'},
+    ('roadma', '7.1'): {'port': '17851', 'configfile': 'oper-ROADMA.xml', 'logfile': 'roadma-71.log', 'restconf_baseurl': 'http://127.0.0.1:8151/restconf'},
+    ('roadmb', '7.1'): {'port': '17852', 'configfile': 'oper-ROADMB.xml', 'logfile': 'roadmb-71.log', 'restconf_baseurl': 'http://127.0.0.1:8152/restconf'},
+    ('roadmc', '7.1'): {'port': '17853', 'configfile': 'oper-ROADMC.xml', 'logfile': 'roadmc-71.log', 'restconf_baseurl': 'http://127.0.0.1:8153/restconf'},
+    ('xpdrc', '7.1'): {'port': '17854', 'configfile': 'oper-XPDRC.xml', 'logfile': 'xpdrc-71.log', 'restconf_baseurl': 'http://127.0.0.1:8154/restconf'},
+    ('xpdra2', '7.1'): {'port': '17857', 'configfile': 'oper-XPDRA2.xml', 'logfile': 'xpdra2-71.log', 'restconf_baseurl': 'http://127.0.0.1:8157/restconf'},
+    ('xpdrc2', '7.1'): {'port': '17858', 'configfile': 'oper-XPDRC2.xml', 'logfile': 'xpdrc2-71.log', 'restconf_baseurl': 'http://127.0.0.1:8158/restconf'}
 }
index 4911c2a3ff9d10595d78548afb5742ec2aaf65dc..b43346f87cef9ca3bb277a1d590cda21c18be54d 100644 (file)
@@ -22,6 +22,12 @@ import time
 
 import psutil
 import requests
+import urllib.parse
+
+from dict2xml import dict2xml
+from netconf_client.connect import connect_ssh
+from netconf_client.ncclient import Manager
+
 
 # pylint: disable=import-error
 import simulators
@@ -29,6 +35,7 @@ import simulators
 SIMS = simulators.SIMS
 
 HONEYNODE_OK_START_MSG = 'Netconf SSH endpoint started successfully at 0.0.0.0'
+LIGHTYNODE_OK_START_MSG = 'Data tree change listeners registered'
 KARAF_OK_START_MSG = "Transportpce controller started"
 LIGHTY_OK_START_MSG = re.escape("lighty.io and RESTCONF-NETCONF started")
 
@@ -47,6 +54,9 @@ CODE_SHOULD_BE_201 = 'Http status code should be 201'
 T100GE = 'Transponder 100GE'
 T0_MULTILAYER_TOPO = 'T0 - Multi-layer topology'
 T0_FULL_MULTILAYER_TOPO = 'T0 - Full Multi-layer topology'
+T100GE_UUID = 'cf51c729-3699-308a-a7d0-594c6a62ebbb'
+T0_MULTILAYER_TOPO_UUID = '747c670e-7a07-3dab-b379-5b1cd17402a3'
+T0_FULL_MULTILAYER_TOPO_UUID = '393f09a4-0a0b-3d82-a4f6-1fbbc14ca1a7'
 
 SIM_LOG_DIRECTORY = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'log')
 
@@ -84,6 +94,19 @@ if 'USE_LIGHTY' in os.environ and os.environ['USE_LIGHTY'] == 'True':
 else:
     TPCE_LOG = KARAF_LOG
 
+if 'USE_SIMS' not in os.environ:
+    SIMS_TO_USE = 'lightynode'
+    SIMS_TYPE = 'lightynode'
+else:
+    SIMS_TO_USE = os.environ['USE_SIMS']
+    print("Forcing to use SIMS " + SIMS_TO_USE)
+    if SIMS_TO_USE != 'None' or 'SIMS_TYPE' not in os.environ:
+        SIMS_TYPE = SIMS_TO_USE
+    else:
+        SIMS_TYPE = os.environ['SIMS_TYPE']
+        print("Forcing to use SIMS type" + SIMS_TYPE)
+
+
 #
 # Basic HTTP operations
 #
@@ -133,12 +156,47 @@ def post_request(url, data):
 #
 
 
+def start_honeynode(log_file: str, sim):
+    executable = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                              '..', '..', 'honeynode', sim[1], 'honeynode-simulator', 'honeycomb-tpce')
+    sample_directory = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                    '..', '..', 'sample_configs', 'openroadm', sim[1])
+    if os.path.isfile(executable):
+        with open(log_file, 'w', encoding='utf-8') as outfile:
+            return subprocess.Popen(
+                [executable, SIMS[sim]['port'], os.path.join(sample_directory, SIMS[sim]['configfile'])],
+                stdout=outfile, stderr=outfile)
+    return None
+
+
+def start_lightynode(log_file: str, sim):
+    executable = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                              '..', '..', 'lightynode', 'lightynode-openroadm-device', 'start-device.sh')
+    sample_directory = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                    '..', '..', 'sample_configs', 'openroadm', sim[1])
+    if os.path.isfile(executable):
+        with open(log_file, 'w', encoding='utf-8') as outfile:
+            return subprocess.Popen(
+                [executable, "-v" + sim[1], "-p" + SIMS[sim]['port'], "-f" + os.path.join(sample_directory,
+                                                                                          SIMS[sim]['configfile'])],
+                stdout=outfile, stderr=outfile)
+    return None
+
+
 def start_sims(sims_list):
+    if SIMS_TO_USE == 'None':
+        return None
+    if SIMS_TO_USE == 'honeynode':
+        start_msg = HONEYNODE_OK_START_MSG
+        start_method = start_honeynode
+    else:
+        start_msg = LIGHTYNODE_OK_START_MSG
+        start_method = start_lightynode
     for sim in sims_list:
         print('starting simulator ' + sim[0] + ' in OpenROADM device version ' + sim[1] + '...')
         log_file = os.path.join(SIM_LOG_DIRECTORY, SIMS[sim]['logfile'])
-        process = start_honeynode(log_file, sim)
-        if wait_until_log_contains(log_file, HONEYNODE_OK_START_MSG, 100):
+        process = start_method(log_file, sim)
+        if wait_until_log_contains(log_file, start_msg, 100):
             print('simulator for ' + sim[0] + ' started')
         else:
             print('simulator for ' + sim[0] + ' failed to start')
@@ -203,7 +261,7 @@ def install_karaf_feature(feature_name: str):
 # -b option needed below because of Karaf client bug reporte in the JIRA ticket mentioned above
     return subprocess.run([executable, '-b'],
                           input='feature:install ' + feature_name + '\n feature:list | grep '
-                          + feature_name + ' \n logout \n',
+                          + feature_name + ' \n',
                           universal_newlines=True, check=False)
 
 
@@ -215,51 +273,33 @@ def shutdown_process(process):
         process.send_signal(signal.SIGINT)
 
 
-def start_honeynode(log_file: str, sim):
-    executable = os.path.join(os.path.dirname(os.path.realpath(__file__)),
-                              '..', '..', 'honeynode', sim[1], 'honeynode-simulator', 'honeycomb-tpce')
-    sample_directory = os.path.join(os.path.dirname(os.path.realpath(__file__)),
-                                    '..', '..', 'sample_configs', 'openroadm', sim[1])
-    if os.path.isfile(executable):
-        with open(log_file, 'w', encoding='utf-8') as outfile:
-            return subprocess.Popen(
-                [executable, SIMS[sim]['port'], os.path.join(sample_directory, SIMS[sim]['configfile'])],
-                stdout=outfile, stderr=outfile)
-    return None
-
-
 def wait_until_log_contains(log_file, regexp, time_to_wait=60):
     # pylint: disable=lost-exception
     # pylint: disable=consider-using-with
     stringfound = False
-    filefound = False
     line = None
     try:
         with TimeOut(seconds=time_to_wait):
             while not os.path.exists(log_file):
                 time.sleep(0.2)
-            filelogs = open(log_file, 'r', encoding='utf-8')
-            filelogs.seek(0, 2)
-            filefound = True
-            print("Searching for pattern '" + regexp + "' in " + os.path.basename(log_file), end='... ', flush=True)
-            compiled_regexp = re.compile(regexp)
-            while True:
-                line = filelogs.readline()
-                if compiled_regexp.search(line):
-                    print('Pattern found!', end=' ')
-                    stringfound = True
-                    break
-                if not line:
-                    time.sleep(0.1)
+            with open(log_file, 'r', encoding='utf-8') as filelogs:
+                filelogs.seek(0, 2)
+                print("Searching for pattern '" + regexp + "' in " + os.path.basename(log_file), end='... ', flush=True)
+                compiled_regexp = re.compile(regexp)
+                while True:
+                    line = filelogs.readline()
+                    if compiled_regexp.search(line):
+                        print('Pattern found!', end=' ')
+                        stringfound = True
+                        break
+                    if not line:
+                        time.sleep(0.1)
+        return stringfound
     except TimeoutError:
         print('Pattern not found after ' + str(time_to_wait), end=' seconds! ', flush=True)
+        return stringfound
     except PermissionError:
         print('Permission Error when trying to access the log file', end=' ... ', flush=True)
-    finally:
-        if filefound:
-            filelogs.close()
-        else:
-            print('log file does not exist or is not accessible... ', flush=True)
         return stringfound
 
 
@@ -288,13 +328,19 @@ def mount_device(node: str, sim: str):
     url = {'rfc8040': '{}/data/network-topology:network-topology/topology=topology-netconf/node={}',
            'draft-bierman02': '{}/config/network-topology:network-topology/topology/topology-netconf/node/{}'}
     body = {'node': [{
-        'node-id': node,
-        'netconf-node-topology:username': NODES_LOGIN,
-        'netconf-node-topology:password': NODES_PWD,
-        'netconf-node-topology:host': '127.0.0.1',
-        'netconf-node-topology:port': SIMS[sim]['port'],
-        'netconf-node-topology:tcp-only': 'false',
-        'netconf-node-topology:pass-through': {}}]}
+            "node-id": node,
+            "netconf-node-topology:host": "127.0.0.1",
+            "netconf-node-topology:port": SIMS[sim]['port'],
+            "netconf-node-topology:login-password-unencrypted": {
+                "netconf-node-topology:username": NODES_LOGIN,
+                "netconf-node-topology:password": NODES_PWD
+            },
+            "netconf-node-topology:tcp-only": "false",
+            "netconf-node-topology:reconnect-on-changed-schema": "false",
+            "netconf-node-topology:connection-timeout-millis": "20000",
+            "netconf-node-topology:default-request-timeout-millis": "60000",
+            "netconf-node-topology:max-connection-attempts": "0",
+            "netconf-node-topology:keepalive-delay": "120"}]}
     response = put_request(url[RESTCONF_VERSION].format('{}', node), body)
     if wait_until_log_contains(TPCE_LOG, 'Triggering notification stream NETCONF for node ' + node, 180):
         print('Node ' + node + ' correctly added to tpce topology', end='... ', flush=True)
@@ -358,8 +404,12 @@ def check_node_attribute_request(node: str, attribute: str, attribute_value: str
                   'draft-bierman02': attribute}
     if return_key[RESTCONF_VERSION] in res.keys():
         response_attribute = res[return_key[RESTCONF_VERSION]]
-    else:
+    elif 'errors' in res.keys():
         response_attribute = res['errors']['error'][0]
+    else:
+        # status code 400 invalid request
+        response_attribute = res['message'] + ' ' + res['url']
+        print(response_attribute)
     return {'status_code': response.status_code,
             attribute: response_attribute}
 
@@ -644,3 +694,85 @@ def transportpce_api_rpc_request(api_module: str, rpc: str, payload: dict):
             return_output = res[return_key[RESTCONF_VERSION]]
     return {'status_code': response.status_code,
             'output': return_output}
+
+#
+# simulators datastore operations
+#
+
+
+def sims_update_cp_port(sim: tuple, circuitpack: str, port: str, payload: dict):
+    if SIMS_TYPE == 'lightynode':
+        return sims_update_cp_port_ntcf(sim, circuitpack, payload)
+    if SIMS_TYPE == 'honeynode':
+        return sims_update_cp_port_rest(sim, circuitpack, port, payload)
+    return False
+
+
+def sims_update_cp_port_rest(sim: tuple, circuitpack: str, port: str, payload: dict):
+    # pylint: disable=consider-using-f-string
+    url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/{}/ports/{}".format(
+        SIMS[sim]['restconf_baseurl'],
+        urllib.parse.quote(circuitpack, safe=''),
+        urllib.parse.quote(port, safe=''))
+    body = {"ports": [payload]}
+    response = requests.request("PUT",
+                                url,
+                                data=json.dumps(body),
+                                headers=TYPE_APPLICATION_JSON,
+                                auth=(ODL_LOGIN, ODL_PWD),
+                                timeout=REQUEST_TIMEOUT)
+    return response.status_code == requests.codes.ok
+
+
+def sims_update_cp_port_ntcf(sim: tuple, circuitpack: str, payload: dict):
+    body = {"circuit-packs": {"circuit-pack-name": circuitpack, "ports": payload}}
+    xml_body = '<config><org-openroadm-device xmlns="http://org/openroadm/device">'
+    xml_body += dict2xml(body, indent="  ")
+    xml_body += '</org-openroadm-device></config>'
+    with connect_ssh(host='127.0.0.1',
+                     port=int(SIMS[sim]['port']),
+                     username=NODES_LOGIN,
+                     password=NODES_PWD) as session:
+        mgr = Manager(session, timeout=120)
+        mgr.edit_config(xml_body, target="candidate", default_operation="merge")
+        return True
+    return False
+
+
+def sims_update_pm_interact(sim: tuple, payload: dict):
+    if SIMS_TYPE == 'lightynode':
+        return sims_update_pm_interact_ntcf(sim, payload)
+    if SIMS_TYPE == 'honeynode':
+        return sims_update_pm_interact_rest(sim, payload)
+    return False
+
+
+def sims_update_pm_interact_rest(sim: tuple, payload: dict):
+    # pylint: disable=consider-using-f-string
+    url = "{}/operations/pm-handling:pm-interact".format(SIMS[sim]['restconf_baseurl'])
+    body = {"input": payload}
+    response = requests.request("POST",
+                                url,
+                                data=json.dumps(body),
+                                headers=TYPE_APPLICATION_JSON,
+                                auth=(ODL_LOGIN, ODL_PWD),
+                                timeout=REQUEST_TIMEOUT)
+    return response.status_code == requests.codes.ok
+
+
+def sims_update_pm_interact_ntcf(sim: tuple, payload: dict):
+    # pylint: disable=line-too-long
+    xml_body = '<pm-interact xmlns="http://honeynode-simulator/pm-handling">'
+    xml_body += dict2xml(payload, indent="  ")
+    xml_body += '</pm-interact>'
+    new_xml = xml_body.replace("<pm-resource-instance>/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']</pm-resource-instance>",
+                               "<pm-resource-instance xmlns:a=\"http://org/openroadm/device\">/a:org-openroadm-device/a:interface[a:name='OTS-DEG2-TTP-TXRX']</pm-resource-instance>")
+    with connect_ssh(host='127.0.0.1',
+                     port=int(SIMS[sim]['port']),
+                     username=NODES_LOGIN,
+                     password=NODES_PWD) as session:
+        mgr = Manager(session, timeout=120)
+        reply = mgr.dispatch(new_xml)
+    if "netconf_client.ncclient.RPCReply" in str(reply):
+        return True
+    return False
index 8616670795d34423307a05f24281f4e2f99e65fc..bb28a3cf074b2d1dcc06b69ae2431c58c14592ed 100644 (file)
@@ -10,7 +10,6 @@
 
 # pylint: disable=no-member
 # pylint: disable=too-many-public-methods
-import json
 import unittest
 import time
 import requests
@@ -113,7 +112,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+    def test_05_connect_xpdrA_N1_to_roadmA_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDRA01', 'xpdr-num': '1', 'network-num': '1',
@@ -129,7 +128,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
 
-    def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
+    def test_07_connect_xpdrC_N1_to_roadmC_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -198,19 +197,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_13_change_status_line_port_xpdra(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('xpdra', self.NODE_VERSION_121), '1/0/1-PLUG-NET', '1',
+                                                       {
             "port-name": "1",
             "logical-connection-point": "XPDR1-NETWORK1",
             "port-type": "CFP2",
             "circuit-id": "XPDRA-NETWORK",
             "administrative-state": "outOfService",
-            "port-qual": "xpdr-network"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8130/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "xpdr-network"
+        }))
         time.sleep(2)
 
     def test_14_check_update_portmapping(self):
@@ -272,19 +267,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_17_restore_status_line_port_xpdra(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('xpdra', self.NODE_VERSION_121), '1/0/1-PLUG-NET', '1',
+                                                       {
             "port-name": "1",
             "logical-connection-point": "XPDR1-NETWORK1",
             "port-type": "CFP2",
             "circuit-id": "XPDRA-NETWORK",
             "administrative-state": "inService",
-            "port-qual": "xpdr-network"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8130/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "xpdr-network"
+        }))
         time.sleep(2)
 
     def test_18_check_update_portmapping_ok(self):
@@ -320,19 +311,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_12_get_eth_service1()
 
     def test_21_change_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_22_check_update_portmapping(self):
@@ -387,19 +374,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_24_restore_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "inService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_25_check_update_portmapping_ok(self):
@@ -412,19 +395,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_12_get_eth_service1()
 
     def test_28_change_status_line_port_roadma_deg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/2%2F0/ports/L1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '2/0', 'L1',
+                                                       {
             "port-name": "L1",
             "logical-connection-point": "DEG2-TTP-TXRX",
             "port-type": "LINE",
             "circuit-id": "1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_29_check_update_portmapping(self):
@@ -479,19 +458,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_31_restore_status_line_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/2%2F0/ports/L1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '2/0', 'L1',
+                                                       {
             "port-name": "L1",
             "logical-connection-point": "DEG2-TTP-TXRX",
             "port-type": "LINE",
             "circuit-id": "1",
             "administrative-state": "inService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_32_check_update_portmapping_ok(self):
@@ -504,17 +479,13 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_12_get_eth_service1()
 
     def test_35_change_status_line_port_xpdrc(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('xpdrc', self.NODE_VERSION_71), '1/0/1-PLUG-NET', '1',
+                                                       {
             "port-name": "1",
             "port-type": "CFP2",
             "administrative-state": "outOfService",
-            "port-qual": "xpdr-network"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8154/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "xpdr-network"
+        }))
         time.sleep(2)
 
     def test_36_check_update_portmapping(self):
@@ -569,17 +540,13 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_38_restore_status_line_port_xpdrc(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('xpdrc', self.NODE_VERSION_71), '1/0/1-PLUG-NET', '1',
+                                                       {
             "port-name": "1",
             "port-type": "CFP2",
             "administrative-state": "inService",
-            "port-qual": "xpdr-network"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8154/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "xpdr-network"
+        }))
         time.sleep(2)
 
     def test_39_check_update_portmapping_ok(self):
@@ -592,19 +559,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_12_get_eth_service1()
 
     def test_42_change_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C2"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C2',
+                                                       {
             "port-name": "C2",
             "logical-connection-point": "SRG1-PP2",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_43_check_update_portmapping(self):
index e6b55c27ccac0a6c39a3c1222785852ce299a0d8..5b1ad0bd8cb805a727c778781bac107917838b4b 100644 (file)
@@ -155,27 +155,27 @@ class TransportPCEtesting(unittest.TestCase):
     def setUp(self):
         time.sleep(1)
 
-    def test_01_connect_xpdra2(self):
+    def test_001_connect_xpdra2(self):
         response = test_utils.mount_device("XPDR-A2", ('xpdra2', self.NODE_VERSION_71))
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_02_connect_xpdrc2(self):
+    def test_002_connect_xpdrc2(self):
         response = test_utils.mount_device("XPDR-C2", ('xpdrc2', self.NODE_VERSION_71))
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_03_connect_rdma(self):
+    def test_003_connect_rdma(self):
         response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION_221))
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_04_connect_rdmc(self):
+    def test_004_connect_rdmc(self):
         response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprda2_2_N1_to_roadma_PP2(self):
+    def test_005_connect_xpdra2_2_N1_to_roadma_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '2', 'network-num': '1',
@@ -183,7 +183,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
 
-    def test_06_connect_roadma_PP2_to_xpdra2_2_N1(self):
+    def test_006_connect_roadma_PP2_to_xpdra2_2_N1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-rdm-xpdr-links',
             {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '2', 'network-num': '1',
@@ -191,7 +191,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
 
-    def test_07_connect_xprdc2_2_N1_to_roadmc_PP2(self):
+    def test_007_connect_xpdrc2_2_N1_to_roadmc_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '2', 'network-num': '1',
@@ -199,7 +199,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
 
-    def test_08_connect_roadmc_PP2_to_xpdrc2_2_N1(self):
+    def test_008_connect_roadmc_PP2_to_xpdrc2_2_N1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-rdm-xpdr-links',
             {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '2', 'network-num': '1',
@@ -207,7 +207,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
 
-    def test_09_add_omsAttributes_roadma_roadmc(self):
+    def test_009_add_omsAttributes_roadma_roadmc(self):
         # Config ROADMA-ROADMC oms-attributes
         data = {"span": {
             "auto-spanloss": "true",
@@ -223,7 +223,7 @@ class TransportPCEtesting(unittest.TestCase):
             "ROADM-A1-DEG2-DEG2-TTP-TXRXtoROADM-C1-DEG1-DEG1-TTP-TXRX", data)
         self.assertEqual(response.status_code, requests.codes.created)
 
-    def test_10_add_omsAttributes_roadmc_roadma(self):
+    def test_010_add_omsAttributes_roadmc_roadma(self):
         # Config ROADMC-ROADMA oms-attributes
         data = {"span": {
             "auto-spanloss": "true",
@@ -240,13 +240,13 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response.status_code, requests.codes.created)
 
     # test service-create for OCH-OTU4 service from xpdra2 to xpdrc2
-    def test_11_check_otn_topology(self):
+    def test_011_check_otn_topology(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['network'][0]['node']), 7, 'There should be 7 nodes')
         self.assertNotIn('ietf-network-topology:link', response['network'][0])
 
-    def test_12_create_OTUC4_service(self):
+    def test_012_create_OTUC4_service(self):
         response = test_utils.transportpce_api_rpc_request(
             'org-openroadm-service', 'service-create',
             self.cr_serv_input_data)
@@ -255,7 +255,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_13_get_OTUC4_service1(self):
+    def test_013_get_OTUC4_service1(self):
         response = test_utils.get_ordm_serv_list_attr_request(
             "services", "service1-OTUC4")
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -271,7 +271,7 @@ class TransportPCEtesting(unittest.TestCase):
                          'org-openroadm-otn-common-types:OTUCn')
 
     # Check correct configuration of devices
-    def test_14_check_interface_otsi_xpdra2(self):
+    def test_014_check_interface_otsi_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-755:768')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -288,7 +288,7 @@ class TransportPCEtesting(unittest.TestCase):
                  **response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']),
             response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi'])
 
-    def test_15_check_interface_OTSI_GROUP_xpdra2(self):
+    def test_015_check_interface_OTSI_GROUP_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-OTSIGROUP-400G')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -309,7 +309,7 @@ class TransportPCEtesting(unittest.TestCase):
                              response['interface'][0]
                              ['org-openroadm-otsi-group-interfaces:otsi-group'])
 
-    def test_16_check_interface_OTUC4_xpdra2(self):
+    def test_016_check_interface_OTUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-OTUC4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -335,7 +335,7 @@ class TransportPCEtesting(unittest.TestCase):
                              response['interface'][0]
                              ['org-openroadm-otn-otu-interfaces:otu'])
 
-    def test_17_check_interface_otsi_xpdrc2(self):
+    def test_017_check_interface_otsi_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'interface', 'XPDR2-NETWORK1-755:768')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -353,7 +353,7 @@ class TransportPCEtesting(unittest.TestCase):
                  **response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']),
             response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi'])
 
-    def test_18_check_interface_OTSI_GROUP_xpdrc2(self):
+    def test_018_check_interface_OTSI_GROUP_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'interface', 'XPDR2-NETWORK1-OTSIGROUP-400G')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -374,7 +374,7 @@ class TransportPCEtesting(unittest.TestCase):
                              response['interface'][0]
                              ['org-openroadm-otsi-group-interfaces:otsi-group'])
 
-    def test_19_check_interface_OTUC4_xpdrc2(self):
+    def test_019_check_interface_OTUC4_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'interface', 'XPDR2-NETWORK1-OTUC4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -402,12 +402,12 @@ class TransportPCEtesting(unittest.TestCase):
                              response['interface'][0]
                              ['org-openroadm-otn-otu-interfaces:otu'])
 
-    def test_20_check_no_interface_ODUC4_xpdra2(self):
+    def test_020_check_no_interface_ODUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODUC4')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_21_check_openroadm_topo_xpdra2(self):
+    def test_021_check_openroadm_topo_xpdra2(self):
         response = test_utils.get_ietf_network_node_request('openroadm-topology', 'XPDR-A2-XPDR2', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         ele = response['node']['ietf-network-topology:termination-point'][0]
@@ -419,7 +419,7 @@ class TransportPCEtesting(unittest.TestCase):
             75.0,
             float(ele['org-openroadm-network-topology:xpdr-network-attributes']['wavelength']['width']))
 
-    def test_22_check_otn_topo_OTUC4_links(self):
+    def test_022_check_otn_topo_OTUC4_links(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 2)
@@ -434,7 +434,7 @@ class TransportPCEtesting(unittest.TestCase):
             self.assertIn(link['org-openroadm-common-network:opposite-link'], listLinkId)
 
     # test service-create for ODU4 service from xpdra2 to xpdrc2
-    def test_23_create_ODUC4_service(self):
+    def test_023_create_ODUC4_service(self):
         self.cr_serv_input_data["service-name"] = "service1-ODUC4"
         self.cr_serv_input_data["service-a-end"]["service-format"] = "ODU"
         del self.cr_serv_input_data["service-a-end"]["otu-service-rate"]
@@ -450,7 +450,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_24_get_ODUC4_service1(self):
+    def test_024_get_ODUC4_service1(self):
         response = test_utils.get_ordm_serv_list_attr_request(
             "services", "service1-ODUC4")
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -465,7 +465,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['services'][0]['service-z-end']['odu-service-rate'],
                          'org-openroadm-otn-common-types:ODUCn')
 
-    def test_25_check_interface_ODUC4_xpdra2(self):
+    def test_025_check_interface_ODUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODUC4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -491,7 +491,7 @@ class TransportPCEtesting(unittest.TestCase):
             {'payload-type': '22', 'exp-payload-type': '22'},
             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
 
-    def test_26_check_interface_ODUC4_xpdrc2(self):
+    def test_026_check_interface_ODUC4_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'interface', 'XPDR2-NETWORK1-ODUC4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -517,7 +517,7 @@ class TransportPCEtesting(unittest.TestCase):
             {'payload-type': '22', 'exp-payload-type': '22'},
             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
 
-    def test_27_check_otn_topo_links(self):
+    def test_027_check_otn_topo_links(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 4)
@@ -545,7 +545,7 @@ class TransportPCEtesting(unittest.TestCase):
             else:
                 self.fail("this link should not exist")
 
-    def test_28_check_otn_topo_tp(self):
+    def test_028_check_otn_topo_tp(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         for node in response['network'][0]['node']:
@@ -561,7 +561,7 @@ class TransportPCEtesting(unittest.TestCase):
                                          'org-openroadm-otn-common-types:ODTU4.ts-Allocated')
 
     # test service-create for 100GE service 1 from xpdra2 to xpdrc2
-    def test_29_create_100GE_service_1(self):
+    def test_029_create_100GE_service_1(self):
         self.cr_serv_input_data["service-name"] = "service-100GE"
         self.cr_serv_input_data["connection-type"] = "service"
         self.cr_serv_input_data["service-a-end"]["service-rate"] = "100"
@@ -582,7 +582,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_30_get_100GE_service_1(self):
+    def test_030_get_100GE_service_1(self):
         response = test_utils.get_ordm_serv_list_attr_request(
             "services", "service-100GE")
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -591,7 +591,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['services'][0]['connection-type'], 'service')
         self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
 
-    def test_31_check_interface_100GE_CLIENT_xpdra2(self):
+    def test_031_check_interface_100GE_CLIENT_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ETHERNET-100G')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -608,7 +608,7 @@ class TransportPCEtesting(unittest.TestCase):
             dict(input_dict_2, **response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']),
             response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
 
-    def test_32_check_interface_ODU4_CLIENT_xpdra2(self):
+    def test_032_check_interface_ODU4_CLIENT_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ODU4:service-100GE')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -632,7 +632,7 @@ class TransportPCEtesting(unittest.TestCase):
             {'payload-type': '07', 'exp-payload-type': '07'},
             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
 
-    def test_33_check_interface_ODU4_NETWORK_xpdra2(self):
+    def test_033_check_interface_ODU4_NETWORK_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -662,7 +662,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertIn('1.20', response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['parent-odu-allocation']
                       ['opucn-trib-slots'])
 
-    def test_34_check_ODU4_connection_xpdra2(self):
+    def test_034_check_ODU4_connection_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'odu-connection', 'XPDR2-CLIENT1-ODU4-x-XPDR2-NETWORK1-ODU4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -679,7 +679,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4:service-100GE'},
                              response['odu-connection'][0]['source'])
 
-    def test_35_check_interface_100GE_CLIENT_xpdrc2(self):
+    def test_035_check_interface_100GE_CLIENT_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'interface', 'XPDR2-CLIENT1-ETHERNET-100G')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -696,7 +696,7 @@ class TransportPCEtesting(unittest.TestCase):
             dict(input_dict_2, **response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']),
             response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
 
-    def test_36_check_interface_ODU4_CLIENT_xpdrc2(self):
+    def test_036_check_interface_ODU4_CLIENT_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'interface', 'XPDR2-CLIENT1-ODU4:service-100GE')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -720,7 +720,7 @@ class TransportPCEtesting(unittest.TestCase):
             {'payload-type': '07', 'exp-payload-type': '07'},
             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
 
-    def test_37_check_interface_ODU4_NETWORK_xpdrc2(self):
+    def test_037_check_interface_ODU4_NETWORK_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -756,7 +756,7 @@ class TransportPCEtesting(unittest.TestCase):
                           'org-openroadm-otn-odu-interfaces:odu'][
                           'parent-odu-allocation']['opucn-trib-slots'])
 
-    def test_38_check_ODU4_connection_xpdrc2(self):
+    def test_038_check_ODU4_connection_xpdrc2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-C2', 'odu-connection', 'XPDR2-CLIENT1-ODU4-x-XPDR2-NETWORK1-ODU4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -773,7 +773,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4:service-100GE'},
                              response['odu-connection'][0]['source'])
 
-    def test_39_check_otn_topo_links(self):
+    def test_039_check_otn_topo_links(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 4)
@@ -786,7 +786,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertEqual(
                     link['org-openroadm-otn-network-topology:used-bandwidth'], 100000)
 
-    def test_40_check_otn_topo_tp(self):
+    def test_040_check_otn_topo_tp(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         for node in response['network'][0]['node']:
@@ -805,7 +805,7 @@ class TransportPCEtesting(unittest.TestCase):
                             1, xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool'])
 
     # test service-create for 100GE service 2 from xpdra2 to xpdrc2
-    def test_41_create_100GE_service_2(self):
+    def test_041_create_100GE_service_2(self):
         self.cr_serv_input_data["service-name"] = "service-100GE2"
         self.cr_serv_input_data["connection-type"] = "service"
         self.cr_serv_input_data["service-a-end"]["service-rate"] = "100"
@@ -824,7 +824,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_42_get_100GE_service_2(self):
+    def test_042_get_100GE_service_2(self):
         response = test_utils.get_ordm_serv_list_attr_request("services", "service-100GE2")
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(response['services'][0]['administrative-state'], 'inService')
@@ -833,12 +833,12 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
         time.sleep(1)
 
-    def test_43_check_service_list(self):
+    def test_043_check_service_list(self):
         response = test_utils.get_ordm_serv_list_request()
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['service-list']['services']), 4)
 
-    def test_44_check_otn_topo_links(self):
+    def test_044_check_otn_topo_links(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 4)
@@ -851,7 +851,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertEqual(
                     link['org-openroadm-otn-network-topology:used-bandwidth'], 200000)
 
-    def test_45_check_otn_topo_tp(self):
+    def test_045_check_otn_topo_tp(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         for node in response['network'][0]['node']:
@@ -869,7 +869,7 @@ class TransportPCEtesting(unittest.TestCase):
                         self.assertNotIn(
                             2, xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool'])
 
-    def test_46_delete_100GE_service_2(self):
+    def test_046_delete_100GE_service_2(self):
         self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service-100GE2"
         response = test_utils.transportpce_api_rpc_request(
             'org-openroadm-service', 'service-delete',
@@ -879,7 +879,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_47_delete_100GE_service_1(self):
+    def test_047_delete_100GE_service_1(self):
         self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service-100GE"
         response = test_utils.transportpce_api_rpc_request(
             'org-openroadm-service', 'service-delete',
@@ -889,32 +889,32 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_48_check_service_list(self):
+    def test_048_check_service_list(self):
         response = test_utils.get_ordm_serv_list_request()
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['service-list']['services']), 2)
 
-    def test_49_check_no_ODU4_connection_xpdra2(self):
+    def test_049_check_no_ODU4_connection_xpdra2(self):
         response = test_utils.check_node_request("XPDR-A2")
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertNotIn(['odu-connection'][0], response['org-openroadm-device'])
 
-    def test_50_check_no_interface_ODU4_NETWORK_xpdra2(self):
+    def test_050_check_no_interface_ODU4_NETWORK_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_51_check_no_interface_ODU4_CLIENT_xpdra2(self):
+    def test_051_check_no_interface_ODU4_CLIENT_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ODU4:service-100GE')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_52_check_no_interface_100GE_CLIENT_xpdra2(self):
+    def test_052_check_no_interface_100GE_CLIENT_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ETHERNET-100G')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_53_check_otn_topo_links(self):
+    def test_053_check_otn_topo_links(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 4)
@@ -927,7 +927,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertEqual(
                     link['org-openroadm-otn-network-topology:used-bandwidth'], 0)
 
-    def test_54_check_otn_topo_tp(self):
+    def test_054_check_otn_topo_tp(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         for node in response['network'][0]['node']:
@@ -940,7 +940,261 @@ class TransportPCEtesting(unittest.TestCase):
                         self.assertEqual(
                             len(xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool']), 4)
 
-    def test_55_delete_ODUC4_service(self):
+    # test service-create for 100GE service 3 from xpdra2 client1 to xpdrc2 client2
+    def test_055_create_100GE_service_3(self):
+        self.cr_serv_input_data["service-name"] = "service-100GE3"
+        self.cr_serv_input_data["connection-type"] = "service"
+        self.cr_serv_input_data["service-a-end"]["service-rate"] = "100"
+        self.cr_serv_input_data["service-a-end"]["service-format"] = "Ethernet"
+        self.cr_serv_input_data["service-a-end"]["tx-direction"][0]["port"]["port-name"] = "XPDR2-CLIENT1"
+        self.cr_serv_input_data["service-a-end"]["rx-direction"][0]["port"]["port-name"] = "XPDR2-CLIENT1"
+        self.cr_serv_input_data["service-z-end"]["service-rate"] = "100"
+        self.cr_serv_input_data["service-z-end"]["service-format"] = "Ethernet"
+        self.cr_serv_input_data["service-z-end"]["tx-direction"][0]["port"]["port-name"] = "XPDR2-CLIENT2"
+        self.cr_serv_input_data["service-z-end"]["rx-direction"][0]["port"]["port-name"] = "XPDR2-CLIENT2"
+        response = test_utils.transportpce_api_rpc_request(
+            'org-openroadm-service', 'service-create',
+            self.cr_serv_input_data)
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        self.assertIn('PCE calculation in progress',
+                      response['output']['configuration-response-common']['response-message'])
+        time.sleep(self.WAITING)
+
+    def test_056_get_100GE_service_3(self):
+        response = test_utils.get_ordm_serv_list_attr_request("services", "service-100GE3")
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        self.assertEqual(response['services'][0]['administrative-state'], 'inService')
+        self.assertEqual(response['services'][0]['service-name'], 'service-100GE3')
+        self.assertEqual(response['services'][0]['connection-type'], 'service')
+        self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
+        time.sleep(1)
+
+    def test_057_check_service_list(self):
+        response = test_utils.get_ordm_serv_list_request()
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        self.assertEqual(len(response['service-list']['services']), 3)
+
+    def test_058_check_interface_100GE_CLIENT_xpdra2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ETHERNET-100G')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {'name': 'XPDR2-CLIENT1-ETHERNET-100G',
+                        'administrative-state': 'inService',
+                        'supporting-circuit-pack-name': '1/2/1/1-PLUG-CLIENT',
+                        'type': 'org-openroadm-interfaces:ethernetCsmacd',
+                        'supporting-port': 'C1'
+                        }
+        input_dict_2 = {'speed': 100000}
+        self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+                             response['interface'][0])
+        self.assertDictEqual(
+            dict(input_dict_2, **response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']),
+            response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
+
+    def test_059_check_interface_ODU4_CLIENT_xpdra2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-A2', 'interface', 'XPDR2-CLIENT1-ODU4:service-100GE3')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4:service-100GE3',
+                        'administrative-state': 'inService',
+                        'supporting-circuit-pack-name': '1/2/1/1-PLUG-CLIENT',
+                        'supporting-interface-list': 'XPDR2-CLIENT1-ETHERNET-100GE3',
+                        'type': 'org-openroadm-interfaces:otnOdu',
+                        'supporting-port': 'C1'}
+        input_dict_2 = {
+            'odu-function': 'org-openroadm-otn-common-types:ODU-TTP-CTP',
+            'rate': 'org-openroadm-otn-common-types:ODU4',
+            'monitoring-mode': 'terminated'}
+
+        self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+                             response['interface'][0])
+        self.assertDictEqual(dict(input_dict_2,
+                                  **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+                             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+        self.assertDictEqual(
+            {'payload-type': '07', 'exp-payload-type': '07'},
+            response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+
+    def test_060_check_interface_ODU4_NETWORK_xpdra2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE3')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4:service-100GE3',
+                        'administrative-state': 'inService',
+                        'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+                        'supporting-interface-list': 'XPDR2-NETWORK1-ODUC4',
+                        'type': 'org-openroadm-interfaces:otnOdu',
+                        'supporting-port': 'L1'}
+        input_dict_2 = {
+            'odu-function': 'org-openroadm-otn-common-types:ODU-CTP',
+            'rate': 'org-openroadm-otn-common-types:ODU4',
+            'monitoring-mode': 'not-terminated'}
+        input_dict_3 = {'trib-port-number': 1}
+
+        self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+                             response['interface'][0])
+        self.assertDictEqual(dict(input_dict_2,
+                                  **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+                             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+        self.assertDictEqual(dict(input_dict_3,
+                                  **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+                                      'parent-odu-allocation']),
+                             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['parent-odu-allocation'])
+        self.assertIn('1.1', response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['parent-odu-allocation']
+                      ['opucn-trib-slots'])
+        self.assertIn('1.20', response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['parent-odu-allocation']
+                      ['opucn-trib-slots'])
+
+    def test_061_check_ODU4_connection_xpdra2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-A2', 'odu-connection', 'XPDR2-CLIENT1-ODU4-x-XPDR2-NETWORK1-ODU4')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {
+            'connection-name':
+            'XPDR2-CLIENT1-ODU4-x-XPDR2-NETWORK1-ODU4',
+            'direction': 'bidirectional'
+        }
+
+        self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
+                             response['odu-connection'][0])
+        self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4:service-100GE3'},
+                             response['odu-connection'][0]['destination'])
+        self.assertDictEqual({'src-if': 'XPDR2-CLIENT1-ODU4:service-100GE3'},
+                             response['odu-connection'][0]['source'])
+
+    def test_062_check_interface_100GE_CLIENT_xpdrc2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-C2', 'interface', 'XPDR2-CLIENT2-ETHERNET-100G')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {'name': 'XPDR2-CLIENT2-ETHERNET-100G',
+                        'administrative-state': 'inService',
+                        'supporting-circuit-pack-name': '1/2/1/2-PLUG-CLIENT',
+                        'type': 'org-openroadm-interfaces:ethernetCsmacd',
+                        'supporting-port': 'C1'
+                        }
+        input_dict_2 = {'speed': 100000}
+        self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+                             response['interface'][0])
+        self.assertDictEqual(
+            dict(input_dict_2, **response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']),
+            response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
+
+    def test_063_check_interface_ODU4_CLIENT_xpdrc2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-C2', 'interface', 'XPDR2-CLIENT2-ODU4:service-100GE3')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {'name': 'XPDR2-CLIENT1-ODU4:service-100GE3',
+                        'administrative-state': 'inService',
+                        'supporting-circuit-pack-name': '1/2/1/2-PLUG-CLIENT',
+                        'supporting-interface-list': 'XPDR2-CLIENT2-ETHERNET-100GE3',
+                        'type': 'org-openroadm-interfaces:otnOdu',
+                        'supporting-port': 'C1'}
+        input_dict_2 = {
+            'odu-function': 'org-openroadm-otn-common-types:ODU-TTP-CTP',
+            'rate': 'org-openroadm-otn-common-types:ODU4',
+            'monitoring-mode': 'terminated'}
+
+        self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+                             response['interface'][0])
+        self.assertDictEqual(dict(input_dict_2,
+                                  **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+                             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+        self.assertDictEqual(
+            {'payload-type': '07', 'exp-payload-type': '07'},
+            response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
+
+    def test_064_check_interface_ODU4_NETWORK_xpdrc2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-C2', 'interface', 'XPDR2-NETWORK1-ODU4:service-100GE3')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {'name': 'XPDR2-NETWORK1-ODU4:service-100GE3',
+                        'administrative-state': 'inService',
+                        'supporting-circuit-pack-name': '1/2/2-PLUG-NET',
+                        'supporting-interface-list': 'XPDR2-NETWORK1-ODUC4',
+                        'type': 'org-openroadm-interfaces:otnOdu',
+                        'supporting-port': 'C1'}
+        input_dict_2 = {
+            'odu-function': 'org-openroadm-otn-common-types:ODU-CTP',
+            'rate': 'org-openroadm-otn-common-types:ODU4',
+            'monitoring-mode': 'not-terminated'}
+
+        input_dict_3 = {'trib-port-number': 1}
+
+        self.assertDictEqual(dict(input_dict_1, **response['interface'][0]),
+                             response['interface'][0])
+        self.assertDictEqual(dict(input_dict_2,
+                                  **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']),
+                             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'])
+        self.assertDictEqual(dict(input_dict_3,
+                                  **response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+                                      'parent-odu-allocation']),
+                             response['interface'][0]['org-openroadm-otn-odu-interfaces:odu'][
+            'parent-odu-allocation'])
+        self.assertIn('1.1',
+                      response['interface'][0][
+                          'org-openroadm-otn-odu-interfaces:odu'][
+                          'parent-odu-allocation']['opucn-trib-slots'])
+        self.assertIn('1.20',
+                      response['interface'][0][
+                          'org-openroadm-otn-odu-interfaces:odu'][
+                          'parent-odu-allocation']['opucn-trib-slots'])
+
+    def test_065_check_ODU4_connection_xpdrc2(self):
+        response = test_utils.check_node_attribute_request(
+            'XPDR-C2', 'odu-connection', 'XPDR2-CLIENT2-ODU4-x-XPDR2-NETWORK1-ODU4')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        input_dict_1 = {
+            'connection-name':
+            'XPDR2-CLIENT2-ODU4-x-XPDR2-NETWORK1-ODU4',
+            'direction': 'bidirectional'
+        }
+
+        self.assertDictEqual(dict(input_dict_1, **response['odu-connection'][0]),
+                             response['odu-connection'][0])
+        self.assertDictEqual({'dst-if': 'XPDR2-NETWORK1-ODU4:service-100GE3'},
+                             response['odu-connection'][0]['destination'])
+        self.assertDictEqual({'src-if': 'XPDR2-CLIENT2-ODU4:service-100GE3'},
+                             response['odu-connection'][0]['source'])
+
+    def test_066_check_otn_topo_links(self):
+        response = test_utils.get_ietf_network_request('otn-topology', 'config')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        self.assertEqual(len(response['network'][0]['ietf-network-topology:link']), 4)
+        for link in response['network'][0]['ietf-network-topology:link']:
+            linkId = link['link-id']
+            if (linkId in ('ODUC4-XPDR-A2-XPDR2-XPDR2-NETWORK1toXPDR-C2-XPDR2-XPDR2-NETWORK1',
+                           'ODUC4-XPDR-C2-XPDR2-XPDR2-NETWORK1toXPDR-A2-XPDR2-XPDR2-NETWORK1')):
+                self.assertEqual(
+                    link['org-openroadm-otn-network-topology:available-bandwidth'], 300000)
+                self.assertEqual(
+                    link['org-openroadm-otn-network-topology:used-bandwidth'], 100000)
+
+    def test_067_check_otn_topo_tp(self):
+        response = test_utils.get_ietf_network_request('otn-topology', 'config')
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        for node in response['network'][0]['node']:
+            if node['node-id'] in ('XPDR-A2-XPDR2', 'XPDR-C2-XPDR2'):
+                tpList = node['ietf-network-topology:termination-point']
+                for tp in tpList:
+                    if tp['tp-id'] == 'XPDR2-NETWORK1':
+                        xpdrTpPortConAt = tp['org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes']
+                        self.assertEqual(len(xpdrTpPortConAt['ts-pool']), 60)
+                        tsPoolList = list(range(1, 20))
+                        self.assertNotIn(tsPoolList, xpdrTpPortConAt['ts-pool'])
+                        self.assertEqual(len(xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool']), 3)
+                        self.assertNotIn(1, xpdrTpPortConAt['odtu-tpn-pool'][0]['tpn-pool'])
+
+    def test_068_delete_100GE_service_3(self):
+        self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service-100GE3"
+        response = test_utils.transportpce_api_rpc_request(
+            'org-openroadm-service', 'service-delete',
+            self.del_serv_input_data)
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        self.assertIn('Renderer service delete in progress',
+                      response['output']['configuration-response-common']['response-message'])
+        time.sleep(self.WAITING)
+
+    def test_069_delete_ODUC4_service(self):
         self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service1-ODUC4"
         response = test_utils.transportpce_api_rpc_request(
             'org-openroadm-service', 'service-delete',
@@ -950,20 +1204,20 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_56_check_service_list(self):
+    def test_070_check_service_list(self):
         response = test_utils.get_ordm_serv_list_request()
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response['service-list']['services']), 1)
 
-    def test_57_check_no_interface_ODU4_xpdra2(self):
+    def test_071_check_no_interface_ODU4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-ODUC4')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_58_check_otn_topo_links(self):
-        self.test_22_check_otn_topo_OTUC4_links()
+    def test_072_check_otn_topo_links(self):
+        self.test_022_check_otn_topo_OTUC4_links()
 
-    def test_59_check_otn_topo_tp(self):
+    def test_073_check_otn_topo_tp(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         for node in response['network'][0]['node']:
@@ -974,7 +1228,7 @@ class TransportPCEtesting(unittest.TestCase):
                         self.assertNotIn('org-openroadm-otn-network-topology:xpdr-tp-port-connection-attributes',
                                          dict.keys(tp))
 
-    def test_60_delete_OTUC4_service(self):
+    def test_074_delete_OTUC4_service(self):
         self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service1-OTUC4"
         response = test_utils.transportpce_api_rpc_request(
             'org-openroadm-service', 'service-delete',
@@ -984,7 +1238,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_61_get_no_service(self):
+    def test_075_get_no_service(self):
         response = test_utils.get_ordm_serv_list_request()
         self.assertEqual(response['status_code'], requests.codes.conflict)
         self.assertIn(response['service-list'], (
@@ -1002,27 +1256,27 @@ class TransportPCEtesting(unittest.TestCase):
                     "model content does not exist"
             }))
 
-    def test_62_check_no_interface_OTUC4_xpdra2(self):
+    def test_076_check_no_interface_OTUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-OTUC4')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_63_check_no_interface_OTSI_xpdra2(self):
+    def test_077_check_no_interface_OTSI_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-755:768')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_64_check_no_interface_OTSIG_xpdra2(self):
+    def test_078_check_no_interface_OTSIG_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR2-NETWORK1-OTSIGROUP-400G')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_65_getLinks_OtnTopology(self):
+    def test_079_getLinks_OtnTopology(self):
         response = test_utils.get_ietf_network_request('otn-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertNotIn('ietf-network-topology:link', response['network'][0])
 
-    def test_66_check_openroadm_topo_xpdra2(self):
+    def test_080_check_openroadm_topo_xpdra2(self):
         response = test_utils.get_ietf_network_node_request('openroadm-topology', 'XPDR-A2-XPDR2', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         tp = response['node']['ietf-network-topology:termination-point'][0]
@@ -1030,13 +1284,13 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertNotIn('wavelength', dict.keys(
             tp['org-openroadm-network-topology:xpdr-network-attributes']))
 
-    def test_67_check_openroadm_topology(self):
+    def test_081_check_openroadm_topology(self):
         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         links = response['network'][0]['ietf-network-topology:link']
         self.assertEqual(22, len(links), 'Topology should contain 22 links')
 
-    def test_68_connect_xprda2_1_N1_to_roadma_PP2(self):
+    def test_082_connect_xpdra2_1_N1_to_roadma_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '1', 'network-num': '1',
@@ -1044,7 +1298,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
 
-    def test_69_connect_roadma_PP2_to_xpdra2_1_N1(self):
+    def test_083_connect_roadma_PP2_to_xpdra2_1_N1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-rdm-xpdr-links',
             {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '1', 'network-num': '1',
@@ -1052,7 +1306,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
 
-    def test_70_connect_xprdc2_1_N1_to_roadmc_PP2(self):
+    def test_084_connect_xpdrc2_1_N1_to_roadmc_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '1', 'network-num': '1',
@@ -1060,7 +1314,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Xponder Roadm Link created successfully', response["output"]["result"])
 
-    def test_71_connect_roadmc_PP2_to_xpdrc2_1_N1(self):
+    def test_085_connect_roadmc_PP2_to_xpdrc2_1_N1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-rdm-xpdr-links',
             {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '1', 'network-num': '1',
@@ -1069,7 +1323,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
 
     # test service-create for 400GE service from xpdra2 to xpdrc2
-    def test_72_create_400GE_service(self):
+    def test_086_create_400GE_service(self):
         self.cr_serv_input_data["service-name"] = "service-400GE"
         self.cr_serv_input_data["service-a-end"]["service-rate"] = "400"
         self.cr_serv_input_data["service-a-end"]["tx-direction"][0]["port"]["port-name"] = "XPDR1-CLIENT1"
@@ -1092,7 +1346,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_73_get_400GE_service(self):
+    def test_087_get_400GE_service(self):
         response = test_utils.get_ordm_serv_list_attr_request("services", "service-400GE")
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(response['services'][0]['administrative-state'], 'inService')
@@ -1101,7 +1355,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['services'][0]['lifecycle-state'], 'planned')
         time.sleep(1)
 
-    def test_74_check_xc1_roadma(self):
+    def test_088_check_xc1_roadma(self):
         response = test_utils.check_node_attribute_request(
             "ROADM-A1", "roadm-connections", "SRG1-PP1-TXRX-DEG2-TTP-TXRX-755:768")
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -1115,7 +1369,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertDictEqual({'dst-if': 'DEG2-TTP-TXRX-nmc-755:768'}, response['roadm-connections'][0]['destination'])
         time.sleep(1)
 
-    def test_75_check_topo_xpdra2(self):
+    def test_089_check_topo_xpdra2(self):
         response = test_utils.get_ietf_network_node_request('openroadm-topology', 'XPDR-A2-XPDR1', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         liste_tp = response['node']['ietf-network-topology:termination-point']
@@ -1131,7 +1385,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertNotIn('org-openroadm-network-topology:xpdr-client-attributes', dict.keys(ele))
         time.sleep(1)
 
-    def test_76_check_topo_roadma_SRG1(self):
+    def test_090_check_topo_roadma_SRG1(self):
         response = test_utils.get_ietf_network_node_request('openroadm-topology', 'ROADM-A1-SRG1', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         freq_map = base64.b64decode(
@@ -1149,7 +1403,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertNotIn('avail-freq-maps', dict.keys(ele))
         time.sleep(1)
 
-    def test_77_check_topo_roadma_DEG1(self):
+    def test_091_check_topo_roadma_DEG1(self):
         response = test_utils.get_ietf_network_node_request('openroadm-topology', 'ROADM-A1-DEG2', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         freq_map = base64.b64decode(
@@ -1170,7 +1424,7 @@ class TransportPCEtesting(unittest.TestCase):
                 self.assertEqual(freq_map_array[95], 0, "Index 1 should not be available")
         time.sleep(1)
 
-    def test_78_check_interface_400GE_CLIENT_xpdra2(self):
+    def test_092_check_interface_400GE_CLIENT_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-CLIENT1-ETHERNET')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -1187,7 +1441,7 @@ class TransportPCEtesting(unittest.TestCase):
             dict(input_dict_2, **response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet']),
             response['interface'][0]['org-openroadm-ethernet-interfaces:ethernet'])
 
-    def test_79_check_interface_OTSI_xpdra2(self):
+    def test_093_check_interface_OTSI_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-755:768')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -1213,7 +1467,7 @@ class TransportPCEtesting(unittest.TestCase):
             {"foic-type": "org-openroadm-common-optical-channel-types:foic4.8", "iid": [1, 2, 3, 4]},
             response['interface'][0]['org-openroadm-optical-tributary-signal-interfaces:otsi']['flexo'])
 
-    def test_80_check_interface_OTSI_GROUP_xpdra2(self):
+    def test_094_check_interface_OTSI_GROUP_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-OTSIGROUP-400G')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -1232,7 +1486,7 @@ class TransportPCEtesting(unittest.TestCase):
                                   **response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group']),
                              response['interface'][0]['org-openroadm-otsi-group-interfaces:otsi-group'])
 
-    def test_81_check_interface_OTUC4_xpdra2(self):
+    def test_095_check_interface_OTUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-OTUC4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -1258,7 +1512,7 @@ class TransportPCEtesting(unittest.TestCase):
                                   **response['interface'][0]['org-openroadm-otn-otu-interfaces:otu']),
                              response['interface'][0]['org-openroadm-otn-otu-interfaces:otu'])
 
-    def test_82_check_interface_ODUC4_xpdra2(self):
+    def test_096_check_interface_ODUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-ODUC4')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -1289,7 +1543,7 @@ class TransportPCEtesting(unittest.TestCase):
                              response['interface'][0]['org-openroadm-otn-odu-interfaces:odu']['opu'])
         self.assertEqual('XPDR1-NETWORK1-OTUC4', response['interface'][0]['supporting-interface-list'][0])
 
-    def test_82a_check_interface_ODUFLEX_xpdra2(self):
+    def test_097_check_interface_ODUFLEX_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-ODUFLEX')
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -1342,7 +1596,7 @@ class TransportPCEtesting(unittest.TestCase):
                       ['opucn-trib-slots'])
         self.assertEqual('XPDR1-NETWORK1-ODUC4', response['interface'][0]['supporting-interface-list'][0])
 
-    def test_83_delete_400GE_service(self):
+    def test_098_delete_400GE_service(self):
         self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service-400GE"
         response = test_utils.transportpce_api_rpc_request(
             'org-openroadm-service', 'service-delete',
@@ -1352,7 +1606,7 @@ class TransportPCEtesting(unittest.TestCase):
                       response['output']['configuration-response-common']['response-message'])
         time.sleep(self.WAITING)
 
-    def test_84_get_no_service(self):
+    def test_099_get_no_service(self):
         response = test_utils.get_ordm_serv_list_request()
         self.assertEqual(response['status_code'], requests.codes.conflict)
         self.assertIn(response['service-list'], (
@@ -1371,32 +1625,32 @@ class TransportPCEtesting(unittest.TestCase):
             }))
         time.sleep(1)
 
-    def test_85_check_no_interface_ODUC4_xpdra2(self):
+    def test_100_check_no_interface_ODUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-ODUC4')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_86_check_no_interface_OTUC4_xpdra2(self):
+    def test_101_check_no_interface_OTUC4_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-OTUC4')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_87_check_no_interface_OTSI_GROUP_xpdra2(self):
+    def test_102_check_no_interface_OTSI_GROUP_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-OTSIGROUP-400G')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_88_check_no_interface_OTSI_xpdra2(self):
+    def test_103_check_no_interface_OTSI_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-NETWORK1-755:768')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_89_check_no_interface_400GE_CLIENT_xpdra2(self):
+    def test_104_check_no_interface_400GE_CLIENT_xpdra2(self):
         response = test_utils.check_node_attribute_request(
             'XPDR-A2', 'interface', 'XPDR1-CLIENT1-ETHERNET')
         self.assertEqual(response['status_code'], requests.codes.conflict)
 
-    def test_90_disconnect_xponders_from_roadm(self):
+    def test_105_disconnect_xponders_from_roadm(self):
         response = test_utils.get_ietf_network_request('openroadm-topology', 'config')
         self.assertEqual(response['status_code'], requests.codes.ok)
         links = response['network'][0]['ietf-network-topology:link']
@@ -1406,19 +1660,19 @@ class TransportPCEtesting(unittest.TestCase):
                     'openroadm-topology', link['link-id'], 'config')
                 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
-    def test_91_disconnect_xpdra2(self):
+    def test_106_disconnect_xpdra2(self):
         response = test_utils.unmount_device("XPDR-A2")
         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
-    def test_92_disconnect_xpdrc2(self):
+    def test_107_disconnect_xpdrc2(self):
         response = test_utils.unmount_device("XPDR-C2")
         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
-    def test_93_disconnect_roadmA(self):
+    def test_108_disconnect_roadmA(self):
         response = test_utils.unmount_device("ROADM-A1")
         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
-    def test_94_disconnect_roadmC(self):
+    def test_109_disconnect_roadmC(self):
         response = test_utils.unmount_device("ROADM-C1")
         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
index b3ee1a3bb49dc201849014a7067e386d7cb543b0..e51f290d79d1cf6ea63c46649ba7480c07134255 100644 (file)
@@ -14,7 +14,6 @@
 # pylint: disable=too-many-public-methods
 # pylint: disable=too-many-lines
 
-import json
 import unittest
 import time
 import requests
@@ -682,6 +681,64 @@ class TransportPCEtesting(unittest.TestCase):
         }
     ]
 
+    pm_handling_degrade_body = {
+        "rpc-action": "set",
+        "pm-to-be-set-or-created": {
+            "current-pm-entry": [
+                {
+                    "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
+                                            ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
+                    "pm-resource-type": "interface",
+                    "pm-resource-type-extension": "",
+                    "current-pm": [
+                        {
+                            "type": "opticalPowerInput",
+                            "extension": "",
+                            "location": "nearEnd",
+                            "direction": "rx",
+                            "measurement": [
+                                {
+                                    "granularity": "15min",
+                                    "pmParameterValue": -30,
+                                    "pmParameterUnit": "dBm",
+                                    "validity": "complete"
+                                },
+                                {
+                                    "granularity": "24Hour",
+                                    "pmParameterValue": -21.3,
+                                    "pmParameterUnit": "dBm",
+                                    "validity": "complete"
+                                }
+                            ]
+                        }
+                    ]
+                }
+            ]
+        }
+    }
+
+    pm_handling_recover_body = {
+        "rpc-action": "clear",
+        "pm-to-get-clear-or-delete": {
+            "current-pm-entry": [
+                {
+                    "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
+                                            ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
+                    "pm-resource-type": "interface",
+                    "pm-resource-type-extension": "",
+                    "current-pm": [
+                        {
+                            "type": "opticalPowerInput",
+                            "extension": "",
+                            "location": "nearEnd",
+                            "direction": "rx"
+                        }
+                    ]
+                }
+            ]
+        }
+    }
+
     @classmethod
     def setUpClass(cls):
         cls.processes = test_utils.start_tpce()
@@ -726,7 +783,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_06_connect_xprda2_1_N1_to_roadma_PP1(self):
+    def test_06_connect_xpdra2_1_N1_to_roadma_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '1', 'network-num': '1',
@@ -742,7 +799,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
 
-    def test_08_connect_xprdc2_1_N1_to_roadmc_PP1(self):
+    def test_08_connect_xpdrc2_1_N1_to_roadmc_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '1', 'network-num': '1',
@@ -811,50 +868,8 @@ class TransportPCEtesting(unittest.TestCase):
 
     # Degrade ROADM-A1-ROADM-C1 link
     def test_14_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
-        url = "{}/operations/pm-handling:pm-interact"
-        body = {
-            "input": {
-                "rpc-action": "set",
-                "pm-to-be-set-or-created": {
-                    "current-pm-entry": [
-                        {
-                            "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
-                                                    ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
-                            "pm-resource-type": "interface",
-                            "pm-resource-type-extension": "",
-                            "current-pm": [
-                                {
-                                    "type": "opticalPowerInput",
-                                    "extension": "",
-                                    "location": "nearEnd",
-                                    "direction": "rx",
-                                    "measurement": [
-                                        {
-                                            "granularity": "15min",
-                                            "pmParameterValue": -30,
-                                            "pmParameterUnit": "dBm",
-                                            "validity": "complete"
-                                        },
-                                        {
-                                            "granularity": "24Hour",
-                                            "pmParameterValue": -21.3,
-                                            "pmParameterUnit": "dBm",
-                                            "validity": "complete"
-                                        }
-                                    ]
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        }
-        response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully set !")
+        self.assertTrue(test_utils.sims_update_pm_interact(('roadma', self.NODE_VERSION_221),
+                                                           self.pm_handling_degrade_body))
         time.sleep(2)
 
     def test_15_get_eth_service1(self):
@@ -891,42 +906,14 @@ class TransportPCEtesting(unittest.TestCase):
 
     # Restore ROADM-A1-ROADM-C1 link
     def test_17_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
-        url = "{}/operations/pm-handling:pm-interact"
-        body = {
-            "input": {
-                "rpc-action": "clear",
-                "pm-to-get-clear-or-delete": {
-                    "current-pm-entry": [
-                        {
-                            "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
-                                                    ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
-                            "pm-resource-type": "interface",
-                            "pm-resource-type-extension": "",
-                            "current-pm": [
-                                {
-                                    "type": "opticalPowerInput",
-                                    "extension": "",
-                                    "location": "nearEnd",
-                                    "direction": "rx"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        }
-        response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully released !")
+        self.assertTrue(test_utils.sims_update_pm_interact(('roadma', self.NODE_VERSION_221),
+                                                           self.pm_handling_recover_body))
         time.sleep(2)
 
     def test_18_get_eth_service1(self):
         self.test_13_get_eth_service1()
 
-    def test_19_connect_xprda2_3_N1_to_roadma_PP2(self):
+    def test_19_connect_xpdra2_3_N1_to_roadma_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A2', 'xpdr-num': '3', 'network-num': '1',
@@ -944,7 +931,7 @@ class TransportPCEtesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_21_connect_xprdc2_3_N1_to_roadmc_PP2(self):
+    def test_21_connect_xpdrc2_3_N1_to_roadmc_PP2(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C2', 'xpdr-num': '3', 'network-num': '1',
@@ -1137,50 +1124,7 @@ class TransportPCEtesting(unittest.TestCase):
 
     # Degrade ROADM-A1-ROADM-C1 link
     def test_36_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
-        url = "{}/operations/pm-handling:pm-interact"
-        body = {
-            "input": {
-                "rpc-action": "set",
-                "pm-to-be-set-or-created": {
-                    "current-pm-entry": [
-                        {
-                            "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
-                                                    ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
-                            "pm-resource-type": "interface",
-                            "pm-resource-type-extension": "",
-                            "current-pm": [
-                                {
-                                    "type": "opticalPowerInput",
-                                    "extension": "",
-                                    "location": "nearEnd",
-                                    "direction": "rx",
-                                    "measurement": [
-                                        {
-                                            "granularity": "15min",
-                                            "pmParameterValue": -30,
-                                            "pmParameterUnit": "dBm",
-                                            "validity": "complete"
-                                        },
-                                        {
-                                            "granularity": "24Hour",
-                                            "pmParameterValue": -21.3,
-                                            "pmParameterUnit": "dBm",
-                                            "validity": "complete"
-                                        }
-                                    ]
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        }
-        response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully set !")
+        self.test_14_set_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput()
         time.sleep(self.WAITING * 2)
 
     def test_37_get_eth_service1(self):
@@ -1244,37 +1188,7 @@ class TransportPCEtesting(unittest.TestCase):
 
     # Restore ROADM-A1-ROADM-C1 link
     def test_41_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput(self):
-        url = "{}/operations/pm-handling:pm-interact"
-        body = {
-            "input": {
-                "rpc-action": "clear",
-                "pm-to-get-clear-or-delete": {
-                    "current-pm-entry": [
-                        {
-                            "pm-resource-instance": "/org-openroadm-device:org-openroadm-device/org-openroadm-device"
-                                                    ":interface[org-openroadm-device:name='OTS-DEG2-TTP-TXRX']",
-                            "pm-resource-type": "interface",
-                            "pm-resource-type-extension": "",
-                            "current-pm": [
-                                {
-                                    "type": "opticalPowerInput",
-                                    "extension": "",
-                                    "location": "nearEnd",
-                                    "direction": "rx"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        }
-        response = requests.request("POST", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        self.assertEqual(response.json()['output']['status-message'], "The PMs has been successfully released !")
-        time.sleep(2)
+        self.test_17_clear_pm_ROADMA_OTS_DEG2_TTP_TXRX_OpticalPowerInput()
 
     def test_42_get_eth_service1(self):
         self.test_13_get_eth_service1()
index 32886a613376970a88e7b4217570e4db301c70d0..a1b1b94839fc55e1480a02202ac45ff78b1d2438 100644 (file)
@@ -55,6 +55,7 @@ class TransportPCEtesting(unittest.TestCase):
     def setUpClass(cls):
         # pylint: disable=bare-except
         sample_files_parsed = False
+        time.sleep(10)
         try:
             TOPO_BI_DIR_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
                                             "..", "..", "sample_configs", "honeynode-topo.json")
diff --git a/tests/transportpce_tests/pce/test04_pce_bug_fix.py b/tests/transportpce_tests/pce/test04_pce_bug_fix.py
new file mode 100644 (file)
index 0000000..a8f1764
--- /dev/null
@@ -0,0 +1,136 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2023 Orange, Inc. and others.  All rights reserved.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# pylint: disable=no-member
+# pylint: disable=too-many-public-methods
+
+import unittest
+import os
+# pylint: disable=wrong-import-order
+import sys
+import time
+import requests
+sys.path.append('transportpce_tests/common/')
+# pylint: disable=wrong-import-position
+# pylint: disable=import-error
+import test_utils  # nopep8
+
+
+class TransportPCEtesting(unittest.TestCase):
+    path_computation_input_data = {
+        "service-name": "service-AB",
+        "resource-reserve": "true",
+        "service-handler-header": {
+            "request-id": "request1"
+        },
+        "service-a-end": {
+            "service-rate": "100",
+            "clli": "NodeA",
+            "service-format": "OC",
+            "node-id": "ROADM-A1"
+        },
+        "service-z-end": {
+            "service-rate": "100",
+            "clli": "NodeB",
+            "service-format": "OC",
+            "node-id": "ROADM-B1"
+        },
+        "pce-routing-metric": "hop-count"
+    }
+
+    openraodm_topo_with_service_BC = None
+    port_mapping_data = None
+    processes = None
+
+    @classmethod
+    def setUpClass(cls):
+        # pylint: disable=bare-except
+        sample_files_parsed = False
+        time.sleep(10)
+        try:
+            TOPO_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                     "..", "..", "sample_configs", "honeynode-topo-3-RDM.json")
+            with open(TOPO_FILE, 'r', encoding='utf-8') as topo:
+                cls.openraodm_topo_with_service_BC = topo.read()
+
+            PORT_MAPPING_FILE = os.path.join(os.path.dirname(os.path.realpath(__file__)),
+                                             "..", "..", "sample_configs", "portmapping-3-RDM-221.json")
+            with open(PORT_MAPPING_FILE, 'r', encoding='utf-8') as port_mapping:
+                cls.port_mapping_data = port_mapping.read()
+            sample_files_parsed = True
+        except PermissionError as err:
+            print("Permission Error when trying to read sample files\n", err)
+            sys.exit(2)
+        except FileNotFoundError as err:
+            print("File Not found Error when trying to read sample files\n", err)
+            sys.exit(2)
+        except:
+            print("Unexpected error when trying to read sample files\n", sys.exc_info()[0])
+            sys.exit(2)
+        finally:
+            if sample_files_parsed:
+                print("sample files content loaded")
+
+        cls.processes = test_utils.start_tpce()
+        time.sleep(5)
+
+    @classmethod
+    def tearDownClass(cls):
+        # clean datastores
+        test_utils.del_portmapping()
+        test_utils.del_ietf_network('openroadm-topology')
+        # pylint: disable=not-an-iterable
+        for process in cls.processes:
+            test_utils.shutdown_process(process)
+        print("all processes killed")
+
+    def setUp(self):
+        time.sleep(1)
+
+    def test_01_load_port_mapping(self):
+        response = test_utils.post_portmapping(self.port_mapping_data)
+        self.assertIn(response['status_code'], (requests.codes.created, requests.codes.no_content))
+        time.sleep(1)
+
+    def test_02_load_openroadm_topology(self):
+        response = test_utils.put_ietf_network('openroadm-topology', self.openraodm_topo_with_service_BC)
+        self.assertIn(response['status_code'], (requests.codes.ok, requests.codes.no_content))
+        time.sleep(1)
+
+    # Path Computation success
+    def test_03_path_computation_AB(self):
+        response = test_utils.transportpce_api_rpc_request('transportpce-pce',
+                                                           'path-computation-request',
+                                                           self.path_computation_input_data)
+        self.assertEqual(response['status_code'], requests.codes.ok)
+        self.assertEqual('Path is calculated by PCE',
+                         response['output']['configuration-response-common']['response-message'])
+        self.assertEqual(
+            2,
+            response['output']['response-parameters']['path-description']['aToZ-direction']['aToZ-wavelength-number'])
+        self.assertEqual(196.025,
+                         float(response['output']['response-parameters']['path-description']['aToZ-direction']
+                               ['aToZ-min-frequency']))
+        self.assertEqual(196.075,
+                         float(response['output']['response-parameters']['path-description']['aToZ-direction']
+                               ['aToZ-max-frequency']))
+        self.assertEqual(
+            2,
+            response['output']['response-parameters']['path-description']['zToA-direction']['zToA-wavelength-number'])
+        self.assertEqual(196.025,
+                         float(response['output']['response-parameters']['path-description']['zToA-direction']
+                               ['zToA-min-frequency']))
+        self.assertEqual(196.075,
+                         float(response['output']['response-parameters']['path-description']['zToA-direction']
+                               ['zToA-max-frequency']))
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
index 3e3d99d002471dc2fb80e92aaa0a9d868eb01cbd..2a2cec4e84db01434b43bc8f6a5fbfcf64579857 100644 (file)
@@ -138,7 +138,7 @@ class TransportTapitesting(unittest.TestCase):
             "tail-retention": "no"}
     }
 
-    tapi_topo = {"topology-id-or-name": "TBD"}
+    tapi_topo = {"topology-id": "TBD"}
 
     @classmethod
     def setUpClass(cls):
@@ -184,7 +184,7 @@ class TransportTapitesting(unittest.TestCase):
         print("execution of {}".format(self.id().split(".")[-1]))
 
     def test_01_get_tapi_topology_T100G(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T100GE
+        self.tapi_topo["topology-id"] = test_utils.T100GE_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -200,7 +200,7 @@ class TransportTapitesting(unittest.TestCase):
                          'node should contain 1 node rule group')
 
     def test_02_get_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -212,14 +212,14 @@ class TransportTapitesting(unittest.TestCase):
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
     def test_04_check_tapi_topos(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T100GE
+        self.tapi_topo["topology-id"] = test_utils.T100GE_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(len(response["output"]["topology"]["node"]), 1, 'Topology should contain 1 node')
         self.assertNotIn("link", response["output"]["topology"], 'Topology should contain no link')
 
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -235,7 +235,7 @@ class TransportTapitesting(unittest.TestCase):
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
     def test_07_check_tapi_topos(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -252,21 +252,27 @@ class TransportTapitesting(unittest.TestCase):
 
     def test_10_check_tapi_topos(self):
         self.test_01_get_tapi_topology_T100G()
-
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(1, len(response["output"]["topology"]["node"]), 'Topology should contain 1 node')
         self.assertNotIn("link", response["output"]["topology"], 'Topology should contain no link')
-        self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"],
+#        self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"],
+#                        'node name should be: ROADM-infra')
+        nodes = response["output"]["topology"]["node"]
+        self.assertEqual("ROADM-infra",
+                         response["output"]["topology"]["node"][0]["name"][count_position_name_from_value_name(
+                             response["output"]["topology"]["node"][0]["name"], "otsi node name")]["value"],
                          'node name should be: ROADM-infra')
+        self.assertEqual(1, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"),
+                         'Topology should contain 1 otsi nodes')
         self.assertIn("PHOTONIC_MEDIA", response["output"]["topology"]["node"][0]["layer-protocol-name"],
                       'Node layer protocol should contain PHOTONIC_MEDIA')
-        self.assertEqual(1, len(response["output"]["topology"]["node"][0]["node-rule-group"]),
-                         'node should contain 1 node rule group')
+        self.assertNotIn("node-rule-group", response["output"]["topology"]["node"][0],
+                         'Topology should contain no node-rule-group')
 
-    def test_11_connect_xprda_n1_to_roadma_pp1(self):
+    def test_11_connect_xpdra_n1_to_roadma_pp1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
@@ -287,7 +293,7 @@ class TransportTapitesting(unittest.TestCase):
         time.sleep(2)
 
     def test_13_check_tapi_topology_T100G(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T100GE
+        self.tapi_topo["topology-id"] = test_utils.T100GE_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -298,28 +304,26 @@ class TransportTapitesting(unittest.TestCase):
                          'name of owned-node-edge-points should be XPDR-A1-XPDR1+DSR+XPDR1-CLIENT1')
 
     def test_14_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         nodes = response["output"]["topology"]["node"]
         links = response["output"]["topology"]["link"]
-        self.assertEqual(3, len(nodes), 'Topology should contain 3 nodes')
-        self.assertEqual(2, len(links), 'Topology should contain 2 links')
+        self.assertEqual(2, len(nodes), 'Topology should contain 2 nodes')
+        self.assertEqual(1, len(links), 'Topology should contain 1 link')
         self.assertEqual(2, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"),
                          'Topology should contain 2 otsi nodes')
         self.assertEqual(1, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"),
                          'Topology should contain 1 dsr node')
-        self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "transitional link name"),
-                         'Topology should contain 1 transitional link')
-        self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "OMS link name"),
-                         'Topology should contain 1 oms link')
+        self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "OTS link name"),
+                         'Topology should contain 1 ots link')
 
     def test_15_connect_xpdrc(self):
         response = test_utils.mount_device("XPDR-C1", ('xpdrc', self.NODE_VERSION))
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_16_connect_xprdc_n1_to_roadmc_pp1(self):
+    def test_16_connect_xpdrc_n1_to_roadmc_pp1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -340,7 +344,7 @@ class TransportTapitesting(unittest.TestCase):
         time.sleep(2)
 
     def test_18_check_tapi_topology_T100G(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T100GE
+        self.tapi_topo["topology-id"] = test_utils.T100GE_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -354,22 +358,20 @@ class TransportTapitesting(unittest.TestCase):
                          'name of owned-node-edge-points should be XPDR-A1-XPDR1+DSR+XPDR1-CLIENT1')
 
     def test_19_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         nodes = response["output"]["topology"]["node"]
         links = response["output"]["topology"]["link"]
-        self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes')
-        self.assertEqual(4, len(links), 'Topology should contain 4 links')
+        self.assertEqual(3, len(nodes), 'Topology should contain 3 nodes')
+        self.assertEqual(2, len(links), 'Topology should contain 2 links')
         self.assertEqual(3, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"),
                          'Topology should contain 3 otsi nodes')
         self.assertEqual(2, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"),
                          'Topology should contain 2 dsr nodes')
-        self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "transitional link name"),
-                         'Topology should contain 2 transitional links')
-        self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "OMS link name"),
-                         'Topology should contain 2 oms links')
+        self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "OTS link name"),
+                         'Topology should contain 2 ots links')
 
     def test_20_connect_spdr_sa1(self):
         response = test_utils.mount_device("SPDR-SA1", ('spdra', self.NODE_VERSION))
@@ -431,22 +433,20 @@ class TransportTapitesting(unittest.TestCase):
         self.test_18_check_tapi_topology_T100G()
 
     def test_29_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         nodes = response["output"]["topology"]["node"]
         links = response["output"]["topology"]["link"]
-        self.assertEqual(9, len(nodes), 'Topology should contain 9 nodes')
-        self.assertEqual(8, len(links), 'Topology should contain 8 links')
+        self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes')
+        self.assertEqual(4, len(links), 'Topology should contain 4 links')
         self.assertEqual(5, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"),
                          'Topology should contain 5 otsi nodes')
         self.assertEqual(4, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"),
                          'Topology should contain 4 dsr nodes')
-        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "transitional link name"),
-                         'Topology should contain 4 transitional links')
-        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OMS link name"),
-                         'Topology should contain 4 oms links')
+        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OTS link name"),
+                         'Topology should contain 4 ots links')
 
     def test_30_add_oms_attributes(self):
         # Config ROADMA-ROADMC oms-attributes
@@ -488,27 +488,25 @@ class TransportTapitesting(unittest.TestCase):
         time.sleep(self.WAITING)
 
     def test_32_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         nodes = response["output"]["topology"]["node"]
         links = response["output"]["topology"]["link"]
-        self.assertEqual(9, len(nodes), 'Topology should contain 9 nodes')
-        self.assertEqual(9, len(links), 'Topology should contain 9 links')
-        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "transitional link name"),
-                         'Topology should contain 4 transitional links')
-        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OMS link name"),
-                         'Topology should contain 4 oms links')
+        self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes')
+        self.assertEqual(5, len(links), 'Topology should contain 5 links')
+        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OTS link name"),
+                         'Topology should contain 4 ots links')
         self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "otn link name"),
                          'Topology should contain 1 otn link')
         for link in links:
             if link["name"][0]["value"] == "OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1":
                 self.assertEqual(100000, int(link["available-capacity"]["total-size"]["value"]),
                                  'OTU4 link should have an available capacity of 100 000 Mbps')
-            elif link["name"][0]["value-name"] == "transitional link name":
-                self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]),
-                                 'link should have an available capacity of 100 Gbps')
+#            elif link["name"][0]["value-name"] == "transitional link name":
+#                self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]),
+#                                 'link should have an available capacity of 100 Gbps')
             self.assertEqual(2, len(link["node-edge-point"]), 'link should have 2 neps')
 
     def test_33_create_ODU4_service(self):
@@ -529,18 +527,16 @@ class TransportTapitesting(unittest.TestCase):
         time.sleep(self.WAITING)
 
     def test_34_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         nodes = response["output"]["topology"]["node"]
         links = response["output"]["topology"]["link"]
-        self.assertEqual(9, len(nodes), 'Topology should contain 9 nodes')
-        self.assertEqual(10, len(links), 'Topology should contain 10 links')
-        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "transitional link name"),
-                         'Topology should contain 4 transitional links')
-        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OMS link name"),
-                         'Topology should contain 4 oms links')
+        self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes')
+        self.assertEqual(6, len(links), 'Topology should contain 6 links')
+        self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OTS link name"),
+                         'Topology should contain 4 ots links')
         self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "otn link name"),
                          'Topology should contain 2 otn links')
         for link in links:
@@ -550,9 +546,9 @@ class TransportTapitesting(unittest.TestCase):
             elif link["name"][0]["value"] == "ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1":
                 self.assertEqual(100000, int(link["available-capacity"]["total-size"]["value"]),
                                  'ODU4 link should have an available capacity of 100 000 Mbps')
-            elif link["name"][0]["value-name"] == "transitional link name":
-                self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]),
-                                 'link should have an available capacity of 100 Gbps')
+#            elif link["name"][0]["value-name"] == "transitional link name":
+#                self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]),
+#                                 'link should have an available capacity of 100 Gbps')
             self.assertEqual(2, len(link["node-edge-point"]), 'link should have 2 neps')
 
     def test_35_connect_sprda_2_n2_to_roadma_pp3(self):
@@ -576,24 +572,22 @@ class TransportTapitesting(unittest.TestCase):
         time.sleep(2)
 
     def test_37_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         nodes = response["output"]["topology"]["node"]
         links = response["output"]["topology"]["link"]
-        self.assertEqual(11, len(nodes), 'Topology should contain 11 nodes')
-        self.assertEqual(12, len(links), 'Topology should contain 12 links')
+        self.assertEqual(6, len(nodes), 'Topology should contain 6 nodes')
+        self.assertEqual(7, len(links), 'Topology should contain 7 links')
         self.assertEqual(6, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"),
                          'Topology should contain 6 otsi nodes')
-        self.assertEqual(5, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"),
-                         'Topology should contain 5 dsr nodes')
-        self.assertEqual(5, count_object_with_double_key(links, "name", "value-name", "transitional link name"),
-                         'Topology should contain 5 transitional links')
-        self.assertEqual(5, count_object_with_double_key(links, "name", "value-name", "OMS link name"),
-                         'Topology should contain 5 oms links')
+        self.assertEqual(5, count_object_with_double_key(links, "name", "value-name", "OTS link name"),
+                         'Topology should contain 5 ots links')
         self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "otn link name"),
                          'Topology should contain 2 otn links')
+        self.assertEqual(5, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"),
+                         'Topology should contain 5 dsr nodes')
 
     def test_38_delete_ODU4_service(self):
         self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service1-ODU4"
@@ -616,14 +610,14 @@ class TransportTapitesting(unittest.TestCase):
         time.sleep(self.WAITING)
 
     def test_40_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         nodes = response["output"]["topology"]["node"]
         links = response["output"]["topology"]["link"]
-        self.assertEqual(11, len(nodes), 'Topology should contain 11 nodes')
-        self.assertEqual(10, len(links), 'Topology should contain 10 links')
+        self.assertEqual(6, len(nodes), 'Topology should contain 6 nodes')
+        self.assertEqual(5, len(links), 'Topology should contain 5 links')
         self.assertEqual(0, count_object_with_double_key(links, "name", "value-name", "otn link name"),
                          'Topology should contain 0 otn link')
 
@@ -638,17 +632,21 @@ class TransportTapitesting(unittest.TestCase):
                 self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
     def test_42_check_tapi_topology_T0(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(1, len(response["output"]["topology"]["node"]), 'Topology should contain 1 node')
         self.assertNotIn("link", response["output"]["topology"], 'Topology should contain no link')
-        self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"],
+#        self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"],
+#                         'node name should be: ROADM-infra')
+        self.assertEqual("ROADM-infra",
+                         response["output"]["topology"]["node"][0]["name"][count_position_name_from_value_name(
+                             response["output"]["topology"]["node"][0]["name"], "otsi node name")]["value"],
                          'node name should be: ROADM-infra')
 
     def test_43_get_tapi_topology_T100G(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T100GE
+        self.tapi_topo["topology-id"] = test_utils.T100GE_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -689,10 +687,21 @@ class TransportTapitesting(unittest.TestCase):
 def count_object_with_double_key(list_dicts, key1, key2, value):
     nb = 0
     for dictio in list_dicts:
-        if dictio[key1][0][key2] == value:
-            nb += 1
+        for name in dictio[key1]:
+            if name[key2] == value:
+                nb += 1
     return nb
 
 
+def count_position_name_from_value_name(name, valuename):
+    nb = 0
+    index = 0
+    for names in name:
+        if names["value-name"] == valuename:
+            index = nb
+        nb += 1
+    return index
+
+
 if __name__ == "__main__":
     unittest.main(verbosity=2)
index c8d79a78ca599e83a4d24492c452cec7de2c862b..4da753d11d7901dac3e3d1522f1536466c261cab 100644 (file)
@@ -39,13 +39,36 @@ class TransportPCEtesting(unittest.TestCase):
     WAITING = 20  # nominal value is 300
     NODE_VERSION = '2.2.1'
     uuid_services = UuidServices()
+    uuidTpAiOTSI = "f4c370be-e307-380d-a31b-7edc2b431e5d"
+    uuidTpZiOTSI = "febb4502-6b27-3701-990b-3aa4941f48c4"
+    uuidTpADSR = "3aca9b37-bc46-335d-b147-2423690dee18"
+    uuidTpZDSR = "709d3595-6d56-3ad6-a3cd-5a4a09ce6f9d"
+#   SIP uuids
+    # SIP+SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1 UUID IS
+    sAOTS = "38d81f55-1798-3520-ba16-08efa56630c4"
+    # SIP+SPDR-SC1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1 UUID IS
+    sZOTS = "97d9ba27-0efa-3010-8b98-b4d73240120c"
+    # SIP+SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1 UUID IS
+    sAeOTS = "f4dbce65-6191-3c84-b351-29ccb0629221"
+    # SIP+SPDR-SC1-XPDR1+eOTSi+XPDR1-NETWORK1 UUID IS
+    sZeOTS = "faabebd3-d7af-3389-96a7-261672744591"
+    # SIP+SPDR-SA1-XPDR1+DSR+XPDR1-CLIENT1 UUID IS
+    sADSR = "c14797a0-adcc-3875-a1fe-df8949d1a2d7"
+    # SIP+SPDR-SC1-XPDR1+DSR+XPDR1-CLIENT1 UUID IS
+    sZDSR = "25812ef2-625d-3bf8-af55-5e93946d1c22"
+    # SIP+SPDR-SA1-XPDR1+eODU+XPDR1-CLIENT1 UUID IS
+    sAeODU = "b6421484-531f-3444-adfc-e11c503f1fab"
+    # SIP+SPDR-SC1-XPDR1+eODU+XPDR1-CLIENT1 UUID IS
+    sZeODU = "4511fca7-0cf7-3b27-a128-3b372d5e1fa8"
+    # uuid_A = uuid.UUID(bytes("SPDR-SA1-XPDR1+DSR+eOTSI+XPDR1-NETWORK1", 'utf-8'))
+    # uuid_C = uuid.UUID(bytes("SPDR-SC1-XPDR1+DSR+eOTSI+XPDR1-NETWORK1", 'utf-8'))
 
     cr_serv_input_data = {
         "end-point": [
             {
                 "layer-protocol-name": "PHOTONIC_MEDIA",
                 "service-interface-point": {
-                    "service-interface-point-uuid": "b1a0d883-32b8-3b0b-93d6-7ed074f6f107"
+                    "service-interface-point-uuid": "c14797a0-adcc-3875-a1fe-df8949d1a2d7"
                 },
                 "administrative-state": "UNLOCKED",
                 "operational-state": "ENABLED",
@@ -63,7 +86,7 @@ class TransportPCEtesting(unittest.TestCase):
             {
                 "layer-protocol-name": "PHOTONIC_MEDIA",
                 "service-interface-point": {
-                    "service-interface-point-uuid": "d1d6305e-179b-346f-b02d-8260aebe1ce8"
+                    "service-interface-point-uuid": "25812ef2-625d-3bf8-af55-5e93946d1c22"
                 },
                 "administrative-state": "UNLOCKED",
                 "operational-state": "ENABLED",
@@ -80,21 +103,32 @@ class TransportPCEtesting(unittest.TestCase):
             }
         ],
         "connectivity-constraint": {
-            "service-layer": "PHOTONIC_MEDIA",
             "service-type": "POINT_TO_POINT_CONNECTIVITY",
             "service-level": "Some service-level",
             "requested-capacity": {
                 "total-size": {
                     "value": "100",
-                    "unit": "GB"
+                    "unit": "tapi-common:CAPACITY_UNIT_GBPS"
                 }
             }
         },
-        "state": "Some state"}
+        "topology-constraint": [
+            {
+                "local-id": "localIdTopoConstraint",
+                "name": [
+                    {
+                            "value-name": "Dumb constraint",
+                            "value": "for debug1"
+                    }
+                ]
+            }
+        ],
+        "state": "LOCKED",
+        "layer-protocol-name": "PHOTONIC_MEDIA"}
 
-    del_serv_input_data = {"service-id-or-name": "TBD"}
+    del_serv_input_data = {"uuid": "TBD"}
 
-    tapi_topo = {"topology-id-or-name": "TBD"}
+    tapi_topo = {"topology-id": "TBD"}
 
     @classmethod
     def setUpClass(cls):
@@ -240,21 +274,26 @@ class TransportPCEtesting(unittest.TestCase):
                          'There should be 22 openroadm links')
 
     def test_13_get_tapi_topology_details(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         time.sleep(2)
         self.assertEqual(response['status_code'], requests.codes.ok)
-        self.assertEqual(len(response['output']['topology']['node']), 14, 'There should be 14 TAPI nodes')
-        self.assertEqual(len(response['output']['topology']['link']), 15, 'There should be 15 TAPI links')
+        self.assertEqual(len(response['output']['topology']['node']), 8, 'There should be 8 TAPI nodes')
+        self.assertEqual(len(response['output']['topology']['link']), 3, 'There should be 3 TAPI links')
+        print(response['output']['topology']['node'][0])
+        print(response['output']['topology']['node'][1])
+        print(response['output']['topology']['node'][2])
 
     def test_14_check_sip_details(self):
         response = test_utils.transportpce_api_rpc_request(
             'tapi-common', 'get-service-interface-point-list', None)
-        self.assertEqual(len(response['output']['sip']), 60, 'There should be 60 service interface point')
+        self.assertEqual(len(response['output']['sip']), 72, 'There should be 72 service interface point')
 
 # test create connectivity service from spdrA to spdrC for Photonic_media
     def test_15_create_connectivity_service_PhotonicMedia(self):
+        self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = self.sAOTS
+        self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = self.sZOTS
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'create-connectivity-service', self.cr_serv_input_data)
         time.sleep(self.WAITING)
@@ -266,9 +305,11 @@ class TransportPCEtesting(unittest.TestCase):
         input_dict_1 = {'administrative-state': 'LOCKED',
                         'lifecycle-state': 'PLANNED',
                         'operational-state': 'DISABLED',
-                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
-                        'service-layer': 'PHOTONIC_MEDIA',
-                        'connectivity-direction': 'BIDIRECTIONAL'
+                        # 'service-type': 'POINT_TO_POINT_CONNECTIVITY',
+                        # 'service-layer': 'PHOTONIC_MEDIA',
+                        'layer-protocol-name': 'PHOTONIC_MEDIA',
+                        # 'connectivity-direction': 'BIDIRECTIONAL'
+                        'direction': 'BIDIRECTIONAL'
                         }
         input_dict_2 = {'value-name': 'OpenROADM node id',
                         'value': 'SPDR-SC1-XPDR1'}
@@ -296,11 +337,12 @@ class TransportPCEtesting(unittest.TestCase):
 # test create connectivity service from spdrA to spdrC for odu
     def test_17_create_connectivity_service_ODU(self):
         # pylint: disable=line-too-long
+        self.cr_serv_input_data["layer-protocol-name"] = "ODU"
         self.cr_serv_input_data["end-point"][0]["layer-protocol-name"] = "ODU"
-        self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "5efda776-f8de-3e0b-9bbd-2c702e210946"
+        self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = self.sAeODU
         self.cr_serv_input_data["end-point"][1]["layer-protocol-name"] = "ODU"
-        self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = "8116d0af-39fa-3df5-bed2-dd2cd5e8217d"
-        self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "ODU"
+        self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = self.sZeODU
+#        self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "ODU"
         self.cr_serv_input_data["connectivity-constraint"]["service-level"] = self.uuid_services.pm
 
         response = test_utils.transportpce_api_rpc_request(
@@ -314,9 +356,9 @@ class TransportPCEtesting(unittest.TestCase):
         input_dict_1 = {'administrative-state': 'LOCKED',
                         'lifecycle-state': 'PLANNED',
                         'operational-state': 'DISABLED',
-                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
-                        'service-layer': 'ODU',
-                        'connectivity-direction': 'BIDIRECTIONAL'
+                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
+                        'layer-protocol-name': 'ODU',
+                        'direction': 'BIDIRECTIONAL'
                         }
         input_dict_2 = {'value-name': 'OpenROADM node id',
                         'value': 'SPDR-SC1-XPDR1'}
@@ -344,11 +386,12 @@ class TransportPCEtesting(unittest.TestCase):
 # test create connectivity service from spdrA to spdrC for dsr
     def test_19_create_connectivity_service_DSR(self):
         # pylint: disable=line-too-long
+        self.cr_serv_input_data["layer-protocol-name"] = "DSR"
         self.cr_serv_input_data["end-point"][0]["layer-protocol-name"] = "DSR"
-        self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "c14797a0-adcc-3875-a1fe-df8949d1a2d7"
+        self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = self.sADSR
         self.cr_serv_input_data["end-point"][1]["layer-protocol-name"] = "DSR"
-        self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = "25812ef2-625d-3bf8-af55-5e93946d1c22"
-        self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "DSR"
+        self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = self.sZDSR
+#        self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "DSR"
         self.cr_serv_input_data["connectivity-constraint"]["requested-capacity"]["total-size"]["value"] = "10"
         self.cr_serv_input_data["connectivity-constraint"]["service-level"] = self.uuid_services.odu
 
@@ -363,9 +406,9 @@ class TransportPCEtesting(unittest.TestCase):
         input_dict_1 = {'administrative-state': 'LOCKED',
                         'lifecycle-state': 'PLANNED',
                         'operational-state': 'DISABLED',
-                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
-                        'service-layer': 'DSR',
-                        'connectivity-direction': 'BIDIRECTIONAL'
+                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
+                        'layer-protocol-name': 'DSR',
+                        'direction': 'BIDIRECTIONAL'
                         }
         input_dict_2 = {'value-name': 'OpenROADM node id',
                         'value': 'SPDR-SC1-XPDR1'}
@@ -401,17 +444,20 @@ class TransportPCEtesting(unittest.TestCase):
         for ele in liste_service:
             if ele['uuid'] == self.uuid_services.pm:
                 self.assertEqual(ele['operational-state'], 'ENABLED')
-                self.assertEqual(ele['service-layer'], 'PHOTONIC_MEDIA')
+#                self.assertEqual(ele['service-layer'], 'PHOTONIC_MEDIA')
+                self.assertEqual(ele['layer-protocol-name'], 'PHOTONIC_MEDIA')
                 nbconnection = len(ele['connection'])
                 self.assertEqual(nbconnection, 3, 'There should be 3 connections')
             elif ele['uuid'] == self.uuid_services.odu:
                 self.assertEqual(ele['operational-state'], 'ENABLED')
-                self.assertEqual(ele['service-layer'], 'ODU')
+#                self.assertEqual(ele['service-layer'], 'ODU')
+                self.assertEqual(ele['layer-protocol-name'], 'ODU')
                 nbconnection = len(ele['connection'])
                 self.assertEqual(nbconnection, 1, 'There should be 1 connections')
             elif ele['uuid'] == self.uuid_services.dsr:
                 self.assertEqual(ele['operational-state'], 'ENABLED')
-                self.assertEqual(ele['service-layer'], 'DSR')
+#                self.assertEqual(ele['service-layer'], 'DSR')
+                self.assertEqual(ele['layer-protocol-name'], 'DSR')
                 nbconnection = len(ele['connection'])
                 self.assertEqual(nbconnection, 2, 'There should be 2 connections')
             else:
@@ -419,21 +465,21 @@ class TransportPCEtesting(unittest.TestCase):
         time.sleep(2)
 
     def test_22_delete_connectivity_service_DSR(self):
-        self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.dsr)
+        self.del_serv_input_data["uuid"] = str(self.uuid_services.dsr)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data)
         self.assertIn(response["status_code"], (requests.codes.ok, requests.codes.no_content))
         time.sleep(self.WAITING)
 
     def test_23_delete_connectivity_service_ODU(self):
-        self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.odu)
+        self.del_serv_input_data["uuid"] = str(self.uuid_services.odu)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data)
         self.assertIn(response["status_code"], (requests.codes.ok, requests.codes.no_content))
         time.sleep(self.WAITING)
 
     def test_24_delete_connectivity_service_PhotonicMedia(self):
-        self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.pm)
+        self.del_serv_input_data["uuid"] = str(self.uuid_services.pm)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data)
         self.assertIn(response["status_code"], (requests.codes.ok, requests.codes.no_content))
index 47a3eb9a01e04277af07f1a4572d51dab30f85fe..f6e78a3fbacde9ca6ea19601f68e619785693e03 100644 (file)
@@ -11,7 +11,6 @@
 # pylint: disable=no-member
 # pylint: disable=too-many-public-methods
 import os
-import json
 import unittest
 import time
 import requests
@@ -32,6 +31,12 @@ class UuidServices:
         self.odu = None
         self.dsr = None
         self.eth = None
+# XPDR-A1-XPDR1+XPONDER Uuid is:
+# 4378fc29-6408-39ec-8737-5008c3dc49e5
+# XPDR-C1-XPDR1+XPONDER Uuid is:
+# 1770bea4-b1da-3b20-abce-7d182c0ec0df
+# ROADM-A1+PHOTONIC_MEDIA Uuid is:
+# 3b726367-6f2d-3e3f-9033-d99b61459075
 
 
 class TransportPCEFulltesting(unittest.TestCase):
@@ -76,29 +81,41 @@ class TransportPCEFulltesting(unittest.TestCase):
             }
         ],
         "connectivity-constraint": {
-            "service-layer": "ETH",
+            #            "service-layer": "ETH",
             "service-type": "POINT_TO_POINT_CONNECTIVITY",
             "service-level": "Some service-level",
             "requested-capacity": {
                 "total-size": {
                     "value": "100",
-                    "unit": "GB"
+                    "unit": "tapi-common:CAPACITY_UNIT_GBPS"
                 }
             }
         },
-        "state": "Some state"
+        "topology-constraint": [
+            {
+                "local-id": "localIdTopoConstraint",
+                "name": [
+                    {
+                            "value-name": "Dumb constraint",
+                            "value": "for debug1"
+                    }
+                ]
+            }
+        ],
+        "state": "LOCKED",
+        "layer-protocol-name": "ETH"
     }
 
-    del_serv_input_data = {"service-id-or-name": "TBD"}
+    del_serv_input_data = {"uuid": "TBD"}
 
-    tapi_topo = {"topology-id-or-name": "TBD"}
+    tapi_topo = {"topology-id": "TBD"}
 
     node_details = {
-        "topology-id-or-name": "TBD",
-        "node-id-or-name": "TBD"
+        "topology-id": "TBD",
+        "node-id": "TBD"
     }
 
-    tapi_serv_details = {"service-id-or-name": "TBD"}
+    tapi_serv_details = {"uuid": "TBD"}
 
     processes = []
     uuid_services = UuidServices()
@@ -161,7 +178,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION_221))
         self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+    def test_05_connect_xpdrA_N1_to_roadmA_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
@@ -179,7 +196,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
+    def test_07_connect_xpdrC_N1_to_roadmC_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -240,9 +257,11 @@ class TransportPCEFulltesting(unittest.TestCase):
         input_dict_1 = {'administrative-state': 'LOCKED',
                         'lifecycle-state': 'PLANNED',
                         'operational-state': 'DISABLED',
-                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
-                        'service-layer': 'ETH',
-                        'connectivity-direction': 'BIDIRECTIONAL'
+                        # 'service-type': 'POINT_TO_POINT_CONNECTIVITY',
+                        # 'service-layer': 'ETH',
+                        'layer-protocol-name': 'ETH',
+                        # 'connectivity-direction': 'BIDIRECTIONAL'
+                        'direction': 'BIDIRECTIONAL'
                         }
         input_dict_2 = {'value-name': 'OpenROADM node id',
                         'value': 'XPDR-C1-XPDR1'}
@@ -268,7 +287,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_13_get_connectivity_service_Ethernet(self):
-        self.tapi_serv_details["service-id-or-name"] = str(self.uuid_services.eth)
+        self.tapi_serv_details["uuid"] = str(self.uuid_services.eth)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'get-connectivity-service-details', self.tapi_serv_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -278,17 +297,13 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertEqual(response['output']['service']['lifecycle-state'], 'INSTALLED')
 
     def test_14_change_status_line_port_xpdrc(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('xpdrc', self.NODE_VERSION_221), '1/0/1-PLUG-NET', '1',
+                                                       {
             "port-name": "1",
             "port-type": "CFP2",
             "administrative-state": "outOfService",
-            "port-qual": "xpdr-network"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8144/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "xpdr-network"
+        }))
         time.sleep(2)
 
     def test_15_check_update_portmapping(self):
@@ -340,11 +355,12 @@ class TransportPCEFulltesting(unittest.TestCase):
                 self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService')
                 self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService')
         self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified")
-        time.sleep(1)
+        time.sleep(10)
 
     def test_17_check_update_tapi_neps(self):
-        self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
-        self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+OTSi"
+        self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
+#        self.node_details["node-id"] = "XPDR-C1-XPDR1+OTSi"
+        self.node_details["node-id"] = "1770bea4-b1da-3b20-abce-7d182c0ec0df"
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-node-details', self.node_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -362,28 +378,28 @@ class TransportPCEFulltesting(unittest.TestCase):
                                  "Operational State should be 'ENABLED'")
                 self.assertEqual(nep['administrative-state'], 'UNLOCKED',
                                  "Administrative State should be 'UNLOCKED'")
-        self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+DSR"
-        response = test_utils.transportpce_api_rpc_request(
-            'tapi-topology', 'get-node-details', self.node_details)
-        self.assertEqual(response['status_code'], requests.codes.ok)
-        nep_list = response['output']['node']['owned-node-edge-point']
-        for nep in nep_list:
-            if 'XPDR1-NETWORK1' in nep['name'][0]['value']:
-                self.assertEqual(nep['operational-state'], 'DISABLED',
-                                 "Operational State should be 'DISABLED'")
-                self.assertEqual(nep['administrative-state'], 'LOCKED',
-                                 "Administrative State should be 'LOCKED'")
-                nb_updated_neps += 1
-            else:
-                self.assertEqual(nep['operational-state'], 'ENABLED',
-                                 "Operational State should be 'ENABLED'")
-                self.assertEqual(nep['administrative-state'], 'UNLOCKED',
-                                 "Administrative State should be 'UNLOCKED'")
-        self.assertEqual(nb_updated_neps, 4, "Only two xponder neps should have been modified")
+        self.node_details["node-id"] = "XPDR-C1-XPDR1+DSR"
+#        response = test_utils.transportpce_api_rpc_request(
+#            'tapi-topology', 'get-node-details', self.node_details)
+#        self.assertEqual(response['status_code'], requests.codes.ok)
+#        nep_list = response['output']['node']['owned-node-edge-point']
+#        for nep in nep_list:
+#            if 'XPDR1-NETWORK1' in nep['name'][0]['value']:
+#                self.assertEqual(nep['operational-state'], 'DISABLED',
+#                                 "Operational State should be 'DISABLED'")
+#                self.assertEqual(nep['administrative-state'], 'LOCKED',
+#                                 "Administrative State should be 'LOCKED'")
+#                nb_updated_neps += 1
+#            else:
+#                self.assertEqual(nep['operational-state'], 'ENABLED',
+#                                 "Operational State should be 'ENABLED'")
+#                self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+#                                 "Administrative State should be 'UNLOCKED'")
+        self.assertEqual(nb_updated_neps, 3, "3 xponder neps (OTS, OTSI_MC, eODU) should have been modified")
         time.sleep(1)
 
     def test_18_check_update_tapi_links(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         time.sleep(2)
@@ -398,8 +414,8 @@ class TransportPCEFulltesting(unittest.TestCase):
             else:
                 self.assertEqual(link['operational-state'], 'ENABLED')
                 self.assertEqual(link['administrative-state'], 'UNLOCKED')
-        self.assertEqual(nb_updated_link, 2,
-                         "Only two xponder-output/input & xponder-transi links should have been modified")
+        self.assertEqual(nb_updated_link, 1,
+                         "Only one xponder-output/input bidirectional link should have been modified")
         time.sleep(1)
 
     def test_19_check_update_service_Ethernet(self):
@@ -409,7 +425,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertEqual(response['services'][0]['administrative-state'], 'inService')
 
     def test_20_check_update_connectivity_service_Ethernet(self):
-        self.tapi_serv_details["service-id-or-name"] = str(self.uuid_services.eth)
+        self.tapi_serv_details["uuid"] = str(self.uuid_services.eth)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'get-connectivity-service-details', self.tapi_serv_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -418,17 +434,13 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_21_restore_status_line_port_xpdrc(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/1%2F0%2F1-PLUG-NET/ports/1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('xpdrc', self.NODE_VERSION_221), '1/0/1-PLUG-NET', '1',
+                                                       {
             "port-name": "1",
             "port-type": "CFP2",
             "administrative-state": "inService",
-            "port-qual": "xpdr-network"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8144/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "xpdr-network"
+        }))
         time.sleep(2)
 
     def test_22_check_update_portmapping_ok(self):
@@ -461,8 +473,9 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_24_check_update_tapi_neps_ok(self):
-        self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
-        self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+OTSi"
+        self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
+#        self.node_details["node-id"] = "XPDR-C1-XPDR1+OTSi"
+        self.node_details["node-id"] = "1770bea4-b1da-3b20-abce-7d182c0ec0df"
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-node-details', self.node_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -473,20 +486,20 @@ class TransportPCEFulltesting(unittest.TestCase):
             self.assertEqual(nep['administrative-state'], 'UNLOCKED',
                              "Administrative State should be 'UNLOCKED'")
 
-        self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+DSR"
-        response = test_utils.transportpce_api_rpc_request(
-            'tapi-topology', 'get-node-details', self.node_details)
-        self.assertEqual(response['status_code'], requests.codes.ok)
-        nep_list = response['output']['node']['owned-node-edge-point']
-        for nep in nep_list:
-            self.assertEqual(nep['operational-state'], 'ENABLED',
-                             "Operational State should be 'ENABLED'")
-            self.assertEqual(nep['administrative-state'], 'UNLOCKED',
-                             "Administrative State should be 'UNLOCKED'")
+#        self.node_details["node-id"] = "XPDR-C1-XPDR1+DSR"
+#        response = test_utils.transportpce_api_rpc_request(
+#            'tapi-topology', 'get-node-details', self.node_details)
+#        self.assertEqual(response['status_code'], requests.codes.ok)
+#        nep_list = response['output']['node']['owned-node-edge-point']
+#        for nep in nep_list:
+#            self.assertEqual(nep['operational-state'], 'ENABLED',
+#                             "Operational State should be 'ENABLED'")
+#            self.assertEqual(nep['administrative-state'], 'UNLOCKED',
+#                             "Administrative State should be 'UNLOCKED'")
         time.sleep(1)
 
     def test_25_check_update_tapi_links_ok(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         time.sleep(2)
@@ -503,19 +516,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_13_get_connectivity_service_Ethernet()
 
     def test_28_change_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_29_check_update_portmapping(self):
@@ -570,8 +579,9 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_31_check_update_tapi_neps(self):
-        self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
-        self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA"
+        self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
+#        self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA"
+        self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075"
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-node-details', self.node_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -589,11 +599,11 @@ class TransportPCEFulltesting(unittest.TestCase):
                                  "Operational State should be 'ENABLED'")
                 self.assertEqual(nep['administrative-state'], 'UNLOCKED',
                                  "Administrative State should be 'UNLOCKED'")
-        self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified")
+        self.assertEqual(nb_updated_neps, 2, "Only 2 roadm SRG-PP nep (OTS/MC)should have been modified")
         time.sleep(1)
 
     def test_32_check_update_tapi_links(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         time.sleep(2)
@@ -618,19 +628,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_20_check_update_connectivity_service_Ethernet()
 
     def test_35_restore_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "inService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_36_check_update_portmapping_ok(self):
@@ -648,8 +654,9 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_23_check_update_openroadm_topo_ok()
 
     def test_38_check_update_tapi_neps_ok(self):
-        self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
-        self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA"
+        self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
+#        self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA"
+        self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075"
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-node-details', self.node_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -672,19 +679,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_13_get_connectivity_service_Ethernet()
 
     def test_42_change_status_line_port_roadma_deg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/2%2F0/ports/L1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '2/0', 'L1',
+                                                       {
             "port-name": "L1",
             "logical-connection-point": "DEG2-TTP-TXRX",
             "port-type": "LINE",
             "circuit-id": "1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_43_check_update_portmapping(self):
@@ -739,8 +742,9 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_45_check_update_tapi_neps(self):
-        self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
-        self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA"
+        self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
+#        self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA"
+        self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075"
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-node-details', self.node_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -758,11 +762,11 @@ class TransportPCEFulltesting(unittest.TestCase):
                                  "Operational State should be 'ENABLED'")
                 self.assertEqual(nep['administrative-state'], 'UNLOCKED',
                                  "Administrative State should be 'UNLOCKED'")
-        self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified")
+        self.assertEqual(nb_updated_neps, 4, "4 roadm NEPS should have been modified (OTS/OMS/MC/OTSI_MC")
         time.sleep(1)
 
     def test_46_check_update_tapi_links(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         time.sleep(2)
@@ -788,19 +792,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_20_check_update_connectivity_service_Ethernet()
 
     def test_49_restore_status_line_port_roadma_deg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/2%2F0/ports/L1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '2/0', 'L1',
+                                                       {
             "port-name": "L1",
             "logical-connection-point": "DEG2-TTP-TXRX",
             "port-type": "LINE",
             "circuit-id": "1",
             "administrative-state": "inService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_50_check_update_portmapping_ok(self):
@@ -822,19 +822,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_13_get_connectivity_service_Ethernet()
 
     def test_56_change_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C2"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C2',
+                                                       {
             "port-name": "C2",
             "logical-connection-point": "SRG1-PP2",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_57_check_update_portmapping(self):
@@ -882,8 +878,9 @@ class TransportPCEFulltesting(unittest.TestCase):
         time.sleep(1)
 
     def test_59_check_update_tapi_neps(self):
-        self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
-        self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA"
+        self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
+#        self.node_details["node-id"] = uuid.UUID(bytes="ROADM-A1+PHOTONIC_MEDIA".bytes)
+        self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075"
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-node-details', self.node_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -901,11 +898,11 @@ class TransportPCEFulltesting(unittest.TestCase):
                                  "Operational State should be 'ENABLED'")
                 self.assertEqual(nep['administrative-state'], 'UNLOCKED',
                                  "Administrative State should be 'UNLOCKED'")
-        self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified")
+        self.assertEqual(nb_updated_neps, 1, "Only 1 roadm neps OTS should have been modified for SRG2PP")
         time.sleep(1)
 
     def test_60_check_update_tapi_links(self):
-        self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO
+        self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID
         response = test_utils.transportpce_api_rpc_request(
             'tapi-topology', 'get-topology-details', self.tapi_topo)
         time.sleep(2)
@@ -931,7 +928,7 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.test_13_get_connectivity_service_Ethernet()
 
     def test_63_delete_connectivity_service_Ethernet(self):
-        self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.eth)
+        self.del_serv_input_data["uuid"] = str(self.uuid_services.eth)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data)
         self.assertIn(response['status_code'], (requests.codes.ok, requests.codes.no_content))
@@ -964,19 +961,15 @@ class TransportPCEFulltesting(unittest.TestCase):
         self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content))
 
     def test_69_restore_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C2"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C2',
+                                                       {
             "port-name": "C2",
             "logical-connection-point": "SRG1-PP2",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "inService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
+            "port-qual": "roadm-external"
+        }))
         time.sleep(2)
 
     def test_70_clean_openroadm_topology(self):
index 41eb33b5f97194120ce8db15b63da1d5a8bb5aa9..053b16b5ca7b985b5342e57690c7eb486df4f143 100644 (file)
@@ -12,7 +12,6 @@
 # pylint: disable=too-many-public-methods
 
 import os
-import json
 # pylint: disable=wrong-import-order
 import sys
 import unittest
@@ -130,7 +129,7 @@ class TransportNbiNotificationstesting(unittest.TestCase):
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+    def test_05_connect_xpdrA_N1_to_roadmA_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
@@ -148,7 +147,7 @@ class TransportNbiNotificationstesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
+    def test_07_connect_xpdrC_N1_to_roadmC_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -262,20 +261,16 @@ class TransportNbiNotificationstesting(unittest.TestCase):
                          'The service is now inService')
 
     def test_18_change_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        time.sleep(2)
+            "port-qual": "roadm-external"
+        }))
+        time.sleep(5)
 
     def test_19_get_notifications_alarm_service1(self):
         response = test_utils.transportpce_api_rpc_request(
@@ -288,20 +283,16 @@ class TransportNbiNotificationstesting(unittest.TestCase):
                          'The service is now outOfService')
 
     def test_20_restore_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "inService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        time.sleep(2)
+            "port-qual": "roadm-external"
+        }))
+        time.sleep(5)
 
     def test_21_get_notifications_alarm_service1(self):
         self.test_17_get_notifications_alarm_service1()
index 6b93e2173396340674c7eec2488a145be0768aa1..10b84a6da1f3b743808b3e06df962f07b3ab2494 100644 (file)
@@ -12,7 +12,6 @@
 # pylint: disable=too-many-public-methods
 
 import os
-import json
 # pylint: disable=wrong-import-order
 import sys
 import unittest
@@ -26,6 +25,7 @@ import test_utils  # nopep8
 
 # pylint: disable=too-few-public-methods
 class UuidServices:
+
     def __init__(self):
         # pylint: disable=invalid-name
         self.pm = None
@@ -36,6 +36,7 @@ class UuidServices:
 
 # pylint: disable=too-few-public-methods
 class UuidSubscriptions:
+
     def __init__(self):
         # pylint: disable=invalid-name
         self.pm = None
@@ -85,28 +86,25 @@ class TransportNbiNotificationstesting(unittest.TestCase):
             }
         ],
         "connectivity-constraint": {
-            "service-layer": "ETH",
             "service-type": "POINT_TO_POINT_CONNECTIVITY",
             "service-level": "Some service-level",
             "requested-capacity": {
                 "total-size": {
                     "value": "100",
-                    "unit": "GB"
+                    "unit": "tapi-common:CAPACITY_UNIT_GBPS"
                 }
             }
         },
-        "state": "Some state"
+        "state": "LOCKED",
+        "layer-protocol-name": "ETH"
     }
 
-    tapi_serv_details = {"service-id-or-name": "TBD"}
+    tapi_serv_details = {"uuid": "TBD"}
 
     cr_notif_subs_input_data = {
         "subscription-filter": {
             "requested-notification-types": [
-                "ALARM_EVENT"
-            ],
-            "requested-object-types": [
-                "CONNECTIVITY_SERVICE"
+                "NOTIFICATION_TYPE_ATTRIBUTE_VALUE_CHANGE"
             ],
             "requested-layer-protocols": [
                 "ETH"
@@ -127,14 +125,13 @@ class TransportNbiNotificationstesting(unittest.TestCase):
     }
 
     cr_get_notif_list_input_data = {
-        "subscription-id-or-name": "c07e7fd1-0377-4fbf-8928-36c17b0d0d68",
-        "time-period": "time-period"
+        "subscription-id": "c07e7fd1-0377-4fbf-8928-36c17b0d0d68",
     }
 
     processes = []
     uuid_services = UuidServices()
     uuid_subscriptions = UuidSubscriptions()
-    WAITING = 25  # nominal value is 300
+    WAITING = 20  # nominal value is 300
     NODE_VERSION_221 = '2.2.1'
 
     @classmethod
@@ -177,8 +174,7 @@ class TransportNbiNotificationstesting(unittest.TestCase):
         print("all processes killed")
 
     def setUp(self):  # instruction executed before each test method
-        # pylint: disable=consider-using-f-string
-        print("execution of {}".format(self.id().split(".")[-1]))
+        print(f'execution of {self.id().split(".")[-1]}')
 
     def test_01_connect_xpdrA(self):
         response = test_utils.mount_device("XPDR-A1", ('xpdra', self.NODE_VERSION_221))
@@ -200,7 +196,7 @@ class TransportNbiNotificationstesting(unittest.TestCase):
         self.assertEqual(response.status_code,
                          requests.codes.created, test_utils.CODE_SHOULD_BE_201)
 
-    def test_05_connect_xprdA_N1_to_roadmA_PP1(self):
+    def test_05_connect_xpdrA_N1_to_roadmA_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-A1', 'xpdr-num': '1', 'network-num': '1',
@@ -218,7 +214,7 @@ class TransportNbiNotificationstesting(unittest.TestCase):
         self.assertIn('Roadm Xponder links created successfully', response["output"]["result"])
         time.sleep(2)
 
-    def test_07_connect_xprdC_N1_to_roadmC_PP1(self):
+    def test_07_connect_xpdrC_N1_to_roadmC_PP1(self):
         response = test_utils.transportpce_api_rpc_request(
             'transportpce-networkutils', 'init-xpdr-rdm-links',
             {'links-input': {'xpdr-node': 'XPDR-C1', 'xpdr-num': '1', 'network-num': '1',
@@ -280,9 +276,6 @@ class TransportNbiNotificationstesting(unittest.TestCase):
         input_dict_1 = {'administrative-state': 'LOCKED',
                         'lifecycle-state': 'PLANNED',
                         'operational-state': 'DISABLED',
-                        'service-type': 'POINT_TO_POINT_CONNECTIVITY',
-                        'service-layer': 'ETH',
-                        'connectivity-direction': 'BIDIRECTIONAL'
                         }
         input_dict_2 = {'value-name': 'OpenROADM node id',
                         'value': 'XPDR-C1-XPDR1'}
@@ -306,7 +299,7 @@ class TransportNbiNotificationstesting(unittest.TestCase):
         time.sleep(1)
 
     def test_13_get_connectivity_service_Ethernet(self):
-        self.tapi_serv_details["service-id-or-name"] = str(self.uuid_services.eth)
+        self.tapi_serv_details["uuid"] = str(self.uuid_services.eth)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'get-connectivity-service-details', self.tapi_serv_details)
         self.assertEqual(response['status_code'], requests.codes.ok)
@@ -322,72 +315,72 @@ class TransportNbiNotificationstesting(unittest.TestCase):
             'tapi-notification', 'create-notification-subscription-service', self.cr_notif_subs_input_data)
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.uuid_subscriptions.eth = response['output']['subscription-service']['uuid']
-        self.assertEqual(response['output']['subscription-service']['subscription-filter']
-                         ['requested-object-types'][0], 'CONNECTIVITY_SERVICE')
-        self.assertEqual(response['output']['subscription-service']['subscription-filter']
-                         ['requested-notification-types'][0], 'ALARM_EVENT')
-        self.assertEqual(response['output']['subscription-service']['subscription-filter']
+        self.assertEqual(response['output']['subscription-service']['subscription-filter'][0]
+                         ['requested-notification-types'][0],
+                         'tapi-notification:NOTIFICATION_TYPE_ATTRIBUTE_VALUE_CHANGE')
+        self.assertEqual(response['output']['subscription-service']['subscription-filter'][0]
                          ['requested-object-identifier'][0], str(self.uuid_services.eth))
         time.sleep(2)
 
     def test_15_change_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "outOfService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        # If the gate fails is because of the waiting time not being enough
-        time.sleep(2)
+            "port-qual": "roadm-external"
+        }))
+        time.sleep(5)
 
     def test_16_get_tapi_notifications_connectivity_service_Ethernet(self):
-        self.cr_get_notif_list_input_data["subscription-id-or-name"] = str(self.uuid_subscriptions.eth)
+        self.cr_get_notif_list_input_data["subscription-id"] = str(self.uuid_subscriptions.eth)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-notification', 'get-notification-list', self.cr_get_notif_list_input_data)
         self.assertEqual(response['status_code'], requests.codes.ok)
         self.assertEqual(response['output']['notification'][0]['target-object-identifier'], str(self.uuid_services.eth))
-        self.assertEqual(response['output']['notification'][0]['target-object-type'], 'CONNECTIVITY_SERVICE')
+        self.assertEqual(response['output']['notification'][0]['changed-attributes'][0]['old-value'], 'UNLOCKED')
         self.assertEqual(response['output']['notification'][0]['changed-attributes'][0]['new-value'], 'LOCKED')
+        self.assertEqual(response['output']['notification'][0]['changed-attributes'][1]['value-name'],
+                         'operationalState')
+        self.assertEqual(response['output']['notification'][0]['changed-attributes'][1]['old-value'], 'ENABLED')
         self.assertEqual(response['output']['notification'][0]['changed-attributes'][1]['new-value'], 'DISABLED')
         time.sleep(2)
 
     def test_17_restore_status_port_roadma_srg(self):
-        url = "{}/config/org-openroadm-device:org-openroadm-device/circuit-packs/3%2F0/ports/C1"
-        body = {"ports": [{
+        self.assertTrue(test_utils.sims_update_cp_port(('roadma', self.NODE_VERSION_221), '3/0', 'C1',
+                                                       {
             "port-name": "C1",
             "logical-connection-point": "SRG1-PP1",
             "port-type": "client",
             "circuit-id": "SRG1",
             "administrative-state": "inService",
-            "port-qual": "roadm-external"}]}
-        response = requests.request("PUT", url.format("http://127.0.0.1:8141/restconf"),
-                                    data=json.dumps(body), headers=test_utils.TYPE_APPLICATION_JSON,
-                                    auth=(test_utils.ODL_LOGIN, test_utils.ODL_PWD),
-                                    timeout=test_utils.REQUEST_TIMEOUT)
-        self.assertEqual(response.status_code, requests.codes.ok)
-        # If the gate fails is because of the waiting time not being enough
-        time.sleep(2)
+            "port-qual": "roadm-external"
+        }))
+        time.sleep(5)
 
     def test_18_get_tapi_notifications_connectivity_service_Ethernet(self):
-        self.cr_get_notif_list_input_data["subscription-id-or-name"] = str(self.uuid_subscriptions.eth)
+        self.cr_get_notif_list_input_data["subscription-id"] = str(self.uuid_subscriptions.eth)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-notification', 'get-notification-list', self.cr_get_notif_list_input_data)
+        if response['output']['notification'][0]['event-time-stamp'] >\
+                response['output']['notification'][1]['event-time-stamp']:
+            new_notif = response['output']['notification'][0]
+        else:
+            new_notif = response['output']['notification'][1]
         self.assertEqual(response['status_code'], requests.codes.ok)
-        self.assertEqual(response['output']['notification'][0]['target-object-identifier'], str(self.uuid_services.eth))
-        self.assertEqual(response['output']['notification'][0]['target-object-type'], 'CONNECTIVITY_SERVICE')
-        self.assertEqual(response['output']['notification'][0]['changed-attributes'][0]['new-value'], 'UNLOCKED')
-        self.assertEqual(response['output']['notification'][0]['changed-attributes'][1]['new-value'], 'ENABLED')
+        self.assertEqual(new_notif['target-object-identifier'], str(self.uuid_services.eth))
+        self.assertEqual(new_notif['changed-attributes'][0]['value-name'], 'administrativeState')
+        self.assertEqual(new_notif['changed-attributes'][0]['old-value'], 'LOCKED')
+        self.assertEqual(new_notif['changed-attributes'][0]['new-value'], 'UNLOCKED')
+        self.assertEqual(new_notif['changed-attributes'][1]['value-name'], 'operationalState')
+        self.assertEqual(new_notif['changed-attributes'][1]['old-value'], 'DISABLED')
+        self.assertEqual(new_notif['changed-attributes'][1]['new-value'], 'ENABLED')
         time.sleep(2)
 
     def test_19_delete_connectivity_service_Ethernet(self):
-        self.tapi_serv_details["service-id-or-name"] = str(self.uuid_services.eth)
+        self.tapi_serv_details["uuid"] = str(self.uuid_services.eth)
         response = test_utils.transportpce_api_rpc_request(
             'tapi-connectivity', 'delete-connectivity-service', self.tapi_serv_details)
         self.assertIn(response['status_code'], (requests.codes.ok, requests.codes.no_content))
diff --git a/tox.ini b/tox.ini
index 7cae5c70e9e8cf5f9b8b8dd8ddb30037f3d47ad3..73f3460ee563f51e23f57e900dcf715b554608d7 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -1,12 +1,20 @@
 [tox]
 minversion = 3.7.0
 envlist = buildcontroller
-     testsPCE,
-     sims121,build_karaf_tests121,tests121,
-     sims221,build_karaf_tests221,tests_tapi,tests221,
-     sims71,build_karaf_tests71,tests71,
-     build_karaf_tests_hybrid,tests_hybrid,
-     buildlighty,
+     testsPCE
+     sims121
+     build_karaf_tests121
+     tests121
+     sims221
+     build_karaf_tests221
+     tests_tapi
+     tests221
+     sims71
+     build_karaf_tests71
+     tests71
+     build_karaf_tests_hybrid
+     tests_hybrid
+     buildlighty
      docs
      docs-linkcheck
      checkbashisms
@@ -16,7 +24,18 @@ skipsdist = true
 setupdir = tests/
 
 [testenv]
-passenv = USE_LIGHTY, NO_ODL_STARTUP, http_proxy, HTTP_PROXY, https_proxy, HTTPS_PROXY, no_proxy, NO_PROXY, OLM_TIMER1, OLM_TIMER2
+passenv = LAUNCHER
+     USE_LIGHTY
+     USE_SIMS
+     NO_ODL_STARTUP
+     http_proxy
+     HTTP_PROXY
+     https_proxy
+     HTTPS_PROXY
+     no_proxy
+     NO_PROXY
+     OLM_TIMER1
+     OLM_TIMER2
 setenv =
 #    USE_LIGHTY=True,
     OLM_TIMER1=3000
@@ -41,27 +60,37 @@ allowlist_externals = build.sh
 depends = buildcontroller,tests_hybrid
 changedir = {toxinidir}/lighty
 commands =
-  ./build.sh
+  - ./build.sh
+
+[testenv:sims]
+passenv = USE_SIMS
+allowlist_externals = install_lightynode.sh
+depends = buildcontroller
+commands =
+  ./install_lightynode.sh {posargs:}
 
 [testenv:sims121]
-allowlist_externals = install_honeynode.sh
+passenv = USE_SIMS
+allowlist_externals = install_sims.sh
 depends = buildcontroller
 # sims profiles does not strictly depends on buildcontroller
 # but this dependency avoids race condition in the gate
 commands =
-  ./install_honeynode.sh 1.2.1
+  ./install_sims.sh 1.2.1
 
 [testenv:sims221]
-allowlist_externals = install_honeynode.sh
+passenv = USE_SIMS
+allowlist_externals = install_sims.sh
 depends = buildcontroller
 commands =
-  ./install_honeynode.sh 2.2.1
+  ./install_sims.sh 2.2.1
 
 [testenv:sims71]
-allowlist_externals = install_honeynode.sh
+passenv = USE_SIMS
+allowlist_externals = install_sims.sh
 depends = buildcontroller
 commands =
-  ./install_honeynode.sh 7.1
+  ./install_sims.sh 7.1
 
 [testenv:testsPCE]
 depends = buildcontroller
@@ -76,7 +105,10 @@ deps =
   setuptools>=7.0
   gnpy4tpce==2.4.7
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+passenv = LAUNCHER
+    USE_LIGHTY
+    NO_ODL_STARTUP
+    USE_ODL_RESTCONF_VERSION
 basepython = python3
 commands =
   ./launch_tests.sh pce {posargs:}
@@ -85,7 +117,7 @@ commands =
 depends = buildcontroller
 # testsPCE dependency is only here to chain tests in the gate and avoid resources starvation
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY
+passenv = USE_LIGHTY
 setenv =
 #    USE_LIGHTY=True
     USE_ODL_ALT_KARAF_ENV=./karaf121.env
@@ -97,7 +129,10 @@ commands =
 depends = buildcontroller,build_karaf_tests121,sims121,testsPCE
 # testsPCE dependency is only here to chain tests in the gate and avoid resources starvation
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+passenv = LAUNCHER
+    USE_LIGHTY
+    USE_SIMS
+    USE_ODL_RESTCONF_VERSION
 setenv =
 #    USE_LIGHTY=True
 #    USE_ODL_RESTCONF_VERSION=draft-bierman02
@@ -118,7 +153,7 @@ commands =
 depends = buildcontroller
 # testsPCE dependency is only here to chain tests in the gate and avoid resources starvation
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY
+passenv = USE_LIGHTY
 setenv =
 #    USE_LIGHTY=True
     USE_ODL_ALT_KARAF_ENV=./karaf221.env
@@ -126,11 +161,32 @@ setenv =
 commands =
   ./build_karaf_for_tests.sh
 
+[testenv:launch]
+depends = buildcontroller,build_karaf_tests221,sims,tests71
+# tests71 dependency is only here to chain tests in the gate and avoid ressources starvation
+allowlist_externals = launch.sh
+passenv = LAUNCHER
+    USE_LIGHTY
+    NO_ODL_STARTUP
+    USE_ODL_RESTCONF_VERSION
+setenv =
+#    USE_LIGHTY=True
+#    USE_ODL_RESTCONF_VERSION=draft-bierman02
+    USE_ODL_ALT_KARAF_ENV=./karaf221.env
+    USE_ODL_ALT_KARAF_INSTALL_DIR=karaf221
+commands =
+  ./launch.sh
+
+
 [testenv:tests221]
 depends = buildcontroller,build_karaf_tests221,sims221,tests71
 # tests71 dependency is only here to chain tests in the gate and avoid ressources starvation
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+passenv = LAUNCHER
+    USE_LIGHTY
+    USE_SIMS
+    NO_ODL_STARTUP
+    USE_ODL_RESTCONF_VERSION
 setenv =
 #    USE_LIGHTY=True
 #    USE_ODL_RESTCONF_VERSION=draft-bierman02
@@ -143,7 +199,7 @@ commands =
 depends = buildcontroller
 # testsPCE dependency is only here to chain tests in the gate and avoid resources starvation
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY
+passenv = USE_LIGHTY
 setenv =
 #    USE_LIGHTY=True
     USE_ODL_ALT_KARAF_ENV=./karaf71.env
@@ -154,7 +210,11 @@ commands =
 [testenv:tests71]
 depends = buildcontroller,build_karaf_tests71,sims71,tests_tapi
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+passenv = LAUNCHER
+    USE_LIGHTY
+    USE_SIMS
+    NO_ODL_STARTUP
+    USE_ODL_RESTCONF_VERSION
 setenv =
 #    USE_LIGHTY=True
 #    USE_ODL_RESTCONF_VERSION=draft-bierman02
@@ -166,7 +226,7 @@ commands =
 [testenv:build_karaf_tests_hybrid]
 depends = buildcontroller
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY
+passenv = USE_LIGHTY
 setenv =
 #    USE_LIGHTY=True
     USE_ODL_ALT_KARAF_ENV=./karaf121.env
@@ -178,7 +238,11 @@ commands =
 depends = buildcontroller,build_karaf_tests_hybrid,sims121,sims221,sims71,tests121,tests221,tests71
 #the last dependency is to avoid temporarily concurrent ressources problem in parallel mode
 allowlist_externals = launch_tests.sh
-passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION
+passenv = LAUNCHER
+    USE_LIGHTY
+    USE_SIMS
+    NO_ODL_STARTUP
+    USE_ODL_RESTCONF_VERSION
 setenv =
 #    USE_LIGHTY=True
 #    USE_ODL_RESTCONF_VERSION=draft-bierman02
@@ -190,8 +254,15 @@ commands =
 
 [testenv:tests_tapi]
 depends = buildcontroller,build_karaf_tests221,sims221
-allowlist_externals = launch_tests.sh add_tapi_feature_to_tests221.sh
-passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, OLM_TIMER1, OLM_TIMER2, USE_ODL_RESTCONF_VERSION
+allowlist_externals = launch_tests.sh
+#                      add_tapi_feature_to_tests221.sh
+passenv = LAUNCHER
+    USE_LIGHTY
+    USE_SIMS
+    NO_ODL_STARTUP
+    OLM_TIMER1
+    OLM_TIMER2
+    USE_ODL_RESTCONF_VERSION
 setenv =
 #    USE_LIGHTY=True
 #    USE_ODL_RESTCONF_VERSION=draft-bierman02
@@ -207,9 +278,14 @@ commands =
 
 [testenv:with_docker]
 depends = buildcontroller,sims221
-allowlist_externals = launch_tests.sh
-                      dockercmd.sh
-passenv = LAUNCHER, USE_LIGHTY, NO_ODL_STARTUP, USE_ODL_RESTCONF_VERSION, OLM_TIMER1 OLM_TIMER2
+allowlist_externals = launch_tests.sh dockercmd.sh
+passenv = LAUNCHER
+    USE_LIGHTY
+    USE_SIMS
+    NO_ODL_STARTUP
+    USE_ODL_RESTCONF_VERSION
+#    OLM_TIMER1
+#    OLM_TIMER2
 setenv =
     OLM_TIMER1=3000
     OLM_TIMER2=2000
@@ -223,14 +299,24 @@ commands =
   ./dockercmd.sh container rm -f tpce_kafka1
 
 [testenv:docs]
-passenv = http_proxy, HTTP_PROXY, https_proxy, HTTPS_PROXY, no_proxy, NO_PROXY
+passenv = http_proxy
+    HTTP_PROXY
+    https_proxy
+    HTTPS_PROXY
+    no_proxy
+    NO_PROXY
 basepython = python3
 deps = -rdocs/requirements.txt
 commands =
     sphinx-build -q -W --keep-going -b html -n -d {envtmpdir}/doctrees ../docs/ {toxinidir}/docs/_build/html
 
 [testenv:docs-linkcheck]
-passenv = http_proxy, HTTP_PROXY, https_proxy, HTTPS_PROXY, no_proxy, NO_PROXY
+passenv = http_proxy
+    HTTP_PROXY
+    https_proxy
+    HTTPS_PROXY
+    no_proxy
+    NO_PROXY
 basepython = python3
 deps = -rdocs/requirements.txt
 commands = sphinx-build -q -b linkcheck -d {envtmpdir}/doctrees ../docs/ {toxinidir}/docs/_build/linkcheck
@@ -317,7 +403,14 @@ commands =
 basepython = python3
 deps = pre-commit
 passenv = HOME
+allowlist_externals = sh
+                      cpan
+                      sudo
+                      which
 commands =
+    sh -c 'which cpan || sudo yum install -y perl-CPAN  \
+        || (echo "cpan command not found - please install it \
+             (e.g. sudo apt-get install perl-modules | yum install perl-CPAN )" >&2 && exit 1)'
     pre-commit run --all-files --show-diff-on-failure
     pre-commit run gitlint-ci --hook-stage manual
 
@@ -327,7 +420,6 @@ deps = gitlint
 commands =
     gitlint --config ../.gitlint
 
-
 [testenv:allure-report-init]
 basepython = python3
 deps = allure-pytest>=2.10.0
@@ -339,7 +431,6 @@ commands =
     mkdir -p allure-report
     sed -i_ '$a\allure-pytest # Apache License 2.0' ./test-requirements.txt
 
-
 [testenv:allure-report-serve]
 basepython = python3
 allowlist_externals =