From 04280830979caa7550928315b32b35e2edf4836d Mon Sep 17 00:00:00 2001 From: Jie Han Date: Tue, 29 Aug 2017 17:19:36 +0800 Subject: [PATCH] Binding codec v1 - fix get codec for typedef of empty type - 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 --- .../codec/impl/EncapsulatedValueCodec.java | 3 ++- .../dom/codec/impl/ValueTypeCodec.java | 2 -- .../binding/dom/codec/test/TypedefTest.java | 21 +++++++++++++++ .../yang/opendaylight-test-typedef-empty.yang | 27 +++++++++++++++++++ 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100755 binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-typedef-empty.yang 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 bc1e4cebaa..95e43f688c 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 @@ -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 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"); diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ValueTypeCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ValueTypeCodec.java index 5aa18d8c4c..e0a4162b8c 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ValueTypeCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ValueTypeCodec.java @@ -99,8 +99,6 @@ abstract class ValueTypeCodec implements Codec { 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); } diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/TypedefTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/TypedefTest.java index df84389461..d8ea0146fe 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/TypedefTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/TypedefTest.java @@ -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 BA_DEFAULT_POLICY = InstanceIdentifier.builder(DefaultPolicy.class).build(); + private static final InstanceIdentifier 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> dom = + registry.toNormalizedNode(BA_TEST_CONT, binding); + final Entry, 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 index 0000000000..aaec07b305 --- /dev/null +++ b/binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-typedef-empty.yang @@ -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 ""; + } + } +} -- 2.36.6