mirror of
https://github.com/CarmJos/EasyConfiguration.git
synced 2026-06-04 18:48:20 +08:00
feat(adapter): Use registry to manage value adapters
This commit is contained in:
@@ -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
-1
@@ -1,4 +1,4 @@
|
|||||||
package cc.carm.lib.configuration.core.annotation;
|
package cc.carm.lib.configuration.annotation;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.ConfigInitializer;
|
import cc.carm.lib.configuration.core.ConfigInitializer;
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package cc.carm.lib.configuration.core.annotation;
|
package cc.carm.lib.configuration.annotation;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package cc.carm.lib.configuration.core.annotation;
|
package cc.carm.lib.configuration.annotation;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package cc.carm.lib.configuration.core;
|
package cc.carm.lib.configuration.core;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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 {
|
|
||||||
}
|
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
package cc.carm.lib.configuration.core.builder;
|
package cc.carm.lib.configuration.core.builder;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -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.builder.CommonConfigBuilder;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
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 org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
+2
-2
@@ -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.builder.CommonConfigBuilder;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSectionMap;
|
import cc.carm.lib.configuration.value.standard.ConfiguredSectionMap;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.LinkedHashMap;
|
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.builder.CommonConfigBuilder;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
|
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
+1
-1
@@ -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.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
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 org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
+1
-1
@@ -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.builder.CommonConfigBuilder;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
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;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class SourceValueBuilder<S, V> extends CommonConfigBuilder<V, SourceValueBuilder<S, V>> {
|
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.ConfigInitializer;
|
||||||
import cc.carm.lib.configuration.core.Configuration;
|
import cc.carm.lib.configuration.core.Configuration;
|
||||||
import cc.carm.lib.configuration.core.Configuration;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.annotations.Unmodifiable;
|
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
-1
@@ -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.builder.ConfigBuilder;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||||
+1
-1
@@ -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.ConfigInitializer;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||||
+3
-3
@@ -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.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
+2
-2
@@ -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.builder.map.ConfigMapCreator;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.annotations.Unmodifiable;
|
import org.jetbrains.annotations.Unmodifiable;
|
||||||
+3
-3
@@ -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.builder.list.ConfigListBuilder;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
+3
-3
@@ -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.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.impl.ConfigValueMap;
|
import cc.carm.lib.configuration.value.impl.ConfigValueMap;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
+3
-3
@@ -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.builder.value.SectionValueBuilder;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
+3
-3
@@ -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.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.impl.ConfigValueMap;
|
import cc.carm.lib.configuration.value.impl.ConfigValueMap;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
+3
-3
@@ -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.builder.value.ConfigValueBuilder;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
|
||||||
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
import cc.carm.lib.configuration.core.function.ConfigValueParser;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -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;
|
package cc.carm.lib.configuration.demo;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
import cc.carm.lib.configuration.core.Configuration;
|
||||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
|
|
||||||
@HeaderComment({"", "数据库配置", " 用于提供数据库连接,进行数据库操作。"})
|
@HeaderComment({"", "数据库配置", " 用于提供数据库连接,进行数据库操作。"})
|
||||||
public class DatabaseConfiguration extends ConfigurationRoot {
|
public class DatabaseConfiguration implements Configuration {
|
||||||
|
|
||||||
@ConfigPath("driver")
|
@ConfigPath("driver")
|
||||||
@HeaderComment({
|
@HeaderComment({
|
||||||
|
|||||||
+10
-11
@@ -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.ConfigInitializer;
|
||||||
import cc.carm.lib.configuration.core.Configuration;
|
import cc.carm.lib.configuration.core.Configuration;
|
||||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
|
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
|
||||||
import cc.carm.lib.configuration.demo.tests.model.TestModel;
|
import cc.carm.lib.configuration.demo.tests.model.TestModel;
|
||||||
|
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
@@ -56,7 +55,7 @@ public interface DemoConfiguration extends Configuration {
|
|||||||
* 支持内部类的直接注册。
|
* 支持内部类的直接注册。
|
||||||
* 注意,需要使用 {@link ConfigInitializer#initialize(Class, boolean, boolean)} 方法,并设定第三个参数为 true。
|
* 注意,需要使用 {@link ConfigInitializer#initialize(Class, boolean, boolean)} 方法,并设定第三个参数为 true。
|
||||||
*/
|
*/
|
||||||
class Sub extends ConfigurationRoot {
|
class Sub implements Configuration {
|
||||||
|
|
||||||
@ConfigPath(value = "uuid-value", root = true)
|
@ConfigPath(value = "uuid-value", root = true)
|
||||||
@InlineComment("This is an inline comment")
|
@InlineComment("This is an inline comment")
|
||||||
@@ -65,7 +64,7 @@ public interface DemoConfiguration extends Configuration {
|
|||||||
.parseValue((data, defaultValue) -> UUID.fromString(data))
|
.parseValue((data, defaultValue) -> UUID.fromString(data))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static class That extends ConfigurationRoot {
|
public static class That implements Configuration {
|
||||||
|
|
||||||
public static final ConfiguredList<UUID> OPERATORS = ConfiguredList
|
public static final ConfiguredList<UUID> OPERATORS = ConfiguredList
|
||||||
.builderOf(UUID.class).fromString()
|
.builderOf(UUID.class).fromString()
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
package cc.carm.lib.configuration.demo.tests.conf;
|
package cc.carm.lib.configuration.demo.tests.conf;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
import cc.carm.lib.configuration.core.Configuration;
|
||||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
|
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
import cc.carm.lib.configuration.demo.tests.model.TestModel;
|
import cc.carm.lib.configuration.demo.tests.model.TestModel;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class TestConfiguration extends ConfigurationRoot {
|
public class TestConfiguration implements Configuration {
|
||||||
|
|
||||||
public final TestInnerConfiguration INNER = new TestInnerConfiguration();
|
public final TestInnerConfiguration INNER = new TestInnerConfiguration();
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -1,12 +1,12 @@
|
|||||||
package cc.carm.lib.configuration.demo.tests.conf;
|
package cc.carm.lib.configuration.demo.tests.conf;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
import cc.carm.lib.configuration.core.Configuration;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
|
|
||||||
@HeaderComment("Inner Test")
|
@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);
|
public final ConfigValue<Double> INNER_VALUE = ConfiguredValue.of(Double.class, 1.0D);
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package cc.carm.lib.configuration.yaml;
|
package cc.carm.lib.configuration.yaml;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||||
import cc.carm.lib.configuration.core.value.ValueManifest;
|
import cc.carm.lib.configuration.value.ValueManifest;
|
||||||
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
|
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
|
||||||
import cc.carm.lib.configuration.yaml.builder.YAMLConfigBuilder;
|
import cc.carm.lib.configuration.yaml.builder.YAMLConfigBuilder;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
package cc.carm.lib.configuration.yaml.value;
|
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 cc.carm.lib.configuration.yaml.YAMLValue;
|
||||||
import org.bspfsystems.yamlconfiguration.serialization.ConfigurationSerializable;
|
import org.bspfsystems.yamlconfiguration.serialization.ConfigurationSerializable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package config.source;
|
package config.source;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
import cc.carm.lib.configuration.core.Configuration;
|
||||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.value.ConfigValue;
|
import cc.carm.lib.configuration.value.ConfigValue;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
|
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredSectionMap;
|
import cc.carm.lib.configuration.value.standard.ConfiguredSectionMap;
|
||||||
import cc.carm.lib.configuration.demo.tests.model.AbstractModel;
|
import cc.carm.lib.configuration.demo.tests.model.AbstractModel;
|
||||||
import cc.carm.lib.configuration.yaml.value.ConfiguredSerializable;
|
import cc.carm.lib.configuration.yaml.value.ConfiguredSerializable;
|
||||||
import config.model.AnyModel;
|
import config.model.AnyModel;
|
||||||
@@ -14,7 +14,7 @@ import config.model.SomeModel;
|
|||||||
|
|
||||||
@HeaderComment("以下内容用于测试序列化")
|
@HeaderComment("以下内容用于测试序列化")
|
||||||
@ConfigPath("model-test")
|
@ConfigPath("model-test")
|
||||||
public class ModelConfiguration extends ConfigurationRoot {
|
public class ModelConfiguration implements Configuration {
|
||||||
|
|
||||||
public static final ConfigValue<? extends AbstractModel> SOME_MODEL = ConfiguredSerializable.of(
|
public static final ConfigValue<? extends AbstractModel> SOME_MODEL = ConfiguredSerializable.of(
|
||||||
SomeModel.class, SomeModel.random()
|
SomeModel.class, SomeModel.random()
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package sample;
|
package sample;
|
||||||
|
|
||||||
import cc.carm.lib.configuration.core.Configuration;
|
import cc.carm.lib.configuration.core.Configuration;
|
||||||
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||||
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
import cc.carm.lib.configuration.annotation.HeaderComment;
|
||||||
import cc.carm.lib.configuration.core.annotation.InlineComment;
|
import cc.carm.lib.configuration.annotation.InlineComment;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||||
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user