1 package org.opendaylight.controller.sal.java.api.generator
6 class BuilderTemplate {
8 val static BUILDER = 'Builder'
9 val static IMPL = 'Impl'
11 def generate(BuilderClassDescriptor cd) '''
12 package «cd.packageName»;
13 «IF !cd.importsNames.empty»
15 «FOR in : cd.importsNames»
20 public class «cd.className»«BUILDER» {
22 «fields(cd.fields, cd.augmentField)»
25 «FOR field : cd.fields SEPARATOR '\n'»
26 public «cd.className»«BUILDER» set«field.name.toFirstUpper»(«field.type.name»«field.type.generics.print» «field.name») {
27 this.«field.name» = «field.name»;
32 «IF cd.augmentField != null»
34 public «cd.className»«BUILDER» add«cd.augmentField.name.toFirstUpper»(Class<? extends «cd.augmentField.type.name»«cd.augmentField.type.generics.print»> augmentationType, «cd.augmentField.type.name»«cd.augmentField.type.generics.print» augmentation) {
35 this.«cd.augmentField.name».put(augmentationType, augmentation);
40 public «cd.className» build() {
41 return new «cd.className»«IMPL»();
44 private class «cd.className»«IMPL» implements «cd.className» {
46 «fields(cd.fields, cd.augmentField)»
48 private «cd.className»«IMPL»() {
50 «FOR field : cd.fields»
51 this.«field.name» = «cd.className»«BUILDER».this.«field.name»;
54 «IF cd.augmentField != null»
55 this.«cd.augmentField.name».putAll(«cd.className»«BUILDER».this.«cd.augmentField.name»);
60 «FOR field : cd.fields SEPARATOR '\n'»
62 public «field.type.name»«field.type.generics.print» get«field.name.toFirstUpper»() {
67 «IF cd.augmentField != null»
70 public <E extends «cd.augmentField.type.name»«cd.augmentField.type.generics.print»> E get«cd.augmentField.name.toFirstUpper»(Class<E> augmentationType) {
71 if (augmentationType == null) {
72 throw new IllegalArgumentException("Augmentation Type reference cannot be NULL!");
74 return (E) «cd.augmentField.name».get(augmentationType);
83 def private fields(Set<BuilderClassDescriptor.FieldDeclaration> fields, BuilderClassDescriptor.FieldDeclaration augmentField) '''
86 private «field.type.name»«field.type.generics.print» «field.name»;
89 «IF augmentField != null»
90 private Map<Class<? extends «augmentField.type.name»«augmentField.type.generics.print»>, «augmentField.type.name»«augmentField.type.generics.print»> «augmentField.name» = new HashMap<>();
94 def private print(List<BuilderClassDescriptor.TypeDeclaration> generics) '''«IF generics != null && !generics.empty»<«FOR generic : generics SEPARATOR ', '»«generic.name»«ENDFOR»>«ENDIF»'''