From b4f7053936a3b5d7ba551b29e33c36ad355651da Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Tue, 18 Sep 2018 11:53:07 +0300 Subject: [PATCH] [Debt] Created HtmlTable factory for Table creation Inject HtmlTables to access the factory. Abstracted away details of TableContainer creation in the factory. Each table class is now package private, and present as TableContainers. Removed MapComparator as it became obsolete. Affected issues: none --- .../store/containers/AnalysisContainer.java | 14 +- .../utilities/comparators/MapComparator.java | 34 ---- .../utilities/html/pages/InspectPage.java | 22 ++- .../utilities/html/pages/PageFactory.java | 11 +- .../utilities/html/pages/PlayersPage.java | 10 +- .../AnalysisPluginsTabContentCreator.java | 6 +- .../html/structure/SessionAccordion.java | 10 +- .../html/tables/CommandUseTable.java | 30 ++-- .../utilities/html/tables/DeathsTable.java | 10 +- .../utilities/html/tables/GeoInfoTable.java | 11 +- .../utilities/html/tables/HtmlTables.java | 167 ++++++++++++++++++ .../utilities/html/tables/KillsTable.java | 15 +- .../utilities/html/tables/NicknameTable.java | 10 +- .../plan/utilities/html/tables/PingTable.java | 13 +- .../html/tables/PlayerSessionTable.java | 30 ++-- .../utilities/html/tables/PlayersTable.java | 25 +-- .../html/tables/PluginPlayersTable.java | 26 +-- .../html/tables/ServerSessionTable.java | 21 ++- .../html/tables/PlayersTableTest.java | 2 +- 19 files changed, 313 insertions(+), 154 deletions(-) delete mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java create mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java index 91d335442..4108fe139 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/AnalysisContainer.java @@ -27,10 +27,7 @@ import com.djrapitops.plan.utilities.html.graphs.stack.StackGraph; import com.djrapitops.plan.utilities.html.structure.AnalysisPluginsTabContentCreator; import com.djrapitops.plan.utilities.html.structure.RecentLoginList; import com.djrapitops.plan.utilities.html.structure.SessionAccordion; -import com.djrapitops.plan.utilities.html.tables.CommandUseTable; -import com.djrapitops.plan.utilities.html.tables.PingTable; -import com.djrapitops.plan.utilities.html.tables.PlayersTable; -import com.djrapitops.plan.utilities.html.tables.ServerSessionTable; +import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.api.TimeAmount; import java.util.*; @@ -55,6 +52,7 @@ public class AnalysisContainer extends DataContainer { private Database database; private ServerProperties serverProperties; private Graphs graphs; + private HtmlTables tables; private Formatter yearFormatter; private Formatter secondLongFormatter; @@ -160,10 +158,10 @@ public class AnalysisContainer extends DataContainer { ); putSupplier(AnalysisKeys.OPERATORS, () -> serverContainer.getValue(ServerKeys.OPERATORS).map(List::size).orElse(0)); putSupplier(AnalysisKeys.PLAYERS_TABLE, () -> - PlayersTable.forServerPage(getUnsafe(AnalysisKeys.PLAYERS_MUTATOR).all()).parseHtml() + tables.playerTableForServerPage(getUnsafe(AnalysisKeys.PLAYERS_MUTATOR).all()).parseHtml() ); putSupplier(AnalysisKeys.PING_TABLE, () -> - new PingTable( + tables.pingTable( getUnsafe(AnalysisKeys.PLAYERS_MUTATOR) .getPingPerCountry(serverContainer.getUnsafe(ServerKeys.SERVER_UUID)) ).parseHtml() @@ -283,7 +281,7 @@ public class AnalysisContainer extends DataContainer { serverContainer.getValue(ServerKeys.PLAYERS).orElse(new ArrayList<>()) ).toHtml() ); - putSupplier(AnalysisKeys.SESSION_TABLE, () -> new ServerSessionTable( + putSupplier(AnalysisKeys.SESSION_TABLE, () -> tables.serverSessionTable( getUnsafe(AnalysisKeys.PLAYER_NAMES), getUnsafe(AnalysisKeys.SESSIONS_MUTATOR).all()).parseHtml() ); @@ -422,7 +420,7 @@ public class AnalysisContainer extends DataContainer { } private void addCommandSuppliers() { - putSupplier(AnalysisKeys.COMMAND_USAGE_TABLE, () -> new CommandUseTable(serverContainer).parseHtml()); + putSupplier(AnalysisKeys.COMMAND_USAGE_TABLE, () -> tables.commandUseTable(serverContainer).parseHtml()); putSupplier(AnalysisKeys.COMMAND_COUNT_UNIQUE, () -> serverContainer.getValue(ServerKeys.COMMAND_USAGE).map(Map::size).orElse(0)); putSupplier(AnalysisKeys.COMMAND_COUNT, () -> CommandUseMutator.forContainer(serverContainer).commandUsageCount()); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java deleted file mode 100644 index b537e44ce..000000000 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/comparators/MapComparator.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.djrapitops.plan.utilities.comparators; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; - -/** - * @author Rsl1122 - */ -public class MapComparator { - - /** - * Constructor used to hide the public constructor - */ - private MapComparator() { - throw new IllegalStateException("Utility class"); - } - - /** - * Sorts a Map of String, Integer by the Values of the Map. - * - * @param map Map to sort - * @return List with String Array, where first value is the value and second - * is the key. - */ - public static List sortByValue(Map map) { - List sortedList = new ArrayList<>(); - map.keySet().forEach(key -> sortedList.add(new String[]{String.valueOf(map.get(key)), key})); - sortedList.sort(Comparator.comparingInt(strings -> Integer.parseInt(strings[0]))); - return sortedList; - } - -} 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 ab92f5141..7790c1fcc 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 @@ -29,7 +29,7 @@ import com.djrapitops.plan.utilities.html.graphs.calendar.PlayerCalendar; import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie; import com.djrapitops.plan.utilities.html.structure.ServerAccordion; import com.djrapitops.plan.utilities.html.structure.SessionAccordion; -import com.djrapitops.plan.utilities.html.tables.*; +import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.api.TimeAmount; import com.djrapitops.plugin.benchmarking.Timings; @@ -48,6 +48,7 @@ public class InspectPage implements Page { private final PlanConfig config; private final Graphs graphs; + private final HtmlTables tables; private final ServerInfo serverInfo; private final Timings timings; @@ -60,13 +61,16 @@ public class InspectPage implements Page { PlayerContainer player, Map serverNames, PlanConfig config, Graphs graphs, - Formatters formatters, ServerInfo serverInfo, + HtmlTables tables, + Formatters formatters, + ServerInfo serverInfo, Timings timings ) { this.player = player; this.serverNames = serverNames; this.config = config; this.graphs = graphs; + this.tables = tables; this.serverInfo = serverInfo; this.timings = timings; @@ -134,10 +138,10 @@ public class InspectPage implements Page { String favoriteServer = serverNames.getOrDefault(perServerMutator.favoriteServer(), "Unknown"); replacer.put("favoriteServer", favoriteServer); - replacer.put("tableBodyNicknames", new NicknameTable( - player.getValue(PlayerKeys.NICKNAMES).orElse(new ArrayList<>()), serverNames) - .parseBody()); - replacer.put("tableBodyIPs", new GeoInfoTable(player.getValue(PlayerKeys.GEO_INFO).orElse(new ArrayList<>())).parseBody()); + replacer.put("tableBodyNicknames", + tables.nicknameTable(player.getValue(PlayerKeys.NICKNAMES).orElse(new ArrayList<>()), serverNames).parseBody() + ); + replacer.put("tableBodyIPs", tables.geoInfoTable(player.getValue(PlayerKeys.GEO_INFO).orElse(new ArrayList<>())).parseBody()); PingMutator pingMutator = PingMutator.forContainer(player); double averagePing = pingMutator.average(); @@ -157,7 +161,7 @@ public class InspectPage implements Page { replacer.put("accordionSessions", "
" + "

No Sessions

" + "
"); } else { if (config.isTrue(Settings.DISPLAY_SESSIONS_AS_TABLE)) { - replacer.put("accordionSessions", new PlayerSessionTable(playerName, allSessions).parseHtml()); + replacer.put("accordionSessions", tables.playerSessionTable(playerName, allSessions).parseHtml()); } else { SessionAccordion sessionAccordion = SessionAccordion.forPlayer(allSessions, () -> serverNames); replacer.put("accordionSessions", sessionAccordion.toHtml()); @@ -285,8 +289,8 @@ public class InspectPage implements Page { } private void pvpAndPve(PlaceholderReplacer replacer, SessionsMutator sessionsMutator, SessionsMutator weekSessionsMutator, SessionsMutator monthSessionsMutator) { - String playerKillsTable = new KillsTable(sessionsMutator.toPlayerKillList()).parseHtml(); - String playerDeathTable = new DeathsTable(sessionsMutator.toPlayerDeathList()).parseHtml(); + String playerKillsTable = tables.killsTable(sessionsMutator.toPlayerKillList(), "red").parseHtml(); + String playerDeathTable = tables.deathsTable(sessionsMutator.toPlayerDeathList()).parseHtml(); PvpInfoMutator pvpInfoMutator = PvpInfoMutator.forMutator(sessionsMutator); PvpInfoMutator pvpInfoMutatorMonth = PvpInfoMutator.forMutator(monthSessionsMutator); 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 b58b2f0bb..d3ec854be 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 @@ -9,6 +9,7 @@ import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.settings.config.PlanConfig; import com.djrapitops.plan.utilities.formatting.Formatters; import com.djrapitops.plan.utilities.html.graphs.Graphs; +import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.benchmarking.Timings; import com.djrapitops.plugin.logging.debug.DebugLogger; import com.djrapitops.plugin.logging.error.ErrorHandler; @@ -34,6 +35,7 @@ public class PageFactory { private final Lazy serverInfo; private final Lazy connectionSystem; private final Lazy graphs; + private final Lazy tables; private final Lazy formatters; private final Lazy debugLogger; private final Lazy timings; @@ -47,6 +49,7 @@ public class PageFactory { Lazy serverInfo, Lazy connectionSystem, Lazy graphs, + Lazy tables, Lazy formatters, Lazy debugLogger, Lazy timings, @@ -58,6 +61,7 @@ public class PageFactory { this.serverInfo = serverInfo; this.connectionSystem = connectionSystem; this.graphs = graphs; + this.tables = tables; this.formatters = formatters; this.debugLogger = debugLogger; this.timings = timings; @@ -73,11 +77,12 @@ public class PageFactory { } public PlayersPage playersPage() { - return new PlayersPage(version, config.get(), database.get(), serverInfo.get(), timings.get()); + return new PlayersPage(version, config.get(), database.get(), serverInfo.get(), tables.get(), timings.get()); } public AnalysisPage analysisPage(UUID serverUUID) { - return new AnalysisPage(new AnalysisContainer(database.get().fetch().getServerContainer(serverUUID)), decimalFormatter); + AnalysisContainer analysisContainer = new AnalysisContainer(database.get().fetch().getServerContainer(serverUUID)); + return new AnalysisPage(analysisContainer, formatters.get().decimals()); } public InspectPage inspectPage(UUID uuid) { @@ -85,7 +90,7 @@ public class PageFactory { Map serverNames = database.get().fetch().getServerNames(); return new InspectPage( player, serverNames, - config.get(), graphs.get(), formatters.get(), serverInfo.get(), timings.get() + config.get(), graphs.get(), tables.get(), formatters.get(), serverInfo.get(), timings.get() ); } 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 e664fb851..72656775a 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 @@ -2,13 +2,13 @@ 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.utilities.formatting.PlaceholderReplacer; import com.djrapitops.plan.system.database.databases.Database; 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.html.tables.PlayersTable; +import com.djrapitops.plan.utilities.formatting.PlaceholderReplacer; +import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.api.Check; import com.djrapitops.plugin.benchmarking.Timings; @@ -26,6 +26,8 @@ public class PlayersPage implements Page { private final Database database; private final ServerInfo serverInfo; + private final HtmlTables tables; + private final Timings timings; PlayersPage( @@ -33,12 +35,14 @@ public class PlayersPage implements Page { PlanConfig config, Database database, ServerInfo serverInfo, + HtmlTables tables, Timings timings ) { this.version = version; this.config = config; this.database = database; this.serverInfo = serverInfo; + this.tables = tables; this.timings = timings; } @@ -56,7 +60,7 @@ public class PlayersPage implements Page { timings.start("Players page players table parsing"); List playerContainers = database.fetch().getAllPlayerContainers(); - placeholderReplacer.put("playersTable", PlayersTable.forPlayersPage(playerContainers).parseHtml()); + placeholderReplacer.put("playersTable", tables.playerTableForPlayersPage(playerContainers).parseHtml()); timings.end("Pages", "Players page players table parsing"); return placeholderReplacer.apply(FileUtil.getStringFromResource("web/players.html")); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java index c8094884a..328b16564 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java @@ -11,7 +11,7 @@ import com.djrapitops.plan.data.plugin.HookHandler; import com.djrapitops.plan.data.plugin.PluginData; import com.djrapitops.plan.data.store.mutators.PlayersMutator; import com.djrapitops.plan.utilities.comparators.PluginDataNameComparator; -import com.djrapitops.plan.utilities.html.tables.PluginPlayersTable; +import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.StaticHolder; import com.djrapitops.plugin.api.Benchmark; import com.djrapitops.plugin.api.utility.log.Log; @@ -76,13 +76,15 @@ public class AnalysisPluginsTabContentCreator { generalTab.append(""); + HtmlTables tables = null; // TODO Use HtmlTables + String playerListTab = "
" + "
" + "
" + "
" + "

Plugin Data

" + "
" + - new PluginPlayersTable(containers, mutator.all()).parseHtml() + + tables.pluginPlayersTable(containers, mutator.all()).parseHtml() + "
" + "
"; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/SessionAccordion.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/SessionAccordion.java index 1e042d137..141e61e70 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/SessionAccordion.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/SessionAccordion.java @@ -1,6 +1,7 @@ package com.djrapitops.plan.utilities.html.structure; import com.djrapitops.plan.api.PlanAPI; +import com.djrapitops.plan.data.container.PlayerKill; import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.objects.DateHolder; @@ -14,7 +15,7 @@ import com.djrapitops.plan.utilities.html.HtmlStructure; import com.djrapitops.plan.utilities.html.graphs.Graphs; import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie; import com.djrapitops.plan.utilities.html.icon.Icons; -import com.djrapitops.plan.utilities.html.tables.KillsTable; +import com.djrapitops.plan.utilities.html.tables.HtmlTables; import java.util.*; import java.util.function.Supplier; @@ -39,6 +40,7 @@ public class SessionAccordion extends AbstractAccordion { // TODO private Theme theme; private Graphs graphs; + private HtmlTables tables; private Formatter yearFormatter; private Formatter timeAmountFormatter; @@ -142,7 +144,8 @@ public class SessionAccordion extends AbstractAccordion { .append(worldHtmlID).append("gmseries") .append(");"); - String leftBottom = new KillsTable(session.getValue(SessionKeys.PLAYER_KILLS).orElse(new ArrayList<>()), null).parseHtml(); + List kills = session.getValue(SessionKeys.PLAYER_KILLS).orElse(new ArrayList<>()); + String leftBottom = tables.killsTable(kills, null).parseHtml(); String link = PlanAPI.getInstance().getPlayerInspectPageLink(playerName); String rightBottom = "