From e98e4d24eabd62412bb5a699be8b32c9c5280893 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 28 Jul 2018 00:57:06 +0200 Subject: [PATCH] Wire Action(Provider)Service into mountpoints We need to wire the two adapters so they can be exposed to binding world from DOM mountpoints. Change-Id: I63e68b0c7ebfeae2a3fbba64b171196ee9c8e8ff Signed-off-by: Robert Varga --- .../adapter/ActionProviderServiceAdapter.java | 20 +++++++++++++++++++ .../dom/adapter/ActionServiceAdapter.java | 20 +++++++++++++++++++ .../binding/dom/adapter/AdapterBuilder.java | 3 ++- .../dom/adapter/BindingDOMAdapterBuilder.java | 8 ++++---- .../dom/adapter/BindingDOMAdapterLoader.java | 4 ++++ 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java index 11bc55dc1a..3e3fb3c8dc 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java @@ -10,18 +10,22 @@ package org.opendaylight.mdsal.binding.dom.adapter; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; +import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.FluentFuture; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.api.ActionProviderService; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; +import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMActionImplementation; import org.opendaylight.mdsal.dom.api.DOMActionProviderService; import org.opendaylight.mdsal.dom.api.DOMActionResult; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; +import org.opendaylight.mdsal.dom.api.DOMService; import org.opendaylight.yangtools.concepts.AbstractObjectRegistration; import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.yang.binding.Action; @@ -37,6 +41,22 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; @NonNullByDefault final class ActionProviderServiceAdapter extends AbstractBindingAdapter implements ActionProviderService { + private static final class Builder extends BindingDOMAdapterBuilder { + @Override + protected ActionProviderService createInstance(final @Nullable BindingToNormalizedNodeCodec codec, + final ClassToInstanceMap delegates) { + final DOMActionProviderService domAction = delegates.getInstance(DOMActionProviderService.class); + return new ActionProviderServiceAdapter(requireNonNull(codec), domAction); + } + + @Override + public Set> getRequiredDelegates() { + return ImmutableSet.of(DOMActionProviderService.class); + } + } + + static final Factory BUILDER_FACTORY = Builder::new; + ActionProviderServiceAdapter(final BindingToNormalizedNodeCodec codec, final DOMActionProviderService delegate) { super(codec, delegate); } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java index a371947420..506e15d696 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java @@ -12,15 +12,19 @@ import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; +import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.FluentFuture; import java.lang.reflect.Proxy; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.api.ActionService; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; +import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.mdsal.dom.api.DOMActionService; +import org.opendaylight.mdsal.dom.api.DOMService; import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.yang.binding.Action; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -34,6 +38,20 @@ import org.opendaylight.yangtools.yang.common.RpcResult; final class ActionServiceAdapter extends AbstractBindingLoadingAdapter>, ActionAdapter> implements ActionService { + private static final class Builder extends BindingDOMAdapterBuilder { + @Override + protected ActionService createInstance(final @Nullable BindingToNormalizedNodeCodec codec, + final ClassToInstanceMap delegates) { + final DOMActionService domAction = delegates.getInstance(DOMActionService.class); + return new ActionServiceAdapter(requireNonNull(codec), domAction); + } + + @Override + public Set> getRequiredDelegates() { + return ImmutableSet.of(DOMActionService.class); + } + } + private static final class ConstrainedAction implements Delegator>, Action, RpcInput, RpcOutput> { private final Action, RpcInput, RpcOutput> delegate; @@ -56,6 +74,8 @@ final class ActionServiceAdapter } } + static final Factory BUILDER_FACTORY = Builder::new; + ActionServiceAdapter(final BindingToNormalizedNodeCodec codec, final DOMActionService delegate) { super(codec, delegate); } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java index dd48e7ac9b..ef6f035994 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AdapterBuilder.java @@ -12,6 +12,7 @@ import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; import java.util.Set; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Builder; public abstract class AdapterBuilder implements Builder { @@ -20,7 +21,7 @@ public abstract class AdapterBuilder implements Builder { public abstract Set> getRequiredDelegates(); - protected abstract T createInstance(ClassToInstanceMap immutableDelegates); + protected abstract @NonNull T createInstance(@NonNull ClassToInstanceMap immutableDelegates); private void checkAllRequiredServices() { for (final Class type : getRequiredDelegates()) { diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterBuilder.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterBuilder.java index f3609ff591..a76bd498f1 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterBuilder.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterBuilder.java @@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.dom.adapter; import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.api.BindingService; import org.opendaylight.mdsal.dom.api.DOMService; @@ -18,12 +19,11 @@ abstract class BindingDOMAdapterBuilder extends Adapte interface Factory { BindingDOMAdapterBuilder newBuilder(); - } private BindingToNormalizedNodeCodec codec; - public void setCodec(final BindingToNormalizedNodeCodec codec) { + void setCodec(final BindingToNormalizedNodeCodec codec) { this.codec = codec; } @@ -33,6 +33,6 @@ abstract class BindingDOMAdapterBuilder extends Adapte return createInstance(codec, delegates); } - protected abstract T createInstance(BindingToNormalizedNodeCodec myCodec, ClassToInstanceMap delegates); - + abstract T createInstance(BindingToNormalizedNodeCodec myCodec, + @NonNull ClassToInstanceMap<@NonNull DOMService> delegates); } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterLoader.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterLoader.java index ec5bc81e31..2a84702a2e 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterLoader.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterLoader.java @@ -10,6 +10,8 @@ package org.opendaylight.mdsal.binding.dom.adapter; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import java.util.Map; +import org.opendaylight.mdsal.binding.api.ActionProviderService; +import org.opendaylight.mdsal.binding.api.ActionService; import org.opendaylight.mdsal.binding.api.BindingService; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.NotificationPublishService; @@ -25,6 +27,8 @@ public abstract class BindingDOMAdapterLoader extends AdapterLoader