Import exception references
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / AbstractBuilderTemplate.xtend
index 278abce291aee4a8c100679688e4da55b5ea91cc..464102efba80657cb9855a43aeee3e26d0f14c65 100644 (file)
@@ -7,13 +7,8 @@
  */
 package org.opendaylight.mdsal.binding.java.api.generator
 
-import static org.opendaylight.mdsal.binding.model.util.Types.STRING;
-import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD
-
-import com.google.common.base.MoreObjects
 import java.util.ArrayList
 import java.util.Collection
-import java.util.Collections
 import java.util.Comparator
 import java.util.List
 import java.util.Set
@@ -22,7 +17,7 @@ import org.opendaylight.mdsal.binding.model.api.GeneratedProperty
 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject
 import org.opendaylight.mdsal.binding.model.api.GeneratedType
 import org.opendaylight.mdsal.binding.model.api.Type
-import org.opendaylight.mdsal.binding.model.util.BindingTypes
+import org.opendaylight.mdsal.binding.model.ri.BindingTypes
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping
 
 abstract class AbstractBuilderTemplate extends BaseTemplate {
@@ -54,13 +49,14 @@ abstract class AbstractBuilderTemplate extends BaseTemplate {
         this.keyType = keyType
     }
 
-    new(GeneratedType type, GeneratedType targetType, Set<BuilderGeneratedProperty> properties, Type augmentType,
-            Type keyType) {
+    new(GeneratedType type, GeneratedType targetType, Type keyType) {
         super(type)
         this.targetType = targetType
-        this.properties = properties
-        this.augmentType = augmentType
         this.keyType = keyType
+
+        val analysis = analyzeTypeHierarchy(targetType)
+        augmentType = analysis.key
+        properties = analysis.value
     }
 
     /**
@@ -80,29 +76,6 @@ abstract class AbstractBuilderTemplate extends BaseTemplate {
         «ENDIF»
     '''
 
-    def protected final generateAugmentField() {
-        val augmentTypeRef = augmentType.importedName
-        return '''
-           «JU_MAP.importedName»<«CLASS.importedName»<? extends «augmentTypeRef»>, «augmentTypeRef»> «AUGMENTATION_FIELD» = «Collections.importedName».emptyMap();
-        '''
-    }
-
-    override generateToString(Collection<? extends GeneratedProperty> properties) '''
-        «IF properties !== null»
-            @«OVERRIDE.importedName»
-            public «STRING.importedName» toString() {
-                final «MoreObjects.importedName».ToStringHelper helper = «MoreObjects.importedName».toStringHelper("«targetType.name»");
-                «FOR property : properties»
-                    «CODEHELPERS.importedName».appendValue(helper, "«property.fieldName»", «property.fieldName»);
-                «ENDFOR»
-                «IF augmentType !== null»
-                    «CODEHELPERS.importedName».appendValue(helper, "«AUGMENTATION_FIELD»", augmentations().values());
-                «ENDIF»
-                return helper.toString();
-            }
-        «ENDIF»
-    '''
-
     /**
      * Template method which generate getter methods for IMPL class.
      *
@@ -110,7 +83,15 @@ abstract class AbstractBuilderTemplate extends BaseTemplate {
      */
     def final generateGetters(boolean addOverride) '''
         «IF keyType !== null»
-            «IF addOverride»@«OVERRIDE.importedName»«ENDIF»
+            «IF addOverride»
+            @«OVERRIDE.importedName»
+            «ELSE»
+            /**
+             * Return current value associated with the property corresponding to {@link «targetType.importedName»#«BindingMapping.IDENTIFIABLE_KEY_NAME»()}.
+             *
+             * @return current value
+             */
+            «ENDIF»
             public «keyType.importedName» «BindingMapping.IDENTIFIABLE_KEY_NAME»() {
                 return key;
             }
@@ -118,7 +99,15 @@ abstract class AbstractBuilderTemplate extends BaseTemplate {
         «ENDIF»
         «IF !properties.empty»
             «FOR field : properties SEPARATOR '\n'»
-                «IF addOverride»@«OVERRIDE.importedName»«ENDIF»
+                «IF addOverride»
+                @«OVERRIDE.importedName»
+                «ELSE»
+                /**
+                 * Return current value associated with the property corresponding to {@link «targetType.importedName»#«field.getterName»()}.
+                 *
+                 * @return current value
+                 */
+                «ENDIF»
                 «field.getterMethod»
             «ENDFOR»
         «ENDIF»
@@ -189,4 +178,12 @@ abstract class AbstractBuilderTemplate extends BaseTemplate {
         }
         return null
     }
+
+    package static def hasNonDefaultMethods(GeneratedType type) {
+        !type.methodDefinitions.isEmpty && type.methodDefinitions.exists([def | !def.isDefault])
+    }
+
+    package static def nonDefaultMethods(GeneratedType type) {
+        type.methodDefinitions.filter([def | !def.isDefault])
+    }
 }