Remove networkmodel-blueprint.xml
[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.OpenRoadmInterface121;
58 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221;
59 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface710;
60 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
61 // Adding OTN interface
62 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface221;
63 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmOtnInterface710;
64 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererService;
65 import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl;
66 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererService;
67 // Add OTN
68 import org.opendaylight.transportpce.renderer.provisiondevice.OtnDeviceRendererServiceImpl;
69 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperations;
70 import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl;
71 import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl;
72 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerImpl;
73 import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider;
74 import org.opendaylight.transportpce.servicehandler.listeners.NetworkModelListenerImpl;
75 import org.opendaylight.transportpce.servicehandler.listeners.PceListenerImpl;
76 import org.opendaylight.transportpce.servicehandler.listeners.RendererListenerImpl;
77 import org.opendaylight.transportpce.servicehandler.listeners.ServiceListener;
78 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
79 import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
80 import org.opendaylight.transportpce.tapi.R2RTapiLinkDiscovery;
81 import org.opendaylight.transportpce.tapi.impl.TapiProvider;
82 import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
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.olm.rev210618.TransportpceOlmService;
95 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
96 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
97 import org.slf4j.Logger;
98 import org.slf4j.LoggerFactory;
99
100
101 public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE {
102     private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class);
103     private static final long MAX_DURATION_TO_SUBMIT_TRANSACTION = 1500;
104     // transaction beans
105     // cannot use interface for DeviceTransactionManagerImpl
106     // because implementation has additional public methods ...
107     private final DeviceTransactionManagerImpl deviceTransactionManager;
108     private final NetworkTransactionService networkTransaction;
109     // pce beans
110     private final PceProvider pceProvider;
111     // network model beans
112     private final NetworkModelProvider networkModelProvider;
113     // OLM beans
114     private final OlmProvider olmProvider;
115     // renderer beans
116     private final RendererProvider rendererProvider;
117     // service-handler beans
118     private final ServicehandlerProvider servicehandlerProvider;
119     // T-api
120     private TapiProvider tapiProvider;
121     // nbi-notifications beans
122     private NbiNotificationsProvider nbiNotificationsProvider;
123     /**
124      * List of publisher topics.
125      */
126     private final List<String> publisherServiceList = Arrays.asList("PceListener", "ServiceHandlerOperations",
127             "ServiceHandler", "RendererListener");
128     private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
129
130     public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
131                             String olmtimer1, String olmtimer2) {
132         LOG.info("Initializing transaction providers ...");
133         deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
134                 MAX_DURATION_TO_SUBMIT_TRANSACTION);
135         networkTransaction = new NetworkTransactionImpl(lightyServices.getBindingDataBroker());
136
137         LOG.info("Creating network-model beans ...");
138         R2RLinkDiscovery linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getBindingDataBroker(),
139                 deviceTransactionManager, networkTransaction);
140         PortMapping portMapping = initPortMapping(lightyServices);
141         NetworkModelService networkModelService = new NetworkModelServiceImpl(lightyServices.getBindingDataBroker(),
142                 deviceTransactionManager, networkTransaction, portMapping,
143                 lightyServices.getBindingNotificationPublishService());
144         FrequenciesService networkModelWavelengthService = new FrequenciesServiceImpl(
145                 lightyServices.getBindingDataBroker());
146         new NetConfTopologyListener(networkModelService,
147                 lightyServices.getBindingDataBroker(), deviceTransactionManager, portMapping);
148         new PortMappingListener(networkModelService);
149         networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getBindingDataBroker(),
150                 lightyServices.getRpcProviderService(), networkModelService, deviceTransactionManager, portMapping,
151                 lightyServices.getNotificationService(), networkModelWavelengthService);
152
153         LOG.info("Creating PCE beans ...");
154         // TODO: pass those parameters through command line
155         GnpyConsumer gnpyConsumer = new GnpyConsumerImpl("http://127.0.0.1:8008",
156                 "gnpy", "gnpy", lightyServices.getAdapterContext().currentSerializer());
157         PathComputationService pathComputationService = new PathComputationServiceImpl(
158                 networkTransaction,
159                 lightyServices.getBindingNotificationPublishService(),
160                 gnpyConsumer,
161                 portMapping
162                 );
163         pceProvider = new PceProvider(lightyServices.getRpcProviderService(), pathComputationService);
164
165         LOG.info("Creating OLM beans ...");
166         MappingUtils mappingUtils = new MappingUtilsImpl(lightyServices.getBindingDataBroker());
167         CrossConnect crossConnect = initCrossConnect(mappingUtils);
168         OpenRoadmInterfaces openRoadmInterfaces = initOpenRoadmInterfaces(mappingUtils, portMapping);
169         PowerMgmt powerMgmt = new PowerMgmtImpl(lightyServices.getBindingDataBroker(), openRoadmInterfaces,
170                 crossConnect, deviceTransactionManager, portMapping, olmtimer1, olmtimer2);
171         OlmPowerService olmPowerService = new OlmPowerServiceImpl(lightyServices.getBindingDataBroker(), powerMgmt,
172                 deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces);
173         TransportpceOlmService olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService);
174         olmProvider = new OlmProvider(lightyServices.getRpcProviderService(), olmPowerServiceRpc);
175
176         LOG.info("Creating renderer beans ...");
177         OpenRoadmInterfaceFactory openRoadmInterfaceFactory = initOpenRoadmFactory(mappingUtils, openRoadmInterfaces,
178                 portMapping);
179         DeviceRendererService deviceRendererService = new DeviceRendererServiceImpl(
180                 lightyServices.getBindingDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory,
181                 openRoadmInterfaces, crossConnect, portMapping);
182         OtnDeviceRendererService otnDeviceRendererService = new OtnDeviceRendererServiceImpl(openRoadmInterfaceFactory,
183                 crossConnect, openRoadmInterfaces, deviceTransactionManager, networkModelService);
184         rendererProvider = initRenderer(lightyServices, olmPowerServiceRpc, deviceRendererService,
185                 otnDeviceRendererService, portMapping);
186
187         LOG.info("Creating service-handler beans ...");
188         RendererServiceOperations rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService,
189                 otnDeviceRendererService, olmPowerServiceRpc, lightyServices.getBindingDataBroker(),
190                 lightyServices.getBindingNotificationPublishService(), portMapping);
191         ServiceDataStoreOperations serviceDataStoreOperations = new ServiceDataStoreOperationsImpl(
192                 lightyServices.getBindingDataBroker());
193         RendererListenerImpl rendererListenerImpl = new RendererListenerImpl(pathComputationService,
194             lightyServices.getBindingNotificationPublishService(), networkModelService);
195         PceListenerImpl pceListenerImpl = new PceListenerImpl(rendererServiceOperations, pathComputationService,
196             lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
197         NetworkModelListenerImpl networkModelListenerImpl = new NetworkModelListenerImpl(
198                 lightyServices.getBindingNotificationPublishService(), serviceDataStoreOperations);
199         ServicehandlerImpl servicehandler = new ServicehandlerImpl(lightyServices.getBindingDataBroker(),
200             pathComputationService, rendererServiceOperations, lightyServices.getBindingNotificationPublishService(),
201             pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations);
202         ServiceListener serviceListener = new ServiceListener(servicehandler, serviceDataStoreOperations,
203                 lightyServices.getBindingNotificationPublishService());
204         servicehandlerProvider = new ServicehandlerProvider(lightyServices.getBindingDataBroker(),
205                 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
206                 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
207                 networkModelListenerImpl, servicehandler);
208         if (activateTapi) {
209             LOG.info("Creating tapi beans ...");
210             TapiLink tapiLink = new TapiLink(networkTransaction);
211             R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
212                     deviceTransactionManager, tapiLink);
213             TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
214                     .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
215             TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
216             TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
217                     lightyServices.getBindingDataBroker());
218             TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
219                     networkTransaction, tapiLink);
220             TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
221                     tapilinkDiscoveryImpl, networkTransaction, tapiLink,
222                     lightyServices.getBindingNotificationPublishService());
223             TapiNetconfTopologyListener tapiNetConfTopologyListener =
224                     new TapiNetconfTopologyListener(tapiNetworkModelService);
225             TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
226             TapiPortMappingListener tapiPortMappingListener =
227                     new TapiPortMappingListener(tapiNetworkModelService);
228             TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
229                     new TapiNetworkModelListenerImpl(networkTransaction,
230                             lightyServices.getBindingNotificationPublishService());
231
232             tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
233                     tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
234                     tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
235                     lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
236         }
237         if (activateNbiNotification) {
238             LOG.info("Creating nbi-notifications beans ...");
239             nbiNotificationsProvider = new NbiNotificationsProvider(
240                     publisherServiceList, publisherAlarmList, null, null, lightyServices.getRpcProviderService(),
241                     lightyServices.getNotificationService(), lightyServices.getAdapterContext().currentSerializer(),
242                     networkTransaction);
243         }
244     }
245
246     @Override
247     protected boolean initProcedure() {
248         LOG.info("Initializing PCE provider ...");
249         pceProvider.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         deviceTransactionManager.preDestroy();
289         LOG.info("Shutdown done.");
290         return true;
291     }
292
293     private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
294                                   NetworkTransactionService networkTransactionService,
295                                   ServiceDataStoreOperations serviceDataStoreOperations,
296                                   TapiNetconfTopologyListener tapiNetConfTopologyListener,
297                                   TapiPortMappingListener tapiPortMappingListener,
298                                   TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
299                                   TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
300                                   TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
301                                   NotificationService notificationService, TapiOrLinkListener orLinkListener,
302                                   TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
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             tapiNetworkModelListenerImpl);
308     }
309
310     private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
311             DeviceRendererService deviceRendererService, OtnDeviceRendererService otnDeviceRendererService,
312             PortMapping portMapping) {
313         DeviceRendererRPCImpl deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService,
314                 otnDeviceRendererService);
315         RendererServiceOperationsImpl rendererServiceOperations = new RendererServiceOperationsImpl(
316                 deviceRendererService, otnDeviceRendererService, olmPowerServiceRpc,
317                 lightyServices.getBindingDataBroker(), lightyServices.getBindingNotificationPublishService(),
318                 portMapping);
319         return new RendererProvider(lightyServices.getRpcProviderService(), deviceRendererRPC,
320                 rendererServiceOperations);
321     }
322
323     private OpenRoadmInterfaceFactory initOpenRoadmFactory(MappingUtils mappingUtils,
324             OpenRoadmInterfaces openRoadmInterfaces, PortMapping portMapping) {
325         OpenRoadmInterface121 openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces);
326         OpenRoadmInterface221 openRoadmInterface221 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces);
327         OpenRoadmInterface710 openRoadmInterface710 = new OpenRoadmInterface710(portMapping, openRoadmInterfaces);
328         OpenRoadmOtnInterface221 openRoadmOtnInterface221 = new OpenRoadmOtnInterface221(portMapping,
329                 openRoadmInterfaces);
330         OpenRoadmOtnInterface710 openRoadmOtnInterface710 = new OpenRoadmOtnInterface710(portMapping,
331             openRoadmInterfaces);
332         return new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface221,
333             openRoadmInterface710, openRoadmOtnInterface221, openRoadmOtnInterface710);
334     }
335
336     private PortMapping initPortMapping(LightyServices lightyServices) {
337         PortMappingVersion710 portMappingVersion710 = new PortMappingVersion710(lightyServices.getBindingDataBroker(),
338                 deviceTransactionManager);
339         PortMappingVersion221 portMappingVersion221 = new PortMappingVersion221(lightyServices.getBindingDataBroker(),
340                 deviceTransactionManager);
341         PortMappingVersion121 portMappingVersion121 = new PortMappingVersion121(lightyServices.getBindingDataBroker(),
342                 deviceTransactionManager);
343         return new PortMappingImpl(lightyServices.getBindingDataBroker(), portMappingVersion710,
344             portMappingVersion221, portMappingVersion121);
345     }
346
347     private OpenRoadmInterfaces initOpenRoadmInterfaces(MappingUtils mappingUtils, PortMapping portMapping) {
348         OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(
349                 deviceTransactionManager);
350         OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(
351                 deviceTransactionManager, portMapping);
352         OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710 = new OpenRoadmInterfacesImpl710(
353                 deviceTransactionManager, portMapping);
354         return new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121,
355                 openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
356     }
357
358     private CrossConnect initCrossConnect(MappingUtils mappingUtils) {
359         CrossConnectImpl121 crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager);
360         CrossConnectImpl221 crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager);
361         CrossConnectImpl710 crossConnectImpl710 = new CrossConnectImpl710(deviceTransactionManager);
362         return new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221,
363             crossConnectImpl710);
364     }
365 }