From 137bd301e01ecec44fa47dfbc69df664ea014c5e Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 17 Jan 2019 17:18:21 +0100 Subject: [PATCH] Add BindingNormalizedNodeSerializer.coerceFromYangInstanceIdentifier In application-level adapter, which are bound to particular models, the nullable annotation gets in the way, as it flags a potential error, which needs to be expensively masked. Introduce a coerceFromYangInstanceIdentifier() method, which includes the masking, leaving application code unburdened with this detail. Change-Id: I0b6e052b6b9be7c42538ab25924fd47b0421b274 Signed-off-by: Robert Varga --- .../api/BindingNormalizedNodeSerializer.java | 40 ++++++++++++++----- .../DOMEntityOwnershipListenerAdapter.java | 3 +- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java index eb6e416645..1f2287b2c5 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingNormalizedNodeSerializer.java @@ -7,7 +7,10 @@ */ package org.opendaylight.mdsal.binding.dom.codec.api; +import static com.google.common.base.Verify.verifyNotNull; + import com.google.common.annotations.Beta; +import com.google.common.base.VerifyException; import java.util.Map.Entry; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -41,7 +44,9 @@ public interface BindingNormalizedNodeSerializer { YangInstanceIdentifier toYangInstanceIdentifier(@NonNull InstanceIdentifier binding); /** - * Translates supplied YANG Instance Identifier into Binding instance identifier. + * Translates supplied YANG Instance Identifier into Binding instance identifier. This method can return null + * if the instance identifier is not representable in Binding. If it is statically known this is not the case, + * use {@link #coerceFromYangInstanceIdentifier(YangInstanceIdentifier)}. * * @param dom YANG Instance Identifier * @return Binding Instance Identifier, or null if the instance identifier is not representable. @@ -49,6 +54,19 @@ public interface BindingNormalizedNodeSerializer { @Nullable InstanceIdentifier fromYangInstanceIdentifier( @NonNull YangInstanceIdentifier dom); + /** + * Translates supplied YANG Instance Identifier into Binding instance identifier. + * + * @param dom YANG Instance Identifier + * @return Binding Instance Identifier + * @throws VerifyException if the instance identifier is not representable. + */ + @Beta + default @NonNull InstanceIdentifier coerceFromYangInstanceIdentifier( + final @NonNull YangInstanceIdentifier dom) { + return verifyNotNull(fromYangInstanceIdentifier(dom), "%s is not representable", dom); + } + /** * Translates supplied Binding Instance Identifier and data into NormalizedNode representation. * @@ -149,8 +167,9 @@ public interface BindingNormalizedNodeSerializer { * @return NormalizedNode representation of action input * @throws NullPointerException if any of the arguments is null */ - @Beta default @NonNull BindingLazyContainerNode toLazyNormalizedNodeActionInput( - @NonNull final Class> action, @NonNull final RpcInput input) { + @Beta + default @NonNull BindingLazyContainerNode toLazyNormalizedNodeActionInput( + final @NonNull Class> action, final @NonNull RpcInput input) { return toLazyNormalizedNodeActionInput(action, new NodeIdentifier(YangConstants.operationInputQName(BindingReflections.getQNameModule(action))), input); } @@ -163,8 +182,9 @@ public interface BindingNormalizedNodeSerializer { * @return NormalizedNode representation of action input * @throws NullPointerException if any of the arguments is null */ - @Beta default @NonNull ContainerNode toNormalizedNodeActionInput( - @NonNull final Class> action, @NonNull final RpcInput input) { + @Beta + default @NonNull ContainerNode toNormalizedNodeActionInput(final @NonNull Class> action, + @NonNull final RpcInput input) { return toLazyNormalizedNodeActionInput(action, new NodeIdentifier(YangConstants.operationInputQName(BindingReflections.getQNameModule(action))), input) .getDelegate(); @@ -189,8 +209,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) { + @Beta + default @NonNull BindingLazyContainerNode toLazyNormalizedNodeActionOutput( + final @NonNull Class> action, final @NonNull RpcOutput output) { return toLazyNormalizedNodeActionOutput(action, new NodeIdentifier(YangConstants.operationInputQName(BindingReflections.getQNameModule(action))), output); } @@ -201,8 +222,9 @@ public interface BindingNormalizedNodeSerializer { * @param output Binding action output * @return NormalizedNode representation of action output */ - @Beta default @NonNull ContainerNode toNormalizedNodeActionOutput( - @NonNull final Class> action, @NonNull final RpcOutput output) { + @Beta + default @NonNull ContainerNode toNormalizedNodeActionOutput(final @NonNull Class> action, + final @NonNull RpcOutput output) { return toLazyNormalizedNodeActionOutput(action, new NodeIdentifier(YangConstants.operationInputQName(BindingReflections.getQNameModule(action))), output) .getDelegate(); diff --git a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java index f04365ddbf..97804490bd 100644 --- a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java +++ b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/DOMEntityOwnershipListenerAdapter.java @@ -7,7 +7,6 @@ */ package org.opendaylight.mdsal.eos.binding.dom.adapter; -import static com.google.common.base.Verify.verifyNotNull; import static java.util.Objects.requireNonNull; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -48,7 +47,7 @@ class DOMEntityOwnershipListenerAdapter implements DOMEntityOwnershipListener { final YangInstanceIdentifier domId = domEntity.getIdentifier(); final InstanceIdentifier bindingId; try { - bindingId = verifyNotNull(conversionCodec.fromYangInstanceIdentifier(domId)); + bindingId = conversionCodec.coerceFromYangInstanceIdentifier(domId); } catch (RuntimeException e) { LOG.error("Error converting DOM entity ID {} to binding InstanceIdentifier", domId, e); return; -- 2.36.6