mirror of
https://github.com/CarmJos/EasyConfiguration.git
synced 2024-09-19 20:25:51 +00:00
feat(adapter): Use registry to manage value adapters
This commit is contained in:
parent
2ef1471f59
commit
c7fb51d6b2
@ -0,0 +1,45 @@
|
||||
package cc.carm.lib.configuration.adapter;
|
||||
|
||||
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class ValueAdapter<P extends ConfigurationProvider, B, V> {
|
||||
|
||||
protected final Class<B> baseType;
|
||||
protected final Class<V> valueType;
|
||||
|
||||
protected ValueAdapter(Class<B> baseType, Class<V> valueType) {
|
||||
this.baseType = baseType;
|
||||
this.valueType = valueType;
|
||||
}
|
||||
|
||||
public Class<B> getBaseType() {
|
||||
return baseType;
|
||||
}
|
||||
|
||||
public Class<V> getValueType() {
|
||||
return valueType;
|
||||
}
|
||||
|
||||
public abstract B serialize(@NotNull P provider, @NotNull V value) throws Exception;
|
||||
|
||||
public abstract V deserialize(@NotNull P provider, @NotNull B data) throws Exception;
|
||||
|
||||
public boolean isAdaptedFrom(Class<?> clazz) {
|
||||
return clazz.isAssignableFrom(valueType);
|
||||
}
|
||||
|
||||
public boolean isAdaptedFrom(Object object) {
|
||||
return isAdaptedFrom(object.getClass());
|
||||
}
|
||||
|
||||
protected final V deserializeObject(P provider, Object data) throws Exception {
|
||||
return deserialize(provider, this.baseType.cast(data));
|
||||
}
|
||||
|
||||
protected final B serializeObject(P provider, Object value) throws Exception {
|
||||
return serialize(provider, this.valueType.cast(value));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,79 @@
|
||||
package cc.carm.lib.configuration.adapter;
|
||||
|
||||
import cc.carm.lib.configuration.adapter.primitive.PrimitiveAdapter;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ValueAdapterRegistry<P extends ConfigurationProvider> {
|
||||
|
||||
protected final @NotNull P provider;
|
||||
protected final Map<Class<?>, ValueAdapter<P, ?, ?>> adapters = new HashMap<>();
|
||||
|
||||
public ValueAdapterRegistry(@NotNull P provider) {
|
||||
this.provider = provider;
|
||||
}
|
||||
|
||||
public void register(@NotNull ValueAdapter<P, ?, ?> adapter) {
|
||||
adapters.put(adapter.valueType, adapter);
|
||||
}
|
||||
|
||||
public <B, V> void register(Class<B> baseClass, Class<V> valueClass,
|
||||
ConfigDataFunction<B, V> parser,
|
||||
ConfigDataFunction<V, B> serializer) {
|
||||
register(new ValueAdapter<P, B, V>(baseClass, valueClass) {
|
||||
@Override
|
||||
public B serialize(@NotNull P provider, @NotNull V value) throws Exception {
|
||||
return serializer.parse(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public V deserialize(@NotNull P provider, @NotNull B data) throws Exception {
|
||||
return parser.parse(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void unregister(@NotNull Class<?> typeClass) {
|
||||
adapters.remove(typeClass);
|
||||
}
|
||||
|
||||
public <T> T deserialize(Class<T> type, Object value) throws Exception {
|
||||
if (value == null) return null;
|
||||
if (type == Object.class) return type.cast(value);
|
||||
|
||||
ValueAdapter<P, ?, ?> adapter = adapters.get(type);
|
||||
if (adapter == null) throw new RuntimeException("No adapter for type " + type.getName());
|
||||
|
||||
// CHECK IF VALUE IS ADAPTED FROM GIVEN VALUE'S TYPE
|
||||
if (adapter.isAdaptedFrom(value)) return type.cast(adapter.deserializeObject(provider, value));
|
||||
|
||||
// OTHERWISE, WE NEED TO DESERIALIZE ONE BY ONE
|
||||
Object baseValue = deserialize(adapter.getBaseType(), value);
|
||||
if (baseValue == null) return null; // Null check
|
||||
|
||||
return type.cast(adapter.deserializeObject(provider, baseValue));
|
||||
}
|
||||
|
||||
public <T> Object serialize(T value) throws Exception {
|
||||
if (value == null) return null;
|
||||
|
||||
Class<?> valueClass = value.getClass();
|
||||
ValueAdapter<P, ?, ?> adapter = adapters.get(valueClass);
|
||||
if (adapter == null) return value; // No adapters, try to return the original value
|
||||
|
||||
if (adapter instanceof PrimitiveAdapter) {
|
||||
// If the value is adapted from a primitive type,
|
||||
// we should serialize it into object, then return.
|
||||
return adapter.serializeObject(provider, value);
|
||||
}
|
||||
|
||||
// Otherwise, we need to serialize one by one.
|
||||
return serialize(adapter.serializeObject(provider, value));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package cc.carm.lib.configuration.adapter.primitive;
|
||||
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class NumberAdapter<P extends ConfigurationProvider, T extends Number> extends PrimitiveAdapter<P, T> {
|
||||
|
||||
public static <P extends ConfigurationProvider, T extends Number> NumberAdapter<P, T> of(Class<T> numberClass,
|
||||
ConfigDataFunction<Object, T> function) {
|
||||
return new NumberAdapter<P, T>(numberClass) {
|
||||
@Override
|
||||
public T deserialize(@NotNull P provider, @NotNull Object data) throws Exception {
|
||||
return function.parse(data);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
protected NumberAdapter(Class<T> valueType) {
|
||||
super(valueType);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package cc.carm.lib.configuration.adapter.primitive;
|
||||
|
||||
import cc.carm.lib.configuration.adapter.ValueAdapter;
|
||||
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class PrimitiveAdapter<P extends ConfigurationProvider, T> extends ValueAdapter<P, Object, T> {
|
||||
|
||||
protected PrimitiveAdapter(Class<T> valueType) {
|
||||
super(Object.class, valueType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object serialize(@NotNull P provider, @NotNull T value) throws Exception {
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package cc.carm.lib.configuration.core.annotation;
|
||||
package cc.carm.lib.configuration.annotation;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigInitializer;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package cc.carm.lib.configuration.core.annotation;
|
||||
package cc.carm.lib.configuration.annotation;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package cc.carm.lib.configuration.core.annotation;
|
||||
package cc.carm.lib.configuration.annotation;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -1,10 +1,10 @@
|
||||
package cc.carm.lib.configuration.core;
|
||||
|
||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
@ -1,8 +0,0 @@
|
||||
package cc.carm.lib.configuration.core;
|
||||
|
||||
/**
|
||||
* The root node of the configuration file class,
|
||||
* which is used to label and record the configuration information.
|
||||
*/
|
||||
public abstract class ConfigurationRoot implements Configuration {
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package cc.carm.lib.configuration.core.builder;
|
||||
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
|
@ -2,7 +2,7 @@ package cc.carm.lib.configuration.core.builder.list;
|
||||
|
||||
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -3,8 +3,8 @@ package cc.carm.lib.configuration.core.builder.map;
|
||||
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSectionMap;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredSectionMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
|
@ -2,8 +2,8 @@ package cc.carm.lib.configuration.core.builder.map;
|
||||
|
||||
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
||||
|
@ -4,7 +4,7 @@ import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
||||
|
@ -3,7 +3,7 @@ package cc.carm.lib.configuration.core.builder.value;
|
||||
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class SourceValueBuilder<S, V> extends CommonConfigBuilder<V, SourceValueBuilder<S, V>> {
|
||||
|
@ -1,4 +0,0 @@
|
||||
package cc.carm.lib.configuration.core.parser;
|
||||
|
||||
public class ValueParser {
|
||||
}
|
@ -2,9 +2,8 @@ package cc.carm.lib.configuration.core.source;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigInitializer;
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.Unmodifiable;
|
||||
|
@ -1,67 +0,0 @@
|
||||
package cc.carm.lib.configuration.core.util;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public class MapFactory<S extends Map<K, V>, K, V> {
|
||||
|
||||
private final S map;
|
||||
|
||||
protected MapFactory(S map) {
|
||||
this.map = map;
|
||||
}
|
||||
|
||||
public MapFactory<S, K, V> put(K key, V value) {
|
||||
this.map.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MapFactory<S, K, V> remove(K key) {
|
||||
this.map.remove(key);
|
||||
return this;
|
||||
}
|
||||
|
||||
public MapFactory<S, K, V> clear() {
|
||||
this.map.clear();
|
||||
return this;
|
||||
}
|
||||
|
||||
public S build() {
|
||||
return get();
|
||||
}
|
||||
|
||||
public S get() {
|
||||
return map;
|
||||
}
|
||||
|
||||
public static <K, V> MapFactory<HashMap<K, V>, K, V> hashMap() {
|
||||
return new MapFactory<>(new HashMap<>());
|
||||
}
|
||||
|
||||
public static <K, V> MapFactory<HashMap<K, V>, K, V> hashMap(K firstKey, V firstValue) {
|
||||
return MapFactory.<K, V>hashMap().put(firstKey, firstValue);
|
||||
}
|
||||
|
||||
public static <K, V> MapFactory<LinkedHashMap<K, V>, K, V> linkedMap() {
|
||||
return of(new LinkedHashMap<>());
|
||||
}
|
||||
|
||||
public static <K, V> MapFactory<LinkedHashMap<K, V>, K, V> linkedMap(K firstKey, V firstValue) {
|
||||
return MapFactory.<K, V>linkedMap().put(firstKey, firstValue);
|
||||
}
|
||||
|
||||
public static <K extends Comparable<K>, V> MapFactory<TreeMap<K, V>, K, V> treeMap() {
|
||||
return of(new TreeMap<>());
|
||||
}
|
||||
|
||||
public static <K extends Comparable<K>, V> MapFactory<TreeMap<K, V>, K, V> treeMap(K firstKey, V firstValue) {
|
||||
return MapFactory.<K, V>treeMap().put(firstKey, firstValue);
|
||||
}
|
||||
|
||||
public static <M extends Map<K, V>, K, V> MapFactory<M, K, V> of(M map) {
|
||||
return new MapFactory<>(map);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package cc.carm.lib.configuration.source;
|
||||
|
||||
import cc.carm.lib.configuration.adapter.ValueAdapterRegistry;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class ConfigurationBuilder<P extends ConfigurationProvider> {
|
||||
|
||||
protected ConfigurationLoader loader;
|
||||
protected ValueAdapterRegistry<P> processors;
|
||||
|
||||
|
||||
|
||||
public abstract @NotNull ConfigurationProvider build();
|
||||
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
package cc.carm.lib.configuration.source;
|
||||
|
||||
public interface ConfigurationLoader {
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
package cc.carm.lib.configuration.source;
|
||||
|
||||
public class ConfigurationProvider {
|
||||
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package cc.carm.lib.configuration.core.value;
|
||||
package cc.carm.lib.configuration.value;
|
||||
|
||||
import cc.carm.lib.configuration.core.builder.ConfigBuilder;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
@ -1,4 +1,4 @@
|
||||
package cc.carm.lib.configuration.core.value;
|
||||
package cc.carm.lib.configuration.value;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigInitializer;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
@ -1,7 +1,7 @@
|
||||
package cc.carm.lib.configuration.core.value.impl;
|
||||
package cc.carm.lib.configuration.value.impl;
|
||||
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
@ -1,9 +1,9 @@
|
||||
package cc.carm.lib.configuration.core.value.impl;
|
||||
package cc.carm.lib.configuration.value.impl;
|
||||
|
||||
import cc.carm.lib.configuration.core.builder.map.ConfigMapCreator;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.Unmodifiable;
|
@ -1,9 +1,9 @@
|
||||
package cc.carm.lib.configuration.core.value.type;
|
||||
package cc.carm.lib.configuration.value.standard;
|
||||
|
||||
import cc.carm.lib.configuration.core.builder.list.ConfigListBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package cc.carm.lib.configuration.core.value.type;
|
||||
package cc.carm.lib.configuration.value.standard;
|
||||
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.impl.ConfigValueMap;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.impl.ConfigValueMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
@ -1,11 +1,11 @@
|
||||
package cc.carm.lib.configuration.core.value.type;
|
||||
package cc.carm.lib.configuration.value.standard;
|
||||
|
||||
import cc.carm.lib.configuration.core.builder.value.SectionValueBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package cc.carm.lib.configuration.core.value.type;
|
||||
package cc.carm.lib.configuration.value.standard;
|
||||
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.impl.ConfigValueMap;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.impl.ConfigValueMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
@ -1,10 +1,10 @@
|
||||
package cc.carm.lib.configuration.core.value.type;
|
||||
package cc.carm.lib.configuration.value.standard;
|
||||
|
||||
import cc.carm.lib.configuration.core.builder.value.ConfigValueBuilder;
|
||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
31
core/src/test/java/AdaptTest.java
Normal file
31
core/src/test/java/AdaptTest.java
Normal file
@ -0,0 +1,31 @@
|
||||
import cc.carm.lib.configuration.adapter.ValueAdapterRegistry;
|
||||
import cc.carm.lib.configuration.adapter.primitive.NumberAdapter;
|
||||
import cc.carm.lib.configuration.source.ConfigurationProvider;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalTime;
|
||||
|
||||
public class AdaptTest {
|
||||
|
||||
@Test
|
||||
public void test() throws Exception {
|
||||
|
||||
ValueAdapterRegistry<?> registry = new ValueAdapterRegistry<>(new ConfigurationProvider());
|
||||
registry.register(NumberAdapter.of(Long.class, data -> Long.parseLong(data.toString())));
|
||||
registry.register(NumberAdapter.of(long.class, data -> Long.parseLong(data.toString())));
|
||||
registry.register(Long.class, Duration.class, Duration::ofSeconds, Duration::getSeconds);
|
||||
registry.register(
|
||||
Duration.class, LocalTime.class,
|
||||
duration -> LocalTime.now().plus(duration),
|
||||
data -> Duration.between(data, LocalTime.now())
|
||||
);
|
||||
|
||||
LocalTime v = registry.deserialize(LocalTime.class, "600");
|
||||
Object d = registry.serialize(v);
|
||||
|
||||
System.out.println(v);
|
||||
System.out.println(d);
|
||||
}
|
||||
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
package cc.carm.lib.configuration.demo;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||
|
||||
@HeaderComment({"", "数据库配置", " 用于提供数据库连接,进行数据库操作。"})
|
||||
public class DatabaseConfiguration extends ConfigurationRoot {
|
||||
public class DatabaseConfiguration implements Configuration {
|
||||
|
||||
@ConfigPath("driver")
|
||||
@HeaderComment({
|
||||
|
@ -2,15 +2,14 @@ package cc.carm.lib.configuration.demo.tests.conf;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigInitializer;
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.demo.tests.model.TestModel;
|
||||
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@ -56,7 +55,7 @@ public interface DemoConfiguration extends Configuration {
|
||||
* 支持内部类的直接注册。
|
||||
* 注意,需要使用 {@link ConfigInitializer#initialize(Class, boolean, boolean)} 方法,并设定第三个参数为 true。
|
||||
*/
|
||||
class Sub extends ConfigurationRoot {
|
||||
class Sub implements Configuration {
|
||||
|
||||
@ConfigPath(value = "uuid-value", root = true)
|
||||
@InlineComment("This is an inline comment")
|
||||
@ -65,7 +64,7 @@ public interface DemoConfiguration extends Configuration {
|
||||
.parseValue((data, defaultValue) -> UUID.fromString(data))
|
||||
.build();
|
||||
|
||||
public static class That extends ConfigurationRoot {
|
||||
public static class That implements Configuration {
|
||||
|
||||
public static final ConfiguredList<UUID> OPERATORS = ConfiguredList
|
||||
.builderOf(UUID.class).fromString()
|
||||
|
@ -1,17 +1,17 @@
|
||||
package cc.carm.lib.configuration.demo.tests.conf;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.demo.tests.model.TestModel;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class TestConfiguration extends ConfigurationRoot {
|
||||
public class TestConfiguration implements Configuration {
|
||||
|
||||
public final TestInnerConfiguration INNER = new TestInnerConfiguration();
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
package cc.carm.lib.configuration.demo.tests.conf;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||
|
||||
@HeaderComment("Inner Test")
|
||||
public class TestInnerConfiguration extends ConfigurationRoot {
|
||||
public class TestInnerConfiguration implements Configuration {
|
||||
|
||||
public final ConfigValue<Double> INNER_VALUE = ConfiguredValue.of(Double.class, 1.0D);
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
package cc.carm.lib.configuration.yaml;
|
||||
|
||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||
import cc.carm.lib.configuration.yaml.builder.YAMLConfigBuilder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package cc.carm.lib.configuration.yaml.value;
|
||||
|
||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.value.ValueManifest;
|
||||
import cc.carm.lib.configuration.yaml.YAMLValue;
|
||||
import org.bspfsystems.yamlconfiguration.serialization.ConfigurationSerializable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -1,12 +1,12 @@
|
||||
package config.source;
|
||||
|
||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSectionMap;
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.value.ConfigValue;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredSectionMap;
|
||||
import cc.carm.lib.configuration.demo.tests.model.AbstractModel;
|
||||
import cc.carm.lib.configuration.yaml.value.ConfiguredSerializable;
|
||||
import config.model.AnyModel;
|
||||
@ -14,7 +14,7 @@ import config.model.SomeModel;
|
||||
|
||||
@HeaderComment("以下内容用于测试序列化")
|
||||
@ConfigPath("model-test")
|
||||
public class ModelConfiguration extends ConfigurationRoot {
|
||||
public class ModelConfiguration implements Configuration {
|
||||
|
||||
public static final ConfigValue<? extends AbstractModel> SOME_MODEL = ConfiguredSerializable.of(
|
||||
SomeModel.class, SomeModel.random()
|
||||
|
@ -1,11 +1,11 @@
|
||||
package sample;
|
||||
|
||||
import cc.carm.lib.configuration.core.Configuration;
|
||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user