mirror of
https://github.com/CarmJos/EasyConfiguration.git
synced 2026-06-04 18:48:20 +08:00
feat!(value): Finished the standard configured values
This commit is contained in:
@@ -24,10 +24,10 @@ public class ValueAdapter<TYPE>
|
|||||||
|
|
||||||
public ValueAdapter(@NotNull ValueType<TYPE> type,
|
public ValueAdapter(@NotNull ValueType<TYPE> type,
|
||||||
@Nullable ValueSerializer<TYPE> serializer,
|
@Nullable ValueSerializer<TYPE> serializer,
|
||||||
@Nullable ValueParser<TYPE> deserializer) {
|
@Nullable ValueParser<TYPE> parser) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.serializer = serializer;
|
this.serializer = serializer;
|
||||||
this.deserializer = deserializer;
|
this.deserializer = parser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull ValueType<TYPE> type() {
|
public @NotNull ValueType<TYPE> type() {
|
||||||
@@ -42,12 +42,14 @@ public class ValueAdapter<TYPE>
|
|||||||
return deserializer;
|
return deserializer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void serializer(@Nullable ValueSerializer<TYPE> serializer) {
|
public ValueAdapter<TYPE> serializer(@Nullable ValueSerializer<TYPE> serializer) {
|
||||||
this.serializer = serializer;
|
this.serializer = serializer;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void parser(@Nullable ValueParser<TYPE> deserializer) {
|
public ValueAdapter<TYPE> parser(@Nullable ValueParser<TYPE> deserializer) {
|
||||||
this.deserializer = deserializer;
|
this.deserializer = deserializer;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package cc.carm.lib.configuration.builder;
|
package cc.carm.lib.configuration.builder;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
||||||
import cc.carm.lib.configuration.value.ConfigValue;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
@@ -8,44 +9,53 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public abstract class AbstractConfigBuilder<T, B extends AbstractConfigBuilder<T, B, P>, P extends ConfigurationProvider<?>> {
|
public abstract class AbstractConfigBuilder<
|
||||||
|
TYPE, RESULT extends ConfigValue<TYPE>, PROVIDER extends ConfigurationProvider<?>,
|
||||||
|
SELF extends AbstractConfigBuilder<TYPE, RESULT, PROVIDER, SELF>
|
||||||
|
> {
|
||||||
|
|
||||||
protected final Class<? super P> providerClass;
|
protected final Class<? super PROVIDER> providerClass;
|
||||||
|
protected final ValueType<TYPE> type;
|
||||||
|
|
||||||
protected @Nullable P provider;
|
protected @Nullable PROVIDER provider;
|
||||||
protected @Nullable String path;
|
protected @Nullable String path;
|
||||||
|
|
||||||
protected @NotNull Supplier<T> defaultValueSupplier = () -> null;
|
protected @NotNull Supplier<TYPE> defaultValueSupplier = () -> null;
|
||||||
|
|
||||||
protected AbstractConfigBuilder(Class<? super P> providerClass) {
|
protected AbstractConfigBuilder(Class<? super PROVIDER> providerClass, ValueType<TYPE> type) {
|
||||||
this.providerClass = providerClass;
|
this.providerClass = providerClass;
|
||||||
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract @NotNull B self();
|
public @NotNull ValueType<TYPE> type() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
public abstract @NotNull ConfigValue<?> build();
|
protected abstract @NotNull SELF self();
|
||||||
|
|
||||||
public @NotNull B from(@Nullable P provider) {
|
public abstract @NotNull RESULT build();
|
||||||
|
|
||||||
|
public @NotNull SELF from(@Nullable PROVIDER provider) {
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
return self();
|
return self();
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull B path(@Nullable String path) {
|
public @NotNull SELF path(@Nullable String path) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
return self();
|
return self();
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull B defaults(@Nullable T defaultValue) {
|
public @NotNull SELF defaults(@Nullable TYPE defaultValue) {
|
||||||
return defaults(() -> defaultValue);
|
return defaults(() -> defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull B defaults(@NotNull Supplier<@Nullable T> supplier) {
|
public @NotNull SELF defaults(@NotNull Supplier<@Nullable TYPE> supplier) {
|
||||||
this.defaultValueSupplier = supplier;
|
this.defaultValueSupplier = supplier;
|
||||||
return self();
|
return self();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected @NotNull ValueManifest<T> buildManifest() {
|
protected @NotNull ValueManifest<TYPE> buildManifest() {
|
||||||
return null;
|
return new ValueManifest<>(type(), this.provider, this.path, this.defaultValueSupplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package cc.carm.lib.configuration.builder;
|
package cc.carm.lib.configuration.builder;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
||||||
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
|
|
||||||
public abstract class CommonConfigBuilder<T, B extends CommonConfigBuilder<T, B>>
|
public abstract class CommonConfigBuilder<TYPE, RESULT extends ConfigValue<TYPE>, SELF extends CommonConfigBuilder<TYPE, RESULT, SELF>>
|
||||||
extends AbstractConfigBuilder<T, B, ConfigurationProvider<?>> {
|
extends AbstractConfigBuilder<TYPE, RESULT, ConfigurationProvider<?>, SELF> {
|
||||||
|
|
||||||
protected CommonConfigBuilder() {
|
protected CommonConfigBuilder(ValueType<TYPE> type) {
|
||||||
super(ConfigurationProvider.class);
|
super(ConfigurationProvider.class, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package cc.carm.lib.configuration.builder.impl;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueAdapter;
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
|
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
||||||
|
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
||||||
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
|
import cc.carm.lib.configuration.source.section.ConfigurationSection;
|
||||||
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public abstract class AbstractSectionBuilder<
|
||||||
|
TYPE, PARAM,
|
||||||
|
RESULT extends ConfigValue<TYPE>,
|
||||||
|
SELF extends AbstractSectionBuilder<TYPE, PARAM, RESULT, SELF>
|
||||||
|
> extends CommonConfigBuilder<TYPE, RESULT, SELF> {
|
||||||
|
|
||||||
|
protected final @NotNull ValueType<PARAM> paramType;
|
||||||
|
|
||||||
|
protected @NotNull ConfigValueHandler<ConfigurationSection, PARAM> parser;
|
||||||
|
protected @NotNull ConfigValueHandler<PARAM, ? extends Map<Object, Object>> serializer;
|
||||||
|
|
||||||
|
public AbstractSectionBuilder(@NotNull ValueType<TYPE> type, @NotNull ValueType<PARAM> paramType,
|
||||||
|
@NotNull ConfigValueHandler<ConfigurationSection, PARAM> parser,
|
||||||
|
@NotNull ConfigValueHandler<PARAM, ? extends Map<Object, Object>> serializer) {
|
||||||
|
super(type);
|
||||||
|
this.paramType = paramType;
|
||||||
|
this.parser = parser;
|
||||||
|
this.serializer = serializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF parse(ConfigDataFunction<ConfigurationSection, PARAM> valueParser) {
|
||||||
|
return parse((p, section) -> valueParser.handle(section));
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF parse(ConfigValueHandler<ConfigurationSection, PARAM> valueParser) {
|
||||||
|
this.parser = valueParser;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF serialize(ConfigDataFunction<PARAM, ? extends Map<Object, Object>> serializer) {
|
||||||
|
return serialize((p, value) -> serializer.handle(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF serialize(ConfigValueHandler<PARAM, ? extends Map<Object, Object>> serializer) {
|
||||||
|
this.serializer = serializer;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF serialize(Consumer<Map<Object, Object>> serializer) {
|
||||||
|
return serialize((p, value) -> {
|
||||||
|
Map<Object, Object> map = new LinkedHashMap<>();
|
||||||
|
serializer.accept(map);
|
||||||
|
return map;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ValueAdapter<PARAM> buildAdapter() {
|
||||||
|
return new ValueAdapter<>(this.paramType)
|
||||||
|
.parser((p, type, data) -> {
|
||||||
|
ConfigurationSection section = p.deserialize(ConfigurationSection.class, data);
|
||||||
|
if (section == null) return null;
|
||||||
|
return this.parser.handle(p, section);
|
||||||
|
})
|
||||||
|
.serializer((p, type, data) -> {
|
||||||
|
Map<Object, Object> map = this.serializer.handle(p, data);
|
||||||
|
return map == null || map.isEmpty() ? null : map;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package cc.carm.lib.configuration.builder.impl;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueAdapter;
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
|
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
||||||
|
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
||||||
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public abstract class AbstractSourceBuilder<
|
||||||
|
V, SOURCE, PARAM, RESULT extends ConfigValue<V>,
|
||||||
|
SELF extends AbstractSourceBuilder<V, SOURCE, PARAM, RESULT, SELF>
|
||||||
|
> extends CommonConfigBuilder<V, RESULT, SELF> {
|
||||||
|
|
||||||
|
protected final @NotNull ValueType<SOURCE> sourceType;
|
||||||
|
protected final @NotNull ValueType<PARAM> paramType;
|
||||||
|
protected @NotNull ConfigValueHandler<SOURCE, PARAM> valueParser;
|
||||||
|
protected @NotNull ConfigValueHandler<PARAM, SOURCE> valueSerializer;
|
||||||
|
|
||||||
|
public AbstractSourceBuilder(@NotNull ValueType<V> type,
|
||||||
|
@NotNull ValueType<SOURCE> sourceType, @NotNull ValueType<PARAM> paramType,
|
||||||
|
@NotNull ConfigValueHandler<SOURCE, PARAM> parser,
|
||||||
|
@NotNull ConfigValueHandler<PARAM, SOURCE> serializer) {
|
||||||
|
super(type);
|
||||||
|
this.sourceType = sourceType;
|
||||||
|
this.paramType = paramType;
|
||||||
|
this.valueParser = parser;
|
||||||
|
this.valueSerializer = serializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF parse(ConfigDataFunction<SOURCE, PARAM> parser) {
|
||||||
|
return parse((p, source) -> parser.handle(source));
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF parse(@NotNull ConfigValueHandler<SOURCE, PARAM> parser) {
|
||||||
|
this.valueParser = parser;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF serialize(@NotNull ConfigValueHandler<PARAM, SOURCE> serializer) {
|
||||||
|
this.valueSerializer = serializer;
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SELF serialize(@NotNull ConfigDataFunction<PARAM, SOURCE> serializer) {
|
||||||
|
return serialize((p, value) -> serializer.handle(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ValueAdapter<PARAM> buildAdapter() {
|
||||||
|
return new ValueAdapter<>(this.paramType)
|
||||||
|
.parser((p, type, data) -> {
|
||||||
|
SOURCE source = p.deserialize(this.sourceType, data);
|
||||||
|
return this.valueParser.handle(p, source);
|
||||||
|
})
|
||||||
|
.serializer((p, type, data) -> {
|
||||||
|
SOURCE source = this.valueSerializer.handle(p, data);
|
||||||
|
return p.serialize(source);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package cc.carm.lib.configuration.builder.list;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class ConfigListBuilder<V> {
|
||||||
|
|
||||||
|
protected final @NotNull ValueType<V> type;
|
||||||
|
|
||||||
|
public ConfigListBuilder(@NotNull ValueType<V> type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <S> @NotNull SourceListBuilder<S, V> from(@NotNull Class<S> sourceType) {
|
||||||
|
return from(ValueType.of(sourceType));
|
||||||
|
}
|
||||||
|
|
||||||
|
public <S> @NotNull SourceListBuilder<S, V> from(@NotNull ValueType<S> sourceType) {
|
||||||
|
return new SourceListBuilder<>(sourceType, type, ConfigValueHandler.required(), ConfigValueHandler.required(), ArrayList::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SourceListBuilder<String, V> fromString() {
|
||||||
|
return from(String.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull SectionListBuilder<V> fromSection() {
|
||||||
|
return new SectionListBuilder<>(type, ConfigValueHandler.required(), ConfigValueHandler.required(), ArrayList::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package cc.carm.lib.configuration.builder.list;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
|
import cc.carm.lib.configuration.builder.impl.AbstractSectionBuilder;
|
||||||
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
|
import cc.carm.lib.configuration.source.section.ConfigurationSection;
|
||||||
|
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class SectionListBuilder<V> extends AbstractSectionBuilder<List<V>, V, ConfiguredList<V>, SectionListBuilder<V>> {
|
||||||
|
|
||||||
|
protected @NotNull Supplier<? extends List<V>> constructor;
|
||||||
|
|
||||||
|
public SectionListBuilder(@NotNull ValueType<V> paramType,
|
||||||
|
@NotNull ConfigValueHandler<ConfigurationSection, V> parser,
|
||||||
|
@NotNull ConfigValueHandler<V, ? extends Map<Object, Object>> serializer,
|
||||||
|
@NotNull Supplier<? extends List<V>> constructor) {
|
||||||
|
super(new ValueType<List<V>>() {
|
||||||
|
}, paramType, parser, serializer);
|
||||||
|
this.constructor = constructor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SafeVarargs
|
||||||
|
public final @NotNull SectionListBuilder<V> defaults(@NotNull V... values) {
|
||||||
|
return defaults(new ArrayList<>(Arrays.asList(values)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final @NotNull SectionListBuilder<V> defaults(@NotNull Collection<V> values) {
|
||||||
|
return defaults(new ArrayList<>(values));
|
||||||
|
}
|
||||||
|
|
||||||
|
public SectionListBuilder<V> constructor(@NotNull Supplier<? extends List<V>> constructor) {
|
||||||
|
this.constructor = constructor;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <LIST extends List<V>> SectionListBuilder<V> construct(@NotNull LIST list) {
|
||||||
|
return constructor(() -> list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected @NotNull SectionListBuilder<V> self() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull ConfiguredList<V> build() {
|
||||||
|
return new ConfiguredList<>(buildManifest(), constructor, buildAdapter());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package cc.carm.lib.configuration.builder.list;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
|
import cc.carm.lib.configuration.builder.impl.AbstractSourceBuilder;
|
||||||
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
|
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class SourceListBuilder<SOURCE, V>
|
||||||
|
extends AbstractSourceBuilder<List<V>, SOURCE, V, ConfiguredList<V>, SourceListBuilder<SOURCE, V>> {
|
||||||
|
|
||||||
|
protected @NotNull Supplier<? extends List<V>> constructor;
|
||||||
|
|
||||||
|
public SourceListBuilder(@NotNull ValueType<SOURCE> sourceType, @NotNull ValueType<V> paramType,
|
||||||
|
@NotNull ConfigValueHandler<SOURCE, V> parser, @NotNull ConfigValueHandler<V, SOURCE> serializer,
|
||||||
|
@NotNull Supplier<? extends List<V>> constructor) {
|
||||||
|
super(new ValueType<List<V>>() {
|
||||||
|
}, sourceType, paramType, parser, serializer);
|
||||||
|
this.constructor = constructor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SafeVarargs
|
||||||
|
public final @NotNull SourceListBuilder<SOURCE, V> defaults(@NotNull V... values) {
|
||||||
|
return defaults(new ArrayList<>(Arrays.asList(values)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final @NotNull SourceListBuilder<SOURCE, V> defaults(@NotNull Collection<V> values) {
|
||||||
|
return defaults(new ArrayList<>(values));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected @NotNull SourceListBuilder<SOURCE, V> self() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull ConfiguredList<V> build() {
|
||||||
|
return new ConfiguredList<>(buildManifest(), this.constructor, buildAdapter());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package cc.carm.lib.configuration.builder.value;
|
package cc.carm.lib.configuration.builder.value;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.adapter.ValueType;
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
import cc.carm.lib.configuration.source.section.ConfigurationSection;
|
import cc.carm.lib.configuration.source.section.ConfigurationSection;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -17,11 +16,11 @@ public class ConfigValueBuilder<V> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull <S> SourceValueBuilder<S, V> from(@NotNull Class<S> clazz) {
|
public @NotNull <S> SourceValueBuilder<S, V> from(@NotNull Class<S> clazz) {
|
||||||
return new SourceValueBuilder<>(ValueType.of(clazz), this.type);
|
return from(ValueType.of(clazz));
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull <S> SourceValueBuilder<S, V> from(@NotNull ValueType<S> sourceType) {
|
public @NotNull <S> SourceValueBuilder<S, V> from(@NotNull ValueType<S> sourceType) {
|
||||||
return new SourceValueBuilder<>(sourceType, this.type);
|
return from(sourceType, ConfigValueHandler.required(), ConfigValueHandler.required());
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull <S> SourceValueBuilder<S, V> from(@NotNull ValueType<S> sourceType,
|
public @NotNull <S> SourceValueBuilder<S, V> from(@NotNull ValueType<S> sourceType,
|
||||||
@@ -35,11 +34,13 @@ public class ConfigValueBuilder<V> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> fromSection() {
|
public @NotNull SectionValueBuilder<V> fromSection() {
|
||||||
return new SectionValueBuilder<>(this.type);
|
return fromSection(ConfigValueHandler.required(), ConfigValueHandler.required());
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> fromSection(@NotNull ConfigValueHandler<ConfigurationSection, V> valueParser,
|
public @NotNull SectionValueBuilder<V> fromSection(
|
||||||
@NotNull ConfigValueHandler<V, ? extends Map<Object, Object>> valueSerializer) {
|
@NotNull ConfigValueHandler<ConfigurationSection, V> valueParser,
|
||||||
|
@NotNull ConfigValueHandler<V, ? extends Map<Object, Object>> valueSerializer
|
||||||
|
) {
|
||||||
return new SectionValueBuilder<>(this.type, valueParser, valueSerializer);
|
return new SectionValueBuilder<>(this.type, valueParser, valueSerializer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-56
@@ -1,34 +1,20 @@
|
|||||||
package cc.carm.lib.configuration.builder.value;
|
package cc.carm.lib.configuration.builder.value;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.adapter.ValueType;
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
import cc.carm.lib.configuration.builder.impl.AbstractSectionBuilder;
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
import cc.carm.lib.configuration.source.section.ConfigurationSection;
|
import cc.carm.lib.configuration.source.section.ConfigurationSection;
|
||||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
public class SectionValueBuilder<V> extends CommonConfigBuilder<V, SectionValueBuilder<V>> {
|
public class SectionValueBuilder<V> extends AbstractSectionBuilder<V, V, ConfiguredValue<V>, SectionValueBuilder<V>> {
|
||||||
|
|
||||||
protected final @NotNull ValueType<V> valueType;
|
public SectionValueBuilder(@NotNull ValueType<V> type,
|
||||||
|
|
||||||
protected @NotNull ConfigValueHandler<ConfigurationSection, V> parser;
|
|
||||||
protected @NotNull ConfigValueHandler<V, ? extends Map<Object, Object>> serializer;
|
|
||||||
|
|
||||||
public SectionValueBuilder(@NotNull ValueType<V> valueType) {
|
|
||||||
this(valueType, ConfigValueHandler.required(), ConfigValueHandler.required());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SectionValueBuilder(@NotNull ValueType<V> valueType,
|
|
||||||
@NotNull ConfigValueHandler<ConfigurationSection, V> parser,
|
@NotNull ConfigValueHandler<ConfigurationSection, V> parser,
|
||||||
@NotNull ConfigValueHandler<V, ? extends Map<Object, Object>> serializer) {
|
@NotNull ConfigValueHandler<V, ? extends Map<Object, Object>> serializer) {
|
||||||
this.valueType = valueType;
|
super(type, type, parser, serializer);
|
||||||
this.parser = parser;
|
|
||||||
this.serializer = serializer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -36,46 +22,9 @@ public class SectionValueBuilder<V> extends CommonConfigBuilder<V, SectionValueB
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> parse(ConfigDataFunction<ConfigurationSection, V> valueParser) {
|
|
||||||
return parse((p, section) -> valueParser.handle(section));
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> parse(ConfigValueHandler<ConfigurationSection, V> valueParser) {
|
|
||||||
this.parser = valueParser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> serialize(ConfigDataFunction<V, ? extends Map<Object, Object>> serializer) {
|
|
||||||
return serialize((p, value) -> serializer.handle(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> serialize(ConfigValueHandler<V, ? extends Map<Object, Object>> serializer) {
|
|
||||||
this.serializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> serialize(Consumer<Map<Object, Object>> serializer) {
|
|
||||||
return serialize((p, value) -> {
|
|
||||||
Map<Object, Object> map = new LinkedHashMap<>();
|
|
||||||
serializer.accept(map);
|
|
||||||
return map;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull ConfiguredValue<V> build() {
|
public @NotNull ConfiguredValue<V> build() {
|
||||||
return ConfiguredValue.of(
|
return ConfiguredValue.of(buildManifest(), buildAdapter());
|
||||||
buildManifest(),
|
|
||||||
(p, type, data) -> {
|
|
||||||
ConfigurationSection section = p.deserialize(ConfigurationSection.class, data);
|
|
||||||
if (section == null) return null;
|
|
||||||
return this.parser.handle(p, section);
|
|
||||||
},
|
|
||||||
(p, type, data) -> {
|
|
||||||
Map<Object, Object> map = this.serializer.handle(p, data);
|
|
||||||
return map == null || map.isEmpty() ? null : map; // Map is a type of original data
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +1,17 @@
|
|||||||
package cc.carm.lib.configuration.builder.value;
|
package cc.carm.lib.configuration.builder.value;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.adapter.ValueType;
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
import cc.carm.lib.configuration.builder.impl.AbstractSourceBuilder;
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
import cc.carm.lib.configuration.function.ConfigValueHandler;
|
||||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class SourceValueBuilder<S, V> extends CommonConfigBuilder<V, SourceValueBuilder<S, V>> {
|
public class SourceValueBuilder<S, V> extends AbstractSourceBuilder<V, S, V, ConfiguredValue<V>, SourceValueBuilder<S, V>> {
|
||||||
|
|
||||||
protected final @NotNull ValueType<S> sourceType;
|
|
||||||
protected final @NotNull ValueType<V> valueType;
|
|
||||||
protected @NotNull ConfigValueHandler<S, V> valueParser;
|
|
||||||
protected @NotNull ConfigValueHandler<V, S> valueSerializer;
|
|
||||||
|
|
||||||
public SourceValueBuilder(@NotNull ValueType<S> sourceType, @NotNull ValueType<V> valueType) {
|
|
||||||
this(sourceType, valueType, ConfigValueHandler.required(), ConfigValueHandler.required());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SourceValueBuilder(@NotNull ValueType<S> sourceType, @NotNull ValueType<V> valueType,
|
public SourceValueBuilder(@NotNull ValueType<S> sourceType, @NotNull ValueType<V> valueType,
|
||||||
@NotNull ConfigValueHandler<S, V> valueParser,
|
@NotNull ConfigValueHandler<S, V> parser, @NotNull ConfigValueHandler<V, S> serializer) {
|
||||||
@NotNull ConfigValueHandler<V, S> valueSerializer) {
|
super(valueType, sourceType, valueType, parser, serializer);
|
||||||
this.sourceType = sourceType;
|
|
||||||
this.valueType = valueType;
|
|
||||||
this.valueParser = valueParser;
|
|
||||||
this.valueSerializer = valueSerializer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -32,37 +19,9 @@ public class SourceValueBuilder<S, V> extends CommonConfigBuilder<V, SourceValue
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> parse(ConfigDataFunction<S, V> parser) {
|
|
||||||
return parse((p, source) -> parser.handle(source));
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> parse(@NotNull ConfigValueHandler<S, V> parser) {
|
|
||||||
this.valueParser = parser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> serialize(@NotNull ConfigValueHandler<V, S> serializer) {
|
|
||||||
this.valueSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> serialize(@NotNull ConfigDataFunction<V, S> serializer) {
|
|
||||||
return serialize((p, value) -> serializer.handle(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull ConfiguredValue<V> build() {
|
public @NotNull ConfiguredValue<V> build() {
|
||||||
return ConfiguredValue.of(
|
return new ConfiguredValue<>(buildManifest(), buildAdapter());
|
||||||
buildManifest(),
|
|
||||||
(p, type, data) -> {
|
|
||||||
S source = p.deserialize(this.sourceType, data);
|
|
||||||
return this.valueParser.handle(p, source);
|
|
||||||
},
|
|
||||||
(p, type, value) -> {
|
|
||||||
S source = this.valueSerializer.handle(p, value);
|
|
||||||
return p.serialize(source);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import cc.carm.lib.configuration.adapter.ValueAdapter;
|
|||||||
import cc.carm.lib.configuration.adapter.ValueParser;
|
import cc.carm.lib.configuration.adapter.ValueParser;
|
||||||
import cc.carm.lib.configuration.adapter.ValueSerializer;
|
import cc.carm.lib.configuration.adapter.ValueSerializer;
|
||||||
import cc.carm.lib.configuration.adapter.ValueType;
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
|
import cc.carm.lib.configuration.builder.list.ConfigListBuilder;
|
||||||
import cc.carm.lib.configuration.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -16,10 +17,18 @@ import java.util.function.Supplier;
|
|||||||
|
|
||||||
public class ConfiguredList<V> extends CachedConfigValue<List<V>> implements List<V> {
|
public class ConfiguredList<V> extends CachedConfigValue<List<V>> implements List<V> {
|
||||||
|
|
||||||
|
public static <T> @NotNull ConfigListBuilder<T> builderOf(@NotNull Class<T> type) {
|
||||||
|
return builderOf(ValueType.of(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> @NotNull ConfigListBuilder<T> builderOf(@NotNull ValueType<T> type) {
|
||||||
|
return new ConfigListBuilder<>(type);
|
||||||
|
}
|
||||||
|
|
||||||
protected final @NotNull Supplier<? extends List<V>> constructor;
|
protected final @NotNull Supplier<? extends List<V>> constructor;
|
||||||
protected final @NotNull ValueAdapter<V> paramAdapter;
|
protected final @NotNull ValueAdapter<V> paramAdapter;
|
||||||
|
|
||||||
private ConfiguredList(@NotNull ValueManifest<List<V>> manifest,
|
public ConfiguredList(@NotNull ValueManifest<List<V>> manifest,
|
||||||
@NotNull Supplier<? extends List<V>> constructor,
|
@NotNull Supplier<? extends List<V>> constructor,
|
||||||
@NotNull ValueAdapter<V> paramAdapter) {
|
@NotNull ValueAdapter<V> paramAdapter) {
|
||||||
super(manifest);
|
super(manifest);
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.value.ConfigValue;
|
|
||||||
import cc.carm.lib.configuration.value.ValueManifest;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public abstract class AbstractConfigBuilder<T, B extends AbstractConfigBuilder<T, B, P>, P extends ConfigurationProvider<?>> {
|
|
||||||
|
|
||||||
protected final Class<? super P> providerClass;
|
|
||||||
|
|
||||||
protected @Nullable P provider;
|
|
||||||
protected @Nullable String path;
|
|
||||||
|
|
||||||
protected @Nullable List<String> headerComments;
|
|
||||||
protected @Nullable String inlineComment;
|
|
||||||
|
|
||||||
protected @Nullable T defaultValue;
|
|
||||||
|
|
||||||
protected AbstractConfigBuilder(Class<? super P> providerClass) {
|
|
||||||
this.providerClass = providerClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract @NotNull B getThis();
|
|
||||||
|
|
||||||
public abstract @NotNull ConfigValue<?> build();
|
|
||||||
|
|
||||||
public @NotNull B from(@Nullable P provider) {
|
|
||||||
this.provider = provider;
|
|
||||||
return self();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull B path(@Nullable String path) {
|
|
||||||
this.path = path;
|
|
||||||
return self();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull B comments(@NotNull String... comments) {
|
|
||||||
return headerComments(comments);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull B headerComments(@NotNull String... comments) {
|
|
||||||
return headerComments(Arrays.asList(comments));
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull B headerComments(@NotNull List<String> comments) {
|
|
||||||
this.headerComments = comments;
|
|
||||||
return self();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull B inlineComment(@NotNull String comment) {
|
|
||||||
this.inlineComment = comment;
|
|
||||||
return self();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull B defaults(@Nullable T defaultValue) {
|
|
||||||
this.defaultValue = defaultValue;
|
|
||||||
return self();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull B defaults(@NotNull Supplier<@Nullable T> defaultValueSupplier) {
|
|
||||||
return defaults(defaultValueSupplier.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
protected @NotNull ValueManifest<T> buildManifest() {
|
|
||||||
return ValueManifest.of(
|
|
||||||
this.provider, this.path,
|
|
||||||
this.headerComments, this.inlineComment, this.defaultValue
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder;
|
|
||||||
|
|
||||||
public abstract class CommonConfigBuilder<T, B extends CommonConfigBuilder<T, B>>
|
|
||||||
extends AbstractConfigBuilder<T, B, ConfigurationProvider<?>> {
|
|
||||||
|
|
||||||
protected CommonConfigBuilder() {
|
|
||||||
super(ConfigurationProvider.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.list;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
|
|
||||||
public class ConfigListBuilder<V> {
|
|
||||||
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
|
|
||||||
public ConfigListBuilder(@NotNull Class<V> valueClass) {
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull <S> SourceListBuilder<S, V> from(@NotNull Class<? super S> sourceClass,
|
|
||||||
@NotNull ConfigDataFunction<Object, S> sourceParser,
|
|
||||||
@NotNull ConfigDataFunction<S, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<V, S> valueSerializer,
|
|
||||||
@NotNull ConfigDataFunction<S, Object> sourceSerializer) {
|
|
||||||
return new SourceListBuilder<>(sourceClass, sourceParser, this.valueClass, valueParser, valueSerializer, sourceSerializer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public @NotNull <S> SourceListBuilder<S, V> from(Class<S> sourceClass) {
|
|
||||||
return from(sourceClass,
|
|
||||||
ConfigDataFunction.required(), ConfigDataFunction.required(),
|
|
||||||
ConfigDataFunction.required(), ConfigDataFunction.required()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceListBuilder<Object, V> fromObject() {
|
|
||||||
return from(
|
|
||||||
Object.class, ConfigDataFunction.identity(),
|
|
||||||
ConfigDataFunction.castObject(valueClass),
|
|
||||||
ConfigDataFunction.toObject(), ConfigDataFunction.toObject()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceListBuilder<String, V> fromString() {
|
|
||||||
return from(
|
|
||||||
String.class, ConfigDataFunction.castToString(),
|
|
||||||
ConfigDataFunction.castFromString(this.valueClass),
|
|
||||||
ConfigDataFunction.castToString(), ConfigDataFunction.toObject()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceListBuilder<Map<String, Object>, V> fromMap() {
|
|
||||||
return from(
|
|
||||||
Map.class, obj -> (Map<String, Object>) obj,
|
|
||||||
ConfigDataFunction.required(),
|
|
||||||
ConfigDataFunction.required(),
|
|
||||||
ConfigDataFunction.toObject()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.list;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class SourceListBuilder<S, V> extends CommonConfigBuilder<List<V>, SourceListBuilder<S, V>> {
|
|
||||||
|
|
||||||
protected final @NotNull Class<? super S> sourceClass;
|
|
||||||
protected @NotNull ConfigDataFunction<Object, S> sourceParser;
|
|
||||||
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
protected @NotNull ConfigDataFunction<S, V> valueParser;
|
|
||||||
|
|
||||||
protected @NotNull ConfigDataFunction<V, S> valueSerializer;
|
|
||||||
protected @NotNull ConfigDataFunction<S, Object> sourceSerializer;
|
|
||||||
|
|
||||||
public SourceListBuilder(@NotNull Class<? super S> sourceClass, @NotNull ConfigDataFunction<Object, S> sourceParser,
|
|
||||||
@NotNull Class<V> valueClass, @NotNull ConfigDataFunction<S, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<V, S> valueSerializer,
|
|
||||||
@NotNull ConfigDataFunction<S, Object> sourceSerializer) {
|
|
||||||
this.sourceClass = sourceClass;
|
|
||||||
this.sourceParser = sourceParser;
|
|
||||||
this.sourceSerializer = sourceSerializer;
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
this.valueParser = valueParser;
|
|
||||||
this.valueSerializer = valueSerializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SafeVarargs
|
|
||||||
public final @NotNull SourceListBuilder<S, V> defaults(@NotNull V... values) {
|
|
||||||
return defaults(new ArrayList<>(Arrays.asList(values)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public final @NotNull SourceListBuilder<S, V> defaults(@NotNull Collection<V> values) {
|
|
||||||
return defaults(new ArrayList<>(values));
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceListBuilder<S, V> parseSource(ConfigDataFunction<Object, S> sourceParser) {
|
|
||||||
this.sourceParser = sourceParser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceListBuilder<S, V> parseValue(ConfigDataFunction<S, V> valueParser) {
|
|
||||||
this.valueParser = valueParser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceListBuilder<S, V> serializeValue(ConfigDataFunction<V, S> serializer) {
|
|
||||||
this.valueSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceListBuilder<S, V> serializeSource(ConfigDataFunction<S, Object> serializer) {
|
|
||||||
this.sourceSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected @NotNull SourceListBuilder<S, V> getThis() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ConfiguredList<V> build() {
|
|
||||||
return new ConfiguredList<>(
|
|
||||||
buildManifest(), this.valueClass,
|
|
||||||
this.sourceParser.andThen(this.valueParser),
|
|
||||||
this.valueSerializer.andThen(sourceSerializer)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.map;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class ConfigMapBuilder<M extends Map<K, V>, K, V> {
|
|
||||||
|
|
||||||
protected final @NotNull Supplier<? extends M> supplier;
|
|
||||||
|
|
||||||
protected final @NotNull Class<K> keyClass;
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
|
|
||||||
public ConfigMapBuilder(@NotNull Supplier<? extends M> supplier, @NotNull Class<K> keyClass, @NotNull Class<V> valueClass) {
|
|
||||||
this.supplier = supplier;
|
|
||||||
this.keyClass = keyClass;
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public <MAP extends Map<K, V>> ConfigMapBuilder<MAP, K, V> supplier(@NotNull Supplier<MAP> supplier) {
|
|
||||||
return new ConfigMapBuilder<>(supplier, keyClass, valueClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
public <S> SourceMapBuilder<M, S, K, V> from(@NotNull Class<S> sourceClass,
|
|
||||||
@NotNull ConfigDataFunction<S, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<V, S> valueSerializer) {
|
|
||||||
return new SourceMapBuilder<>(supplier,
|
|
||||||
keyClass, ConfigDataFunction.castFromString(this.keyClass), // #String -> key
|
|
||||||
sourceClass, ConfigDataFunction.castObject(sourceClass), // #Object -> source
|
|
||||||
valueClass, valueParser, // source -> value
|
|
||||||
ConfigDataFunction.castToString(), // key -> #String
|
|
||||||
valueSerializer/*value -> source*/,
|
|
||||||
ConfigDataFunction.toObject()/* source -> #Object */
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public <S> SourceMapBuilder<M, S, K, V> from(@NotNull Class<S> sourceClass) {
|
|
||||||
return from(sourceClass, ConfigDataFunction.required(), ConfigDataFunction.required());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SourceMapBuilder<M, String, K, V> fromString(@NotNull ConfigDataFunction<String, V> valueParser) {
|
|
||||||
return from(String.class, valueParser, ConfigDataFunction.castToString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SourceMapBuilder<M, String, K, V> fromString() {
|
|
||||||
return fromString(ConfigDataFunction.castFromString(this.valueClass));
|
|
||||||
}
|
|
||||||
|
|
||||||
public SectionMapBuilder<M, K, V> fromSection() {
|
|
||||||
return new SectionMapBuilder<>(
|
|
||||||
supplier,
|
|
||||||
keyClass, ConfigDataFunction.castFromString(keyClass),
|
|
||||||
valueClass, ConfigDataFunction.required(),
|
|
||||||
ConfigDataFunction.castToString(), ConfigDataFunction.required());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SourceMapBuilder<M, Object, K, V> fromObject(@NotNull ConfigDataFunction<Object, V> valueParser) {
|
|
||||||
return from(Object.class, valueParser, ConfigDataFunction.toObject());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SourceMapBuilder<M, Object, K, V> fromObject() {
|
|
||||||
return fromObject(ConfigDataFunction.required());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.map;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class ConfigMapCreator<K, V> {
|
|
||||||
|
|
||||||
protected final @NotNull Class<K> keyClass;
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
|
|
||||||
public ConfigMapCreator(@NotNull Class<K> keyClass, @NotNull Class<V> valueClass) {
|
|
||||||
this.keyClass = keyClass;
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public <M extends Map<K, V>> @NotNull ConfigMapBuilder<M, K, V> asMap(Supplier<? extends M> mapSuppler) {
|
|
||||||
return new ConfigMapBuilder<>(mapSuppler, keyClass, valueClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull ConfigMapBuilder<HashMap<K, V>, K, V> asHashMap() {
|
|
||||||
return asMap(HashMap::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull ConfigMapBuilder<LinkedHashMap<K, V>, K, V> asLinkedMap() {
|
|
||||||
return asMap(LinkedHashMap::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull ConfigMapBuilder<TreeMap<K, V>, K, V> asTreeMap() {
|
|
||||||
return asMap(TreeMap::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull ConfigMapBuilder<TreeMap<K, V>, K, V> asTreeMap(@NotNull Comparator<? super K> comparator) {
|
|
||||||
return asMap(() -> new TreeMap<>(comparator));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,98 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.map;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.value.ValueManifest;
|
|
||||||
import cc.carm.lib.configuration.value.standard.ConfiguredSectionMap;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class SectionMapBuilder<M extends Map<K, V>, K, V> extends CommonConfigBuilder<M, SectionMapBuilder<M, K, V>> {
|
|
||||||
|
|
||||||
protected final @NotNull Supplier<? extends M> supplier;
|
|
||||||
|
|
||||||
protected final @NotNull Class<K> keyClass;
|
|
||||||
protected @NotNull ConfigDataFunction<String, K> keyParser;
|
|
||||||
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
protected @NotNull ConfigDataFunction<ConfigurationWrapper<?>, V> valueParser;
|
|
||||||
|
|
||||||
protected @NotNull ConfigDataFunction<K, String> keySerializer;
|
|
||||||
protected @NotNull ConfigDataFunction<V, ? extends Map<String, Object>> valueSerializer;
|
|
||||||
|
|
||||||
public SectionMapBuilder(@NotNull Supplier<? extends M> supplier,
|
|
||||||
@NotNull Class<K> keyClass, @NotNull ConfigDataFunction<String, K> keyParser,
|
|
||||||
@NotNull Class<V> valueClass, @NotNull ConfigDataFunction<ConfigurationWrapper<?>, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<K, String> keySerializer,
|
|
||||||
@NotNull ConfigDataFunction<V, ? extends Map<String, Object>> valueSerializer) {
|
|
||||||
this.supplier = supplier;
|
|
||||||
this.keyClass = keyClass;
|
|
||||||
this.keyParser = keyParser;
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
this.valueParser = valueParser;
|
|
||||||
this.keySerializer = keySerializer;
|
|
||||||
this.valueSerializer = valueSerializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public <MAP extends Map<K, V>> SectionMapBuilder<MAP, K, V> supplier(@NotNull Supplier<MAP> supplier) {
|
|
||||||
return new SectionMapBuilder<>(supplier,
|
|
||||||
keyClass, keyParser, valueClass, valueParser, keySerializer, valueSerializer
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionMapBuilder<M, K, V> defaults(@NotNull Consumer<M> factory) {
|
|
||||||
M map = supplier.get();
|
|
||||||
factory.accept(map);
|
|
||||||
return defaults(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionMapBuilder<M, K, V> parseKey(@NotNull ConfigDataFunction<String, K> parser) {
|
|
||||||
this.keyParser = parser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionMapBuilder<M, K, V> parseValue(@NotNull ConfigDataFunction<ConfigurationWrapper<?>, V> parser) {
|
|
||||||
this.valueParser = parser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionMapBuilder<M, K, V> serializeKey(@NotNull ConfigDataFunction<K, String> serializer) {
|
|
||||||
this.keySerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionMapBuilder<M, K, V> serializeValue(@NotNull ConfigDataFunction<V, ? extends Map<String, Object>> serializer) {
|
|
||||||
this.valueSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionMapBuilder<M, K, V> serializeValue(@NotNull BiConsumer<V, Map<String, Object>> serializer) {
|
|
||||||
return serializeValue(v -> {
|
|
||||||
Map<String, Object> map = new LinkedHashMap<>();
|
|
||||||
serializer.accept(v, map);
|
|
||||||
return map;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected @NotNull SectionMapBuilder<M, K, V> getThis() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ConfiguredSectionMap<K, V> build() {
|
|
||||||
return new ConfiguredSectionMap<>(
|
|
||||||
new ValueManifest<>(provider, path, headerComments, inlineComment, defaultValue),
|
|
||||||
this.supplier, this.keyClass, this.keyParser,
|
|
||||||
this.valueClass, this.valueParser,
|
|
||||||
this.keySerializer, this.valueSerializer
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.map;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.value.ValueManifest;
|
|
||||||
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class SourceMapBuilder<M extends Map<K, V>, S, K, V> extends CommonConfigBuilder<M, SourceMapBuilder<M, S, K, V>> {
|
|
||||||
|
|
||||||
protected final @NotNull Supplier<? extends M> supplier;
|
|
||||||
|
|
||||||
protected final @NotNull Class<K> keyClass;
|
|
||||||
protected @NotNull ConfigDataFunction<String, K> keyParser;
|
|
||||||
|
|
||||||
protected final @NotNull Class<S> sourceClass;
|
|
||||||
protected @NotNull ConfigDataFunction<Object, S> sourceParser;
|
|
||||||
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
protected @NotNull ConfigDataFunction<S, V> valueParser;
|
|
||||||
|
|
||||||
protected @NotNull ConfigDataFunction<K, String> keySerializer;
|
|
||||||
protected @NotNull ConfigDataFunction<V, S> valueSerializer;
|
|
||||||
protected @NotNull ConfigDataFunction<S, Object> sourceSerializer;
|
|
||||||
|
|
||||||
public SourceMapBuilder(@NotNull Supplier<? extends M> supplier,
|
|
||||||
@NotNull Class<K> keyClass, @NotNull ConfigDataFunction<String, K> keyParser,
|
|
||||||
@NotNull Class<S> sourceClass, @NotNull ConfigDataFunction<Object, S> sourceParser,
|
|
||||||
@NotNull Class<V> valueClass, @NotNull ConfigDataFunction<S, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<K, String> keySerializer,
|
|
||||||
@NotNull ConfigDataFunction<V, S> valueSerializer,
|
|
||||||
@NotNull ConfigDataFunction<S, Object> sourceSerializer) {
|
|
||||||
this.supplier = supplier;
|
|
||||||
this.keyClass = keyClass;
|
|
||||||
this.keyParser = keyParser;
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
this.valueParser = valueParser;
|
|
||||||
this.sourceClass = sourceClass;
|
|
||||||
this.sourceParser = sourceParser;
|
|
||||||
this.keySerializer = keySerializer;
|
|
||||||
this.valueSerializer = valueSerializer;
|
|
||||||
this.sourceSerializer = sourceSerializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public <MAP extends Map<K, V>> SourceMapBuilder<MAP, S, K, V> supplier(@NotNull Supplier<MAP> supplier) {
|
|
||||||
return new SourceMapBuilder<>(supplier,
|
|
||||||
keyClass, keyParser, sourceClass, sourceParser, valueClass, valueParser,
|
|
||||||
keySerializer, valueSerializer, sourceSerializer
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<M, S, K, V> defaults(@NotNull Consumer<M> factory) {
|
|
||||||
M map = supplier.get();
|
|
||||||
factory.accept(map);
|
|
||||||
return defaults(map);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<M, S, K, V> parseKey(@NotNull ConfigDataFunction<String, K> parser) {
|
|
||||||
this.keyParser = parser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<M, S, K, V> parseSource(@NotNull ConfigDataFunction<Object, S> parser) {
|
|
||||||
this.sourceParser = parser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<M, S, K, V> parseValue(@NotNull ConfigDataFunction<S, V> parser) {
|
|
||||||
this.valueParser = parser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<M, S, K, V> serializeKey(@NotNull ConfigDataFunction<K, String> serializer) {
|
|
||||||
this.keySerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<M, S, K, V> serializeValue(@NotNull ConfigDataFunction<V, S> serializer) {
|
|
||||||
this.valueSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<M, S, K, V> serializeSource(@NotNull ConfigDataFunction<S, Object> serializer) {
|
|
||||||
this.sourceSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected @NotNull SourceMapBuilder<M, S, K, V> getThis() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ConfiguredMap<K, V> build() {
|
|
||||||
return new ConfiguredMap<>(
|
|
||||||
new ValueManifest<>(provider, path, headerComments, inlineComment, defaultValue),
|
|
||||||
this.supplier, this.keyClass, this.keyParser,
|
|
||||||
this.valueClass, this.sourceParser.andThen(this.valueParser),
|
|
||||||
this.keySerializer, this.valueSerializer.andThen(this.sourceSerializer)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.value;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigValueParser;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class ConfigValueBuilder<V> {
|
|
||||||
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
|
|
||||||
public ConfigValueBuilder(@NotNull Class<V> valueClass) {
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> fromSection() {
|
|
||||||
return fromSection(ConfigValueParser.required(), ConfigDataFunction.required());
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> fromSection(@NotNull ConfigValueParser<ConfigurationWrapper<?>, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<V, ? extends Map<String, Object>> valueSerializer) {
|
|
||||||
return new SectionValueBuilder<>(this.valueClass, valueParser, valueSerializer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull <S> SourceValueBuilder<S, V> from(Class<S> sourceClass) {
|
|
||||||
return from(
|
|
||||||
sourceClass, ConfigDataFunction.required(), ConfigValueParser.required(),
|
|
||||||
ConfigDataFunction.required(), ConfigDataFunction.required()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull <S> SourceValueBuilder<S, V> from(@NotNull Class<S> sourceClass,
|
|
||||||
@NotNull ConfigDataFunction<Object, S> sourceParser,
|
|
||||||
@NotNull ConfigValueParser<S, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<V, S> valueSerializer,
|
|
||||||
@NotNull ConfigDataFunction<S, Object> sourceSerializer) {
|
|
||||||
return new SourceValueBuilder<>(
|
|
||||||
sourceClass, sourceParser, this.valueClass, valueParser,
|
|
||||||
valueSerializer, sourceSerializer
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<Object, V> fromObject() {
|
|
||||||
return from(
|
|
||||||
Object.class, ConfigDataFunction.identity(),
|
|
||||||
ConfigValueParser.castObject(valueClass),
|
|
||||||
s -> {
|
|
||||||
if (s instanceof Enum<?>) return ((Enum<?>) s).name();
|
|
||||||
else return s;
|
|
||||||
}, ConfigDataFunction.toObject()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<String, V> fromString() {
|
|
||||||
return from(
|
|
||||||
String.class, ConfigDataFunction.castToString(),
|
|
||||||
ConfigValueParser.parseString(this.valueClass),
|
|
||||||
ConfigDataFunction.castToString(), ConfigDataFunction.toObject()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.value;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigValueParser;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class SectionValueBuilder<V>
|
|
||||||
extends CommonConfigBuilder<V, SectionValueBuilder<V>> {
|
|
||||||
|
|
||||||
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
|
|
||||||
protected @NotNull ConfigValueParser<ConfigurationWrapper<?>, V> parser;
|
|
||||||
protected @NotNull ConfigDataFunction<V, ? extends Map<String, Object>> serializer;
|
|
||||||
|
|
||||||
public SectionValueBuilder(@NotNull Class<V> valueClass,
|
|
||||||
@NotNull ConfigValueParser<ConfigurationWrapper<?>, V> parser,
|
|
||||||
@NotNull ConfigDataFunction<V, ? extends Map<String, Object>> serializer) {
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
this.parser = parser;
|
|
||||||
this.serializer = serializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected @NotNull SectionValueBuilder<V> getThis() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> parseValue(ConfigDataFunction<ConfigurationWrapper<?>, V> valueParser) {
|
|
||||||
return parseValue((section, path) -> valueParser.parse(section));
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> parseValue(ConfigValueParser<ConfigurationWrapper<?>, V> valueParser) {
|
|
||||||
this.parser = valueParser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SectionValueBuilder<V> serializeValue(ConfigDataFunction<V, ? extends Map<String, Object>> serializer) {
|
|
||||||
this.serializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ConfiguredSection<V> build() {
|
|
||||||
return new ConfiguredSection<>(buildManifest(), this.valueClass, this.parser, this.serializer);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.builder.value;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.builder.CommonConfigBuilder;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigDataFunction;
|
|
||||||
import cc.carm.lib.configuration.function.ConfigValueParser;
|
|
||||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class SourceValueBuilder<S, V> extends CommonConfigBuilder<V, SourceValueBuilder<S, V>> {
|
|
||||||
|
|
||||||
protected final @NotNull Class<S> sourceClass;
|
|
||||||
protected @NotNull ConfigDataFunction<Object, S> sourceParser;
|
|
||||||
|
|
||||||
protected final @NotNull Class<V> valueClass;
|
|
||||||
protected @NotNull ConfigValueParser<S, V> valueParser;
|
|
||||||
|
|
||||||
protected @NotNull ConfigDataFunction<S, Object> sourceSerializer;
|
|
||||||
protected @NotNull ConfigDataFunction<V, S> valueSerializer;
|
|
||||||
|
|
||||||
public SourceValueBuilder(@NotNull Class<S> sourceClass, @NotNull ConfigDataFunction<Object, S> sourceParser,
|
|
||||||
@NotNull Class<V> valueClass, @NotNull ConfigValueParser<S, V> valueParser,
|
|
||||||
@NotNull ConfigDataFunction<V, S> valueSerializer,
|
|
||||||
@NotNull ConfigDataFunction<S, Object> sourceSerializer) {
|
|
||||||
this.sourceClass = sourceClass;
|
|
||||||
this.sourceParser = sourceParser;
|
|
||||||
this.valueClass = valueClass;
|
|
||||||
this.valueParser = valueParser;
|
|
||||||
this.sourceSerializer = sourceSerializer;
|
|
||||||
this.valueSerializer = valueSerializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected @NotNull SourceValueBuilder<S, V> getThis() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> parseSource(@NotNull ConfigDataFunction<Object, S> sourceParser) {
|
|
||||||
this.sourceParser = sourceParser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> parseValue(ConfigDataFunction<S, V> valueParser) {
|
|
||||||
return parseValue((section, path) -> valueParser.parse(section));
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> parseValue(@NotNull ConfigValueParser<S, V> valueParser) {
|
|
||||||
this.valueParser = valueParser;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> serializeValue(@NotNull ConfigDataFunction<V, S> serializer) {
|
|
||||||
this.valueSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull SourceValueBuilder<S, V> serializeSource(@NotNull ConfigDataFunction<S, Object> serializer) {
|
|
||||||
this.sourceSerializer = serializer;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ConfiguredValue<V> build() {
|
|
||||||
return new ConfiguredValue<>(
|
|
||||||
buildManifest(), this.valueClass,
|
|
||||||
this.valueParser.compose(this.sourceParser),
|
|
||||||
this.valueSerializer.andThen(sourceSerializer)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user