def packageDefinition() '''package «type.packageName»;'''
- protected def getFullyQualifiedName() {
- return type.fullyQualifiedName
- }
-
final public def generate() {
val _body = body()
'''
return sb.toString
}
- /**
- * Print length constraint.
- * This should always be a BigInteger (only string and binary can have length restriction)
- */
- def printLengthConstraint(Type returnType, Class<? extends Number> clazz, String paramName, boolean isNestedType, boolean isArray) '''
- «clazz.importedNumber» _constraint = «clazz.importedNumber».valueOf(«paramName»«IF isNestedType».getValue()«ENDIF».length«IF !isArray»()«ENDIF»);
- '''
-
def protected generateToString(Collection<GeneratedProperty> properties) '''
«IF !properties.empty»
@Override
return restrictions
}
- def boolean isArrayType(GeneratedTransferObject type) {
- var isArray = false
- val GeneratedProperty value = findProperty(type, "value")
- if (value != null && value.returnType.name.contains("[")) {
- isArray = true
- }
- return isArray
- }
-
- def String toQuote(Object obj) {
- return "\"" + obj.toString + "\"";
- }
-
/**
* Template method which generates method parameters with their types from <code>parameters</code>.
*
ENDIF
»'''
+ @Deprecated
def protected String importedNumber(Class<? extends Number> clazz) {
if (clazz.equals(typeof(BigDecimal))) {
return BigDecimal.importedName
return BigInteger.importedName
}
+ @Deprecated
def protected String importedNumber(Type clazz) {
if (clazz.fullyQualifiedName.equals(BigDecimal.canonicalName)) {
return BigDecimal.importedName
return BigInteger.importedName
}
+ @Deprecated
def protected String numericValue(Class<? extends Number> clazz, Object numberValue) {
val number = clazz.importedName;
val value = numberValue.toString
*/
package org.opendaylight.yangtools.sal.java.api.generator
-import com.google.common.collect.ImmutableList
import com.google.common.collect.ImmutableSortedSet
import com.google.common.collect.Range
import java.math.BigDecimal
import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
import org.opendaylight.yangtools.sal.binding.model.api.Type
import org.opendaylight.yangtools.yang.binding.Augmentable
+import org.opendaylight.yangtools.yang.binding.AugmentationHolder
import org.opendaylight.yangtools.yang.binding.DataObject
import org.opendaylight.yangtools.yang.binding.Identifiable
-import org.opendaylight.yangtools.yang.binding.AugmentationHolder
import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint
/**
«FOR f : properties»
private«IF _final» final«ENDIF» «f.returnType.importedName» «f.fieldName»;
«val restrictions = f.returnType.restrictions»
- «IF !_final && restrictions != null»
- «IF !(restrictions.lengthConstraints.empty)»
- private static «List.importedName»<«Range.importedName»<«f.returnType.importedNumber»>> «f.fieldName»_length;
- «ENDIF»
+ «IF !_final && restrictions != null && !(restrictions.lengthConstraints.empty)»
+ «LengthGenerator.generateLengthChecker(f.fieldName.toString, f.returnType, restrictions.lengthConstraints)»
«ENDIF»
«ENDFOR»
«ENDIF»
*/
def private generateSetters() '''
«FOR field : properties SEPARATOR '\n'»
- «val length = field.fieldName + "_length"»
«val restrictions = field.returnType.restrictions»
«IF restrictions != null»
«IF !restrictions.rangeConstraints.nullOrEmpty»
«ENDIF»
}
«ENDIF»
- «generateRestrictions(field, "value", length)»
+ «generateRestrictions(field, "value")»
this.«field.fieldName» = value;
return this;
}
- «generateLengthMethod(length, field.returnType, type.name+BUILDER, length)»
+ «generateLengthMethod(field.fieldName + "_length", field.returnType)»
«val range = field.fieldName + "_range"»
«generateRangeMethod(range, restrictions, field.returnType)»
«ENDFOR»
«ENDIF»
'''
- def private generateRestrictions(GeneratedProperty field, String paramName, String lengthGetter) '''
+ def private generateRestrictions(GeneratedProperty field, String paramName) '''
«val Type type = field.returnType»
- «IF type instanceof ConcreteType»
- «createRestrictions(type, paramName, type.name.contains("["), lengthGetter)»
- «ELSEIF type instanceof GeneratedTransferObject»
- «createRestrictions(type, paramName, isArrayType(type as GeneratedTransferObject), lengthGetter)»
- «ENDIF»
- '''
-
- 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)»
+ «IF restrictions !== null && !restrictions.lengthConstraints.empty»
+ «IF type instanceof ConcreteType»
+ «LengthGenerator.generateLengthCheckerCall(field.fieldName.toString, paramName)»
+ «ELSE»
+ «LengthGenerator.generateLengthCheckerCall(field.fieldName.toString, paramName + ".getValue()")»
«ENDIF»
«ENDIF»
'''
- def private generateLengthRestriction(Type type, String paramName, String getterName, boolean isNestedType, boolean isArray) '''
- «val restrictions = type.getRestrictions»
- if («paramName» != null) {
- «val clazz = restrictions.lengthConstraints.iterator.next.min.class»
- «printLengthConstraint(type, clazz, paramName, isNestedType, isArray)»
- boolean isValidLength = false;
- for («Range.importedName»<«clazz.importedNumber»> r : «getterName»()) {
- if (r.contains(_constraint)) {
- isValidLength = true;
- }
- }
- if (!isValidLength) {
- throw new IllegalArgumentException(String.format("Invalid length: %s, expected: %s.", «paramName», «getterName»));
- }
- }
- '''
-
- def private generateLengthMethod(String methodName, Type type, String className, String varName) '''
+ @Deprecated
+ def private generateLengthMethod(String methodName, Type type) '''
«val Restrictions restrictions = type.restrictions»
«IF restrictions != null && !(restrictions.lengthConstraints.empty)»
«val numberClass = restrictions.lengthConstraints.iterator.next.min.class»
@Deprecated
public static «List.importedName»<«Range.importedName»<«numberClass.importedNumber»>> «methodName»() {
«IF numberClass.equals(typeof(BigDecimal))»
- «lengthBody(restrictions, numberClass, className, varName)»
+ «lengthBody(restrictions, numberClass)»
«ELSE»
- «lengthBody(restrictions, typeof(BigInteger), className, varName)»
+ «lengthBody(restrictions, typeof(BigInteger))»
«ENDIF»
}
«ENDIF»
'''
- def private lengthBody(Restrictions restrictions, Class<? extends Number> numberClass, String className, String varName) '''
- if («varName» == null) {
- synchronized («className».class) {
- if («varName» == null) {
- «ImmutableList.importedName».Builder<«Range.importedName»<«numberClass.importedName»>> builder = «ImmutableList.importedName».builder();
- «FOR r : restrictions.lengthConstraints»
- builder.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
- «ENDFOR»
- «varName» = builder.build();
- }
- }
- }
- return «varName»;
+ @Deprecated
+ def private lengthBody(Restrictions restrictions, Class<? extends Number> numberClass) '''
+ «List.importedName»<«Range.importedName»<«numberClass.importedName»>> ret = new «ArrayList.importedName»<>(«restrictions.lengthConstraints.size»);
+ «FOR r : restrictions.lengthConstraints»
+ ret.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
+ «ENDFOR»
+ return ret;
'''
+ @Deprecated
def private generateRangeMethod(String methodName, Restrictions restrictions, Type returnType) '''
«IF restrictions != null && !(restrictions.rangeConstraints.empty)»
«val number = returnType.importedNumber»
«ENDIF»
'''
+ @Deprecated
def private rangeBody(List<RangeConstraint> restrictions, Class<? extends Number> numberClass) '''
final «List.importedName»<«Range.importedName»<«numberClass.importedName»>> ret = new java.util.ArrayList<>(«restrictions.size»);
«FOR r : restrictions»
«ENDIF»
'''
- override protected getFullyQualifiedName() {
- '''«type.fullyQualifiedName»Builder'''.toString
- }
-
def implementedInterfaceGetter() '''
public «Class.importedName»<«type.importedName»> getImplementedInterface() {
return «type.importedName».class;
Method m = assertContainsMethod(builderClass, builderClass, "setIdBinary", b.getClass());
final List<Range<Integer>> lengthConstraints = new ArrayList<>();
lengthConstraints.add(Range.closed(1, 10));
- Object arg = new byte[] {};
- String expectedMsg = String.format("Invalid length: %s, expected: %s.", arg, lengthConstraints);
+ byte[] arg = new byte[] {};
+ String expectedMsg = String.format("Invalid length: %s, expected: %s.", Arrays.toString(arg), lengthConstraints);
assertContainsRestrictionCheck(builderObj, m, expectedMsg, arg);
m = assertContainsMethod(builderClass, builderClass, "setIdDecimal64", BigDecimal.class);
final List<Range<BigDecimal>> rangeConstraints = new ArrayList<>();
rangeConstraints.add(Range.closed(new BigDecimal("1.5"), new BigDecimal("5.5")));
- arg = new BigDecimal("1.4");
- expectedMsg = String.format("Invalid range: %s, expected: %s.", arg, rangeConstraints);
- assertContainsRestrictionCheck(builderObj, m, expectedMsg, arg);
+ Object arg1 = new BigDecimal("1.4");
+ expectedMsg = String.format("Invalid range: %s, expected: %s.", arg1, rangeConstraints);
+ assertContainsRestrictionCheck(builderObj, m, expectedMsg, arg1);
cleanUp(sourcesOutputDir, compiledOutputDir);
}