Merge "BUG-990: fixed deserialization of enums."
authorTony Tkacik <ttkacik@cisco.com>
Tue, 20 May 2014 13:35:46 +0000 (13:35 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 20 May 2014 13:35:46 +0000 (13:35 +0000)
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.xtend
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/TransformerGenerator.xtend
code-generator/binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/generator/impl/GenEnumResolvingTest.java

index b4362fbd8cb4a1fdc2ab107cb92347a995228cdb..366868d29d8e32c8f13d9eae51a6ffeb4baabe6a 100644 (file)
@@ -1281,7 +1281,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
                     val enumBuilder = resolveInnerEnumFromTypeDefinition(enumTypeDef, leaf.QName, typeBuilder);
 
                     if (enumBuilder !== null) {
-                        returnType = new ReferencedTypeImpl(enumBuilder.packageName, enumBuilder.name);
+                        returnType = enumBuilder.toInstance(typeBuilder)
                     }
                     (typeProvider as TypeProviderImpl).putReferencedType(leaf.path, returnType);
                 } else if (typeDef instanceof UnionType) {
index 5bf234759bbf4614380108d5079c21bcc3e18209..81f39e4e5de9c877c2badba835b02507f2fceac8 100644 (file)
@@ -319,7 +319,7 @@ class TransformerGenerator extends AbstractTransformerGenerator {
         }
 
         return runOnClassLoader(cls.classLoader) [ |
-            val valueTransformer = generateValueTransformer(cls, type);
+            val valueTransformer = generateValueTransformer(cls, type, typeDefinition);
             return valueTransformer;
         ]
     }
@@ -893,6 +893,21 @@ class TransformerGenerator extends AbstractTransformerGenerator {
         («type.resolvedName») «type.valueSerializer(typeDefinition).resolvedName».fromDomValue(«domParameter»)
     '''
 
+    private def dispatch String deserializeValue(Type type, String domParameter, TypeDefinition<?> typeDef) {
+        if (INSTANCE_IDENTIFIER.equals(type)) {
+            return '''(«InstanceIdentifier.name») «INSTANCE_IDENTIFIER_CODEC».deserialize(«domParameter»)'''
+        } else if (CLASS_TYPE.equals(type)) {
+            return '''(«Class.name») «IDENTITYREF_CODEC».deserialize(«domParameter»)'''
+        } else if (typeDef!=null && typeDef instanceof EmptyTypeDefinition) {
+            if(domParameter == null) {
+                return ''' Boolean.FALSE '''
+            } else {
+                return ''' Boolean.TRUE '''
+            }
+        }
+        return '''(«type.resolvedName») «domParameter»'''
+    }
+
     private def dispatch Class<? extends BindingCodec<Map<QName, Object>, Object>> generateValueTransformer(
         Class<?> inputType, GeneratedTransferObject typeSpec, TypeDefinition<?> typeDef) {
         try {
@@ -1208,12 +1223,17 @@ class TransformerGenerator extends AbstractTransformerGenerator {
         return null;
     }
 
-    private def Class<?> generateValueTransformer(Class<?> inputType, Enumeration typeSpec) {
-        try {
+    private def Class<?> generateValueTransformer(Class<?> inputType, Enumeration typeSpec, TypeDefinition<?> type) {
+        var EnumerationType enumSchemaType
+        if (type instanceof EnumerationType) {
+            enumSchemaType = type as EnumerationType
+        } else {
             val typeRef = new ReferencedTypeImpl(typeSpec.packageName, typeSpec.name);
             val schema = getSchemaNode(typeRef) as ExtendedType;
-            val enumSchema = schema.baseType as EnumerationType;
-
+            enumSchemaType = schema.baseType as EnumerationType;
+        }
+        val enumSchema = enumSchemaType;
+        try {
             //log.info("Generating DOM Codec for {} with {}", inputType, inputType.classLoader)
             val ctCls = createClass(typeSpec.codecClassName) [
                 //staticField(Map,"AUGMENTATION_SERIALIZERS");
@@ -1294,22 +1314,6 @@ class TransformerGenerator extends AbstractTransformerGenerator {
 
     }
 
-    private def dispatch String deserializeValue(Type type, String domParameter, TypeDefinition<?> typeDef) {
-        if (INSTANCE_IDENTIFIER.equals(type)) {
-            return '''(«InstanceIdentifier.name») «INSTANCE_IDENTIFIER_CODEC».deserialize(«domParameter»)'''
-        } else if (CLASS_TYPE.equals(type)) {
-            return '''(«Class.name») «IDENTITYREF_CODEC».deserialize(«domParameter»)'''
-        } else if (typeDef!=null && typeDef instanceof EmptyTypeDefinition) {
-            if(domParameter == null) {
-                return ''' Boolean.FALSE '''
-            } else {
-                return ''' Boolean.TRUE '''
-            }
-        }
-        return '''(«type.resolvedName») «domParameter»'''
-
-    }
-
     /**
      * Default catch all
      *
index 9e949e1ff34cb6764b112bf369e2033b25909924..ce37ca5e25f6e090c8e18621c38979a29fafbfb1 100644 (file)
@@ -17,9 +17,7 @@ import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
-
 import org.junit.Test;
-import org.opendaylight.yangtools.binding.generator.util.ReferencedTypeImpl;
 import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator;
 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
@@ -199,15 +197,13 @@ public class GenEnumResolvingTest {
 
         assertNotNull("Expected Referenced Enum LinkUpDownTrapEnable, but was NULL!",
                 linkUpDownTrapEnable);
-        assertTrue("Expected LinkUpDownTrapEnable of type ReferencedTypeImpl",
-                linkUpDownTrapEnable instanceof ReferencedTypeImpl);
+        assertTrue("Expected LinkUpDownTrapEnable of type Enumeration", linkUpDownTrapEnable instanceof Enumeration);
         assertEquals(linkUpDownTrapEnable.getPackageName(),
                 "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev121115.interfaces.Interface");
 
         assertNotNull("Expected Referenced Enum OperStatus, but was NULL!",
                 operStatus);
-        assertTrue("Expected OperStatus of type ReferencedTypeImpl",
-                operStatus instanceof  ReferencedTypeImpl);
+        assertTrue("Expected OperStatus of type Enumeration", operStatus instanceof Enumeration);
         assertEquals(operStatus.getPackageName(),
                 "org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev121115.interfaces.Interface");
     }