From 45f780f19414a9c8ee5f6bd3ab08a4bfeddd2476 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 27 Dec 2020 20:58:00 +0300 Subject: [PATCH] AssetsManager: add getAsString + refactoring --- gradle.properties | 2 +- src/main/java/ghast/AssetsManager.java | 120 +++++++++++++++++-------- src/main/java/ghast/GhastTools.java | 7 +- 3 files changed, 88 insertions(+), 41 deletions(-) diff --git a/gradle.properties b/gradle.properties index c050754..9259a1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ projectGroup=ghast projectName=ghast-tools -projectVersion=1.1 \ No newline at end of file +projectVersion=1.2 \ No newline at end of file diff --git a/src/main/java/ghast/AssetsManager.java b/src/main/java/ghast/AssetsManager.java index c048303..b34db95 100644 --- a/src/main/java/ghast/AssetsManager.java +++ b/src/main/java/ghast/AssetsManager.java @@ -3,13 +3,13 @@ package ghast; import lombok.experimental.UtilityClass; import org.bukkit.plugin.Plugin; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.URL; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Scanner; import static java.text.MessageFormat.format; @@ -18,25 +18,10 @@ import static java.text.MessageFormat.format; public class AssetsManager { private static final String ERROR_NOT_FOUND = "Asset \"{0}\" not found"; + private static final String ERROR_OPEN = "Error open asset \"{0}\": {1}"; - public void saveTo(String resourceName, Path targetPath) { - URL resourceUrl = getResourceUrl(resourceName); - - Path saveToPath; - if (Files.isDirectory(targetPath)) { - saveToPath = targetPath.resolve(resourceName); - } else { - saveToPath = targetPath; - } - - doSaveTo(resourceUrl, saveToPath); - } - - public void saveTo(String resourceName, File targetPath) { - saveTo(resourceName, targetPath.toPath()); - } - - public InputStream loadResource(String resourceName, String defaultResourceName, boolean saveDefault) { + //region getAsInputStream methods + public InputStream getAsInputStream(String resourceName, String defaultResourceName, boolean saveDefault) { Plugin plugin = GhastTools.getPlugin(); InputStream inputStream; @@ -59,18 +44,77 @@ public class AssetsManager { return inputStream; } - public InputStream loadResource(String resourceName, String defaultResourceName) { - return loadResource(resourceName, defaultResourceName, true); + public InputStream getAsInputStream(String resourceName, String defaultResourceName) { + return getAsInputStream(resourceName, defaultResourceName, true); } - public InputStream loadResource(String resourceName, boolean saveDefault) { - return loadResource(resourceName, resourceName, saveDefault); + public InputStream getAsInputStream(String resourceName, boolean saveDefault) { + return getAsInputStream(resourceName, resourceName, saveDefault); } - public InputStream loadResource(String resourceName) { - return loadResource(resourceName, resourceName, true); + public InputStream getAsInputStream(String resourceName) { + return getAsInputStream(resourceName, resourceName, true); + } + //endregion + + //region getAsReader methods + public Reader getAsReader(String resourceName, String defaultResourceName, boolean saveDefault) { + return new InputStreamReader(getAsInputStream(resourceName, defaultResourceName, saveDefault)); } + public Reader getAsReader(String resourceName, String defaultResourceName) { + return new InputStreamReader(getAsInputStream(resourceName, defaultResourceName, true)); + } + + public Reader getAsReader(String resourceName, boolean saveDefault) { + return new InputStreamReader(getAsInputStream(resourceName, resourceName, saveDefault)); + } + + public Reader getAsReader(String resourceName) { + return new InputStreamReader(getAsInputStream(resourceName, resourceName, true)); + } + //endregion + + //region getAsString methods + public String getAsString(String resourceName, String defaultResourceName, Charset charset, boolean saveDefault) { + try (InputStream inputStream = getAsInputStream(resourceName, defaultResourceName, saveDefault); + Scanner scanner = new Scanner(inputStream, charset.name()).useDelimiter("\\A")) { + + return scanner.next(); + } catch (IOException e) { + throw new AssetsException(format(ERROR_OPEN, resourceName, e.getMessage()), e); + } + } + + public String getAsString(String resourceName, String defaultResourceName, Charset charset) { + return getAsString(resourceName, defaultResourceName, charset, true); + } + + public String getAsString(String resourceName, String defaultResourceName, boolean saveDefault) { + return getAsString(resourceName, defaultResourceName, StandardCharsets.UTF_8, saveDefault); + } + + public String getAsString(String resourceName, String defaultResourceName) { + return getAsString(resourceName, defaultResourceName, StandardCharsets.UTF_8, true); + } + + public String getAsString(String resourceName, Charset charset, boolean saveDefault) { + return getAsString(resourceName, resourceName, charset, saveDefault); + } + + public String getAsString(String resourceName, Charset charset) { + return getAsString(resourceName, resourceName, charset, true); + } + + public String getAsString(String resourceName, boolean saveDefault) { + return getAsString(resourceName, resourceName, StandardCharsets.UTF_8, saveDefault); + } + + public String getAsString(String resourceName) { + return getAsString(resourceName, resourceName, StandardCharsets.UTF_8, true); + } + //endregion + private URL getResourceUrl(String resourceName) { URL resourceUrl = AssetsManager.class.getClassLoader().getResource(resourceName); if (resourceUrl == null) { @@ -81,13 +125,17 @@ public class AssetsManager { } private void doSaveTo(URL resourceUrl, Path saveToPath) { - try (InputStream inputStream = resourceUrl.openStream(); - OutputStream outputStream = Files.newOutputStream(saveToPath)) { + try { + Files.createDirectories(saveToPath.getParent()); - byte[] buffer = new byte[8192]; - int count; - while ((count = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, count); + try (InputStream inputStream = resourceUrl.openStream(); + OutputStream outputStream = Files.newOutputStream(saveToPath)) { + + byte[] buffer = new byte[8192]; + int count; + while ((count = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, count); + } } } catch (IOException e) { throw new AssetsException(format("Error save asset \"{0}\" to \"{1}\": {2}", @@ -99,7 +147,7 @@ public class AssetsManager { try { return Files.newInputStream(pathToResource); } catch (IOException e) { - throw new AssetsException(format("Error open asset \"{0}\": {1}", pathToResource, e.getMessage()), e); + throw new AssetsException(format(ERROR_OPEN, pathToResource, e.getMessage()), e); } } @@ -107,7 +155,7 @@ public class AssetsManager { try { return resourceUrl.openStream(); } catch (IOException e) { - throw new AssetsException(format("Error open asset \"{0}\": {1}", resourceUrl, e.getMessage()), e); + throw new AssetsException(format(ERROR_OPEN, resourceUrl, e.getMessage()), e); } } } diff --git a/src/main/java/ghast/GhastTools.java b/src/main/java/ghast/GhastTools.java index 3f3877d..39fdd11 100644 --- a/src/main/java/ghast/GhastTools.java +++ b/src/main/java/ghast/GhastTools.java @@ -5,8 +5,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; +import java.io.Reader; import java.lang.ref.WeakReference; @UtilityClass @@ -30,8 +29,8 @@ public class GhastTools { getPlugin().saveDefaultConfig(); } - try (InputStream inputStream = AssetsManager.loadResource("config.yml", saveDefault)) { - return YamlConfiguration.loadConfiguration(new InputStreamReader(inputStream)); + try (Reader reader = AssetsManager.getAsReader("config.yml", saveDefault)) { + return YamlConfiguration.loadConfiguration(reader); } catch (IOException e) { throw new RuntimeException("Error load config: " + e.getMessage(), e); }