import java.lang.reflect.Method;
import java.util.concurrent.Callable;
import org.opendaylight.mdsal.binding.dom.codec.impl.ValueTypeCodec.SchemaUnawareCodec;
+import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
/**
* Derived YANG types are just immutable value holders for simple value
static Callable<EncapsulatedValueCodec> loader(final Class<?> typeClz, final TypeDefinition<?> typeDef) {
return () -> {
- final Method m;
- if (typeDef instanceof BooleanTypeDefinition) {
- m = typeClz.getMethod("isValue");
- } else {
- m = typeClz.getMethod("getValue");
- }
+ final Method m = typeClz.getMethod(BindingMapping.SCALAR_TYPE_OBJECT_GET_VALUE_NAME);
final MethodHandle getter = LOOKUP.unreflect(m).asType(OBJ_METHOD);
final Class<?> valueType = m.getReturnType();
-
final MethodHandle constructor = LOOKUP.findConstructor(typeClz,
MethodType.methodType(void.class, valueType)).asType(OBJ_METHOD);
return new EncapsulatedValueCodec(typeClz, constructor, getter, valueType);
import org.opendaylight.yangtools.yang.common.Uint64
import org.opendaylight.yangtools.yang.common.Uint8
import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
+import org.opendaylight.mdsal.binding.model.util.BindingTypes
+import org.opendaylight.mdsal.binding.spec.naming.BindingMapping
/**
* Template for generating JAVA class.
«defaultInstance»
- «FOR field : properties SEPARATOR "\n"»
- «field.getterMethod»
- «IF !field.readOnly»
- «field.setterMethod»
- «ENDIF»
- «ENDFOR»
+ «propertyMethods»
«IF (genTO.isTypedef() && genTO.getBaseType instanceof BitsTypeDefinition)»
«generateGetValueForBitsTypeDef»
'''
+ def private propertyMethods() {
+ if (properties.empty) {
+ return ""
+ }
+ isScalarTypeObject ? scalarTypeObjectValue(properties.get(0)) : defaultProperties
+ }
+
+ def private isScalarTypeObject() {
+ for (impl : genTO.implements) {
+ if (BindingTypes.SCALAR_TYPE_OBJECT.identifier.equals(impl.identifier)) {
+ return true
+ }
+ }
+ return false
+ }
+
+ def private defaultProperties() '''
+ «FOR field : properties SEPARATOR "\n"»
+ «field.getterMethod»
+ «IF !field.readOnly»
+ «field.setterMethod»
+ «ENDIF»
+ «ENDFOR»
+ '''
+
+ def private scalarTypeObjectValue(GeneratedProperty field) '''
+ @«OVERRIDE.importedName»
+ public «field.returnType.importedName» «BindingMapping.SCALAR_TYPE_OBJECT_GET_VALUE_NAME»() {
+ return «field.fieldName»«IF field.returnType.name.endsWith("[]")».clone()«ENDIF»;
+ }
+ '''
+
/**
* Template method which generates the method <code>getValue()</code> for typedef,
* which base type is BitsDefinition.
CompilationTestUtils.assertContainsMethod(int32Ext1Class, Integer.class, GET_VAL);
defInst = CompilationTestUtils.assertContainsMethod(int32Ext1Class, int32Ext1Class, "getDefaultInstance",
String.class);
- assertEquals(6, int32Ext1Class.getDeclaredMethods().length);
+ assertEquals(7, int32Ext1Class.getDeclaredMethods().length);
List<Range<Integer>> rangeConstraints = new ArrayList<>();
rangeConstraints.add(Range.closed(2, 2147483647));
defInst = CompilationTestUtils.assertContainsMethod(stringExt1Class, stringExt1Class, "getDefaultInstance",
String.class);
CompilationTestUtils.assertContainsDefaultMethods(stringExt1Class);
- assertEquals(6, stringExt1Class.getDeclaredMethods().length);
+ assertEquals(7, stringExt1Class.getDeclaredMethods().length);
List<Range<Integer>> lengthConstraints = new ArrayList<>();
lengthConstraints.add(Range.closed(5, 11));
CompilationTestUtils.assertContainsDefaultMethods(myDecimalTypeClass);
defInst = CompilationTestUtils.assertContainsMethod(myDecimalTypeClass, myDecimalTypeClass,
"getDefaultInstance", String.class);
- assertEquals(6, myDecimalTypeClass.getDeclaredMethods().length);
+ assertEquals(7, myDecimalTypeClass.getDeclaredMethods().length);
List<Range<BigDecimal>> decimalRangeConstraints = new ArrayList<>();
decimalRangeConstraints.add(Range.closed(new BigDecimal("1.5"), new BigDecimal("5.5")));
CompilationTestUtils.assertContainsDefaultMethods(myDecimalType2Class);
defInst = CompilationTestUtils.assertContainsMethod(myDecimalType2Class, myDecimalType2Class,
"getDefaultInstance", String.class);
- assertEquals(6, myDecimalType2Class.getDeclaredMethods().length);
+ assertEquals(7, myDecimalType2Class.getDeclaredMethods().length);
List<Range<BigDecimal>> decimal2RangeConstraints = new ArrayList<>();
decimal2RangeConstraints.add(Range.closed(new BigDecimal("0"), new BigDecimal("1")));