diff --git a/core/src/main/java/cc/carm/lib/configuration/adapter/ValueAdapter.java b/core/src/main/java/cc/carm/lib/configuration/adapter/ValueAdapter.java new file mode 100644 index 0000000..738dc27 --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/adapter/ValueAdapter.java @@ -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

{ + + protected final Class baseType; + protected final Class valueType; + + protected ValueAdapter(Class baseType, Class valueType) { + this.baseType = baseType; + this.valueType = valueType; + } + + public Class getBaseType() { + return baseType; + } + + public Class 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)); + } + +} + diff --git a/core/src/main/java/cc/carm/lib/configuration/adapter/ValueAdapterRegistry.java b/core/src/main/java/cc/carm/lib/configuration/adapter/ValueAdapterRegistry.java new file mode 100644 index 0000000..77eb729 --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/adapter/ValueAdapterRegistry.java @@ -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

{ + + protected final @NotNull P provider; + protected final Map, ValueAdapter> adapters = new HashMap<>(); + + public ValueAdapterRegistry(@NotNull P provider) { + this.provider = provider; + } + + public void register(@NotNull ValueAdapter adapter) { + adapters.put(adapter.valueType, adapter); + } + + public void register(Class baseClass, Class valueClass, + ConfigDataFunction parser, + ConfigDataFunction serializer) { + register(new ValueAdapter(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 deserialize(Class type, Object value) throws Exception { + if (value == null) return null; + if (type == Object.class) return type.cast(value); + + ValueAdapter 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 Object serialize(T value) throws Exception { + if (value == null) return null; + + Class valueClass = value.getClass(); + ValueAdapter 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)); + } + + +} diff --git a/core/src/main/java/cc/carm/lib/configuration/adapter/primitive/NumberAdapter.java b/core/src/main/java/cc/carm/lib/configuration/adapter/primitive/NumberAdapter.java new file mode 100644 index 0000000..fd535c0 --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/adapter/primitive/NumberAdapter.java @@ -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

extends PrimitiveAdapter { + + public static

NumberAdapter of(Class numberClass, + ConfigDataFunction function) { + return new NumberAdapter(numberClass) { + @Override + public T deserialize(@NotNull P provider, @NotNull Object data) throws Exception { + return function.parse(data); + } + }; + } + + protected NumberAdapter(Class valueType) { + super(valueType); + } + + +} diff --git a/core/src/main/java/cc/carm/lib/configuration/adapter/primitive/PrimitiveAdapter.java b/core/src/main/java/cc/carm/lib/configuration/adapter/primitive/PrimitiveAdapter.java new file mode 100644 index 0000000..1b80ea3 --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/adapter/primitive/PrimitiveAdapter.java @@ -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

extends ValueAdapter { + + protected PrimitiveAdapter(Class valueType) { + super(Object.class, valueType); + } + + @Override + public Object serialize(@NotNull P provider, @NotNull T value) throws Exception { + return value; + } + +} diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java b/core/src/main/java/cc/carm/lib/configuration/annotation/ConfigPath.java similarity index 95% rename from core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java rename to core/src/main/java/cc/carm/lib/configuration/annotation/ConfigPath.java index 25fee49..01061e3 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java +++ b/core/src/main/java/cc/carm/lib/configuration/annotation/ConfigPath.java @@ -1,4 +1,4 @@ -package cc.carm.lib.configuration.core.annotation; +package cc.carm.lib.configuration.annotation; import cc.carm.lib.configuration.core.ConfigInitializer; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java b/core/src/main/java/cc/carm/lib/configuration/annotation/HeaderComment.java similarity index 94% rename from core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java rename to core/src/main/java/cc/carm/lib/configuration/annotation/HeaderComment.java index 2089a46..284b290 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java +++ b/core/src/main/java/cc/carm/lib/configuration/annotation/HeaderComment.java @@ -1,4 +1,4 @@ -package cc.carm.lib.configuration.core.annotation; +package cc.carm.lib.configuration.annotation; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java b/core/src/main/java/cc/carm/lib/configuration/annotation/InlineComment.java similarity index 94% rename from core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java rename to core/src/main/java/cc/carm/lib/configuration/annotation/InlineComment.java index 1d3a750..d042da4 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java +++ b/core/src/main/java/cc/carm/lib/configuration/annotation/InlineComment.java @@ -1,4 +1,4 @@ -package cc.carm.lib.configuration.core.annotation; +package cc.carm.lib.configuration.annotation; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java b/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java index 1ea3f22..286b35e 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/ConfigInitializer.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/ConfigurationRoot.java b/core/src/main/java/cc/carm/lib/configuration/core/ConfigurationRoot.java deleted file mode 100644 index 8197290..0000000 --- a/core/src/main/java/cc/carm/lib/configuration/core/ConfigurationRoot.java +++ /dev/null @@ -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 { -} diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java index eef1122..dc3dd81 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java index 81ce353..e7e4367 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/list/SourceListBuilder.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SectionMapBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SectionMapBuilder.java index e94fdbe..df57cf3 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SectionMapBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SectionMapBuilder.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SourceMapBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SourceMapBuilder.java index 90d6636..034f597 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SourceMapBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SourceMapBuilder.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SectionValueBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SectionValueBuilder.java index ea29928..928860b 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SectionValueBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SectionValueBuilder.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SourceValueBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SourceValueBuilder.java index 203042a..57541fa 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SourceValueBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/value/SourceValueBuilder.java @@ -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 extends CommonConfigBuilder> { diff --git a/core/src/main/java/cc/carm/lib/configuration/core/parser/ValueParser.java b/core/src/main/java/cc/carm/lib/configuration/core/parser/ValueParser.java deleted file mode 100644 index c65d828..0000000 --- a/core/src/main/java/cc/carm/lib/configuration/core/parser/ValueParser.java +++ /dev/null @@ -1,4 +0,0 @@ -package cc.carm.lib.configuration.core.parser; - -public class ValueParser { -} diff --git a/core/src/main/java/cc/carm/lib/configuration/core/source/ConfigurationProvider.java b/core/src/main/java/cc/carm/lib/configuration/core/source/ConfigurationProvider.java index b628326..0252983 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/source/ConfigurationProvider.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/source/ConfigurationProvider.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/util/MapFactory.java b/core/src/main/java/cc/carm/lib/configuration/core/util/MapFactory.java deleted file mode 100644 index 7fe98cc..0000000 --- a/core/src/main/java/cc/carm/lib/configuration/core/util/MapFactory.java +++ /dev/null @@ -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, K, V> { - - private final S map; - - protected MapFactory(S map) { - this.map = map; - } - - public MapFactory put(K key, V value) { - this.map.put(key, value); - return this; - } - - public MapFactory remove(K key) { - this.map.remove(key); - return this; - } - - public MapFactory clear() { - this.map.clear(); - return this; - } - - public S build() { - return get(); - } - - public S get() { - return map; - } - - public static MapFactory, K, V> hashMap() { - return new MapFactory<>(new HashMap<>()); - } - - public static MapFactory, K, V> hashMap(K firstKey, V firstValue) { - return MapFactory.hashMap().put(firstKey, firstValue); - } - - public static MapFactory, K, V> linkedMap() { - return of(new LinkedHashMap<>()); - } - - public static MapFactory, K, V> linkedMap(K firstKey, V firstValue) { - return MapFactory.linkedMap().put(firstKey, firstValue); - } - - public static , V> MapFactory, K, V> treeMap() { - return of(new TreeMap<>()); - } - - public static , V> MapFactory, K, V> treeMap(K firstKey, V firstValue) { - return MapFactory.treeMap().put(firstKey, firstValue); - } - - public static , K, V> MapFactory of(M map) { - return new MapFactory<>(map); - } - -} diff --git a/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationBuilder.java b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationBuilder.java new file mode 100644 index 0000000..597bbcc --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationBuilder.java @@ -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

{ + + protected ConfigurationLoader loader; + protected ValueAdapterRegistry

processors; + + + + public abstract @NotNull ConfigurationProvider build(); + +} diff --git a/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationLoader.java b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationLoader.java new file mode 100644 index 0000000..79f0a5e --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationLoader.java @@ -0,0 +1,4 @@ +package cc.carm.lib.configuration.source; + +public interface ConfigurationLoader { +} diff --git a/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationProvider.java b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationProvider.java new file mode 100644 index 0000000..89354f3 --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationProvider.java @@ -0,0 +1,6 @@ +package cc.carm.lib.configuration.source; + +public class ConfigurationProvider { + + +} diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java b/core/src/main/java/cc/carm/lib/configuration/value/ConfigValue.java similarity index 98% rename from core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java rename to core/src/main/java/cc/carm/lib/configuration/value/ConfigValue.java index f8028ca..8b6ecd7 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/ConfigValue.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java b/core/src/main/java/cc/carm/lib/configuration/value/ValueManifest.java similarity index 99% rename from core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java rename to core/src/main/java/cc/carm/lib/configuration/value/ValueManifest.java index cde0cc2..9dd4888 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/ValueManifest.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/impl/CachedConfigValue.java b/core/src/main/java/cc/carm/lib/configuration/value/impl/CachedConfigValue.java similarity index 88% rename from core/src/main/java/cc/carm/lib/configuration/core/value/impl/CachedConfigValue.java rename to core/src/main/java/cc/carm/lib/configuration/value/impl/CachedConfigValue.java index c5fcf0d..92cd162 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/impl/CachedConfigValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/impl/CachedConfigValue.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/impl/ConfigValueMap.java b/core/src/main/java/cc/carm/lib/configuration/value/impl/ConfigValueMap.java similarity index 98% rename from core/src/main/java/cc/carm/lib/configuration/core/value/impl/ConfigValueMap.java rename to core/src/main/java/cc/carm/lib/configuration/value/impl/ConfigValueMap.java index b68304e..f45b057 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/impl/ConfigValueMap.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/impl/ConfigValueMap.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredList.java b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredList.java similarity index 97% rename from core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredList.java rename to core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredList.java index 567be17..555d4b2 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredList.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredList.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredMap.java b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredMap.java similarity index 86% rename from core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredMap.java rename to core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredMap.java index 75fe74b..5e4c086 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredMap.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredMap.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSection.java b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredSection.java similarity index 94% rename from core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSection.java rename to core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredSection.java index 76d807e..718de8d 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSection.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredSection.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSectionMap.java b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredSectionMap.java similarity index 88% rename from core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSectionMap.java rename to core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredSectionMap.java index 9d120e6..4d3a35c 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSectionMap.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredSectionMap.java @@ -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; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredValue.java similarity index 94% rename from core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java rename to core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredValue.java index 6a95b39..6b962f4 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/value/standard/ConfiguredValue.java @@ -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; diff --git a/core/src/test/java/AdaptTest.java b/core/src/test/java/AdaptTest.java new file mode 100644 index 0000000..6600144 --- /dev/null +++ b/core/src/test/java/AdaptTest.java @@ -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); + } + +} diff --git a/demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java b/demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java index 0d93407..5e662ea 100644 --- a/demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java +++ b/demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java @@ -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({ diff --git a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/DemoConfiguration.java b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/DemoConfiguration.java index d288459..feef0a4 100644 --- a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/DemoConfiguration.java +++ b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/DemoConfiguration.java @@ -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 OPERATORS = ConfiguredList .builderOf(UUID.class).fromString() diff --git a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestConfiguration.java b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestConfiguration.java index e9a3257..c242e4a 100644 --- a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestConfiguration.java +++ b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestConfiguration.java @@ -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(); diff --git a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestInnerConfiguration.java b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestInnerConfiguration.java index 8385a6a..ba61899 100644 --- a/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestInnerConfiguration.java +++ b/demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/TestInnerConfiguration.java @@ -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 INNER_VALUE = ConfiguredValue.of(Double.class, 1.0D); diff --git a/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/YAMLValue.java b/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/YAMLValue.java index 25179cd..5e16ff3 100644 --- a/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/YAMLValue.java +++ b/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/YAMLValue.java @@ -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; diff --git a/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/value/ConfiguredSerializable.java b/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/value/ConfiguredSerializable.java index 59f5536..454824b 100644 --- a/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/value/ConfiguredSerializable.java +++ b/impl/yaml/src/main/java/cc/carm/lib/configuration/yaml/value/ConfiguredSerializable.java @@ -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; diff --git a/impl/yaml/src/test/java/config/source/ModelConfiguration.java b/impl/yaml/src/test/java/config/source/ModelConfiguration.java index 61eab06..021c6a3 100644 --- a/impl/yaml/src/test/java/config/source/ModelConfiguration.java +++ b/impl/yaml/src/test/java/config/source/ModelConfiguration.java @@ -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 SOME_MODEL = ConfiguredSerializable.of( SomeModel.class, SomeModel.random() diff --git a/impl/yaml/src/test/java/sample/SampleConfig.java b/impl/yaml/src/test/java/sample/SampleConfig.java index 6e32128..7b71a42 100644 --- a/impl/yaml/src/test/java/sample/SampleConfig.java +++ b/impl/yaml/src/test/java/sample/SampleConfig.java @@ -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;