1
mirror of https://github.com/CarmJos/EasyConfiguration.git synced 2026-06-04 18:48:20 +08:00

[1.0.2] 添加Builder方法。

This commit is contained in:
2022-04-17 18:12:28 +08:00
parent e373068017
commit 7959783f0d
12 changed files with 56 additions and 29 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>easyconfiguration-parent</artifactId> <artifactId>easyconfiguration-parent</artifactId>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<version>1.0.1</version> <version>1.0.2</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<properties> <properties>
@@ -11,30 +11,30 @@ import java.util.TreeMap;
public class ConfigBuilder { public class ConfigBuilder {
public static <V> @NotNull ConfigValueBuilder<V> asValue(@NotNull Class<V> valueClass) { public <V> @NotNull ConfigValueBuilder<V> asValue(@NotNull Class<V> valueClass) {
return new ConfigValueBuilder<>(valueClass); return new ConfigValueBuilder<>(valueClass);
} }
public static <V> @NotNull ConfigListBuilder<V> asList(@NotNull Class<V> valueClass) { public <V> @NotNull ConfigListBuilder<V> asList(@NotNull Class<V> valueClass) {
return new ConfigListBuilder<>(valueClass); return new ConfigListBuilder<>(valueClass);
} }
public static <K, V> @NotNull ConfigMapBuilder<LinkedHashMap<K, V>, K, V> asMap(@NotNull Class<K> keyClass, public <K, V> @NotNull ConfigMapBuilder<LinkedHashMap<K, V>, K, V> asMap(@NotNull Class<K> keyClass,
@NotNull Class<V> valueClass) { @NotNull Class<V> valueClass) {
return new ConfigMapBuilder<>(LinkedHashMap::new, keyClass, valueClass); return new ConfigMapBuilder<>(LinkedHashMap::new, keyClass, valueClass);
} }
public static <K, V> @NotNull ConfigMapBuilder<HashMap<K, V>, K, V> asHashMap(@NotNull Class<K> keyClass, public <K, V> @NotNull ConfigMapBuilder<HashMap<K, V>, K, V> asHashMap(@NotNull Class<K> keyClass,
@NotNull Class<V> valueClass) { @NotNull Class<V> valueClass) {
return asMap(keyClass, valueClass).supplier(HashMap::new); return asMap(keyClass, valueClass).supplier(HashMap::new);
} }
public static <K, V> @NotNull ConfigMapBuilder<LinkedHashMap<K, V>, K, V> asLinkedMap(@NotNull Class<K> keyClass, public <K, V> @NotNull ConfigMapBuilder<LinkedHashMap<K, V>, K, V> asLinkedMap(@NotNull Class<K> keyClass,
@NotNull Class<V> valueClass) { @NotNull Class<V> valueClass) {
return asMap(keyClass, valueClass); return asMap(keyClass, valueClass);
} }
public static <K extends Comparable<K>, V> @NotNull ConfigMapBuilder<TreeMap<K, V>, K, V> asTreeMap(@NotNull Class<K> keyClass, public <K extends Comparable<K>, V> @NotNull ConfigMapBuilder<TreeMap<K, V>, K, V> asTreeMap(@NotNull Class<K> keyClass,
@NotNull Class<V> valueClass) { @NotNull Class<V> valueClass) {
return asMap(keyClass, valueClass).supplier(TreeMap::new); return asMap(keyClass, valueClass).supplier(TreeMap::new);
} }
@@ -1,7 +1,6 @@
package cc.carm.lib.configuration.core.value; package cc.carm.lib.configuration.core.value;
import cc.carm.lib.configuration.core.builder.ConfigBuilder; import cc.carm.lib.configuration.core.builder.ConfigBuilder;
import cc.carm.lib.configuration.core.builder.value.ConfigValueBuilder;
import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.configuration.core.source.ConfigurationProvider;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper; import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -12,12 +11,8 @@ import java.util.Optional;
public abstract class ConfigValue<T> { public abstract class ConfigValue<T> {
public static <V> ConfigValueBuilder<V> builder(Class<V> valueClass) { public static @NotNull ConfigBuilder builder() {
return ConfigBuilder.asValue(valueClass); return new ConfigBuilder();
}
public static <V> ConfigValue<V> of(Class<V> valueClass) {
return builder(valueClass).fromObject().build();
} }
protected @Nullable T defaultValue; protected @Nullable T defaultValue;
@@ -1,8 +1,11 @@
package cc.carm.lib.configuration.core.value.type; package cc.carm.lib.configuration.core.value.type;
import cc.carm.lib.configuration.core.builder.ConfigBuilder;
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.source.ConfigurationProvider; import cc.carm.lib.configuration.core.source.ConfigurationProvider;
import cc.carm.lib.configuration.core.value.CachedConfigValue; import cc.carm.lib.configuration.core.value.CachedConfigValue;
import cc.carm.lib.configuration.core.value.ConfigValue;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -11,6 +14,10 @@ import java.util.List;
public class ConfiguredList<V> extends CachedConfigValue<List<V>> { public class ConfiguredList<V> extends CachedConfigValue<List<V>> {
public static <V> @NotNull ConfigListBuilder<V> builder(@NotNull Class<V> valueClass) {
return builder().asList(valueClass);
}
protected final @NotNull Class<V> valueClass; protected final @NotNull Class<V> valueClass;
protected final @NotNull ConfigDataFunction<Object, V> parser; protected final @NotNull ConfigDataFunction<Object, V> parser;
@@ -18,7 +18,7 @@ public class ConfiguredMap<K, V> extends CachedConfigValue<Map<K, V>> {
public static <K, V> @NotNull ConfigMapBuilder<LinkedHashMap<K, V>, K, V> builder(@NotNull Class<K> keyClass, public static <K, V> @NotNull ConfigMapBuilder<LinkedHashMap<K, V>, K, V> builder(@NotNull Class<K> keyClass,
@NotNull Class<V> valueClass) { @NotNull Class<V> valueClass) {
return ConfigBuilder.asMap(keyClass, valueClass); return builder().asMap(keyClass, valueClass);
} }
protected final @NotNull Supplier<? extends Map<K, V>> supplier; protected final @NotNull Supplier<? extends Map<K, V>> supplier;
@@ -1,5 +1,7 @@
package cc.carm.lib.configuration.core.value.type; package cc.carm.lib.configuration.core.value.type;
import cc.carm.lib.configuration.core.builder.ConfigBuilder;
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.ConfigurationProvider; import cc.carm.lib.configuration.core.source.ConfigurationProvider;
@@ -13,6 +15,10 @@ import java.util.Optional;
public class ConfiguredSection<V> extends CachedConfigValue<V> { public class ConfiguredSection<V> extends CachedConfigValue<V> {
public static <V> @NotNull SectionValueBuilder<V> builder(@NotNull Class<V> valueClass) {
return builder().asValue(valueClass).fromSection();
}
protected final @NotNull Class<V> valueClass; protected final @NotNull Class<V> valueClass;
protected final @NotNull ConfigValueParser<ConfigurationWrapper, V> parser; protected final @NotNull ConfigValueParser<ConfigurationWrapper, V> parser;
@@ -1,5 +1,7 @@
package cc.carm.lib.configuration.core.value.type; package cc.carm.lib.configuration.core.value.type;
import cc.carm.lib.configuration.core.builder.ConfigBuilder;
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.source.ConfigurationProvider; import cc.carm.lib.configuration.core.source.ConfigurationProvider;
@@ -11,6 +13,18 @@ import java.util.Optional;
public class ConfiguredValue<V> extends CachedConfigValue<V> { public class ConfiguredValue<V> extends CachedConfigValue<V> {
public static <V> ConfigValueBuilder<V> builder(Class<V> valueClass) {
return builder().asValue(valueClass);
}
public static <V> ConfiguredValue<V> of(Class<V> valueClass) {
return of(valueClass, null);
}
public static <V> ConfiguredValue<V> of(Class<V> valueClass, @Nullable V defaultValue) {
return builder(valueClass).fromObject().defaults(defaultValue).build();
}
protected final @NotNull Class<V> valueClass; protected final @NotNull Class<V> valueClass;
protected final @NotNull ConfigValueParser<Object, V> parser; protected final @NotNull ConfigValueParser<Object, V> parser;
+1 -1
View File
@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>easyconfiguration-parent</artifactId> <artifactId>easyconfiguration-parent</artifactId>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<version>1.0.1</version> <version>1.0.2</version>
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
@@ -3,9 +3,12 @@ package config.source;
import cc.carm.lib.configuration.core.ConfigurationRoot; import cc.carm.lib.configuration.core.ConfigurationRoot;
import cc.carm.lib.configuration.core.annotation.ConfigComment; import cc.carm.lib.configuration.core.annotation.ConfigComment;
import cc.carm.lib.configuration.core.annotation.ConfigPath; import cc.carm.lib.configuration.core.annotation.ConfigPath;
import cc.carm.lib.configuration.core.builder.ConfigBuilder;
import cc.carm.lib.configuration.core.util.MapFactory; import cc.carm.lib.configuration.core.util.MapFactory;
import cc.carm.lib.configuration.core.value.ConfigValue; 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 config.misc.TestUser; import config.misc.TestUser;
import java.util.List; import java.util.List;
@@ -16,8 +19,8 @@ import java.util.UUID;
public class TestConfiguration extends ConfigurationRoot { public class TestConfiguration extends ConfigurationRoot {
@ConfigComment({"User测试"}) @ConfigComment({"User测试"})
public static final ConfigValue<TestUser> USER = ConfigBuilder public static final ConfigValue<TestUser> USER = ConfiguredSection
.asValue(TestUser.class).fromSection() .builder(TestUser.class)
.defaults(new TestUser("Carm", UUID.randomUUID())) .defaults(new TestUser("Carm", UUID.randomUUID()))
.parseValue((section, defaultValue) -> new TestUser( .parseValue((section, defaultValue) -> new TestUser(
section.getString("name"), section.getString("name"),
@@ -29,8 +32,8 @@ public class TestConfiguration extends ConfigurationRoot {
).build(); ).build();
@ConfigComment({"[ID-UUID] 对照表", "", "用于测试Map类型的解析与序列化保存"}) @ConfigComment({"[ID-UUID] 对照表", "", "用于测试Map类型的解析与序列化保存"})
public static final ConfigValue<Map<Integer, UUID>> USERS = ConfigBuilder public static final ConfigValue<Map<Integer, UUID>> USERS = ConfiguredMap
.asMap(Integer.class, UUID.class).fromString() .builder(Integer.class, UUID.class).fromString()
.parseKey(Integer::parseInt) .parseKey(Integer::parseInt)
.parseValue(v -> Objects.requireNonNull(UUID.fromString(v))) .parseValue(v -> Objects.requireNonNull(UUID.fromString(v)))
.build(); .build();
@@ -38,16 +41,18 @@ public class TestConfiguration extends ConfigurationRoot {
public static class Sub { public static class Sub {
@ConfigPath("uuid") @ConfigPath("uuid")
public static final ConfigValue<UUID> UUID_CONFIG_VALUE = ConfigBuilder public static final ConfigValue<UUID> UUID_CONFIG_VALUE = ConfiguredValue
.asValue(UUID.class).fromString() .builder(UUID.class).fromString()
.parseValue((data, defaultValue) -> UUID.fromString(data)) .parseValue((data, defaultValue) -> UUID.fromString(data))
.build(); .build();
@ConfigPath("nothing") @ConfigPath("nothing")
public static class That { public static class That {
public static final ConfigValue<List<UUID>> Operators = ConfigBuilder.asList(UUID.class).fromString() public static final ConfigValue<List<UUID>> Operators = ConfiguredList
.parseValue(s -> Objects.requireNonNull(UUID.fromString(s))).build(); .builder(UUID.class).fromString()
.parseValue(s -> Objects.requireNonNull(UUID.fromString(s)))
.build();
} }
+1 -1
View File
@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>easyconfiguration-parent</artifactId> <artifactId>easyconfiguration-parent</artifactId>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<version>1.0.1</version> <version>1.0.2</version>
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>easyconfiguration-parent</artifactId> <artifactId>easyconfiguration-parent</artifactId>
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<version>1.0.1</version> <version>1.0.2</version>
<relativePath>../../pom.xml</relativePath> <relativePath>../../pom.xml</relativePath>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -15,7 +15,7 @@
<groupId>cc.carm.lib</groupId> <groupId>cc.carm.lib</groupId>
<artifactId>easyconfiguration-parent</artifactId> <artifactId>easyconfiguration-parent</artifactId>
<packaging>pom</packaging> <packaging>pom</packaging>
<version>1.0.1</version> <version>1.0.2</version>
<modules> <modules>
<module>core</module> <module>core</module>