import com.google.common.base.CharMatcher
import com.google.common.base.Splitter
-import java.math.BigDecimal
-import java.math.BigInteger
import java.util.Arrays
import java.util.Collection
import java.util.HashMap
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
- if (clazz.equals(typeof(BigInteger)) || clazz.equals(typeof(BigDecimal))) {
- if (value.equals("0")) {
- return number + ".ZERO"
- } else if (value.equals("1")) {
- return number + ".ONE"
- } else if (value.equals("10")) {
- return number + ".TEN"
- } else {
- try {
- val Long longVal = Long.valueOf(value)
- return number + ".valueOf(" + longVal + "L)"
- } catch (NumberFormatException e) {
- if (clazz.equals(typeof(BigDecimal))) {
- try {
- val Double doubleVal = Double.valueOf(value);
- return number + ".valueOf(" + doubleVal + ")"
- } catch (NumberFormatException e2) {
- }
- }
- }
- }
- }
- return "new " + number + "(\"" + value + "\")"
- }
-
def protected GeneratedProperty findProperty(GeneratedTransferObject gto, String name) {
val props = gto.properties
for (prop : props) {
package org.opendaylight.yangtools.sal.java.api.generator
import com.google.common.collect.ImmutableSortedSet
-import com.google.common.collect.Range
-import java.math.BigDecimal
-import java.math.BigInteger
import java.util.ArrayList
import java.util.Arrays
import java.util.Collection
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.MethodSignature
-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.model.api.type.RangeConstraint
/**
* Template for generating JAVA builder classes.
this.«field.fieldName» = value;
return this;
}
- «generateLengthMethod(field.fieldName + "_length", field.returnType)»
- «val range = field.fieldName + "_range"»
- «generateRangeMethod(range, restrictions, field.returnType)»
«ENDFOR»
«IF augmentField != null»
«ENDIF»
'''
- @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 This method is slated for removal in a future release. See BUG-1485 for details.
- */
- @Deprecated
- public static «List.importedName»<«Range.importedName»<«numberClass.importedNumber»>> «methodName»() {
- «IF numberClass.equals(typeof(BigDecimal))»
- «lengthBody(restrictions, numberClass)»
- «ELSE»
- «lengthBody(restrictions, typeof(BigInteger))»
- «ENDIF»
- }
- «ENDIF»
- '''
-
- @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»
- /**
- * @deprecated This method is slated for removal in a future release. See BUG-1485 for details.
- */
- @Deprecated
- public static «List.importedName»<«Range.importedName»<«number»>> «methodName»() {
- «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)»
- «rangeBody(restrictions.rangeConstraints, BigDecimal)»
- «ELSE»
- «rangeBody(restrictions.rangeConstraints, BigInteger)»
- «ENDIF»
- }
- «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»
- ret.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
- «ENDFOR»
- return ret;
- '''
-
def private CharSequence generateCopyConstructor(boolean impl) '''
«IF impl»private«ELSE»public«ENDIF» «type.name»«IF impl»«IMPL»«ELSE»«BUILDER»«ENDIF»(«type.name»«IF impl»«BUILDER»«ENDIF» base) {
«val allProps = new ArrayList(properties)»
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 com.google.common.io.BaseEncoding
import java.beans.ConstructorProperties
-import java.math.BigDecimal
-import java.math.BigInteger
import java.util.ArrayList
import java.util.Arrays
import java.util.Collections
import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
import org.opendaylight.yangtools.sal.binding.model.api.Type
import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
-import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint
/**
* Template for generating JAVA class.
«generateEquals»
«generateToString(genTO.toStringIdentifiers)»
-
- «generateLengthMethod()»
-
- «generateRangeMethod()»
-
}
'''
}
'''
- @Deprecated
- def private generateLengthMethod() '''
- «IF restrictions != null && !(restrictions.lengthConstraints.empty)»
- «val numberClass = restrictions.lengthConstraints.iterator.next.min.class»
- /**
- * @deprecated This method is slated for removal in a future release. See BUG-1485 for details.
- */
- @Deprecated
- public static «List.importedName»<«Range.importedName»<«numberClass.importedNumber»>> length() {
- «List.importedName»<«Range.importedName»<«numberClass.importedName»>> ret = new java.util.ArrayList<>(«restrictions.lengthConstraints.size»);
- «FOR r : restrictions.lengthConstraints»
- ret.add(«Range.importedName».closed(«numericValue(numberClass, r.min)», «numericValue(numberClass, r.max)»));
- «ENDFOR»
- return ret;
- }
- «ENDIF»
- '''
-
- @Deprecated
- 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»
- '''
-
- @Deprecated
- 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»>> range() {
- «IF returnType.fullyQualifiedName.equals(BigDecimal.canonicalName)»
- «rangeBody(restrictions.rangeConstraints, BigDecimal)»
- «ELSE»
- «rangeBody(restrictions.rangeConstraints, BigInteger)»
- «ENDIF»
- return ret;
- }
- «ENDIF»
- '''
-
/**
* Template method which generates inner classes inside this interface.
*
}
}
- /**
- * Asserts that class contains 'public static
- * java.util.List<com.google.common.collect.Range<java.lang.Integer>>
- * getLength()' method.
- *
- * @param clazz
- * class to test
- */
- static void assertContainsGetLengthOrRange(final Class<?> clazz, final boolean isLength) {
- try {
- Method m = clazz.getDeclaredMethod(isLength ? "length" : "range");
- java.lang.reflect.Type returnType = m.getGenericReturnType();
- assertTrue("Return type of getLength method must be ParameterizedType",
- returnType instanceof ParameterizedType);
- ParameterizedType listType = (ParameterizedType) returnType;
- assertEquals("interface java.util.List", listType.getRawType().toString());
-
- java.lang.reflect.Type[] args = listType.getActualTypeArguments();
- assertEquals(1, args.length);
- java.lang.reflect.Type range = args[0];
- assertTrue(range instanceof ParameterizedType);
- ParameterizedType pRange = (ParameterizedType) range;
- assertEquals("class com.google.common.collect.Range", pRange.getRawType().toString());
-
- args = pRange.getActualTypeArguments();
- assertEquals(1, args.length);
- } catch (NoSuchMethodException e) {
- throw new AssertionError("Method length()/range() does not exists in class " + clazz.getSimpleName());
- }
- }
-
/**
* Asserts that class implements given interface.
*
package org.opendaylight.yangtools.sal.java.api.generator.test;
import static org.junit.Assert.assertTrue;
-
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-
import org.junit.Test;
import org.opendaylight.yangtools.binding.generator.util.BindingTypes;
import org.opendaylight.yangtools.binding.generator.util.Types;
assertTrue(filesList.contains("Type4Builder.java"));
}
- private static GeneratedType createGeneratedType(String pkgName, String name) {
+ private static GeneratedType createGeneratedType(final String pkgName, final String name) {
GeneratedTypeBuilder builder = new GeneratedTypeBuilderImpl(pkgName, name);
builder.addImplementsType(BindingTypes.DATA_OBJECT);
return builder.toInstance();
import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertContainsDefaultMethods;
import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertContainsField;
import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertContainsFieldWithValue;
-import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertContainsGetLengthOrRange;
import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertContainsMethod;
import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertContainsRestrictionCheck;
import static org.opendaylight.yangtools.sal.java.api.generator.test.CompilationTestUtils.assertFilesCount;
assertContainsDefaultMethods(int32Ext1Class);
assertContainsMethod(int32Ext1Class, Integer.class, GET_VAL);
defInst = assertContainsMethod(int32Ext1Class, int32Ext1Class, "getDefaultInstance", String.class);
- assertContainsGetLengthOrRange(int32Ext1Class, false);
// assertEquals(6, int32Ext1Class.getDeclaredMethods().length);
List<Range<Integer>> rangeConstraints = new ArrayList<>();
assertEquals(3, int32Ext2Class.getDeclaredConstructors().length);
assertContainsMethod(int32Ext2Class, String.class, "toString");
defInst = assertContainsMethod(int32Ext2Class, int32Ext2Class, "getDefaultInstance", String.class);
- assertContainsGetLengthOrRange(int32Ext2Class, false);
// assertEquals(3, int32Ext2Class.getDeclaredMethods().length);
rangeConstraints.clear();
assertContainsMethod(stringExt1Class, String.class, GET_VAL);
defInst = assertContainsMethod(stringExt1Class, stringExt1Class, "getDefaultInstance", String.class);
assertContainsDefaultMethods(stringExt1Class);
- assertContainsGetLengthOrRange(stringExt1Class, true);
// assertEquals(6, stringExt1Class.getDeclaredMethods().length);
List<Range<Integer>> lengthConstraints = new ArrayList<>();
assertContainsConstructor(stringExt2Class, stringExt2Class);
assertContainsConstructor(stringExt2Class, stringExt1Class);
assertEquals(3, stringExt2Class.getDeclaredConstructors().length);
- assertContainsGetLengthOrRange(stringExt2Class, true);
defInst = assertContainsMethod(stringExt2Class, stringExt2Class, "getDefaultInstance", String.class);
// assertEquals(2, stringExt2Class.getDeclaredMethods().length);
assertContainsMethod(myDecimalTypeClass, BigDecimal.class, GET_VAL);
assertContainsDefaultMethods(myDecimalTypeClass);
defInst = assertContainsMethod(myDecimalTypeClass, myDecimalTypeClass, "getDefaultInstance", String.class);
- assertContainsGetLengthOrRange(myDecimalTypeClass, false);
// assertEquals(6, myDecimalTypeClass.getDeclaredMethods().length);
List<Range<BigDecimal>> decimalRangeConstraints = new ArrayList<>();
assertContainsMethod(myDecimalType2Class, BigDecimal.class, GET_VAL);
assertContainsDefaultMethods(myDecimalType2Class);
defInst = assertContainsMethod(myDecimalType2Class, myDecimalType2Class, "getDefaultInstance", String.class);
- assertContainsGetLengthOrRange(myDecimalType2Class, false);
// assertEquals(6, myDecimalType2Class.getDeclaredMethods().length);
List<Range<BigDecimal>> decimal2RangeConstraints = new ArrayList<>();