From 5fc5494da99083cd512e7cdcbb3f0a15f505d0fd Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Wed, 19 Sep 2018 13:22:38 +0300 Subject: [PATCH] [Debt] Created factory for Accordion objects. SessionAccordion and ServerAccordion are now constructed with a factory. Renamed: AbstractAccordion -> Accordion, as class was not abstract. --- .../store/containers/AnalysisContainer.java | 4 +- .../utilities/html/pages/InspectPage.java | 8 +- .../utilities/html/pages/PageFactory.java | 7 +- ...{AbstractAccordion.java => Accordion.java} | 4 +- .../utilities/html/structure/Accordions.java | 109 ++++++++++++++++++ .../html/structure/ServerAccordion.java | 23 ++-- .../html/structure/SessionAccordion.java | 51 ++++---- 7 files changed, 167 insertions(+), 39 deletions(-) rename Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/{AbstractAccordion.java => Accordion.java} (95%) create mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/Accordions.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 e76724551..47ad12885 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 @@ -21,6 +21,7 @@ import com.djrapitops.plan.utilities.html.graphs.bar.BarGraph; import com.djrapitops.plan.utilities.html.graphs.line.PingGraph; import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie; import com.djrapitops.plan.utilities.html.graphs.stack.StackGraph; +import com.djrapitops.plan.utilities.html.structure.Accordions; import com.djrapitops.plan.utilities.html.structure.AnalysisPluginsTabContentCreator; import com.djrapitops.plan.utilities.html.structure.RecentLoginList; import com.djrapitops.plan.utilities.html.structure.SessionAccordion; @@ -50,6 +51,7 @@ public class AnalysisContainer extends DataContainer { private ServerProperties serverProperties; private Graphs graphs; private HtmlTables tables; + private Accordions accordions; private Formatter yearFormatter; private Formatter secondLongFormatter; @@ -260,7 +262,7 @@ public class AnalysisContainer extends DataContainer { private void addSessionSuppliers() { Key sessionAccordion = new Key<>(SessionAccordion.class, "SESSION_ACCORDION"); putSupplier(serverNames, () -> database.fetch().getServerNames()); - putSupplier(sessionAccordion, () -> SessionAccordion.forServer( + putSupplier(sessionAccordion, () -> accordions.serverSessionAccordion( getUnsafe(AnalysisKeys.SESSIONS_MUTATOR).all(), getSupplier(serverNames), () -> getUnsafe(AnalysisKeys.PLAYER_NAMES) 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 2f4cfa193..9441d4433 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 @@ -26,6 +26,7 @@ import com.djrapitops.plan.utilities.html.HtmlStructure; import com.djrapitops.plan.utilities.html.graphs.Graphs; 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.Accordions; import com.djrapitops.plan.utilities.html.structure.ServerAccordion; import com.djrapitops.plan.utilities.html.structure.SessionAccordion; import com.djrapitops.plan.utilities.html.tables.HtmlTables; @@ -51,6 +52,7 @@ public class InspectPage implements Page { private final Theme theme; private final Graphs graphs; private final HtmlTables tables; + private final Accordions accordions; private final ServerInfo serverInfo; private final Timings timings; @@ -66,6 +68,7 @@ public class InspectPage implements Page { Theme theme, Graphs graphs, HtmlTables tables, + Accordions accordions, Formatters formatters, ServerInfo serverInfo, Timings timings @@ -77,6 +80,7 @@ public class InspectPage implements Page { this.theme = theme; this.graphs = graphs; this.tables = tables; + this.accordions = accordions; this.serverInfo = serverInfo; this.timings = timings; @@ -169,13 +173,13 @@ public class InspectPage implements Page { if (config.isTrue(Settings.DISPLAY_SESSIONS_AS_TABLE)) { replacer.put("accordionSessions", tables.playerSessionTable(playerName, allSessions).parseHtml()); } else { - SessionAccordion sessionAccordion = SessionAccordion.forPlayer(allSessions, () -> serverNames); + SessionAccordion sessionAccordion = accordions.playerSessionAccordion(allSessions, () -> serverNames); replacer.put("accordionSessions", sessionAccordion.toHtml()); sessionAccordionViewScript = sessionAccordion.toViewScript(); } } - ServerAccordion serverAccordion = new ServerAccordion(player, serverNames); + ServerAccordion serverAccordion = accordions.serverAccordion(player, serverNames); PlayerCalendar playerCalendar = graphs.calendar().playerCalendar(player); 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 03bfde074..cc5213698 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 @@ -12,6 +12,7 @@ import com.djrapitops.plan.system.settings.theme.Theme; import com.djrapitops.plan.system.webserver.response.pages.parts.InspectPagePluginsContent; import com.djrapitops.plan.utilities.formatting.Formatters; import com.djrapitops.plan.utilities.html.graphs.Graphs; +import com.djrapitops.plan.utilities.html.structure.Accordions; import com.djrapitops.plan.utilities.html.tables.HtmlTables; import com.djrapitops.plugin.benchmarking.Timings; import com.djrapitops.plugin.logging.debug.DebugLogger; @@ -40,6 +41,7 @@ public class PageFactory { private final Lazy connectionSystem; private final Lazy graphs; private final Lazy tables; + private final Lazy accordions; private final Lazy formatters; private final Lazy hookHandler; private final Lazy debugLogger; @@ -56,6 +58,7 @@ public class PageFactory { Lazy connectionSystem, Lazy graphs, Lazy tables, + Lazy accordions, Lazy formatters, Lazy hookHandler, Lazy debugLogger, @@ -70,6 +73,7 @@ public class PageFactory { this.connectionSystem = connectionSystem; this.graphs = graphs; this.tables = tables; + this.accordions = accordions; this.formatters = formatters; this.hookHandler = hookHandler; this.debugLogger = debugLogger; @@ -100,7 +104,8 @@ public class PageFactory { return new InspectPage( player, serverNames, version, - config.get(), theme.get(), graphs.get(), tables.get(), formatters.get(), + config.get(), theme.get(), + graphs.get(), tables.get(), accordions.get(), formatters.get(), serverInfo.get(), timings.get() ); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AbstractAccordion.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/Accordion.java similarity index 95% rename from Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AbstractAccordion.java rename to Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/Accordion.java index 6b47a005f..8bf8b5ddf 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AbstractAccordion.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/Accordion.java @@ -14,14 +14,14 @@ import java.util.List; * * @author Rsl1122 */ -public class AbstractAccordion { +public class Accordion { private final String id; private final List elements; private String emptyText = "No Data"; - public AbstractAccordion(String id) { + public Accordion(String id) { this.id = new Format(id) .removeSymbols() .removeWhitespace() diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/Accordions.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/Accordions.java new file mode 100644 index 000000000..da25624bc --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/Accordions.java @@ -0,0 +1,109 @@ +package com.djrapitops.plan.utilities.html.structure; + +import com.djrapitops.plan.data.container.Session; +import com.djrapitops.plan.data.store.containers.PlayerContainer; +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.utilities.formatting.Formatters; +import com.djrapitops.plan.utilities.html.graphs.Graphs; +import com.djrapitops.plan.utilities.html.tables.HtmlTables; + +import javax.inject.Inject; +import javax.inject.Singleton; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.function.Supplier; + +/** + * Factory class for different {@link Accordion} objects. + * + * @author Rsl1122 + */ +@Singleton +public class Accordions { + + private final PlanConfig config; + private final Theme theme; + private final Graphs graphs; + private final HtmlTables tables; + private final Formatters formatters; + + @Inject + public Accordions( + PlanConfig config, + Theme theme, + Graphs graphs, + HtmlTables tables, + Formatters formatters + ) { + this.config = config; + this.theme = theme; + this.graphs = graphs; + this.tables = tables; + this.formatters = formatters; + } + + /** + * Create a new Session accordion for a Player. + * + * @param sessions {@link Session}s of the Player. + * @param serverNamesSupplier Supplier that provides server name map. + * @return a new {@link SessionAccordion}. + */ + public SessionAccordion playerSessionAccordion( + List sessions, + Supplier> serverNamesSupplier + ) { + boolean appendWorldPercentage = config.isTrue(Settings.APPEND_WORLD_PERC); + int maxSessions = config.getNumber(Settings.MAX_SESSIONS); + return new SessionAccordion( + true, sessions, + serverNamesSupplier, HashMap::new, + appendWorldPercentage, maxSessions, + theme, graphs, tables, + formatters.year(), formatters.timeAmount() + ); + } + + /** + * Create a new Session accordion for a server. + * + * @param sessions Sessions that have occurred on a server. + * @param serverNamesSupplier Supplier for server names. + * @param playerNamesSupplier Supplier for names of players. + * @return a new {@link SessionAccordion} + */ + public SessionAccordion serverSessionAccordion( + List sessions, + Supplier> serverNamesSupplier, + Supplier> playerNamesSupplier + ) { + boolean appendWorldPercentage = config.isTrue(Settings.APPEND_WORLD_PERC); + int maxSessions = config.getNumber(Settings.MAX_SESSIONS); + return new SessionAccordion( + false, sessions, + serverNamesSupplier, playerNamesSupplier, + appendWorldPercentage, maxSessions, + theme, graphs, tables, + formatters.year(), formatters.timeAmount() + ); + } + + /** + * Create a Server breakdown accordion for a player. + * + * @param player PlayerContainer of the Player. + * @param serverNames Names of the servers. + * @return a new {@link ServerAccordion} + */ + public ServerAccordion serverAccordion(PlayerContainer player, Map serverNames) { + return new ServerAccordion( + player, serverNames, + theme, graphs, + formatters.yearLong(), formatters.timeAmount() + ); + } +} diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java index a20c9415b..49a05fc3a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/ServerAccordion.java @@ -31,21 +31,30 @@ import java.util.UUID; * * @author Rsl1122 */ -public class ServerAccordion extends AbstractAccordion { +public class ServerAccordion extends Accordion { private final StringBuilder viewScript; private final Map serverNames; private PerServerContainer perServer; - // TODO - private Theme theme; - private Graphs graphs; - private Formatter yearLongFormatter; - private Formatter timeAmountFormatter; + private final Theme theme; + private final Graphs graphs; + private final Formatter yearLongFormatter; + private final Formatter timeAmountFormatter; - public ServerAccordion(PlayerContainer container, Map serverNames) { + public ServerAccordion( + PlayerContainer container, Map serverNames, + Theme theme, + Graphs graphs, + Formatter yearLongFormatter, + Formatter timeAmountFormatter + ) { super("server_accordion"); + this.theme = theme; + this.graphs = graphs; + this.yearLongFormatter = yearLongFormatter; + this.timeAmountFormatter = timeAmountFormatter; viewScript = new StringBuilder(); 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 6235905b6..7891c2e28 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 @@ -6,8 +6,6 @@ import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.objects.DateHolder; import com.djrapitops.plan.data.time.WorldTimes; -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.DateHolderRecentComparator; @@ -27,7 +25,7 @@ import java.util.function.Supplier; * @author Rsl1122 * @see com.djrapitops.plan.data.container.Session for object */ -public class SessionAccordion extends AbstractAccordion { +public class SessionAccordion extends Accordion { private final boolean forPlayer; private final List sessions; @@ -36,42 +34,43 @@ public class SessionAccordion extends AbstractAccordion { private final StringBuilder viewScript; private final boolean appendWorldPercentage; - private int maxSessions; + private final int maxSessions; - // TODO - private PlanConfig config; - private Theme theme; - private Graphs graphs; - private HtmlTables tables; - private Formatter yearFormatter; - private Formatter timeAmountFormatter; + private final Theme theme; + private final Graphs graphs; + private final HtmlTables tables; + private final Formatter yearFormatter; + private final Formatter timeAmountFormatter; - private SessionAccordion(boolean forPlayer, List sessions, - Supplier> serverNamesSupplier, - Supplier> playerNamesSupplier) { + SessionAccordion(boolean forPlayer, List sessions, + Supplier> serverNamesSupplier, + Supplier> playerNamesSupplier, + boolean appendWorldPercentage, + int maxSessions, + Theme theme, + Graphs graphs, + HtmlTables tables, + Formatter yearFormatter, + Formatter timeAmountFormatter + ) { super("session_accordion"); this.forPlayer = forPlayer; this.sessions = sessions; this.serverNamesSupplier = serverNamesSupplier; this.playerNamesSupplier = playerNamesSupplier; + this.appendWorldPercentage = appendWorldPercentage; + this.maxSessions = maxSessions; + this.theme = theme; + this.graphs = graphs; + this.tables = tables; + this.yearFormatter = yearFormatter; + this.timeAmountFormatter = timeAmountFormatter; viewScript = new StringBuilder(); - maxSessions = config.getNumber(Settings.MAX_SESSIONS); - appendWorldPercentage = config.isTrue(Settings.APPEND_WORLD_PERC); - addElements(); } - public static SessionAccordion forServer(List sessions, Supplier> serverNamesSupplier, - Supplier> playerNamesSupplier) { - return new SessionAccordion(false, sessions, serverNamesSupplier, playerNamesSupplier); - } - - public static SessionAccordion forPlayer(List sessions, Supplier> serverNamesSupplier) { - return new SessionAccordion(true, sessions, serverNamesSupplier, HashMap::new); - } - public String toViewScript() { return viewScript.toString(); }