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

feat(json): Implement json sources

This commit is contained in:
2025-02-12 04:25:29 +08:00
parent c68d2371ee
commit 05ff61a9d9
44 changed files with 656 additions and 558 deletions
+7
View File
@@ -26,6 +26,13 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>${project.parent.groupId}</groupId>
<artifactId>easyconfiguration-feature-commentable</artifactId>
<version>${project.parent.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
@@ -1,6 +1,6 @@
package cc.carm.lib.configuration.demo;
import cc.carm.lib.configuration.source.Configuration;
import cc.carm.lib.configuration.Configuration;
import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.value.ConfigValue;
@@ -3,9 +3,9 @@ package cc.carm.lib.configuration.demo.tests;
import cc.carm.lib.configuration.demo.tests.conf.DemoConfiguration;
import cc.carm.lib.configuration.demo.tests.conf.TestConfiguration;
import cc.carm.lib.configuration.demo.tests.model.TestModel;
import cc.carm.lib.configuration.source.ConfigurationHolder;
import org.jetbrains.annotations.TestOnly;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -14,8 +14,12 @@ import java.util.stream.IntStream;
public class ConfigurationTest {
@TestOnly
public static void testDemo(ConfigurationProvider<?> provider) {
provider.initialize(DemoConfiguration.class);
public static void testDemo(ConfigurationHolder<?> holder) {
try {
holder.initializer().initialize(holder, DemoConfiguration.class);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("----------------------------------------------------");
@@ -48,21 +52,21 @@ public class ConfigurationTest {
System.out.println(DemoConfiguration.MODEL_TEST.get());
DemoConfiguration.MODEL_TEST.set(TestModel.random());
System.out.println("> Test Maps:");
DemoConfiguration.USERS.forEach((k, v) -> System.out.println(k + ": " + v));
LinkedHashMap<Integer, UUID> data = new LinkedHashMap<>();
for (int i = 1; i <= 5; i++) {
data.put(i, UUID.randomUUID());
}
DemoConfiguration.USERS.set(data);
// System.out.println("> Test Maps:");
// DemoConfiguration.USERS.forEach((k, v) -> System.out.println(k + ": " + v));
// LinkedHashMap<Integer, UUID> data = new LinkedHashMap<>();
// for (int i = 1; i <= 5; i++) {
// data.put(i, UUID.randomUUID());
// }
// DemoConfiguration.USERS.set(data);
System.out.println("----------------------------------------------------");
}
public static void testInner(ConfigurationProvider<?> provider) {
public static void testInner(ConfigurationHolder<?> provider) {
TestConfiguration TEST = new TestConfiguration();
provider.initialize(TEST, true);
provider.initialize(TEST);
System.out.println("> Test Inner value before:");
System.out.println(TEST.INNER.INNER_VALUE.getNotNull());
@@ -76,7 +80,7 @@ public class ConfigurationTest {
}
public static void save(ConfigurationProvider<?> provider) {
public static void save(ConfigurationHolder<?> provider) {
try {
provider.save();
} catch (Exception e) {
@@ -1,15 +1,13 @@
package cc.carm.lib.configuration.demo.tests.conf;
import cc.carm.lib.configuration.source.Configuration;
import cc.carm.lib.configuration.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.demo.tests.model.TestModel;
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;
import java.util.Objects;
@@ -37,22 +35,22 @@ public interface DemoConfiguration extends Configuration {
@ConfigPath("user") // 通过注解规定配置文件中的路径,若不进行注解则以变量名自动生成。
@HeaderComment({"Section类型数据测试"}) // 通过注解给配置添加注释。
@InlineComment("Section数据也支持InlineComment注释")
ConfigValue<TestModel> MODEL_TEST = ConfiguredSection.builderOf(TestModel.class)
ConfigValue<TestModel> MODEL_TEST = ConfiguredValue.builderOf(TestModel.class).fromSection()
.defaults(new TestModel("Carm", UUID.randomUUID()))
.parseValue((section, defaultValue) -> TestModel.deserialize(section))
.serializeValue(TestModel::serialize).build();
.parse((holder, section) -> TestModel.deserialize(section))
.serialize(TestModel::serialize).build();
@HeaderComment({"[ID - UUID]对照表", "", "用于测试Map类型的解析与序列化保存"})
ConfiguredMap<Integer, UUID> USERS = ConfiguredMap.builderOf(Integer.class, UUID.class)
.asLinkedMap().fromString()
.parseKey(Integer::parseInt)
.parseValue(v -> Objects.requireNonNull(UUID.fromString(v)))
.build();
// @HeaderComment({"[ID - UUID]对照表", "", "用于测试Map类型的解析与序列化保存"})
// ConfiguredMap<Integer, UUID> USERS = ConfiguredMap.builderOf(Integer.class, UUID.class)
// .asLinkedMap().fromString()
// .parseKey(Integer::parseInt)
// .parseValue(v -> Objects.requireNonNull(UUID.fromString(v)))
// .build();
/**
* 支持内部类的直接注册。
* 注意,需要使用 {@link ConfigInitializer#initialize(Class, boolean, boolean)} 方法,并设定第三个参数为 true。
* 注意,需要用 {@link cc.carm.lib.configuration.source.option.StandardOptions#LOAD_SUB_CLASSES}
*/
class Sub implements Configuration {
@@ -60,14 +58,14 @@ public interface DemoConfiguration extends Configuration {
@InlineComment("This is an inline comment")
public static final ConfigValue<UUID> UUID_CONFIG_VALUE = ConfiguredValue
.builderOf(UUID.class).fromString()
.parseValue((data, defaultValue) -> UUID.fromString(data))
.parse((holder, data) -> UUID.fromString(data))
.build();
public static class That implements Configuration {
public static final ConfiguredList<UUID> OPERATORS = ConfiguredList
.builderOf(UUID.class).fromString()
.parseValue(s -> Objects.requireNonNull(UUID.fromString(s)))
.parse(s -> Objects.requireNonNull(UUID.fromString(s)))
.build();
}
@@ -1,13 +1,12 @@
package cc.carm.lib.configuration.demo.tests.conf;
import cc.carm.lib.configuration.source.Configuration;
import cc.carm.lib.configuration.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 cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
import java.util.UUID;
@@ -15,16 +14,15 @@ public class TestConfiguration implements Configuration {
public final TestInnerConfiguration INNER = new TestInnerConfiguration();
public final ConfigValue<Double> CLASS_VALUE = ConfiguredValue.of(Double.class, 1.0D);
public final ConfigValue<Double> CLASS_VALUE = ConfiguredValue.of(1.0D);
@ConfigPath("test.user") // 通过注解规定配置文件中的路径,若不进行注解则以变量名自动生成。
@HeaderComment({"Section类型数据测试"}) // 通过注解给配置添加注释。
@InlineComment("Section数据也支持InlineComment注释")
public final ConfigValue<TestModel> TEST_MODEL = ConfiguredSection
.builderOf(TestModel.class)
public final ConfigValue<TestModel> TEST_MODEL = ConfiguredValue.builderOf(TestModel.class).fromSection()
.defaults(new TestModel("Carm", UUID.randomUUID()))
.parseValue((section, defaultValue) -> TestModel.deserialize(section))
.serializeValue(TestModel::serialize).build();
.parse((holder, section) -> TestModel.deserialize(section))
.serialize((holder, data) -> data.serialize()).build();
}
@@ -1,6 +1,6 @@
package cc.carm.lib.configuration.demo.tests.conf;
import cc.carm.lib.configuration.source.Configuration;
import cc.carm.lib.configuration.Configuration;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
@@ -8,6 +8,6 @@ import cc.carm.lib.configuration.value.standard.ConfiguredValue;
@HeaderComment("Inner Test")
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(1.0D);
}
@@ -1,5 +1,6 @@
package cc.carm.lib.configuration.demo.tests.model;
import cc.carm.lib.configuration.source.section.ConfigureSection;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
@@ -32,7 +33,7 @@ public class TestModel extends AbstractModel {
return map;
}
public static TestModel deserialize(ConfigurationWrapper<?> section) {
public static TestModel deserialize(ConfigureSection section) {
String name = section.getString("name");
if (name == null) throw new NullPointerException("name is null");
String uuidString = section.getString("info.uuid");