@import org.opendaylight.mdsal.binding.javav2.java.api.generator.rangeGenerators.LengthGenerator
@import org.opendaylight.mdsal.binding.javav2.model.api.ConcreteType
@import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedType
+@import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTypeForBuilder
@import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject
@import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty
@import org.opendaylight.mdsal.binding.javav2.model.api.Type
@(genType: GeneratedType, properties: Set[GeneratedProperty], importedNames: Map[String, String],
ImportedNamesWithProperties: Map[GeneratedProperty, String], augmentField: GeneratedProperty, copyConstructorHelper: String,
-getterMethods: List[String])
+getterMethods: List[String], parentTypeForBuilderName: String, childTreeNode: Boolean, instantiable: Boolean)
@if(genType != null) {
@{wrapToDocumentation(formatDataForJavaDocBuilder(importedNames.get("genType")))}
public class @{genType.getName}Builder implements @{getSimpleNameForBuilder} <@{importedNames.get("genType")}> {
@generateSetters()
+ @@Override
public @{genType.getName} build() {
return new @{genType.getName}Impl(this);
}
private static final class @{genType.getName}Impl implements @{genType.getName} {
-
+ @if(instantiable) {
@implementedInterfaceGetter()
+ }
@generateFields(true)
@generateEquals()
@generateToString()
+
+ @generateImplementedMethods()
}
}
}
}
@implementedInterfaceGetter() = {
- public @{importedNames.get("class")}<@{importedNames.get("genType")}> getImplementedInterface() {
+ @@Override
+ public @{importedNames.get("class")}<@{importedNames.get("genType")}> implementedInterface() {
return @{importedNames.get("genType")}.class;
}
}
}
@generateMethodFieldsFrom() = {
- @if(genType.isInstanceOf[GeneratedType] && !genType.isInstanceOf[GeneratedTransferObject]) {
+ @if(genType.isInstanceOf[GeneratedType] && genType.isInstanceOf[GeneratedTypeForBuilder]
+ && !genType.isInstanceOf[GeneratedTransferObject]) {
@if(hasImplementsFromUses(genType.asInstanceOf[GeneratedType])) {
/**
- *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 <- getAllIfcs(genType.asInstanceOf[GeneratedType])) {
* <li>@{impl.getFullyQualifiedName}</li>
public void fieldsFrom(@{importedNames.get("treeNode")} arg) {
boolean isValidArg = false;
@for(impl <- getAllIfcs(genType.asInstanceOf[GeneratedType])) {
- @if(impl.isInstanceOf[GeneratedType] && !impl.asInstanceOf[GeneratedType].getMethodDefinitions.isEmpty) {
+ @if(impl.isInstanceOf[GeneratedType] && impl.isInstanceOf[GeneratedTypeForBuilder]
+ && !impl.asInstanceOf[GeneratedType].getMethodDefinitions.isEmpty) {
if (arg instanceof @{impl.asInstanceOf[GeneratedType].getFullyQualifiedName}) {
- @if(!impl.isInstanceOf[GeneratedTransferObject]) {
- @for(getter <- genType.asInstanceOf[GeneratedType].getMethodDefinitions) {
+ @if(impl.isInstanceOf[GeneratedType] && impl.isInstanceOf[GeneratedTypeForBuilder]
+ && !impl.isInstanceOf[GeneratedTransferObject]) {
+ @for(getter <- impl.asInstanceOf[GeneratedType].getMethodDefinitions) {
this._@{propertyNameFromGetter(getter)} = ((@{impl.asInstanceOf[GeneratedType].getFullyQualifiedName})arg).@{getter.getName}();
}
}
* Generate constructor with argument of given type.
*@
@generateConstructorFromIfc(impl: Type) = {
- @if(impl.isInstanceOf[GeneratedType]) {
+ @if(impl.isInstanceOf[GeneratedType] && impl.isInstanceOf[GeneratedTypeForBuilder]) {
@if(!impl.asInstanceOf[GeneratedType].getMethodDefinitions.isEmpty) {
public @{genType.getName}Builder(
@{impl.getFullyQualifiedName} arg) {
}
}
+@generateImplType() = {
+@defining(genType.getName + "Impl") {typeImpl => @typeImpl}
+}
+
+@generateBuilderType() = {
+@defining(genType.getName + "Builder") {typeBuilder => @typeBuilder}
+}
+
+@generateInnerBuilderType() = {
+@defining("(" + genType.getName + "Builder base)") {typeInnerBuilder => @typeInnerBuilder}
+}
+
+@generateInnerType() = {
+@defining("(" + genType.getName + " base)") {innerType => @innerType}
+}
+
@generateCopyConstructor(impl: Boolean) = {
@if(impl) {private} else {public}
- @{genType.getName}
- @if(impl) {Impl} else {Builder}
- (@{genType.getName}
- @if(impl) {Builder} base) {
+ @if(impl) {@generateImplType()} else {@generateBuilderType()}
+ @if(impl) {@generateInnerBuilderType()} else {@generateInnerType()}
+ {
@{copyConstructorHelper}
@if(augmentField != null) {
@if(impl) {
getRestrictions(field.getReturnType).getLengthConstraints)}
}
}
- public @{genType.getName}Builder set@{toFirstUpper(field.getName)}(final @{importedNames.get("augmentFieldReturnType")} value) {
+
+ public @{genType.getName}Builder set@{toFirstUpper(field.getName)}(final @{field.getReturnType.getFullyQualifiedName} value) {
@if(!field.getReturnType.isInstanceOf[GeneratedType] && getRestrictions(field.getReturnType) != null) {
if (value != null) {
@if(getRestrictions(field.getReturnType).getRangeConstraints != null && !getRestrictions(field.getReturnType).getRangeConstraints.isEmpty) {
@if(augmentField != null) {
@@SuppressWarnings("unchecked")
@if(addOverride) {@@Override}
- public <E extends @{importedNames.get("augmentFieldReturnType")}> E get@{toFirstUpper(augmentField.getName)}
+ public <E extends @{importedNames.get("augmentation")}<? super @{genType.getName}>> E get@{toFirstUpper(augmentField.getName)}
(@{importedNames.get("class")}<E> augmentationType) {
if (augmentationType == null) {
throw new IllegalArgumentException("Augmentation Type reference cannot be NULL!");
@if(properties != null) {
@@Override
public @{importedNames.get("string")} toString() {
- @{importedNames.get("stringBuilder")} builder = new @{importedNames.get("stringBuilder")} ("@{genType.getName} [");
- boolean first = true;
- @for(property <- properties) {
+ @{importedNames.get("string")} name = "@{genType.getName} [";
+ @{importedNames.get("stringBuilder")} builder = new @{importedNames.get("stringBuilder")}(name);
+ @for((property, index) <- properties.zipWithIndex) {
if (@{fieldName(property)} != null) {
- if (first) {
- first = false;
- } else {
- builder.append(", ");
- }
builder.append("@{fieldName(property)}=");
@if(property.getReturnType.getName.contains("[")) {
builder.append(@{importedNames.get("arrays")}.toString(@{fieldName(property)}));
} else {
builder.append(@{fieldName(property)});
}
+ @if(properties.size() > 1 && index < properties.size()-1){
+ builder.append(", ");
+ }
}
}
@if(augmentField != null) {
- if (first) {
- first = false;
- } @{"else"} {
- builder.append(", ");
+ @if(!properties.isEmpty()){
+ final int builderLength = builder.length();
+ final int builderAdditionalLength = builder.substring(name.length(), builderLength).length();
+ if (builderAdditionalLength > 2 && !builder.substring(builderLength - 2, builderLength).equals(", ")) {
+ builder.append(", ");
+ }
}
builder.append("@{augmentField.getName}=");
builder.append(@{augmentField.getName}.values());
+ return builder.append(']').toString();
+ } else {
+ @if(properties.isEmpty()){
+ return builder.append(']').toString();
+ } else {
+ return builder.append(']').toString();
+ }
}
- return builder.append(']').toString();
+ }
+ }
+}
+
+@generateImplementedMethods() = {
+ @if(childTreeNode) {
+ @@Override
+ public @{importedNames.get("item")}<@{parentTypeForBuilderName}> treeIdentifier() {
+ //TODO implement
+ return null;
+ }
+ }
+
+ @if(augmentField != null) {
+ @@Override
+ public @{importedNames.get("classInstMap")}<@{importedNames.get("augmentation")}<? super @{genType.getName}>>
+ augments() {
+ //TODO implement
+ return null;
}
}
}
if (!(obj instanceof @{importedNames.get("treeNode")})) {
return false;
}
- if (!@{importedNames.get("genType")}.class.equals(((@{importedNames.get("treeNode")})obj).getImplementedInterface)) {
+ @if(parentTypeForBuilderName != null) {
+ if (!(obj instanceof @{importedNames.get("instantiable")})) {
+ return false;
+ }
+ if (!@{importedNames.get("genType")}.class.equals(((@{importedNames.get("instantiable")})obj)
+ .implementedInterface())) {
return false;
}
+ }
@{importedNames.get("genType")} other = (@{importedNames.get("genType")})obj;
@for(property <- properties) {
@if(property.getReturnType.getName.contains("[")) {