*/
package org.opendaylight.yangtools.sal.java.api.generator
+import com.google.common.base.Preconditions
import com.google.common.collect.ImmutableList
import com.google.common.collect.Lists
import com.google.common.collect.Range
import java.util.List
import java.util.regex.Pattern
import org.opendaylight.yangtools.binding.generator.util.TypeConstants
+import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
import org.opendaylight.yangtools.sal.binding.model.api.Constant
import org.opendaylight.yangtools.sal.binding.model.api.Enumeration
import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty
import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject
import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType
import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
-import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
-import com.google.common.base.Preconditions
import org.opendaylight.yangtools.sal.binding.model.api.Type
-import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
+import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
+import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint
/**
* Template for generating JAVA class.
«generateLengthMethod("length", "_length")»
- «generateRangeMethod("range", "_range")»
+ «generateRangeMethod()»
}
«ENDIF»
'''
- def private generateRangeMethod(String methodName, String varName) '''
+ private def rangeBody(List<RangeConstraint> restrictions, Class<? extends Number> numberClass) '''
+ «List.importedName»<«Range.importedName»<«numberClass.importedName»>> ret = new java.util.ArrayList<>(«restrictions.size»);
+ «FOR r : restrictions»
+ ret.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
+ «ENDFOR»
+ '''
+
+ def private generateRangeMethod() '''
«IF restrictions != null && !(restrictions.rangeConstraints.empty)»
«val returnType = allProperties.iterator.next.returnType»
/**
* @deprecated This method is slated for removal in a future release. See BUG-1485 for details.
*/
@Deprecated
- public static «List.importedName»<«Range.importedName»<«returnType.importedNumber»>> «methodName»() {
- return «varName»;
+ public static «List.importedName»<«Range.importedName»<«returnType.importedNumber»>> range() {
+ «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)»
+ «rangeBody(restrictions.rangeConstraints, BigDecimal)»
+ «ELSE»
+ «rangeBody(restrictions.rangeConstraints, BigInteger)»
+ «ENDIF»
+ return ret;
}
«ENDIF»
'''
def private generateConstraints() '''
static {
- «IF !restrictions.rangeConstraints.nullOrEmpty»
- «generateRangeConstraints»
- «ENDIF»
«IF !restrictions.lengthConstraints.nullOrEmpty»
«generateLengthConstraints»
«ENDIF»
}
'''
- private def generateRangeConstraints() '''
- «IF !allProperties.nullOrEmpty»
- «val returnType = allProperties.iterator.next.returnType»
- «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)»
- «rangeBody(restrictions, BigDecimal, genTO.importedName, "_range")»
- «ELSE»
- «rangeBody(restrictions, BigInteger, genTO.importedName, "_range")»
- «ENDIF»
- «ENDIF»
- '''
-
- private def rangeBody(Restrictions restrictions, Class<? extends Number> numberClass, String className, String varName) '''
- «ImmutableList.importedName».Builder<«Range.importedName»<«numberClass.importedName»>> builder = «ImmutableList.importedName».builder();
- «FOR r : restrictions.rangeConstraints»
- builder.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
- «ENDFOR»
- «varName» = builder.build();
- '''
-
private def lengthBody(Restrictions restrictions, Class<? extends Number> numberClass, String className, String varName) '''
«ImmutableList.importedName».Builder<«Range.importedName»<«numberClass.importedName»>> builder = «ImmutableList.importedName».builder();
«FOR r : restrictions.lengthConstraints»
«IF !(restrictions.lengthConstraints.empty)»
private static final «List.importedName»<«Range.importedName»<«prop.returnType.importedNumber»>> _length;
«ENDIF»
- «IF !(restrictions.rangeConstraints.empty)»
- private static final «List.importedName»<«Range.importedName»<«prop.returnType.importedNumber»>> _range;
- «ENDIF»
«ENDIF»
«ENDIF»
«IF !properties.empty»
private static final String GET_VAL = "getValue";
private static final String UNITS = "_UNITS";
private static final String LENGTH = "_length";
- private static final String RANGE = "_range";
@Test
public void test() throws Exception {
// typedef int32-ext1
assertFalse(int32Ext1Class.isInterface());
assertContainsField(int32Ext1Class, VAL, Integer.class);
- assertContainsField(int32Ext1Class, RANGE, List.class);
assertContainsFieldWithValue(int32Ext1Class, "serialVersionUID", Long.TYPE, 5351634010010233292L, Integer.class);
// assertEquals(3, int32Ext1Class.getDeclaredFields().length);
// typedef int32-ext2
assertFalse(int32Ext2Class.isInterface());
- assertContainsField(int32Ext1Class, RANGE, List.class);
assertContainsFieldWithValue(int32Ext2Class, UNITS, String.class, "mile", Integer.class);
assertContainsFieldWithValue(int32Ext2Class, "serialVersionUID", Long.TYPE, 317831889060130988L, Integer.class);
// assertEquals(3, int32Ext2Class.getDeclaredFields().length);
// typedef my-decimal-type
assertFalse(myDecimalTypeClass.isInterface());
assertContainsField(myDecimalTypeClass, VAL, BigDecimal.class);
- assertContainsField(myDecimalTypeClass, RANGE, List.class);
assertContainsFieldWithValue(myDecimalTypeClass, "serialVersionUID", Long.TYPE, 3143735729419861095L,
BigDecimal.class);
// assertEquals(3, myDecimalTypeClass.getDeclaredFields().length);
// typedef my-decimal-type2
assertFalse(myDecimalType2Class.isInterface());
assertContainsField(myDecimalType2Class, VAL, BigDecimal.class);
- assertContainsField(myDecimalType2Class, RANGE, List.class);
assertContainsFieldWithValue(myDecimalType2Class, "serialVersionUID", Long.TYPE, -672265764962082714L, BigDecimal.class);
// assertEquals(3, myDecimalType2Class.getDeclaredFields().length);
assertContainsMethod(myDecimalType2Class, BigDecimal.class, "getValue");