X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fsal%2Fjava%2Fapi%2Fgenerator%2FUnionTemplate.xtend;h=b2bc7c3e16cf3771aef21fc8d858717c9c50aaf5;hb=7b1ef1557ab6e21cc2dc54c8696af1c9aacde296;hp=e65fa9fcf5cf95c73238ba4b0bd003b1dbfe8c6b;hpb=45c6c34d86b757932d5d10761808a4a4c8109435;p=mdsal.git diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend index e65fa9fcf5..b2bc7c3e16 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/UnionTemplate.xtend @@ -7,10 +7,12 @@ */ package org.opendaylight.yangtools.sal.java.api.generator -import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject +import static org.opendaylight.yangtools.binding.generator.util.Types.* +import com.google.common.base.Preconditions; import java.beans.ConstructorProperties +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty +import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject import org.opendaylight.yangtools.sal.binding.model.api.Enumeration -import static org.opendaylight.yangtools.binding.generator.util.Types.* /** * Template for generating JAVA class. @@ -24,6 +26,23 @@ class UnionTemplate extends ClassTemplate { */ new(GeneratedTransferObject genType) { super(genType) + if(isBaseEncodingImportRequired) { + this.importMap.put("BaseEncoding","com.google.common.io") + } + } + + final private def boolean isBaseEncodingImportRequired() { + for (property : finalProperties) { + val propRet = property.returnType + if (propRet instanceof GeneratedTransferObject && (propRet as GeneratedTransferObject).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)) { + return true; + } + } } override constructors() ''' @@ -40,8 +59,7 @@ class UnionTemplate extends ClassTemplate { private def unionConstructors() ''' «FOR property : finalProperties SEPARATOR "\n"» «val propRet = property.returnType» - «val isCharArray = "char[]".equals(propRet.name)» - «IF isCharArray» + «IF "char[]".equals(propRet.name)» /** * Constructor provided only for using in JMX. Don't use it for * construction new object of this union type. @@ -68,45 +86,15 @@ class UnionTemplate extends ClassTemplate { super(«parentProperties.asArguments»); this.«property.fieldName» = «property.fieldName»; «FOR other : finalProperties» - «IF property != other» - «IF "value".equals(other.name)» - «IF "java.lang.String".equals(propRet.fullyQualifiedName)» - ««« type string - this.«other.fieldName» = «property.fieldName».toCharArray(); - «ELSEIF "byte[]".equals(propRet.name)» - ««« type binary - this.«other.fieldName» = new «String.importedName»(«property.fieldName»).toCharArray(); - «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang") - || propRet instanceof Enumeration - || propRet.fullyQualifiedName.startsWith("java.math")» - ««« type int*, uint, decimal64 or enumeration* - this.«other.fieldName» = «property.fieldName».toString().toCharArray(); - «ELSEIF propRet instanceof GeneratedTransferObject && (propRet as GeneratedTransferObject).unionType» - ««« union type - this.«other.fieldName» = «property.fieldName».getValue(); - «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 - ««« generated boolean typedef - this.«other.fieldName» = «property.fieldName».isValue().toString().toCharArray(); - «ELSE» - ««« generated type - this.«other.fieldName» = «property.fieldName».getValue().toString().toCharArray(); - «ENDIF» - «ELSE» - this.«other.fieldName» = null; - «ENDIF» + «IF property != other && !"value".equals(other.name)» + this.«other.fieldName» = null; «ENDIF» «ENDFOR» } «ENDIF» «ENDFOR» ''' - + def typeBuilder() { val outerCls = getOuterClassName(type); if(outerCls !== null) { @@ -123,6 +111,70 @@ class UnionTemplate extends ClassTemplate { «ENDFOR» ''' + override protected getterMethod(GeneratedProperty field) { + if (!"value".equals(field.name)) { + return super.getterMethod(field) + } + + Preconditions.checkArgument("char[]".equals(field.returnType.importedName)) + + ''' + public char[] «field.getterMethodName»() { + if («field.fieldName» == null) { + «FOR property : finalProperties.filter([ p | !"value".equals(p.name)]) SEPARATOR " else"» + if («property.fieldName» != null) { + «val propRet = property.returnType» + «IF "java.lang.String".equals(propRet.fullyQualifiedName)» + ««« type string + «field.fieldName» = «property.fieldName».toCharArray(); + «ELSEIF "org.opendaylight.yangtools.yang.binding.InstanceIdentifier".equals(propRet.fullyQualifiedName)» + ««« type instance-identifier + «field.fieldName» = «property.fieldName».toString().toCharArray(); + «ELSEIF "byte[]".equals(propRet.name)» + ««« type binary + «field.fieldName» = new «String.importedName»(«property.fieldName»).toCharArray(); + «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang") + || propRet instanceof Enumeration + || propRet.fullyQualifiedName.startsWith("java.math")» + ««« type int*, uint, decimal64 or enumeration* + «field.fieldName» = «property.fieldName».toString().toCharArray(); + «ELSEIF propRet instanceof GeneratedTransferObject && (propRet as GeneratedTransferObject).unionType» + ««« union type + «field.fieldName» = «property.fieldName».getValue(); + «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 + ««« generated boolean typedef + «field.fieldName» = «property.fieldName».isValue().toString().toCharArray(); + «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)» + ««« generated byte[] typedef + «field.fieldName» = BaseEncoding.base64().encode(«property.fieldName».getValue()).toCharArray(); + «ELSE» + ««« generated type + «field.fieldName» = «property.fieldName».getValue().toString().toCharArray(); + «ENDIF» + } + «ENDFOR» + } + return «field.fieldName» == null ? null : «field.fieldName».clone(); + } + ''' + } + + override def isReadOnly(GeneratedProperty field) { + return !"value".equals(field.name) && super.isReadOnly(field) + } + override protected copyConstructor() ''' /** * Creates a copy from Source Object. @@ -135,7 +187,7 @@ class UnionTemplate extends ClassTemplate { «ENDIF» «IF !properties.empty» «FOR p : properties» - «IF p.returnType.importedName.contains("[]")» + «IF !"value".equals(p.name) && p.returnType.importedName.contains("[]")» this.«p.fieldName» = source.«p.fieldName» == null ? null : source.«p.fieldName».clone(); «ELSE» this.«p.fieldName» = source.«p.fieldName»;