From 40c7b5f2175e7a88825a4364e40977cea82222da Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 26 Jun 2023 20:33:35 +0200 Subject: [PATCH] Do not use BindingReflections in mdsal-binding-dom-codec-api The exact mechanics of now an Action's QNameModule is resolved should not be dependent on reflection. Eliminate this assumption from API and shift it down to implementation. JIRA: MDSAL-781 Change-Id: I6c3a18c41ee8189c315be3cc2888c092f06bb6ec Signed-off-by: Robert Varga --- binding/mdsal-binding-dom-codec-api/pom.xml | 4 ---- .../src/main/java/module-info.java | 1 - .../api/BindingNormalizedNodeSerializer.java | 17 +++++------------ .../src/main/java/module-info.java | 1 - ...AbstractBindingNormalizedNodeSerializer.java | 17 +++++++++++++++++ .../spi/ForwardingBindingDOMCodecServices.java | 12 ++++++++++++ .../dom/codec/impl/BindingCodecContext.java | 12 +++++++++++- .../spec/reflect/BindingReflections.java | 2 +- 8 files changed, 46 insertions(+), 20 deletions(-) diff --git a/binding/mdsal-binding-dom-codec-api/pom.xml b/binding/mdsal-binding-dom-codec-api/pom.xml index 85576fa012..65a14e2a61 100644 --- a/binding/mdsal-binding-dom-codec-api/pom.xml +++ b/binding/mdsal-binding-dom-codec-api/pom.xml @@ -49,10 +49,6 @@ org.opendaylight.yangtools yang-model-api - - org.opendaylight.mdsal - mdsal-binding-spec-util - org.opendaylight.mdsal mdsal-binding-runtime-api diff --git a/binding/mdsal-binding-dom-codec-api/src/main/java/module-info.java b/binding/mdsal-binding-dom-codec-api/src/main/java/module-info.java index 18162609c8..04a10c31d1 100644 --- a/binding/mdsal-binding-dom-codec-api/src/main/java/module-info.java +++ b/binding/mdsal-binding-dom-codec-api/src/main/java/module-info.java @@ -12,7 +12,6 @@ module org.opendaylight.mdsal.binding.dom.codec.api { requires transitive org.opendaylight.yangtools.yang.model.api; requires transitive org.opendaylight.yangtools.yang.binding; requires transitive org.opendaylight.mdsal.binding.runtime.api; - requires org.opendaylight.mdsal.binding.spec.util; // Annotations requires static transitive org.eclipse.jdt.annotation; diff --git a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java index a3ce9deeaa..18f32bbe49 100644 --- a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java +++ b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java @@ -16,7 +16,6 @@ import java.time.Instant; import java.util.Map.Entry; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.yangtools.yang.binding.Action; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.BaseNotification; @@ -26,7 +25,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.Notification; import org.opendaylight.yangtools.yang.binding.RpcInput; import org.opendaylight.yangtools.yang.binding.RpcOutput; -import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; @@ -241,11 +239,8 @@ public interface BindingNormalizedNodeSerializer { * @throws NullPointerException if any of the arguments is null */ @Beta - default @NonNull BindingLazyContainerNode toLazyNormalizedNodeActionInput( - @NonNull final Class> action, @NonNull final RpcInput input) { - return toLazyNormalizedNodeActionInput(action, - new NodeIdentifier(YangConstants.operationInputQName(BindingReflections.getQNameModule(action))), input); - } + @NonNull BindingLazyContainerNode toLazyNormalizedNodeActionInput( + @NonNull Class> action, @NonNull RpcInput input); /** * Translates supplied Binding action input into NormalizedNode data. @@ -278,11 +273,9 @@ public interface BindingNormalizedNodeSerializer { * @param output Binding action output * @return NormalizedNode representation of action output */ - @Beta default @NonNull BindingLazyContainerNode toLazyNormalizedNodeActionOutput( - @NonNull final Class> action, @NonNull final RpcOutput output) { - return toLazyNormalizedNodeActionOutput(action, - new NodeIdentifier(YangConstants.operationOutputQName(BindingReflections.getQNameModule(action))), output); - } + @Beta + @NonNull BindingLazyContainerNode toLazyNormalizedNodeActionOutput( + @NonNull Class> action, @NonNull RpcOutput output); /** * Translates supplied Binding action output into NormalizedNode data. diff --git a/binding/mdsal-binding-dom-codec-spi/src/main/java/module-info.java b/binding/mdsal-binding-dom-codec-spi/src/main/java/module-info.java index b2bf958816..02a568f055 100644 --- a/binding/mdsal-binding-dom-codec-spi/src/main/java/module-info.java +++ b/binding/mdsal-binding-dom-codec-spi/src/main/java/module-info.java @@ -9,7 +9,6 @@ module org.opendaylight.mdsal.binding.dom.codec.spi { exports org.opendaylight.mdsal.binding.dom.codec.spi; requires transitive org.opendaylight.mdsal.binding.dom.codec.api; - requires org.opendaylight.mdsal.binding.spec.util; // Annotations requires static transitive org.eclipse.jdt.annotation; diff --git a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingNormalizedNodeSerializer.java b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingNormalizedNodeSerializer.java index b4de0635a6..e769543327 100644 --- a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingNormalizedNodeSerializer.java +++ b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/AbstractBindingNormalizedNodeSerializer.java @@ -8,6 +8,7 @@ package org.opendaylight.mdsal.binding.dom.codec.spi; import com.google.common.annotations.Beta; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.dom.codec.api.BindingLazyContainerNode; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.yangtools.yang.binding.Action; @@ -23,9 +24,25 @@ public abstract class AbstractBindingNormalizedNodeSerializer implements Binding return new LazyActionInputContainerNode(identifier, input, this, action); } + @Override + public final BindingLazyContainerNode toLazyNormalizedNodeActionInput( + final Class> action, final RpcInput input) { + return toLazyNormalizedNodeActionInput(action, actionInputName(action), input); + } + + protected abstract @NonNull NodeIdentifier actionInputName(@NonNull Class> action); + @Override public final BindingLazyContainerNode toLazyNormalizedNodeActionOutput( final Class> action, final NodeIdentifier identifier, final RpcOutput output) { return new LazyActionOutputContainerNode(identifier, output, this, action); } + + @Override + public final BindingLazyContainerNode toLazyNormalizedNodeActionOutput( + final Class> action, final RpcOutput output) { + return toLazyNormalizedNodeActionOutput(action, actionOutputName(action), output); + } + + protected abstract @NonNull NodeIdentifier actionOutputName(@NonNull Class> action); } diff --git a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/ForwardingBindingDOMCodecServices.java b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/ForwardingBindingDOMCodecServices.java index 45e02d034d..c434bef546 100644 --- a/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/ForwardingBindingDOMCodecServices.java +++ b/binding/mdsal-binding-dom-codec-spi/src/main/java/org/opendaylight/mdsal/binding/dom/codec/spi/ForwardingBindingDOMCodecServices.java @@ -48,12 +48,24 @@ public abstract class ForwardingBindingDOMCodecServices extends ForwardingObject return delegate().toLazyNormalizedNodeActionInput(action, identifier, input); } + @Override + public BindingLazyContainerNode toLazyNormalizedNodeActionInput( + final Class> action, final RpcInput input) { + return delegate().toLazyNormalizedNodeActionInput(action, input); + } + @Override public BindingLazyContainerNode toLazyNormalizedNodeActionOutput( final Class> action, final NodeIdentifier identifier, final RpcOutput output) { return delegate().toLazyNormalizedNodeActionOutput(action, identifier, output); } + @Override + public BindingLazyContainerNode toLazyNormalizedNodeActionOutput( + final Class> action, final RpcOutput output) { + return delegate().toLazyNormalizedNodeActionOutput(action, output); + } + @Override public YangInstanceIdentifier toYangInstanceIdentifier(final InstanceIdentifier binding) { return delegate().toYangInstanceIdentifier(binding); diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java index c85dfa3ca0..f851596df8 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java @@ -10,6 +10,7 @@ package org.opendaylight.mdsal.binding.dom.codec.impl; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Verify.verify; +import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import com.google.common.base.Strings; @@ -698,6 +699,16 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri return serializeDataObject(output, (ctx, iface, domWriter) -> ctx.newActionOutputWriter(action, domWriter)); } + @Override + protected NodeIdentifier actionInputName(final Class> action) { + return verifyNotNull(getActionCodec(action).input().getDomPathArgument()); + } + + @Override + protected NodeIdentifier actionOutputName(final Class> action) { + return verifyNotNull(getActionCodec(action).output().getDomPathArgument()); + } + private @NonNull ContainerNode serializeDataObject(final DataObject data, final WriterFactoryMethod newWriter) { final var result = new NormalizationResultHolder(); @@ -715,7 +726,6 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri return (ContainerNode) result.getResult().data(); } - private static boolean notBindingRepresentable(final NormalizedNode data) { // ValueNode covers LeafNode and LeafSetEntryNode return data instanceof ValueNode diff --git a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java index 08b3f2ba1f..23918c022f 100644 --- a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java +++ b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java @@ -57,7 +57,7 @@ public final class BindingReflections { return CLASS_TO_QNAME.getUnchecked(dataType).orElse(null); } - public static QNameModule getQNameModule(final Class clz) { + public static @NonNull QNameModule getQNameModule(final Class clz) { if (DataContainer.class.isAssignableFrom(clz) || BaseIdentity.class.isAssignableFrom(clz) || Action.class.isAssignableFrom(clz)) { return findQName(clz).getModule(); -- 2.36.6