import static org.opendaylight.mdsal.binding.model.util.Types.BOOLEAN;
import static org.opendaylight.mdsal.binding.model.util.Types.getOuterClassName;
-import com.google.common.base.Preconditions;
import com.google.common.io.BaseEncoding
-import java.beans.ConstructorProperties
import java.util.Arrays
-import org.opendaylight.mdsal.binding.model.api.GeneratedProperty
import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject
import org.opendaylight.mdsal.binding.model.api.Enumeration
import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition
«IF properties.empty && !parentProperties.empty»
«parentConstructor»
«ENDIF»
+
+ «generateStringValue»
'''
private def unionConstructors() '''
«FOR property : finalProperties SEPARATOR "\n"»
- «val propRet = property.returnType»
- «IF "char[]".equals(propRet.name)»
- /**
- * Constructor provided only for using in JMX. Don't use it for
- * construction new object of this union type.
- */
- @«ConstructorProperties.importedName»("«property.name»")
- public «type.name»(«propRet.importedName» «property.fieldName») {
- «String.importedName» defVal = new «String.importedName»(«property.fieldName»);
- «type.name» defInst = «typeBuilder()».getDefaultInstance(defVal);
- «FOR other : finalProperties»
- «IF other.name.equals("value")»
- «IF other.returnType.importedName.contains("[]")»
- this.«other.fieldName» = «other.fieldName» == null ? null : «other.fieldName».clone();
- «ELSE»
- this.«other.fieldName» = «other.fieldName»;
- «ENDIF»
- «ELSE»
- this.«other.fieldName» = defInst.«other.fieldName»;
- «ENDIF»
- «ENDFOR»
- }
- «ELSE»
- «val actualType = property.returnType»
- «val restrictions = restrictionsForSetter(actualType)»
+ «val actualType = property.returnType»
+ «val restrictions = restrictionsForSetter(actualType)»
+ «IF restrictions !== null»
+ «generateCheckers(property, restrictions, actualType)»
+ «ENDIF»
+ «val propertyAndTopParentProperties = parentProperties + #[property]»
+ public «type.name»(«propertyAndTopParentProperties.asArgumentsDeclaration») {
+ super(«parentProperties.asArguments»);
«IF restrictions !== null»
- «generateCheckers(property, restrictions, actualType)»
-
+ «checkArgument(property, restrictions, actualType, property.fieldName.toString)»
«ENDIF»
- «val propertyAndTopParentProperties = parentProperties + #[property]»
- public «type.name»(«propertyAndTopParentProperties.asArgumentsDeclaration») {
- super(«parentProperties.asArguments»);
- «IF restrictions !== null»
- «checkArgument(property, restrictions, actualType, property.fieldName.toString)»
+ this.«property.fieldName» = «property.fieldName»;
+ «FOR other : finalProperties»
+ «IF property != other»
+ this.«other.fieldName» = null;
«ENDIF»
- this.«property.fieldName» = «property.fieldName»;
- «FOR other : finalProperties»
- «IF property != other && !"value".equals(other.name)»
- this.«other.fieldName» = null;
- «ENDIF»
- «ENDFOR»
- }
- «ENDIF»
+ «ENDFOR»
+ }
«ENDFOR»
'''
«ENDFOR»
'''
- override protected getterMethod(GeneratedProperty field) {
- if (!"value".equals(field.name)) {
- return super.getterMethod(field)
- }
-
- Preconditions.checkArgument("char[]".equals(field.returnType.importedName))
-
- '''
- public char[] «field.getterMethodName»() {
- if («field.fieldName» == null) {
- «FOR property : finalProperties.filter([ p | !"value".equals(p.name)]) SEPARATOR " else"»
- if («property.fieldName» != null) {
- «val propRet = property.returnType»
- «IF "java.lang.String".equals(propRet.fullyQualifiedName)»
- ««« type string
- «field.fieldName» = «property.fieldName».toCharArray();
- «ELSEIF "org.opendaylight.yangtools.yang.binding.InstanceIdentifier".equals(propRet.fullyQualifiedName)»
- ««« type instance-identifier
- «field.fieldName» = «property.fieldName».toString().toCharArray();
- «ELSEIF "byte[]".equals(propRet.name)»
- ««« type binary
- «field.fieldName» = new «String.importedName»(«property.fieldName»).toCharArray();
- «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang")
- || propRet instanceof Enumeration
- || propRet.fullyQualifiedName.startsWith("java.math")»
- ««« type int*, uint, decimal64 or enumeration*
- «field.fieldName» = «property.fieldName».toString().toCharArray();
- «ELSEIF propRet instanceof GeneratedTransferObject && (propRet as GeneratedTransferObject).unionType»
- ««« union type
- «field.fieldName» = «property.fieldName».getValue();
- «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
- && (propRet as GeneratedTransferObject).typedef // Is it a typedef
- && (propRet as GeneratedTransferObject).properties !== null
- && !(propRet as GeneratedTransferObject).properties.empty
- && ((propRet as GeneratedTransferObject).properties.size == 1)
- && (propRet as GeneratedTransferObject).properties.get(0).name.equals("value")
- && BOOLEAN.equals((propRet as GeneratedTransferObject).properties.get(0).returnType)» // And the property value is of type boolean
- ««« generated boolean typedef
- «field.fieldName» = «property.fieldName».isValue().toString().toCharArray();
- «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
- && (propRet as GeneratedTransferObject).typedef // Is it a typedef
- && (propRet as GeneratedTransferObject).properties !== null
- && !(propRet as GeneratedTransferObject).properties.empty
- && ((propRet as GeneratedTransferObject).properties.size == 1)
- && (propRet as GeneratedTransferObject).properties.get(0).name.equals("value")
- && "byte[]".equals((propRet as GeneratedTransferObject).properties.get(0).returnType.name)»
- ««« generated byte[] typedef
- «field.fieldName» = «BaseEncoding.importedName».base64().encode(«property.fieldName».getValue()).toCharArray();
- «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
- && (propRet as GeneratedTransferObject).typedef // Is it a typedef
- && (propRet as GeneratedTransferObject).baseType instanceof BitsTypeDefinition»
- ««« generated bits typedef
- «field.fieldName» = «Arrays.importedName».toString(«property.fieldName».getValue()).toCharArray();
- «ELSE»
- ««« generated type
- «field.fieldName» = «property.fieldName».getValue().toString().toCharArray();
- «ENDIF»
- }
- «ENDFOR»
- }
- return «field.fieldName» == null ? null : «field.fieldName».clone();
+ def generateStringValue()
+ '''
+ /**
+ * Return a String representing the value of this union.
+ *
+ * @return String representation of this union's value.
+ */
+ public «String.importedName» stringValue() {
+ «FOR property : finalProperties»
+ «val field = property.fieldName»
+ if («field» != null) {
+ «val propRet = property.returnType»
+ «IF "java.lang.String".equals(propRet.fullyQualifiedName)»
+ ««« type string
+ return «field»;
+ «ELSEIF "org.opendaylight.yangtools.yang.binding.InstanceIdentifier".equals(propRet.fullyQualifiedName)»
+ ««« type instance-identifier
+ return «field».toString();
+ «ELSEIF "byte[]".equals(propRet.name)»
+ ««« type binary
+ return new «String.importedName»(«field»);
+ «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang") || propRet instanceof Enumeration
+ || propRet.fullyQualifiedName.startsWith("java.math")»
+ ««« type int*, uint, decimal64 or enumeration*
+ return «field».toString();
+ «ELSEIF propRet instanceof GeneratedTransferObject && (propRet as GeneratedTransferObject).unionType»
+ ««« union type
+ return «field».stringValue();
+ «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
+ && (propRet as GeneratedTransferObject).typedef // Is it a typedef
+ && (propRet as GeneratedTransferObject).properties !== null
+ && !(propRet as GeneratedTransferObject).properties.empty
+ && ((propRet as GeneratedTransferObject).properties.size == 1)
+ && (propRet as GeneratedTransferObject).properties.get(0).name.equals("value")
+ && BOOLEAN.equals((propRet as GeneratedTransferObject).properties.get(0).returnType) // And the property value is of type boolean»
+ ««« generated boolean typedef
+ return «field».isValue().toString();
+ «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
+ && (propRet as GeneratedTransferObject).typedef // Is it a typedef
+ && (propRet as GeneratedTransferObject).properties !== null
+ && !(propRet as GeneratedTransferObject).properties.empty
+ && ((propRet as GeneratedTransferObject).properties.size == 1)
+ && (propRet as GeneratedTransferObject).properties.get(0).name.equals("value")
+ && "byte[]".equals((propRet as GeneratedTransferObject).properties.get(0).returnType.name)»
+ ««« generated byte[] typedef
+ return «BaseEncoding.importedName».base64().encode(«field».getValue());
+ «ELSEIF propRet instanceof GeneratedTransferObject // Is it a GeneratedTransferObject
+ && (propRet as GeneratedTransferObject).typedef // Is it a typedef
+ && (propRet as GeneratedTransferObject).baseType instanceof BitsTypeDefinition»
+ ««« generated bits typedef
+ return «Arrays.importedName».toString(«field».getValue());
+ «ELSE»
+ ««« generated type
+ return «field».getValue().toString();
+ «ENDIF»
}
- '''
- }
+ «ENDFOR»
- override isReadOnly(GeneratedProperty field) {
- return !"value".equals(field.name) && super.isReadOnly(field)
- }
+ throw new IllegalStateException("No value assinged");
+ }
+ '''
override protected copyConstructor() '''
/**
«IF !parentProperties.empty»
super(source);
«ENDIF»
- «IF !properties.empty»
- «FOR p : properties»
- «IF !"value".equals(p.name) && p.returnType.importedName.contains("[]")»
- this.«p.fieldName» = source.«p.fieldName» == null ? null : source.«p.fieldName».clone();
- «ELSE»
- this.«p.fieldName» = source.«p.fieldName»;
- «ENDIF»
- «ENDFOR»
- «ENDIF»
+ «FOR p : properties»
+ «IF p.returnType.importedName.contains("[]")»
+ this.«p.fieldName» = source.«p.fieldName» == null ? null : source.«p.fieldName».clone();
+ «ELSE»
+ this.«p.fieldName» = source.«p.fieldName»;
+ «ENDIF»
+ «ENDFOR»
}
'''