From fef0f5e1f61a03f9bd74ac1c8cbdf104204f951f Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 28 May 2015 21:33:18 +0200 Subject: [PATCH] BUG-1485: switch BuilderTemplate to new range enforcement This switches the template for builders to the new range enforcement code. Change-Id: I1368a6a6922b2e982b9f4274dca32cf73b888d4b Signed-off-by: Robert Varga (cherry picked from commit 5b7dc4042d5827c60bf9ca9daaaf369242c931f9) --- .../java/api/generator/BuilderTemplate.xtend | 71 +++++++------------ 1 file changed, 25 insertions(+), 46 deletions(-) diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend index 22649f4967..038a2a8c18 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend @@ -445,14 +445,32 @@ class BuilderTemplate extends BaseTemplate { def private generateSetters() ''' «FOR field : properties SEPARATOR '\n'» «val length = field.fieldName + "_length"» - «val range = field.fieldName + "_range"» + «val restrictions = field.returnType.restrictions» + «IF restrictions != null» + «IF !restrictions.rangeConstraints.nullOrEmpty» + «val rangeGenerator = AbstractRangeGenerator.forType(field.returnType)» + «rangeGenerator.generateRangeChecker(field.name.toFirstUpper, restrictions.rangeConstraints)» + + «ENDIF» + «ENDIF» public «type.name»«BUILDER» set«field.name.toFirstUpper»(«field.returnType.importedName» value) { - «generateRestrictions(field, "value", length, range)» + «IF restrictions != null && !restrictions.rangeConstraints.nullOrEmpty» + if (value != null) { + «val rangeGenerator = AbstractRangeGenerator.forType(field.returnType)» + «IF field.returnType instanceof ConcreteType» + «rangeGenerator.generateRangeCheckerCall(field.name.toFirstUpper, "value")» + «ELSE» + «rangeGenerator.generateRangeCheckerCall(field.name.toFirstUpper, "value.getValue()")» + «ENDIF» + } + «ENDIF» + «generateRestrictions(field, "value", length)» this.«field.fieldName» = value; return this; } «generateLengthMethod(length, field.returnType, type.name+BUILDER, length)» - «generateRangeMethod(range, field.returnType.restrictions, field.returnType, type.name+BUILDER, range)» + «val range = field.fieldName + "_range"» + «generateRangeMethod(range, restrictions, field.returnType, type.name+BUILDER, range)» «ENDFOR» «IF augmentField != null» @@ -478,25 +496,22 @@ class BuilderTemplate extends BaseTemplate { «ENDIF» ''' - def generateRestrictions(GeneratedProperty field, String paramName, String lengthGetter, String rangeGetter) ''' + def private generateRestrictions(GeneratedProperty field, String paramName, String lengthGetter) ''' «val Type type = field.returnType» «IF type instanceof ConcreteType» - «createRestrictions(type, paramName, type.name.contains("["), lengthGetter, rangeGetter)» + «createRestrictions(type, paramName, type.name.contains("["), lengthGetter)» «ELSEIF type instanceof GeneratedTransferObject» - «createRestrictions(type, paramName, isArrayType(type as GeneratedTransferObject), lengthGetter, rangeGetter)» + «createRestrictions(type, paramName, isArrayType(type as GeneratedTransferObject), lengthGetter)» «ENDIF» ''' - def private createRestrictions(Type type, String paramName, boolean isArray, String lengthGetter, String rangeGetter) ''' + def private createRestrictions(Type type, String paramName, boolean isArray, String lengthGetter) ''' «val restrictions = type.getRestrictions» «IF restrictions !== null» «val boolean isNestedType = !(type instanceof ConcreteType)» «IF !restrictions.lengthConstraints.empty» «generateLengthRestriction(type, paramName, lengthGetter, isNestedType, isArray)» «ENDIF» - «IF !restrictions.rangeConstraints.empty» - «generateRangeRestriction(type, paramName, rangeGetter, isNestedType)» - «ENDIF» «ENDIF» ''' @@ -517,42 +532,6 @@ class BuilderTemplate extends BaseTemplate { } ''' - def private generateRangeRestriction(Type type, String paramName, String getterName, boolean isNestedType) ''' - if («paramName» != null) { - «printRangeConstraint(type, paramName, isNestedType)» - boolean isValidRange = false; - for («Range.importedName»<«type.importedNumber»> r : «getterName»()) { - if (r.contains(_constraint)) { - isValidRange = true; - } - } - if (!isValidRange) { - throw new IllegalArgumentException(String.format("Invalid range: %s, expected: %s.", «paramName», «getterName»)); - } - } - ''' - - def private printRangeConstraint(Type returnType, String paramName, boolean isNestedType) ''' - «IF BigDecimal.canonicalName.equals(returnType.fullyQualifiedName)» - «BigDecimal.importedName» _constraint = new «BigDecimal.importedName»(«paramName»«IF isNestedType».getValue()«ENDIF».toString()); - «ELSE» - «IF isNestedType» - «val propReturnType = findProperty(returnType as GeneratedTransferObject, "value").returnType» - «IF propReturnType.fullyQualifiedName.equals(BigInteger.canonicalName)» - «BigInteger.importedName» _constraint = «paramName».getValue(); - «ELSE» - «BigInteger.importedName» _constraint = «BigInteger.importedName».valueOf(«paramName».getValue()); - «ENDIF» - «ELSE» - «IF returnType.fullyQualifiedName.equals(BigInteger.canonicalName)» - «BigInteger.importedName» _constraint = «paramName»; - «ELSE» - «BigInteger.importedName» _constraint = «BigInteger.importedName».valueOf(«paramName»); - «ENDIF» - «ENDIF» - «ENDIF» - ''' - def private generateLengthMethod(String methodName, Type type, String className, String varName) ''' «val Restrictions restrictions = type.restrictions» «IF restrictions != null && !(restrictions.lengthConstraints.empty)» -- 2.36.6