BUG-1485: switch BuilderTemplate to new range enforcement
authorRobert Varga <rovarga@cisco.com>
Thu, 28 May 2015 19:33:18 +0000 (21:33 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 5 Jun 2015 21:08:36 +0000 (21:08 +0000)
This switches the template for builders to the new range enforcement
code.

Change-Id: I1368a6a6922b2e982b9f4274dca32cf73b888d4b
Signed-off-by: Robert Varga <rovarga@cisco.com>
(cherry picked from commit 5b7dc4042d5827c60bf9ca9daaaf369242c931f9)

code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend

index 22649f4967b59cb1d485e3e2ef414b39e8023df7..038a2a8c18a1a7252e3d52dc3050dbea48842e5c 100644 (file)
@@ -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)»