[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.
This commit is contained in:
Rsl1122 2018-09-29 13:32:59 +03:00
parent e12f258a33
commit 3625156b36
7 changed files with 59 additions and 43 deletions

View File

@ -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.keys.SessionKeys;
import com.djrapitops.plan.data.store.objects.DateHolder; import com.djrapitops.plan.data.store.objects.DateHolder;
import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.data.time.WorldTimes;
import com.djrapitops.plan.system.settings.WorldAliasSettings;
import com.djrapitops.plan.utilities.formatting.Formatter;
import java.util.*; import java.util.*;
@ -58,7 +56,7 @@ public class Session extends DataContainer implements DateHolder {
getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START)); getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START));
putSupplier(SessionKeys.ACTIVE_TIME, () -> getUnsafe(SessionKeys.LENGTH) - getUnsafe(SessionKeys.AFK_TIME)); 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)); getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START));
putSupplier(SessionKeys.ACTIVE_TIME, () -> getUnsafe(SessionKeys.LENGTH) - getUnsafe(SessionKeys.AFK_TIME)); 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() { private long getAfkTime() {
return afkTime; return afkTime;
} }
@Deprecated // TODO Move this method elsewhere
private String getLongestWorldPlayed() {
WorldAliasSettings worldAliasSettings = null; // TODO
Map<String, String> aliases = worldAliasSettings.getAliases();
if (worldTimes == null) {
return "No World Time Data";
}
if (!supports(SessionKeys.END)) {
return "Current: " + aliases.get(worldTimes.getCurrentWorld());
}
Map<String, Long> playtimePerAlias = new HashMap<>(); //TODO Call WorldAliasSettings#getPlaytimePerAlias(WorldTimes)
long total = worldTimes.getTotal();
long longest = 0;
String theWorld = "-";
for (Map.Entry<String, Long> 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<Double> percentageFormatter = null; // TODO
return theWorld + " (" + percentageFormatter.apply(quotient) + ")";
}
} }

View File

@ -4,10 +4,14 @@
*/ */
package com.djrapitops.plan.system.settings; 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.GMTimes;
import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.data.time.WorldTimes;
import com.djrapitops.plan.system.processing.Processing; import com.djrapitops.plan.system.processing.Processing;
import com.djrapitops.plan.system.settings.config.PlanConfig; 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.config.ConfigNode;
import com.djrapitops.plugin.logging.L; import com.djrapitops.plugin.logging.L;
import com.djrapitops.plugin.logging.error.ErrorHandler; import com.djrapitops.plugin.logging.error.ErrorHandler;
@ -30,18 +34,22 @@ import java.util.stream.Collectors;
public class WorldAliasSettings { public class WorldAliasSettings {
private final Lazy<PlanConfig> config; private final Lazy<PlanConfig> config;
private final Formatter<Double> percentageFormatter;
private final Processing processing; private final Processing processing;
private final ErrorHandler errorHandler; private final ErrorHandler errorHandler;
@Inject @Inject
public WorldAliasSettings( public WorldAliasSettings(
Lazy<PlanConfig> config, Lazy<PlanConfig> config,
Formatters formatters,
Processing processing, Processing processing,
ErrorHandler errorHandler ErrorHandler errorHandler
) { ) {
this.config = config; this.config = config;
this.processing = processing; this.processing = processing;
this.errorHandler = errorHandler; this.errorHandler = errorHandler;
percentageFormatter = formatters.percentage();
} }
private ConfigNode getAliasSection() { private ConfigNode getAliasSection() {
@ -139,4 +147,33 @@ public class WorldAliasSettings {
} }
return gmTimesPerAlias; return gmTimesPerAlias;
} }
public String getLongestWorldPlayed(Session session) {
Map<String, String> 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<String, Long> playtimePerAlias = getPlaytimePerAlias(worldTimes);
long total = worldTimes.getTotal();
long longest = 0;
String theWorld = "-";
for (Map.Entry<String, Long> 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) + ")";
}
} }

View File

@ -63,7 +63,7 @@ public class Accordions {
true, sessions, true, sessions,
serverNamesSupplier, HashMap::new, serverNamesSupplier, HashMap::new,
appendWorldPercentage, maxSessions, appendWorldPercentage, maxSessions,
theme, graphs, tables, config.getWorldAliasSettings(), theme, graphs, tables,
formatters.year(), formatters.timeAmount() formatters.year(), formatters.timeAmount()
); );
} }
@ -87,7 +87,7 @@ public class Accordions {
false, sessions, false, sessions,
serverNamesSupplier, playerNamesSupplier, serverNamesSupplier, playerNamesSupplier,
appendWorldPercentage, maxSessions, appendWorldPercentage, maxSessions,
theme, graphs, tables, config.getWorldAliasSettings(), theme, graphs, tables,
formatters.year(), formatters.timeAmount() formatters.year(), formatters.timeAmount()
); );
} }

