From 3625156b3668bd49ff406bab202e716301c87d69 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sat, 29 Sep 2018 13:32:59 +0300 Subject: [PATCH] [Debt] Moved SRP violation in Session Session#getLongestWorldPlayed was a violation of Single Responsibility Principle. The method was moved to WorldAliasSettings, although still a violation, it makes more sense there than inside the Session class. It also allows creation of Session without a WorldAliasSettings dependency. --- .../plan/data/container/Session.java | 37 +------------------ .../system/settings/WorldAliasSettings.java | 37 +++++++++++++++++++ .../utilities/html/structure/Accordions.java | 4 +- .../html/structure/SessionAccordion.java | 8 +++- .../utilities/html/tables/HtmlTables.java | 4 +- .../html/tables/PlayerSessionTable.java | 6 ++- .../html/tables/ServerSessionTable.java | 6 ++- 7 files changed, 59 insertions(+), 43 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/data/container/Session.java b/Plan/src/main/java/com/djrapitops/plan/data/container/Session.java index 857578059..ed0366c30 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/container/Session.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/container/Session.java @@ -4,8 +4,6 @@ import com.djrapitops.plan.data.store.containers.DataContainer; 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.WorldAliasSettings; -import com.djrapitops.plan.utilities.formatting.Formatter; import java.util.*; @@ -58,7 +56,7 @@ public class Session extends DataContainer implements DateHolder { getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START)); putSupplier(SessionKeys.ACTIVE_TIME, () -> getUnsafe(SessionKeys.LENGTH) - getUnsafe(SessionKeys.AFK_TIME)); - putSupplier(SessionKeys.LONGEST_WORLD_PLAYED, this::getLongestWorldPlayed); + putRawData(SessionKeys.LONGEST_WORLD_PLAYED, "Key is Deprecated, use WorldAliasSettings#getLongestWorldPlayed(Session) instead."); } /** @@ -101,7 +99,7 @@ public class Session extends DataContainer implements DateHolder { getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START)); putSupplier(SessionKeys.ACTIVE_TIME, () -> getUnsafe(SessionKeys.LENGTH) - getUnsafe(SessionKeys.AFK_TIME)); - putSupplier(SessionKeys.LONGEST_WORLD_PLAYED, this::getLongestWorldPlayed); + putRawData(SessionKeys.LONGEST_WORLD_PLAYED, "Key is Deprecated, use WorldAliasSettings#getLongestWorldPlayed(Session) instead."); } /** @@ -220,35 +218,4 @@ public class Session extends DataContainer implements DateHolder { private long getAfkTime() { return afkTime; } - - @Deprecated // TODO Move this method elsewhere - private String getLongestWorldPlayed() { - WorldAliasSettings worldAliasSettings = null; // TODO - Map aliases = worldAliasSettings.getAliases(); - if (worldTimes == null) { - return "No World Time Data"; - } - if (!supports(SessionKeys.END)) { - return "Current: " + aliases.get(worldTimes.getCurrentWorld()); - } - - Map playtimePerAlias = new HashMap<>(); //TODO Call WorldAliasSettings#getPlaytimePerAlias(WorldTimes) - long total = worldTimes.getTotal(); - - long longest = 0; - String theWorld = "-"; - for (Map.Entry entry : playtimePerAlias.entrySet()) { - String world = entry.getKey(); - long time = entry.getValue(); - if (time > longest) { - longest = time; - theWorld = world; - } - } - - double quotient = longest * 1.0 / total; - - Formatter percentageFormatter = null; // TODO - return theWorld + " (" + percentageFormatter.apply(quotient) + ")"; - } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java b/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java index 172fa0089..ca50b9891 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/settings/WorldAliasSettings.java @@ -4,10 +4,14 @@ */ package com.djrapitops.plan.system.settings; +import com.djrapitops.plan.data.container.Session; +import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.time.GMTimes; import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.system.processing.Processing; import com.djrapitops.plan.system.settings.config.PlanConfig; +import com.djrapitops.plan.utilities.formatting.Formatter; +import com.djrapitops.plan.utilities.formatting.Formatters; import com.djrapitops.plugin.config.ConfigNode; import com.djrapitops.plugin.logging.L; import com.djrapitops.plugin.logging.error.ErrorHandler; @@ -30,18 +34,22 @@ import java.util.stream.Collectors; public class WorldAliasSettings { private final Lazy config; + private final Formatter percentageFormatter; private final Processing processing; private final ErrorHandler errorHandler; @Inject public WorldAliasSettings( Lazy config, + Formatters formatters, Processing processing, ErrorHandler errorHandler ) { this.config = config; this.processing = processing; this.errorHandler = errorHandler; + + percentageFormatter = formatters.percentage(); } private ConfigNode getAliasSection() { @@ -139,4 +147,33 @@ public class WorldAliasSettings { } return gmTimesPerAlias; } + + public String getLongestWorldPlayed(Session session) { + Map aliases = getAliases(); + if (!session.supports(SessionKeys.WORLD_TIMES)) { + return "No World Time Data"; + } + WorldTimes worldTimes = session.getUnsafe(SessionKeys.WORLD_TIMES); + if (!session.supports(SessionKeys.END)) { + return "Current: " + aliases.get(worldTimes.getCurrentWorld()); + } + + Map playtimePerAlias = getPlaytimePerAlias(worldTimes); + long total = worldTimes.getTotal(); + + long longest = 0; + String theWorld = "-"; + for (Map.Entry entry : playtimePerAlias.entrySet()) { + String world = entry.getKey(); + long time = entry.getValue(); + if (time > longest) { + longest = time; + theWorld = world; + } + } + + double quotient = longest * 1.0 / total; + + return theWorld + " (" + percentageFormatter.apply(quotient) + ")"; + } } 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 index da25624bc..b6dee4358 100644 --- 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 @@ -63,7 +63,7 @@ public class Accordions { true, sessions, serverNamesSupplier, HashMap::new, appendWorldPercentage, maxSessions, - theme, graphs, tables, + config.getWorldAliasSettings(), theme, graphs, tables, formatters.year(), formatters.timeAmount() ); } @@ -87,7 +87,7 @@ public class Accordions { false, sessions, serverNamesSupplier, playerNamesSupplier, appendWorldPercentage, maxSessions, - theme, graphs, tables, + config.getWorldAliasSettings(), theme, graphs, tables, formatters.year(), formatters.timeAmount() ); } 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 7891c2e28..4a0d3396a 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,6 +6,7 @@ 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.WorldAliasSettings; import com.djrapitops.plan.system.settings.theme.Theme; import com.djrapitops.plan.system.settings.theme.ThemeVal; import com.djrapitops.plan.utilities.comparators.DateHolderRecentComparator; @@ -36,6 +37,7 @@ public class SessionAccordion extends Accordion { private final boolean appendWorldPercentage; private final int maxSessions; + private final WorldAliasSettings worldAliasSettings; private final Theme theme; private final Graphs graphs; private final HtmlTables tables; @@ -47,6 +49,7 @@ public class SessionAccordion extends Accordion { Supplier> playerNamesSupplier, boolean appendWorldPercentage, int maxSessions, + WorldAliasSettings worldAliasSettings, Theme theme, Graphs graphs, HtmlTables tables, @@ -61,6 +64,7 @@ public class SessionAccordion extends Accordion { this.playerNamesSupplier = playerNamesSupplier; this.appendWorldPercentage = appendWorldPercentage; this.maxSessions = maxSessions; + this.worldAliasSettings = worldAliasSettings; this.theme = theme; this.graphs = graphs; this.tables = tables; @@ -101,7 +105,7 @@ public class SessionAccordion extends Accordion { WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes(new HashMap<>())); WorldPie worldPie = graphs.pie().worldPie(worldTimes); - String longestWorldPlayed = session.getValue(SessionKeys.LONGEST_WORLD_PLAYED).orElse("Unknown"); + String longestWorldPlayed = worldAliasSettings.getLongestWorldPlayed(session); boolean hasEnded = session.supports(SessionKeys.END); String sessionEnd = hasEnded ? yearFormatter.apply(() -> session.getUnsafe(SessionKeys.END)) : "Online"; @@ -173,7 +177,7 @@ public class SessionAccordion extends Accordion { WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes(new HashMap<>())); WorldPie worldPie = graphs.pie().worldPie(worldTimes); - String longestWorldPlayed = session.getValue(SessionKeys.LONGEST_WORLD_PLAYED).orElse("Unknown"); + String longestWorldPlayed = worldAliasSettings.getLongestWorldPlayed(session); boolean hasEnded = session.supports(SessionKeys.END); String sessionEnd = hasEnded ? yearFormatter.apply(() -> session.getValue(SessionKeys.END).orElse(0L)) : "Online"; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java index c45269e39..47ca776b6 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/HtmlTables.java @@ -110,7 +110,7 @@ public class HtmlTables { public TableContainer playerSessionTable(String playerName, List sessions) { return new PlayerSessionTable( playerName, sessions, - config.getNumber(Settings.MAX_SESSIONS), formatters.year(), formatters.timeAmount() + config.getNumber(Settings.MAX_SESSIONS), config.getWorldAliasSettings(), formatters.year(), formatters.timeAmount() ); } @@ -124,7 +124,7 @@ public class HtmlTables { public TableContainer serverSessionTable(Map playerNames, List sessions) { return new ServerSessionTable( playerNames, sessions, - config.getNumber(Settings.MAX_SESSIONS), formatters.year(), formatters.timeAmount() + config.getNumber(Settings.MAX_SESSIONS), config.getWorldAliasSettings(), formatters.year(), formatters.timeAmount() ); } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayerSessionTable.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayerSessionTable.java index 04c1507c0..966d0cdda 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayerSessionTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayerSessionTable.java @@ -5,6 +5,7 @@ import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.element.TableContainer; import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.objects.DateHolder; +import com.djrapitops.plan.system.settings.WorldAliasSettings; import com.djrapitops.plan.utilities.formatting.Formatter; import com.djrapitops.plan.utilities.html.Html; @@ -18,6 +19,7 @@ import java.util.List; class PlayerSessionTable extends TableContainer { private final int maxSessions; + private final WorldAliasSettings worldAliasSettings; private final Formatter yearFormatter; private final Formatter timeAmountFormatter; @@ -26,6 +28,7 @@ class PlayerSessionTable extends TableContainer { PlayerSessionTable(String playerName, List sessions, int maxSessions, + WorldAliasSettings worldAliasSettings, Formatter yearFormatter, Formatter timeAmountFormatter ) { @@ -33,6 +36,7 @@ class PlayerSessionTable extends TableContainer { this.playerName = playerName; this.sessions = sessions; this.maxSessions = maxSessions; + this.worldAliasSettings = worldAliasSettings; this.yearFormatter = yearFormatter; this.timeAmountFormatter = timeAmountFormatter; @@ -52,7 +56,7 @@ class PlayerSessionTable extends TableContainer { String length = session.supports(SessionKeys.END) ? timeAmountFormatter.apply(session.getValue(SessionKeys.LENGTH).orElse(0L)) : "Online"; - String world = session.getValue(SessionKeys.LONGEST_WORLD_PLAYED).orElse("Unknown"); + String world = worldAliasSettings.getLongestWorldPlayed(session); String toolTip = "Session ID: " + session.getValue(SessionKeys.DB_ID) .map(id -> Integer.toString(id)) diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/ServerSessionTable.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/ServerSessionTable.java index 9292f3124..ded4fa860 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/ServerSessionTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/ServerSessionTable.java @@ -5,6 +5,7 @@ import com.djrapitops.plan.data.container.Session; import com.djrapitops.plan.data.element.TableContainer; import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.objects.DateHolder; +import com.djrapitops.plan.system.settings.WorldAliasSettings; import com.djrapitops.plan.utilities.formatting.Formatter; import com.djrapitops.plan.utilities.html.Html; @@ -20,6 +21,7 @@ import java.util.UUID; class ServerSessionTable extends TableContainer { private final int maxSessions; + private final WorldAliasSettings worldAliasSettings; private final Formatter yearFormatter; private final Formatter timeAmountFormatter; @@ -29,6 +31,7 @@ class ServerSessionTable extends TableContainer { ServerSessionTable( Map playerNames, List sessions, int maxSessions, + WorldAliasSettings worldAliasSettings, Formatter yearFormatter, Formatter timeAmountFormatter ) { @@ -36,6 +39,7 @@ class ServerSessionTable extends TableContainer { this.playerNames = playerNames; this.sessions = sessions; this.maxSessions = maxSessions; + this.worldAliasSettings = worldAliasSettings; this.yearFormatter = yearFormatter; this.timeAmountFormatter = timeAmountFormatter; @@ -53,7 +57,7 @@ class ServerSessionTable extends TableContainer { String length = session.supports(SessionKeys.END) ? timeAmountFormatter.apply(session.getValue(SessionKeys.LENGTH).orElse(0L)) : "Online"; - String world = session.getValue(SessionKeys.LONGEST_WORLD_PLAYED).orElse("Unknown"); + String world = worldAliasSettings.getLongestWorldPlayed(session); String toolTip = "Session ID: " + session.getValue(SessionKeys.DB_ID) .map(id -> Integer.toString(id))