java.Builder.xpt Maven / Gradle / Ivy
«EXTENSION java::Naming»
«EXTENSION java::ObjectMapper»
«EXTENSION java::GeneratorCommons»
«EXTENSION java::OpenAPIFunctions»
«EXTENSION java::Naming»
«EXTENSION entity::ModelProperties»
«EXTENSION functions::Class»
«EXTENSION functions::ClassifierTemplateParameter»
«EXTENSION functions::SoftLink»
«EXTENSION functions::JEAFDeprecated»
«IMPORT uml»
«IMPORT JMM»
«DEFINE GenerateBuilder(String idImpl) FOR uml::Class»
/**
* Class implements builder to create a new instance of class «this.name»
.
*/
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
public static «IF isAbstract == true» abstract «ENDIF»class Builder«this.getTemplateParams()» «IF superClass.isEmpty == false»extends «superClass.get(0).fqnWithoutGenerics()».Builder«superClass.get(0).getTemplateParams()»«ENDIF» {
«REM»Generate instance variables for each property«ENDREM»
«IF needsToImplementIdentifiable() == true»
/**
* Reference to the identifier of this object. The reference may be null since an id is not mandatory.
*/
private com.anaptecs.jeaf.xfun.api.common.ObjectIdentity> objectID;
«ENDIF»
«IF this.isCompositeDataType()»
/**
* String representation of this object.
*/
private String «this.getCompositeDateTypePublicFieldName()»;
«ELSE»
«FOREACH this.ownedAttribute.select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false && e.generateBackwardCompatibility() == false) AS attr»
«EXPAND BuilderPropertyDeclaration FOR attr»
«ENDFOREACH»
«ENDIF»
/**
* Use {@link «name»#builder()} instead of private constructor to create new builder.
*/
protected Builder( ) {
«IF superClass.isEmpty == false»super();«ENDIF»
}
/**
* Use {@link «name»#builder(«this.name»)} instead of private constructor to create new builder.
*/
protected Builder( «this.name»«this.getTemplateParams()» pObject ) {
«IF superClass.isEmpty == false»super(pObject);«ENDIF»
«IF needsToImplementIdentifiable() || this.isCompositeDataType() || this.ownedAttribute.select(e|e.isPropertySuppressed() == false).isEmpty == false»
if (pObject != null) {
// Read attribute values from passed object.
«IF needsToImplementIdentifiable() == true»
objectID = pObject.objectID;
«ENDIF»
«IF this.isCompositeDataType()»
this.set«this.getCompositeDateTypePublicFieldName().toFirstUpper()»(pObject.«this.getCompositeDateTypePublicFieldName()»);
«ELSE»
«FOREACH this.ownedAttribute.select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false && e.generateBackwardCompatibility() == false) AS attr»
«IF attr.isStatic == false»
«IF attr.isSoftLink()»
this.set«attr.getSoftLinkPropertyName().toFirstUpper()»(pObject.«attr.getSoftLinkPropertyName()»);
«ELSE»
this.«attr.asSetter()»(pObject.«attr.name»);
«ENDIF»
«ENDIF»
«ENDFOREACH»
«ENDIF»
}
«ENDIF»
}
«IF isAbstract == false && enableLegacyBuilderStyle()»
/**
* Method returns a new builder.
*
* @return {@link Builder} New builder that can be used to create new «this.name» objects.
*/
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» newBuilder( ) {
return new Builder();
}
/**
* Method creates a new builder and initialize it with the data from the passed object.
*
* @param pObject Object that should be used to initialize the builder. The parameter may be null.
* @return {@link Builder} New builder that can be used to create new «this.name» objects. The method never
* returns null.
*/
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» newBuilder( «this.name» pObject ) {
return new Builder(pObject);
}
«ENDIF»
«IF needsToImplementIdentifiable() == true»
/**
* Method sets the identifier for the object created using the builder. The reference may be null since an id is not mandatory.
*/
public Builder«this.getTemplateParams()» setID(com.anaptecs.jeaf.xfun.api.common.ObjectIdentity> pObjectID){
objectID = pObjectID;
return this;
}
«ELSE»«IF implementsIdentifiable() == true»
/**
* Method sets the identifier for the object created using the builder. The reference may be null since an id is not mandatory.
*/
@Override
public Builder«this.getTemplateParams()» setID(com.anaptecs.jeaf.xfun.api.common.ObjectIdentity> pObjectID){
super.setID(pObjectID);
return this;
}
«ENDIF»«ENDIF»
«REM»Overwritte setters for each property of super class with this Builder class as return type.«ENDREM»
«IF this.superClass.isEmpty == false»
«FOREACH this.superClass.getAllAttributesFromHierarchy().select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false) AS superAttr»
«EXPAND OverwriteBuilderSetterFromBaseClasses("Builder"+ this.getTemplateParams()) FOR superAttr»
«ENDFOREACH»
«ENDIF»
«REM»Generate setters for each property of the builder«ENDREM»
«IF this.isCompositeDataType()»
/**
* Method returns the String representation of this object.
*
* @return String String representation of this object.
*/
public Builder«this.getTemplateParams()» set«this.getCompositeDateTypePublicFieldName().toFirstUpper()»( String p«this.getCompositeDateTypePublicFieldName().toFirstUpper()» ) {
«this.getCompositeDateTypePublicFieldName()» = p«this.getCompositeDateTypePublicFieldName().toFirstUpper()»;
return this;
}
«ELSE»
«FOREACH this.ownedAttribute.select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false) AS attr»
«EXPAND BuilderSetter("Builder") FOR attr»
«ENDFOREACH»
«ENDIF»
«EXPAND jeafgenerator::api::ClassExtensionHook::CustomBuilderOperations»
«IF this.isAbstract == false»
/**
* Method creates a new instance of class «this.name». The object will be initialized with the values of the
* builder.
*
* @return «this.name» Created object. The method never returns null.
*/
public «this.name»«this.getTemplateParams()» build( ) {
«IF this.validateOnBuild() || generateObjectValidationInBuilder()»
«this.name»«this.getTemplateParams()» lObject = new «this.name»«this.getTemplateParams()»(this);
«IF isTargetRuntimeJEAF()»
com.anaptecs.jeaf.tools.api.validation.ValidationTools.getValidationTools().enforceObjectValidation(lObject);
«ENDIF»
«IF isTargetRuntimeSpring()»
com.anaptecs.jeaf.validation.api.spring.SpringValidationExecutor.getValidationExecutor().validateObject(lObject);
«ENDIF»
return lObject;
«ELSE»
return new «this.name»«this.getTemplateParams()»(this);
«ENDIF»
}
«IF isTargetRuntimeJEAF()»
/**
* Method creates a new validated instance of class «this.name». The object will be initialized with the values of the
* builder and validated afterwards.
*
* @return «this.name» Created and validated object. The method never returns null.
* @throws ConstraintViolationException in case that one or more validations for the created object failed.
*/
public «this.name»«this.getTemplateParams()» buildValidated( ) throws «getEnterpriseJavaPackage()».validation.ConstraintViolationException {
«this.name»«this.getTemplateParams()» lObject = this.build();
com.anaptecs.jeaf.tools.api.validation.ValidationTools.getValidationTools().enforceObjectValidation(lObject);
return lObject;
}
«ENDIF»
«ENDIF»
}
«ENDDEFINE»
«DEFINE GenerateBuilderBase(String idImpl) FOR uml::Class»
/**
* Class implements builder to create a new instance of class «this.name». As the class has read only attributes or associations instances can not be created directly. Instead this builder class has to be used.
*/
public static abstract class BuilderBase«this.getTemplateParams()» «IF superClass.isEmpty == false»extends «superClass.get(0).fqnWithoutGenerics()».Builder«superClass.get(0).getTemplateParams()»«ENDIF» {
«REM»Generate instance variables for each property«ENDREM»
«IF needsToImplementIdentifiable() == true»
/**
* Reference to the identifier of this object. The reference may be null since an id is not mandatory.
*/
private com.anaptecs.jeaf.xfun.api.common.ObjectIdentity> objectID;
«ENDIF»
«IF this.isCompositeDataType()»
/**
* String representation of this object.
*/
private String «this.getCompositeDateTypePublicFieldName()»;
«ELSE»
«FOREACH ownedAttribute.select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false) AS attr»
«EXPAND BuilderPropertyDeclaration FOR attr»
«ENDFOREACH»
«ENDIF»
/**
* Use {@link «this.name».builder()} instead of protected constructor to create new builder.
*/
protected BuilderBase( ) {
«IF superClass.isEmpty == false && superClass.get(0).hasReadOnlyProperties()== true»super();«ENDIF»
}
/**
* Use {@link «this.name».builder(«this.name»)} instead of protected constructor to create new builder.
*/
protected BuilderBase( «this.name»Base«this.getTemplateParams()» pObject ) {
«IF superClass.isEmpty == false && superClass.get(0).hasReadOnlyProperties()== true»super(pObject);«ENDIF»
if (pObject != null) {
// Read attribute values from passed object.
«IF needsToImplementIdentifiable() == true»
objectID = pObject.objectID;
«ENDIF»
«IF this.isCompositeDataType()»
«this.getCompositeDateTypePublicFieldName()» = pObject.«this.getCompositeDateTypePublicFieldName()»;
«ELSE»
«FOREACH ownedAttribute.select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false) AS attr»
«IF attr.isStatic == false»
«IF attr.isSoftLink()»
this.set«attr.getSoftLinkPropertyName().toFirstUpper()»(pObject.«attr.getSoftLinkPropertyName()»);
«ELSE»
this.«attr.asSetter()»(pObject.«attr.name»);
«ENDIF»
«ENDIF»
«ENDFOREACH»
«ENDIF»
}
}
«IF needsToImplementIdentifiable() == true»
/**
* Method sets the identifier for the object created using the builder. The reference may be null since an id is not mandatory.
*/
public BuilderBase«this.getTemplateParams()» setID(com.anaptecs.jeaf.xfun.api.common.ObjectIdentity> pObjectID){
objectID = pObjectID;
return this;
}
«ELSE»«IF implementsIdentifiable() == true»
/**
* Method sets the identifier for the object created using the builder. The reference may be null since an id is not mandatory.
*/
@Override
public BuilderBase«this.getTemplateParams()» setID(com.anaptecs.jeaf.xfun.api.common.ObjectIdentity> pObjectID){
super.setID(pObjectID);
return this;
}
«ENDIF»«ENDIF»
«REM»Overwritte setters for each property of super class with this Builder class as return type.«ENDREM»
«IF this.superClass.isEmpty == false»
«FOREACH this.superClass.getAllAttributesFromHierarchy().select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false) AS superAttr»
«EXPAND OverwriteBuilderSetterFromBaseClasses("BuilderBase"+ this.getTemplateParams()) FOR superAttr»
«ENDFOREACH»
«ENDIF»
«REM»Generate setters for each property of the builder«ENDREM»
«IF this.isCompositeDataType()»
/**
* Method returns the String representation of this object.
*
* @return String String representation of this object.
*/
public BuilderBase set«this.getCompositeDateTypePublicFieldName().toFirstUpper()»( String p«this.getCompositeDateTypePublicFieldName().toFirstUpper()» ) {
«this.getCompositeDateTypePublicFieldName()» = p«this.getCompositeDateTypePublicFieldName().toFirstUpper()»;
return this;
}
«ELSE»
«FOREACH ownedAttribute.select(e|e.isPropertySuppressed() == false && e.belongsToTransientBidirectionalBackReference() == false) AS attr»
«EXPAND BuilderSetter("BuilderBase") FOR attr»
«ENDFOREACH»
«ENDIF»
«EXPAND jeafgenerator::api::ClassExtensionHook::CustomBuilderOperations»
«IF this.isAbstract == false»
/**
* Method creates a new instance of class «this.name». The object will be initialized with the values of the
* builder.
*
* @return «this.name» Created object. The method never returns null.
*/
public «this.name»«this.getTemplateParams()» build( ) {
«IF this.validateOnBuild() || generateObjectValidationInBuilder()»
«this.name»«this.getTemplateParams()» lObject = new «this.name»«this.getTemplateParams()»(this);
«IF isTargetRuntimeJEAF()»
com.anaptecs.jeaf.tools.api.validation.ValidationTools.getValidationTools().enforceObjectValidation(lObject);
«ENDIF»
«IF isTargetRuntimeSpring()»
com.anaptecs.jeaf.validation.api.spring.SpringValidationExecutor.getValidationExecutor().validateObject(lObject);
«ENDIF»
return lObject;
«ELSE»
return new «this.name»«this.getTemplateParams()»(this);
«ENDIF»
}
«IF isTargetRuntimeJEAF()»
/**
* Method creates a new validated instance of class «this.name». The object will be initialized with the values of the
* builder and validated afterwards.
*
* @return «this.name» Created and validated object. The method never returns null.
* @throws ConstraintViolationException in case that one or more validations for the created object failed.
*/
public «this.name»«this.getTemplateParams()» buildValidated( ) throws «getEnterpriseJavaPackage()».validation.ConstraintViolationException {
«this.name»«this.getTemplateParams()» lPOJO = this.build();
com.anaptecs.jeaf.tools.api.validation.ValidationTools.getValidationTools().enforceObjectValidation(lPOJO);
return lPOJO;
}
«ENDIF»
«ENDIF»
}
«ENDDEFINE»
«DEFINE BuilderPropertyDeclaration FOR Property»
«IF this.isStatic == false»
«EXPAND functions::Javadoc::JavadocForProperty»
«EXPAND jeafgenerator::api::ClassExtensionHook::BeforeBuilderPropertyDeclaration(this.type.fqn())»
«IF this.isSoftLink()»
«EXPAND SoftLinkBuilderPropertyDeclaration FOR ((SoftLink) this)»
«ELSEIF this.association == null»
«EXPAND DoBuilderPropertyDeclaration»
«ELSE»
«EXPAND DoBuilderAssociationPropertyDeclaration»
«ENDIF»
«EXPAND jeafgenerator::api::ClassExtensionHook::AfterBuilderPropertyDeclaration(this.type.fqn())»
«ENDIF»
«ENDDEFINE»
// processing the properties
«DEFINE DoBuilderPropertyDeclaration FOR Property»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
«EXPAND Validation::ValidationAnnotation»
private «this.fqn()» «name»«IF this.isRealInitValue() && this.isMultivalued()== false » = «IF this.isJEAFEnumerationProperty()»«this.type.name».«ENDIF»«this.initValue()»«ENDIF»;
«ENDDEFINE»
«DEFINE DoBuilderAssociationPropertyDeclaration FOR Property»
«IF isNavigable()»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
«IF isMultivalued()»
private «this.fqn()» «asInstanceVar()»;
«ELSE»
private «type.fqn()» «asInstanceVar()»«IF this.isRealInitValue() && this.isMultivalued()== false » = «IF this.isJEAFEnumerationProperty()»«this.type.name».«ENDIF»«this.initValue()»«ENDIF»;
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE SoftLinkBuilderPropertyDeclaration FOR SoftLink»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
«EXPAND Validation::ValidationAnnotation»
«IF isMultivalued()»
«IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && this.hasValidationStereotype() == false && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.Size(min = «lower»)«ENDIF»
«IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && this.requiresNotNullAnnotation() && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.NotNull«ENDIF»
«visibility» «IF isTransient()»transient «ENDIF» «this.getCollectionType()»<«this.getMultivaluedJavaSoftLinkType()»> «this.getSoftLinkPropertyName()»;
«ELSE»
«IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && this.requiresNotNullAnnotation() && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.NotNull«ENDIF»
«visibility» «IF isTransient()»transient «ENDIF» «this.getJavaSoftLinkType()» «this.getSoftLinkPropertyName()»;
«ENDIF»
«ENDDEFINE»
«DEFINE BuilderSetter(String builderClassName) FOR Property»
«IF this.isStatic == false»
«IF this.isSoftLink()»
«EXPAND CreateBuilderSoftLinkSetter(builderClassName) FOR ((SoftLink) this)»
«ELSEIF this.isCollectionType() || association != null»
«EXPAND CreateBuilderAssociationSetter(builderClassName)»
«ELSE»
«EXPAND CreateBuilderPropertySetter(builderClassName)»
«ENDIF»
«IF this.isMultivalued() && this.type.isEnumeration() && this.association != null»
«EXPAND CreateBuilderVarArgsSetter(builderClassName)»
«ENDIF»
«EXPAND jeafgenerator::api::ClassExtensionHook::AfterBuilderPropertyAccessors(this.type.fqn(), builderClassName)»
«ENDIF»
«ENDDEFINE»
«DEFINE CreateBuilderPropertySetter(String builderClassName) FOR Property»
«EXPAND functions::Javadoc::JavadocForBuilderSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
public «builderClassName»«owner.asClass().getTemplateParams()» «asSetter()»(«EXPAND java::Helper::NotNullAnnotationForProperty» «this.fqn()» «asParameter()») {
«IF this.generateBackwardCompatibility() == false»
// Assign value to attribute
«IF this.isMultivalued() == false»
«asInstanceVar()»=«asParameter()»;
«ELSE»
if(«asParameter()» != null) {
«IF this.isBinaryType()»
«IF disableBinaryDataImmutability()»
«asInstanceVar()» = «asParameter()»;
«ELSE»
«asInstanceVar()» = new «type.fqn()»[«asParameter()».length];
System.arraycopy(«asParameter()», 0, «asInstanceVar()», 0, «asParameter()».length);
«ENDIF»
«ELSE»
«IF disableArrayImmutability()»
«asInstanceVar()» = «asParameter()»;
«ELSE»
«asInstanceVar()» = new «type.fqn()»[«asParameter()».length];
System.arraycopy(«asParameter()», 0, «asInstanceVar()», 0, «asParameter()».length);
«ENDIF»
«ENDIF»
}
else {
«asInstanceVar()» = null;
}
«ENDIF»
«ELSE»
«EXPAND java::Helper::CallSetterForSuccessor»
«ENDIF»
return this;
}
«ENDDEFINE»
«DEFINE CreateBuilderAssociationSetter(String builderClassName) FOR Property»
«IF isNavigable()»
«EXPAND functions::Javadoc::JavadocForBuilderSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
«IF isMultivalued()»
public «builderClassName»«owner.asClass().getTemplateParams()» set«name.toFirstUpper()»(«EXPAND java::Helper::NotNullAnnotationForProperty» «this.fqn()» «asParameter()») {
«IF this.generateBackwardCompatibility() == false»
// To ensure immutability we have to copy the content of the passed collection.
if(«asParameter()» != null) {
«asInstanceVar()» = new «this.getCollectionImplType()»<«type.fqn()»>(«asParameter()»);
}
else {
«asInstanceVar()» = null;
}
«ELSE»
«EXPAND java::Helper::CallSetterForSuccessor»
«ENDIF»
return this;
}
«EXPAND functions::Javadoc::JavadocForBuilderAddTo(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
public «builderClassName»«owner.asClass().getTemplateParams()» addTo«name.toFirstUpper()»(«EXPAND java::Helper::NotNullAnnotationForProperty» «IF type.owner.isClassifierTemplateParameter()»@SuppressWarnings("unchecked") «ENDIF»«type.fqn()»... «asParameter()») {
«IF this.generateBackwardCompatibility() == false»
if(«asParameter()» != null) {
if(«asInstanceVar()» == null) {
«asInstanceVar()» = new «this.getCollectionImplType()»<«type.fqn()»>();
}
«asInstanceVar()».addAll(java.util.Arrays.asList(«asParameter()»));
}
«ELSE»
«EXPAND java::Helper::CallAddToForSuccessor»
«ENDIF»
return this;
}
«ELSE»
public «builderClassName»«owner.asClass().getTemplateParams()» «asSetter()» («EXPAND java::Helper::NotNullAnnotationForProperty» «type.fqn()» «asParameter()») {
«IF this.generateBackwardCompatibility() == false»
«asInstanceVar()» = «asParameter()»;
«ELSE»
«EXPAND java::Helper::CallSetterForSuccessor»
«ENDIF»
return this;
}
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE CreateBuilderSoftLinkSetter(String builderClassName) FOR SoftLink»
«IF isNavigable()»
«EXPAND functions::Javadoc::JavadocForBuilderSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
«IF isMultivalued()»
public «builderClassName»«owner.asClass().getTemplateParams()» set«this.getSoftLinkPropertyName().toFirstUpper()»(«EXPAND java::Helper::NotNullAnnotationForProperty» «this.getCollectionType()»<«this.getMultivaluedJavaSoftLinkType()»> «asParameter()») {
// To ensure immutability we have to copy the content of the passed collection.
if(«asParameter()» != null) {
«this.getSoftLinkPropertyName()» = new «this.getCollectionImplType()»<«this.getMultivaluedJavaSoftLinkType()»>(«asParameter()»);
}
else {
«this.getSoftLinkPropertyName()» = null;
}
return this;
}
«ELSE»
public «builderClassName»«owner.asClass().getTemplateParams()» set«this.getSoftLinkPropertyName().toFirstUpper()» («EXPAND java::Helper::NotNullAnnotationForProperty» «this.getJavaSoftLinkType()» «asParameter()») {
«this.getSoftLinkPropertyName()» = «asParameter()»;
return this;
}
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE CreateBuilderVarArgsSetter(String builderClassName) FOR Property»
«IF isNavigable()»
«IF isMultivalued()»
«EXPAND functions::Javadoc::JavadocForBuilderVarArgsSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
public «builderClassName»«owner.asClass().getTemplateParams()» set«name.toFirstUpper()»(«EXPAND java::Helper::NotNullAnnotationForProperty» «this.type.fqn()»... «asParameter()») {
// To ensure immutability we have to copy the content of the passed array.
if(«asParameter()» != null) {
«asInstanceVar()» = new «this.getCollectionImplType()»<«type.fqn()»>(java.util.Arrays.asList(«asParameter()»));
}
else {
«asInstanceVar()» = null;
}
return this;
}
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE OverwriteBuilderSetterFromBaseClasses(String builderClassName) FOR Property»
«IF this.isStatic == false»
«IF this.isSoftLink()»
«EXPAND OverwriteBuilderSoftLinkSetter(builderClassName) FOR ((SoftLink) this)»
«ELSEIF this.association == null»
«EXPAND OverwriteBuilderPropertySetter(builderClassName)»
«ELSE»
«EXPAND OverwriteBuilderAssociationSetter(builderClassName)»
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE OverwriteBuilderPropertySetter(String builderClassName) FOR Property»
«EXPAND functions::Javadoc::JavadocForBuilderSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
@Override
public «builderClassName» «asSetter()»(«this.fqn()» «asParameter()») {
// Call super class implementation.
super.«asSetter()»(«asParameter()»);
return this;
}
«ENDDEFINE»
«DEFINE OverwriteBuilderAssociationSetter(String builderClassName) FOR Property»
«IF isNavigable()»
«EXPAND functions::Javadoc::JavadocForBuilderSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
«IF isMultivalued()»
@Override
public «builderClassName» set«name.toFirstUpper()»(«this.fqn()» «asParameter()») {
// Call super class implementation.
super.set«name.toFirstUpper()»(«asParameter()»);
return this;
}
«EXPAND functions::Javadoc::JavadocForBuilderAddTo(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
public «builderClassName» addTo«name.toFirstUpper()»(«type.fqn()»... «asParameter()») {
// Call super class implementation.
super.addTo«name.toFirstUpper()»(«asParameter()»);
return this;
}
«IF isEnumeration()»
«EXPAND functions::Javadoc::JavadocForBuilderVarArgsSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
@Override
public «builderClassName» set«name.toFirstUpper()»(«this.type.fqn()»... «asParameter()») {
// Call super class implementation.
super.set«name.toFirstUpper()»(«asParameter()»);
return this;
}
«ENDIF»
«ELSE»
@Override
public «builderClassName» «asSetter()» («type.fqn()» «asParameter()») {
// Call super class implementation.
super.«asSetter()»(«asParameter()»);
return this;
}
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE OverwriteBuilderSoftLinkSetter(String builderClassName) FOR SoftLink»
«IF isNavigable()»
«EXPAND functions::Javadoc::JavadocForBuilderSetter(builderClassName)»
«EXPAND java::Helper::GenerateDeprecationAnnotation-»
«IF isMultivalued()»
@Override
public «builderClassName» set«this.getSoftLinkPropertyName().toFirstUpper()»(«this.getCollectionType()»<«this.getMultivaluedJavaSoftLinkType()»> «asParameter()») {
// Call super class implementation.
super.set«this.getSoftLinkPropertyName().toFirstUpper()»(«asParameter()»);
return this;
}
«ELSE»
@Override
public «builderClassName» set«this.getSoftLinkPropertyName().toFirstUpper()» («this.getJavaSoftLinkType()» «asParameter()») {
// Call super class implementation.
super.set«this.getSoftLinkPropertyName().toFirstUpper()»(«asParameter()»);
return this;
}
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE GenerateBuilderImpl FOR uml::Class»
/**
* Class implements builder to create a new instance of class «this.name». As the class has readonly attributes
* or associations instances can not be created directly. Instead this builder class has to be used.
*/
public static «IF isAbstract == true» abstract «ENDIF»class Builder«this.getTemplateParams()» extends «this.name».BuilderBase«this.getTemplateParams()» {
/**
* Use {@link «name»#builder()} instead of protected constructor to create new builder.
*/
protected Builder( ) {
}
/**
* Use {@link «name»#builder(«this.name»)} instead of protected constructor to create new builder.
*/
protected Builder( «this.name»«this.getTemplateParams()» pObject ) {
super(pObject);
}
«IF isAbstract == false && enableLegacyBuilderStyle()»
/**
* Method returns a new builder.
*
* @return {@link Builder} New builder that can be used to create new «this.name» objects.
*/
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» newBuilder( ) {
return new Builder();
}
/**
* Method creates a new builder and initialize it with the data from the passed object.
*
* @param pObject Object that should be used to initialize the builder. The parameter may be null.
* @return {@link Builder} New builder that can be used to create new POJOWithIDnMethod objects. The method never returns null.
*/
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» newBuilder( «this.name»«this.getTemplateParams()» pObject ) {
return new Builder(pObject);
}
«ENDIF»
}
«ENDDEFINE»
«DEFINE StaticBuilderMethods FOR uml::Class»
«IF isAbstract == false»
/**
* Method returns a new builder.
*
* @return {@link Builder} New builder that can be used to create new «this.name» objects.
*/
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» builder() {
return new Builder«this.getTemplateParams()»();
}
«IF this.getTemplateParams().length > 0»
/**
* Method returns a new builder.
*
* @return {@link Builder} New builder that can be used to create new «this.name» objects.
*/
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» builder(Class«this.getTemplateParams()» pClass) {
return new Builder«this.getTemplateParams()»();
}
«ENDIF»
«IF generateBuilderMethodWithAllManadatoryFields() && this.getRequiredPropertiesForBuilder().size > 0 && this.isCompositeDataType() == false»
/**
* Method creates a new builder and initializes it with the passed attributes.
*/
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» builder(«FOREACH this.getRequiredPropertiesForBuilder() AS property SEPARATOR ", "» «IF property.isSoftLink()»«((SoftLink) property).getJavaSoftLinkType()» «ELSE»«property.type.fqn()» «ENDIF»p«property.name.toFirstUpper()»«ENDFOREACH») {
Builder«this.getTemplateParams()» lBuilder = builder();
«FOREACH this.getRequiredPropertiesForBuilder() AS property-»
lBuilder.«property.asSetter()»(p«property.name.toFirstUpper()»);
«ENDFOREACH -»
return lBuilder;
}
«ENDIF»
«IF this.isCompositeDataType() »
public static «this.getTemplateParams()» Builder«this.getTemplateParams()» builder(String p«this.getCompositeDateTypePublicFieldName().toFirstUpper()») {
Builder lBuilder = builder( );
lBuilder.set«this.getCompositeDateTypePublicFieldName().toFirstUpper()»(p«this.getCompositeDateTypePublicFieldName().toFirstUpper()»);
return lBuilder;
}
«ENDIF»
«ENDIF»
«ENDDEFINE»
«DEFINE ToBuilderMethod FOR uml::Class»
«IF this.isAbstract == false»
/**
* Method creates a new builder and initializes it with the data of this object.
* @return {@link Builder} New builder that can be used to create new «this.name» objects. The method never returns null.
*/
public Builder«this.getTemplateParams()» toBuilder( ) {
return new Builder«this.getTemplateParams()»(this);
}
«ENDIF»
«ENDDEFINE»
«DEFINE ToBuilderMethodForBaseClass FOR uml::Class»
«IF this.isAbstract == false»
/**
* Method creates a new builder and initializes it with the data of this object.
* @return {@link Builder} New builder that can be used to create new «this.name» objects. The method never returns null.
*/
public «name».Builder«this.getTemplateParams()» toBuilder( ) {
return new «name».Builder«this.getTemplateParams()»((«name»«this.getTemplateParams()»)this);
}
«ENDIF»
«ENDDEFINE»