+@generateSetter(field: GeneratedProperty, actualType: Type, isList: Boolean) = {
+ @if(!actualType.isInstanceOf[GeneratedType] && getRestrictions(actualType) != null) {
+ @if(getRestrictions(actualType).getRangeConstraint.isPresent) {
+ @{AbstractRangeGenerator.forType(actualType).generateRangeChecker(toFirstUpper(field.getName),
+ getRestrictions(actualType).getRangeConstraint.get)}
+ }
+ @if(getRestrictions(actualType).getLengthConstraint.isPresent) {
+ @{LengthGenerator.generateLengthChecker(fieldName(field), actualType,
+ getRestrictions(actualType).getLengthConstraint.get)}
+ }
+ }
+
+ @if(isList) {
+ public @{genType.getName}Builder set@{toFirstUpper(field.getName)}(final @{ImportedNamesWithProperties.get(field)} values) {
+ @if(!actualType.isInstanceOf[GeneratedType] && getRestrictions(actualType) != null) {
+ if (values != null) {
+ for (@{actualType.getFullyQualifiedName} value : values) {
+ @checkArgument(field, actualType)
+ }
+ }
+ }
+ this.@{fieldName(field)} = values;
+ return this;
+ }
+
+ @generateListMethods(field, actualType)
+ } else {
+ public @{genType.getName}Builder set@{toFirstUpper(field.getName)}(final @{ImportedNamesWithProperties.get(field)} value) {
+ @if(!actualType.isInstanceOf[GeneratedType] && getRestrictions(actualType) != null) {
+ if (value != null) {
+ @checkArgument(field, actualType)
+ }
+ }
+ this.@{fieldName(field)} = value;
+ return this;
+ }
+ }
+}
+
+@generateListMethods(field: GeneratedProperty, actualType: Type) = {
+ public @{genType.getName}Builder addTo@{toFirstUpper(field.getName)}(final @{actualType.getFullyQualifiedName} value) {
+ @if(!actualType.isInstanceOf[GeneratedType] && getRestrictions(actualType) != null) {
+ if (value != null) {
+ @checkArgument(field, actualType)
+ }
+ }
+
+ if (this.@{fieldName(field)} == null) {
+ this.@{fieldName(field)} = new @{importedNames.get("arrayList")}<>();
+ }
+
+ this.@{fieldName(field)}.add(value);
+ return this;
+ }
+
+ public @{genType.getName}Builder removeFrom@{toFirstUpper(field.getName)}(final @{actualType.getFullyQualifiedName} value) {
+ if (this.@{fieldName(field)} != null) {
+ this.@{fieldName(field)}.remove(value);
+ }
+
+ return this;
+ }
+}
+
+@checkArgument(field: GeneratedProperty, actualType: Type) = {
+ @if(getRestrictions(actualType).getRangeConstraint.isPresent) {
+ @if(actualType.isInstanceOf[ConcreteType]) {
+ @{AbstractRangeGenerator.forType(actualType).generateRangeCheckerCall(toFirstUpper(field.getName), "value")}
+ } else {
+ @{AbstractRangeGenerator.forType(actualType).generateRangeCheckerCall(toFirstUpper(field.getName), "value.getValue()")}
+ }
+ }
+ @if(getRestrictions(actualType).getLengthConstraint.isPresent) {
+ @if(actualType.isInstanceOf[ConcreteType]) {
+ @{LengthGenerator.generateLengthCheckerCall(fieldName(field), "value")}
+ } else {
+ @{LengthGenerator.generateLengthCheckerCall(fieldName(field), "value.getValue()")}
+ }
+ }
+ @for(currentConstant <- genType.getConstantDefinitions) {
+ @defining(fieldName(field)) { suffix =>
+ @if(currentConstant.getName.startsWith(BindingMapping.PATTERN_CONSTANT_NAME)
+ && suffix.equals(currentConstant.getName.substring(BindingMapping.PATTERN_CONSTANT_NAME.length))) {
+ @{importedNames.get("codeHelpers")}.checkPattern(value, @{BindingMapping.MEMBER_PATTERN_LIST}@{suffix}, @{BindingMapping.MEMBER_REGEX_LIST}@{suffix});
+ }
+ }
+ }
+}
+