Disconnect EncapsulatedValueCodec from ReflectionBasedCodec
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / IdentityCodec.java
index 06c8c2718f8678de26e9ae1354c2c0de6493e8d1..06fbb0b9397bb99bf7fcc10414096302fa7f8803 100644 (file)
@@ -7,29 +7,43 @@
  */
 package org.opendaylight.mdsal.binding.dom.codec.impl;
 
-import com.google.common.base.Preconditions;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
+import org.opendaylight.mdsal.binding.dom.codec.api.BindingIdentityCodec;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
-import org.opendaylight.yangtools.concepts.Codec;
+import org.opendaylight.yangtools.concepts.AbstractIllegalArgumentCodec;
 import org.opendaylight.yangtools.yang.binding.BaseIdentity;
 import org.opendaylight.yangtools.yang.common.QName;
 
-final class IdentityCodec implements Codec<QName, Class<?>> {
+final class IdentityCodec extends AbstractIllegalArgumentCodec<QName, Class<?>> implements BindingIdentityCodec {
     private final BindingRuntimeContext context;
 
     IdentityCodec(final BindingRuntimeContext context) {
-        this.context = Preconditions.checkNotNull(context);
+        this.context = requireNonNull(context);
     }
 
     @Override
-    public Class<?> deserialize(final QName input) {
-        Preconditions.checkArgument(input != null, "Input must not be null.");
+    protected Class<?> deserializeImpl(final QName input) {
         return context.getIdentityClass(input);
     }
 
     @Override
-    public QName serialize(final Class<?> input) {
-        Preconditions.checkArgument(BaseIdentity.class.isAssignableFrom(input));
+    protected QName serializeImpl(final Class<?> input) {
+        checkArgument(BaseIdentity.class.isAssignableFrom(input), "%s is not an identity", input);
         return BindingReflections.findQName(input);
     }
+
+    @Override
+    public Class<? extends BaseIdentity> toBinding(final QName qname) {
+        final Class<?> identity = context.getIdentityClass(requireNonNull(qname));
+        checkArgument(BaseIdentity.class.isAssignableFrom(identity), "%s resolves to non-identity %s", qname, identity);
+        return identity.asSubclass(BaseIdentity.class);
+    }
+
+    @Override
+    public QName fromBinding(final Class<? extends BaseIdentity> bindingClass) {
+        return BindingReflections.getQName(bindingClass);
+    }
 }