/* * Copyright (c) 2015 Cisco Systems, 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.compat; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableClassToInstanceMap; import java.util.concurrent.ExecutorService; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.MountPoint; import org.opendaylight.controller.md.sal.common.api.RegistrationListener; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration; import org.opendaylight.controller.md.sal.common.api.data.DataReader; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration; import org.opendaylight.controller.sal.binding.api.BindingAwareService; import org.opendaylight.controller.sal.binding.api.NotificationListener; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.binding.api.NotificationService; import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.controller.sal.binding.api.data.DataChangeListener; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; import org.opendaylight.controller.sal.binding.api.data.DataProviderService; import org.opendaylight.controller.sal.binding.api.mount.MountProviderInstance; import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.Notification; import org.opendaylight.yangtools.yang.binding.RpcService; @Deprecated public class HydrogenMountInstanceAdapter implements MountProviderInstance { private final ClassToInstanceMap services; private final InstanceIdentifier identifier; public HydrogenMountInstanceAdapter(final MountPoint key) { this.identifier = key.getIdentifier(); final ImmutableClassToInstanceMap.Builder builder = ImmutableClassToInstanceMap.builder(); final Optional dataBroker = key.getService(DataBroker.class); if(dataBroker.isPresent()) { builder.put(DataBrokerService.class, new HydrogenDataBrokerAdapter(dataBroker.get())); } final Optional notificationService = key.getService(org.opendaylight.controller.md.sal.binding.api.NotificationService.class); if(notificationService.isPresent()) { builder.put(NotificationService.class, new HeliumNotificationServiceAdapter(notificationService.get())); } final Optional rpcRegistry = key.getService(RpcConsumerRegistry.class); if(rpcRegistry.isPresent()) { builder.put(RpcConsumerRegistry.class, rpcRegistry.get()); } services = builder.build(); } private T service(final Class service) { final T potential = services.getInstance(service); Preconditions.checkState(potential != null, "Service %s is not supported by mount point %s",service,this.getIdentifier()); return potential; } @Override public T getRpcService(final Class serviceInterface) { return service(RpcConsumerRegistry.class).getRpcService(serviceInterface); } @Override public InstanceIdentifier getIdentifier() { return identifier; } @Override public ListenerRegistration> registerNotificationListener( final Class notificationType, final NotificationListener listener) { return service(NotificationService.class).registerNotificationListener(notificationType, listener); } @Override public ListenerRegistration registerNotificationListener( final org.opendaylight.yangtools.yang.binding.NotificationListener listener) { return service(NotificationService.class).registerNotificationListener(listener); } @Override public DataModificationTransaction beginTransaction() { return service(DataBrokerService.class).beginTransaction(); } @Override public DataObject readConfigurationData(final InstanceIdentifier path) { return service(DataBrokerService.class).readConfigurationData(path); } @Override public DataObject readOperationalData(final InstanceIdentifier path) { return service(DataBrokerService.class).readOperationalData(path); } @Override public ListenerRegistration registerDataChangeListener( final InstanceIdentifier path, final DataChangeListener listener) { return service(DataBrokerService.class).registerDataChangeListener(path,listener); } @Override public RoutedRpcRegistration addRoutedRpcImplementation(final Class serviceInterface, final T implementation) throws IllegalStateException { return service(RpcProviderRegistry.class).addRoutedRpcImplementation(serviceInterface, implementation); } @Override public RpcRegistration addRpcImplementation(final Class serviceInterface, final T implementation) throws IllegalStateException { return service(RpcProviderRegistry.class).addRpcImplementation(serviceInterface, implementation); } @Override public void publish(final Notification notification) { service(NotificationProviderService.class).publish(notification); } @Override public void publish(final Notification notification, final ExecutorService executor) { service(NotificationProviderService.class).publish(notification); } @Override public Registration registerCommitHandler(final InstanceIdentifier arg0, final DataCommitHandler, DataObject> arg1) { return service(DataProviderService.class).registerCommitHandler(arg0, arg1); } @Override public ListenerRegistration, DataObject>>> registerCommitHandlerListener( final RegistrationListener, DataObject>> arg0) { return service(DataProviderService.class).registerCommitHandlerListener(arg0); } @Override public Registration registerDataReader(final InstanceIdentifier path, final DataReader, DataObject> reader) { return service(DataProviderService.class).registerDataReader(path, reader); } @Override public ListenerRegistration registerInterestListener( final NotificationInterestListener interestListener) { return service(NotificationProviderService.class).registerInterestListener(interestListener); } @Override public >> ListenerRegistration registerRouteChangeListener( final L arg0) { return service(RpcProviderRegistry.class).registerRouteChangeListener(arg0); } }