From ce184a16bf48734d102ed0e9a0201da109998c4c Mon Sep 17 00:00:00 2001 From: rozhur Date: Fri, 11 Aug 2023 19:33:20 +0500 Subject: [PATCH] Package refactoring --- .../zhdev/{ => varioutil}/BukkitPlugin.java | 22 ++- .../org/zhdev/{ => varioutil}/Version.java | 2 +- .../{ => varioutil}/language/Language.java | 8 +- .../reflection/FieldSearcher.java | 4 +- .../reflection/MethodSearcher.java | 4 +- .../{ => varioutil}/util/ArrayUtils.java | 14 +- .../{ => varioutil}/util/CollectionUtils.java | 14 +- .../{ => varioutil}/util/DateTimeUtils.java | 2 +- .../zhdev/{ => varioutil}/util/EnumUtils.java | 2 +- .../{ => varioutil}/util/ReflectionUtils.java | 6 +- .../{ => varioutil}/util/ResourceUtils.java | 25 +-- .../{ => varioutil}/util/StringUtils.java | 164 +++++++++++++++++- .../{ => varioutil}/util/CheckedFunction.java | 2 +- .../config/ConfigException.java | 2 +- .../{ => varioutil}/config/ConfigSection.java | 2 +- .../config/ConfigSectionNode.java | 4 +- .../config/MapConfigSection.java | 2 +- .../{ => varioutil}/config/YamlConfig.java | 147 ++++------------ .../config/YamlConfigConstructor.java | 4 +- .../config/YamlConfigRepresenter.java | 4 +- .../{ => varioutil}/util/ColorUtils.java | 2 +- .../{ => varioutil}/util/ConfigUtils.java | 42 ++--- 22 files changed, 285 insertions(+), 193 deletions(-) rename bukkit/src/main/java/org/zhdev/{ => varioutil}/BukkitPlugin.java (73%) rename common/src/main/java/org/zhdev/{ => varioutil}/Version.java (99%) rename common/src/main/java/org/zhdev/{ => varioutil}/language/Language.java (90%) rename common/src/main/java/org/zhdev/{ => varioutil}/reflection/FieldSearcher.java (95%) rename common/src/main/java/org/zhdev/{ => varioutil}/reflection/MethodSearcher.java (96%) rename common/src/main/java/org/zhdev/{ => varioutil}/util/ArrayUtils.java (83%) rename common/src/main/java/org/zhdev/{ => varioutil}/util/CollectionUtils.java (85%) rename common/src/main/java/org/zhdev/{ => varioutil}/util/DateTimeUtils.java (99%) rename common/src/main/java/org/zhdev/{ => varioutil}/util/EnumUtils.java (98%) rename common/src/main/java/org/zhdev/{ => varioutil}/util/ReflectionUtils.java (98%) rename common/src/main/java/org/zhdev/{ => varioutil}/util/ResourceUtils.java (66%) rename common/src/main/java/org/zhdev/{ => varioutil}/util/StringUtils.java (67%) rename db/src/main/java/org/zhdev/{ => varioutil}/util/CheckedFunction.java (76%) rename io/src/main/java/org/zhdev/{ => varioutil}/config/ConfigException.java (90%) rename io/src/main/java/org/zhdev/{ => varioutil}/config/ConfigSection.java (99%) rename io/src/main/java/org/zhdev/{ => varioutil}/config/ConfigSectionNode.java (82%) rename io/src/main/java/org/zhdev/{ => varioutil}/config/MapConfigSection.java (99%) rename io/src/main/java/org/zhdev/{ => varioutil}/config/YamlConfig.java (61%) rename io/src/main/java/org/zhdev/{ => varioutil}/config/YamlConfigConstructor.java (78%) rename io/src/main/java/org/zhdev/{ => varioutil}/config/YamlConfigRepresenter.java (66%) rename misc/src/main/java/org/zhdev/{ => varioutil}/util/ColorUtils.java (98%) rename misc/src/main/java/org/zhdev/{ => varioutil}/util/ConfigUtils.java (60%) diff --git a/bukkit/src/main/java/org/zhdev/BukkitPlugin.java b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPlugin.java similarity index 73% rename from bukkit/src/main/java/org/zhdev/BukkitPlugin.java rename to bukkit/src/main/java/org/zhdev/varioutil/BukkitPlugin.java index e9260f2..377eafe 100644 --- a/bukkit/src/main/java/org/zhdev/BukkitPlugin.java +++ b/bukkit/src/main/java/org/zhdev/varioutil/BukkitPlugin.java @@ -1,25 +1,39 @@ -package org.zhdev; +package org.zhdev.varioutil; import org.bukkit.Bukkit; +import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.PluginCommand; import org.bukkit.command.TabCompleter; import org.bukkit.event.Listener; +import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.java.JavaPluginLoader; import org.bukkit.scheduler.BukkitTask; import org.jetbrains.annotations.NotNull; +import java.io.File; + public abstract class BukkitPlugin extends JavaPlugin { - public void registerCommand(String label, CommandExecutor executor, TabCompleter completer) { + public BukkitPlugin() { + super(); + } + + protected BukkitPlugin(@NotNull JavaPluginLoader loader, @NotNull PluginDescriptionFile description, @NotNull File dataFolder, @NotNull File file) { + super(loader, description, dataFolder, file); + } + + public Command registerCommand(CommandExecutor executor, TabCompleter completer, String label) { PluginCommand command = Bukkit.getPluginCommand(label); if (command != null) { command.setExecutor(executor); command.setTabCompleter(completer); } + return command; } - public void registerCommand(String label, CommandExecutor executor) { - registerCommand(label, executor, this); + public Command registerCommand(CommandExecutor executor, String label) { + return registerCommand(executor, executor instanceof TabCompleter ? (TabCompleter) executor : this, label); } public void registerEvents(Listener listener) { diff --git a/common/src/main/java/org/zhdev/Version.java b/common/src/main/java/org/zhdev/varioutil/Version.java similarity index 99% rename from common/src/main/java/org/zhdev/Version.java rename to common/src/main/java/org/zhdev/varioutil/Version.java index 9109268..fe36e98 100644 --- a/common/src/main/java/org/zhdev/Version.java +++ b/common/src/main/java/org/zhdev/varioutil/Version.java @@ -1,4 +1,4 @@ -package org.zhdev; +package org.zhdev.varioutil; import org.jetbrains.annotations.NotNull; diff --git a/common/src/main/java/org/zhdev/language/Language.java b/common/src/main/java/org/zhdev/varioutil/language/Language.java similarity index 90% rename from common/src/main/java/org/zhdev/language/Language.java rename to common/src/main/java/org/zhdev/varioutil/language/Language.java index 6146197..a8b6ec6 100644 --- a/common/src/main/java/org/zhdev/language/Language.java +++ b/common/src/main/java/org/zhdev/varioutil/language/Language.java @@ -1,6 +1,6 @@ -package org.zhdev.language; +package org.zhdev.varioutil.language; -import org.zhdev.util.StringUtils; +import org.zhdev.varioutil.util.StringUtils; import java.util.HashMap; import java.util.LinkedHashMap; @@ -15,7 +15,7 @@ public class Language { return sectionKey + ':' + phraseKey; } - String phrase = section.getOrDefault(phraseKey, phraseKey); + String phrase = section.get(phraseKey); if (phrase == null) { Map paramsMap = new LinkedHashMap<>(params.length / 2); Object replacement = null; @@ -23,7 +23,7 @@ public class Language { if (i % 2 == 0) { replacement = params[i]; } else { - paramsMap.put(String.valueOf(params[i]), replacement); + paramsMap.put(String.valueOf(replacement), params[i]); } } return sectionKey + ':' + phraseKey + ' ' + paramsMap; diff --git a/common/src/main/java/org/zhdev/reflection/FieldSearcher.java b/common/src/main/java/org/zhdev/varioutil/reflection/FieldSearcher.java similarity index 95% rename from common/src/main/java/org/zhdev/reflection/FieldSearcher.java rename to common/src/main/java/org/zhdev/varioutil/reflection/FieldSearcher.java index 7bd1a37..2f39cc3 100644 --- a/common/src/main/java/org/zhdev/reflection/FieldSearcher.java +++ b/common/src/main/java/org/zhdev/varioutil/reflection/FieldSearcher.java @@ -1,6 +1,6 @@ -package org.zhdev.reflection; +package org.zhdev.varioutil.reflection; -import org.zhdev.util.ReflectionUtils; +import org.zhdev.varioutil.util.ReflectionUtils; import java.lang.reflect.Field; diff --git a/common/src/main/java/org/zhdev/reflection/MethodSearcher.java b/common/src/main/java/org/zhdev/varioutil/reflection/MethodSearcher.java similarity index 96% rename from common/src/main/java/org/zhdev/reflection/MethodSearcher.java rename to common/src/main/java/org/zhdev/varioutil/reflection/MethodSearcher.java index da144a4..dc754de 100644 --- a/common/src/main/java/org/zhdev/reflection/MethodSearcher.java +++ b/common/src/main/java/org/zhdev/varioutil/reflection/MethodSearcher.java @@ -1,6 +1,6 @@ -package org.zhdev.reflection; +package org.zhdev.varioutil.reflection; -import org.zhdev.util.ReflectionUtils; +import org.zhdev.varioutil.util.ReflectionUtils; import java.lang.reflect.Method; diff --git a/common/src/main/java/org/zhdev/util/ArrayUtils.java b/common/src/main/java/org/zhdev/varioutil/util/ArrayUtils.java similarity index 83% rename from common/src/main/java/org/zhdev/util/ArrayUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/ArrayUtils.java index 09ed3d7..52ea91a 100644 --- a/common/src/main/java/org/zhdev/util/ArrayUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/ArrayUtils.java @@ -1,4 +1,4 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; import java.util.Collection; import java.util.function.Function; @@ -33,27 +33,27 @@ public class ArrayUtils { } public static Byte[] mapToByte(T[] array, IntFunction arrayConstructor) { - return map(array, arrayConstructor, NumberUtils::parseByte); + return map(array, arrayConstructor, StringUtils::parseByte); } public static Short[] mapToShort(T[] array, IntFunction arrayConstructor) { - return map(array, arrayConstructor, NumberUtils::parseShort); + return map(array, arrayConstructor, StringUtils::parseShort); } public static Integer[] mapToInteger(T[] array, IntFunction arrayConstructor) { - return map(array, arrayConstructor, NumberUtils::parseInt); + return map(array, arrayConstructor, StringUtils::parseInt); } public static Long[] mapToLong(T[] array, IntFunction arrayConstructor) { - return map(array, arrayConstructor, NumberUtils::parseLong); + return map(array, arrayConstructor, StringUtils::parseLong); } public static Float[] mapToFloat(T[] array, IntFunction arrayConstructor) { - return map(array, arrayConstructor, NumberUtils::parseFloat); + return map(array, arrayConstructor, StringUtils::parseFloat); } public static Double[] mapToDouble(T[] array, IntFunction arrayConstructor) { - return map(array, arrayConstructor, NumberUtils::parseDouble); + return map(array, arrayConstructor, StringUtils::parseDouble); } public static , T, R> C mapAndToCollection(T[] array, IntFunction collectionConstructor, Function function) { diff --git a/common/src/main/java/org/zhdev/util/CollectionUtils.java b/common/src/main/java/org/zhdev/varioutil/util/CollectionUtils.java similarity index 85% rename from common/src/main/java/org/zhdev/util/CollectionUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/CollectionUtils.java index 35b28ac..8123340 100644 --- a/common/src/main/java/org/zhdev/util/CollectionUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/CollectionUtils.java @@ -1,4 +1,4 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; import java.util.Collection; import java.util.List; @@ -34,27 +34,27 @@ public class CollectionUtils { } public static , T> C mapToByte(Collection collection, IntFunction collectionConstructor) { - return map(collection, collectionConstructor, NumberUtils::parseByte); + return map(collection, collectionConstructor, StringUtils::parseByte); } public static , T> C mapToShort(Collection collection, IntFunction collectionConstructor) { - return map(collection, collectionConstructor, NumberUtils::parseShort); + return map(collection, collectionConstructor, StringUtils::parseShort); } public static , T> C mapToInteger(Collection collection, IntFunction collectionConstructor) { - return map(collection, collectionConstructor, NumberUtils::parseInt); + return map(collection, collectionConstructor, StringUtils::parseInt); } public static , T> C mapToLong(Collection collection, IntFunction collectionConstructor) { - return map(collection, collectionConstructor, NumberUtils::parseLong); + return map(collection, collectionConstructor, StringUtils::parseLong); } public static , T> C mapToFloat(Collection collection, IntFunction collectionConstructor) { - return map(collection, collectionConstructor, NumberUtils::parseFloat); + return map(collection, collectionConstructor, StringUtils::parseFloat); } public static , T> C mapToDouble(Collection collection, IntFunction collectionConstructor) { - return map(collection, collectionConstructor, NumberUtils::parseDouble); + return map(collection, collectionConstructor, StringUtils::parseDouble); } public static R[] mapAndToArray(Collection collection, IntFunction arrayConstructor, Function function) { diff --git a/common/src/main/java/org/zhdev/util/DateTimeUtils.java b/common/src/main/java/org/zhdev/varioutil/util/DateTimeUtils.java similarity index 99% rename from common/src/main/java/org/zhdev/util/DateTimeUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/DateTimeUtils.java index 35778d8..3d1f791 100644 --- a/common/src/main/java/org/zhdev/util/DateTimeUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/DateTimeUtils.java @@ -1,4 +1,4 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; import java.time.*; import java.time.format.DateTimeFormatter; diff --git a/common/src/main/java/org/zhdev/util/EnumUtils.java b/common/src/main/java/org/zhdev/varioutil/util/EnumUtils.java similarity index 98% rename from common/src/main/java/org/zhdev/util/EnumUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/EnumUtils.java index 680a07e..a8b3b36 100644 --- a/common/src/main/java/org/zhdev/util/EnumUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/EnumUtils.java @@ -1,4 +1,4 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; public class EnumUtils { private static > T[] getValues(T eNum) { diff --git a/common/src/main/java/org/zhdev/util/ReflectionUtils.java b/common/src/main/java/org/zhdev/varioutil/util/ReflectionUtils.java similarity index 98% rename from common/src/main/java/org/zhdev/util/ReflectionUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/ReflectionUtils.java index 115139f..c44a143 100644 --- a/common/src/main/java/org/zhdev/util/ReflectionUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/ReflectionUtils.java @@ -1,7 +1,7 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; -import org.zhdev.reflection.FieldSearcher; -import org.zhdev.reflection.MethodSearcher; +import org.zhdev.varioutil.reflection.FieldSearcher; +import org.zhdev.varioutil.reflection.MethodSearcher; import java.io.File; import java.io.IOException; diff --git a/common/src/main/java/org/zhdev/util/ResourceUtils.java b/common/src/main/java/org/zhdev/varioutil/util/ResourceUtils.java similarity index 66% rename from common/src/main/java/org/zhdev/util/ResourceUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/ResourceUtils.java index f3f36a8..7fe8e21 100644 --- a/common/src/main/java/org/zhdev/util/ResourceUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/ResourceUtils.java @@ -1,9 +1,10 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; import java.io.*; import java.net.URL; import java.net.URLConnection; import java.nio.file.Files; +import java.nio.file.Path; public class ResourceUtils { public static InputStream getResource(String path, ClassLoader loader) { @@ -25,7 +26,7 @@ public class ResourceUtils { return getResource(path, ResourceUtils.class.getClassLoader()); } - public static boolean saveResource(String resourcePath, File outFile, ClassLoader loader) throws IllegalStateException { + public static boolean saveResource(String resourcePath, Path outPath, ClassLoader loader) throws IllegalStateException { if (resourcePath == null || resourcePath.equals("")) { return false; } @@ -36,14 +37,14 @@ public class ResourceUtils { return false; } - File parent = outFile.getParentFile(); - if (parent != null && !parent.exists()) { - parent.mkdirs(); - } - try { - if (!outFile.exists() || outFile.length() == 0) { - OutputStream stream = Files.newOutputStream(outFile.toPath()); + Path parent = outPath.getParent(); + if (parent != null && Files.notExists(parent)) { + Files.createDirectories(parent); + } + + if (Files.notExists(outPath) || Files.size(outPath) == 0) { + OutputStream stream = Files.newOutputStream(outPath); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { @@ -54,14 +55,14 @@ public class ResourceUtils { return true; } } catch (IOException e) { - throw new IllegalStateException("Could not save resource " + resourcePath + " to " + outFile, e); + throw new IllegalStateException("Could not save resource " + resourcePath + " to " + outPath, e); } return false; } - public static boolean saveResource(String resourcePath, File outFile) throws IllegalStateException { - return saveResource(resourcePath, outFile); + public static boolean saveResource(String resourcePath, Path outPath) throws IllegalStateException { + return saveResource(resourcePath, outPath, ResourceUtils.class.getClassLoader()); } } diff --git a/common/src/main/java/org/zhdev/util/StringUtils.java b/common/src/main/java/org/zhdev/varioutil/util/StringUtils.java similarity index 67% rename from common/src/main/java/org/zhdev/util/StringUtils.java rename to common/src/main/java/org/zhdev/varioutil/util/StringUtils.java index 082e816..a8f9764 100644 --- a/common/src/main/java/org/zhdev/util/StringUtils.java +++ b/common/src/main/java/org/zhdev/varioutil/util/StringUtils.java @@ -1,4 +1,4 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; import java.util.ArrayList; import java.util.Iterator; @@ -8,10 +8,12 @@ public class StringUtils { public static String join(int beginIndex, int lastIndex, String delimiter, String lastDelimiter, String... elements) { StringBuilder builder = new StringBuilder(); for (; beginIndex < elements.length; beginIndex++) { - if (beginIndex == lastIndex) { - builder.append(lastDelimiter); - } else { - builder.append(delimiter); + if (builder.length() > 0) { + if (beginIndex == lastIndex) { + builder.append(lastDelimiter); + } else { + builder.append(delimiter); + } } builder.append(elements[beginIndex]); } @@ -262,4 +264,156 @@ public class StringUtils { chars[0] = Character.toUpperCase(chars[0]); return new String(chars); } + + public static boolean isDigit(String input) { + for (int i = 0; i < input.length(); i++){ + if (!Character.isDigit(input.charAt(i))) { + return false; + } + } + return true; + } + + public static byte parseByte(String str, byte def) { + try { + return Byte.parseByte(str); + } catch (NumberFormatException e) { + return def; + } + } + + public static short parseShort(String str, short def) { + try { + return Short.parseShort(str); + } catch (NumberFormatException e) { + return def; + } + } + + public static int parseInt(String str, int def) { + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + return def; + } + } + + public static long parseLong(String str, long def) { + try { + return Long.parseLong(str); + } catch (NumberFormatException e) { + return def; + } + } + + public static double parseFloat(String str, float def) { + try { + return Float.parseFloat(str); + } catch (NumberFormatException e) { + return def; + } + } + + public static double parseDouble(String str, double def) { + try { + return Double.parseDouble(str); + } catch (NumberFormatException e) { + return def; + } + } + + public static Byte parseByte(Object obj, Byte def) { + try { + return Byte.parseByte(String.valueOf(obj)); + } catch (NumberFormatException e) { + return def; + } + } + + public static Byte parseByte(Object obj) { + return parseByte(obj, null); + } + + public static Short parseShort(Object obj, Short def) { + try { + return Short.parseShort(String.valueOf(obj)); + } catch (NumberFormatException e) { + return def; + } + } + + public static Short parseShort(Object obj) { + return parseShort(obj, null); + } + + public static Integer parseInt(Object obj, Integer def) { + try { + return Integer.parseInt(String.valueOf(obj)); + } catch (NumberFormatException e) { + return def; + } + } + + public static Integer parseInt(Object obj) { + return parseInt(obj, null); + } + + public static Long parseLong(Object obj, Long def) { + try { + return Long.parseLong(String.valueOf(obj)); + } catch (NumberFormatException e) { + return def; + } + } + + public static Long parseLong(Object obj) { + return parseLong(obj, null); + } + + public static Float parseFloat(Object obj, Float def) { + try { + return Float.parseFloat(String.valueOf(obj)); + } catch (NumberFormatException e) { + return def; + } + } + + public static Float parseFloat(Object obj) { + return parseFloat(obj, null); + } + + public static Double parseDouble(Object obj, Double def) { + try { + return Double.parseDouble(String.valueOf(obj)); + } catch (NumberFormatException e) { + return def; + } + } + + public static Double parseDouble(Object obj) { + return parseDouble(obj, null); + } + + public static String inflect(long value, String var1, String var2, String var3, String var4) { + if (value == 0) { + return var4; + } + + long r1; + if (value % 10 == 0 || (value / 10) % 10 == 1 || (r1 = value % 10) > 4) { + return var3; + } else if (r1 != 1) { + return var2; + } else { + return var1; + } + } + + public static String inflect(long value, String var1, String var2, String var3) { + return inflect(value, var1, var2, var3, var3); + } + + public static String inflect(long value, String var1, String var2) { + return inflect(value, var1, var2, var2); + } } diff --git a/db/src/main/java/org/zhdev/util/CheckedFunction.java b/db/src/main/java/org/zhdev/varioutil/util/CheckedFunction.java similarity index 76% rename from db/src/main/java/org/zhdev/util/CheckedFunction.java rename to db/src/main/java/org/zhdev/varioutil/util/CheckedFunction.java index b448da6..fe399a7 100755 --- a/db/src/main/java/org/zhdev/util/CheckedFunction.java +++ b/db/src/main/java/org/zhdev/varioutil/util/CheckedFunction.java @@ -1,4 +1,4 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; @FunctionalInterface public interface CheckedFunction { diff --git a/io/src/main/java/org/zhdev/config/ConfigException.java b/io/src/main/java/org/zhdev/varioutil/config/ConfigException.java similarity index 90% rename from io/src/main/java/org/zhdev/config/ConfigException.java rename to io/src/main/java/org/zhdev/varioutil/config/ConfigException.java index 8bb0e2c..58d78cf 100644 --- a/io/src/main/java/org/zhdev/config/ConfigException.java +++ b/io/src/main/java/org/zhdev/varioutil/config/ConfigException.java @@ -1,4 +1,4 @@ -package org.zhdev.config; +package org.zhdev.varioutil.config; public class ConfigException extends RuntimeException { public ConfigException() { diff --git a/io/src/main/java/org/zhdev/config/ConfigSection.java b/io/src/main/java/org/zhdev/varioutil/config/ConfigSection.java similarity index 99% rename from io/src/main/java/org/zhdev/config/ConfigSection.java rename to io/src/main/java/org/zhdev/varioutil/config/ConfigSection.java index e639c83..feb05e4 100644 --- a/io/src/main/java/org/zhdev/config/ConfigSection.java +++ b/io/src/main/java/org/zhdev/varioutil/config/ConfigSection.java @@ -1,4 +1,4 @@ -package org.zhdev.config; +package org.zhdev.varioutil.config; import java.util.List; import java.util.Map; diff --git a/io/src/main/java/org/zhdev/config/ConfigSectionNode.java b/io/src/main/java/org/zhdev/varioutil/config/ConfigSectionNode.java similarity index 82% rename from io/src/main/java/org/zhdev/config/ConfigSectionNode.java rename to io/src/main/java/org/zhdev/varioutil/config/ConfigSectionNode.java index d02dc64..b38c609 100644 --- a/io/src/main/java/org/zhdev/config/ConfigSectionNode.java +++ b/io/src/main/java/org/zhdev/varioutil/config/ConfigSectionNode.java @@ -1,6 +1,6 @@ -package org.zhdev.config; +package org.zhdev.varioutil.config; -class ConfigSectionNode { +final class ConfigSectionNode { Object value; String[] blockComments; String[] inlineComments; diff --git a/io/src/main/java/org/zhdev/config/MapConfigSection.java b/io/src/main/java/org/zhdev/varioutil/config/MapConfigSection.java similarity index 99% rename from io/src/main/java/org/zhdev/config/MapConfigSection.java rename to io/src/main/java/org/zhdev/varioutil/config/MapConfigSection.java index 0fc7668..f25c97c 100644 --- a/io/src/main/java/org/zhdev/config/MapConfigSection.java +++ b/io/src/main/java/org/zhdev/varioutil/config/MapConfigSection.java @@ -1,4 +1,4 @@ -package org.zhdev.config; +package org.zhdev.varioutil.config; import java.util.*; import java.util.function.Function; diff --git a/io/src/main/java/org/zhdev/config/YamlConfig.java b/io/src/main/java/org/zhdev/varioutil/config/YamlConfig.java similarity index 61% rename from io/src/main/java/org/zhdev/config/YamlConfig.java rename to io/src/main/java/org/zhdev/varioutil/config/YamlConfig.java index cd523ef..d89b157 100644 --- a/io/src/main/java/org/zhdev/config/YamlConfig.java +++ b/io/src/main/java/org/zhdev/varioutil/config/YamlConfig.java @@ -1,4 +1,4 @@ -package org.zhdev.config; +package org.zhdev.varioutil.config; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.LoaderOptions; @@ -8,25 +8,24 @@ import org.yaml.snakeyaml.comments.CommentType; import org.yaml.snakeyaml.nodes.*; import org.yaml.snakeyaml.parser.ParserException; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; +import java.io.Reader; +import java.io.Writer; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.Map; public class YamlConfig extends MapConfigSection implements Config { + protected static final String DEFAULT_KEY = "config.yml"; + protected static final YamlConfigConstructor CONSTRUCTOR; protected static final YamlConfigRepresenter REPRESENTER; protected static final Yaml YAML; protected final String key; - protected String[] headerComments; - protected String[] endComments; - public YamlConfig(String key) { - super(null); + super(); this.key = key; } @@ -39,26 +38,6 @@ public class YamlConfig extends MapConfigSection implements Config { return key; } - @Override - public String[] getHeaderComments() { - return headerComments; - } - - @Override - public String[] getEndComments() { - return endComments; - } - - @Override - public void setHeaderComments(String... headerComments) { - this.headerComments = headerComments; - } - - @Override - public void setEndComments(String... endComments) { - this.endComments = endComments; - } - private String[] createComments(List lines) { String[] comments = new String[lines.size()]; for (int i = 0; i < lines.size(); i++) { @@ -68,9 +47,23 @@ public class YamlConfig extends MapConfigSection implements Config { return comments; } - protected Object constructHandle(Node keyNode, Node valueNode, String key, Object value) { + private List createCommentLines(String[] comments, CommentType commentType) { + List lines = new ArrayList<>(comments.length); + for (String comment : comments) { + lines.add(new CommentLine(null, null, comment.isEmpty() ? comment : " " + comment, commentType)); + } + return lines; + } + + protected Object constructHandle(MapConfigSection section, Node keyNode, Node valueNode, String key, Object value) { if (valueNode instanceof MappingNode) { - MapConfigSection childSection = new MapConfigSection(); + MapConfigSection childSection; + ConfigSectionNode oldNode = section.map.get(key); + if (oldNode == null || !(oldNode.value instanceof MapConfigSection)) { + childSection = new MapConfigSection(); + } else { + childSection = (MapConfigSection) oldNode.value; + } nodesToSections(childSection, (MappingNode) valueNode); value = childSection; } @@ -82,10 +75,12 @@ public class YamlConfig extends MapConfigSection implements Config { for (NodeTuple tuple : node.getValue()) { Node keyNode = tuple.getKeyNode(); Node valueNode = tuple.getValueNode(); + String key = String.valueOf(CONSTRUCTOR.constructObject(keyNode)); - Object value = constructHandle(keyNode, valueNode, key, CONSTRUCTOR.constructObject(valueNode)); + Object value = constructHandle(section, keyNode, valueNode, key, CONSTRUCTOR.constructObject(valueNode)); ConfigSectionNode sectionNode = new ConfigSectionNode(value); + if (keyNode.getBlockComments() != null && keyNode.getBlockComments().size() > 0) { sectionNode.blockComments = createComments(keyNode.getBlockComments()); } @@ -103,12 +98,6 @@ public class YamlConfig extends MapConfigSection implements Config { try { MappingNode node = (MappingNode) YAML.compose(reader); if (node == null) return; - if (node.getBlockComments() != null && node.getBlockComments().size() > 0) { - headerComments = createComments(node.getBlockComments()); - } - if (node.getEndComments() != null && node.getEndComments().size() > 0) { - endComments = createComments(node.getEndComments()); - } nodesToSections(this, node); } catch (ParserException e) { throw new ConfigException(e); @@ -116,39 +105,10 @@ public class YamlConfig extends MapConfigSection implements Config { } @Override - public void load(InputStream stream) { - load(new InputStreamReader(stream, StandardCharsets.UTF_8)); - } - - @Override - public void load(File file) throws IOException, ConfigException { - load(Files.newInputStream(file.toPath())); - } - - @Override - public File load(String path) throws ConfigException { - File file = new File(path); - try { - if (file.exists()) load(file); - } catch (IOException e) { - throw new ConfigException(e); - } - return file; - } - - @Override - public File load() throws ConfigException { + public Path load() throws ConfigException { return load(key); } - private List createCommentLines(String[] comments, CommentType commentType) { - List lines = new ArrayList<>(comments.length); - for (String comment : comments) { - lines.add(new CommentLine(null, null, comment.isEmpty() ? comment : " " + comment, commentType)); - } - return lines; - } - protected Node representHandle(String key, Object value) { Node valueNode; if (value instanceof MapConfigSection) { @@ -181,60 +141,16 @@ public class YamlConfig extends MapConfigSection implements Config { @Override public void save(Writer writer) { MappingNode node = sectionsToNodes(this); - node.setBlockComments(headerComments == null ? null : createCommentLines(headerComments, CommentType.BLOCK)); - node.setEndComments(endComments == null ? null : createCommentLines(endComments, CommentType.BLOCK)); YAML.serialize(node, writer); } @Override - public void save(OutputStream stream) { - save(new OutputStreamWriter(stream, StandardCharsets.UTF_8)); - } - - @Override - public void save(File file) throws IOException { - save(Files.newOutputStream(file.toPath())); - } - - @Override - public File save(String path) throws ConfigException { - File file = new File(path); - if (!file.exists()) { - File parent = file.getParentFile(); - if (parent != null) parent.mkdirs(); - try { - file.createNewFile(); - save(file); - } catch (IOException e) { - throw new ConfigException(e); - } - } - return file; - } - - @Override - public File save() throws ConfigException { + public Path save() throws ConfigException { return save(key); } @Override - public File saveIfEmpty(String path) throws ConfigException { - File file = new File(path); - if (file.length() == 0) { - File parent = file.getParentFile(); - if (parent != null) parent.mkdirs(); - try { - file.createNewFile(); - save(file); - } catch (IOException e) { - throw new ConfigException(e); - } - } - return file; - } - - @Override - public File saveIfEmpty() throws ConfigException { + public Path saveIfEmpty() throws ConfigException { return saveIfEmpty(key); } @@ -255,4 +171,9 @@ public class YamlConfig extends MapConfigSection implements Config { YAML = new Yaml(CONSTRUCTOR = new YamlConfigConstructor(loaderOptions), representer, dumperOptions, loaderOptions); } + + @Override + public String toString() { + return key; + } } diff --git a/io/src/main/java/org/zhdev/config/YamlConfigConstructor.java b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigConstructor.java similarity index 78% rename from io/src/main/java/org/zhdev/config/YamlConfigConstructor.java rename to io/src/main/java/org/zhdev/varioutil/config/YamlConfigConstructor.java index f3eb654..7444f79 100644 --- a/io/src/main/java/org/zhdev/config/YamlConfigConstructor.java +++ b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigConstructor.java @@ -1,10 +1,10 @@ -package org.zhdev.config; +package org.zhdev.varioutil.config; import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.nodes.Node; -public class YamlConfigConstructor extends SafeConstructor { +final class YamlConfigConstructor extends SafeConstructor { public YamlConfigConstructor(LoaderOptions loaderOptions) { super(loaderOptions); } diff --git a/io/src/main/java/org/zhdev/config/YamlConfigRepresenter.java b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigRepresenter.java similarity index 66% rename from io/src/main/java/org/zhdev/config/YamlConfigRepresenter.java rename to io/src/main/java/org/zhdev/varioutil/config/YamlConfigRepresenter.java index dbbd2d2..dc563d0 100644 --- a/io/src/main/java/org/zhdev/config/YamlConfigRepresenter.java +++ b/io/src/main/java/org/zhdev/varioutil/config/YamlConfigRepresenter.java @@ -1,9 +1,9 @@ -package org.zhdev.config; +package org.zhdev.varioutil.config; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.representer.Representer; -public class YamlConfigRepresenter extends Representer { +final class YamlConfigRepresenter extends Representer { public YamlConfigRepresenter(DumperOptions options) { super(options); } diff --git a/misc/src/main/java/org/zhdev/util/ColorUtils.java b/misc/src/main/java/org/zhdev/varioutil/util/ColorUtils.java similarity index 98% rename from misc/src/main/java/org/zhdev/util/ColorUtils.java rename to misc/src/main/java/org/zhdev/varioutil/util/ColorUtils.java index e23f00b..825f6f4 100644 --- a/misc/src/main/java/org/zhdev/util/ColorUtils.java +++ b/misc/src/main/java/org/zhdev/varioutil/util/ColorUtils.java @@ -1,4 +1,4 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/misc/src/main/java/org/zhdev/util/ConfigUtils.java b/misc/src/main/java/org/zhdev/varioutil/util/ConfigUtils.java similarity index 60% rename from misc/src/main/java/org/zhdev/util/ConfigUtils.java rename to misc/src/main/java/org/zhdev/varioutil/util/ConfigUtils.java index cfaef3d..c060932 100644 --- a/misc/src/main/java/org/zhdev/util/ConfigUtils.java +++ b/misc/src/main/java/org/zhdev/varioutil/util/ConfigUtils.java @@ -1,11 +1,8 @@ -package org.zhdev.util; +package org.zhdev.varioutil.util; -import org.zhdev.config.ConfigSection; -import org.zhdev.language.Language; -import org.zhdev.sql.H2SqlConnection; -import org.zhdev.sql.MySqlConnection; -import org.zhdev.sql.SqlConnection; -import org.zhdev.sql.SqliteConnection; +import org.zhdev.varioutil.config.ConfigSection; +import org.zhdev.varioutil.language.Language; +import org.zhdev.varioutil.sql.*; import java.io.File; import java.util.ArrayList; @@ -31,34 +28,39 @@ public class ConfigUtils { addPhrases(language, config, s -> s); } - public static SqlConnection createSqlConnection(ConfigSection config, String pathPrefix) { - String type = config.getString("type", "none").toLowerCase(); - SqlConnection connection; - switch (type) { + public static ConnectionProvider createSqlConnectionProvider(ConfigSection config, String pathPrefix) { + String type = config.getString("type", "none"); + ConnectionProvider provider; + switch (type.toLowerCase()) { + case "sqlite": { + String path = config.getString("path", "storage.db"); + provider = new SqliteProvider(pathPrefix + File.separatorChar + path); + break; + } case "h2": { String path = config.getString("path", "storage.h2"); String username = config.getString("username"); String password = config.getString("password"); - connection = new H2SqlConnection(File.separatorChar + path, username, password); + provider = new H2Provider(pathPrefix + File.separatorChar + path, username, password); break; } case "mysql": { String address = config.getString("address", "127.0.0.1"); - pathPrefix = new File(pathPrefix).getAbsoluteFile().getName().replace(File.separator, "_").toLowerCase(); - String dbname = config.getString("dbname", System.getProperty("user.home") + '_' + pathPrefix); + String dbname = config.getString("dbname", System.getProperty("user.home")); String username = config.getString("username", System.getProperty("user.home")); String password = config.getString("password"); boolean ssl = config.getBoolean("ssl", false); - connection = new MySqlConnection(address, dbname, username, password, ssl); + provider = new MysqlProvider(address, dbname, username, password, ssl); break; } - case "sqlite": { - String path = config.getString("path", "database.db"); - connection = new SqliteConnection(pathPrefix + File.separatorChar + path); + case "none": { + provider = ConnectionProvider.NOT_ESTABLISHED; break; } - default: case "none": connection = SqlConnection.NOT_ESTABLISHED; + default: { + throw new SqlException("Unknown database driver: " + type); + } } - return connection; + return provider; } }