From 594e9b40726b90f5249496aa17f5355b2d810b60 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Mon, 24 Sep 2018 19:38:39 +0300 Subject: [PATCH] [Debt] Removed FileUtil.getStringFromResource Because of PlanPlugin dependency this code needed to be moved elsewhere. New method to use is FileSystem#readCustomizableResourceFlat --- .../plan/system/file/FileSystem.java | 40 ++++++++++++++++--- .../webserver/response/FileResponse.java | 7 +++- .../response/errors/ErrorResponse.java | 5 ++- .../plan/utilities/file/FileUtil.java | 13 +----- .../utilities/html/pages/AnalysisPage.java | 12 ++++-- .../utilities/html/pages/InspectPage.java | 7 +++- .../utilities/html/pages/NetworkPage.java | 9 +++-- .../utilities/html/pages/PageFactory.java | 14 +++++-- .../utilities/html/pages/PlayersPage.java | 7 +++- 9 files changed, 79 insertions(+), 35 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java index 1a7b70bb0..2066e1cdb 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/file/FileSystem.java @@ -39,10 +39,6 @@ public class FileSystem implements SubSystem { this.configFile = getFileFromPluginFolder("config.yml"); } - public List readFromResource(String fileName) throws IOException { - return FileUtil.lines(plugin, fileName); - } - public File getDataFolder() { return dataFolder; } @@ -88,8 +84,42 @@ public class FileSystem implements SubSystem { // No disable actions necessary. } + /** + * Read a file from jar as lines. + * + * @param fileName Name of the file. + * @return lines of the file + * @throws IOException If the resource can not be read. + */ + public List readFromResource(String fileName) throws IOException { + return FileUtil.lines(plugin, fileName); + } + + /** + * Read a file from jar as a flat String. + * + * @param fileName Name of the file + * @return Flattened lines with {@code \r\n} line separators. + * @throws IOException If the resource can not be read. + */ public String readFromResourceFlat(String fileName) throws IOException { - List lines = readFromResource(fileName); + return flatten(readFromResource(fileName)); + } + + /** + * Read a file from jar or /plugins/Plan/ folder. + * + * @param fileName Name of the file + * @return Flattened lines with {@code \r\n} line separators. + * @throws IOException If the resource can not be read. + */ + public String readCustomizableResourceFlat(String fileName) throws IOException { + return flatten(FileUtil.lines( + plugin, new File(plugin.getDataFolder(), fileName.replace("/", File.separator)), fileName + )); + } + + private String flatten(List lines) { StringBuilder flat = new StringBuilder(); for (String line : lines) { flat.append(line).append("\r\n"); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/FileResponse.java b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/FileResponse.java index ca749b87e..c39cdb3c1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/FileResponse.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/FileResponse.java @@ -4,8 +4,8 @@ */ package com.djrapitops.plan.system.webserver.response; +import com.djrapitops.plan.system.file.FileSystem; import com.djrapitops.plan.system.webserver.response.errors.NotFoundResponse; -import com.djrapitops.plan.utilities.file.FileUtil; import com.djrapitops.plugin.utilities.Verify; import java.io.IOException; @@ -20,10 +20,13 @@ import java.io.IOException; */ public class FileResponse extends Response { + // TODO + private FileSystem fileSystem; + public FileResponse(String fileName) { super.setHeader("HTTP/1.1 200 OK"); try { - super.setContent(FileUtil.getStringFromResource(fileName)); + super.setContent(fileSystem.readCustomizableResourceFlat(fileName)); } catch (IOException e) { super.setContent(new NotFoundResponse(fileName + " was not found inside the .jar or /plugins/Plan/ folder").getContent()); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/errors/ErrorResponse.java b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/errors/ErrorResponse.java index a4520c874..cba2c0606 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/errors/ErrorResponse.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/errors/ErrorResponse.java @@ -4,8 +4,8 @@ */ package com.djrapitops.plan.system.webserver.response.errors; +import com.djrapitops.plan.system.file.FileSystem; import com.djrapitops.plan.system.webserver.response.Response; -import com.djrapitops.plan.utilities.file.FileUtil; import com.djrapitops.plugin.logging.L; import com.djrapitops.plugin.logging.error.ErrorHandler; import org.apache.commons.text.StringSubstitutor; @@ -26,11 +26,12 @@ public class ErrorResponse extends Response { // TODO private String version; + private FileSystem fileSystem; private ErrorHandler errorHandler; public ErrorResponse() { try { - setContent(FileUtil.getStringFromResource("web/error.html")); + setContent(fileSystem.readCustomizableResourceFlat("web/error.html")); } catch (IOException e) { errorHandler.log(L.WARN, this.getClass(), e); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/file/FileUtil.java b/Plan/src/main/java/com/djrapitops/plan/utilities/file/FileUtil.java index 81bf68949..3d6cd366e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/file/FileUtil.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/file/FileUtil.java @@ -3,7 +3,6 @@ package com.djrapitops.plan.utilities.file; import com.djrapitops.plan.PlanPlugin; import com.djrapitops.plan.utilities.MiscUtils; import com.djrapitops.plugin.logging.L; -import com.djrapitops.plugin.utilities.Verify; import java.io.File; import java.io.FileNotFoundException; @@ -22,16 +21,6 @@ public class FileUtil { throw new IllegalStateException("Utility class"); } - @Deprecated - public static String getStringFromResource(String fileName) throws IOException { - StringBuilder html = new StringBuilder(); - PlanPlugin plugin = PlanPlugin.getInstance(); - - lines(PlanPlugin.getInstance(), new File(plugin.getDataFolder(), fileName.replace("/", File.separator)), fileName) - .forEach(line -> html.append(line).append("\r\n")); - return html.toString(); - } - public static List lines(PlanPlugin plugin, File savedFile, String defaults) throws IOException { if (savedFile.exists()) { return lines(savedFile); @@ -97,7 +86,7 @@ public class FileUtil { public static List lines(File file, Charset charset) throws IOException { List lines = new ArrayList<>(); - if (Verify.exists(file)) { + if (file != null && file.exists()) { try (Stream linesStream = Files.lines(file.toPath(), charset)) { lines = linesStream.collect(Collectors.toList()); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/AnalysisPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/AnalysisPage.java index 98ce0fedc..f2f9c347e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/AnalysisPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/AnalysisPage.java @@ -6,8 +6,8 @@ package com.djrapitops.plan.utilities.html.pages; import com.djrapitops.plan.api.exceptions.ParseException; import com.djrapitops.plan.data.store.containers.AnalysisContainer; +import com.djrapitops.plan.system.file.FileSystem; import com.djrapitops.plan.system.webserver.response.errors.ErrorResponse; -import com.djrapitops.plan.utilities.file.FileUtil; import com.djrapitops.plan.utilities.formatting.Formatter; import com.djrapitops.plan.utilities.formatting.PlaceholderReplacer; import com.djrapitops.plugin.api.Benchmark; @@ -28,10 +28,16 @@ public class AnalysisPage implements Page { private final AnalysisContainer analysisContainer; + private final FileSystem fileSystem; private final Formatter decimalFormatter; - AnalysisPage(AnalysisContainer analysisContainer, Formatter decimalFormatter) { + AnalysisPage( + AnalysisContainer analysisContainer, + FileSystem fileSystem, + Formatter decimalFormatter + ) { this.analysisContainer = analysisContainer; + this.fileSystem = fileSystem; this.decimalFormatter = decimalFormatter; } @@ -67,7 +73,7 @@ public class AnalysisPage implements Page { performanceNumbers(placeholderReplacer); try { - return placeholderReplacer.apply(FileUtil.getStringFromResource("web/server.html")); + return placeholderReplacer.apply(fileSystem.readCustomizableResourceFlat("web/server.html")); } catch (IOException e) { throw new ParseException(e); } finally { diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java index 9441d4433..71117a964 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/InspectPage.java @@ -12,13 +12,13 @@ import com.djrapitops.plan.data.store.keys.PlayerKeys; import com.djrapitops.plan.data.store.mutators.*; import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.system.cache.SessionCache; +import com.djrapitops.plan.system.file.FileSystem; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.system.settings.config.PlanConfig; import com.djrapitops.plan.system.settings.theme.Theme; import com.djrapitops.plan.system.settings.theme.ThemeVal; import com.djrapitops.plan.utilities.comparators.SessionStartComparator; -import com.djrapitops.plan.utilities.file.FileUtil; import com.djrapitops.plan.utilities.formatting.Formatter; import com.djrapitops.plan.utilities.formatting.Formatters; import com.djrapitops.plan.utilities.formatting.PlaceholderReplacer; @@ -48,6 +48,7 @@ public class InspectPage implements Page { private final String version; + private final FileSystem fileSystem; private final PlanConfig config; private final Theme theme; private final Graphs graphs; @@ -64,6 +65,7 @@ public class InspectPage implements Page { InspectPage( PlayerContainer player, Map serverNames, String version, + FileSystem fileSystem, PlanConfig config, Theme theme, Graphs graphs, @@ -76,6 +78,7 @@ public class InspectPage implements Page { this.player = player; this.serverNames = serverNames; this.version = version; + this.fileSystem = fileSystem; this.config = config; this.theme = theme; this.graphs = graphs; @@ -228,7 +231,7 @@ public class InspectPage implements Page { : serverName ); - return replacer.apply(FileUtil.getStringFromResource("web/player.html")); + return replacer.apply(fileSystem.readCustomizableResourceFlat("web/player.html")); } private void sessionsAndPlaytime(PlaceholderReplacer replacer, SessionsMutator sessionsMutator, SessionsMutator daySessionsMutator, SessionsMutator weekSessionsMutator, SessionsMutator monthSessionsMutator) { diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java index 1354e7b9b..ff86b07bd 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java @@ -7,12 +7,12 @@ package com.djrapitops.plan.utilities.html.pages; import com.djrapitops.plan.api.exceptions.ParseException; import com.djrapitops.plan.data.store.containers.NetworkContainer; import com.djrapitops.plan.data.store.keys.NetworkKeys; -import com.djrapitops.plan.utilities.formatting.PlaceholderReplacer; +import com.djrapitops.plan.system.file.FileSystem; import com.djrapitops.plan.system.info.server.properties.ServerProperties; import com.djrapitops.plan.system.webserver.cache.PageId; import com.djrapitops.plan.system.webserver.cache.ResponseCache; import com.djrapitops.plan.system.webserver.response.pages.parts.NetworkPageContent; -import com.djrapitops.plan.utilities.file.FileUtil; +import com.djrapitops.plan.utilities.formatting.PlaceholderReplacer; import static com.djrapitops.plan.data.store.keys.NetworkKeys.*; @@ -25,13 +25,16 @@ public class NetworkPage implements Page { private final NetworkContainer networkContainer; + private final FileSystem fileSystem; private final ServerProperties serverProperties; public NetworkPage( NetworkContainer networkContainer, + FileSystem fileSystem, ServerProperties serverProperties ) { this.networkContainer = networkContainer; + this.fileSystem = fileSystem; this.serverProperties = serverProperties; } @@ -57,7 +60,7 @@ public class NetworkPage implements Page { ResponseCache.loadResponse(PageId.NETWORK_CONTENT.id(), NetworkPageContent::new); placeholderReplacer.put("tabContentServers", networkPageContent.getContents()); - return placeholderReplacer.apply(FileUtil.getStringFromResource("web/network.html")); + return placeholderReplacer.apply(fileSystem.readCustomizableResourceFlat("web/network.html")); } catch (Exception e) { throw new ParseException(e); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java index cc5213698..9bade7cb9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PageFactory.java @@ -5,6 +5,7 @@ import com.djrapitops.plan.data.store.containers.AnalysisContainer; import com.djrapitops.plan.data.store.containers.NetworkContainer; import com.djrapitops.plan.data.store.containers.PlayerContainer; import com.djrapitops.plan.system.database.databases.Database; +import com.djrapitops.plan.system.file.FileSystem; import com.djrapitops.plan.system.info.connection.ConnectionSystem; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.settings.config.PlanConfig; @@ -34,6 +35,7 @@ import java.util.UUID; public class PageFactory { private final String version; + private final Lazy fileSystem; private final Lazy config; private final Lazy theme; private final Lazy database; @@ -51,6 +53,7 @@ public class PageFactory { @Inject public PageFactory( @Named("currentVersion") String version, + Lazy fileSystem, Lazy config, Lazy theme, Lazy database, @@ -66,6 +69,7 @@ public class PageFactory { Lazy errorHandler ) { this.version = version; + this.fileSystem = fileSystem; this.config = config; this.theme = theme; this.database = database; @@ -90,12 +94,14 @@ public class PageFactory { } public PlayersPage playersPage() { - return new PlayersPage(version, config.get(), database.get(), serverInfo.get(), tables.get(), timings.get()); + return new PlayersPage(version, fileSystem.get(), config.get(), + database.get(), serverInfo.get(), tables.get(), + timings.get()); } public AnalysisPage analysisPage(UUID serverUUID) { AnalysisContainer analysisContainer = new AnalysisContainer(database.get().fetch().getServerContainer(serverUUID)); - return new AnalysisPage(analysisContainer, formatters.get().decimals()); + return new AnalysisPage(analysisContainer, fileSystem.get(), formatters.get().decimals()); } public InspectPage inspectPage(UUID uuid) { @@ -104,7 +110,7 @@ public class PageFactory { return new InspectPage( player, serverNames, version, - config.get(), theme.get(), + fileSystem.get(), config.get(), theme.get(), graphs.get(), tables.get(), accordions.get(), formatters.get(), serverInfo.get(), timings.get() ); @@ -116,6 +122,6 @@ public class PageFactory { public NetworkPage networkPage() { NetworkContainer networkContainer = database.get().fetch().getNetworkContainer(); // Not cached, big. - return new NetworkPage(networkContainer, serverInfo.get().getServerProperties()); + return new NetworkPage(networkContainer, fileSystem.get(), serverInfo.get().getServerProperties()); } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PlayersPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PlayersPage.java index 72656775a..91680781a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PlayersPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/PlayersPage.java @@ -3,10 +3,10 @@ package com.djrapitops.plan.utilities.html.pages; import com.djrapitops.plan.api.exceptions.ParseException; import com.djrapitops.plan.data.store.containers.PlayerContainer; import com.djrapitops.plan.system.database.databases.Database; +import com.djrapitops.plan.system.file.FileSystem; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.system.settings.config.PlanConfig; -import com.djrapitops.plan.utilities.file.FileUtil; import com.djrapitops.plan.utilities.formatting.PlaceholderReplacer; import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.api.Check; @@ -22,6 +22,7 @@ import java.util.List; public class PlayersPage implements Page { private final String version; + private final FileSystem fileSystem; private final PlanConfig config; private final Database database; private final ServerInfo serverInfo; @@ -32,6 +33,7 @@ public class PlayersPage implements Page { PlayersPage( String version, + FileSystem fileSystem, PlanConfig config, Database database, ServerInfo serverInfo, @@ -39,6 +41,7 @@ public class PlayersPage implements Page { Timings timings ) { this.version = version; + this.fileSystem = fileSystem; this.config = config; this.database = database; this.serverInfo = serverInfo; @@ -63,7 +66,7 @@ public class PlayersPage implements Page { placeholderReplacer.put("playersTable", tables.playerTableForPlayersPage(playerContainers).parseHtml()); timings.end("Pages", "Players page players table parsing"); - return placeholderReplacer.apply(FileUtil.getStringFromResource("web/players.html")); + return placeholderReplacer.apply(fileSystem.readCustomizableResourceFlat("web/players.html")); } catch (Exception e) { throw new ParseException(e); }