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