View File

@ -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.keys.SessionKeys;
import com.djrapitops.plan.data.store.objects.DateHolder; import com.djrapitops.plan.data.store.objects.DateHolder;
import com.djrapitops.plan.data.time.WorldTimes; 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.Theme;
import com.djrapitops.plan.system.settings.theme.ThemeVal; import com.djrapitops.plan.system.settings.theme.ThemeVal;
import com.djrapitops.plan.utilities.comparators.DateHolderRecentComparator; import com.djrapitops.plan.utilities.comparators.DateHolderRecentComparator;
@ -36,6 +37,7 @@ public class SessionAccordion extends Accordion {
private final boolean appendWorldPercentage; private final boolean appendWorldPercentage;
private final int maxSessions; private final int maxSessions;
private final WorldAliasSettings worldAliasSettings;
private final Theme theme; private final Theme theme;
private final Graphs graphs; private final Graphs graphs;
private final HtmlTables tables; private final HtmlTables tables;
@ -47,6 +49,7 @@ public class SessionAccordion extends Accordion {
Supplier<Map<UUID, String>> playerNamesSupplier, Supplier<Map<UUID, String>> playerNamesSupplier,
boolean appendWorldPercentage, boolean appendWorldPercentage,
int maxSessions, int maxSessions,
WorldAliasSettings worldAliasSettings,
Theme theme, Theme theme,
Graphs graphs, Graphs graphs,
HtmlTables tables, HtmlTables tables,
@ -61,6 +64,7 @@ public class SessionAccordion extends Accordion {
this.playerNamesSupplier = playerNamesSupplier; this.playerNamesSupplier = playerNamesSupplier;
this.appendWorldPercentage = appendWorldPercentage; this.appendWorldPercentage = appendWorldPercentage;
this.maxSessions = maxSessions; this.maxSessions = maxSessions;
this.worldAliasSettings = worldAliasSettings;
this.theme = theme; this.theme = theme;
this.graphs = graphs; this.graphs = graphs;
this.tables = tables; this.tables = tables;
@ -101,7 +105,7 @@ public class SessionAccordion extends Accordion {
WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes(new HashMap<>())); WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes(new HashMap<>()));
WorldPie worldPie = graphs.pie().worldPie(worldTimes); 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); boolean hasEnded = session.supports(SessionKeys.END);
String sessionEnd = hasEnded ? yearFormatter.apply(() -> session.getUnsafe(SessionKeys.END)) : "Online"; 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<>())); WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes(new HashMap<>()));
WorldPie worldPie = graphs.pie().worldPie(worldTimes); 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); boolean hasEnded = session.supports(SessionKeys.END);
String sessionEnd = hasEnded ? yearFormatter.apply(() -> session.getValue(SessionKeys.END).orElse(0L)) : "Online"; String sessionEnd = hasEnded ? yearFormatter.apply(() -> session.getValue(SessionKeys.END).orElse(0L)) : "Online";

View File

