Disconnect IdentifiableItemCodec from IllegalArgumentCodec 30/100530/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 11 Apr 2022 11:57:24 +0000 (13:57 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 11 Apr 2022 11:58:04 +0000 (13:58 +0200)
IdentifiableItemCodec is only used by KeyedListNodeCodecContext
and it is used directly. Detach it from IllegalArgumentCodec, making
peeling off one possibility from the class tree.

JIRA: MDSAL-704
Change-Id: I25a818eabe80d5bb3f6b4ff2d152e7ca002a93a1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/IdentifiableItemCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java

index f7ef432da873185892d7d356afd62fe11fc75d5d..0b89bff24fda6e2ea4e277388b5c999d72c8c9a2 100644 (file)
@@ -23,7 +23,6 @@ import java.util.Map.Entry;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
-import org.opendaylight.yangtools.concepts.AbstractIllegalArgumentCodec;
 import org.opendaylight.yangtools.util.ImmutableOffsetMap;
 import org.opendaylight.yangtools.util.ImmutableOffsetMapTemplate;
 import org.opendaylight.yangtools.yang.binding.Identifiable;
@@ -39,8 +38,8 @@ import org.slf4j.LoggerFactory;
 /**
  * Codec support for extracting the {@link Identifiable#key()} method return from a MapEntryNode.
  */
-abstract class IdentifiableItemCodec
-        extends AbstractIllegalArgumentCodec<NodeIdentifierWithPredicates, IdentifiableItem<?, ?>> {
+// FIXME: sealed class when we have JDK17+
+abstract class IdentifiableItemCodec {
     private static final class SingleKey extends IdentifiableItemCodec {
         private static final MethodType CTOR_TYPE = MethodType.methodType(Identifier.class, Object.class);
 
@@ -150,20 +149,17 @@ abstract class IdentifiableItemCodec
         }
     }
 
-    @Override
     @SuppressWarnings({ "rawtypes", "unchecked" })
-    protected final IdentifiableItem<?, ?> deserializeImpl(final NodeIdentifierWithPredicates input) {
-        final Identifier<?> identifier = deserializeIdentifier(input);
-        return IdentifiableItem.of((Class) identifiable, (Identifier) identifier);
+    final @NonNull IdentifiableItem<?, ?> domToBinding(final NodeIdentifierWithPredicates input) {
+        return IdentifiableItem.of((Class) identifiable, (Identifier) deserializeIdentifier(requireNonNull(input)));
     }
 
-    @Override
-    protected final NodeIdentifierWithPredicates serializeImpl(final IdentifiableItem<?, ?> input) {
+    final @NonNull NodeIdentifierWithPredicates bindingToDom(final IdentifiableItem<?, ?> input) {
         return serializeIdentifier(qname, input.getKey());
     }
 
     @SuppressWarnings("checkstyle:illegalCatch")
-    final @NonNull Identifier<?> deserializeIdentifier(final NodeIdentifierWithPredicates input) {
+    final @NonNull Identifier<?> deserializeIdentifier(final @NonNull NodeIdentifierWithPredicates input) {
         try {
             return deserializeIdentifierImpl(input);
         } catch (Throwable e) {
index aa6dd00d8f11512f465bfef15af0512cee374459..5367d6d6738e1c6af0af1b10b1aa00a4d6d9fe6b 100644 (file)
@@ -86,7 +86,7 @@ abstract class KeyedListNodeCodecContext<I extends Identifier<D>, D extends Data
 
         super.addYangPathArgument(arg, builder);
         if (arg instanceof IdentifiableItem) {
-            builder.add(codec.serialize((IdentifiableItem<?, ?>) arg));
+            builder.add(codec.bindingToDom((IdentifiableItem<?, ?>) arg));
         } else {
             // Adding wildcarded
             super.addYangPathArgument(arg, builder);
@@ -95,15 +95,13 @@ abstract class KeyedListNodeCodecContext<I extends Identifier<D>, D extends Data
 
     @Override
     protected InstanceIdentifier.PathArgument getBindingPathArgument(final YangInstanceIdentifier.PathArgument domArg) {
-        if (domArg instanceof NodeIdentifierWithPredicates) {
-            return codec.deserialize((NodeIdentifierWithPredicates) domArg);
-        }
-        return super.getBindingPathArgument(domArg);
+        return domArg instanceof NodeIdentifierWithPredicates
+            ? codec.domToBinding((NodeIdentifierWithPredicates) domArg) : super.getBindingPathArgument(domArg);
     }
 
     @SuppressWarnings({ "rawtypes", "unchecked" })
     NodeIdentifierWithPredicates serialize(final Identifier<?> key) {
-        return codec.serialize(IdentifiableItem.of((Class)getBindingClass(), (Identifier)key));
+        return codec.bindingToDom(IdentifiableItem.of((Class)getBindingClass(), (Identifier)key));
     }
 
     @NonNull Identifier<?> deserialize(final NodeIdentifierWithPredicates arg) {
@@ -112,17 +110,13 @@ abstract class KeyedListNodeCodecContext<I extends Identifier<D>, D extends Data
 
     @Override
     public YangInstanceIdentifier.PathArgument serializePathArgument(final InstanceIdentifier.PathArgument arg) {
-        if (arg instanceof IdentifiableItem) {
-            return codec.serialize((IdentifiableItem<?, ?>) arg);
-        }
-        return super.serializePathArgument(arg);
+        return arg instanceof IdentifiableItem
+            ? codec.bindingToDom((IdentifiableItem<?, ?>) arg) : super.serializePathArgument(arg);
     }
 
     @Override
     public InstanceIdentifier.PathArgument deserializePathArgument(final YangInstanceIdentifier.PathArgument arg) {
-        if (arg instanceof NodeIdentifierWithPredicates) {
-            return codec.deserialize((NodeIdentifierWithPredicates) arg);
-        }
-        return super.deserializePathArgument(arg);
+        return arg instanceof NodeIdentifierWithPredicates
+            ? codec.domToBinding((NodeIdentifierWithPredicates) arg) : super.deserializePathArgument(arg);
     }
 }