Binding codec v1 - fix get codec for typedef of empty type 93/62393/17
authorJie Han <han.jie@zte.com.cn>
Tue, 29 Aug 2017 09:19:36 +0000 (17:19 +0800)
committerRobert Varga <nite@hq.sk>
Thu, 19 Apr 2018 09:46:13 +0000 (09:46 +0000)
- Fix get codec for typedef of empty type,
  the return type of typedef empty type should be
  generated binding class type not boolean.
Change-Id: Icead1cc2d40015e948317095fac9854330630ddf
Signed-off-by: Jie Han <han.jie@zte.com.cn>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ValueTypeCodec.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/TypedefTest.java
binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-typedef-empty.yang [new file with mode: 0755]

index bc1e4cebaa7dc1fe2dee7975d897331727bb28b7..95e43f688c6a01c1a2284bd5b108617a1fa16c3e 100644 (file)
@@ -18,6 +18,7 @@ import java.util.concurrent.Callable;
 import org.opendaylight.mdsal.binding.dom.codec.impl.ValueTypeCodec.SchemaUnawareCodec;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
 
 /**
  * Derived YANG types are just immutable value holders for simple value
@@ -41,7 +42,7 @@ final class EncapsulatedValueCodec extends ReflectionBasedCodec implements Schem
     static Callable<EncapsulatedValueCodec> loader(final Class<?> typeClz, TypeDefinition<?> typeDef) {
         return () -> {
             final Method m;
-            if (typeDef instanceof BooleanTypeDefinition) {
+            if (typeDef instanceof BooleanTypeDefinition || typeDef instanceof EmptyTypeDefinition) {
                 m = typeClz.getMethod("isValue");
             } else {
                 m = typeClz.getMethod("getValue");
index 5aa18d8c4ce943d72fe06e81922cc0f402748018..e0a4162b8c55db829399a7fbb9f71ce64373faec 100644 (file)
@@ -99,8 +99,6 @@ abstract class ValueTypeCodec implements Codec<Object, Object> {
             return EnumerationCodec.loader(typeClz, (EnumTypeDefinition) rootType);
         } else if (rootType instanceof BitsTypeDefinition) {
             return BitsCodec.loader(typeClz, (BitsTypeDefinition) rootType);
-        } else if (rootType instanceof EmptyTypeDefinition) {
-            return EMPTY_LOADER;
         }
         return EncapsulatedValueCodec.loader(typeClz, def);
     }
index df84389461d7efa79a412cfac11b8aede6bf5c36..d8ea0146fe24c8e9efb7249ecbc881733f2403de 100644 (file)
@@ -18,6 +18,9 @@ import org.opendaylight.mdsal.binding.generator.util.JavassistUtils;
 import org.opendaylight.yang.gen.v1.bug8903.rev170829.DefaultPolicy;
 import org.opendaylight.yang.gen.v1.bug8903.rev170829.DefaultPolicyBuilder;
 import org.opendaylight.yang.gen.v1.bug8903.rev170829.PolicyLoggingFlag;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.typedef.empty.rev170829.TestCont;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.typedef.empty.rev170829.TestContBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.typedef.empty.rev170829.TypedefEmpty;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -28,6 +31,8 @@ public class TypedefTest extends AbstractBindingRuntimeTest {
 
     private static final InstanceIdentifier<DefaultPolicy> BA_DEFAULT_POLICY =
             InstanceIdentifier.builder(DefaultPolicy.class).build();
+    private static final InstanceIdentifier<TestCont> BA_TEST_CONT =
+            InstanceIdentifier.builder(TestCont.class).build();
     private BindingNormalizedNodeCodecRegistry registry;
 
     @Override
@@ -53,4 +58,20 @@ public class TypedefTest extends AbstractBindingRuntimeTest {
         assertEquals(binding,readed.getValue());
 
     }
+
+    @Test
+    public void testTypedefEmptyType() {
+        TestCont binding = new TestContBuilder()
+                .setEmptyLeaf(true)
+                .setEmptyLeaf2(new TypedefEmpty(true))
+                .setEmptyLeaf3(true)
+                .build();
+        final Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> dom =
+                registry.toNormalizedNode(BA_TEST_CONT, binding);
+        final Entry<InstanceIdentifier<?>, DataObject> readed =
+                registry.fromNormalizedNode(dom.getKey(),dom.getValue());
+
+        assertEquals(binding,readed.getValue());
+
+    }
 }
diff --git a/binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-typedef-empty.yang b/binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-typedef-empty.yang
new file mode 100755 (executable)
index 0000000..aaec07b
--- /dev/null
@@ -0,0 +1,27 @@
+module opendaylight-test-typedef-empty {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:mdsal:test:typedef:empty";
+    prefix "typedef-empty";
+
+    revision "2017-08-29" {
+    }
+
+    typedef typedef-empty {
+        type empty;
+    }
+
+    container test-cont{
+      leaf empty-leaf {
+        type empty;
+      }
+
+      leaf empty-leaf2 {
+        type typedef-empty;
+      }
+
+      leaf empty-leaf3{
+         type empty;
+         default "";
+      }
+    }
+}