Skip to content

Commit

Permalink
Combine setter generators with settings
Browse files Browse the repository at this point in the history
  • Loading branch information
muehmar committed Nov 7, 2024
1 parent 5500c60 commit 7d0ba53
Show file tree
Hide file tree
Showing 19 changed files with 355 additions and 734 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,6 @@ static PList<SetterGroup> nested(
}

static SetterGenerator generator(SetterMethod getterMethod) {
return new SetterGenerator(getterMethod, SetterGeneratorSettings.empty());
}

static SetterGenerator generator(SetterMethod getterMethod, SetterGeneratorSetting... settings) {
return new SetterGenerator(
getterMethod, new SetterGeneratorSettings(PList.fromArray(settings)));
return new SetterGenerator(getterMethod);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,8 @@
@Value
class SetterGenerator {
SetterMethod setterMethod;
SetterGeneratorSettings settings;

Generator<JavaPojoMember, PojoSettings> create(Predicate<JavaPojoMember> memberFilter) {
return setterMethod.createGenerator(memberFilter, settings);
return setterMethod.createGenerator(memberFilter);
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
package com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.definition;

public enum SetterGeneratorSetting {}
public enum SetterGeneratorSetting {
S_NULLABLE_CONTAINER_VALUE,
S_OPTIONAL_SETTER,
S_TRISTATE_SETTER
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
package com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.definition;

import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.RefsGenerator.ref;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.definition.SetterGeneratorSetting.S_NULLABLE_CONTAINER_VALUE;
import static com.github.muehmar.gradle.openapi.generator.java.ref.JavaRefs.JAVA_UTIL_OPTIONAL;
import static com.github.muehmar.gradle.openapi.generator.java.ref.OpenApiUtilRefs.TRISTATE;

import ch.bluecare.commons.data.PList;
import com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.FlagAssignments;
import com.github.muehmar.gradle.openapi.generator.java.model.member.JavaPojoMember;
import com.github.muehmar.gradle.openapi.generator.settings.PojoSettings;
import io.github.muehmar.codegenerator.Generator;
import lombok.Value;

@Value
Expand All @@ -10,4 +19,54 @@ public class SetterGeneratorSettings {
public static SetterGeneratorSettings empty() {
return new SetterGeneratorSettings(PList.empty());
}

public boolean isNullableContainerValue() {
return settings.exists(S_NULLABLE_CONTAINER_VALUE::equals);
}

public boolean isOptionalSetter() {
return settings.exists(SetterGeneratorSetting.S_OPTIONAL_SETTER::equals);
}

public boolean isTristateSetter() {
return settings.exists(SetterGeneratorSetting.S_TRISTATE_SETTER::equals);
}

public Generator<JavaPojoMember, PojoSettings> flagAssigment() {
return (isOptionalSetter() || isTristateSetter())
? FlagAssignments.forWrappedMemberSetter()
: FlagAssignments.forStandardMemberSetter();
}

public String typeFormat() {
if (isTristateSetter()) {
return "Tristate<%s>";
} else if (isOptionalSetter()) {
return "Optional<%s>";
} else {
return "%s";
}
}

public Generator<JavaPojoMember, PojoSettings> wrappingRefs() {
return wrapperTypeRef().append(nullableContainerValueRef());
}

private Generator<JavaPojoMember, PojoSettings> wrapperTypeRef() {
if (isTristateSetter()) {
return ref(TRISTATE);
} else if (isOptionalSetter()) {
return ref(JAVA_UTIL_OPTIONAL);
} else {
return Generator.emptyGen();
}
}

private Generator<JavaPojoMember, PojoSettings> nullableContainerValueRef() {
if (isNullableContainerValue()) {
return ref(JAVA_UTIL_OPTIONAL);
} else {
return Generator.emptyGen();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,46 +1,39 @@
package com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.definition;

import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.container.ContainerNullableValueOptionalSetter.containerNullableValueOptionalSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.container.ContainerNullableValueStandardSetter.containerNullableValueStandardGetter;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.container.ContainerNullableValueTristateSetter.containerNullableValueTristateSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.container.ContainerOptionalSetter.containerOptionalSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.container.ContainerStandardSetter.containerStandardSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.container.ContainerTristateSetter.containerTristateSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.standard.JsonSetter.jsonSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.standard.OptionalSetter.optionalSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.standard.StandardSetter.standardSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.standard.TristateSetter.tristateSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.definition.SetterGeneratorSetting.S_NULLABLE_CONTAINER_VALUE;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.definition.SetterGeneratorSetting.S_OPTIONAL_SETTER;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.definition.SetterGeneratorSetting.S_TRISTATE_SETTER;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.generator.ContainerSetter.containerSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.generator.JsonSetter.jsonSetterGenerator;
import static com.github.muehmar.gradle.openapi.generator.java.generator.pojo.builder.setter.generator.StandardSetter.setterGenerator;

import com.github.muehmar.gradle.openapi.generator.java.model.member.JavaPojoMember;
import com.github.muehmar.gradle.openapi.generator.settings.PojoSettings;
import io.github.muehmar.codegenerator.Generator;
import java.util.function.Function;
import java.util.function.Predicate;

enum SetterMethod {
STANDARD_SETTER(ignore -> standardSetterGenerator()),
OPTIONAL_SETTER(ignore -> optionalSetterGenerator()),
TRISTATE_SETTER(ignore -> tristateSetterGenerator()),
CONTAINER_STANDARD_SETTER(ignore -> containerStandardSetterGenerator()),
CONTAINER_NULLABLE_VALUE_STANDARD_SETTER(ignore -> containerNullableValueStandardGetter()),
CONTAINER_OPTIONAL_SETTER(ignore -> containerOptionalSetterGenerator()),
STANDARD_SETTER(setterGenerator()),
OPTIONAL_SETTER(setterGenerator(S_OPTIONAL_SETTER)),
TRISTATE_SETTER(setterGenerator(S_TRISTATE_SETTER)),
CONTAINER_STANDARD_SETTER(containerSetterGenerator()),
CONTAINER_NULLABLE_VALUE_STANDARD_SETTER(containerSetterGenerator(S_NULLABLE_CONTAINER_VALUE)),
CONTAINER_OPTIONAL_SETTER(containerSetterGenerator(S_OPTIONAL_SETTER)),
CONTAINER_NULLABLE_VALUE_OPTIONAL_SETTER(
ignore -> containerNullableValueOptionalSetterGenerator()),
CONTAINER_TRISTATE_SETTER(ignore -> containerTristateSetterGenerator()),
containerSetterGenerator(S_OPTIONAL_SETTER, S_NULLABLE_CONTAINER_VALUE)),
CONTAINER_TRISTATE_SETTER(containerSetterGenerator(S_TRISTATE_SETTER)),
CONTAINER_NULLABLE_VALUE_TRISTATE_SETTER(
ignore -> containerNullableValueTristateSetterGenerator()),
JSON_SETTER(ignore -> jsonSetterGenerator());
containerSetterGenerator(S_TRISTATE_SETTER, S_NULLABLE_CONTAINER_VALUE)),
JSON_SETTER(jsonSetterGenerator());

private final Function<SetterGeneratorSettings, Generator<JavaPojoMember, PojoSettings>>
generator;
private final Generator<JavaPojoMember, PojoSettings> generator;

SetterMethod(
Function<SetterGeneratorSettings, Generator<JavaPojoMember, PojoSettings>> generator) {
SetterMethod(Generator<JavaPojoMember, PojoSettings> generator) {
this.generator = generator;
}

public Generator<JavaPojoMember, PojoSettings> createGenerator(
Predicate<JavaPojoMember> memberFilter, SetterGeneratorSettings generatorSettings) {
return generator.apply(generatorSettings).filter(memberFilter);
Predicate<JavaPojoMember> memberFilter) {
return generator.filter(memberFilter);
}
}

This file was deleted.

This file was deleted.

Loading

0 comments on commit 7d0ba53

Please sign in to comment.