Simplify CompositeValueCodec instantiation 87/100587/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 14 Apr 2022 10:51:11 +0000 (12:51 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 14 Apr 2022 11:11:59 +0000 (13:11 +0200)
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 <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CompositeValueCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java

index 316b41e3046dbea6306fe58162d57c5e30e391cf..5c03da48c655cba6974272ee4929aa9bf3c530f2 100644 (file)
@@ -442,9 +442,9 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
     private IllegalArgumentCodec<Object, Object> 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);
index 6bd84d5b81e3b4b20b018ec7ee32b33656b420a0..0007f8158b41bbc9b334c5064660077478715c05 100644 (file)
@@ -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));
     }
 }
index 3fce3a705273c93e5d4a90e2c5ba9c9d8a2542bc..ea801924f193013bb610eca0a8ec7c974cb2d9c9 100644 (file)
@@ -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)}.
      *