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%2FClassTemplate.xtend;h=ef932e6e9bbd82b8ca93049d02b23f6e2e31fbbb;hb=11408d627adca7eb71ac956c3ad01f75b6b91596;hp=5af4d01a43756febf6ea3eb134f33549beb9d053;hpb=4a0b7b94c1400f03691e13e4d26f9bf32eeaf44a;p=mdsal.git diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend index 5af4d01a43..ef932e6e9b 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend @@ -8,23 +8,26 @@ package org.opendaylight.mdsal.binding.java.api.generator import static java.util.Objects.requireNonNull -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.BINARY_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.BOOLEAN_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.EMPTY_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.INSTANCE_IDENTIFIER -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.INT16_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.INT32_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.INT64_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.INT8_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.STRING_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.UINT16_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.UINT32_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.UINT64_TYPE -import static org.opendaylight.mdsal.binding.model.util.BaseYangTypes.UINT8_TYPE -import static org.opendaylight.mdsal.binding.model.util.BindingTypes.SCALAR_TYPE_OBJECT -import static org.opendaylight.mdsal.binding.model.util.Types.STRING; +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.DECIMAL64_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.EMPTY_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.INSTANCE_IDENTIFIER +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.INT16_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.INT32_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.INT64_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.INT8_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.STRING_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.UINT16_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.UINT32_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.UINT64_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BaseYangTypes.UINT8_TYPE +import static org.opendaylight.mdsal.binding.model.ri.BindingTypes.SCALAR_TYPE_OBJECT +import static org.opendaylight.mdsal.binding.model.ri.Types.BOOLEAN +import static org.opendaylight.mdsal.binding.model.ri.Types.STRING; import static extension org.apache.commons.text.StringEscapeUtils.escapeJava +import com.google.common.base.MoreObjects import com.google.common.base.Preconditions import com.google.common.collect.ImmutableList import com.google.common.collect.Lists @@ -32,6 +35,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import java.beans.ConstructorProperties import java.util.ArrayList import java.util.Base64; +import java.util.Collection import java.util.Comparator import java.util.List import java.util.Map @@ -45,7 +49,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedProperty import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject import org.opendaylight.mdsal.binding.model.api.Restrictions import org.opendaylight.mdsal.binding.model.api.Type -import org.opendaylight.mdsal.binding.model.util.TypeConstants +import org.opendaylight.mdsal.binding.model.ri.TypeConstants import org.opendaylight.mdsal.binding.spec.naming.BindingMapping import org.opendaylight.yangtools.yang.common.Empty import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition @@ -58,6 +62,7 @@ class ClassTemplate extends BaseTemplate { static val Comparator PROP_COMPARATOR = Comparator.comparing([prop | prop.name]) static val VALUEOF_TYPES = Set.of( BOOLEAN_TYPE, + DECIMAL64_TYPE, INT8_TYPE, INT16_TYPE, INT32_TYPE, @@ -145,8 +150,11 @@ class ClassTemplate extends BaseTemplate { * @return string with class source code in JAVA format */ def protected generateBody(boolean isInnerClass) ''' - «wrapToDocumentation(formatDataForJavaDoc(type))» + «type.formatDataForJavaDoc.wrapToDocumentation» «annotationDeclaration» + «IF !isInnerClass» + «generatedAnnotation» + «ENDIF» «generateClassDeclaration(isInnerClass)» { «suidDeclaration» «innerClassesDeclarations» @@ -211,7 +219,7 @@ class ClassTemplate extends BaseTemplate { def private scalarTypeObjectValue(GeneratedProperty field) ''' @«OVERRIDE.importedName» public «field.returnType.importedName» «BindingMapping.SCALAR_TYPE_OBJECT_GET_VALUE_NAME»() { - return «field.fieldName»«IF field.returnType.name.endsWith("[]")».clone()«ENDIF»; + return «field.fieldName»«field.cloneCall»; } ''' @@ -262,7 +270,7 @@ class ClassTemplate extends BaseTemplate { «ENDIF» ''' - def private allValuesConstructor() ''' + def allValuesConstructor() ''' public «type.name»(«allProperties.asArgumentsDeclaration») { «IF !parentProperties.empty» super(«parentProperties.asArguments»); @@ -301,11 +309,7 @@ class ClassTemplate extends BaseTemplate { «FOR p : properties» «val fieldName = p.fieldName» - «IF p.returnType.name.endsWith("[]")» - this.«fieldName» = «fieldName».clone(); - «ELSE» - this.«fieldName» = «fieldName»; - «ENDIF» + this.«fieldName» = «fieldName»«p.cloneCall»; «ENDFOR» } ''' @@ -351,7 +355,7 @@ class ClassTemplate extends BaseTemplate { } } - def private generateRestrictions(Type type, String paramName, Type returnType) ''' + def generateRestrictions(Type type, String paramName, Type returnType) ''' «val restrictions = type.restrictions» «IF restrictions !== null» «IF restrictions.lengthConstraint.present || restrictions.rangeConstraint.present» @@ -412,7 +416,7 @@ class ClassTemplate extends BaseTemplate { return new «genTO.name»(«Base64.importedName».getDecoder().decode(defaultValue)); «ELSEIF EMPTY_TYPE.equals(propType)» «Preconditions.importedName».checkArgument(defaultValue.isEmpty(), "Invalid value %s", defaultValue); - return new «genTO.name»(«Empty.importedName».getInstance()); + return new «genTO.name»(«Empty.importedName».value()); «ELSE» return new «genTO.name»(new «propType.importedName»(defaultValue)); «ENDIF» @@ -430,7 +434,7 @@ class ClassTemplate extends BaseTemplate { int i = 0; return new «genTO.name»( «FOR prop : allProperties SEPARATOR ","» - properties.get(i++).equals(defaultValue) ? «Boolean.importedName».TRUE : null + properties.get(i++).equals(defaultValue) ? «BOOLEAN.importedName».TRUE : null «ENDFOR» ); ''' @@ -553,7 +557,11 @@ class ClassTemplate extends BaseTemplate { @«OVERRIDE.importedName» public int hashCode() { «IF size != 1» - «hashCodeResult(genTO.hashCodeIdentifiers)» + final int prime = 31; + int result = 1; + «FOR property : genTO.hashCodeIdentifiers» + result = prime * result + «property.importedUtilClass».hashCode(«property.fieldName»); + «ENDFOR» return result; «ELSE» return «CODEHELPERS.importedName».wrapperHashCode(«genTO.hashCodeIdentifiers.get(0).fieldName»); @@ -589,6 +597,19 @@ class ClassTemplate extends BaseTemplate { «ENDIF» ''' + def private generateToString(Collection properties) ''' + «IF !properties.empty» + @«OVERRIDE.importedName» + public «STRING.importedName» toString() { + final «MoreObjects.importedName».ToStringHelper helper = «MoreObjects.importedName».toStringHelper(«type.importedName».class); + «FOR property : properties» + «CODEHELPERS.importedName».appendValue(helper, "«property.fieldName»", «property.fieldName»); + «ENDFOR» + return helper.toString(); + } + «ENDIF» + ''' + def GeneratedProperty getPropByName(String name) { for (GeneratedProperty prop : allProperties) { if (prop.name.equals(name)) {