package org.opendaylight.yangtools.sal.java.api.generator\r
\r
+import java.util.Arrays;\r
import java.util.LinkedHashSet\r
import java.util.List\r
import java.util.Map\r
import org.opendaylight.yangtools.yang.binding.Augmentable\r
import static org.opendaylight.yangtools.binding.generator.util.Types.*\r
import java.util.HashMap\r
-import java.util.Collections\r
-\r
+import java.util.Collections\rimport org.opendaylight.yangtools.yang.binding.DataObject
+import java.util.ArrayList
+
/**\r
* Template for generating JAVA builder classes. \r
*/\r
\r
«generateFields(false)»\r
\r
+ «generateConstructorsFromIfcs(type)»\r
+\r
+ «generateSetterFromIfcs(type)»\r
+\r
«generateGetters(false)»\r
\r
«generateSetters»\r
\r
private static final class «type.name»«IMPL» implements «type.name» {\r
\r
+ «implementedInterfaceGetter»\r
+\r
«generateFields(true)»\r
\r
«generateConstructor»\r
}\r
'''\r
\r
+ def private generateConstructorsFromIfcs(Type type) '''\r
+ public «type.name»«BUILDER»() {\r
+ } \r
+ «IF (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject))»\r
+ «val ifc = type as GeneratedType»\r
+ «FOR impl : ifc.implements»\r
+ «generateConstructorFromIfc(impl)»\r
+ «ENDFOR»\r
+ «ENDIF»\r
+ '''\r
+\r
+ def private generateConstructorFromIfc(Type impl) '''\r
+ «IF (impl instanceof GeneratedType) && !((impl as GeneratedType).methodDefinitions.empty)»\r
+ «val implType = impl as GeneratedType»\r
+\r
+ public «type.name»«BUILDER»(«implType.fullyQualifiedName» arg) {\r
+ «printConstructorProperties(implType)»\r
+ }\r
+ «FOR implTypeImplement : implType.implements»\r
+ «generateConstructorFromIfc(implTypeImplement)»\r
+ «ENDFOR»\r
+ «ENDIF»\r
+ '''\r
+\r
+ def private printConstructorProperties(Type implementedIfc) '''\r
+ «IF (implementedIfc instanceof GeneratedType && !(implementedIfc instanceof GeneratedTransferObject))»\r
+ «val ifc = implementedIfc as GeneratedType»\r
+ «FOR getter : ifc.methodDefinitions»\r
+ this._«getter.propertyNameFromGetter» = arg.«getter.name»();\r
+ «ENDFOR»\r
+ «FOR impl : ifc.implements»\r
+ «printConstructorProperties(impl)»\r
+ «ENDFOR»\r
+ «ENDIF»\r
+ '''\r
+\r
+ def private generateSetterFromIfcs(Type type) '''\r
+ «IF (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject))»\r
+ «val ifc = type as GeneratedType»\r
+ «val List<Type> done = new ArrayList()»\r
+ public void fieldsFrom(«DataObject.importedName» arg) {\r
+ «FOR impl : ifc.implements»\r
+ «generateSettersForIfc(impl, done)»\r
+ «ENDFOR»\r
+ }\r
+ «ENDIF»\r
+ '''\r
+\r
+ def private generateSettersForIfc(Type impl, List<Type> done) '''\r
+ «IF (impl instanceof GeneratedType) && !((impl as GeneratedType).methodDefinitions.empty)»\r
+ «val implType = impl as GeneratedType»\r
+ «val boolean added = done.contains(impl)»\r
+ «IF !(added)»\r
+ if (arg instanceof «implType.fullyQualifiedName») {\r
+ «printSetterProperties(implType, done)»\r
+ }\r
+ «ENDIF»\r
+ «FOR implTypeImplement : implType.implements»\r
+ «generateSettersForIfc(implTypeImplement, done)»\r
+ «ENDFOR»\r
+ «ENDIF»\r
+ '''\r
+\r
+ def private printSetterProperties(Type implementedIfc, List<Type> done) '''\r
+ «IF (implementedIfc instanceof GeneratedType && !(implementedIfc instanceof GeneratedTransferObject))»\r
+ «val ifc = implementedIfc as GeneratedType»\r
+ «val boolean added = done.contains(ifc)»\r
+ «IF !(added)»\r
+ «FOR getter : ifc.methodDefinitions»\r
+ this._«getter.propertyNameFromGetter» = ((«implementedIfc.fullyQualifiedName»)arg).«getter.name»();\r
+ «ENDFOR»\r
+ «val add = done.add(ifc)»\r
+ «ENDIF»\r
+ «FOR impl : ifc.implements»\r
+ «printSetterProperties(impl, done)»\r
+ «ENDFOR»\r
+ «ENDIF»\r
+ '''\r
+\r
/**\r
* Template method which generates class attributes.\r
* \r
def private generateSetters() '''\r
«FOR field : properties SEPARATOR '\n'»\r
public «type.name»«BUILDER» set«field.name.toFirstUpper»(«field.returnType.importedName» value) {\r
+ «generateLengthRestrictions(field.returnType, "value")»\r
+\r
this.«field.fieldName» = value;\r
return this;\r
}\r
}\r
«ENDIF»\r
'''\r
- \r
+\r
/**\r
* Template method which generate constructor for IMPL class.\r
* \r
int result = 1;\r
«FOR property : properties»\r
«IF property.returnType.name.contains("[")»\r
- result = prime * result + ((«property.fieldName» == null) ? 0 : java.util.Arrays.hashCode(«property.fieldName»));\r
+ result = prime * result + ((«property.fieldName» == null) ? 0 : «Arrays.importedName».hashCode(«property.fieldName»));\r
«ELSE»\r
result = prime * result + ((«property.fieldName» == null) ? 0 : «property.fieldName».hashCode());\r
«ENDIF»\r
return false;\r
}\r
«IF property.returnType.name.contains("[")»\r
- } else if(!java.util.Arrays.equals(«fieldName», other.«fieldName»)) {\r
+ } else if(!«Arrays.importedName».equals(«fieldName», other.«fieldName»)) {\r
«ELSE»\r
} else if(!«fieldName».equals(other.«fieldName»)) {\r
«ENDIF»\r
'''«type.fullyQualifiedName»Builder'''.toString\r
}\r
\r
+ def implementedInterfaceGetter() '''\r
+ public «Class.importedName»<«type.importedName»> getImplementedInterface() {\r
+ return «type.importedName».class;\r
+ }\r
+ '''\r
+ \r
}\r
\r