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.
*/
-class ListKeyTemplate extends ClassTemplate {
-
+final class ListKeyTemplate extends ClassTemplate {
/**
* Creates instance of this class with concrete <code>genType</code>.
*
super(genType)
}
-
- override final allValuesConstructor() '''
+ 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»
- «CODEHELPERS.importedName».requireValue(«p.fieldName»);
+ «val fieldName = p.fieldName»
+ this.«fieldName» = «CODEHELPERS.importedName».requireKeyProp(«fieldName», "«p.name»")«p.cloneCall»;
«ENDFOR»
«FOR p : properties»
«generateRestrictions(type, p.fieldName, p.returnType)»
«ENDFOR»
+ }
+ '''
- «FOR p : allProperties»
- «val fieldName = p.fieldName»
- «IF p.returnType.name.endsWith("[]")»
- this.«fieldName» = «fieldName».clone();
- «ELSE»
- this.«fieldName» = «fieldName»;
- «ENDIF»
- «ENDFOR»
+ 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 final getterMethod(GeneratedProperty field) {
+ 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»
'''
- public «field.returnType.importedNonNull» «field.getterMethodName»() {
- «val fieldName = field.fieldName»
- «IF field.returnType.name.endsWith("[]")»
- return «fieldName».clone();
- «ELSE»
- return «fieldName»;
- «ENDIF»
+ }
+
+ private static def Type findListType(GeneratedType type) {
+ for (Type implType : type.getImplements()) {
+ if (implType instanceof ParameterizedType) {
+ val identifiable = BindingTypes.extractKeyType(implType)
+ if (identifiable !== null) {
+ return identifiable
+ }
}
- '''
+ }
+ return null
}
}