Remove renderer-blueprint
[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.crossconnect.CrossConnectImpl710;
20 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
21 import org.opendaylight.transportpce.common.mapping.MappingUtils;
22 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
23 import org.opendaylight.transportpce.common.mapping.PortMapping;
24 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
25 import org.opendaylight.transportpce.common.mapping.PortMappingVersion121;
26 import org.opendaylight.transportpce.common.mapping.PortMappingVersion221;
27 import org.opendaylight.transportpce.common.mapping.PortMappingVersion710;
28 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
29 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
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.OpenRoadmInterfaceFactory;
58 // Adding OTN interface
59 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
60 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
61 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
62 // Add OTN
63 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
64 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
65 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
66 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
67 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
68 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
69 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
70 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
71 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
72 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
73 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
74 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
75 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
76 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
77 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
78 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
79 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
80 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
81 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
82 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
83 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
84 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
85 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
86 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
87 import org.opendaylight.transportpce.tapi.utils.TapiLink;
88 import org.opendaylight.transportpce.tapi.utils.TapiListener;
89 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
90 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.TransportpceRendererService;
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.rev211210.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     // service-handler beans
114     private final ServicehandlerProvider servicehandlerProvider;
115     // T-api
116     private TapiProvider tapiProvider;
117     // nbi-notifications beans
118     private NbiNotificationsProvider nbiNotificationsProvider;
119     /**
120      * List of publisher topics.
121      */
122     private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
123             "ServiceHandler", "RendererListener");
124     private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
125
126     public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
127                             String olmtimer1, String olmtimer2) {
128         LOG.info("Initializing transaction providers ...");
129         deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
130                 MAX_DURATION_TO_SUBMIT_TRANSACTION);
131         networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
132
133         LOG.info("Creating network-model beans ...");
134         R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
135                 deviceTransactionManager, networkTransaction);
136         PortMapping portMapping = initPortMapping(lightyServices);
137         NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
138                 deviceTransactionManager, networkTransaction, portMapping,
139                 lightyServices.getBindingNotificationPublishService());
140         FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
141                 lightyServices.getBindingDataBroker());
142         new NetConfTopologyListener(networkModelService,
143                 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
144         new PortMappingListener(networkModelService);
145         networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
146                 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
147                 lightyServices.getNotificationService(), networkModelWavelengthService);
148
149         LOG.info("Creating PCE beans ...");
150         // TODO: pass those parameters through command line
151         GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
152                 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
153         PathComputationService pathComputationService = new PathComputationServiceImpl(
154                 networkTransaction,
155                 lightyServices.getBindingNotificationPublishService(),
156                 gnpyConsumer,
157                 portMapping
158                 );
159         pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
160
161         LOG.info("Creating OLM beans ...");
162         MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
163         CrossConnect crossConnect = initCrossConnect(mappingUtils);
164         OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
165         PowerMgmt powerMgmt = new PowerMgmtImpl(openRoadmInterfaces, crossConnect, deviceTransactionManager,
166                 portMapping, Long.valueOf(olmtimer1).longValue(), Long.valueOf(olmtimer2).longValue());
167         OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
168                 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
169         TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
170         olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
171
172         LOG.info("Creating renderer beans ...");
173         initOpenRoadmFactory(mappingUtils, openRoadmInterfaces, portMapping);
174         DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
175                 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaces, crossConnect,
176                 mappingUtils, portMapping);
177         OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(crossConnect,
178                 openRoadmInterfaces, deviceTransactionManager, mappingUtils, portMapping);
179         rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
180                 otnDeviceRendererService, portMapping);
181
182         LOG.info("Creating service-handler beans ...");
183         RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
184                 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
185                 lightyServices.getBindingNotificationPublishService(), portMapping);
186         ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
187                 lightyServices.getBindingDataBroker());
188         RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
189             lightyServices.getBindingNotificationPublishService(), networkModelService);
190         PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
191             lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
192         NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
193                 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
194         ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
195             pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
196             pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
197         ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
198                 lightyServices.getBindingNotificationPublishService());
199         servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
200                 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
201                 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
202                 networkModelListenerImpl, servicehandler);
203         if (activateTapi) {
204             LOG.info("Creating tapi beans ...");
205             TapiLink tapiLink = new TapiLink(networkTransaction);
206             R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
207                     deviceTransactionManager, tapiLink);
208             TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
209                     .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
210             TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
211             TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
212                     lightyServices.getBindingDataBroker());
213             TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
214                     networkTransaction, tapiLink);
215             TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
216                     tapilinkDiscoveryImpl, networkTransaction, tapiLink,
217                     lightyServices.getBindingNotificationPublishService());
218             TapiNetconfTopologyListener tapiNetConfTopologyListener =
219                     new TapiNetconfTopologyListener(tapiNetworkModelService);
220             TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
221             TapiPortMappingListener tapiPortMappingListener =
222                     new TapiPortMappingListener(tapiNetworkModelService);
223             TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
224                     new TapiNetworkModelListenerImpl(networkTransaction,
225                             lightyServices.getBindingNotificationPublishService());
226
227             tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
228                     tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
229                     tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
230                     lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
231         }
232         if (activateNbiNotification) {
233             LOG.info("Creating nbi-notifications beans ...");
234             nbiNotificationsProvider = new NbiNotificationsProvider(
235                     publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
236                     lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
237                     networkTransaction);
238         }
239     }
240
241     @Override
242     protected boolean initProcedure() {
243         LOG.info("Initializing PCE provider ...");
244         pceProvider.init();
245         LOG.info("Initializing service-handler provider ...");
246         servicehandlerProvider.init();
247         if (tapiProvider != null) {
248             LOG.info("Initializing tapi provider ...");
249             tapiProvider.init();
250         }
251         if (nbiNotificationsProvider != null) {
252             LOG.info("Initializing nbi-notifications provider ...");
253             nbiNotificationsProvider.init();
254         }
255         LOG.info("Init done.");
256         return true;
257     }
258
259     @Override
260     protected boolean stopProcedure() {
261         if (nbiNotificationsProvider != null) {
262             nbiNotificationsProvider.close();
263             LOG.info("Shutting down nbi-notifications provider ...");
264         }
265         if (tapiProvider != null) {
266             tapiProvider.close();
267             LOG.info("Shutting down service-handler provider ...");
268         }
269         servicehandlerProvider.close();
270         LOG.info("Shutting down renderer provider ...");
271         rendererProvider.close();
272         LOG.info("Shutting down OLM provider ...");
273         olmProvider.close();
274         LOG.info("Shutting down network-model provider ...");
275         networkModelProvider.close();
276         LOG.info("Shutting down PCE provider ...");
277         pceProvider.close();
278         LOG.info("Shutting down transaction providers ...");
279         deviceTransactionManager.preDestroy();
280         LOG.info("Shutdown done.");
281         return true;
282     }
283
284     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
285                                   NetworkTransactionService networkTransactionService,
286                                   ServiceDataStoreOperations serviceDataStoreOperations,
287                                   TapiNetconfTopologyListener tapiNetConfTopologyListener,
288                                   TapiPortMappingListener tapiPortMappingListener,
289                                   TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
290                                   TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
291                                   TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
292                                   NotificationService notificationService, TapiOrLinkListener orLinkListener,
293                                   TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
294         return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
295             servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
296             tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
297             rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
298             tapiNetworkModelListenerImpl);
299     }
300
301     private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
302             DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
303             PortMapping portMapping) {
304         DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
305                 otnDeviceRendererService);
306         RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
307                 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
308                 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
309                 portMapping);
310         return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererService,
311                 otnDeviceRendererService, rendererServiceOperations);
312     }
313
314     private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
315             OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
316         return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
317     }
318
319     private PortMapping initPortMapping(LightyServices lightyServices) {
320         PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
321                 deviceTransactionManager);
322         PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
323                 deviceTransactionManager);
324         PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
325                 deviceTransactionManager);
326         return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
327             portMappingVersion221, portMappingVersion121);
328     }
329
330     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
331         OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
332                 deviceTransactionManager);
333         OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
334                 deviceTransactionManager, portMapping);
335         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
336                 deviceTransactionManager, portMapping);
337         return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
338                 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
339
340     }
341
342     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
343         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
344         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
345         CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
346         return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
347             crossConnectImpl710);
348     }
349 }