diff --git a/core/pom.xml b/core/pom.xml index 50e957f..7d86ffa 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 3.7.2 + 3.8.0 4.0.0 diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/list/ConfigListBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/list/ConfigListBuilder.java index ab6d7ec..94e5a44 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/list/ConfigListBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/list/ConfigListBuilder.java @@ -1,9 +1,10 @@ package cc.carm.lib.configuration.core.builder.list; -import cc.carm.lib.configuration.core.annotation.InlineComment; import cc.carm.lib.configuration.core.function.ConfigDataFunction; import org.jetbrains.annotations.NotNull; +import java.util.Map; + public class ConfigListBuilder { @@ -13,7 +14,7 @@ public class ConfigListBuilder { this.valueClass = valueClass; } - public @NotNull SourceListBuilder from(@NotNull Class sourceClass, + public @NotNull SourceListBuilder from(@NotNull Class sourceClass, @NotNull ConfigDataFunction sourceParser, @NotNull ConfigDataFunction valueParser, @NotNull ConfigDataFunction valueSerializer, @@ -45,4 +46,13 @@ public class ConfigListBuilder { ); } + public @NotNull SourceListBuilder, V> fromMap() { + return from( + Map.class, obj -> (Map) obj, + ConfigDataFunction.required(), + ConfigDataFunction.required(), + ConfigDataFunction.toObject() + ); + } + } 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 4da6105..81ce353 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 @@ -12,7 +12,7 @@ import java.util.List; public class SourceListBuilder extends CommonConfigBuilder, SourceListBuilder> { - protected final @NotNull Class sourceClass; + protected final @NotNull Class sourceClass; protected @NotNull ConfigDataFunction sourceParser; protected final @NotNull Class valueClass; @@ -21,7 +21,7 @@ public class SourceListBuilder extends CommonConfigBuilder, Source protected @NotNull ConfigDataFunction valueSerializer; protected @NotNull ConfigDataFunction sourceSerializer; - public SourceListBuilder(@NotNull Class sourceClass, @NotNull ConfigDataFunction sourceParser, + public SourceListBuilder(@NotNull Class sourceClass, @NotNull ConfigDataFunction sourceParser, @NotNull Class valueClass, @NotNull ConfigDataFunction valueParser, @NotNull ConfigDataFunction valueSerializer, @NotNull ConfigDataFunction sourceSerializer) { diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/map/ConfigMapBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/map/ConfigMapBuilder.java index 93f522c..74f5219 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/map/ConfigMapBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/map/ConfigMapBuilder.java @@ -48,6 +48,14 @@ public class ConfigMapBuilder, K, V> { return fromString(ConfigDataFunction.castFromString(this.valueClass)); } + public SectionMapBuilder fromSection() { + return new SectionMapBuilder<>( + supplier, + keyClass, ConfigDataFunction.castFromString(keyClass), + valueClass, ConfigDataFunction.required(), + ConfigDataFunction.castToString(), ConfigDataFunction.required()); + } + public SourceMapBuilder fromObject(@NotNull ConfigDataFunction valueParser) { return from(Object.class, valueParser, ConfigDataFunction.toObject()); } 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 new file mode 100644 index 0000000..13e9764 --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/map/SectionMapBuilder.java @@ -0,0 +1,99 @@ +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 org.jetbrains.annotations.NotNull; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.BiConsumer; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class SectionMapBuilder, K, V> extends CommonConfigBuilder> { + + protected final @NotNull Supplier<@NotNull M> supplier; + + protected final @NotNull Class keyClass; + protected @NotNull ConfigDataFunction keyParser; + + protected final @NotNull Class valueClass; + protected @NotNull ConfigDataFunction, V> valueParser; + + protected @NotNull ConfigDataFunction keySerializer; + protected @NotNull ConfigDataFunction> valueSerializer; + + public SectionMapBuilder(@NotNull Supplier<@NotNull M> supplier, + @NotNull Class keyClass, @NotNull ConfigDataFunction keyParser, + @NotNull Class valueClass, @NotNull ConfigDataFunction, V> valueParser, + @NotNull ConfigDataFunction keySerializer, + @NotNull ConfigDataFunction> valueSerializer) { + this.supplier = supplier; + this.keyClass = keyClass; + this.keyParser = keyParser; + this.valueClass = valueClass; + this.valueParser = valueParser; + this.keySerializer = keySerializer; + this.valueSerializer = valueSerializer; + } + + public > SectionMapBuilder supplier(@NotNull Supplier supplier) { + return new SectionMapBuilder<>(supplier, + keyClass, keyParser, valueClass, valueParser, keySerializer, valueSerializer + ); + } + + public @NotNull SectionMapBuilder defaults(@NotNull Consumer factory) { + M map = supplier.get(); + factory.accept(map); + return defaults(map); + } + + public @NotNull SectionMapBuilder parseKey(@NotNull ConfigDataFunction parser) { + this.keyParser = parser; + return this; + } + + public @NotNull SectionMapBuilder parseValue(@NotNull ConfigDataFunction, V> parser) { + this.valueParser = parser; + return this; + } + + public @NotNull SectionMapBuilder serializeKey(@NotNull ConfigDataFunction serializer) { + this.keySerializer = serializer; + return this; + } + + public @NotNull SectionMapBuilder serializeValue(@NotNull ConfigDataFunction> serializer) { + this.valueSerializer = serializer; + return this; + } + + public @NotNull SectionMapBuilder serializeValue(@NotNull BiConsumer> serializer) { + return serializeValue(v -> { + Map map = new LinkedHashMap<>(); + serializer.accept(v, map); + return map; + }); + } + + + @Override + protected @NotNull SectionMapBuilder getThis() { + return this; + } + + @Override + public @NotNull ConfiguredSectionMap build() { + return new ConfiguredSectionMap<>( + new ValueManifest<>(provider, path, headerComments, inlineComment, defaultValue), + this.supplier, this.keyClass, this.keyParser, + this.valueClass, this.valueParser, + this.keySerializer, this.valueSerializer + ); + } + +} 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/core/value/impl/ConfigValueMap.java new file mode 100644 index 0000000..b68304e --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/impl/ConfigValueMap.java @@ -0,0 +1,214 @@ +package cc.carm.lib.configuration.core.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 org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; + +import java.util.*; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + +public abstract class ConfigValueMap extends CachedConfigValue> implements Map { + + public static @NotNull ConfigMapCreator builderOf(@NotNull Class keyClass, + @NotNull Class valueClass) { + return builder().asMap(keyClass, valueClass); + } + + protected final @NotNull Supplier> supplier; + + protected final @NotNull Class sourceClass; + protected final @NotNull Class keyClass; + protected final @NotNull Class valueClass; + + protected final @NotNull ConfigDataFunction keyParser; + protected final @NotNull ConfigDataFunction valueParser; + + protected final @NotNull ConfigDataFunction keySerializer; + protected final @NotNull ConfigDataFunction valueSerializer; + + + protected ConfigValueMap(@NotNull ValueManifest> manifest, @NotNull Class sourceClass, + @NotNull Supplier> mapObjSupplier, + @NotNull Class keyClass, @NotNull ConfigDataFunction keyParser, + @NotNull Class valueClass, @NotNull ConfigDataFunction valueParser, + @NotNull ConfigDataFunction keySerializer, + @NotNull ConfigDataFunction valueSerializer) { + super(manifest); + this.supplier = mapObjSupplier; + this.sourceClass = sourceClass; + this.keyClass = keyClass; + this.valueClass = valueClass; + this.keyParser = keyParser; + this.valueParser = valueParser; + this.keySerializer = keySerializer; + this.valueSerializer = valueSerializer; + } + + public @NotNull Class getSourceClass() { + return sourceClass; + } + + public @NotNull Class getKeyClass() { + return keyClass; + } + + public @NotNull Class getValueClass() { + return valueClass; + } + + public @NotNull ConfigDataFunction getKeyParser() { + return keyParser; + } + + public @NotNull ConfigDataFunction getValueParser() { + return valueParser; + } + + public @NotNull ConfigDataFunction getKeySerializer() { + return keySerializer; + } + + public @NotNull ConfigDataFunction getValueSerializer() { + return valueSerializer; + } + + public abstract S getSource(ConfigurationWrapper section, String dataKey); + + @Override + public @NotNull Map get() { + if (!isExpired()) return getCachedOrDefault(supplier.get()); + + // 已过时的数据,需要重新解析一次。 + Map map = supplier.get(); + + ConfigurationWrapper section = getConfiguration().getConfigurationSection(getConfigPath()); + if (section == null) return getDefaultFirst(map); + + Set keys = section.getKeys(false); + if (keys.isEmpty()) return getDefaultFirst(map); + + for (String dataKey : keys) { + S dataVal = getSource(section, dataKey); + if (dataVal == null) continue; + try { + K key = keyParser.parse(dataKey); + V value = valueParser.parse(dataVal); + map.put(key, value); + } catch (Exception e) { + e.printStackTrace(); + } + } + + return updateCache(map); + } + + @Override + public V get(Object key) { + return get().get(key); + } + + public V getNotNull(Object key) { + return Objects.requireNonNull(get(key)); + } + + @Override + public void set(@Nullable Map value) { + updateCache(value); + if (value == null) setValue(null); + else { + Map data = new LinkedHashMap<>(); + for (Map.Entry entry : value.entrySet()) { + try { + data.put( + keySerializer.parse(entry.getKey()), + valueSerializer.parse(entry.getValue()) + ); + } catch (Exception e) { + e.printStackTrace(); + } + } + setValue(data); + } + } + + public @NotNull T modifyValue(Function, T> function) { + Map m = get(); + T result = function.apply(m); + set(m); + return result; + } + + public @NotNull Map modifyMap(Consumer> consumer) { + Map m = get(); + consumer.accept(m); + set(m); + return m; + } + + @Override + public int size() { + return get().size(); + } + + @Override + public boolean isEmpty() { + return get().isEmpty(); + } + + @Override + public boolean containsKey(Object key) { + return get().containsKey(key); + } + + @Override + public boolean containsValue(Object value) { + return get().containsValue(value); + } + + @Nullable + @Override + public V put(K key, V value) { + return modifyValue(m -> m.put(key, value)); + } + + @Override + public V remove(Object key) { + return modifyValue(m -> m.remove(key)); + } + + @Override + public void putAll(@NotNull Map m) { + modifyMap(map -> map.putAll(m)); + } + + @Override + public void clear() { + modifyMap(Map::clear); + } + + @NotNull + @Override + public Set keySet() { + return get().keySet(); + } + + @NotNull + @Override + public Collection values() { + return get().values(); + } + + @NotNull + @Override + @Unmodifiable + public Set> entrySet() { + return get().entrySet(); + } + +} 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/core/value/type/ConfiguredMap.java index 142a9a7..75fe74b 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredMap.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredMap.java @@ -1,40 +1,15 @@ package cc.carm.lib.configuration.core.value.type; -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.core.value.impl.CachedConfigValue; +import cc.carm.lib.configuration.core.value.impl.ConfigValueMap; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.Unmodifiable; -import java.util.Collection; -import java.util.LinkedHashMap; import java.util.Map; -import java.util.Set; -import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; -public class ConfiguredMap extends CachedConfigValue> implements Map { - - public static @NotNull ConfigMapCreator builderOf(@NotNull Class keyClass, - @NotNull Class valueClass) { - return builder().asMap(keyClass, valueClass); - } - - protected final @NotNull Supplier> supplier; - - protected final @NotNull Class keyClass; - protected final @NotNull Class valueClass; - - protected final @NotNull ConfigDataFunction keyParser; - protected final @NotNull ConfigDataFunction valueParser; - - protected final @NotNull ConfigDataFunction keySerializer; - protected final @NotNull ConfigDataFunction valueSerializer; - +public class ConfiguredMap extends ConfigValueMap { public ConfiguredMap(@NotNull ValueManifest> manifest, @NotNull Supplier> mapObjSupplier, @@ -42,165 +17,12 @@ public class ConfiguredMap extends CachedConfigValue> implements @NotNull Class valueClass, @NotNull ConfigDataFunction valueParser, @NotNull ConfigDataFunction keySerializer, @NotNull ConfigDataFunction valueSerializer) { - super(manifest); - this.supplier = mapObjSupplier; - this.keyClass = keyClass; - this.valueClass = valueClass; - this.keyParser = keyParser; - this.valueParser = valueParser; - this.keySerializer = keySerializer; - this.valueSerializer = valueSerializer; - } - - public @NotNull Class getKeyClass() { - return keyClass; - } - - public @NotNull Class getValueClass() { - return valueClass; - } - - public @NotNull ConfigDataFunction getKeyParser() { - return keyParser; - } - - public @NotNull ConfigDataFunction getValueParser() { - return valueParser; - } - - public @NotNull ConfigDataFunction getKeySerializer() { - return keySerializer; - } - - public @NotNull ConfigDataFunction getValueSerializer() { - return valueSerializer; + super(manifest, Object.class, mapObjSupplier, keyClass, keyParser, valueClass, valueParser, keySerializer, valueSerializer); } @Override - public @NotNull Map get() { - if (!isExpired()) return getCachedOrDefault(supplier.get()); - - // 已过时的数据,需要重新解析一次。 - Map map = supplier.get(); - - ConfigurationWrapper section = getConfiguration().getConfigurationSection(getConfigPath()); - if (section == null) return getDefaultFirst(map); - - Set keys = section.getKeys(false); - if (keys.isEmpty()) return getDefaultFirst(map); - - for (String dataKey : keys) { - Object dataVal = section.get(dataKey); - if (dataVal == null) continue; - try { - K key = keyParser.parse(dataKey); - V value = valueParser.parse(dataVal); - map.put(key, value); - } catch (Exception e) { - e.printStackTrace(); - } - } - - return updateCache(map); - } - - @Override - public V get(Object key) { - return get().get(key); - } - - @Override - public void set(@Nullable Map value) { - updateCache(value); - if (value == null) setValue(null); - else { - Map data = new LinkedHashMap<>(); - for (Map.Entry entry : value.entrySet()) { - try { - data.put( - keySerializer.parse(entry.getKey()), - valueSerializer.parse(entry.getValue()) - ); - } catch (Exception e) { - e.printStackTrace(); - } - } - setValue(data); - } - } - - public @NotNull T modifyValue(Function, T> function) { - Map m = get(); - T result = function.apply(m); - set(m); - return result; - } - - public @NotNull Map modifyMap(Consumer> consumer) { - Map m = get(); - consumer.accept(m); - set(m); - return m; - } - - @Override - public int size() { - return get().size(); - } - - @Override - public boolean isEmpty() { - return get().isEmpty(); - } - - @Override - public boolean containsKey(Object key) { - return get().containsKey(key); - } - - @Override - public boolean containsValue(Object value) { - return get().containsValue(value); - } - - @Nullable - @Override - public V put(K key, V value) { - return modifyValue(m -> m.put(key, value)); - } - - @Override - public V remove(Object key) { - return modifyValue(m -> m.remove(key)); - } - - @Override - public void putAll(@NotNull Map m) { - modifyMap(map -> map.putAll(m)); - } - - @Override - public void clear() { - modifyMap(Map::clear); - } - - @NotNull - @Override - public Set keySet() { - return get().keySet(); - } - - @NotNull - @Override - public Collection values() { - return get().values(); - } - - @NotNull - @Override - @Unmodifiable - public Set> entrySet() { - return get().entrySet(); + public Object getSource(ConfigurationWrapper section, String dataKey) { + return section.get(dataKey); } } 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/core/value/type/ConfiguredSectionMap.java new file mode 100644 index 0000000..9d120e6 --- /dev/null +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSectionMap.java @@ -0,0 +1,32 @@ +package cc.carm.lib.configuration.core.value.type; + +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 org.jetbrains.annotations.NotNull; + +import java.util.Map; +import java.util.function.Supplier; + +public class ConfiguredSectionMap extends ConfigValueMap> { + + public ConfiguredSectionMap(@NotNull ValueManifest> manifest, + @NotNull Supplier> mapObjSupplier, + @NotNull Class keyClass, @NotNull ConfigDataFunction keyParser, + @NotNull Class valueClass, @NotNull ConfigDataFunction, V> valueParser, + @NotNull ConfigDataFunction keySerializer, + @NotNull ConfigDataFunction> valueSerializer) { + super( + manifest, ConfigurationWrapper.class, mapObjSupplier, + keyClass, keyParser, valueClass, valueParser, + keySerializer, valueSerializer.andThen(s -> (Object) s) + ); + } + + @Override + public ConfigurationWrapper getSource(ConfigurationWrapper section, String dataKey) { + return section.getConfigurationSection(dataKey); + } + +} diff --git a/demo/pom.xml b/demo/pom.xml index 7979969..40b80df 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 3.7.2 + 3.8.0 4.0.0 diff --git a/impl/hocon/pom.xml b/impl/hocon/pom.xml index 3270c1f..c1a3956 100644 --- a/impl/hocon/pom.xml +++ b/impl/hocon/pom.xml @@ -6,7 +6,7 @@ cc.carm.lib easyconfiguration-parent - 3.7.2 + 3.8.0 ../../pom.xml diff --git a/impl/json/pom.xml b/impl/json/pom.xml index b961312..057f433 100644 --- a/impl/json/pom.xml +++ b/impl/json/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 3.7.2 + 3.8.0 ../../pom.xml 4.0.0 diff --git a/impl/sql/pom.xml b/impl/sql/pom.xml index 9624d3d..7c845cf 100644 --- a/impl/sql/pom.xml +++ b/impl/sql/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 3.7.2 + 3.8.0 ../../pom.xml 4.0.0 diff --git a/impl/sql/table_schem.sql b/impl/sql/table_schem.sql index 1d07052..53e1b5b 100644 --- a/impl/sql/table_schem.sql +++ b/impl/sql/table_schem.sql @@ -1,14 +1,14 @@ CREATE TABLE IF NOT EXISTS conf ( - `namespace` VARCHAR(255) NOT NULL, # 命名空间 - `section` VARCHAR(255) NOT NULL, # 配置路径 (ConfigPath) - `type` VARCHAR(255) NOT NULL, # 数据类型 (Integer/Byte/List/Map/...) - `value` MEDIUMTEXT, # 配置项的值 (可能为JSON格式) - `inline_comments` TINYTEXT, # 行内注释 - `header_comments` TEXT, # 顶部注释 - `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`namespace`, `section`) + `namespace` VARCHAR(255) NOT NULL, # 命名空间 + `path` VARCHAR(255) NOT NULL, # 配置路径 (ConfigPath) + `type` TINYINT UNSIGNED NOT NULL DEFAULT 0, # 数据类型 (Integer/Byte/List/Map/...) + `value` MEDIUMTEXT, # 配置项的值 (可能为JSON格式) + `inline_comments` TEXT, # 行内注释 + `header_comments` MEDIUMTEXT, # 顶部注释 + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, # 创建时间 + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`namespace`, `path`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; diff --git a/impl/yaml/pom.xml b/impl/yaml/pom.xml index db373c9..3c2b3b5 100644 --- a/impl/yaml/pom.xml +++ b/impl/yaml/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 3.7.2 + 3.8.0 ../../pom.xml 4.0.0 diff --git a/impl/yaml/src/test/java/config/DemoConfigTest.java b/impl/yaml/src/test/java/config/DemoConfigTest.java index cdba46d..f1ac552 100644 --- a/impl/yaml/src/test/java/config/DemoConfigTest.java +++ b/impl/yaml/src/test/java/config/DemoConfigTest.java @@ -42,6 +42,8 @@ public class DemoConfigTest { if (anyModel != null) System.out.println(anyModel.getName()); ModelConfiguration.MODELS.forEach(System.out::println); + ModelConfiguration.MODEL_MAP.forEach((v, anyModel1) -> System.out.println(v + " -> " + anyModel1.toString())); + System.out.println("----------------------------------------------------"); } diff --git a/impl/yaml/src/test/java/config/source/ModelConfiguration.java b/impl/yaml/src/test/java/config/source/ModelConfiguration.java index ce0f06d..61eab06 100644 --- a/impl/yaml/src/test/java/config/source/ModelConfiguration.java +++ b/impl/yaml/src/test/java/config/source/ModelConfiguration.java @@ -5,13 +5,13 @@ 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.demo.tests.model.AbstractModel; import cc.carm.lib.configuration.yaml.value.ConfiguredSerializable; import config.model.AnyModel; import config.model.SomeModel; -import java.util.Map; - @HeaderComment("以下内容用于测试序列化") @ConfigPath("model-test") public class ModelConfiguration extends ConfigurationRoot { @@ -25,10 +25,19 @@ public class ModelConfiguration extends ConfigurationRoot { ); public static final ConfiguredList MODELS = ConfiguredList.builderOf(AnyModel.class) - .fromObject() - .parseValue((section) -> AnyModel.deserialize((Map) section)) - .serializeValue(AnyModel::serialize) + .fromMap() + .parseValue(AnyModel::deserialize).serializeValue(AnyModel::serialize) .defaults(AnyModel.random(), AnyModel.random(), AnyModel.random()) .build(); + public static final ConfiguredSectionMap MODEL_MAP = ConfiguredMap.builderOf(String.class, AnyModel.class) + .asLinkedMap().fromSection() + .parseValue(v -> new AnyModel(v.getString("name", "EMPTY"), v.getBoolean("state", false))) + .serializeValue(AnyModel::serialize) + .defaults(m -> { + m.put("a", AnyModel.random()); + m.put("b", AnyModel.random()); + }) + .build(); + } diff --git a/pom.xml b/pom.xml index 9b0ad69..147083f 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ cc.carm.lib easyconfiguration-parent pom - 3.7.2 + 3.8.0 core demo