Don't use NotificationListener (TapiProvider)
[transportpce.git] / lighty / src / main / java / io / lighty / controllers / tpce / module / TransportPCEImpl.java
index f0f17c0a74011d303db83b4eda3499da448d547c..d6e44ad9a80c9e26135e5101e5ef44e0a049791f 100644 (file)
@@ -9,6 +9,8 @@ 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.transportpce.common.crossconnect.CrossConnect;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
@@ -38,14 +40,12 @@ 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;
@@ -58,16 +58,16 @@ import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOpe
 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
 import org.opendaylight.transportpce.renderer.rpcs.TransportPCEServicePathRPCImpl;
 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.listeners.TapiNetworkModelNotificationHandler;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
@@ -75,6 +75,7 @@ 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.rev230526.OrgOpenroadmServiceService;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -87,20 +88,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,
@@ -139,20 +135,22 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
                 new GnpyConsumerImpl(
                     "http://127.0.0.1:8008", "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer()),
                 portMapping);
-        pceProvider = new PceProvider(lgServRPS, pathComputationService);
-
+        rpcRegistrations.add(
+            new PceServiceRPCImpl(lgServRPS, pathComputationService)
+                .getRegisteredRpc());
         LOG.info("Creating OLM beans ...");
         MappingUtils mappingUtils = new MappingUtilsImpl(lgServBDB);
         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);
+                deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces),
+            lgServRPS);
+        rpcRegistrations.add(olmPowerServiceRpc.getRegisteredRpc());
         LOG.info("Creating renderer beans ...");
         initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
         DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
@@ -161,8 +159,7 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
                 mappingUtils, portMapping);
         OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(
                 crossConnect, openRoadmInterfaces, deviceTransactionManager, mappingUtils, portMapping);
-        rendererProvider = initRenderer(
-                lightyServices, olmPowerServiceRpc, deviceRendererService, otnDeviceRendererService, portMapping);
+        initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService, otnDeviceRendererService, portMapping);
 
         LOG.info("Creating service-handler beans ...");
         RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(
@@ -172,44 +169,45 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
                 portMapping);
         ServiceDataStoreOperations serviceDataStoreOperations =
             new ServiceDataStoreOperationsImpl(lgServBDB);
-        RendererListenerImpl rendererListenerImpl =
-            new RendererListenerImpl(pathComputationService, lgServBNPS, networkModelService);
-        PceListenerImpl pceListenerImpl = new PceListenerImpl(
+        RendererNotificationHandler rendererNotificationHandler =
+            new RendererNotificationHandler(pathComputationService, lgServBNPS, networkModelService);
+        PceNotificationHandler pceListenerImpl = new PceNotificationHandler(
                 rendererServiceOperations, pathComputationService,
                 lgServBNPS, serviceDataStoreOperations);
-        NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
+        NetworkModelNotificationHandler networkModelNotificationHandler = new NetworkModelNotificationHandler(
                 lgServBNPS, serviceDataStoreOperations);
-        OrgOpenroadmServiceService servicehandler = new ServicehandlerImpl(
+        ServicehandlerImpl servicehandler = new ServicehandlerImpl(lgServRPS,
                 pathComputationService, rendererServiceOperations,
                 lgServBNPS, pceListenerImpl,
-                rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations,
+                rendererNotificationHandler, networkModelNotificationHandler, serviceDataStoreOperations,
                 new CatalogDataStoreOperationsImpl(networkTransaction));
-        servicehandlerProvider = new ServicehandlerProvider(
-                lgServBDB, lgServRPS,
+        rpcRegistrations.add(servicehandler.getRegisteredRpc());
+        servicehandlerProvider = new ServiceHandlerProvider(
+                lgServBDB,
                 lgServNS, serviceDataStoreOperations, pceListenerImpl,
-                rendererListenerImpl, networkModelListenerImpl, lgServBNPS,
-                servicehandler,
+                rendererNotificationHandler, networkModelNotificationHandler,
                 new ServiceListener(
                     servicehandler, serviceDataStoreOperations, lgServBNPS));
         if (activateTapi) {
             LOG.info("Creating tapi beans ...");
             TapiLink tapiLink = new TapiLinkImpl(networkTransaction);
-            new TapiNetworkUtilsImpl(networkTransaction, tapiLink);
+            new TapiNetworkUtilsImpl(lgServRPS, networkTransaction, tapiLink);
             tapiProvider = initTapi(
                     lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
-                    new TapiNetworkModelListenerImpl(
+                    new TapiNetworkModelNotificationHandler(
                         networkTransaction, lgServBNPS),
                     tapiLink,
                     new TapiNetworkModelServiceImpl(
                         networkTransaction, deviceTransactionManager, tapiLink,
                         lgServBNPS));
+            rpcRegistrations.addAll(tapiProvider.getRegisteredRpcs());
         }
         if (activateNbiNotification) {
             LOG.info("Creating nbi-notifications beans ...");
             nbiNotificationsProvider = new NbiNotificationsProvider(
-                    null, null, lgServRPS,
-                    lgServNS, lightyServices.getAdapterContext().currentSerializer(),
-                    networkTransaction);
+                    lgServRPS, lgServNS,
+                    lightyServices.getAdapterContext().currentSerializer(),
+                    networkTransaction, null);
         }
     }
 
@@ -236,16 +234,14 @@ 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;
     }
@@ -253,29 +249,36 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
     private TapiProvider initTapi(
             LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
             NetworkTransactionService networkTransactionService, ServiceDataStoreOperations serviceDataStoreOperations,
-            TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl, TapiLink tapiLink,
+            TapiNetworkModelNotificationHandler tapiNetworkModelNotificationHandler, TapiLink tapiLink,
             TapiNetworkModelService tapiNetworkModelService) {
         return new TapiProvider(
             lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
             lightyServices.getNotificationService(), lightyServices.getBindingNotificationPublishService(),
             networkTransactionService, servicehandler, serviceDataStoreOperations,
-            new TapiNetworkUtilsImpl(networkTransactionService, tapiLink),
-            tapiNetworkModelListenerImpl, tapiNetworkModelService);
+            tapiNetworkModelNotificationHandler, tapiNetworkModelService);
     }
 
-    private RendererProvider initRenderer(
+    private void initRenderer(
             LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
             DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
             PortMapping portMapping) {
-        return new RendererProvider(
-            lightyServices.getRpcProviderService(), deviceRendererService,
-            otnDeviceRendererService,
-            new DeviceRendererRPCImpl(deviceRendererService, otnDeviceRendererService),
+        rpcRegistrations.add(
+            new DeviceRendererRPCImpl(
+                    lightyServices.getRpcProviderService(),
+                    deviceRendererService,
+                    otnDeviceRendererService)
+                .getRegisteredRpc());
+        rpcRegistrations.add(
             new TransportPCEServicePathRPCImpl(
-                new RendererServiceOperationsImpl(
-                    deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
-                    lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
-                    portMapping)));
+                    new RendererServiceOperationsImpl(
+                            deviceRendererService,
+                            otnDeviceRendererService,
+                            olmPowerServiceRpc,
+                            lightyServices.getBindingDataBroker(),
+                            lightyServices.getBindingNotificationPublishService(),
+                            portMapping),
+                    lightyServices.getRpcProviderService())
+                .getRegisteredRpc());
     }
 
     private OpenRoadmInterfaceFactory initOpenRoadmFactory(