package org.opendaylight.mdsal.binding.java.api.generator
import static java.util.Objects.requireNonNull
+import static org.opendaylight.mdsal.binding.generator.util.BaseYangTypes.EMPTY_TYPE;
import static org.opendaylight.mdsal.binding.model.util.Types.BOOLEAN;
import static org.opendaylight.mdsal.binding.model.util.Types.BYTE_ARRAY;
import static org.opendaylight.mdsal.binding.model.util.Types.STRING;
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.
def private allValuesConstructor() '''
public «type.name»(«allProperties.asArgumentsDeclaration») {
- «IF false == parentProperties.empty»
+ «IF !parentProperties.empty»
super(«parentProperties.asArguments»);
«ENDIF»
«FOR p : allProperties»
@«ConstructorParameters.importedName»("«TypeConstants.VALUE_PROP»")
@«ConstructorProperties.importedName»("«TypeConstants.VALUE_PROP»")
public «type.name»(«allProperties.asArgumentsDeclaration») {
- «IF false == parentProperties.empty»
+ «IF !parentProperties.empty»
super(«parentProperties.asArguments»);
«ENDIF»
«FOR p : allProperties»
def protected genConstructor(GeneratedProperty property, Iterable<GeneratedProperty> other) '''
public «type.name»(«property.returnType.importedName + " " + property.name») {
- «IF false == parentProperties.empty»
+ «IF !parentProperties.empty»
super(«parentProperties.asArguments»);
«ENDIF»
* @param source Source object
*/
public «type.name»(«type.name» source) {
- «IF false == parentProperties.empty»
+ «IF !parentProperties.empty»
super(source);
«ENDIF»
«FOR p : properties»
return new «genTO.name»(«Base64.importedName».getDecoder().decode(defaultValue));
«ELSEIF STRING.equals(prop.returnType)»
return new «genTO.name»(defaultValue);
- «ELSEIF Constants.EMPTY.equals(prop.returnType)»
+ «ELSEIF EMPTY_TYPE.equals(prop.returnType)»
«Preconditions.importedName».checkArgument(defaultValue.isEmpty(), "Invalid value %s", defaultValue);
return new «genTO.name»(«Empty.importedName».getInstance());
«ELSEIF allProperties.size > 1»