Remove pce-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.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 service-handler provider ...");
244         servicehandlerProvider.init();
245         if (tapiProvider != null) {
246             LOG.info("Initializing tapi provider ...");
247             tapiProvider.init();
248         }
249         if (nbiNotificationsProvider != null) {
250             LOG.info("Initializing nbi-notifications provider ...");
251             nbiNotificationsProvider.init();
252         }
253         LOG.info("Init done.");
254         return true;
255     }
256
257     @Override
258     protected boolean stopProcedure() {
259         if (nbiNotificationsProvider != null) {
260             nbiNotificationsProvider.close();
261             LOG.info("Shutting down nbi-notifications provider ...");
262         }
263         if (tapiProvider != null) {
264             tapiProvider.close();
265             LOG.info("Shutting down service-handler provider ...");
266         }
267         servicehandlerProvider.close();
268         LOG.info("Shutting down renderer provider ...");
269         rendererProvider.close();
270         LOG.info("Shutting down OLM provider ...");
271         olmProvider.close();
272         LOG.info("Shutting down network-model provider ...");
273         networkModelProvider.close();
274         LOG.info("Shutting down PCE provider ...");
275         pceProvider.close();
276         LOG.info("Shutting down transaction providers ...");
277         deviceTransactionManager.preDestroy();
278         LOG.info("Shutdown done.");
279         return true;
280     }
281
282     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
283                                   NetworkTransactionService networkTransactionService,
284                                   ServiceDataStoreOperations serviceDataStoreOperations,
285                                   TapiNetconfTopologyListener tapiNetConfTopologyListener,
286                                   TapiPortMappingListener tapiPortMappingListener,
287                                   TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
288                                   TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
289                                   TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
290                                   NotificationService notificationService, TapiOrLinkListener orLinkListener,
291                                   TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
292         return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
293             servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
294             tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
295             rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
296             tapiNetworkModelListenerImpl);
297     }
298
299     private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
300             DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
301             PortMapping portMapping) {
302         DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
303                 otnDeviceRendererService);
304         RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
305                 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
306                 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
307                 portMapping);
308         return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererService,
309                 otnDeviceRendererService, rendererServiceOperations);
310     }
311
312     private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
313             OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
314         return new OpenRoadmInterfaceFactory(mappingUtils, portMapping, openRoadmInterfaces);
315     }
316
317     private PortMapping initPortMapping(LightyServices lightyServices) {
318         PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
319                 deviceTransactionManager);
320         PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
321                 deviceTransactionManager);
322         PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
323                 deviceTransactionManager);
324         return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
325             portMappingVersion221, portMappingVersion121);
326     }
327
328     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
329         OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
330                 deviceTransactionManager);
331         OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
332                 deviceTransactionManager, portMapping);
333         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
334                 deviceTransactionManager, portMapping);
335         return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
336                 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
337
338     }
339
340     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
341         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
342         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
343         CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
344         return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
345             crossConnectImpl710);
346     }
347 }