[config] Generate default preset for all configs (but allow users to remove it)
ci/woodpecker/push/jfmod Pipeline is pending Details
ci/woodpecker/push/docs Pipeline was successful Details
ci/woodpecker/tag/docs Pipeline was successful Details
ci/woodpecker/tag/jfmod Pipeline was successful Details

This commit is contained in:
Johannes Frohnmeyer 2022-12-29 16:22:54 +01:00
parent ac374ca790
commit 3dd4e5f84f
Signed by: Johannes
GPG Key ID: E76429612C2929F4
3 changed files with 11 additions and 3 deletions

View File

@ -12,10 +12,13 @@ import java.util.function.Supplier;
* @param <Builder> The class implementing this builder
*/
public interface CategoryBuilder<Builder extends CategoryBuilder<Builder>> {
String CONFIG_PRESET_DEFAULT = "libjf-config-v1.default";
Builder setTranslationPrefix(String translationPrefix);
String getTranslationPrefix();
Builder addPreset(String id, Consumer<ConfigCategory> action);
Builder addPreset(String id, Runnable preset);
Builder removePreset(String id);
Builder addVerifier(Consumer<ConfigCategory> verifier);
Builder addVerifier(Runnable verifier);
Builder referenceConfig(String id);

View File

@ -7,7 +7,6 @@ import io.gitlab.jfronny.libjf.config.api.v1.type.Type;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Collectors;
public class CategoryBuilderImpl<Builder extends CategoryBuilderImpl<Builder>> implements CategoryBuilder<Builder> {
public final List<CategoryBuilder<?>> categories = new LinkedList<>();
@ -24,6 +23,7 @@ public class CategoryBuilderImpl<Builder extends CategoryBuilderImpl<Builder>> i
this.id = id;
this.categoryPath = categoryPath;
this.translationPrefix = id + ".jfconfig." + categoryPath;
addPreset(CONFIG_PRESET_DEFAULT, ConfigCategory::reset);
}
@Override
@ -51,6 +51,13 @@ public class CategoryBuilderImpl<Builder extends CategoryBuilderImpl<Builder>> i
return addPreset(id, cfg -> preset.run());
}
@Override
public Builder removePreset(String id) {
checkBuilt();
if (presets.remove(id) == null) throw new NoSuchElementException();
return asBuilder();
}
@Override
public Builder addVerifier(Consumer<ConfigCategory> verifier) {
checkBuilt();

View File

@ -15,7 +15,6 @@ import java.lang.reflect.Method;
import java.util.Objects;
public class ReflectiveConfigBuilderImpl implements ReflectiveConfigBuilder {
public static final String CONFIG_PRESET_DEFAULT = "libjf-config-v1.default";
private final AuxiliaryMetadata rootMeta;
private final Class<?> rootClass;
@ -37,7 +36,6 @@ public class ReflectiveConfigBuilderImpl implements ReflectiveConfigBuilder {
builder.value(DslEntryInfo.ofField(field));
}
}
builder.addPreset(CONFIG_PRESET_DEFAULT, ConfigCategory::reset);
for (Method method : configClass.getMethods()) {
try {
if (method.isAnnotationPresent(Preset.class)) {