Simplify UnionTemplate stringValue() dispatch 76/81076/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 19 Mar 2019 11:19:41 +0000 (12:19 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 21 Mar 2019 12:24:44 +0000 (13:24 +0100)
We have a complicated if in two cases, simplify it and take
advantage of Types.BYTE_ARRAY.

Change-Id: Ib413d5f987b0dd15cf29fbc429bde68bc35c1379
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 7531d77c44d5b10be7d7728ff028792440d66a38)

binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend

index 84e9d78f665b750f94a0cb63371878b1cff1b442..c4acfe905e260f45742d017bb6ca0c6256acfecb 100644 (file)
@@ -8,12 +8,14 @@
 package org.opendaylight.mdsal.binding.java.api.generator
 
 import static org.opendaylight.mdsal.binding.model.util.Types.BOOLEAN;
+import static org.opendaylight.mdsal.binding.model.util.Types.BYTE_ARRAY;
 import static org.opendaylight.mdsal.binding.model.util.Types.getOuterClassName;
 
 import com.google.common.io.BaseEncoding
 import java.util.Arrays
 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject
 import org.opendaylight.mdsal.binding.model.api.Enumeration
+import org.opendaylight.mdsal.binding.model.api.Type
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
 
 /**
@@ -119,22 +121,10 @@ class UnionTemplate extends ClassTemplate {
                 «ELSEIF propRet instanceof GeneratedTransferObject && (propRet as GeneratedTransferObject).unionType»
                     ««« union type
                 return «field».stringValue();
-                «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
-                        && (propRet as GeneratedTransferObject).typedef  // Is it a typedef
-                        && (propRet as GeneratedTransferObject).properties !== null
-                        && !(propRet as GeneratedTransferObject).properties.empty
-                        && ((propRet as GeneratedTransferObject).properties.size == 1)
-                        && (propRet as GeneratedTransferObject).properties.get(0).name.equals("value")
-                        && BOOLEAN.equals((propRet as GeneratedTransferObject).properties.get(0).returnType) // And the property value is of type boolean»
+                «ELSEIF BOOLEAN.equals(propRet.typedefReturnType)»
                     ««« generated boolean typedef
                 return «field».isValue().toString();
-                «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
-                        && (propRet as GeneratedTransferObject).typedef  // Is it a typedef
-                        && (propRet as GeneratedTransferObject).properties !== null
-                        && !(propRet as GeneratedTransferObject).properties.empty
-                        && ((propRet as GeneratedTransferObject).properties.size == 1)
-                        && (propRet as GeneratedTransferObject).properties.get(0).name.equals("value")
-                        && "byte[]".equals((propRet as GeneratedTransferObject).properties.get(0).returnType.name)»
+                «ELSEIF BYTE_ARRAY.equals(propRet.typedefReturnType)»
                     ««« generated byte[] typedef
                 return «BaseEncoding.importedName».base64().encode(«field».getValue());
                 «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
@@ -153,6 +143,21 @@ class UnionTemplate extends ClassTemplate {
         }
     '''
 
+    private static def Type typedefReturnType(Type type) {
+        if (!(type instanceof GeneratedTransferObject)) {
+            return null
+        }
+        val gto = type as GeneratedTransferObject
+        if (!gto.typedef || gto.properties === null || gto.properties.size != 1) {
+            return null
+        }
+        val prop = gto.properties.get(0)
+        if (prop.name.equals("value")) {
+            return prop.returnType
+        }
+        return null
+    }
+
     override protected copyConstructor() '''
         /**
          * Creates a copy from Source Object.