@ -110,7 +110,7 @@ public class HtmlTables {
public TableContainer playerSessionTable(String playerName, List<Session> sessions) { public TableContainer playerSessionTable(String playerName, List<Session> sessions) {
return new PlayerSessionTable( return new PlayerSessionTable(
playerName, sessions, 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<UUID, String> playerNames, List<Session> sessions) { public TableContainer serverSessionTable(Map<UUID, String> playerNames, List<Session> sessions) {
return new ServerSessionTable( return new ServerSessionTable(
playerNames, sessions, playerNames, sessions,
config.getNumber(Settings.MAX_SESSIONS), formatters.year(), formatters.timeAmount() config.getNumber(Settings.MAX_SESSIONS), config.getWorldAliasSettings(), formatters.year(), formatters.timeAmount()
); );
} }

View File

@ -5,6 +5,7 @@ import com.djrapitops.plan.data.container.Session;
import com.djrapitops.plan.data.element.TableContainer; import com.djrapitops.plan.data.element.TableContainer;
import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.keys.SessionKeys;
import com.djrapitops.plan.data.store.objects.DateHolder; 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.formatting.Formatter;
import com.djrapitops.plan.utilities.html.Html; import com.djrapitops.plan.utilities.html.Html;
@ -18,6 +19,7 @@ import java.util.List;
class PlayerSessionTable extends TableContainer { class PlayerSessionTable extends TableContainer {
private final int maxSessions; private final int maxSessions;
private final WorldAliasSettings worldAliasSettings;
private final Formatter<DateHolder> yearFormatter; private final Formatter<DateHolder> yearFormatter;
private final Formatter<Long> timeAmountFormatter; private final Formatter<Long> timeAmountFormatter;
@ -26,6 +28,7 @@ class PlayerSessionTable extends TableContainer {
PlayerSessionTable(String playerName, List<Session> sessions, PlayerSessionTable(String playerName, List<Session> sessions,
int maxSessions, int maxSessions,
WorldAliasSettings worldAliasSettings,
Formatter<DateHolder> yearFormatter, Formatter<DateHolder> yearFormatter,
Formatter<Long> timeAmountFormatter Formatter<Long> timeAmountFormatter
) { ) {
@ -33,6 +36,7 @@ class PlayerSessionTable extends TableContainer {
this.playerName = playerName; this.playerName = playerName;
this.sessions = sessions; this.sessions = sessions;
this.maxSessions = maxSessions; this.maxSessions = maxSessions;
this.worldAliasSettings = worldAliasSettings;
this.yearFormatter = yearFormatter; this.yearFormatter = yearFormatter;
this.timeAmountFormatter = timeAmountFormatter; this.timeAmountFormatter = timeAmountFormatter;
@ -52,7 +56,7 @@ class PlayerSessionTable extends TableContainer {
String length = session.supports(SessionKeys.END) String length = session.supports(SessionKeys.END)
? timeAmountFormatter.apply(session.getValue(SessionKeys.LENGTH).orElse(0L)) ? timeAmountFormatter.apply(session.getValue(SessionKeys.LENGTH).orElse(0L))
: "Online"; : "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) String toolTip = "Session ID: " + session.getValue(SessionKeys.DB_ID)
.map(id -> Integer.toString(id)) .map(id -> Integer.toString(id))

View File

@ -5,6 +5,7 @@ import com.djrapitops.plan.data.container.Session;
import com.djrapitops.plan.data.element.TableContainer; import com.djrapitops.plan.data.element.TableContainer;
import com.djrapitops.plan.data.store.keys.SessionKeys; import com.djrapitops.plan.data.store.keys.SessionKeys;
import com.djrapitops.plan.data.store.objects.DateHolder; 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.formatting.Formatter;
import com.djrapitops.plan.utilities.html.Html; import com.djrapitops.plan.utilities.html.Html;
@ -20,6 +21,7 @@ import java.util.UUID;
class ServerSessionTable extends TableContainer { class ServerSessionTable extends TableContainer {
private final int maxSessions; private final int maxSessions;
private final WorldAliasSettings worldAliasSettings;
private final Formatter<DateHolder> yearFormatter; private final Formatter<DateHolder> yearFormatter;
private final Formatter<Long> timeAmountFormatter; private final Formatter<Long> timeAmountFormatter;
@ -29,6 +31,7 @@ class ServerSessionTable extends TableContainer {
ServerSessionTable( ServerSessionTable(
Map<UUID, String> playerNames, List<Session> sessions, Map<UUID, String> playerNames, List<Session> sessions,
int maxSessions, int maxSessions,
WorldAliasSettings worldAliasSettings,
Formatter<DateHolder> yearFormatter, Formatter<DateHolder> yearFormatter,
Formatter<Long> timeAmountFormatter Formatter<Long> timeAmountFormatter
) { ) {
@ -36,6 +39,7 @@ class ServerSessionTable extends TableContainer {
this.playerNames = playerNames; this.playerNames = playerNames;
this.sessions = sessions; this.sessions = sessions;
this.maxSessions = maxSessions; this.maxSessions = maxSessions;
this.worldAliasSettings = worldAliasSettings;
this.yearFormatter = yearFormatter; this.yearFormatter = yearFormatter;
this.timeAmountFormatter = timeAmountFormatter; this.timeAmountFormatter = timeAmountFormatter;
@ -53,7 +57,7 @@ class ServerSessionTable extends TableContainer {
String length = session.supports(SessionKeys.END) String length = session.supports(SessionKeys.END)
? timeAmountFormatter.apply(session.getValue(SessionKeys.LENGTH).orElse(0L)) ? timeAmountFormatter.apply(session.getValue(SessionKeys.LENGTH).orElse(0L))
: "Online"; : "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) String toolTip = "Session ID: " + session.getValue(SessionKeys.DB_ID)
.map(id -> Integer.toString(id)) .map(id -> Integer.toString(id))