Remove useless & outdated lighty javadoc comments
[transportpce.git] / lighty / src / main / java / io / lighty / controllers / tpce / module / TransportPCEImpl.java
1 /*
2  * Copyright (c) 2018 Pantheon Technologies s.r.o. All Rights Reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at https://www.eclipse.org/legal/epl-v10.html
7  */
8 package io.lighty.controllers.tpce.module;
9
10 import io.lighty.core.controller.api.AbstractLightyModule;
11 import io.lighty.core.controller.api.LightyServices;
12 import java.util.Arrays;
13 import java.util.List;
14 import org.opendaylight.mdsal.binding.api.NotificationService;
15 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
16 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
17 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
18 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221;
19 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
20 import org.opendaylight.transportpce.common.mapping.MappingUtils;
21 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
22 import org.opendaylight.transportpce.common.mapping.PortMapping;
23 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
24 import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
25 import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
26 import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
27 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
28 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
29 import org.opendaylight.transportpce.common.network.RequestProcessor;
30 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
31 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
32 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
33 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
34 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
35 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
36 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
37 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
38 import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
39 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
40 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
41 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
42 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
43 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
44 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
45 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
46 import org.opendaylight.transportpce.olm.OlmProvider;
47 import org.opendaylight.transportpce.olm.power.PowerMgmt;
48 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
49 import org.opendaylight.transportpce.olm.service.OlmPowerService;
50 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
51 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
52 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
53 import org.opendaylight.transportpce.pce.impl.PceProvider;
54 import org.opendaylight.transportpce.pce.service.PathComputationService;
55 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
56 import org.opendaylight.transportpce.renderer.RendererProvider;
57 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121;
58 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
59 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface710;
60 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
61 // Adding OTN interface
62 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface221;
63 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
64 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
65 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
66 // Add OTN
67 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
68 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
69 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
70 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
71 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
72 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
73 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
74 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
75 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
76 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
77 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
78 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
79 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
80 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
81 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
82 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
83 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
84 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
85 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
86 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
87 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
88 import org.opendaylight.transportpce.tapi.utils.TapiListener;
89 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
90 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.TransportpceOlmService;
91 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
92 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.OrgOpenroadmServiceService;
93 import org.slf4j.Logger;
94 import org.slf4j.LoggerFactory;
95
96
97 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
98     private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
99     private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
100     // transaction beans
101     // cannot use interface for DeviceTransactionManagerImpl
102     // because implementation has additional public methods ...
103     private final DeviceTransactionManagerImpl deviceTransactionManager;
104     private final NetworkTransactionService networkTransaction;
105     // pce beans
106     private final PceProvider pceProvider;
107     // network model beans
108     private final NetworkModelProvider networkModelProvider;
109     // OLM beans
110     private final OlmProvider olmProvider;
111     // renderer beans
112     private final RendererProvider rendererProvider;
113     // T-api
114     private final TapiProvider tapiProvider;
115     // service-handler beans
116     private final ServicehandlerProvider servicehandlerProvider;
117     // nbi-notifications beans
118     private NbiNotificationsProvider nbiNotificationsProvider;
119     /**
120      * List of publisher topics.
121      */
122     private final List<String> publisherTopicList =
123             Arrays.asList("PceListener", "ServiceHandlerOperations", "ServiceHandler", "RendererListener");
124
125     public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification) {
126         LOG.info("Initializing transaction providers ...");
127         deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
128                 MAX_DURATION_TO_SUBMIT_TRANSACTION);
129         RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
130         networkTransaction = new NetworkTransactionImpl(requestProcessor);
131
132         LOG.info("Creating network-model beans ...");
133         R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
134                 deviceTransactionManager, networkTransaction);
135         TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
136                 lightyServices.getBindingDataBroker());
137         MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
138         OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
139         PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
140         NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
141                 portMapping, lightyServices.getBindingNotificationPublishService());
142         FrequenciesService networkModelWavelengthService =
143                 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
144         NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
145                 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
146         PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
147         networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
148                 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
149                 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
150
151         LOG.info("Creating PCE beans ...");
152         // TODO: pass those parameters through command line
153         GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
154                 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
155         PathComputationService pathComputationService = new PathComputationServiceImpl(
156                 networkTransaction,
157                 lightyServices.getBindingNotificationPublishService(),
158                 gnpyConsumer,
159                 portMapping
160                 );
161         pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
162
163         LOG.info("Creating OLM beans ...");
164         CrossConnect crossConnect = initCrossConnect(mappingUtils);
165         PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
166                 crossConnect, deviceTransactionManager);
167         OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
168                 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
169         olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
170         TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
171
172         LOG.info("Creating renderer beans ...");
173         OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
174                 portMapping);
175         DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
176                 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
177                 openRoadmInterfaces, crossConnect, portMapping, networkModelService);
178         OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
179                 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
180         rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
181                 otnDeviceRendererService);
182
183         LOG.info("Creating service-handler beans ...");
184         RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
185                 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
186                 lightyServices.getBindingNotificationPublishService());
187         ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
188                 lightyServices.getBindingDataBroker());
189         RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
190             lightyServices.getBindingNotificationPublishService());
191         PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
192             lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
193         NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
194                 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
195         ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
196             pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
197             pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations, "N/A");
198         servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
199                 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
200                 serviceDataStoreOperations, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl,
201                 servicehandler);
202
203         LOG.info("Creating tapi beans ...");
204         R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(lightyServices.getBindingDataBroker(),
205             deviceTransactionManager);
206         TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
207                 .getBindingDataBroker());
208         TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
209         TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
210                 .getBindingDataBroker());
211         TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
212                 networkTransaction);
213         TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
214             tapilinkDiscoveryImpl, networkTransaction);
215         TapiNetconfTopologyListener tapiNetConfTopologyListener =
216                 new TapiNetconfTopologyListener(tapiNetworkModelService);
217         TapiPortMappingListener tapiPortMappingListener =
218             new TapiPortMappingListener(tapiNetworkModelService);
219
220         tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
221                 tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
222                 tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService());
223         if (activateNbiNotification) {
224             LOG.info("Creating nbi-notifications beans ...");
225             nbiNotificationsProvider = new NbiNotificationsProvider(
226                     publisherTopicList, null, null, lightyServices.getRpcProviderService(),
227                     lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
228         }
229     }
230
231     @Override
232     protected boolean initProcedure() {
233         LOG.info("Initializing PCE provider ...");
234         pceProvider.init();
235         LOG.info("Initializing network-model provider ...");
236         networkModelProvider.init();
237         LOG.info("Initializing OLM provider ...");
238         olmProvider.init();
239         LOG.info("Initializing renderer provider ...");
240         rendererProvider.init();
241         LOG.info("Initializing service-handler provider ...");
242         servicehandlerProvider.init();
243         LOG.info("Initializing tapi provider ...");
244         tapiProvider.init();
245         if (nbiNotificationsProvider != null) {
246             LOG.info("Initializing nbi-notifications provider ...");
247             nbiNotificationsProvider.init();
248         }
249         LOG.info("Init done.");
250         return true;
251     }
252
253     @Override
254     protected boolean stopProcedure() {
255         nbiNotificationsProvider.close();
256         LOG.info("Shutting down nbi-notifications provider ...");
257         tapiProvider.close();
258         LOG.info("Shutting down service-handler provider ...");
259         servicehandlerProvider.close();
260         LOG.info("Shutting down renderer provider ...");
261         rendererProvider.close();
262         LOG.info("Shutting down OLM provider ...");
263         olmProvider.close();
264         LOG.info("Shutting down network-model provider ...");
265         networkModelProvider.close();
266         LOG.info("Shutting down PCE provider ...");
267         pceProvider.close();
268         LOG.info("Shutting down transaction providers ...");
269         networkTransaction.close();
270         deviceTransactionManager.preDestroy();
271         LOG.info("Shutdown done.");
272         return true;
273     }
274
275     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
276                                   NetworkTransactionService networkTransactionService,
277                                   ServiceDataStoreOperations serviceDataStoreOperations,
278                                   TapiNetconfTopologyListener tapiNetConfTopologyListener,
279                                   TapiPortMappingListener tapiPortMappingListener,
280                                   TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
281                                   TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
282                                   TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
283                                   NotificationService notificationService) {
284         return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
285             servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
286             tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
287             rendererListenerImpl, serviceHandlerListenerImpl, notificationService);
288     }
289
290     private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
291             DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService) {
292         DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
293                 otnDeviceRendererService);
294         RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
295                 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
296                 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
297         return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
298                 rendererServiceOperations);
299     }
300
301     private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
302             OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
303         OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
304         OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
305         OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
306         OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
307                 openRoadmInterfaces);
308         return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
309             openRoadmInterface710, openRoadmOtnInterface221);
310     }
311
312     private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
313         PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
314             deviceTransactionManager, openRoadmInterfaces);
315         PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
316                 deviceTransactionManager, openRoadmInterfaces);
317         PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
318                 deviceTransactionManager, openRoadmInterfaces);
319         return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
320             portMappingVersion221, portMappingVersion121);
321     }
322
323     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
324         OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
325                 deviceTransactionManager);
326         OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
327                 deviceTransactionManager);
328         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
329             deviceTransactionManager);
330         return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
331                 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
332     }
333
334     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
335         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
336         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
337         return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221);
338     }
339 }