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)
1  2 
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/TransformerGenerator.xtend

index 5bf234759bbf4614380108d5079c21bcc3e18209,b4a25f66c15ce4494dd083ab50a78e7bb5df5a26..81f39e4e5de9c877c2badba835b02507f2fceac8
@@@ -319,7 -319,7 +319,7 @@@ class TransformerGenerator extends Abst
          }
  
          return runOnClassLoader(cls.classLoader) [ |
-             val valueTransformer = generateValueTransformer(cls, type);
+             val valueTransformer = generateValueTransformer(cls, type, typeDefinition);
              return valueTransformer;
          ]
      }
          («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 {
          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");
                              }
                              «typeSpec.resolvedName» _value = («typeSpec.resolvedName») $1;
                              «FOR en : enumSchema.values»
 -                            if(«typeSpec.resolvedName».«BindingGeneratorUtil.parseToClassName(en.name)».equals(_value)) {
 +                            if(«typeSpec.resolvedName».«BindingMapping.getClassName(en.name)».equals(_value)) {
                                  return "«en.name»";
                              }
                              «ENDFOR»
                              String _value = (String) $1;
                              «FOR en : enumSchema.values»
                                  if("«en.name»".equals(_value)) {
 -                                    return «typeSpec.resolvedName».«BindingGeneratorUtil.parseToClassName(en.name)»;
 +                                    return «typeSpec.resolvedName».«BindingMapping.getClassName(en.name)»;
                                  }
                              «ENDFOR»
                              return null;
  
      }
  
-     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
       *