Merge "Fix failure in nbinotifications functional tests"
[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     // service-handler beans
119     private final ServicehandlerProvider servicehandlerProvider;
120     // T-api
121     private TapiProvider tapiProvider;
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, boolean activateTapi,
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         if (activateTapi) {
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         }
236         if (activateNbiNotification) {
237             LOG.info("Creating nbi-notifications beans ...");
238             nbiNotificationsProvider = new NbiNotificationsProvider(
239                 publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
240                 lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer());
241         }
242     }
243
244     @Override
245     protected boolean initProcedure() {
246         LOG.info("Initializing PCE provider ...");
247         pceProvider.init();
248         LOG.info("Initializing network-model provider ...");
249         networkModelProvider.init();
250         LOG.info("Initializing OLM provider ...");
251         olmProvider.init();
252         LOG.info("Initializing renderer provider ...");
253         rendererProvider.init();
254         LOG.info("Initializing service-handler provider ...");
255         servicehandlerProvider.init();
256         if (tapiProvider != null) {
257             LOG.info("Initializing tapi provider ...");
258             tapiProvider.init();
259         }
260         if (nbiNotificationsProvider != null) {
261             LOG.info("Initializing nbi-notifications provider ...");
262             nbiNotificationsProvider.init();
263         }
264         LOG.info("Init done.");
265         return true;
266     }
267
268     @Override
269     protected boolean stopProcedure() {
270         if (nbiNotificationsProvider != null) {
271             nbiNotificationsProvider.close();
272             LOG.info("Shutting down nbi-notifications provider ...");
273         }
274         if (tapiProvider != null) {
275             tapiProvider.close();
276             LOG.info("Shutting down service-handler provider ...");
277         }
278         servicehandlerProvider.close();
279         LOG.info("Shutting down renderer provider ...");
280         rendererProvider.close();
281         LOG.info("Shutting down OLM provider ...");
282         olmProvider.close();
283         LOG.info("Shutting down network-model provider ...");
284         networkModelProvider.close();
285         LOG.info("Shutting down PCE provider ...");
286         pceProvider.close();
287         LOG.info("Shutting down transaction providers ...");
288         networkTransaction.close();
289         deviceTransactionManager.preDestroy();
290         LOG.info("Shutdown done.");
291         return true;
292     }
293
294     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
295                                   NetworkTransactionService networkTransactionService,
296                                   ServiceDataStoreOperations serviceDataStoreOperations,
297                                   TapiNetconfTopologyListener tapiNetConfTopologyListener,
298                                   TapiPortMappingListener tapiPortMappingListener,
299                                   TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
300                                   TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
301                                   TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
302                                   NotificationService notificationService, TapiOrLinkListener orLinkListener) {
303         return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
304             servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
305             tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
306             rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener);
307     }
308
309     private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
310             DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
311             PortMapping portMapping) {
312         DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
313                 otnDeviceRendererService);
314         RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
315                 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
316                 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
317                 portMapping);
318         return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
319                 rendererServiceOperations);
320     }
321
322     private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
323             OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
324         OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
325         OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
326         OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
327         OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
328                 openRoadmInterfaces);
329         OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
330             openRoadmInterfaces);
331         return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
332             openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
333     }
334
335     private PortMapping initPortMapping(LightyServices lightyServices) {
336         PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
337                 deviceTransactionManager);
338         PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
339                 deviceTransactionManager);
340         PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
341                 deviceTransactionManager);
342         return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
343             portMappingVersion221, portMappingVersion121);
344     }
345
346     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
347         OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
348                 deviceTransactionManager);
349         OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
350                 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion221());
351         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
352                 deviceTransactionManager, portMapping, portMapping.getPortMappingVersion710());
353         return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
354                 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
355     }
356
357     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
358         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
359         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
360         CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
361         return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
362             crossConnectImpl710);
363     }
364 }