From 84e4f19582e1e3c0fc838c06ac5016435e66c215 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 28 Jul 2018 13:13:52 +0200 Subject: [PATCH] Add Action(Provider)Adapters This adds adapters based on MD-SAL to sal-binding-broker, allowing actions to be invoked. Change-Id: I7efa0ef81c239d12e7d61097daa6a36391e7b89b Signed-off-by: Robert Varga --- .../binding/impl/BindingDOMAdapterLoader.java | 16 ++++-- ...ontrollerActionProviderServiceAdapter.java | 57 +++++++++++++++++++ .../impl/ControllerActionServiceAdapter.java | 52 +++++++++++++++++ 3 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionProviderServiceAdapter.java create mode 100644 opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionServiceAdapter.java diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMAdapterLoader.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMAdapterLoader.java index 531f84a976..5f2b6fd5cd 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMAdapterLoader.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMAdapterLoader.java @@ -10,6 +10,8 @@ package org.opendaylight.controller.md.sal.binding.impl; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import java.util.Map; +import org.opendaylight.controller.md.sal.binding.api.ActionProviderService; +import org.opendaylight.controller.md.sal.binding.api.ActionService; import org.opendaylight.controller.md.sal.binding.api.BindingService; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; @@ -21,12 +23,14 @@ import org.opendaylight.controller.md.sal.dom.api.DOMService; import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; public abstract class BindingDOMAdapterLoader extends AdapterLoader { - private static final Map,BindingDOMAdapterBuilder.Factory> FACTORIES = - ImmutableMap.,BindingDOMAdapterBuilder.Factory>builder() - .put(NotificationService.class,BindingDOMNotificationServiceAdapter.BUILDER_FACTORY) - .put(NotificationPublishService.class,BindingDOMNotificationPublishServiceAdapter.BUILDER_FACTORY) - .put(DataBroker.class,BindingDOMDataBrokerAdapter.BUILDER_FACTORY) - .put(RpcConsumerRegistry.class,BindingDOMRpcServiceAdapter.BUILDER_FACTORY) + private static final Map, BindingDOMAdapterBuilder.Factory> FACTORIES = + ImmutableMap., BindingDOMAdapterBuilder.Factory>builder() + .put(NotificationService.class, BindingDOMNotificationServiceAdapter.BUILDER_FACTORY) + .put(NotificationPublishService.class, BindingDOMNotificationPublishServiceAdapter.BUILDER_FACTORY) + .put(DataBroker.class, BindingDOMDataBrokerAdapter.BUILDER_FACTORY) + .put(RpcConsumerRegistry.class, BindingDOMRpcServiceAdapter.BUILDER_FACTORY) + .put(ActionProviderService.class, ControllerActionProviderServiceAdapter.BUILDER_FACTORY) + .put(ActionService.class, ControllerActionServiceAdapter.BUILDER_FACTORY) .build(); private final BindingToNormalizedNodeCodec codec; diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionProviderServiceAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionProviderServiceAdapter.java new file mode 100644 index 0000000000..ededf4ebe8 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionProviderServiceAdapter.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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 static java.util.Objects.requireNonNull; + +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ImmutableSet; +import java.util.Set; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.controller.md.sal.binding.api.ActionProviderService; +import org.opendaylight.controller.md.sal.binding.impl.BindingDOMAdapterBuilder.Factory; +import org.opendaylight.controller.md.sal.dom.api.DOMActionProviderService; +import org.opendaylight.controller.md.sal.dom.api.DOMService; +import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; +import org.opendaylight.mdsal.binding.dom.adapter.ActionProviderServiceAdapter; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.yang.binding.Action; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +final class ControllerActionProviderServiceAdapter implements ActionProviderService { + private static final class Builder extends BindingDOMAdapterBuilder { + @Override + public Set> getRequiredDelegates() { + return ImmutableSet.of(DOMActionProviderService.class); + } + + @Override + protected ActionProviderService createInstance(BindingToNormalizedNodeCodec codec, + ClassToInstanceMap delegates) { + final DOMActionProviderService domAction = delegates.getInstance(DOMActionProviderService.class); + return new ControllerActionProviderServiceAdapter(requireNonNull(codec), domAction); + } + } + + static final Factory BUILDER_FACTORY = Builder::new; + + private final ActionProviderServiceAdapter delegate; + + ControllerActionProviderServiceAdapter(BindingToNormalizedNodeCodec codec, DOMActionProviderService domService) { + this.delegate = ActionProviderServiceAdapter.create(codec, domService); + } + + @Override + public , T extends @NonNull Action, + S extends T> ObjectRegistration registerImplementation(Class actionInterface, S implementation, + LogicalDatastoreType datastore, Set> validNodes) { + return delegate.registerImplementation(actionInterface, implementation, datastore, validNodes); + } +} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionServiceAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionServiceAdapter.java new file mode 100644 index 0000000000..f209b3a6a0 --- /dev/null +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/ControllerActionServiceAdapter.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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 static java.util.Objects.requireNonNull; + +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ImmutableSet; +import java.util.Set; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.controller.md.sal.binding.api.ActionService; +import org.opendaylight.controller.md.sal.binding.impl.BindingDOMAdapterBuilder.Factory; +import org.opendaylight.controller.md.sal.dom.api.DOMActionService; +import org.opendaylight.controller.md.sal.dom.api.DOMService; +import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; +import org.opendaylight.mdsal.binding.dom.adapter.ActionServiceAdapter; +import org.opendaylight.yangtools.yang.binding.Action; +import org.opendaylight.yangtools.yang.binding.DataObject; + +final class ControllerActionServiceAdapter implements ActionService { + private static final class Builder extends BindingDOMAdapterBuilder { + @Override + public Set> getRequiredDelegates() { + return ImmutableSet.of(DOMActionService.class); + } + + @Override + protected ActionService createInstance(final BindingToNormalizedNodeCodec codec, + final ClassToInstanceMap delegates) { + final DOMActionService domAction = delegates.getInstance(DOMActionService.class); + return new ControllerActionServiceAdapter(requireNonNull(codec), domAction); + } + } + + static final Factory BUILDER_FACTORY = Builder::new; + private final ActionServiceAdapter delegate; + + ControllerActionServiceAdapter(final BindingToNormalizedNodeCodec codec, final DOMActionService domService) { + this.delegate = ActionServiceAdapter.create(codec, domService); + } + + @Override + public > T getActionHandle( + final Class actionInterface, final Set> validNodes) { + return delegate.getActionHandle(actionInterface, validNodes); + } +} -- 2.36.6