Export declared regexes to generated code
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / BuilderTemplate.xtend
index d168473450cfbdce58c2ad538a638ff3c2ebb6b9..16cf52c02430afebe72257cfac4e6cb8531ffe36 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.mdsal.binding.java.api.generator
 
+import com.google.common.collect.ImmutableMap
 import com.google.common.collect.ImmutableSortedSet
 import java.util.ArrayList
 import java.util.Arrays
@@ -33,6 +34,7 @@ import org.opendaylight.yangtools.yang.binding.Augmentable
 import org.opendaylight.yangtools.yang.binding.AugmentationHolder
 import org.opendaylight.yangtools.yang.binding.DataObject
 import org.opendaylight.yangtools.yang.binding.Identifiable
+import org.opendaylight.yangtools.yang.binding.CodeHelpers
 
 /**
  * Template for generating JAVA builder classes.
@@ -53,7 +55,7 @@ class BuilderTemplate extends BaseTemplate {
     /**
      * Constant with the name of the BuilderFor interface
      */
-     val static BUILDERFOR = Builder.simpleName;
+    val static BUILDERFOR = Builder.simpleName;
 
     /**
      * Constant with suffix for the classes which are generated from the builder classes.
@@ -79,7 +81,7 @@ class BuilderTemplate extends BaseTemplate {
     new(GeneratedType genType) {
         super(genType)
         this.properties = propertiesFromMethods(createMethods)
-        importMap.put(Builder.simpleName, Builder.package.name)
+        addImport(Builder.simpleName, Builder.package.name)
     }
 
     /**
@@ -210,6 +212,11 @@ class BuilderTemplate extends BaseTemplate {
         }
     }
 
+    override isLocalInnerClass(String importedTypePackageName) {
+        // Builders do not have inner types
+        return false;
+    }
+
     /**
      * Template method which generates JAVA class body for builder class and for IMPL class.
      *
@@ -217,7 +224,7 @@ class BuilderTemplate extends BaseTemplate {
      */
     override body() '''
         «wrapToDocumentation(formatDataForJavaDoc(type))»
-        public class «type.name»«BUILDER» implements «BUILDERFOR» <«type.importedName»> {
+        public class «type.name»«BUILDER» implements «BUILDERFOR»<«type.importedName»> {
 
             «generateFields(false)»
 
@@ -233,6 +240,7 @@ class BuilderTemplate extends BaseTemplate {
 
             «generateSetters»
 
+            @Override
             public «type.name» build() {
                 return new «type.name»«IMPL»(this);
             }
@@ -315,12 +323,7 @@ class BuilderTemplate extends BaseTemplate {
                     «FOR impl : ifc.getAllIfcs»
                         «generateIfCheck(impl, done)»
                     «ENDFOR»
-                    if (!isValidArg) {
-                        throw new IllegalArgumentException(
-                          "expected one of: «ifc.getAllIfcs.toListOfNames» \n" +
-                          "but was: " + arg
-                        );
-                    }
+                    «CodeHelpers.importedName».validValue(isValidArg, arg, "«ifc.getAllIfcs.toListOfNames»");
                 }
             «ENDIF»
         «ENDIF»
@@ -328,7 +331,7 @@ class BuilderTemplate extends BaseTemplate {
 
     def private generateMethodFieldsFromComment(GeneratedType type) '''
         /**
-         *Set fields from given grouping argument. Valid argument is instance of one of following types:
+         * Set fields from given grouping argument. Valid argument is instance of one of following types:
          * <ul>
          «FOR impl : type.getAllIfcs»
          * <li>«impl.fullyQualifiedName»</li>
@@ -434,21 +437,21 @@ class BuilderTemplate extends BaseTemplate {
              «/* FIXME: generate checkers as simple blocks and embed them directly in setters  */»
              «val restrictions = field.returnType.restrictions»
              «IF !(field.returnType instanceof GeneratedType) && restrictions !== null»
-                    «IF !restrictions.rangeConstraints.nullOrEmpty»
+                    «IF restrictions.rangeConstraint.present»
                         «val rangeGenerator = AbstractRangeGenerator.forType(field.returnType)»
