Improve javadoc for generated keys
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / ListKeyTemplate.xtend
index 0087e95aeb4e031ce0e91c33b8b7b850d4c226a0..14d92906eff9b2348098d34784d96527fa4d3a3e 100644 (file)
@@ -8,7 +8,11 @@
 package org.opendaylight.mdsal.binding.java.api.generator
 
 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty
+import org.opendaylight.mdsal.binding.model.api.GeneratedType
 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject
+import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
+import org.opendaylight.mdsal.binding.model.api.Type
+import org.opendaylight.mdsal.binding.model.ri.BindingTypes
 
 /**
  * Template for generating JAVA class.
@@ -24,6 +28,14 @@ final class ListKeyTemplate extends ClassTemplate {
     }
 
     override allValuesConstructor() '''
+        /**
+         * Constructs an instance.
+         *
+         «FOR p : allProperties»
+            * @param «p.fieldName» the entity «p.getName»
+         «ENDFOR»
+         * @throws NullPointerException if any of the arguments are null
+         */
         public «type.name»(«allProperties.asNonNullArgumentsDeclaration») {
             «FOR p : allProperties»
                 «val fieldName = p.fieldName»
@@ -36,8 +48,39 @@ final class ListKeyTemplate extends ClassTemplate {
     '''
 
     override getterMethod(GeneratedProperty field) '''
+        /**
+         * Return «field.getName», guaranteed to be non-null.
+         *
+         * @return {@code «field.returnType.importedName»} «field.getName», guaranteed to be non-null.
+         */
         public «field.returnType.importedNonNull» «field.getterMethodName»() {
             return «field.fieldName»«field.cloneCall»;
         }
     '''
+
+    override protected String formatDataForJavaDoc(GeneratedType type) {
+        val listType = findListType(type)
+        if (listType === null) {
+            return ""
+        }
+
+        val importedName = listType.importedName
+        return '''
+            This class represents the key of {@link «importedName»} class.
+
+            @see «importedName»
+        '''
+    }
+
+    private static def Type findListType(GeneratedType type) {
+        for (Type implType : type.getImplements()) {
+            if (implType instanceof ParameterizedType) {
+                val identifiable = BindingTypes.extractIdentifiable(implType)
+                if (identifiable !== null) {
+                    return identifiable
+                }
+            }
+        }
+        return null
+    }
 }