X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fjava%2Fapi%2Fgenerator%2FUnionTemplate.xtend;h=c940dea1950d4e983c3d4c8cc9268df341860c14;hb=9fe91a158e30e4022d2027a55027e1e5ae97640b;hp=84e9d78f665b750f94a0cb63371878b1cff1b442;hpb=c241dcfa5322ac10810a1068ccd2eb57f6f2dbb2;p=mdsal.git diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend index 84e9d78f66..c940dea195 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend @@ -7,20 +7,26 @@ */ 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.getOuterClassName; +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.BINARY_TYPE; +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.BOOLEAN_TYPE; +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.EMPTY_TYPE; +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.STRING_TYPE; +import static org.opendaylight.mdsal.binding.model.ri.Types.STRING; +import static org.opendaylight.mdsal.binding.model.ri.Types.getOuterClassName; +import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.BUILDER_SUFFIX -import com.google.common.io.BaseEncoding -import java.util.Arrays +import java.util.Base64; +import org.gaul.modernizer_maven_annotations.SuppressModernizer 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 /** * Template for generating JAVA class. */ +@SuppressModernizer class UnionTemplate extends ClassTemplate { - /** * Creates instance of this class with concrete genType. * @@ -63,7 +69,7 @@ class UnionTemplate extends ClassTemplate { public «type.name»(«propertyAndTopParentProperties.asArgumentsDeclaration») { super(«parentProperties.asArguments»); «IF restrictions !== null» - «checkArgument(property, restrictions, actualType, property.fieldName.toString)» + «checkArgument(property, restrictions, actualType, property.fieldName)» «ENDIF» this.«property.fieldName» = «property.fieldName»; «FOR other : finalProperties» @@ -77,10 +83,10 @@ class UnionTemplate extends ClassTemplate { def typeBuilder() { val outerCls = getOuterClassName(type); - if(outerCls !== null) { - return outerCls + type.name + "Builder" + if (outerCls !== null) { + return outerCls + type.name + BUILDER_SUFFIX } - return type.name + "Builder" + return type.name + BUILDER_SUFFIX } private def unionConstructorsParentProperties() ''' @@ -98,61 +104,69 @@ class UnionTemplate extends ClassTemplate { * * @return String representation of this union's value. */ - public «String.importedName» stringValue() { + public «STRING.importedName» stringValue() { «FOR property : finalProperties» «val field = property.fieldName» if («field» != null) { «val propRet = property.returnType» - «IF "java.lang.String".equals(propRet.fullyQualifiedName)» + «IF STRING_TYPE.equals(propRet)» ««« type string return «field»; «ELSEIF "org.opendaylight.yangtools.yang.binding.InstanceIdentifier".equals(propRet.fullyQualifiedName)» ««« type instance-identifier return «field».toString(); - «ELSEIF "byte[]".equals(propRet.name)» + «ELSEIF BINARY_TYPE.equals(propRet)» ««« type binary - return new «String.importedName»(«field»); - «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang") || propRet instanceof Enumeration - || propRet.fullyQualifiedName.startsWith("java.math")» - ««« type int*, uint, decimal64 or enumeration* + return new «STRING.importedName»(«field»); + «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang") || propRet instanceof Enumeration» + ««« type int* or enumeration* return «field».toString(); + «ELSEIF "org.opendaylight.yangtools.yang.common".equals(propRet.packageName) + && (propRet.name.startsWith("Uint") || "Decimal64".equals(propRet.name))» + ««« type uint*, decimal64 + return «field».toCanonicalString(); «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_TYPE.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 BINARY_TYPE.equals(propRet.typedefReturnType)» ««« generated byte[] typedef - return «BaseEncoding.importedName».base64().encode(«field».getValue()); + return «Base64.importedName».getEncoder().encodeToString(«field».getValue()); + «ELSEIF EMPTY_TYPE.equals(propRet) || EMPTY_TYPE.equals(propRet.typedefReturnType)» + ««« generated empty typedef + return ""; «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject && (propRet as GeneratedTransferObject).typedef // Is it a typedef && (propRet as GeneratedTransferObject).baseType instanceof BitsTypeDefinition» ««« generated bits typedef - return «Arrays.importedName».toString(«field».getValue()); + return «JU_ARRAYS.importedName».toString(«field».getValue()); «ELSE» ««« generated type return «field».getValue().toString(); «ENDIF» } «ENDFOR» - - throw new IllegalStateException("No value assinged"); + throw new IllegalStateException("No value assigned"); } ''' + 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. @@ -164,10 +178,11 @@ class UnionTemplate extends ClassTemplate { super(source); «ENDIF» «FOR p : properties» - «IF p.returnType.importedName.contains("[]")» - this.«p.fieldName» = source.«p.fieldName» == null ? null : source.«p.fieldName».clone(); + «val fieldName = p.fieldName» + «IF p.returnType.name.endsWith("[]")» + this.«fieldName» = source.«fieldName» == null ? null : source.«fieldName».clone(); «ELSE» - this.«p.fieldName» = source.«p.fieldName»; + this.«fieldName» = source.«fieldName»; «ENDIF» «ENDFOR» }