{{>hooks/pojoHeader}}
{{>nestedModels}}
{{!-- Properties --}}
{{#if additionalProperties}}
private {{{additionalProperties.nativeType}}} additionalProperties = new {{{additionalProperties.nativeType.concreteType}}}();
{{/if}}
{{#each properties}}
{{>frag/propertyDocumentation}}
{{>frag/pojoPropertyAnnotations}}
{{#if @root.useLombok}}
@lombok.Getter
@lombok.Setter
{{/if}}
private {{>frag/pojoPropertyType}} {{identifier name}}{{#if initialValue}} = {{#if nullable}}java.util.Optional.of({{/if}}{{{initialValue.literalValue}}}{{#if nullable}}){{/if}}{{/if}};

{{/each}}
{{!-- Constructors --}}
public {{{className name}}}() {

}

{{!-- Methods --}}
{{#if additionalProperties}}
@com.fasterxml.jackson.annotation.JsonAnyGetter
public {{{additionalProperties.nativeType}}} getAdditionalProperties() {
	return additionalProperties;
}

public {{{additionalProperties.component.nativeType}}} getAdditionalProperty(java.lang.String name) {
	if (additionalProperties != null) {
		return additionalProperties.get(name);
	} else {
		return null;
	}
}

@com.fasterxml.jackson.annotation.JsonAnySetter
public void put(java.lang.String name, {{{additionalProperties.component.nativeType}}} value) {
	additionalProperties().put(name, value);
}

public void setAdditionalProperties({{{additionalProperties.nativeType}}} additionalProperties) {
	this.additionalProperties = additionalProperties;
}

public {{{additionalProperties.nativeType}}} additionalProperties() {
	if (additionalProperties == null) {
		additionalProperties = new {{{additionalProperties.nativeType.concreteType}}}();
	}
	return additionalProperties;
}

public {{{className name}}} additionalProperties({{{additionalProperties.nativeType}}} additionalProperties) {
	setAdditionalProperties(additionalProperties);
	return this;
}

{{/if}}
{{#each (inheritedProperties)}}
{{>frag/propertyDocumentation}}
{{>frag/propertyStatusAnnotations}}
@java.lang.Override
public {{className ../name}} {{identifier name}}({{{nativeType}}} {{identifier name}}) {
	super.{{identifier name}}({{identifier name}});
	return this;
}

{{/each}}
{{#each properties}}
{{>frag/pojoProperty chainClassName=(className ../name)}}
{{/each}}
{{>frag/pojoUtilities}}

{{>hooks/pojoFooter}}
{{#optionalPartial (concat 'hooks/pojo/' (className name)) }}
{{/optionalPartial}}
