From c78147a97c8a158ddd06897c26042f17ce6dfe53 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 27 May 2015 22:00:18 +0200 Subject: [PATCH] BUG-1485: switch ClassTemplate to new range enformcement Switch range checks for simple classes (typedefs and similar) to the new range checker. Also move printRangeConstraint() from BaseTemplate to BuilderTemplate, as it ends up being used only there. Change-Id: I16e4c1faf239d838ff415c0173ef3d06acc61701 Signed-off-by: Robert Varga (cherry picked from commit 02e503a09314f2e3192b85ed9fccaff5efb4942c) --- .../sal/java/api/generator/BaseTemplate.xtend | 23 +----------- .../java/api/generator/BuilderTemplate.xtend | 21 +++++++++++ .../java/api/generator/ClassTemplate.xtend | 36 ++++++++++--------- 3 files changed, 42 insertions(+), 38 deletions(-) diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend index 9fed74f915..ef40bb1c0c 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BaseTemplate.xtend @@ -334,27 +334,6 @@ abstract class BaseTemplate { «clazz.importedNumber» _constraint = «clazz.importedNumber».valueOf(«paramName»«IF isNestedType».getValue()«ENDIF».length«IF !isArray»()«ENDIF»); ''' - def 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 protected generateToString(Collection properties) ''' «IF !properties.empty» @Override @@ -462,7 +441,7 @@ abstract class BaseTemplate { return "new " + number + "(\"" + value + "\")" } - def private GeneratedProperty findProperty(GeneratedTransferObject gto, String name) { + def protected GeneratedProperty findProperty(GeneratedTransferObject gto, String name) { val props = gto.properties for (prop : props) { if (prop.name.equals(name)) { 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 b8b8810ae6..22649f4967 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 @@ -532,6 +532,27 @@ class BuilderTemplate extends BaseTemplate { } ''' + 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)» diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend index a3b7827ab4..350d579dcd 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend @@ -59,6 +59,8 @@ class ClassTemplate extends BaseTemplate { protected val GeneratedTransferObject genTO; + private val AbstractRangeGenerator rangeGenerator + /** * Creates instance of this class with concrete genType. * @@ -83,6 +85,13 @@ class ClassTemplate extends BaseTemplate { this.enums = genType.enumerations this.consts = genType.constantDefinitions this.enclosedGeneratedTypes = genType.enclosedTypes + + if (restrictions != null && !restrictions.rangeConstraints.nullOrEmpty) { + rangeGenerator = AbstractRangeGenerator.forType(findProperty(genType, "value").returnType) + Preconditions.checkNotNull(rangeGenerator) + } else { + rangeGenerator = null + } } /** @@ -117,7 +126,11 @@ class ClassTemplate extends BaseTemplate { !restrictions.lengthConstraints.nullOrEmpty)» «generateConstraints» + «IF !restrictions.rangeConstraints.nullOrEmpty» + «rangeGenerator.generateRangeChecker("_value", restrictions.rangeConstraints)» + «ENDIF» «ENDIF» + «constructors» «defaultInstance» @@ -344,7 +357,13 @@ class ClassTemplate extends BaseTemplate { «generateLengthRestriction(returnType, restrictions, paramName, isNestedType)» «ENDIF» «IF !restrictions.rangeConstraints.empty» - «generateRangeRestriction(returnType, paramName, isNestedType)» + if («paramName» != null) { + «IF isNestedType» + «rangeGenerator.generateRangeCheckerCall(paramName, paramName + ".getValue()")» + «ELSE» + «rangeGenerator.generateRangeCheckerCall(paramName, paramName)» + «ENDIF» + } «ENDIF» «ENDIF» ''' @@ -365,21 +384,6 @@ class ClassTemplate extends BaseTemplate { } ''' - def private generateRangeRestriction(Type returnType, String paramName, boolean isNestedType) ''' - if («paramName» != null) { - «printRangeConstraint(returnType, paramName, isNestedType)» - boolean isValidRange = false; - for («Range.importedName»<«returnType.importedNumber»> r : «IF isNestedType»«returnType.importedName».«ENDIF»range()) { - if (r.contains(_constraint)) { - isValidRange = true; - } - } - if (!isValidRange) { - throw new IllegalArgumentException(String.format("Invalid range: %s, expected: %s.", «paramName», «IF isNestedType»«returnType.importedName».«ENDIF»range())); - } - } - ''' - def protected copyConstructor() ''' /** * Creates a copy from Source Object. -- 2.36.6