From 00170e6d7754ccb288d31ed3c0467496789f6c03 Mon Sep 17 00:00:00 2001 From: Carm Date: Tue, 18 Feb 2025 17:08:12 +0800 Subject: [PATCH] feat: Simplify the ConfigureSection functions to support more different usages. --- core/pom.xml | 2 +- .../source/ConfigurationHolder.java | 1 + .../source/section/ConfigureSection.java | 7 --- .../source/section/ConfigureSource.java | 52 ++++++++++++------- demo/pom.xml | 2 +- features/commentable/pom.xml | 2 +- features/file/pom.xml | 2 +- features/section/pom.xml | 2 +- .../source/section/MemorySection.java | 11 ++-- features/text/pom.xml | 2 +- features/versioned/pom.xml | 2 +- pom.xml | 2 +- providers/gson/pom.xml | 2 +- .../configuration/source/json/JSONSource.java | 2 +- providers/yaml/pom.xml | 2 +- .../configuration/source/yaml/YAMLSource.java | 10 +--- 16 files changed, 53 insertions(+), 50 deletions(-) diff --git a/core/pom.xml b/core/pom.xml index 05a3687..3d0c346 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 4.0.1 + 4.0.2 4.0.0 diff --git a/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java index 851c846..8502a90 100644 --- a/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java +++ b/core/src/main/java/cc/carm/lib/configuration/source/ConfigurationHolder.java @@ -7,6 +7,7 @@ import cc.carm.lib.configuration.source.loader.ConfigurationInitializer; import cc.carm.lib.configuration.source.meta.ConfigurationMetaHolder; import cc.carm.lib.configuration.source.meta.ConfigurationMetadata; import cc.carm.lib.configuration.source.option.ConfigurationOptionHolder; +import cc.carm.lib.configuration.source.option.StandardOptions; import cc.carm.lib.configuration.source.section.ConfigureSource; import cc.carm.lib.configuration.value.ValueManifest; import org.jetbrains.annotations.Contract; diff --git a/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSection.java b/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSection.java index bf58d38..b1de0a1 100644 --- a/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSection.java +++ b/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSection.java @@ -1,7 +1,6 @@ package cc.carm.lib.configuration.source.section; import cc.carm.lib.configuration.function.DataFunction; -import cc.carm.lib.configuration.source.option.StandardOptions; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -14,14 +13,8 @@ import java.util.stream.Stream; public interface ConfigureSection { - @NotNull ConfigureSource source(); - @Nullable ConfigureSection parent(); - default char separator() { - return source().holder().options().get(StandardOptions.PATH_SEPARATOR); - } - @NotNull @UnmodifiableView default Set getKeys(boolean deep) { diff --git a/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSource.java b/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSource.java index 1780105..6edf142 100644 --- a/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSource.java +++ b/core/src/main/java/cc/carm/lib/configuration/source/section/ConfigureSource.java @@ -1,6 +1,9 @@ package cc.carm.lib.configuration.source.section; import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.source.option.StandardOptions; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,28 +27,46 @@ public abstract class ConfigureSource< return holder; } - public void reload() throws Exception { onReload(); // 调用重写的Reload方法 this.lastUpdateMillis = System.currentTimeMillis(); } - protected abstract SELF self(); + @Contract(pure = true) + @ApiStatus.Internal + protected abstract @NotNull SELF self(); /** - * @return Original configuration object + * @return The original configuration object. */ + @Contract(pure = true) public abstract @NotNull ORIGINAL original(); /** - * @return The root {@link ConfigureSection} + * @return The root {@link ConfigureSection}, which represents the entire configuration. */ public abstract @NotNull SECTION section(); + /** + * Save the whole configuration. + * + * @throws Exception If any error occurs while saving. + */ public abstract void save() throws Exception; + /** + * Reload the configuration. + *
This used for implementation, for external usage, use {@link #reload()} + * + * @throws Exception If any error occurs while reloading. + */ + @ApiStatus.OverrideOnly protected abstract void onReload() throws Exception; + public char pathSeparator() { + return holder().options().get(StandardOptions.PATH_SEPARATOR); + } + public long getLastUpdateMillis() { return this.lastUpdateMillis; } @@ -54,14 +75,15 @@ public abstract class ConfigureSource< return getLastUpdateMillis() > parsedTime; } + /** + * Source also represents the root section, so it has no parent + * + * @return null + */ @Override + @Contract(pure = true, value = "->null") public @Nullable ConfigureSection parent() { - return null; // Source also represents the root section, so it has no parent - } - - @Override - public @NotNull ConfigureSource source() { - return self(); + return null; } @Override @@ -79,21 +101,11 @@ public abstract class ConfigureSource< return section().contains(path); } - @Override - public boolean isList(@NotNull String path) { - return section().isList(path); - } - @Override public @Nullable List getList(@NotNull String path) { return section().getList(path); } - @Override - public boolean isSection(@NotNull String path) { - return section().isSection(path); - } - @Override public @Nullable ConfigureSection getSection(@NotNull String path) { return section().getSection(path); diff --git a/demo/pom.xml b/demo/pom.xml index dc8bd5f..6fc3c85 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 4.0.1 + 4.0.2 4.0.0 diff --git a/features/commentable/pom.xml b/features/commentable/pom.xml index 4b27f03..e3d6329 100644 --- a/features/commentable/pom.xml +++ b/features/commentable/pom.xml @@ -6,7 +6,7 @@ cc.carm.lib easyconfiguration-parent - 4.0.1 + 4.0.2 ../../pom.xml diff --git a/features/file/pom.xml b/features/file/pom.xml index f5ddb79..3045891 100644 --- a/features/file/pom.xml +++ b/features/file/pom.xml @@ -6,7 +6,7 @@ cc.carm.lib easyconfiguration-parent - 4.0.1 + 4.0.2 ../../pom.xml diff --git a/features/section/pom.xml b/features/section/pom.xml index 9f183f6..1f41fab 100644 --- a/features/section/pom.xml +++ b/features/section/pom.xml @@ -6,7 +6,7 @@ cc.carm.lib easyconfiguration-parent - 4.0.1 + 4.0.2 ../../pom.xml diff --git a/features/section/src/main/java/cc/carm/lib/configuration/source/section/MemorySection.java b/features/section/src/main/java/cc/carm/lib/configuration/source/section/MemorySection.java index 231cf1a..10ba244 100644 --- a/features/section/src/main/java/cc/carm/lib/configuration/source/section/MemorySection.java +++ b/features/section/src/main/java/cc/carm/lib/configuration/source/section/MemorySection.java @@ -53,7 +53,6 @@ public class MemorySection implements ConfigureSection { return createChild(new LinkedHashMap<>()); } - @Override public @NotNull ConfigureSource source() { return this.source; } @@ -66,6 +65,10 @@ public class MemorySection implements ConfigureSection { return this.parent; } + public char pathSeparator() { + return source.pathSeparator(); + } + @Override public @NotNull Map getValues(boolean deep) { return Collections.unmodifiableMap(deep ? mapChildrenValues(this, null, true) : data()); @@ -109,7 +112,7 @@ public class MemorySection implements ConfigureSection { } private MemorySection getSectionFor(String path) { - int index = path.indexOf(separator()); + int index = path.indexOf(pathSeparator()); if (index == -1) return this; String root = path.substring(0, index); @@ -123,7 +126,7 @@ public class MemorySection implements ConfigureSection { } private String childPath(String path) { - int index = path.indexOf(separator()); + int index = path.indexOf(pathSeparator()); return (index == -1) ? path : path.substring(index + 1); } @@ -138,7 +141,7 @@ public class MemorySection implements ConfigureSection { @Nullable String parent, boolean deep) { Map output = new LinkedHashMap<>(); for (Map.Entry entry : section.data().entrySet()) { - String path = (parent == null ? "" : parent + separator()) + entry.getKey(); + String path = (parent == null ? "" : parent + pathSeparator()) + entry.getKey(); output.remove(path); output.put(path, entry.getValue()); if (deep && entry.getValue() instanceof MemorySection) { diff --git a/features/text/pom.xml b/features/text/pom.xml index d24ef54..f5d5e0e 100644 --- a/features/text/pom.xml +++ b/features/text/pom.xml @@ -6,7 +6,7 @@ cc.carm.lib easyconfiguration-parent - 4.0.1 + 4.0.2 ../../pom.xml diff --git a/features/versioned/pom.xml b/features/versioned/pom.xml index c725fcf..e9337d5 100644 --- a/features/versioned/pom.xml +++ b/features/versioned/pom.xml @@ -6,7 +6,7 @@ cc.carm.lib easyconfiguration-parent - 4.0.1 + 4.0.2 ../../pom.xml diff --git a/pom.xml b/pom.xml index 9e9bc66..4052d9a 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ cc.carm.lib easyconfiguration-parent pom - 4.0.1 + 4.0.2 core features/section diff --git a/providers/gson/pom.xml b/providers/gson/pom.xml index 0c02fa0..6dea304 100644 --- a/providers/gson/pom.xml +++ b/providers/gson/pom.xml @@ -5,7 +5,7 @@ easyconfiguration-parent cc.carm.lib - 4.0.1 + 4.0.2 ../../pom.xml 4.0.0 diff --git a/providers/gson/src/main/java/cc/carm/lib/configuration/source/json/JSONSource.java b/providers/gson/src/main/java/cc/carm/lib/configuration/source/json/JSONSource.java index faaf6cf..22e8f50 100644 --- a/providers/gson/src/main/java/cc/carm/lib/configuration/source/json/JSONSource.java +++ b/providers/gson/src/main/java/cc/carm/lib/configuration/source/json/JSONSource.java @@ -48,7 +48,7 @@ public class JSONSource extends FileConfigSource easyconfiguration-parent cc.carm.lib - 4.0.1 + 4.0.2 ../../pom.xml diff --git a/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java b/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java index 0df42c1..7b0cc09 100644 --- a/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java +++ b/providers/yaml/src/main/java/cc/carm/lib/configuration/source/yaml/YAMLSource.java @@ -4,7 +4,6 @@ import cc.carm.lib.configuration.commentable.Commentable; import cc.carm.lib.configuration.commentable.CommentableOptions; import cc.carm.lib.configuration.source.ConfigurationHolder; import cc.carm.lib.configuration.source.file.FileConfigSource; -import cc.carm.lib.configuration.source.option.StandardOptions; import cc.carm.lib.configuration.source.section.ConfigureSection; import cc.carm.lib.configuration.source.section.MemorySection; import cc.carm.lib.yamlcommentupdater.CommentedSection; @@ -56,7 +55,7 @@ public class YAMLSource } @Override - protected YAMLSource self() { + protected @NotNull YAMLSource self() { return null; } @@ -70,11 +69,6 @@ public class YAMLSource return Objects.requireNonNull(this.rootSection, "Root section is not initialized."); } - @Override - public char separator() { - return holder().options().get(StandardOptions.PATH_SEPARATOR); - } - public @NotNull LoaderOptions loaderOptions() { return holder().options().get(YAMLOptions.LOADER); } @@ -115,7 +109,7 @@ public class YAMLSource @Override public void save() throws Exception { CommentedYAMLWriter writer = new CommentedYAMLWriter( - String.valueOf(this.separator()), + String.valueOf(this.pathSeparator()), dumperOptions().getIndent(), holder.options().get(CommentableOptions.COMMENT_EMPTY_VALUE) );