-                        «rangeGenerator.generateRangeChecker(field.name.toFirstUpper, restrictions.rangeConstraints
+                        «rangeGenerator.generateRangeChecker(field.name.toFirstUpper, restrictions.rangeConstraint.get
 
                     «ENDIF»
-                    «IF !restrictions.lengthConstraints.nullOrEmpty»
-                    «LengthGenerator.generateLengthChecker(field.fieldName.toString, field.returnType, restrictions.lengthConstraints
+                    «IF restrictions.lengthConstraint.present»
+                    «LengthGenerator.generateLengthChecker(field.fieldName.toString, field.returnType, restrictions.lengthConstraint.get
 
                     «ENDIF»
             «ENDIF»
             public «type.name»«BUILDER» set«field.name.toFirstUpper»(final «field.returnType.importedName» value) {
             «IF !(field.returnType instanceof GeneratedType) && restrictions !== null»
-                «IF restrictions !== null && (!restrictions.rangeConstraints.nullOrEmpty || !restrictions.lengthConstraints.nullOrEmpty
+                «IF restrictions !== null && (restrictions.rangeConstraint.present || restrictions.lengthConstraint.present
                 if (value != null) {
-                    «IF !restrictions.rangeConstraints.nullOrEmpty»
+                    «IF restrictions.rangeConstraint.present»
                         «val rangeGenerator = AbstractRangeGenerator.forType(field.returnType)»
                         «IF field.returnType instanceof ConcreteType»
                             «rangeGenerator.generateRangeCheckerCall(field.name.toFirstUpper, "value")»
@@ -456,7 +459,7 @@ class BuilderTemplate extends BaseTemplate {
                             «rangeGenerator.generateRangeCheckerCall(field.name.toFirstUpper, "value.getValue()")»
                         «ENDIF»
                     «ENDIF»
-                    «IF !restrictions.lengthConstraints.nullOrEmpty»
+                    «IF restrictions.lengthConstraint.present»
                         «IF field.returnType instanceof ConcreteType»
                             «LengthGenerator.generateLengthCheckerCall(field.fieldName.toString, "value")»
                          «ELSE»
@@ -472,8 +475,8 @@ class BuilderTemplate extends BaseTemplate {
         «ENDFOR»
         «IF augmentField !== null»
 
-            public «type.name»«BUILDER» add«augmentField.name.toFirstUpper»(«Class.importedName»<? extends «augmentField.returnType.importedName»> augmentationType, «augmentField.returnType.importedName» augmentation) {
-                if (augmentation == null) {
+            public «type.name»«BUILDER» add«augmentField.name.toFirstUpper»(«Class.importedName»<? extends «augmentField.returnType.importedName»> augmentationType, «augmentField.returnType.importedName» augmentationValue) {
+                if (augmentationValue == null) {
                     return remove«augmentField.name.toFirstUpper»(augmentationType);
                 }
 
@@ -481,7 +484,7 @@ class BuilderTemplate extends BaseTemplate {
                     this.«augmentField.name» = new «HashMap.importedName»<>();
                 }
 
-                this.«augmentField.name».put(augmentationType, augmentation);
+                this.«augmentField.name».put(augmentationType, augmentationValue);
                 return this;
             }
 
@@ -531,17 +534,7 @@ class BuilderTemplate extends BaseTemplate {
             «ENDFOR»
             «IF augmentField !== null»
                 «IF impl»
-                    switch (base.«augmentField.name».size()) {
-                    case 0:
-                        this.«augmentField.name» = «Collections.importedName».emptyMap();
-                        break;
-                    case 1:
-                        final «Map.importedName».Entry<«Class.importedName»<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»> e = base.«augmentField.name».entrySet().iterator().next();
-                        this.«augmentField.name» = «Collections.importedName».<«Class.importedName»<? extends «augmentField.returnType.importedName»>, «augmentField.returnType.importedName»>singletonMap(e.getKey(), e.getValue());
-                        break;
-                    default :
-                        this.«augmentField.name» = new «HashMap.importedName»<>(base.«augmentField.name»);
-                    }
+                    this.«augmentField.name» = «ImmutableMap.importedName».copyOf(base.«augmentField.name»);
                 «ELSE»
                     if (base instanceof «type.name»«IMPL») {
                         «type.name»«IMPL» impl = («type.name»«IMPL») base;
@@ -607,10 +600,7 @@ class BuilderTemplate extends BaseTemplate {
             @SuppressWarnings("unchecked")
             «IF addOverride»@Override«ENDIF»
             public <E extends «augmentField.returnType.importedName»> E get«augmentField.name.toFirstUpper»(«Class.importedName»<E> augmentationType) {
-                if (augmentationType == null) {
-                    throw new IllegalArgumentException("Augmentation Type reference cannot be NULL!");
-                }
-                return (E) «augmentField.name».get(augmentationType);
+                return (E) «augmentField.name».get(«CodeHelpers.importedName».nonNullValue(augmentationType, "augmentationType"));
             }
         «ENDIF»
     '''
@@ -745,6 +735,7 @@ final int builderLength = builder.length();
     '''
 
     def implementedInterfaceGetter() '''
+    @Override
     public «Class.importedName»<«type.importedName»> getImplementedInterface() {
         return «type.importedName».class;
     }