From 2d6a0b57921b934540c6c198d3351b58e354f98d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 14 Apr 2022 12:51:11 +0200 Subject: [PATCH] Simplify CompositeValueCodec instantiation We have some long-winded instantiation here, which amounts to getting an EncapsulatedValueCodec. Specialize two constructors for identityref/instance-identifier to make things a bit more clear and direct. JIRA: MDSAL-704 Change-Id: I766d4437ff51a8c32c872f6a3bfe66aec68caa14 Signed-off-by: Robert Varga --- .../dom/codec/impl/BindingCodecContext.java | 4 ++-- .../dom/codec/impl/CompositeValueCodec.java | 24 ++++++++++++------- .../codec/impl/EncapsulatedValueCodec.java | 5 ++++ 3 files changed, 22 insertions(+), 11 deletions(-) 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 316b41e304..5c03da48c6 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 @@ -442,9 +442,9 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri private IllegalArgumentCodec getCodecForBindingClass(final Class valueType, final TypeDefinition typeDef) { if (typeDef instanceof IdentityrefTypeDefinition) { - return new CompositeValueCodec(SchemaUnawareCodec.of(valueType, typeDef), identityCodec); + return new CompositeValueCodec(valueType, identityCodec); } else if (typeDef instanceof InstanceIdentifierTypeDefinition) { - return new CompositeValueCodec(SchemaUnawareCodec.of(valueType, typeDef), instanceIdentifierCodec); + return new CompositeValueCodec(valueType, instanceIdentifierCodec); } else if (typeDef instanceof UnionTypeDefinition) { try { return UnionTypeCodec.of(valueType, (UnionTypeDefinition) typeDef, this); diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CompositeValueCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CompositeValueCodec.java index 6bd84d5b81..0007f8158b 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CompositeValueCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CompositeValueCodec.java @@ -7,29 +7,35 @@ */ package org.opendaylight.mdsal.binding.dom.codec.impl; +import static java.util.Objects.requireNonNull; + import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; final class CompositeValueCodec extends ValueTypeCodec { - private final SchemaUnawareCodec bindingToSimpleType; + private final EncapsulatedValueCodec typeObjectCodec; @SuppressWarnings("rawtypes") - // FIXME: this is probably not right w.r.t. null - private final IllegalArgumentCodec bindingToDom; + // FIXME: specialize for the two possibilities + private final IllegalArgumentCodec valueCodec; + + CompositeValueCodec(final Class valueType, final IdentityCodec codec) { + typeObjectCodec = EncapsulatedValueCodec.ofUnchecked(valueType); + valueCodec = requireNonNull(codec); + } - CompositeValueCodec(final SchemaUnawareCodec extractor, - @SuppressWarnings("rawtypes") final IllegalArgumentCodec delegate) { - this.bindingToSimpleType = extractor; - this.bindingToDom = delegate; + CompositeValueCodec(final Class valueType, final InstanceIdentifierCodec codec) { + typeObjectCodec = EncapsulatedValueCodec.ofUnchecked(valueType); + valueCodec = requireNonNull(codec); } @SuppressWarnings("unchecked") @Override public Object deserialize(final Object input) { - return bindingToSimpleType.deserialize(bindingToDom.deserialize(input)); + return typeObjectCodec.deserialize(valueCodec.deserialize(input)); } @SuppressWarnings("unchecked") @Override public Object serialize(final Object input) { - return bindingToDom.serialize(bindingToSimpleType.serialize(input)); + return valueCodec.serialize(typeObjectCodec.serialize(input)); } } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java index 3fce3a7052..ea801924f1 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java @@ -69,6 +69,11 @@ final class EncapsulatedValueCodec extends SchemaUnawareCodec { return CACHE.get(typeClz); } + static @NonNull EncapsulatedValueCodec ofUnchecked(final Class typeClz) { + // FIXME: require base class to be ScalarTypeObject + return CACHE.getUnchecked(typeClz); + } + /** * Quick check if a value object has a chance to deserialize using {@link #deserialize(Object)}. * -- 2.36.6