Fix few code issues
[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.network.RequestProcessor;
31 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
32 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
33 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
34 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
35 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
36 import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsProvider;
37 import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener;
38 import org.opendaylight.transportpce.networkmodel.NetworkModelProvider;
39 import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl;
40 import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery;
41 import org.opendaylight.transportpce.networkmodel.listeners.PortMappingListener;
42 import org.opendaylight.transportpce.networkmodel.service.FrequenciesService;
43 import org.opendaylight.transportpce.networkmodel.service.FrequenciesServiceImpl;
44 import org.opendaylight.transportpce.networkmodel.service.NetworkModelService;
45 import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl;
46 import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl;
47 import org.opendaylight.transportpce.olm.OlmProvider;
48 import org.opendaylight.transportpce.olm.power.PowerMgmt;
49 import org.opendaylight.transportpce.olm.power.PowerMgmtImpl;
50 import org.opendaylight.transportpce.olm.service.OlmPowerService;
51 import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl;
52 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumer;
53 import org.opendaylight.transportpce.pce.gnpy.consumer.GnpyConsumerImpl;
54 import org.opendaylight.transportpce.pce.impl.PceProvider;
55 import org.opendaylight.transportpce.pce.service.PathComputationService;
56 import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl;
57 import org.opendaylight.transportpce.renderer.RendererProvider;
58 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121;
59 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
60 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface710;
61 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
62 // Adding OTN interface
63 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface221;
64 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface710;
65 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
66 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
67 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
68 // Add OTN
69 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
70 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
71 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
72 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
73 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
74 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
75 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
76 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
77 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
78 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
79 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
80 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
81 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
82 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
83 import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
84 import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
85 import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
86 import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
87 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
88 import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
89 import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
90 import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
91 import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
92 import org.opendaylight.transportpce.tapi.utils.TapiLink;
93 import org.opendaylight.transportpce.tapi.utils.TapiListener;
94 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.TransportpceNetworkutilsService;
95 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
96 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
97 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
98 import org.slf4j.Logger;
99 import org.slf4j.LoggerFactory;
100
101
102 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
103     private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
104     private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
105     // transaction beans
106     // cannot use interface for DeviceTransactionManagerImpl
107     // because implementation has additional public methods ...
108     private final DeviceTransactionManagerImpl deviceTransactionManager;
109     private final NetworkTransactionService networkTransaction;
110     // pce beans
111     private final PceProvider pceProvider;
112     // network model beans
113     private final NetworkModelProvider networkModelProvider;
114     // OLM beans
115     private final OlmProvider olmProvider;
116     // renderer beans
117     private final RendererProvider rendererProvider;
118     // T-api
119     private final TapiProvider tapiProvider;
120     // service-handler beans
121     private final ServicehandlerProvider servicehandlerProvider;
122     // nbi-notifications beans
123     private NbiNotificationsProvider nbiNotificationsProvider;
124     /**
125      * List of publisher topics.
126      */
127     private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
128             "ServiceHandler", "RendererListener");
129     private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
130
131     public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification,
132                             String olmtimer1, String olmtimer2) {
133         LOG.info("Initializing transaction providers ...");
134         deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
135                 MAX_DURATION_TO_SUBMIT_TRANSACTION);
136         RequestProcessor requestProcessor = new RequestProcessor(lightyServices.getBindingDataBroker());
137         networkTransaction = new NetworkTransactionImpl(requestProcessor);
138
139         LOG.info("Creating network-model beans ...");
140         R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
141                 deviceTransactionManager, networkTransaction);
142         TransportpceNetworkutilsService networkutilsServiceImpl = new NetworkUtilsImpl(
143                 lightyServices.getBindingDataBroker());
144         PortMapping portMapping = initPortMapping(lightyServices);
145         NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
146                 portMapping, lightyServices.getBindingNotificationPublishService());
147         FrequenciesService networkModelWavelengthService =
148                 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
149         NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
150                 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
151         PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
152         networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
153                 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
154                 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
155
156         LOG.info("Creating PCE beans ...");
157         // TODO: pass those parameters through command line
158         GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
159                 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
160         PathComputationService pathComputationService = new PathComputationServiceImpl(
161                 networkTransaction,
162                 lightyServices.getBindingNotificationPublishService(),
163                 gnpyConsumer,
164                 portMapping
165                 );
166         pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
167
168         LOG.info("Creating OLM beans ...");
169         MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
170         CrossConnect crossConnect = initCrossConnect(mappingUtils);
171         OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
172         PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
173                 crossConnect, deviceTransactionManager, olmtimer1, olmtimer2);
174         OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
175                 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
176         olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerService);
177         TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
178
179         LOG.info("Creating renderer beans ...");
180         OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
181                 portMapping);
182         DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
183                 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
184                 openRoadmInterfaces, crossConnect, portMapping);
185         OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
186                 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
187         rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
188                 otnDeviceRendererService, portMapping);
189
190         LOG.info("Creating service-handler beans ...");
191         RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
192                 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
193                 lightyServices.getBindingNotificationPublishService(), portMapping);
194         ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
195                 lightyServices.getBindingDataBroker());
196         RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
197             lightyServices.getBindingNotificationPublishService(), networkModelService);
198         PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
199             lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
200         ServiceListener serviceListener = new ServiceListener(lightyServices.getBindingDataBroker(),
201                 lightyServices.getBindingNotificationPublishService());
202         NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
203                 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
204         ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
205             pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
206             pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
207         servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
208                 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
209                 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
210                 networkModelListenerImpl, servicehandler);
211
212         LOG.info("Creating tapi beans ...");
213         TapiLink tapiLink = new TapiLink(networkTransaction);
214         R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
215             deviceTransactionManager, tapiLink);
216         TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
217                 .getBindingDataBroker());
218         TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
219         TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
220                 .getBindingDataBroker());
221         TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
222                 networkTransaction, tapiLink);
223         TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
224             tapilinkDiscoveryImpl, networkTransaction, tapiLink);
225         TapiNetconfTopologyListener tapiNetConfTopologyListener =
226                 new TapiNetconfTopologyListener(tapiNetworkModelService);
227         TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
228         TapiPortMappingListener tapiPortMappingListener =
229             new TapiPortMappingListener(tapiNetworkModelService);
230
231         tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
232             tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
233             tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService(),
234             orLinkListener);
235         if (activateNbiNotification) {
236             LOG.info("Creating nbi-notifications beans ...");
237             nbiNotificationsProvider = new NbiNotificationsProvider(
238                 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
239                 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
240         }
241     }
242
243     @Override
244     protected boolean initProcedure() {
245         LOG.info("Initializing PCE provider ...");
246         pceProvider.init();
247         LOG.info("Initializing network-model provider ...");
248         networkModelProvider.init();
249         LOG.info("Initializing OLM provider ...");
250         olmProvider.init();
251         LOG.info("Initializing renderer provider ...");
252         rendererProvider.init();
253         LOG.info("Initializing service-handler provider ...");
254         servicehandlerProvider.init();
255         LOG.info("Initializing tapi provider ...");
256         tapiProvider.init();
257         if (nbiNotificationsProvider != null) {
258             LOG.info("Initializing nbi-notifications provider ...");
259             nbiNotificationsProvider.init();
260         }
261         LOG.info("Init done.");
262         return true;
263     }
264
265     @Override
266     protected boolean stopProcedure() {
267         nbiNotificationsProvider.close();
268         LOG.info("Shutting down nbi-notifications provider ...");
269         tapiProvider.close();
270         LOG.info("Shutting down service-handler provider ...");
271         servicehandlerProvider.close();
272         LOG.info("Shutting down renderer provider ...");
273         rendererProvider.close();
274         LOG.info("Shutting down OLM provider ...");
275         olmProvider.close();
276         LOG.info("Shutting down network-model provider ...");
277         networkModelProvider.close();
278         LOG.info("Shutting down PCE provider ...");
279         pceProvider.close();
280         LOG.info("Shutting down transaction providers ...");
281         networkTransaction.close();
282         deviceTransactionManager.preDestroy();
283         LOG.info("Shutdown done.");
284         return true;
285     }
286
287     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
288                                   NetworkTransactionService networkTransactionService,
289                                   ServiceDataStoreOperations serviceDataStoreOperations,
290                                   TapiNetconfTopologyListener tapiNetConfTopologyListener,
291                                   TapiPortMappingListener tapiPortMappingListener,
292                                   TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
293                                   TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
294                                   TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
295                                   NotificationService notificationService, TapiOrLinkListener orLinkListener) {
296         return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
297             servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
298             tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
299             rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener);
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         OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
318         OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
319         OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
320         OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
321                 openRoadmInterfaces);
322         OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
323             openRoadmInterfaces);
324         return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
325             openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
326     }
327
328     private PortMapping initPortMapping(LightyServices lightyServices) {
329         PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
330                 deviceTransactionManager);
331         PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
332                 deviceTransactionManager);
333         PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
334                 deviceTransactionManager);
335         return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
336             portMappingVersion221, portMappingVersion121);
337     }
338
339     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
340         OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
341                 deviceTransactionManager);
342         OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
343                 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion221());
344         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
345                 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion710());
346         return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
347                 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
348     }
349
350     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
351         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
352         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
353         CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
354         return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
355             crossConnectImpl710);
356     }
357 }