From 43b00f2b69f2fcad277787ac287b7f2ed038cc90 Mon Sep 17 00:00:00 2001 From: carm Date: Sat, 20 May 2023 09:34:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor(api):=20:robot:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=91=BD=E5=90=8D=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E9=83=A8=E5=88=86Javadoc=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/value/ValueManifest.java | 4 +- .../core/value/impl/CachedConfigValue.java | 20 +++++++--- .../core/value/type/ConfiguredList.java | 31 +++++++-------- .../core/value/type/ConfiguredMap.java | 39 +++++++++---------- .../core/value/type/ConfiguredSection.java | 28 ++++++------- .../core/value/type/ConfiguredValue.java | 28 ++++++------- .../yaml/value/ConfiguredSerializable.java | 23 ++++++----- 7 files changed, 91 insertions(+), 82 deletions(-) diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java b/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java index cb02820..f0f210c 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java @@ -1,5 +1,6 @@ package cc.carm.lib.configuration.core.value; +import cc.carm.lib.configuration.core.ConfigInitializer; import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.configuration.core.source.ConfigurationWrapper; import org.jetbrains.annotations.NotNull; @@ -13,6 +14,7 @@ import java.util.Optional; * 配置值描述清单。用于描述一个配置值的相关基础信息。 * * @param 配置值类型 + * @author CarmJos */ public class ValueManifest { @@ -53,7 +55,7 @@ public class ValueManifest { } /** - * 此方法用于 {@link cc.carm.lib.configuration.core.ConfigInitializer} 工具对配置值进行统一初始化操作。 + * 此方法提供给 {@link ConfigInitializer},以便对配置值的相关信息进行统一初始化操作。 * * @param provider 配置文件提供者 * @param configPath 配置路径 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/core/value/impl/CachedConfigValue.java index 6b973de..c5fcf0d 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/impl/CachedConfigValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/impl/CachedConfigValue.java @@ -2,6 +2,7 @@ package cc.carm.lib.configuration.core.value.impl; import cc.carm.lib.configuration.core.value.ConfigValue; import cc.carm.lib.configuration.core.value.ValueManifest; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -11,7 +12,7 @@ public abstract class CachedConfigValue extends ConfigValue { protected @Nullable T cachedValue; protected long parsedTime = -1; - public CachedConfigValue(@NotNull ValueManifest manifest) { + protected CachedConfigValue(@NotNull ValueManifest manifest) { super(manifest); } @@ -29,12 +30,19 @@ public abstract class CachedConfigValue extends ConfigValue { return this.parsedTime <= 0 || getProvider().isExpired(this.parsedTime); } - protected final T useDefault() { - return useOrDefault(null); - } - - protected final T useOrDefault(@Nullable T value) { + protected final T getDefaultFirst(@Nullable T value) { return updateCache(this.defaultValue == null ? value : this.defaultValue); } + protected @Nullable T getCachedOrDefault() { + return getCachedOrDefault(null); + } + + @Contract("!null->!null") + protected T getCachedOrDefault(@Nullable T emptyValue) { + if (getCachedValue() != null) return getCachedValue(); + else if (getDefaultValue() != null) return getDefaultValue(); + else return emptyValue; + } + } 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/core/value/type/ConfiguredList.java index 8388a89..e6df555 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredList.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredList.java @@ -42,23 +42,22 @@ public class ConfiguredList extends CachedConfigValue> implements Lis @Override public @NotNull List get() { - if (isExpired()) { // 已过时的数据,需要重新解析一次。 - List list = new ArrayList<>(); - List data = getConfiguration().contains(getConfigPath()) ? - getConfiguration().getList(getConfigPath()) : null; - if (data == null) return useOrDefault(list); - for (Object dataVal : data) { - if (dataVal == null) continue; - try { - list.add(parser.parse(dataVal)); - } catch (Exception e) { - e.printStackTrace(); - } + if (!isExpired()) return getCachedOrDefault(new ArrayList<>()); + + // 已过时的数据,需要重新解析一次。 + List list = new ArrayList<>(); + List data = getConfiguration().contains(getConfigPath()) ? + getConfiguration().getList(getConfigPath()) : null; + if (data == null) return getDefaultFirst(list); + for (Object dataVal : data) { + if (dataVal == null) continue; + try { + list.add(parser.parse(dataVal)); + } catch (Exception e) { + e.printStackTrace(); } - return updateCache(list); - } else if (getCachedValue() != null) return getCachedValue(); - else if (getDefaultValue() != null) return getDefaultValue(); - else return new ArrayList<>(); + } + return updateCache(list); } @Override 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 f25a1a1..142a9a7 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 @@ -78,31 +78,30 @@ public class ConfiguredMap extends CachedConfigValue> implements @Override public @NotNull Map get() { - if (isExpired()) { // 已过时的数据,需要重新解析一次。 - Map map = supplier.get(); + if (!isExpired()) return getCachedOrDefault(supplier.get()); - ConfigurationWrapper section = getConfiguration().getConfigurationSection(getConfigPath()); - if (section == null) return useOrDefault(map); + // 已过时的数据,需要重新解析一次。 + Map map = supplier.get(); - Set keys = section.getKeys(false); - if (keys.isEmpty()) return useOrDefault(map); + ConfigurationWrapper section = getConfiguration().getConfigurationSection(getConfigPath()); + if (section == null) 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(); - } + 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); - } else if (getCachedValue() != null) return getCachedValue(); - else if (getDefaultValue() != null) return getDefaultValue(); - else return supplier.get(); + return updateCache(map); } @Override 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/core/value/type/ConfiguredSection.java index 3f7dbdd..171dd28 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSection.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredSection.java @@ -10,7 +10,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Map; -import java.util.Optional; public class ConfiguredSection extends CachedConfigValue { @@ -46,18 +45,21 @@ public class ConfiguredSection extends CachedConfigValue { @Override public @Nullable V get() { - if (isExpired()) { // 已过时的数据,需要重新解析一次。 - ConfigurationWrapper section = getConfiguration().getConfigurationSection(getConfigPath()); - if (section == null) return useDefault(); - try { - // 若未出现错误,则直接更新缓存并返回。 - return updateCache(this.parser.parse(section, this.defaultValue)); - } catch (Exception e) { - // 出现了解析错误,提示并返回默认值。 - e.printStackTrace(); - return useDefault(); - } - } else return Optional.ofNullable(getCachedValue()).orElse(defaultValue); + if (!isExpired()) return getCachedOrDefault(); + // 已过时的数据,需要重新解析一次。 + + ConfigurationWrapper section = getConfiguration().getConfigurationSection(getConfigPath()); + if (section == null) return getDefaultValue(); + + try { + // 若未出现错误,则直接更新缓存并返回。 + return updateCache(this.parser.parse(section, this.defaultValue)); + } catch (Exception e) { + // 出现了解析错误,提示并返回默认值。 + e.printStackTrace(); + return getDefaultValue(); + } + } @Override 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/core/value/type/ConfiguredValue.java index 2eb32fc..d48095f 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/type/ConfiguredValue.java @@ -8,8 +8,6 @@ import cc.carm.lib.configuration.core.value.impl.CachedConfigValue; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Optional; - public class ConfiguredValue extends CachedConfigValue { public static ConfigValueBuilder builderOf(Class valueClass) { @@ -48,18 +46,20 @@ public class ConfiguredValue extends CachedConfigValue { @Override public V get() { - if (isExpired()) { // 已过时的数据,需要重新解析一次。 - Object value = getValue(); - if (value == null) return useDefault(); // 获取的值不存在,直接使用默认值。 - try { - // 若未出现错误,则直接更新缓存并返回。 - return updateCache(this.parser.parse(value, this.defaultValue)); - } catch (Exception e) { - // 出现了解析错误,提示并返回默认值。 - e.printStackTrace(); - return useDefault(); - } - } else return Optional.ofNullable(getCachedValue()).orElse(defaultValue); + if (!isExpired()) return getCachedOrDefault(); + // 已过时的数据,需要重新解析一次。 + + Object value = getValue(); + if (value == null) return getDefaultValue(); // 获取的值不存在,直接使用默认值。 + try { + // 若未出现错误,则直接更新缓存并返回。 + return updateCache(this.parser.parse(value, this.defaultValue)); + } catch (Exception e) { + // 出现了解析错误,提示并返回默认值。 + e.printStackTrace(); + return getDefaultValue(); + } + } @Override 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 750785b..59f5536 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 @@ -6,8 +6,6 @@ import org.bspfsystems.yamlconfiguration.serialization.ConfigurationSerializable import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Optional; - public class ConfiguredSerializable extends YAMLValue { public static ConfiguredSerializable of(@NotNull Class valueClass) { @@ -28,16 +26,17 @@ public class ConfiguredSerializable extends @Override public @Nullable T get() { - if (isExpired()) { // 已过时的数据,需要重新解析一次。 - try { - // 若未出现错误,则直接更新缓存并返回。 - return updateCache(getYAMLConfig().getSerializable(getConfigPath(), valueClass, getDefaultValue())); - } catch (Exception e) { - // 出现了解析错误,提示并返回默认值。 - e.printStackTrace(); - return useDefault(); - } - } else return Optional.ofNullable(getCachedValue()).orElse(defaultValue); + if (!isExpired()) return getCachedOrDefault(); + + try { + // 若未出现错误,则直接更新缓存并返回。 + return updateCache(getYAMLConfig().getSerializable(getConfigPath(), valueClass, getDefaultValue())); + } catch (Exception e) { + // 出现了解析错误,提示并返回默认值。 + e.printStackTrace(); + return getDefaultValue(); + } + } @Override