Openroadm Xpdr link TAPI listener
[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.rev190531.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         MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
145         OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils);
146         PortMapping portMapping = initPortMapping(lightyServices, openRoadmInterfaces);
147         NetworkModelService networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl,
148                 portMapping, lightyServices.getBindingNotificationPublishService());
149         FrequenciesService networkModelWavelengthService =
150                 new FrequenciesServiceImpl(lightyServices.getBindingDataBroker());
151         NetConfTopologyListener netConfTopologyListener = new NetConfTopologyListener(networkModelService,
152                 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
153         PortMappingListener portMappingListener = new PortMappingListener(networkModelService);
154         networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
155                 lightyServices.getRpcProviderService(), networkutilsServiceImpl, netConfTopologyListener,
156                 lightyServices.getNotificationService(), networkModelWavelengthService, portMappingListener);
157
158         LOG.info("Creating PCE beans ...");
159         // TODO: pass those parameters through command line
160         GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
161                 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
162         PathComputationService pathComputationService = new PathComputationServiceImpl(
163                 networkTransaction,
164                 lightyServices.getBindingNotificationPublishService(),
165                 gnpyConsumer,
166                 portMapping
167                 );
168         pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
169
170         LOG.info("Creating OLM beans ...");
171         CrossConnect crossConnect = initCrossConnect(mappingUtils);
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, networkModelService);
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         R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
214             deviceTransactionManager, tapiLink);
215         TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
216                 .getBindingDataBroker());
217         TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
218         TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
219                 .getBindingDataBroker());
220         TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
221                 networkTransaction, tapiLink);
222         TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
223             tapilinkDiscoveryImpl, networkTransaction, tapiLink);
224         TapiNetconfTopologyListener tapiNetConfTopologyListener =
225                 new TapiNetconfTopologyListener(tapiNetworkModelService);
226         TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
227         TapiPortMappingListener tapiPortMappingListener =
228             new TapiPortMappingListener(tapiNetworkModelService);
229
230         tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
231             tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
232             tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService(),
233             orLinkListener);
234         if (activateNbiNotification) {
235             LOG.info("Creating nbi-notifications beans ...");
236             nbiNotificationsProvider = new NbiNotificationsProvider(
237                 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
238                 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
239         }
240     }
241
242     @Override
243     protected boolean initProcedure() {
244         LOG.info("Initializing PCE provider ...");
245         pceProvider.init();
246         LOG.info("Initializing network-model provider ...");
247         networkModelProvider.init();
248         LOG.info("Initializing OLM provider ...");
249         olmProvider.init();
250         LOG.info("Initializing renderer provider ...");
251         rendererProvider.init();
252         LOG.info("Initializing service-handler provider ...");
253         servicehandlerProvider.init();
254         LOG.info("Initializing tapi provider ...");
255         tapiProvider.init();
256         if (nbiNotificationsProvider != null) {
257             LOG.info("Initializing nbi-notifications provider ...");
258             nbiNotificationsProvider.init();
259         }
260         LOG.info("Init done.");
261         return true;
262     }
263
264     @Override
265     protected boolean stopProcedure() {
266         nbiNotificationsProvider.close();
267         LOG.info("Shutting down nbi-notifications provider ...");
268         tapiProvider.close();
269         LOG.info("Shutting down service-handler provider ...");
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         networkTransaction.close();
281         deviceTransactionManager.preDestroy();
282         LOG.info("Shutdown done.");
283         return true;
284     }
285
286     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
287                                   NetworkTransactionService networkTransactionService,
288                                   ServiceDataStoreOperations serviceDataStoreOperations,
289                                   TapiNetconfTopologyListener tapiNetConfTopologyListener,
290                                   TapiPortMappingListener tapiPortMappingListener,
291                                   TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
292                                   TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
293                                   TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
294                                   NotificationService notificationService, TapiOrLinkListener orLinkListener) {
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     }
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(), deviceRendererRPC,
311                 rendererServiceOperations);
312     }
313
314     private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
315             OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
316         OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
317         OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
318         OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
319         OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
320                 openRoadmInterfaces);
321         OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
322             openRoadmInterfaces);
323         return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
324             openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
325     }
326
327     private PortMapping initPortMapping(LightyServices lightyServices, OpenRoadmInterfaces openRoadmInterfaces) {
328         PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
329             deviceTransactionManager, openRoadmInterfaces);
330         PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
331                 deviceTransactionManager, openRoadmInterfaces);
332         PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
333                 deviceTransactionManager, openRoadmInterfaces);
334         return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
335             portMappingVersion221, portMappingVersion121);
336     }
337
338     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils) {
339         OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
340                 deviceTransactionManager);
341         OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
342                 deviceTransactionManager);
343         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
344             deviceTransactionManager);
345         return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
346                 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
347     }
348
349     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
350         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
351         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
352         CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
353         return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
354             crossConnectImpl710);
355     }
356 }