/* * Copyright (c) 2018 Red Hat, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.md.sal.binding.impl; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; import org.opendaylight.controller.md.sal.binding.api.NotificationService; import org.opendaylight.controller.md.sal.binding.compat.HeliumNotificationProviderServiceWithInterestListeners; import org.opendaylight.controller.md.sal.binding.compat.HeliumRpcProviderRegistry; import org.opendaylight.controller.md.sal.binding.spi.AdapterFactory; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationPublishService; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.controller.md.sal.dom.spi.DOMNotificationSubscriptionListenerRegistry; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry; import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; /** * Provides the implementations of the APIs. * *

Intended to be usable in a standalone environment (non-OSGi/Karaf). Also * internally used by the Blueprint XML to expose the same as OSGi services. * This class does not require (depend on) the Guice dependency injection * framework, but can we used with it. * * @author Michael Vorburger.ch, partially based on refactored code originally by Thomas Pantelis */ @Deprecated public class BindingBrokerWiring implements AutoCloseable { private final BindingToNormalizedNodeCodec bindingToNormalizedNodeCodec; private final ListenerRegistration mappingCodecListenerReg; private final RpcProviderRegistry rpcProviderRegistry; private final MountPointService mountPointService; private final NotificationService notificationService; private final NotificationPublishService notificationPublishService; private final HeliumNotificationProviderServiceWithInterestListeners notificationAndProviderService; private final AdapterFactory adapterFactory; private final DataBroker dataBroker; private final DataBroker pingPongDataBroker; public BindingBrokerWiring(ClassLoadingStrategy classLoadingStrategy, DOMSchemaService schemaService, DOMRpcService domRpcService, DOMRpcProviderService domRpcProviderService, DOMMountPointService domMountPointService, DOMNotificationService domNotificationService, DOMNotificationPublishService domNotificationPublishService, DOMNotificationSubscriptionListenerRegistry domNotificationListenerRegistry, DOMDataBroker domDataBroker, DOMDataBroker domPingPongDataBroker) { // Runtime binding/normalized mapping service BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry(); bindingToNormalizedNodeCodec = new BindingToNormalizedNodeCodec(classLoadingStrategy, codecRegistry, true); // Register the BindingToNormalizedNodeCodec with the SchemaService as a SchemaContextListener mappingCodecListenerReg = schemaService.registerSchemaContextListener(bindingToNormalizedNodeCodec); // Binding RPC Registry Service BindingDOMRpcServiceAdapter bindingDOMRpcServiceAdapter = new BindingDOMRpcServiceAdapter(domRpcService, bindingToNormalizedNodeCodec); BindingDOMRpcProviderServiceAdapter bindingDOMRpcProviderServiceAdapter = new BindingDOMRpcProviderServiceAdapter(domRpcProviderService, bindingToNormalizedNodeCodec); rpcProviderRegistry = new HeliumRpcProviderRegistry(bindingDOMRpcServiceAdapter, bindingDOMRpcProviderServiceAdapter); // Binding MountPoint Service mountPointService = new BindingDOMMountPointServiceAdapter(domMountPointService, bindingToNormalizedNodeCodec); // Binding Notification Service BindingDOMNotificationServiceAdapter notificationServiceImpl = new BindingDOMNotificationServiceAdapter( bindingToNormalizedNodeCodec.getCodecRegistry(), domNotificationService); notificationService = notificationServiceImpl; BindingDOMNotificationPublishServiceAdapter notificationPublishServiceImpl = new BindingDOMNotificationPublishServiceAdapter( bindingToNormalizedNodeCodec, domNotificationPublishService); notificationPublishService = notificationPublishServiceImpl; notificationAndProviderService = new HeliumNotificationProviderServiceWithInterestListeners( notificationPublishServiceImpl, notificationServiceImpl, domNotificationListenerRegistry); adapterFactory = new BindingToDOMAdapterFactory(bindingToNormalizedNodeCodec); // Binding DataBroker dataBroker = adapterFactory.createDataBroker(domDataBroker); // Binding PingPong DataBroker pingPongDataBroker = adapterFactory.createDataBroker(domPingPongDataBroker); } @Override public void close() throws Exception { mappingCodecListenerReg.close(); } public BindingToNormalizedNodeCodec getBindingToNormalizedNodeCodec() { return bindingToNormalizedNodeCodec; } public AdapterFactory getAdapterFactory() { return adapterFactory; } public RpcProviderRegistry getRpcProviderRegistry() { return rpcProviderRegistry; } public MountPointService getMountPointService() { return mountPointService; } public NotificationService getNotificationService() { return notificationService; } public NotificationPublishService getNotificationPublishService() { return notificationPublishService; } @Deprecated public NotificationProviderService getNotificationProviderService() { return notificationAndProviderService; } @Deprecated public org.opendaylight.controller.sal.binding.api.NotificationService getDeprecatedNotificationService() { return notificationAndProviderService; } public DataBroker getDataBroker() { return dataBroker; } public DataBroker getPingPongDataBroker() { return pingPongDataBroker; } }