diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/importing/importers/BukkitImporter.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/importing/importers/BukkitImporter.java index e709884f0..282bdd1b0 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/importing/importers/BukkitImporter.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/importing/importers/BukkitImporter.java @@ -23,6 +23,7 @@ import com.djrapitops.plan.gathering.importing.data.BukkitUserImportRefiner; import com.djrapitops.plan.gathering.importing.data.ServerImportData; import com.djrapitops.plan.gathering.importing.data.UserImportData; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.queries.LargeStoreQueries; @@ -43,7 +44,7 @@ import java.util.stream.Collectors; */ public abstract class BukkitImporter implements Importer { - protected final Supplier serverUUID; + protected final Supplier serverUUID; private final GeolocationCache geolocationCache; private final DBSystem dbSystem; private final String name; @@ -115,7 +116,7 @@ public abstract class BukkitImporter implements Importer { Map users = new HashMap<>(); List userInfo = new ArrayList<>(); Map> nickNames = new HashMap<>(); - List sessions = new ArrayList<>(); + List sessions = new ArrayList<>(); Map> geoInfo = new HashMap<>(); userImportData.parallelStream().forEach(data -> { @@ -139,7 +140,7 @@ public abstract class BukkitImporter implements Importer { protected void performOperations() { execute(LargeStoreQueries.storeAllCommonUserInformation(users.values())); execute(LargeStoreQueries.storeAllSessionsWithKillAndWorldData(sessions)); - Map> userInformation = Collections.singletonMap(serverUUID.get(), userInfo); + Map> userInformation = Collections.singletonMap(serverUUID.get(), userInfo); execute(LargeStoreQueries.storePerServerUserInformation(userInformation)); execute(LargeStoreQueries.storeAllNicknameData(Collections.singletonMap(serverUUID.get(), nickNames))); execute(LargeStoreQueries.storeAllGeoInformation(geoInfo)); @@ -177,16 +178,17 @@ public abstract class BukkitImporter implements Importer { return new UserInfo(uuid, serverUUID.get(), registered, op, hostname, banned); } - private Session toSession(UserImportData userImportData) { + private FinishedSession toSession(UserImportData userImportData) { int mobKills = userImportData.getMobKills(); int deaths = userImportData.getDeaths(); - Session session = new Session(0, userImportData.getUuid(), serverUUID.get(), 0L, 0L, mobKills, deaths, 0); + DataMap extraData = new DataMap(); + extraData.put(MobKillCounter.class, new MobKillCounter(mobKills)); + extraData.put(DeathCounter.class, new DeathCounter(deaths)); + extraData.put(WorldTimes.class, new WorldTimes(userImportData.getWorldTimes())); + extraData.put(PlayerKills.class, new PlayerKills(userImportData.getKills())); - session.setPlayerKills(userImportData.getKills()); - session.setWorldTimes(new WorldTimes(userImportData.getWorldTimes())); - - return session; + return new FinishedSession(userImportData.getUuid(), serverUUID.get(), 0L, 0L, 0, extraData); } private List convertGeoInfo(UserImportData userImportData) { diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/DeathEventListener.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/DeathEventListener.java index 2eb65cde7..fe5b99975 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/DeathEventListener.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/DeathEventListener.java @@ -19,7 +19,7 @@ package com.djrapitops.plan.gathering.listeners.bukkit; import com.djrapitops.plan.delivery.formatting.EntityNameFormatter; import com.djrapitops.plan.delivery.formatting.ItemNameFormatter; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.processing.processors.player.MobKillProcessor; import com.djrapitops.plan.processing.processors.player.PlayerKillProcessor; @@ -64,7 +64,7 @@ public class DeathEventListener implements Listener { if (dead instanceof Player) { // Process Death - SessionCache.getCachedSession(dead.getUniqueId()).ifPresent(Session::died); + SessionCache.getCachedSession(dead.getUniqueId()).ifPresent(ActiveSession::addDeath); } try { diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/GameModeChangeListener.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/GameModeChangeListener.java index 09545375d..0c5d18cf5 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/GameModeChangeListener.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/GameModeChangeListener.java @@ -17,7 +17,7 @@ package com.djrapitops.plan.gathering.listeners.bukkit; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -81,7 +81,7 @@ public class GameModeChangeListener implements Listener { dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), worldName)); worldAliasSettings.addWorld(worldName); - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); } } diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/PlayerOnlineListener.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/PlayerOnlineListener.java index a6356ba73..c8bf6183b 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/PlayerOnlineListener.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/PlayerOnlineListener.java @@ -17,16 +17,18 @@ package com.djrapitops.plan.gathering.listeners.bukkit; import com.djrapitops.plan.delivery.domain.Nickname; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.delivery.domain.PlayerName; +import com.djrapitops.plan.delivery.domain.ServerName; import com.djrapitops.plan.delivery.export.Exporter; import com.djrapitops.plan.extension.CallEvents; import com.djrapitops.plan.extension.ExtensionSvc; import com.djrapitops.plan.gathering.cache.NicknameCache; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.geolocation.GeolocationCache; import com.djrapitops.plan.gathering.listeners.Status; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; @@ -147,7 +149,7 @@ public class PlayerOnlineListener implements Listener { Player player = event.getPlayer(); UUID playerUUID = player.getUniqueId(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); long time = System.currentTimeMillis(); BukkitAFKListener.AFK_TRACKER.performedAction(playerUUID, time); @@ -174,9 +176,9 @@ public class PlayerOnlineListener implements Listener { database.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, player::getFirstPlayed, playerName, serverUUID, hostname)); - Session session = new Session(playerUUID, serverUUID, time, world, gm); - session.putRawData(SessionKeys.NAME, playerName); - session.putRawData(SessionKeys.SERVER_NAME, serverInfo.getServer().getIdentifiableName()); + ActiveSession session = new ActiveSession(playerUUID, serverUUID, time, world, gm); + session.getExtraData().put(PlayerName.class, new PlayerName(playerName)); + session.getExtraData().put(ServerName.class, new ServerName(serverInfo.getServer().getIdentifiableName())); sessionCache.cacheSession(playerUUID, session) .ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession))); diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/WorldChangeListener.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/WorldChangeListener.java index 927388a80..d5dceb498 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/WorldChangeListener.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/gathering/listeners/bukkit/WorldChangeListener.java @@ -17,7 +17,7 @@ package com.djrapitops.plan.gathering.listeners.bukkit; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -75,7 +75,7 @@ public class WorldChangeListener implements Listener { dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), worldName)); worldAliasSettings.addWorld(worldName); - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); } } diff --git a/Plan/bungeecord/src/main/java/com/djrapitops/plan/gathering/listeners/bungee/PlayerOnlineListener.java b/Plan/bungeecord/src/main/java/com/djrapitops/plan/gathering/listeners/bungee/PlayerOnlineListener.java index 71528a847..17185f6cb 100644 --- a/Plan/bungeecord/src/main/java/com/djrapitops/plan/gathering/listeners/bungee/PlayerOnlineListener.java +++ b/Plan/bungeecord/src/main/java/com/djrapitops/plan/gathering/listeners/bungee/PlayerOnlineListener.java @@ -16,12 +16,13 @@ */ package com.djrapitops.plan.gathering.listeners.bungee; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.delivery.domain.PlayerName; +import com.djrapitops.plan.delivery.domain.ServerName; import com.djrapitops.plan.delivery.export.Exporter; import com.djrapitops.plan.extension.CallEvents; import com.djrapitops.plan.extension.ExtensionSvc; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.geolocation.GeolocationCache; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.processing.Processing; @@ -101,9 +102,9 @@ public class PlayerOnlineListener implements Listener { InetAddress address = player.getAddress().getAddress(); long time = System.currentTimeMillis(); - Session session = new Session(playerUUID, serverInfo.getServerUUID(), time, null, null); - session.putRawData(SessionKeys.NAME, playerName); - session.putRawData(SessionKeys.SERVER_NAME, "Proxy Server"); + ActiveSession session = new ActiveSession(playerUUID, serverInfo.getServerUUID(), time, null, null); + session.getExtraData().put(PlayerName.class, new PlayerName(playerName)); + session.getExtraData().put(ServerName.class, new ServerName("Proxy Server")); sessionCache.cacheSession(playerUUID, session); Database database = dbSystem.getDatabase(); @@ -165,9 +166,9 @@ public class PlayerOnlineListener implements Listener { long time = System.currentTimeMillis(); // Replaces the current session in the cache. - Session session = new Session(playerUUID, serverInfo.getServerUUID(), time, null, null); - session.putRawData(SessionKeys.NAME, playerName); - session.putRawData(SessionKeys.SERVER_NAME, "Proxy Server"); + ActiveSession session = new ActiveSession(playerUUID, serverInfo.getServerUUID(), time, null, null); + session.getExtraData().put(PlayerName.class, new PlayerName(playerName)); + session.getExtraData().put(ServerName.class, new ServerName("Proxy Server")); sessionCache.cacheSession(playerUUID, session); if (config.isTrue(ExportSettings.EXPORT_ON_ONLINE_STATUS_CHANGE)) { processing.submitNonCritical(() -> exporter.exportPlayerPage(playerUUID, playerName)); diff --git a/Plan/bungeecord/src/main/java/com/djrapitops/plan/identification/BungeeServerInfo.java b/Plan/bungeecord/src/main/java/com/djrapitops/plan/identification/BungeeServerInfo.java index f83b048fd..43997fe40 100644 --- a/Plan/bungeecord/src/main/java/com/djrapitops/plan/identification/BungeeServerInfo.java +++ b/Plan/bungeecord/src/main/java/com/djrapitops/plan/identification/BungeeServerInfo.java @@ -27,7 +27,6 @@ import net.playeranalytics.plugin.server.PluginLogger; import javax.inject.Inject; import javax.inject.Singleton; -import java.util.UUID; /** * Manages Server information on the Bungee instance. @@ -112,7 +111,7 @@ public class BungeeServerInfo extends ServerInfo { * @throws EnableException */ private Server createServerObject() { - UUID serverUUID = generateNewUUID(); + ServerUUID serverUUID = generateNewUUID(); String accessAddress = addresses.getAccessAddress().orElseThrow(() -> new EnableException("Velocity can not have '0.0.0.0' or '' as an address. Set up 'Server.IP' setting.")); return new Server(-1, serverUUID, "BungeeCord", accessAddress, true); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/DataService.java b/Plan/common/src/main/java/com/djrapitops/plan/DataService.java index 10637e52c..722bb20ba 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/DataService.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/DataService.java @@ -77,4 +77,8 @@ public interface DataService { DataService registerDBSupplier(Class type, Class

parameterType, Function> supplierWithParameter); + interface Mapping { + void register(DataService service); + } + } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java b/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java index d89c576f5..02ce3ee30 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/api/CommonAPI.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.api.data.ServerContainer; import com.djrapitops.plan.data.plugin.PluginData; import com.djrapitops.plan.delivery.rendering.html.Html; import com.djrapitops.plan.exceptions.database.DBOpException; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.identification.UUIDUtility; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.queries.Query; @@ -36,6 +37,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; /** * PlanAPI extension for all implementations. @@ -110,7 +112,8 @@ public class CommonAPI implements PlanAPI { @Override public Collection fetchServerUUIDs() { - return queryDB(ServerQueries.fetchPlanServerInformation()).keySet(); + return queryDB(ServerQueries.fetchPlanServerInformation()).keySet() + .stream().map(ServerUUID::asUUID).collect(Collectors.toSet()); } @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/commands/TabCompleteCache.java b/Plan/common/src/main/java/com/djrapitops/plan/commands/TabCompleteCache.java index a0bff73ee..d98d05a90 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/commands/TabCompleteCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/commands/TabCompleteCache.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.commands; import com.djrapitops.plan.SubSystem; import com.djrapitops.plan.delivery.domain.auth.User; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.queries.objects.ServerQueries; import com.djrapitops.plan.storage.database.queries.objects.UserIdentifierQueries; @@ -73,8 +74,8 @@ public class TabCompleteCache implements SubSystem { } private void refreshServerIdentifiers() { - Map serverNames = dbSystem.getDatabase().query(ServerQueries.fetchPlanServerInformation()); - for (Map.Entry server : serverNames.entrySet()) { + Map serverNames = dbSystem.getDatabase().query(ServerQueries.fetchPlanServerInformation()); + for (Map.Entry server : serverNames.entrySet()) { serverIdentifiers.add(server.getKey().toString()); serverIdentifiers.add(server.getValue().getIdentifiableName()); server.getValue().getId().ifPresent(id -> serverIdentifiers.add(Integer.toString(id))); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/AveragePing.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/AveragePing.java new file mode 100644 index 000000000..44d613f91 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/AveragePing.java @@ -0,0 +1,29 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.delivery.domain; + +public class AveragePing { + private final double value; + + public AveragePing(double value) { + this.value = value; + } + + public double getValue() { + return value; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/Nickname.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/Nickname.java index bd68b943a..617ccf731 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/Nickname.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/Nickname.java @@ -16,8 +16,9 @@ */ package com.djrapitops.plan.delivery.domain; +import com.djrapitops.plan.identification.ServerUUID; + import java.util.Objects; -import java.util.UUID; /** * Object storing nickname information. @@ -28,9 +29,9 @@ public class Nickname implements DateHolder { private final String name; private final long date; - private final UUID serverUUID; + private final ServerUUID serverUUID; - public Nickname(String name, long date, UUID serverUUID) { + public Nickname(String name, long date, ServerUUID serverUUID) { this.name = name; this.date = date; this.serverUUID = serverUUID; @@ -45,7 +46,7 @@ public class Nickname implements DateHolder { return date; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/PlayerName.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/PlayerName.java new file mode 100644 index 000000000..cfb444ce2 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/PlayerName.java @@ -0,0 +1,51 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.delivery.domain; + +import java.util.Objects; + +public class PlayerName { + private final String name; + + public PlayerName(String name) { + this.name = name; + } + + public String get() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PlayerName that = (PlayerName) o; + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + return "PlayerName{" + + "name='" + name + '\'' + + '}'; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/ServerName.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/ServerName.java new file mode 100644 index 000000000..4f601b72b --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/ServerName.java @@ -0,0 +1,51 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.delivery.domain; + +import java.util.Objects; + +public class ServerName { + private final String name; + + public ServerName(String name) { + this.name = name; + } + + public String get() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ServerName that = (ServerName) o; + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + return "ServerName{" + + "name='" + name + '\'' + + '}'; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/container/PerServerContainer.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/container/PerServerContainer.java index 1cde0a0fd..c78bcecfb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/container/PerServerContainer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/container/PerServerContainer.java @@ -18,30 +18,33 @@ package com.djrapitops.plan.delivery.domain.container; import com.djrapitops.plan.delivery.domain.keys.Key; import com.djrapitops.plan.delivery.domain.keys.PerServerKeys; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.Ping; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.domain.UserInfo; +import com.djrapitops.plan.identification.ServerUUID; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; /** - * Container for data about a player linked to a single server. + * Container for data about a player linked. * * @author AuroraLS3 * @see com.djrapitops.plan.delivery.domain.keys.PerServerKeys For Key objects. */ -public class PerServerContainer extends HashMap { +public class PerServerContainer extends HashMap { - public void putToContainerOfServer(UUID serverUUID, Key key, T value) { + public void putToContainerOfServer(ServerUUID serverUUID, Key key, T value) { DataContainer container = getOrDefault(serverUUID, new DynamicDataContainer()); container.putRawData(key, value); put(serverUUID, container); } public void putUserInfo(UserInfo userInfo) { - UUID serverUUID = userInfo.getServerUUID(); + ServerUUID serverUUID = userInfo.getServerUUID(); putToContainerOfServer(serverUUID, PerServerKeys.REGISTERED, userInfo.getRegistered()); putToContainerOfServer(serverUUID, PerServerKeys.BANNED, userInfo.isBanned()); putToContainerOfServer(serverUUID, PerServerKeys.OPERATOR, userInfo.isOperator()); @@ -64,22 +67,22 @@ public class PerServerContainer extends HashMap { } } - public void putSessions(Collection sessions) { + public void putSessions(Collection sessions) { if (sessions == null) { return; } - for (Session session : sessions) { + for (FinishedSession session : sessions) { putSession(session); } } - private void putSession(Session session) { + private void putSession(FinishedSession session) { if (session == null) { return; } - UUID serverUUID = session.getUnsafe(SessionKeys.SERVER_UUID); + ServerUUID serverUUID = session.getServerUUID(); DataContainer container = getOrDefault(serverUUID, new DynamicDataContainer()); if (!container.supports(PerServerKeys.SESSIONS)) { container.putRawData(PerServerKeys.SESSIONS, new ArrayList<>()); @@ -103,7 +106,7 @@ public class PerServerContainer extends HashMap { return; } - UUID serverUUID = ping.getServerUUID(); + ServerUUID serverUUID = ping.getServerUUID(); DataContainer container = getOrDefault(serverUUID, new DynamicDataContainer()); if (!container.supports(PerServerKeys.PING)) { container.putRawData(PerServerKeys.PING, new ArrayList<>()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/CommonKeys.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/CommonKeys.java index 6d450e5f4..b6a7407a0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/CommonKeys.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/CommonKeys.java @@ -40,7 +40,7 @@ public class CommonKeys { public static final PlaceholderKey REGISTERED = new PlaceholderKey<>(Long.class, "registered"); public static final Key> PING = new Key<>(new Type>() {}, "ping"); - public static final Key> SESSIONS = new Key<>(new Type>() {}, "sessions"); + public static final Key> SESSIONS = new Key<>(new Type>() {}, "sessions"); public static final Key WORLD_TIMES = new Key<>(WorldTimes.class, "world_times"); public static final PlaceholderKey LAST_SEEN = new PlaceholderKey<>(Long.class, "lastSeen"); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PerServerKeys.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PerServerKeys.java index 9373ec1f9..5ec03ed5d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PerServerKeys.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PerServerKeys.java @@ -37,7 +37,7 @@ public class PerServerKeys { public static final Key REGISTERED = CommonKeys.REGISTERED; public static final Key> PING = CommonKeys.PING; - public static final Key> SESSIONS = CommonKeys.SESSIONS; + public static final Key> SESSIONS = CommonKeys.SESSIONS; public static final Key WORLD_TIMES = CommonKeys.WORLD_TIMES; @Deprecated diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PlayerKeys.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PlayerKeys.java index a90d87aa2..f1d5c31fd 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PlayerKeys.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/PlayerKeys.java @@ -46,8 +46,8 @@ public class PlayerKeys { public static final Key> GEO_INFO = new Key<>(new Type>() {}, "geo_info"); public static final Key> PING = CommonKeys.PING; - public static final Key ACTIVE_SESSION = new Key<>(Session.class, "active_session"); - public static final Key> SESSIONS = CommonKeys.SESSIONS; + public static final Key ACTIVE_SESSION = new Key<>(ActiveSession.class, "active_session"); + public static final Key> SESSIONS = CommonKeys.SESSIONS; public static final Key WORLD_TIMES = CommonKeys.WORLD_TIMES; public static final Key> PLAYER_KILLS = CommonKeys.PLAYER_KILLS; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/ServerKeys.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/ServerKeys.java index 441cd6038..32c73f6a3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/ServerKeys.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/ServerKeys.java @@ -45,7 +45,7 @@ public class ServerKeys { public static final Key> OPERATORS = new Key<>(new Type>() {}, "operators"); public static final Key PLAYER_COUNT = new Key<>(Integer.class, "player_count"); - public static final Key> SESSIONS = CommonKeys.SESSIONS; + public static final Key> SESSIONS = CommonKeys.SESSIONS; public static final Key> PING = CommonKeys.PING; public static final Key WORLD_TIMES = CommonKeys.WORLD_TIMES; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/SessionKeys.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/SessionKeys.java deleted file mode 100644 index 4f430b99a..000000000 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/keys/SessionKeys.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * This file is part of Player Analytics (Plan). - * - * Plan is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License v3 as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Plan is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Plan. If not, see . - */ -package com.djrapitops.plan.delivery.domain.keys; - -import com.djrapitops.plan.gathering.domain.PlayerDeath; -import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; -import com.djrapitops.plan.gathering.domain.WorldTimes; - -import java.util.List; -import java.util.UUID; - -/** - * Class holding Key objects for Session (DataContainer). - * - * @author AuroraLS3 - * @see Session for DataContainer. - */ -public class SessionKeys { - - public static final Key DB_ID = new Key<>(Integer.class, "db_id"); - public static final Key UUID = CommonKeys.UUID; - public static final Key SERVER_UUID = CommonKeys.SERVER_UUID; - public static final Key NAME = CommonKeys.NAME; - public static final Key SERVER_NAME = new Key<>(String.class, "server_name"); - - public static final Key START = new Key<>(Long.class, "start"); - public static final Key END = new Key<>(Long.class, "end"); - public static final Key LENGTH = new Key<>(Long.class, "length"); - public static final Key AFK_TIME = new Key<>(Long.class, "afk_time"); - public static final Key ACTIVE_TIME = new Key<>(Long.class, "active_time"); - public static final Key WORLD_TIMES = CommonKeys.WORLD_TIMES; - public static final Key> PLAYER_KILLS = CommonKeys.PLAYER_KILLS; - public static final Key PLAYER_KILL_COUNT = CommonKeys.PLAYER_KILL_COUNT; - public static final Key MOB_KILL_COUNT = CommonKeys.MOB_KILL_COUNT; - public static final Key DEATH_COUNT = CommonKeys.DEATH_COUNT; - public static final Key FIRST_SESSION = new Key<>(Boolean.class, "first_session"); - @Deprecated - public static final Key> PLAYER_DEATHS = CommonKeys.PLAYER_DEATHS; - - /** - * @deprecated use WorldAliasSettings#getLongestWorldPlayed(Session) instead. - */ - @Deprecated - public static final Key LONGEST_WORLD_PLAYED = new Key<>(String.class, "longest_world_played"); - public static final Key AVERAGE_PING = new Key<>(Double.class, "averagePing"); - - private SessionKeys() { - /* Static variable class */ - } - -} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java index b4bc22768..09c3f0781 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/ActivityIndex.java @@ -18,7 +18,7 @@ package com.djrapitops.plan.delivery.domain.mutators; import com.djrapitops.plan.delivery.domain.container.DataContainer; import com.djrapitops.plan.delivery.formatting.Formatter; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.settings.locale.lang.HtmlLang; @@ -74,7 +74,7 @@ public class ActivityIndex { value = calculate(container); } - public ActivityIndex(List sessions, long date, long playtimeMsThreshold) { + public ActivityIndex(List sessions, long date, long playtimeMsThreshold) { this.playtimeMsThreshold = playtimeMsThreshold; this.date = date; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PerServerMutator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PerServerMutator.java index 932aeb194..3a64393a6 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PerServerMutator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PerServerMutator.java @@ -20,8 +20,9 @@ import com.djrapitops.plan.delivery.domain.container.DataContainer; import com.djrapitops.plan.delivery.domain.container.PerServerContainer; import com.djrapitops.plan.delivery.domain.keys.PerServerKeys; import com.djrapitops.plan.delivery.domain.keys.PlayerKeys; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import java.util.*; import java.util.stream.Collectors; @@ -43,7 +44,7 @@ public class PerServerMutator { return new PerServerMutator(container.getValue(PlayerKeys.PER_SERVER).orElse(new PerServerContainer())); } - public List flatMapSessions() { + public List flatMapSessions() { return data.values().stream() .filter(container -> container.supports(PerServerKeys.SESSIONS)) .map(container -> container.getValue(PerServerKeys.SESSIONS).orElse(Collections.emptyList())) @@ -64,20 +65,20 @@ public class PerServerMutator { return total; } - public Map worldTimesPerServer() { - Map timesMap = new HashMap<>(); - for (Map.Entry entry : data.entrySet()) { + public Map worldTimesPerServer() { + Map timesMap = new HashMap<>(); + for (Map.Entry entry : data.entrySet()) { DataContainer container = entry.getValue(); timesMap.put(entry.getKey(), container.getValue(PerServerKeys.WORLD_TIMES).orElse(new WorldTimes())); } return timesMap; } - public Optional favoriteServer() { + public Optional favoriteServer() { long max = 0; - UUID maxServer = null; + ServerUUID maxServer = null; - for (Map.Entry entry : data.entrySet()) { + for (Map.Entry entry : data.entrySet()) { long total = SessionsMutator.forContainer(entry.getValue()).toPlaytime(); if (total > max) { max = total; @@ -88,9 +89,9 @@ public class PerServerMutator { return Optional.ofNullable(maxServer); } - public Map> sessionsPerServer() { - Map> sessionMap = new HashMap<>(); - for (Map.Entry entry : data.entrySet()) { + public Map> sessionsPerServer() { + Map> sessionMap = new HashMap<>(); + for (Map.Entry entry : data.entrySet()) { sessionMap.put(entry.getKey(), entry.getValue().getValue(PerServerKeys.SESSIONS).orElse(new ArrayList<>())); } return sessionMap; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PingMutator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PingMutator.java index c2d247511..7993d9a20 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PingMutator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PingMutator.java @@ -16,12 +16,13 @@ */ package com.djrapitops.plan.delivery.domain.mutators; +import com.djrapitops.plan.delivery.domain.AveragePing; import com.djrapitops.plan.delivery.domain.DateHolder; import com.djrapitops.plan.delivery.domain.container.DataContainer; import com.djrapitops.plan.delivery.domain.keys.CommonKeys; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.Ping; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.utilities.Predicates; import com.djrapitops.plan.utilities.comparators.DateHolderOldestComparator; import com.djrapitops.plan.utilities.java.Lists; @@ -45,8 +46,15 @@ public class PingMutator { return new PingMutator(Lists.filter(pings, predicate)); } - public PingMutator filterByServer(UUID serverUUID) { - return filterBy(ping -> serverUUID.equals(ping.getServerUUID())); + public static Map> sortByServers(List pings) { + Map> sorted = new HashMap<>(); + for (Ping ping : pings) { + ServerUUID serverUUID = ping.getServerUUID(); + SortedMap serverSessions = sorted.getOrDefault(serverUUID, new TreeMap<>()); + serverSessions.put(ping.getDate(), ping); + sorted.put(serverUUID, serverSessions); + } + return sorted; } public PingMutator mutateToByMinutePings() { @@ -61,37 +69,30 @@ public class PingMutator { })); } - public static Map> sortByServers(List pings) { - Map> sorted = new HashMap<>(); - for (Ping ping : pings) { - UUID serverUUID = ping.getServerUUID(); - SortedMap serverSessions = sorted.getOrDefault(serverUUID, new TreeMap<>()); - serverSessions.put(ping.getDate(), ping); - sorted.put(serverUUID, serverSessions); - } - return sorted; + public PingMutator filterByServer(ServerUUID serverUUID) { + return filterBy(ping -> serverUUID.equals(ping.getServerUUID())); } - public void addPingToSessions(List sessions) { + public void addPingToSessions(List sessions) { if (sessions.isEmpty()) return; Comparator comparator = new DateHolderOldestComparator(); sessions.sort(comparator); pings.sort(comparator); - Map> pingByServer = sortByServers(pings); - Map> sessionsByServer = SessionsMutator.sortByServers(sessions); - for (Map.Entry> entry : pingByServer.entrySet()) { - UUID serverUUID = entry.getKey(); + Map> pingByServer = sortByServers(pings); + Map> sessionsByServer = SessionsMutator.sortByServers(sessions); + for (Map.Entry> entry : pingByServer.entrySet()) { + ServerUUID serverUUID = entry.getKey(); SortedMap pingOfServer = entry.getValue(); if (pingOfServer.isEmpty()) continue; - List sessionsOfServer = sessionsByServer.getOrDefault(serverUUID, Collections.emptyList()); + List sessionsOfServer = sessionsByServer.getOrDefault(serverUUID, Collections.emptyList()); double pingCount = 0.0; int pingEntries = 0; - for (Session session : sessionsOfServer) { + for (FinishedSession session : sessionsOfServer) { long start = session.getDate(); - Long end = session.getValue(SessionKeys.END).orElseGet(System::currentTimeMillis); + long end = session.getEnd(); if (end < start) continue; // Calculate average ping for each session with a Ping submap SortedMap duringSession = pingOfServer.subMap(start, end); @@ -100,7 +101,7 @@ public class PingMutator { pingEntries++; } if (pingEntries != 0) { - session.putRawData(SessionKeys.AVERAGE_PING, pingCount / pingEntries); + session.getExtraData().put(AveragePing.class, new AveragePing(pingCount / pingEntries)); } pingCount = 0.0; pingEntries = 0; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PlayersMutator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PlayersMutator.java index ea55fca3e..8e2742ae7 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PlayersMutator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/PlayersMutator.java @@ -21,10 +21,10 @@ import com.djrapitops.plan.delivery.domain.container.DataContainer; import com.djrapitops.plan.delivery.domain.container.PlayerContainer; import com.djrapitops.plan.delivery.domain.keys.PlayerKeys; import com.djrapitops.plan.delivery.domain.keys.ServerKeys; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.GeoInfo; import com.djrapitops.plan.gathering.domain.Ping; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.utilities.java.Lists; import com.djrapitops.plan.utilities.java.Maps; import net.playeranalytics.plugin.scheduling.TimeAmount; @@ -63,8 +63,8 @@ public class PlayersMutator { return filterBy( player -> player.getValue(PlayerKeys.SESSIONS) .map(sessions -> sessions.stream().anyMatch(session -> { - long start = session.getValue(SessionKeys.START).orElse(-1L); - long end = session.getValue(SessionKeys.END).orElse(-1L); + long start = session.getStart(); + long end = session.getEnd(); return (after <= start && start <= before) || (after <= end && end <= before); })).orElse(false) ); @@ -93,7 +93,7 @@ public class PlayersMutator { return filterBy(player -> player.getActivityIndex(date, msThreshold).getValue() >= limit); } - public PlayersMutator filterPlayedOnServer(UUID serverUUID) { + public PlayersMutator filterPlayedOnServer(ServerUUID serverUUID) { return filterBy(player -> !SessionsMutator.forContainer(player) .filterPlayedOnServer(serverUUID) .all().isEmpty() @@ -123,7 +123,7 @@ public class PlayersMutator { return geolocations; } - public Map> getPingPerCountry(UUID serverUUID) { + public Map> getPingPerCountry(ServerUUID serverUUID) { Map> pingPerCountry = new HashMap<>(); for (PlayerContainer player : players) { Optional mostRecent = GeoInfoMutator.forContainer(player).mostRecent(); @@ -240,7 +240,7 @@ public class PlayersMutator { return new PlayersMutator(toBeRetained); } - public List getSessions() { + public List getSessions() { return players.stream() .map(player -> player.getValue(PlayerKeys.SESSIONS).orElse(new ArrayList<>())) .flatMap(Collection::stream) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java index 0cb9eeff5..08dcad5c8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/domain/mutators/SessionsMutator.java @@ -16,17 +16,18 @@ */ package com.djrapitops.plan.delivery.domain.mutators; +import com.djrapitops.plan.delivery.domain.AveragePing; import com.djrapitops.plan.delivery.domain.DateHolder; +import com.djrapitops.plan.delivery.domain.PlayerName; +import com.djrapitops.plan.delivery.domain.ServerName; import com.djrapitops.plan.delivery.domain.container.DataContainer; import com.djrapitops.plan.delivery.domain.keys.CommonKeys; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.delivery.rendering.html.Html; import com.djrapitops.plan.delivery.rendering.json.graphs.Graphs; import com.djrapitops.plan.delivery.rendering.json.graphs.pie.WorldPie; -import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; -import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.gathering.domain.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.utilities.analysis.Median; import com.djrapitops.plan.utilities.java.Lists; @@ -45,18 +46,25 @@ import java.util.stream.Collectors; */ public class SessionsMutator { - private final List sessions; + private final List sessions; public static SessionsMutator forContainer(DataContainer container) { return new SessionsMutator(container.getValue(CommonKeys.SESSIONS).orElse(new ArrayList<>())); } - public SessionsMutator(List sessions) { + public SessionsMutator(List sessions) { this.sessions = sessions; } - public List all() { - return sessions; + public static Map> sortByPlayers(List sessions) { + Map> sorted = new HashMap<>(); + for (FinishedSession session : sessions) { + UUID playerUUID = session.getPlayerUUID(); + List playerSessions = sorted.computeIfAbsent(playerUUID, Lists::create); + playerSessions.add(session); + sorted.put(playerUUID, playerSessions); + } + return sorted; } public SessionsMutator sort(Comparator sessionComparator) { @@ -64,13 +72,12 @@ public class SessionsMutator { return this; } - public static Map> sortByPlayers(List sessions) { - Map> sorted = new HashMap<>(); - for (Session session : sessions) { - UUID playerUUID = session.getUnsafe(SessionKeys.UUID); - List playerSessions = sorted.computeIfAbsent(playerUUID, Lists::create); - playerSessions.add(session); - sorted.put(playerUUID, playerSessions); + public static Map> sortByServers(List sessions) { + Map> sorted = new HashMap<>(); + for (FinishedSession session : sessions) { + ServerUUID serverUUID = session.getServerUUID(); + List serverSessions = sorted.computeIfAbsent(serverUUID, Lists::create); + serverSessions.add(session); } return sorted; } @@ -79,23 +86,36 @@ public class SessionsMutator { return filterBy(getBetweenPredicate(after, before)); } - public SessionsMutator filterPlayedOnServer(UUID serverUUID) { + public static Map> sortByServersToMaps(List sessions) { + Map> sorted = new HashMap<>(); + for (FinishedSession session : sessions) { + ServerUUID serverUUID = session.getServerUUID(); + TreeMap serverSessions = sorted.getOrDefault(serverUUID, new TreeMap<>()); + serverSessions.put(session.getDate(), session); + sorted.put(serverUUID, serverSessions); + } + return sorted; + } + + public List all() { + return sessions; + } + + public SessionsMutator filterPlayedOnServer(ServerUUID serverUUID) { return filterBy(session -> - session.getValue(SessionKeys.SERVER_UUID) - .map(uuid -> uuid.equals(serverUUID)) - .orElse(false) + session.getServerUUID().equals(serverUUID) ); } - public DateHoldersMutator toDateHoldersMutator() { + public DateHoldersMutator toDateHoldersMutator() { return new DateHoldersMutator<>(sessions); } public WorldTimes toTotalWorldTimes() { WorldTimes total = new WorldTimes(); - for (Session session : sessions) { - session.getValue(SessionKeys.WORLD_TIMES).ifPresent(total::add); + for (FinishedSession session : sessions) { + session.getExtraData(WorldTimes.class).ifPresent(total::add); } return total; @@ -103,51 +123,49 @@ public class SessionsMutator { public List toPlayerKillList() { return sessions.stream() - .map(session -> session.getValue(SessionKeys.PLAYER_KILLS).orElse(new ArrayList<>())) + .map(session -> session.getExtraData(PlayerKills.class).map(PlayerKills::asList).orElseGet(ArrayList::new)) .flatMap(Collection::stream) .collect(Collectors.toList()); } public int toMobKillCount() { return sessions.stream() - .mapToInt(session -> session.getValue(SessionKeys.MOB_KILL_COUNT).orElse(0)) + .mapToInt(FinishedSession::getMobKillCount) .sum(); } public int toDeathCount() { return sessions.stream() - .mapToInt(session -> session.getValue(SessionKeys.DEATH_COUNT).orElse(0)) + .mapToInt(FinishedSession::getDeathCount) .sum(); } public long toPlaytime() { return sessions.stream() - .mapToLong(Session::getLength) + .mapToLong(FinishedSession::getLength) .sum(); } public long toAfkTime() { return sessions.stream() - .mapToLong(session -> session.getValue(SessionKeys.AFK_TIME).orElse(0L)) + .mapToLong(FinishedSession::getAfkTime) .sum(); } public long toActivePlaytime() { return sessions.stream() - .mapToLong(session -> session.getValue(SessionKeys.ACTIVE_TIME).orElse(0L)) + .mapToLong(FinishedSession::getActiveTime) .sum(); } public long toLastSeen() { return sessions.stream() - .mapToLong(session -> Math.max(session.getUnsafe( - SessionKeys.START), - session.getValue(SessionKeys.END).orElse(System.currentTimeMillis())) - ).max().orElse(-1); + .mapToLong(session -> Math.max(session.getStart(), session.getEnd())).max() + .orElse(-1); } public long toLongestSessionLength() { - OptionalLong longestSession = sessions.stream().mapToLong(Session::getLength).max(); + OptionalLong longestSession = sessions.stream().mapToLong(FinishedSession::getLength).max(); if (longestSession.isPresent()) { return longestSession.getAsLong(); } @@ -155,7 +173,7 @@ public class SessionsMutator { } public long toAverageSessionLength() { - OptionalDouble average = sessions.stream().map(Session::getLength) + OptionalDouble average = sessions.stream().map(FinishedSession::getLength) .mapToLong(i -> i) .average(); if (average.isPresent()) { @@ -164,23 +182,6 @@ public class SessionsMutator { return 0L; } - public static Map> sortByServers(List sessions) { - Map> sorted = new HashMap<>(); - for (Session session : sessions) { - UUID serverUUID = session.getUnsafe(SessionKeys.SERVER_UUID); - List serverSessions = sorted.computeIfAbsent(serverUUID, Lists::create); - serverSessions.add(session); - } - return sorted; - } - - public int toUniquePlayers() { - return (int) sessions.stream() - .map(session -> session.getUnsafe(SessionKeys.UUID)) - .distinct() - .count(); - } - public int count() { return sessions.size(); } @@ -193,41 +194,37 @@ public class SessionsMutator { return sessions.stream().anyMatch(getBetweenPredicate(after, before)); } - private Predicate getBetweenPredicate(long after, long before) { + public int toUniquePlayers() { + return (int) sessions.stream() + .map(FinishedSession::getPlayerUUID) + .distinct() + .count(); + } + + private Predicate getBetweenPredicate(long after, long before) { return session -> { - Long start = session.getUnsafe(SessionKeys.START); - long end = session.getValue(SessionKeys.END).orElse(System.currentTimeMillis()); + long start = session.getStart(); + long end = session.getEnd(); return after <= end && start <= before; }; } - public SessionsMutator filterBy(Predicate predicate) { + public SessionsMutator filterBy(Predicate predicate) { return new SessionsMutator(Lists.filter(sessions, predicate)); } public long toMedianSessionLength() { - List sessionLengths = Lists.map(sessions, Session::getLength); + List sessionLengths = Lists.map(sessions, FinishedSession::getLength); return (long) Median.forList(sessionLengths).calculate(); } - public static Map> sortByServersToMaps(List sessions) { - Map> sorted = new HashMap<>(); - for (Session session : sessions) { - UUID serverUUID = session.getUnsafe(SessionKeys.SERVER_UUID); - TreeMap serverSessions = sorted.getOrDefault(serverUUID, new TreeMap<>()); - serverSessions.put(session.getDate(), session); - sorted.put(serverUUID, serverSessions); - } - return sorted; - } - public int toPlayerDeathCount() { - return sessions.stream().mapToInt(session -> session.getValue(SessionKeys.DEATH_COUNT).orElse(0)).sum(); + return sessions.stream().mapToInt(FinishedSession::getDeathCount).sum(); } public List toSessionStarts() { return sessions.stream() - .map(Session::getDate) + .map(FinishedSession::getStart) .sorted() .collect(Collectors.toList()); } @@ -265,10 +262,10 @@ public class SessionsMutator { ) { return Lists.map(sessions, session -> { Map sessionMap = new HashMap<>(); - String playerUUID = session.getUnsafe(SessionKeys.UUID).toString(); - String serverUUID = session.getUnsafe(SessionKeys.SERVER_UUID).toString(); - String playerName = session.getValue(SessionKeys.NAME).orElse(playerUUID); - String serverName = session.getValue(SessionKeys.SERVER_NAME).orElse(serverUUID); + String playerUUID = session.getPlayerUUID().toString(); + String serverUUID = session.getServerUUID().toString(); + String playerName = session.getExtraData(PlayerName.class).map(PlayerName::get).orElse(playerUUID); + String serverName = session.getExtraData(ServerName.class).map(ServerName::get).orElse(serverUUID); sessionMap.put("player_name", playerName); sessionMap.put("player_url_name", Html.encodeToURL(playerName)); sessionMap.put("player_uuid", playerUUID); @@ -276,31 +273,32 @@ public class SessionsMutator { sessionMap.put("server_url_name", Html.encodeToURL(serverName)); sessionMap.put("server_uuid", serverUUID); sessionMap.put("name", nameFunction.apply(sessionMap)); - sessionMap.put("start", session.getValue(SessionKeys.START).map(formatters.yearLong()).orElse("-") + - (session.supports(SessionKeys.END) ? "" : " (Online)")); - sessionMap.put("end", session.getValue(SessionKeys.END).map(formatters.yearLong()).orElse("Online")); + sessionMap.put("start", formatters.yearLong().apply(session.getStart()) + + (session.getExtraData(ActiveSession.class).isPresent() ? " (Online)" : "")); + sessionMap.put("end", formatters.yearLong().apply(session.getEnd())); sessionMap.put("most_used_world", worldAliasSettings.getLongestWorldPlayed(session)); - sessionMap.put("length", session.getValue(SessionKeys.LENGTH).map(formatters.timeAmount()).orElse("-")); - sessionMap.put("afk_time", session.getValue(SessionKeys.AFK_TIME).map(formatters.timeAmount()).orElse("-")); - sessionMap.put("mob_kills", session.getValue(SessionKeys.MOB_KILL_COUNT).orElse(0)); - sessionMap.put("deaths", session.getValue(SessionKeys.DEATH_COUNT).orElse(0)); - sessionMap.put("player_kills", session.getPlayerKills().stream().map( - kill -> { - Map killMap = new HashMap<>(); - killMap.put("date", formatters.secondLong().apply(kill.getDate())); - killMap.put("victim", kill.getVictimName().orElse(kill.getVictim().toString())); - killMap.put("killer", playerName); - killMap.put("weapon", kill.getWeapon()); - return killMap; - } - ).collect(Collectors.toList())); - sessionMap.put("first_session", session.getValue(SessionKeys.FIRST_SESSION).orElse(false)); - WorldPie worldPie = graphs.pie().worldPie(session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes())); + sessionMap.put("length", formatters.timeAmount().apply(session.getLength())); + sessionMap.put("afk_time", formatters.timeAmount().apply(session.getAfkTime())); + sessionMap.put("mob_kills", session.getMobKillCount()); + sessionMap.put("deaths", session.getDeathCount()); + sessionMap.put("player_kills", session.getExtraData(PlayerKills.class) + .map(PlayerKills::asList).map(kills -> kills.stream().map( + kill -> { + Map killMap = new HashMap<>(); + killMap.put("date", formatters.secondLong().apply(kill.getDate())); + killMap.put("victim", kill.getVictimName().orElse(kill.getVictim().toString())); + killMap.put("killer", playerName); + killMap.put("weapon", kill.getWeapon()); + return killMap; + }).collect(Collectors.toList()) + ).orElseGet(ArrayList::new)); + sessionMap.put("first_session", session.isFirstSession()); + WorldPie worldPie = graphs.pie().worldPie(session.getExtraData(WorldTimes.class).orElseGet(WorldTimes::new)); sessionMap.put("world_series", worldPie.getSlices()); sessionMap.put("gm_series", worldPie.toHighChartsDrillDownMaps()); - session.getValue(SessionKeys.AVERAGE_PING).ifPresent(averagePing -> - sessionMap.put("avg_ping", formatters.decimals().apply(averagePing) + " ms") + session.getExtraData(AveragePing.class).ifPresent(averagePing -> + sessionMap.put("avg_ping", formatters.decimals().apply(averagePing.getValue()) + " ms") ); return sessionMap; }); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java index afe35a893..6976b6f66 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.delivery.export; import com.djrapitops.plan.delivery.web.resolver.exception.NotFoundException; import com.djrapitops.plan.exceptions.ExportException; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.ExportSettings; @@ -45,7 +46,7 @@ public class Exporter extends FileExporter { private final ServerPageExporter serverPageExporter; private final NetworkPageExporter networkPageExporter; - private final Set failedServers; + private final Set failedServers; @Inject public Exporter( @@ -74,7 +75,7 @@ public class Exporter extends FileExporter { * @throws ExportException If the export failed due to IO, NotFound or GenerationException. */ public boolean exportServerPage(Server server) throws ExportException { - UUID serverUUID = server.getUuid(); + ServerUUID serverUUID = server.getUuid(); if (failedServers.contains(serverUUID) || config.isFalse(ExportSettings.SERVER_PAGE)) return false; try { @@ -92,7 +93,7 @@ public class Exporter extends FileExporter { } public boolean exportServerJSON(Server server) throws ExportException { - UUID serverUUID = server.getUuid(); + ServerUUID serverUUID = server.getUuid(); if (failedServers.contains(serverUUID) || config.isFalse(ExportSettings.SERVER_JSON)) return false; try { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java index 92a94014a..b907155d8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java @@ -27,6 +27,7 @@ import com.djrapitops.plan.delivery.webserver.resolver.json.RootJSONResolver; import com.djrapitops.plan.exceptions.connection.WebException; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.theme.Theme; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; @@ -41,7 +42,6 @@ import java.io.IOException; import java.nio.file.Path; import java.util.Collections; import java.util.Optional; -import java.util.UUID; /** * Handles exporting of /server page html, data and resources. @@ -99,7 +99,7 @@ public class ServerPageExporter extends FileExporter { } private void exportHtml(Path toDirectory, Server server) throws IOException { - UUID serverUUID = server.getUuid(); + ServerUUID serverUUID = server.getUuid(); Path to = toDirectory .resolve(serverInfo.getServer().isProxy() ? "server/" + toFileName(server.getName()) : "server") .resolve("index.html"); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java index 94386b062..918db11d9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/JSONFactory.java @@ -26,12 +26,10 @@ import com.djrapitops.plan.delivery.rendering.json.graphs.Graphs; import com.djrapitops.plan.extension.implementation.results.ExtensionTabData; import com.djrapitops.plan.extension.implementation.storage.queries.ExtensionServerTableDataQuery; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Ping; -import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; -import com.djrapitops.plan.gathering.domain.TPS; +import com.djrapitops.plan.gathering.domain.*; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; @@ -83,7 +81,7 @@ public class JSONFactory { this.formatters = formatters; } - public Map serverPlayersTableJSON(UUID serverUUID) { + public Map serverPlayersTableJSON(ServerUUID serverUUID) { Integer xMostRecentPlayers = config.get(DisplaySettings.PLAYERS_PER_SERVER_PAGE); Long playtimeThreshold = config.get(TimeSettings.ACTIVE_PLAY_THRESHOLD); boolean openPlayerLinksInNewTab = config.isTrue(DisplaySettings.OPEN_PLAYER_LINKS_IN_NEW_TAB); @@ -105,7 +103,7 @@ public class JSONFactory { Database database = dbSystem.getDatabase(); - UUID mainServerUUID = database.query(ServerQueries.fetchProxyServerInformation()).map(Server::getUuid).orElse(serverInfo.getServerUUID()); + ServerUUID mainServerUUID = database.query(ServerQueries.fetchProxyServerInformation()).map(Server::getUuid).orElse(serverInfo.getServerUUID()); Map pluginData = database.query(new ExtensionServerTableDataQuery(mainServerUUID, xMostRecentPlayers)); return new PlayersTableJSONCreator( @@ -116,14 +114,14 @@ public class JSONFactory { ).toJSONMap(); } - public List> serverSessionsAsJSONMap(UUID serverUUID) { + public List> serverSessionsAsJSONMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); Integer perPageLimit = config.get(DisplaySettings.SESSIONS_PER_PAGE); - List sessions = db.query(SessionQueries.fetchLatestSessionsOfServer(serverUUID, perPageLimit)); + List sessions = db.query(SessionQueries.fetchLatestSessionsOfServer(serverUUID, perPageLimit)); // Add online sessions if (serverUUID.equals(serverInfo.getServerUUID())) { - sessions.addAll(SessionCache.getActiveSessions().values()); + addActiveSessions(sessions); sessions.sort(new SessionStartComparator()); while (true) { int size = sessions.size(); @@ -139,10 +137,10 @@ public class JSONFactory { Database db = dbSystem.getDatabase(); Integer perPageLimit = config.get(DisplaySettings.SESSIONS_PER_PAGE); - List sessions = db.query(SessionQueries.fetchLatestSessions(perPageLimit)); + List sessions = db.query(SessionQueries.fetchLatestSessions(perPageLimit)); // Add online sessions if (serverInfo.getServer().isProxy()) { - sessions.addAll(SessionCache.getActiveSessions().values()); + addActiveSessions(sessions); sessions.sort(new SessionStartComparator()); while (true) { int size = sessions.size(); @@ -157,7 +155,13 @@ public class JSONFactory { return sessionMaps; } - public List> serverPlayerKillsAsJSONMap(UUID serverUUID) { + public void addActiveSessions(List sessions) { + for (ActiveSession activeSession : SessionCache.getActiveSessions()) { + sessions.add(activeSession.toFinishedSessionFromStillActive()); + } + } + + public List> serverPlayerKillsAsJSONMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); List kills = db.query(KillQueries.fetchPlayerKillsOnServer(serverUUID, 100)); return new PlayerKillMutator(kills).toJSONAsMap(formatters); @@ -172,18 +176,18 @@ public class JSONFactory { Formatter decimals = formatters.decimals(); Formatter timeAmount = formatters.timeAmount(); - Map serverInformation = db.query(ServerQueries.fetchPlanServerInformation()); - UUID proxyUUID = serverInformation.values().stream() + Map serverInformation = db.query(ServerQueries.fetchPlanServerInformation()); + ServerUUID proxyUUID = serverInformation.values().stream() .filter(Server::isProxy) .findFirst() .map(Server::getUuid).orElse(null); - Map> tpsData = db.query( + Map> tpsData = db.query( TPSQueries.fetchTPSDataOfAllServersBut(weekAgo, now, proxyUUID) ); - Map totalPlayerCounts = db.query(PlayerCountQueries.newPlayerCounts(0, now)); - Map newPlayerCounts = db.query(PlayerCountQueries.newPlayerCounts(weekAgo, now)); - Map uniquePlayerCounts = db.query(PlayerCountQueries.uniquePlayerCounts(weekAgo, now)); + Map totalPlayerCounts = db.query(PlayerCountQueries.newPlayerCounts(0, now)); + Map newPlayerCounts = db.query(PlayerCountQueries.newPlayerCounts(weekAgo, now)); + Map uniquePlayerCounts = db.query(PlayerCountQueries.uniquePlayerCounts(weekAgo, now)); List> servers = new ArrayList<>(); serverInformation.entrySet() @@ -191,7 +195,7 @@ public class JSONFactory { .sorted(Comparator.comparing(entry -> entry.getValue().getIdentifiableName().toLowerCase())) .filter(entry -> entry.getValue().isNotProxy()) .forEach(entry -> { - UUID serverUUID = entry.getKey(); + ServerUUID serverUUID = entry.getKey(); Map server = new HashMap<>(); server.put("name", entry.getValue().getIdentifiableName()); @@ -223,7 +227,7 @@ public class JSONFactory { return Collections.singletonMap("servers", servers); } - public Map pingPerGeolocation(UUID serverUUID) { + public Map pingPerGeolocation(ServerUUID serverUUID) { Map pingByGeolocation = dbSystem.getDatabase().query(PingQueries.fetchPingDataOfServerByGeolocation(serverUUID)); return Maps.builder(String.class, Object.class) .put("table", turnToTableEntries(pingByGeolocation)) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/OnlineActivityOverviewJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/OnlineActivityOverviewJSONCreator.java index e58547616..a564f0a35 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/OnlineActivityOverviewJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/OnlineActivityOverviewJSONCreator.java @@ -16,7 +16,6 @@ */ package com.djrapitops.plan.delivery.rendering.json; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.domain.mutators.PlayersOnlineResolver; import com.djrapitops.plan.delivery.domain.mutators.RetentionData; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; @@ -24,6 +23,7 @@ import com.djrapitops.plan.delivery.domain.mutators.TPSMutator; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.gathering.domain.TPS; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; @@ -72,14 +72,14 @@ public class OnlineActivityOverviewJSONCreator implements ServerTabJSONCreator createJSONAsMap(UUID serverUUID) { + public Map createJSONAsMap(ServerUUID serverUUID) { Map serverOverview = new HashMap<>(); serverOverview.put("numbers", createNumbersMap(serverUUID)); serverOverview.put("insights", createInsightsMap(serverUUID)); return serverOverview; } - private Map createNumbersMap(UUID serverUUID) { + private Map createNumbersMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long dayAgo = now - TimeUnit.DAYS.toMillis(1L); @@ -199,7 +199,7 @@ public class OnlineActivityOverviewJSONCreator implements ServerTabJSONCreator createInsightsMap(UUID serverUUID) { + private Map createInsightsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long halfMonthAgo = now - TimeUnit.DAYS.toMillis(15L); @@ -213,7 +213,7 @@ public class OnlineActivityOverviewJSONCreator implements ServerTabJSONCreator { - long registered = registerDates.getOrDefault(session.getValue(SessionKeys.UUID).orElse(null), -501L); + long registered = registerDates.getOrDefault(session.getPlayerUUID(), -501L); long start = session.getDate(); return Math.abs(registered - start) < 500L; }); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java index 59f64f78c..84255c39b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PerformanceJSONCreator.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.delivery.domain.mutators.TPSMutator; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.gathering.domain.TPS; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; import com.djrapitops.plan.settings.locale.Locale; @@ -34,7 +35,6 @@ import javax.inject.Singleton; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -71,7 +71,8 @@ public class PerformanceJSONCreator implements ServerTabJSONCreator createJSONAsMap(UUID serverUUID) { + @Override + public Map createJSONAsMap(ServerUUID serverUUID) { Map serverOverview = new HashMap<>(); Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerBaseOverviewJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerBaseOverviewJSONCreator.java index bcb9e5868..0afbf3469 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerBaseOverviewJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerBaseOverviewJSONCreator.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.delivery.rendering.json; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.TimeSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -30,7 +31,6 @@ import javax.inject.Inject; import javax.inject.Singleton; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -60,14 +60,14 @@ public class PlayerBaseOverviewJSONCreator implements ServerTabJSONCreator createJSONAsMap(UUID serverUUID) { + public Map createJSONAsMap(ServerUUID serverUUID) { Map serverOverview = new HashMap<>(); serverOverview.put("trends", createTrendsMap(serverUUID)); serverOverview.put("insights", createInsightsMap(serverUUID)); return serverOverview; } - private Map createTrendsMap(UUID serverUUID) { + private Map createTrendsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long monthAgo = now - TimeUnit.DAYS.toMillis(30L); @@ -125,7 +125,7 @@ public class PlayerBaseOverviewJSONCreator implements ServerTabJSONCreator createInsightsMap(UUID serverUUID) { + private Map createInsightsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long halfMonthAgo = now - TimeUnit.DAYS.toMillis(15L); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerJSONCreator.java index 37b51d524..c70e9f14c 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PlayerJSONCreator.java @@ -28,6 +28,7 @@ import com.djrapitops.plan.gathering.cache.SessionCache; import com.djrapitops.plan.gathering.domain.GeoInfo; import com.djrapitops.plan.gathering.domain.PlayerKill; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; @@ -86,12 +87,12 @@ public class PlayerJSONCreator { public Map createJSONAsMap(UUID playerUUID) { Database db = dbSystem.getDatabase(); - Map serverNames = db.query(ServerQueries.fetchServerNames()); + Map serverNames = db.query(ServerQueries.fetchServerNames()); String[] pieColors = theme.getPieColors(ThemeVal.GRAPH_WORLD_PIE); PlayerContainer player = db.query(new PlayerContainerQuery(playerUUID)); SessionsMutator sessionsMutator = SessionsMutator.forContainer(player); - Map worldTimesPerServer = PerServerMutator.forContainer(player).worldTimesPerServer(); + Map worldTimesPerServer = PerServerMutator.forContainer(player).worldTimesPerServer(); List> serverAccordion = new ServerAccordion(player, serverNames, graphs, year, timeAmount, locale.getString(GenericLang.UNKNOWN)).asMaps(); List kills = player.getValue(PlayerKeys.PLAYER_KILLS).orElse(Collections.emptyList()); List deaths = player.getValue(PlayerKeys.PLAYER_DEATHS_KILLS).orElse(Collections.emptyList()); @@ -157,7 +158,7 @@ public class PlayerJSONCreator { return onlineActivity; } - private Map createInfoJSONMap(PlayerContainer player, Map serverNames) { + private Map createInfoJSONMap(PlayerContainer player, Map serverNames) { SessionsMutator sessions = SessionsMutator.forContainer(player); ActivityIndex activityIndex = player.getActivityIndex(System.currentTimeMillis(), config.get(TimeSettings.ACTIVE_PLAY_THRESHOLD)); PerServerMutator perServer = PerServerMutator.forContainer(player); @@ -280,7 +281,7 @@ public class PlayerJSONCreator { public static List fromDataNicknames( List nicknames, - Map serverNames, + Map serverNames, Formatter dateFormatter ) { nicknames.sort(new DateHolderRecentComparator()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PvPPvEJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PvPPvEJSONCreator.java index 6809a3bae..5323b4f1a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PvPPvEJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/PvPPvEJSONCreator.java @@ -18,13 +18,17 @@ package com.djrapitops.plan.delivery.rendering.json; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.queries.objects.KillQueries; import javax.inject.Inject; import javax.inject.Singleton; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** @@ -49,14 +53,14 @@ public class PvPPvEJSONCreator implements ServerTabJSONCreator createJSONAsMap(UUID serverUUID) { + public Map createJSONAsMap(ServerUUID serverUUID) { Map serverOverview = new HashMap<>(); serverOverview.put("numbers", createNumbersMap(serverUUID)); serverOverview.put("insights", createInsightsMap(serverUUID)); return serverOverview; } - private Map createNumbersMap(UUID serverUUID) { + private Map createNumbersMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long weekAgo = now - TimeUnit.DAYS.toMillis(7L); @@ -106,7 +110,7 @@ public class PvPPvEJSONCreator implements ServerTabJSONCreator createInsightsMap(UUID serverUUID) { + private Map createInsightsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long monthAgo = now - TimeUnit.DAYS.toMillis(30L); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerAccordion.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerAccordion.java index b20850652..fb1ec9089 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerAccordion.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerAccordion.java @@ -26,8 +26,12 @@ import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.rendering.json.graphs.Graphs; import com.djrapitops.plan.delivery.rendering.json.graphs.pie.WorldPie; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Utility for creating JSON for Server Accordion @@ -36,7 +40,7 @@ import java.util.*; */ public class ServerAccordion { - private final Map serverNames; + private final Map serverNames; private final PerServerContainer perServer; private final String unknown; @@ -45,7 +49,7 @@ public class ServerAccordion { private final Formatter timeAmount; public ServerAccordion( - PlayerContainer container, Map serverNames, + PlayerContainer container, Map serverNames, Graphs graphs, Formatter year, Formatter timeAmount, @@ -64,8 +68,8 @@ public class ServerAccordion { public List> asMaps() { List> servers = new ArrayList<>(); - for (Map.Entry entry : perServer.entrySet()) { - UUID serverUUID = entry.getKey(); + for (Map.Entry entry : perServer.entrySet()) { + ServerUUID serverUUID = entry.getKey(); DataContainer ofServer = entry.getValue(); Map server = new HashMap<>(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONCreator.java index c76f9cd9c..fe56b2c57 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerOverviewJSONCreator.java @@ -24,6 +24,7 @@ import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.gathering.ServerSensor; import com.djrapitops.plan.gathering.domain.TPS; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DisplaySettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; @@ -43,7 +44,6 @@ import javax.inject.Singleton; import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -88,7 +88,7 @@ public class ServerOverviewJSONCreator implements ServerTabJSONCreator createJSONAsMap(UUID serverUUID) { + public Map createJSONAsMap(ServerUUID serverUUID) { Map serverOverview = new HashMap<>(); serverOverview.put("last_7_days", createLast7DaysMap(serverUUID)); serverOverview.put("numbers", createNumbersMap(serverUUID)); @@ -96,7 +96,7 @@ public class ServerOverviewJSONCreator implements ServerTabJSONCreator createLast7DaysMap(UUID serverUUID) { + private Map createLast7DaysMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long weekAgo = now - TimeUnit.DAYS.toMillis(7L); @@ -122,7 +122,7 @@ public class ServerOverviewJSONCreator implements ServerTabJSONCreator createNumbersMap(UUID serverUUID) { + private Map createNumbersMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long twoDaysAgo = now - TimeUnit.DAYS.toMillis(2L); @@ -151,7 +151,7 @@ public class ServerOverviewJSONCreator implements ServerTabJSONCreator createWeeksMap(UUID serverUUID) { + private Map createWeeksMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long oneWeekAgo = now - TimeUnit.DAYS.toMillis(7L); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerTabJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerTabJSONCreator.java index d871120d6..39be62593 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerTabJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/ServerTabJSONCreator.java @@ -16,7 +16,8 @@ */ package com.djrapitops.plan.delivery.rendering.json; -import java.util.UUID; +import com.djrapitops.plan.identification.ServerUUID; + import java.util.function.Function; /** @@ -24,12 +25,12 @@ import java.util.function.Function; * * @author AuroraLS3 */ -public interface ServerTabJSONCreator extends Function { +public interface ServerTabJSONCreator extends Function { - T createJSONAsMap(UUID serverUUID); + T createJSONAsMap(ServerUUID serverUUID); @Override - default T apply(UUID uuid) { + default T apply(ServerUUID uuid) { return createJSONAsMap(uuid); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/SessionsOverviewJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/SessionsOverviewJSONCreator.java index 0c378fd89..925f41217 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/SessionsOverviewJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/SessionsOverviewJSONCreator.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.gathering.domain.GMTimes; import com.djrapitops.plan.gathering.domain.TPS; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.queries.objects.SessionQueries; @@ -57,11 +58,11 @@ public class SessionsOverviewJSONCreator implements ServerTabJSONCreator createJSONAsMap(UUID serverUUID) { + public Map createJSONAsMap(ServerUUID serverUUID) { return Collections.singletonMap("insights", createInsightsMap(serverUUID)); } - private Map createInsightsMap(UUID serverUUID) { + private Map createInsightsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long monthAgo = now - TimeUnit.DAYS.toMillis(30L); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/GraphJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/GraphJSONCreator.java index 882c87346..46ee14844 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/GraphJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/GraphJSONCreator.java @@ -29,9 +29,10 @@ import com.djrapitops.plan.delivery.rendering.json.graphs.pie.Pie; import com.djrapitops.plan.delivery.rendering.json.graphs.pie.WorldPie; import com.djrapitops.plan.delivery.rendering.json.graphs.special.WorldMap; import com.djrapitops.plan.delivery.rendering.json.graphs.stack.StackGraph; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.Ping; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; import com.djrapitops.plan.settings.config.paths.DisplaySettings; @@ -50,7 +51,10 @@ import net.playeranalytics.plugin.scheduling.TimeAmount; import javax.inject.Inject; import javax.inject.Singleton; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.NavigableMap; import java.util.concurrent.TimeUnit; /** @@ -79,7 +83,7 @@ public class GraphJSONCreator { this.graphs = graphs; } - public String performanceGraphJSON(UUID serverUUID) { + public String performanceGraphJSON(ServerUUID serverUUID) { long now = System.currentTimeMillis(); Database db = dbSystem.getDatabase(); LineGraphFactory lineGraphs = graphs.line(); @@ -110,7 +114,7 @@ public class GraphJSONCreator { "}}"; } - public Map optimizedPerformanceGraphJSON(UUID serverUUID) { + public Map optimizedPerformanceGraphJSON(ServerUUID serverUUID) { long now = System.currentTimeMillis(); long twoMonthsAgo = now - TimeUnit.DAYS.toMillis(60); long monthAgo = now - TimeUnit.DAYS.toMillis(30); @@ -166,7 +170,7 @@ public class GraphJSONCreator { .build(); } - public String playersOnlineGraph(UUID serverUUID) { + public String playersOnlineGraph(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long halfYearAgo = now - TimeUnit.DAYS.toMillis(180L); @@ -179,7 +183,7 @@ public class GraphJSONCreator { ",\"color\":\"" + theme.getValue(ThemeVal.GRAPH_PLAYERS_ONLINE) + "\"}"; } - public String uniqueAndNewGraphJSON(UUID serverUUID) { + public String uniqueAndNewGraphJSON(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); LineGraphFactory lineGraphs = graphs.line(); long now = System.currentTimeMillis(); @@ -195,7 +199,7 @@ public class GraphJSONCreator { return createUniqueAndNewJSON(lineGraphs, uniquePerDay, newPerDay, TimeUnit.DAYS.toMillis(1L)); } - public String hourlyUniqueAndNewGraphJSON(UUID serverUUID) { + public String hourlyUniqueAndNewGraphJSON(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); LineGraphFactory lineGraphs = graphs.line(); long now = System.currentTimeMillis(); @@ -259,7 +263,7 @@ public class GraphJSONCreator { return createUniqueAndNewJSON(lineGraphs, uniquePerDay, newPerDay, TimeUnit.HOURS.toMillis(1L)); } - public String serverCalendarJSON(UUID serverUUID) { + public String serverCalendarJSON(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); long twoYearsAgo = now - TimeUnit.DAYS.toMillis(730L); @@ -286,7 +290,7 @@ public class GraphJSONCreator { ",\"firstDay\":" + 1 + '}'; } - public Map serverWorldPieJSONAsMap(UUID serverUUID) { + public Map serverWorldPieJSONAsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); WorldTimes worldTimes = db.query(WorldTimesQueries.fetchServerTotalWorldTimes(serverUUID)); WorldPie worldPie = graphs.pie().worldPie(worldTimes); @@ -297,7 +301,7 @@ public class GraphJSONCreator { .build(); } - public Map activityGraphsJSONAsMap(UUID serverUUID) { + public Map activityGraphsJSONAsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long date = System.currentTimeMillis(); Long threshold = config.get(TimeSettings.ACTIVE_PLAY_THRESHOLD); @@ -335,7 +339,7 @@ public class GraphJSONCreator { return createActivityGraphJSON(activityData); } - public Map geolocationGraphsJSONAsMap(UUID serverUUID) { + public Map geolocationGraphsJSONAsMap(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); Map geolocationCounts = db.query(GeoInfoQueries.serverGeolocationCounts(serverUUID)); @@ -365,7 +369,7 @@ public class GraphJSONCreator { return createGeolocationJSON(geolocationCounts); } - public String pingGraphsJSON(UUID serverUUID) { + public String pingGraphsJSON(ServerUUID serverUUID) { Database db = dbSystem.getDatabase(); long now = System.currentTimeMillis(); List pings = db.query(PingQueries.fetchPingDataOfServer(now - TimeUnit.DAYS.toMillis(180L), now, serverUUID)); @@ -382,10 +386,10 @@ public class GraphJSONCreator { "}}"; } - public Map punchCardJSONAsMap(UUID serverUUID) { + public Map punchCardJSONAsMap(ServerUUID serverUUID) { long now = System.currentTimeMillis(); long monthAgo = now - TimeUnit.DAYS.toMillis(30L); - List sessions = dbSystem.getDatabase().query( + List sessions = dbSystem.getDatabase().query( SessionQueries.fetchServerSessionsWithoutKillOrWorldData(monthAgo, now, serverUUID) ); return Maps.builder(String.class, Object.class) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/calendar/PlayerCalendar.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/calendar/PlayerCalendar.java index 670e16bec..8a7c6b77b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/calendar/PlayerCalendar.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/calendar/PlayerCalendar.java @@ -18,10 +18,10 @@ package com.djrapitops.plan.delivery.rendering.json.graphs.calendar; import com.djrapitops.plan.delivery.domain.container.PlayerContainer; import com.djrapitops.plan.delivery.domain.keys.PlayerKeys; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.formatting.Formatter; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.PlayerKills; import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.settings.locale.lang.HtmlLang; import com.djrapitops.plan.settings.theme.Theme; @@ -45,7 +45,7 @@ public class PlayerCalendar { private final Locale locale; private final TimeZone timeZone; - private final List allSessions; + private final List allSessions; private final long registered; PlayerCalendar( @@ -77,14 +77,14 @@ public class PlayerCalendar { ).withColor(theme.getValue(ThemeVal.LIGHT_GREEN)) ); - Map> sessionsByDay = getSessionsByDay(); + Map> sessionsByDay = getSessionsByDay(); - for (Map.Entry> entry : sessionsByDay.entrySet()) { + for (Map.Entry> entry : sessionsByDay.entrySet()) { String day = entry.getKey(); - List sessions = entry.getValue(); + List sessions = entry.getValue(); int sessionCount = sessions.size(); - long playtime = sessions.stream().mapToLong(Session::getLength).sum(); + long playtime = sessions.stream().mapToLong(FinishedSession::getLength).sum(); entries.add(CalendarEntry .of(locale.getString(HtmlLang.LABEL_PLAYTIME) + ": " + timeAmount.apply(playtime), day) @@ -95,10 +95,10 @@ public class PlayerCalendar { long fiveMinutes = TimeUnit.MINUTES.toMillis(5L); - for (Session session : allSessions) { + for (FinishedSession session : allSessions) { String length = timeAmount.apply(session.getLength()); - Long start = session.getUnsafe(SessionKeys.START); - Long end = session.getValue(SessionKeys.END).orElse(System.currentTimeMillis()); + long start = session.getStart(); + long end = session.getEnd(); entries.add(CalendarEntry .of(locale.getString(HtmlLang.SESSION) + ": " + length, @@ -106,7 +106,7 @@ public class PlayerCalendar { .withEnd(end + timeZone.getOffset(end)) ); - for (PlayerKill kill : session.getPlayerKills()) { + for (PlayerKill kill : session.getExtraData(PlayerKills.class).map(PlayerKills::asList).orElseGet(ArrayList::new)) { long time = kill.getDate(); String victim = kill.getVictimName().orElse(kill.getVictim().toString()); entries.add(CalendarEntry @@ -120,12 +120,12 @@ public class PlayerCalendar { return entries; } - private Map> getSessionsByDay() { - Map> sessionsByDay = new HashMap<>(); - for (Session session : allSessions) { + private Map> getSessionsByDay() { + Map> sessionsByDay = new HashMap<>(); + for (FinishedSession session : allSessions) { String day = iso8601Formatter.apply(session.getDate()); - List sessionsOfDay = sessionsByDay.computeIfAbsent(day, Lists::create); + List sessionsOfDay = sessionsByDay.computeIfAbsent(day, Lists::create); sessionsOfDay.add(session); } return sessionsByDay; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java index aad410e33..60da8fdd1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/PieGraphFactory.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.delivery.rendering.json.graphs.pie; import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; import com.djrapitops.plan.gathering.domain.GMTimes; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.settings.config.paths.DisplaySettings; @@ -30,7 +31,6 @@ import com.djrapitops.plan.settings.theme.ThemeVal; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Map; -import java.util.UUID; /** * Factory class for different objects representing HTML pie graphs. @@ -60,7 +60,7 @@ public class PieGraphFactory { return new ActivityPie(activityData, colors, ActivityIndex.getGroups(locale)); } - public Pie serverPreferencePie(Map serverNames, Map serverWorldTimes) { + public Pie serverPreferencePie(Map serverNames, Map serverWorldTimes) { return new ServerPreferencePie(serverNames, serverWorldTimes, locale.get(GenericLang.UNKNOWN).toString()); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java index 7e2811dce..e6d4a7bbf 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/pie/ServerPreferencePie.java @@ -17,15 +17,15 @@ package com.djrapitops.plan.delivery.rendering.json.graphs.pie; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.UUID; public class ServerPreferencePie extends Pie { - ServerPreferencePie(Map serverNames, Map serverWorldTimes, String unknown) { + ServerPreferencePie(Map serverNames, Map serverWorldTimes, String unknown) { super(turnToSlices(serverNames, serverWorldTimes, unknown)); } @@ -33,11 +33,11 @@ public class ServerPreferencePie extends Pie { super(turnToSlices(serverPlaytimes)); } - private static List turnToSlices(Map serverNames, Map serverWorldTimes, String unknown) { + private static List turnToSlices(Map serverNames, Map serverWorldTimes, String unknown) { List slices = new ArrayList<>(); - for (Map.Entry server : serverWorldTimes.entrySet()) { - UUID serverUUID = server.getKey(); + for (Map.Entry server : serverWorldTimes.entrySet()) { + ServerUUID serverUUID = server.getKey(); WorldTimes worldTimes = server.getValue(); String serverName = serverNames.getOrDefault(serverUUID, unknown); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/special/SpecialGraphFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/special/SpecialGraphFactory.java index 73a4d4ca6..dc8726e35 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/special/SpecialGraphFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/graphs/special/SpecialGraphFactory.java @@ -17,7 +17,7 @@ package com.djrapitops.plan.delivery.rendering.json.graphs.special; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.settings.config.PlanConfig; import javax.inject.Inject; @@ -41,7 +41,7 @@ public class SpecialGraphFactory { this.config = config; } - public PunchCard punchCard(List sessions) { + public PunchCard punchCard(List sessions) { return punchCard(new SessionsMutator(sessions)); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java index 39bf1e334..48f688a54 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/json/network/NetworkOverviewJSONCreator.java @@ -23,6 +23,7 @@ import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.delivery.rendering.json.Trend; import com.djrapitops.plan.gathering.ServerSensor; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.TimeSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -37,7 +38,6 @@ import javax.inject.Singleton; import java.util.HashMap; import java.util.Map; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -114,7 +114,7 @@ public class NetworkOverviewJSONCreator implements NetworkTabJSONCreator> lastPeak = db.query(TPSQueries.fetchPeakPlayerCount(serverUUID, twoDaysAgo)); Optional> allTimePeak = db.query(TPSQueries.fetchAllTimePeakPlayerCount(serverUUID)); numbers.put("last_peak_date", lastPeak.map(year).orElse("-")); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/NetworkPage.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/NetworkPage.java index f6e9961ce..2faf0d81b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/NetworkPage.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/NetworkPage.java @@ -25,6 +25,7 @@ import com.djrapitops.plan.delivery.webserver.cache.JSONStorage; import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.implementation.storage.queries.ExtensionServerDataQuery; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.ProxySettings; import com.djrapitops.plan.settings.config.paths.WebserverSettings; @@ -37,7 +38,6 @@ import com.djrapitops.plan.version.VersionChecker; import org.apache.commons.lang3.StringUtils; import java.util.List; -import java.util.UUID; /** * Html String generator for /network page. @@ -84,7 +84,7 @@ public class NetworkPage implements Page { public String toHtml() { PlaceholderReplacer placeholders = new PlaceholderReplacer(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); placeholders.put("networkDisplayName", config.get(ProxySettings.NETWORK_NAME)); placeholders.put("serverName", config.get(ProxySettings.NETWORK_NAME)); placeholders.put("serverUUID", serverUUID.toString()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/PageFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/PageFactory.java index 9f184845a..fff82f89a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/PageFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/PageFactory.java @@ -26,6 +26,7 @@ import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.implementation.storage.queries.ExtensionPlayerDataQuery; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.settings.theme.Theme; @@ -97,7 +98,7 @@ public class PageFactory { * @throws NotFoundException If the server can not be found in the database. * @throws IOException If the template files can not be read. */ - public Page serverPage(UUID serverUUID) throws IOException { + public Page serverPage(ServerUUID serverUUID) throws IOException { Server server = dbSystem.get().getDatabase().query(ServerQueries.fetchServerMatchingIdentifier(serverUUID)) .orElseThrow(() -> new NotFoundException("Server not found in the database")); return new ServerPage( @@ -128,15 +129,15 @@ public class PageFactory { public PlayerPluginTab inspectPluginTabs(UUID playerUUID) { Database database = dbSystem.get().getDatabase(); - Map> extensionPlayerData = database.query(new ExtensionPlayerDataQuery(playerUUID)); + Map> extensionPlayerData = database.query(new ExtensionPlayerDataQuery(playerUUID)); if (extensionPlayerData.isEmpty()) { return new PlayerPluginTab("", Collections.emptyList(), formatters.get()); } List playerPluginTabs = new ArrayList<>(); - for (Map.Entry entry : database.query(ServerQueries.fetchPlanServerInformation()).entrySet()) { - UUID serverUUID = entry.getKey(); + for (Map.Entry entry : database.query(ServerQueries.fetchPlanServerInformation()).entrySet()) { + ServerUUID serverUUID = entry.getKey(); String serverName = entry.getValue().getIdentifiableName(); List ofServer = extensionPlayerData.get(serverUUID); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/ServerPage.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/ServerPage.java index ab1f48990..e46125130 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/ServerPage.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/rendering/pages/ServerPage.java @@ -27,6 +27,7 @@ import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.implementation.storage.queries.ExtensionServerDataQuery; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.WebserverSettings; import com.djrapitops.plan.settings.locale.Locale; @@ -37,7 +38,6 @@ import com.djrapitops.plan.utilities.java.UnaryChain; import com.djrapitops.plan.version.VersionChecker; import java.util.List; -import java.util.UUID; /** * Html String generator for /server page. @@ -84,7 +84,7 @@ public class ServerPage implements Page { public String toHtml() { PlaceholderReplacer placeholders = new PlaceholderReplacer(); - UUID serverUUID = server.getUuid(); + ServerUUID serverUUID = server.getUuid(); placeholders.put("serverUUID", serverUUID.toString()); placeholders.put("serverName", server.getIdentifiableName()); placeholders.put("serverDisplayName", server.getName()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java index 463c81a7f..15e059f09 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/ResponseFactory.java @@ -28,6 +28,7 @@ import com.djrapitops.plan.delivery.web.resolver.exception.NotFoundException; import com.djrapitops.plan.delivery.web.resource.WebResource; import com.djrapitops.plan.delivery.webserver.auth.FailReason; import com.djrapitops.plan.exceptions.WebUserAuthException; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.settings.locale.lang.ErrorPageLang; import com.djrapitops.plan.settings.theme.Theme; @@ -143,7 +144,7 @@ public class ResponseFactory { } } - public Response serverPageResponse(UUID serverUUID) { + public Response serverPageResponse(ServerUUID serverUUID) { Optional error = checkDbClosedError(); if (error.isPresent()) return error.get(); try { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/AsyncJSONResolverService.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/AsyncJSONResolverService.java index 7a005f9e5..5db71df30 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/AsyncJSONResolverService.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/AsyncJSONResolverService.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.delivery.webserver.cache; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.WebserverSettings; @@ -24,7 +25,6 @@ import com.djrapitops.plan.utilities.UnitSemaphoreAccessLock; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Map; -import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -62,7 +62,7 @@ public class AsyncJSONResolverService { } public JSONStorage.StoredJSON resolve( - long newerThanTimestamp, DataID dataID, UUID serverUUID, Function creator + long newerThanTimestamp, DataID dataID, ServerUUID serverUUID, Function creator ) { String identifier = dataID.of(serverUUID); Supplier jsonCreator = () -> creator.apply(serverUUID); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/DataID.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/DataID.java index c25c4e196..90642364f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/DataID.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/cache/DataID.java @@ -16,7 +16,7 @@ */ package com.djrapitops.plan.delivery.webserver.cache; -import java.util.UUID; +import com.djrapitops.plan.identification.ServerUUID; /** * Enum for different JSON data entries that can be stored in cache. @@ -52,8 +52,7 @@ public enum DataID { EXTENSION_TABS ; - public String of(UUID serverUUID) { + public String of(ServerUUID serverUUID) { return name() + '-' + serverUUID; } - } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/ServerPageResolver.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/ServerPageResolver.java index 49701fe8c..8bacfdfe7 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/ServerPageResolver.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/ServerPageResolver.java @@ -25,13 +25,13 @@ import com.djrapitops.plan.delivery.web.resolver.request.WebUser; import com.djrapitops.plan.delivery.webserver.ResponseFactory; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.queries.objects.ServerQueries; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Optional; -import java.util.UUID; /** * Resolves /network, /server and /server/${name/uuid} URLs. @@ -79,7 +79,7 @@ public class ServerPageResolver implements Resolver { return Optional.of(responseFactory.redirectResponse(directTo)); } - private Optional getServerPage(UUID serverUUID, Request request) { + private Optional getServerPage(ServerUUID serverUUID, Request request) { boolean toNetworkPage = serverInfo.getServer().isProxy() && serverInfo.getServerUUID().equals(serverUUID); if (toNetworkPage) { if (request.getPath().getPart(0).map("network"::equals).orElse(false)) { @@ -92,7 +92,7 @@ public class ServerPageResolver implements Resolver { return Optional.of(responseFactory.serverPageResponse(serverUUID)); } - private Optional getServerUUID(URIPath path) { + private Optional getServerUUID(URIPath path) { if (serverInfo.getServer().isProxy() && path.getPart(0).map("network"::equals).orElse(false) && !path.getPart(1).isPresent() // No slash at the end. diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/GraphsJSONResolver.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/GraphsJSONResolver.java index 89a67fd70..efb45c318 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/GraphsJSONResolver.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/GraphsJSONResolver.java @@ -27,12 +27,12 @@ import com.djrapitops.plan.delivery.webserver.cache.AsyncJSONResolverService; import com.djrapitops.plan.delivery.webserver.cache.DataID; import com.djrapitops.plan.delivery.webserver.cache.JSONStorage; import com.djrapitops.plan.identification.Identifiers; +import com.djrapitops.plan.identification.ServerUUID; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Collections; import java.util.Optional; -import java.util.UUID; /** * Resolves /v1/graph JSON requests. @@ -91,7 +91,7 @@ public class GraphsJSONResolver implements Resolver { JSONStorage.StoredJSON storedJSON; if (request.getQuery().get("server").isPresent()) { - UUID serverUUID = identifiers.getServerUUID(request); // Can throw BadRequestException + ServerUUID serverUUID = identifiers.getServerUUID(request); // Can throw BadRequestException storedJSON = jsonResolverService.resolve( timestamp, dataID, serverUUID, theServerUUID -> generateGraphDataJSONOfType(dataID, theServerUUID) @@ -138,7 +138,7 @@ public class GraphsJSONResolver implements Resolver { } } - private Object generateGraphDataJSONOfType(DataID id, UUID serverUUID) { + private Object generateGraphDataJSONOfType(DataID id, ServerUUID serverUUID) { switch (id) { case GRAPH_PERFORMANCE: return graphJSON.performanceGraphJSON(serverUUID); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayerKillsJSONResolver.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayerKillsJSONResolver.java index f45e867e5..0b797dc70 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayerKillsJSONResolver.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayerKillsJSONResolver.java @@ -26,12 +26,12 @@ import com.djrapitops.plan.delivery.webserver.cache.AsyncJSONResolverService; import com.djrapitops.plan.delivery.webserver.cache.DataID; import com.djrapitops.plan.delivery.webserver.cache.JSONStorage; import com.djrapitops.plan.identification.Identifiers; +import com.djrapitops.plan.identification.ServerUUID; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Collections; import java.util.Optional; -import java.util.UUID; /** * Resolves /v1/kills JSON requests. @@ -67,7 +67,7 @@ public class PlayerKillsJSONResolver implements Resolver { } private Response getResponse(Request request) { - UUID serverUUID = identifiers.getServerUUID(request); + ServerUUID serverUUID = identifiers.getServerUUID(request); long timestamp = Identifiers.getTimestamp(request); JSONStorage.StoredJSON storedJSON = jsonResolverService.resolve(timestamp, DataID.KILLS, serverUUID, theUUID -> Collections.singletonMap("player_kills", jsonFactory.serverPlayerKillsAsJSONMap(theUUID)) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayersTableJSONResolver.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayersTableJSONResolver.java index 1fd51dd6b..3e17cf30f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayersTableJSONResolver.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayersTableJSONResolver.java @@ -26,11 +26,11 @@ import com.djrapitops.plan.delivery.webserver.cache.AsyncJSONResolverService; import com.djrapitops.plan.delivery.webserver.cache.DataID; import com.djrapitops.plan.delivery.webserver.cache.JSONStorage; import com.djrapitops.plan.identification.Identifiers; +import com.djrapitops.plan.identification.ServerUUID; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Optional; -import java.util.UUID; /** * Resolves /v1/players JSON requests. @@ -81,7 +81,7 @@ public class PlayersTableJSONResolver implements Resolver { long timestamp = Identifiers.getTimestamp(request); JSONStorage.StoredJSON storedJSON; if (request.getQuery().get("server").isPresent()) { - UUID serverUUID = identifiers.getServerUUID(request); // Can throw BadRequestException + ServerUUID serverUUID = identifiers.getServerUUID(request); // Can throw BadRequestException storedJSON = jsonResolverService.resolve(timestamp, DataID.PLAYERS, serverUUID, jsonFactory::serverPlayersTableJSON); } else { // Assume players page diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/ServerTabJSONResolver.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/ServerTabJSONResolver.java index f990363d4..15e53cb3d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/ServerTabJSONResolver.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/ServerTabJSONResolver.java @@ -25,9 +25,9 @@ import com.djrapitops.plan.delivery.web.resolver.request.WebUser; import com.djrapitops.plan.delivery.webserver.cache.AsyncJSONResolverService; import com.djrapitops.plan.delivery.webserver.cache.DataID; import com.djrapitops.plan.identification.Identifiers; +import com.djrapitops.plan.identification.ServerUUID; import java.util.Optional; -import java.util.UUID; import java.util.function.Function; /** @@ -39,7 +39,7 @@ public class ServerTabJSONResolver implements Resolver { private final DataID dataID; private final Identifiers identifiers; - private final Function jsonCreator; + private final Function jsonCreator; private final AsyncJSONResolverService asyncJSONResolverService; public ServerTabJSONResolver( @@ -63,7 +63,7 @@ public class ServerTabJSONResolver implements Resolver { } private Response getResponse(Request request) { - UUID serverUUID = identifiers.getServerUUID(request); // Can throw BadRequestException + ServerUUID serverUUID = identifiers.getServerUUID(request); // Can throw BadRequestException return Response.builder() .setMimeType(MimeType.JSON) .setJSONContent(asyncJSONResolverService.resolve(Identifiers.getTimestamp(request), dataID, serverUUID, jsonCreator).json) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/SessionsJSONResolver.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/SessionsJSONResolver.java index 0d957c829..ef20212a9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/SessionsJSONResolver.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/SessionsJSONResolver.java @@ -26,12 +26,12 @@ import com.djrapitops.plan.delivery.webserver.cache.AsyncJSONResolverService; import com.djrapitops.plan.delivery.webserver.cache.DataID; import com.djrapitops.plan.delivery.webserver.cache.JSONStorage; import com.djrapitops.plan.identification.Identifiers; +import com.djrapitops.plan.identification.ServerUUID; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Collections; import java.util.Optional; -import java.util.UUID; /** * Resolves /v1/sessions JSON requests. @@ -76,7 +76,7 @@ public class SessionsJSONResolver implements Resolver { private JSONStorage.StoredJSON getStoredJSON(Request request) { long timestamp = Identifiers.getTimestamp(request); if (request.getQuery().get("server").isPresent()) { - UUID serverUUID = identifiers.getServerUUID(request); + ServerUUID serverUUID = identifiers.getServerUUID(request); return jsonResolverService.resolve(timestamp, DataID.SESSIONS, serverUUID, theUUID -> Collections.singletonMap("sessions", jsonFactory.serverSessionsAsJSONMap(theUUID)) ); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/Parameters.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/Parameters.java index 177b001c9..35c1f22bb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/Parameters.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/Parameters.java @@ -19,21 +19,22 @@ package com.djrapitops.plan.extension.implementation.providers; import com.djrapitops.plan.extension.DataExtension; import com.djrapitops.plan.extension.Group; import com.djrapitops.plan.extension.implementation.MethodType; +import com.djrapitops.plan.identification.ServerUUID; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.UUID; public interface Parameters { - static Parameters player(UUID serverUUID, UUID playerUUID, String playerName) { + static Parameters player(ServerUUID serverUUID, UUID playerUUID, String playerName) { return new PlayerParameters(serverUUID, playerUUID, playerName); } - static Parameters server(UUID serverUUID) { + static Parameters server(ServerUUID serverUUID) { return new ServerParameters(serverUUID); } - static Parameters group(UUID serverUUID, String groupName) { + static Parameters group(ServerUUID serverUUID, String groupName) { return new GroupParameters(serverUUID, groupName); } @@ -41,20 +42,20 @@ public interface Parameters { MethodType getMethodType(); - UUID getServerUUID(); + ServerUUID getServerUUID(); default UUID getPlayerUUID() { return null; } class ServerParameters implements Parameters { - private final UUID serverUUID; + private final ServerUUID serverUUID; - private ServerParameters(UUID serverUUID) { + private ServerParameters(ServerUUID serverUUID) { this.serverUUID = serverUUID; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return serverUUID; } @@ -70,17 +71,17 @@ public interface Parameters { } class PlayerParameters implements Parameters { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final UUID playerUUID; private final String playerName; - private PlayerParameters(UUID serverUUID, UUID playerUUID, String playerName) { + private PlayerParameters(ServerUUID serverUUID, UUID playerUUID, String playerName) { this.serverUUID = serverUUID; this.playerUUID = playerUUID; this.playerName = playerName; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return serverUUID; } @@ -106,15 +107,15 @@ public interface Parameters { } class GroupParameters implements Parameters { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String groupName; - private GroupParameters(UUID serverUUID, String groupName) { + private GroupParameters(ServerUUID serverUUID, String groupName) { this.serverUUID = serverUUID; this.groupName = groupName; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/ProviderIdentifier.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/ProviderIdentifier.java index 8aed71227..516061e73 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/ProviderIdentifier.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/ProviderIdentifier.java @@ -16,17 +16,18 @@ */ package com.djrapitops.plan.extension.implementation.providers; +import com.djrapitops.plan.identification.ServerUUID; + import java.util.Objects; import java.util.Optional; -import java.util.UUID; public class ProviderIdentifier { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String pluginName; private final String providerName; private String serverName; - public ProviderIdentifier(UUID serverUUID, String pluginName, String providerName) { + public ProviderIdentifier(ServerUUID serverUUID, String pluginName, String providerName) { this.serverUUID = serverUUID; this.pluginName = pluginName; this.providerName = providerName; @@ -40,7 +41,7 @@ public class ProviderIdentifier { this.serverName = serverName; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java index bf304fa7f..28032b6d5 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java @@ -28,6 +28,7 @@ import com.djrapitops.plan.extension.implementation.storage.transactions.StoreIc import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerBooleanResultTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.StoreServerBooleanResultTransaction; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.transactions.Transaction; @@ -45,14 +46,14 @@ class BooleanProviderValueGatherer { private final String pluginName; private final DataExtension extension; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final Database database; private final DataProviders dataProviders; BooleanProviderValueGatherer( String pluginName, - UUID serverUUID, Database database, + ServerUUID serverUUID, Database database, ExtensionWrapper extensionWrapper ) { this.pluginName = pluginName; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java index 888fa0dda..c46c9b6d4 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java @@ -31,6 +31,7 @@ import com.djrapitops.plan.extension.implementation.storage.transactions.StoreTa import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.*; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.transactions.Transaction; @@ -71,7 +72,7 @@ public class ProviderValueGatherer { this.serverInfo = serverInfo; String pluginName = extension.getPluginName(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); Database database = dbSystem.getDatabase(); dataProviders = extension.getProviders(); booleanGatherer = new BooleanProviderValueGatherer( @@ -130,7 +131,7 @@ public class ProviderValueGatherer { Icon pluginIcon = extensionWrapper.getPluginIcon(); long time = System.currentTimeMillis(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); Database database = dbSystem.getDatabase(); database.executeTransaction(new StoreIconTransaction(pluginIcon)); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/TableProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/TableProviderValueGatherer.java index df3a30d26..02abbcc86 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/TableProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/TableProviderValueGatherer.java @@ -30,6 +30,7 @@ import com.djrapitops.plan.extension.implementation.storage.transactions.provide import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerTableResultTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.StoreServerTableResultTransaction; import com.djrapitops.plan.extension.table.Table; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.transactions.Transaction; @@ -48,14 +49,14 @@ class TableProviderValueGatherer { private final String pluginName; private final DataExtension extension; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final Database database; private final DataProviders dataProviders; TableProviderValueGatherer( String pluginName, - UUID serverUUID, Database database, + ServerUUID serverUUID, Database database, ExtensionWrapper extensionWrapper ) { this.pluginName = pluginName; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateBooleansQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateBooleansQuery.java index 89dfc59fc..ea0bc791b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateBooleansQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateBooleansQuery.java @@ -25,6 +25,7 @@ import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.implementation.results.ExtensionDescriptive; import com.djrapitops.plan.extension.implementation.results.ExtensionDoubleData; import com.djrapitops.plan.extension.implementation.results.ExtensionTabData; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -35,7 +36,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.Optional; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -54,9 +54,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionAggregateBooleansQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ExtensionAggregateBooleansQuery(UUID serverUUID) { + public ExtensionAggregateBooleansQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateDoublesQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateDoublesQuery.java index 4a8934549..1fb1cf0fc 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateDoublesQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateDoublesQuery.java @@ -25,6 +25,7 @@ import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.implementation.results.ExtensionDescriptive; import com.djrapitops.plan.extension.implementation.results.ExtensionDoubleData; import com.djrapitops.plan.extension.implementation.results.ExtensionTabData; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -35,7 +36,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.Optional; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -53,9 +53,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionAggregateDoublesQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ExtensionAggregateDoublesQuery(UUID serverUUID) { + public ExtensionAggregateDoublesQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateGroupsQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateGroupsQuery.java index dd39a2440..b8e5b3938 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateGroupsQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateGroupsQuery.java @@ -23,6 +23,7 @@ import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.table.Table; import com.djrapitops.plan.extension.table.TableAccessor; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -33,7 +34,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.Optional; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -51,9 +51,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionAggregateGroupsQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ExtensionAggregateGroupsQuery(UUID serverUUID) { + public ExtensionAggregateGroupsQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateNumbersQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateNumbersQuery.java index 69daa7608..e9c9d2085 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateNumbersQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregateNumbersQuery.java @@ -26,6 +26,7 @@ import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.implementation.results.ExtensionDescriptive; import com.djrapitops.plan.extension.implementation.results.ExtensionNumberData; import com.djrapitops.plan.extension.implementation.results.ExtensionTabData; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -36,7 +37,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.Optional; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -54,9 +54,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionAggregateNumbersQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ExtensionAggregateNumbersQuery(UUID serverUUID) { + public ExtensionAggregateNumbersQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregatePercentagesQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregatePercentagesQuery.java index 795edafbe..c470cd90e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregatePercentagesQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionAggregatePercentagesQuery.java @@ -25,6 +25,7 @@ import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.implementation.results.ExtensionDescriptive; import com.djrapitops.plan.extension.implementation.results.ExtensionDoubleData; import com.djrapitops.plan.extension.implementation.results.ExtensionTabData; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -35,7 +36,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.Optional; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -53,9 +53,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionAggregatePercentagesQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ExtensionAggregatePercentagesQuery(UUID serverUUID) { + public ExtensionAggregatePercentagesQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionInformationQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionInformationQueries.java index 39caf0ea0..26fd2af79 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionInformationQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionInformationQueries.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.extension.icon.Color; import com.djrapitops.plan.extension.icon.Family; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.results.ExtensionInformation; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -30,7 +31,10 @@ import com.djrapitops.plan.utilities.java.Lists; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -45,7 +49,7 @@ public class ExtensionInformationQueries { /* Static method class */ } - public static Query> extensionsOfServer(UUID serverUUID) { + public static Query> extensionsOfServer(ServerUUID serverUUID) { String sql = SELECT + ExtensionPluginTable.TABLE_NAME + '.' + ExtensionPluginTable.ID + " as id," + ExtensionPluginTable.TABLE_NAME + '.' + ExtensionPluginTable.PLUGIN_NAME + " as plugin_name," + @@ -86,7 +90,7 @@ public class ExtensionInformationQueries { return new ExtensionInformation(id, pluginName, icon); } - public static Query>> allExtensions() { + public static Query>> allExtensions() { String sql = SELECT + ExtensionPluginTable.TABLE_NAME + '.' + ExtensionPluginTable.ID + " as id," + ExtensionPluginTable.TABLE_NAME + '.' + ExtensionPluginTable.PLUGIN_NAME + " as plugin_name," + @@ -98,12 +102,12 @@ public class ExtensionInformationQueries { INNER_JOIN + ExtensionIconTable.TABLE_NAME + " on " + ExtensionPluginTable.ICON_ID + "=" + ExtensionIconTable.TABLE_NAME + '.' + ExtensionIconTable.ID; - return new QueryAllStatement>>(sql, 100) { + return new QueryAllStatement>>(sql, 100) { @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> byServerUUID = new HashMap<>(); + public Map> processResults(ResultSet set) throws SQLException { + Map> byServerUUID = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(ExtensionPluginTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(ExtensionPluginTable.SERVER_UUID)); List information = byServerUUID.computeIfAbsent(serverUUID, Lists::create); information.add(extractExtensionInformationFromQuery(set)); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionPlayerDataQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionPlayerDataQuery.java index b7c212449..1389294ff 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionPlayerDataQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionPlayerDataQuery.java @@ -23,6 +23,7 @@ import com.djrapitops.plan.extension.icon.Family; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.TabInformation; import com.djrapitops.plan.extension.implementation.results.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -52,7 +53,7 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; * * @author AuroraLS3 */ -public class ExtensionPlayerDataQuery implements Query>> { +public class ExtensionPlayerDataQuery implements Query>> { private final UUID playerUUID; @@ -61,8 +62,8 @@ public class ExtensionPlayerDataQuery implements Query> executeQuery(SQLDB db) { - Map> extensionsByServerUUID = db.query(ExtensionInformationQueries.allExtensions()); + public Map> executeQuery(SQLDB db) { + Map> extensionsByServerUUID = db.query(ExtensionInformationQueries.allExtensions()); Map extensionDataByPluginID = db.query(fetchIncompletePlayerDataByPluginID()); combine(extensionDataByPluginID, db.query(new ExtensionPlayerTablesQuery(playerUUID))); @@ -88,11 +89,11 @@ public class ExtensionPlayerDataQuery implements Query> flatMapByServerUUID(Map> extensionsByServerUUID, Map extensionDataByPluginID) { - Map> extensionDataByServerUUID = new HashMap<>(); + private Map> flatMapByServerUUID(Map> extensionsByServerUUID, Map extensionDataByPluginID) { + Map> extensionDataByServerUUID = new HashMap<>(); - for (Map.Entry> entry : extensionsByServerUUID.entrySet()) { - UUID serverUUID = entry.getKey(); + for (Map.Entry> entry : extensionsByServerUUID.entrySet()) { + ServerUUID serverUUID = entry.getKey(); for (ExtensionInformation extensionInformation : entry.getValue()) { ExtensionData.Builder data = extensionDataByPluginID.get(extensionInformation.getId()); if (data == null) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionQueryResultTableDataQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionQueryResultTableDataQuery.java index 716b56f62..ce0e06e23 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionQueryResultTableDataQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionQueryResultTableDataQuery.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.icon.Color; import com.djrapitops.plan.extension.icon.Family; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.results.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -47,10 +48,10 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionQueryResultTableDataQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final Collection playerUUIDs; - public ExtensionQueryResultTableDataQuery(UUID serverUUID, Collection playerUUIDs) { + public ExtensionQueryResultTableDataQuery(ServerUUID serverUUID, Collection playerUUIDs) { this.serverUUID = serverUUID; this.playerUUIDs = playerUUIDs; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerDataQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerDataQuery.java index e8a5348e0..bb9b5c3df 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerDataQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerDataQuery.java @@ -23,6 +23,7 @@ import com.djrapitops.plan.extension.icon.Family; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.TabInformation; import com.djrapitops.plan.extension.implementation.results.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -31,7 +32,10 @@ import com.djrapitops.plan.storage.database.sql.tables.*; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -50,9 +54,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionServerDataQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ExtensionServerDataQuery(UUID serverUUID) { + public ExtensionServerDataQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTableDataQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTableDataQuery.java index d0b02cb93..64d2c445e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTableDataQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTableDataQuery.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.icon.Color; import com.djrapitops.plan.extension.icon.Family; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.results.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -45,10 +46,10 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionServerTableDataQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final int xMostRecentPlayers; - public ExtensionServerTableDataQuery(UUID serverUUID, int xMostRecentPlayers) { + public ExtensionServerTableDataQuery(ServerUUID serverUUID, int xMostRecentPlayers) { this.serverUUID = serverUUID; this.xMostRecentPlayers = xMostRecentPlayers; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTablesQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTablesQuery.java index 2767958d5..6c38610ab 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTablesQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionServerTablesQuery.java @@ -23,6 +23,7 @@ import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.results.ExtensionData; import com.djrapitops.plan.extension.table.Table; import com.djrapitops.plan.extension.table.TableAccessor; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -31,7 +32,10 @@ import com.djrapitops.plan.storage.database.sql.tables.*; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -49,9 +53,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ExtensionServerTablesQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ExtensionServerTablesQuery(UUID serverUUID) { + public ExtensionServerTablesQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionUUIDsInGroupQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionUUIDsInGroupQuery.java index ff307ddd3..bc74cf8a5 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionUUIDsInGroupQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/queries/ExtensionUUIDsInGroupQuery.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation.storage.queries; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.ExtensionGroupsTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; @@ -32,10 +33,10 @@ public class ExtensionUUIDsInGroupQuery extends QueryStatement> { private final String pluginName; private final String groupProvider; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final List inGroups; - public ExtensionUUIDsInGroupQuery(String pluginName, String groupProvider, UUID serverUUID, List inGroups) { + public ExtensionUUIDsInGroupQuery(String pluginName, String groupProvider, ServerUUID serverUUID, List inGroups) { super(buildSQL(inGroups), 100); this.pluginName = pluginName; this.groupProvider = groupProvider; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StorePluginTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StorePluginTransaction.java index 82229d352..fb069d6fb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StorePluginTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StorePluginTransaction.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions; import com.djrapitops.plan.extension.icon.Icon; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; @@ -25,7 +26,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.AND; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; @@ -39,10 +39,10 @@ public class StorePluginTransaction extends ThrowawayTransaction { private final String pluginName; private final long time; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final Icon icon; - public StorePluginTransaction(String pluginName, long time, UUID serverUUID, Icon icon) { + public StorePluginTransaction(String pluginName, long time, ServerUUID serverUUID, Icon icon) { this.pluginName = pluginName; this.time = time; this.serverUUID = serverUUID; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StoreTabInformationTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StoreTabInformationTransaction.java index 0894670c1..40b7fdd8d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StoreTabInformationTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/StoreTabInformationTransaction.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions; import com.djrapitops.plan.extension.implementation.TabInformation; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionTabTable; @@ -26,7 +27,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.AND; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; @@ -39,10 +39,10 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; public class StoreTabInformationTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final TabInformation tabInformation; - public StoreTabInformationTransaction(String pluginName, UUID serverUUID, TabInformation tabInformation) { + public StoreTabInformationTransaction(String pluginName, ServerUUID serverUUID, TabInformation tabInformation) { this.pluginName = pluginName; this.serverUUID = serverUUID; this.tabInformation = tabInformation; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreProviderTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreProviderTransaction.java index 52e617fbb..04bda1229 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreProviderTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreProviderTransaction.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.provid import com.djrapitops.plan.extension.FormatType; import com.djrapitops.plan.extension.implementation.ProviderInformation; import com.djrapitops.plan.extension.implementation.providers.DataProvider; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.building.Sql; import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable; @@ -29,7 +30,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.AND; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; @@ -43,9 +43,9 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderT public class StoreProviderTransaction extends ThrowawayTransaction { private final DataProvider provider; - private final UUID serverUUID; + private final ServerUUID serverUUID; - public StoreProviderTransaction(DataProvider provider, UUID serverUUID) { + public StoreProviderTransaction(DataProvider provider, ServerUUID serverUUID) { this.provider = provider; this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreTableProviderTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreTableProviderTransaction.java index 7154bb72c..85f2f67fa 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreTableProviderTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreTableProviderTransaction.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.provid import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.ProviderInformation; import com.djrapitops.plan.extension.table.Table; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionTabTable; @@ -29,7 +30,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.AND; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; @@ -42,11 +42,11 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionTableProv */ public class StoreTableProviderTransaction extends ThrowawayTransaction { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final ProviderInformation information; private final Table table; - public StoreTableProviderTransaction(UUID serverUUID, ProviderInformation information, Table table) { + public StoreTableProviderTransaction(ServerUUID serverUUID, ProviderInformation information, Table table) { this.information = information; this.table = table; this.serverUUID = serverUUID; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/RemoveInvalidResultsTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/RemoveInvalidResultsTransaction.java index 408e49129..5b9a9744b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/RemoveInvalidResultsTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/RemoveInvalidResultsTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation.storage.transactions.results; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.*; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -24,7 +25,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Collection; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -36,10 +36,10 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; public class RemoveInvalidResultsTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final Collection invalidatedMethods; - public RemoveInvalidResultsTransaction(String pluginName, UUID serverUUID, Collection invalidatedMethods) { + public RemoveInvalidResultsTransaction(String pluginName, ServerUUID serverUUID, Collection invalidatedMethods) { this.pluginName = pluginName; this.serverUUID = serverUUID; this.invalidatedMethods = invalidatedMethods; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerBooleanResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerBooleanResultTransaction.java index 61c4399bd..ccf085fcd 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerBooleanResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerBooleanResultTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation.storage.transactions.results; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -37,13 +38,13 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionPlayerVal public class StorePlayerBooleanResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final UUID playerUUID; private final boolean value; - public StorePlayerBooleanResultTransaction(String pluginName, UUID serverUUID, String providerName, UUID playerUUID, boolean value) { + public StorePlayerBooleanResultTransaction(String pluginName, ServerUUID serverUUID, String providerName, UUID playerUUID, boolean value) { this.pluginName = pluginName; this.serverUUID = serverUUID; this.providerName = providerName; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerDoubleResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerDoubleResultTransaction.java index f74125069..2cdae6635 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerDoubleResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerDoubleResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.Parameters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -43,7 +44,7 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerVal public class StorePlayerDoubleResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final UUID playerUUID; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerGroupsResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerGroupsResultTransaction.java index cd988b9dd..89609d427 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerGroupsResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerGroupsResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.Parameters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionGroupsTable; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; @@ -39,7 +40,7 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; public class StorePlayerGroupsResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final UUID playerUUID; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerNumberResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerNumberResultTransaction.java index beaec4d16..078e414b7 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerNumberResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerNumberResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.Parameters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -39,7 +40,7 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionPlayerVal public class StorePlayerNumberResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final UUID playerUUID; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerStringResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerStringResultTransaction.java index 8c987c3c2..35e16b0c2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerStringResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerStringResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.Parameters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -40,7 +41,7 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionPlayerVal public class StorePlayerStringResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final UUID playerUUID; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerTableResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerTableResultTransaction.java index 25a9d7024..aade948fd 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerTableResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StorePlayerTableResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.extension.table.Table; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable; @@ -45,13 +46,13 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionPlayerTab public class StorePlayerTableResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final UUID playerUUID; private final Table table; - public StorePlayerTableResultTransaction(String pluginName, UUID serverUUID, String providerName, UUID playerUUID, Table table) { + public StorePlayerTableResultTransaction(String pluginName, ServerUUID serverUUID, String providerName, UUID playerUUID, Table table) { this.pluginName = pluginName; this.serverUUID = serverUUID; this.providerName = providerName; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerBooleanResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerBooleanResultTransaction.java index 3a8aba3bd..c1c12883a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerBooleanResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerBooleanResultTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation.storage.transactions.results; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -23,7 +24,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerValueTable.*; @@ -36,12 +36,12 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerVal public class StoreServerBooleanResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final boolean value; - public StoreServerBooleanResultTransaction(String pluginName, UUID serverUUID, String providerName, boolean value) { + public StoreServerBooleanResultTransaction(String pluginName, ServerUUID serverUUID, String providerName, boolean value) { this.pluginName = pluginName; this.serverUUID = serverUUID; this.providerName = providerName; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerDoubleResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerDoubleResultTransaction.java index 2088addb8..6d61c3b1c 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerDoubleResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerDoubleResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.Parameters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -25,7 +26,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerValueTable.*; @@ -38,7 +38,7 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerVal public class StoreServerDoubleResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final double value; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerNumberResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerNumberResultTransaction.java index 139a48351..66b3b6cf0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerNumberResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerNumberResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.Parameters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -25,7 +26,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerValueTable.*; @@ -38,7 +38,7 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerVal public class StoreServerNumberResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final long value; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerStringResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerStringResultTransaction.java index 77dd08b20..c6f3377f5 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerStringResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerStringResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.Parameters; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -26,7 +27,6 @@ import org.apache.commons.lang3.StringUtils; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerValueTable.*; @@ -39,7 +39,7 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerVal public class StoreServerStringResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final String value; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerTableResultTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerTableResultTransaction.java index 469b33c61..20542a062 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerTableResultTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/results/StoreServerTableResultTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.extension.implementation.storage.transactions.result import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.extension.table.Table; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable; @@ -32,7 +33,6 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerTableValueTable.*; @@ -45,12 +45,12 @@ import static com.djrapitops.plan.storage.database.sql.tables.ExtensionServerTab public class StoreServerTableResultTransaction extends ThrowawayTransaction { private final String pluginName; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String providerName; private final Table table; - public StoreServerTableResultTransaction(String pluginName, UUID serverUUID, String providerName, Table table) { + public StoreServerTableResultTransaction(String pluginName, ServerUUID serverUUID, String providerName, Table table) { this.pluginName = pluginName; this.serverUUID = serverUUID; this.providerName = providerName; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/ServerShutdownSave.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/ServerShutdownSave.java index f5385d44a..38bfe1e42 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/ServerShutdownSave.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/ServerShutdownSave.java @@ -16,10 +16,10 @@ */ package com.djrapitops.plan.gathering; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.exceptions.database.DBInitException; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.settings.locale.lang.PluginLang; import com.djrapitops.plan.storage.database.DBSystem; @@ -29,10 +29,10 @@ import com.djrapitops.plan.utilities.logging.ErrorContext; import com.djrapitops.plan.utilities.logging.ErrorLogger; import net.playeranalytics.plugin.server.PluginLogger; -import java.util.Map; +import java.util.Collection; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.Future; +import java.util.stream.Collectors; /** * Class in charge of performing save operations when the server shuts down. @@ -72,7 +72,7 @@ public abstract class ServerShutdownSave { return Optional.empty(); } - Map activeSessions = SessionCache.getActiveSessions(); + Collection activeSessions = SessionCache.getActiveSessions(); if (activeSessions.isEmpty()) { return Optional.empty(); } @@ -85,10 +85,9 @@ public abstract class ServerShutdownSave { return attemptSave(activeSessions); } - private Optional> attemptSave(Map activeSessions) { + private Optional> attemptSave(Collection activeSessions) { try { - prepareSessionsForStorage(activeSessions, System.currentTimeMillis()); - return Optional.of(saveActiveSessions(activeSessions)); + return Optional.of(saveActiveSessions(finishSessions(activeSessions, System.currentTimeMillis()))); } catch (DBInitException e) { errorLogger.error(e, ErrorContext.builder() .whatToDo("Find the sessions in the error file and save them manually or ignore. Report & delete the error file after.") @@ -104,7 +103,7 @@ public abstract class ServerShutdownSave { } } - private Future saveActiveSessions(Map activeSessions) { + private Future saveActiveSessions(Collection finishedSessions) { Database database = dbSystem.getDatabase(); if (database.getState() == Database.State.CLOSED) { // Ensure that database is not closed when performing the transaction. @@ -112,20 +111,15 @@ public abstract class ServerShutdownSave { database.init(); } - return saveSessions(activeSessions, database); + return saveSessions(finishedSessions, database); } - void prepareSessionsForStorage(Map activeSessions, long now) { - for (Session session : activeSessions.values()) { - Optional end = session.getValue(SessionKeys.END); - if (!end.isPresent()) { - session.endSession(now); - } - } + Collection finishSessions(Collection activeSessions, long now) { + return activeSessions.stream().map(session -> session.toFinishedSession(now)).collect(Collectors.toList()); } - private Future saveSessions(Map activeSessions, Database database) { - return database.executeTransaction(new ServerShutdownTransaction(activeSessions.values())); + private Future saveSessions(Collection finishedSessions, Database database) { + return database.executeTransaction(new ServerShutdownTransaction(finishedSessions)); } private void closeDatabase(Database database) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/afk/AFKTracker.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/afk/AFKTracker.java index 2027db9a7..d08a4a8f0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/afk/AFKTracker.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/afk/AFKTracker.java @@ -74,7 +74,7 @@ public class AFKTracker { long timeAFK = time - lastMoved - removeAfkCommandEffect; SessionCache.getCachedSession(uuid) - .ifPresent(session -> session.addAFKTime(timeAFK)); + .ifPresent(session -> session.addAfkTime(timeAFK)); } finally { usedAFKCommand.remove(uuid); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/cache/SessionCache.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/cache/SessionCache.java index fa757ec86..d9afef3a2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/cache/SessionCache.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/cache/SessionCache.java @@ -16,8 +16,8 @@ */ package com.djrapitops.plan.gathering.cache; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.FinishedSession; import javax.inject.Inject; import javax.inject.Singleton; @@ -32,16 +32,16 @@ import java.util.concurrent.ConcurrentHashMap; @Singleton public class SessionCache { - private static final Map ACTIVE_SESSIONS = new ConcurrentHashMap<>(); + private static final Map ACTIVE_SESSIONS = new ConcurrentHashMap<>(); @Inject public SessionCache() { // Dagger requires empty inject constructor } - public static Map getActiveSessions() { + public static Collection getActiveSessions() { refreshActiveSessionsState(); - return Collections.unmodifiableMap(new HashMap<>(ACTIVE_SESSIONS)); + return new HashSet<>(ACTIVE_SESSIONS.values()); } public static void clear() { @@ -49,7 +49,7 @@ public class SessionCache { } public static void refreshActiveSessionsState() { - ACTIVE_SESSIONS.values().forEach(Session::updateState); + ACTIVE_SESSIONS.values().forEach(ActiveSession::updateState); } /** @@ -58,9 +58,9 @@ public class SessionCache { * @param playerUUID UUID of the player. * @return Optional with the session inside it if found. */ - public static Optional getCachedSession(UUID playerUUID) { - Optional found = Optional.ofNullable(ACTIVE_SESSIONS.get(playerUUID)); - found.ifPresent(Session::updateState); + public static Optional getCachedSession(UUID playerUUID) { + Optional found = Optional.ofNullable(ACTIVE_SESSIONS.get(playerUUID)); + found.ifPresent(ActiveSession::updateState); return found; } @@ -68,32 +68,36 @@ public class SessionCache { * Cache a new session. * * @param playerUUID UUID of the player - * @param session Session to cache. + * @param newSession Session to cache. * @return Optional: previous session. Recipients of this object should decide if it needs to be saved. */ - public Optional cacheSession(UUID playerUUID, Session session) { - Optional inProgress = Optional.empty(); - if (getCachedSession(playerUUID).isPresent()) { - inProgress = endSession(playerUUID, session.getUnsafe(SessionKeys.START)); + public Optional cacheSession(UUID playerUUID, ActiveSession newSession) { + Optional inProgress = getCachedSession(playerUUID); + Optional finished = Optional.empty(); + if (inProgress.isPresent()) { + finished = endSession(playerUUID, newSession.getStart(), inProgress.get()); } - ACTIVE_SESSIONS.put(playerUUID, session); - return inProgress; + ACTIVE_SESSIONS.put(playerUUID, newSession); + return finished; } /** * End a session and save it to database. * - * @param playerUUID UUID of the player. - * @param time Time the session ended. + * @param playerUUID UUID of the player. + * @param time Time the session ended. + * @param activeSession Currently active session * @return Optional: ended session. Recipients of this object should decide if it needs to be saved. */ - public Optional endSession(UUID playerUUID, long time) { - Session session = ACTIVE_SESSIONS.get(playerUUID); - if (session == null || session.getUnsafe(SessionKeys.START) > time) { + public Optional endSession(UUID playerUUID, long time, ActiveSession activeSession) { + if (activeSession == null || activeSession.getStart() > time) { return Optional.empty(); } ACTIVE_SESSIONS.remove(playerUUID); - session.endSession(time); - return Optional.of(session); + return Optional.of(activeSession.toFinishedSession(time)); + } + + public Optional endSession(UUID playerUUID, long time) { + return endSession(playerUUID, time, ACTIVE_SESSIONS.get(playerUUID)); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/ActiveSession.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/ActiveSession.java new file mode 100644 index 000000000..233380b6c --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/ActiveSession.java @@ -0,0 +1,143 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +import com.djrapitops.plan.gathering.domain.event.PlayerJoin; +import com.djrapitops.plan.identification.ServerUUID; + +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +public class ActiveSession { + + private final UUID playerUUID; + private final ServerUUID serverUUID; + private final long start; + private final DataMap extraData; + private long afkTime; + + public ActiveSession(UUID playerUUID, ServerUUID serverUUID, long start, String world, String gameMode) { + this.playerUUID = playerUUID; + this.serverUUID = serverUUID; + this.start = start; + this.afkTime = 0L; + + extraData = new DataMap(); + extraData.put(WorldTimes.class, new WorldTimes(world, gameMode, start)); + extraData.put(MobKillCounter.class, new MobKillCounter()); + extraData.put(DeathCounter.class, new DeathCounter()); + extraData.put(PlayerKills.class, new PlayerKills()); + } + + public static ActiveSession fromPlayerJoin(PlayerJoin join) { + return new ActiveSession(join.getPlayerUUID(), join.getServerUUID(), join.getTime(), join.getWorld(), join.getGameMode()); + } + + public FinishedSession toFinishedSessionFromStillActive() { + FinishedSession finishedSession = toFinishedSession(System.currentTimeMillis()); + finishedSession.getExtraData().put(ActiveSession.class, this); + return finishedSession; + } + + public FinishedSession toFinishedSession(long end) { + return new FinishedSession(playerUUID, serverUUID, start, end, afkTime, extraData); + } + + public UUID getPlayerUUID() { + return playerUUID; + } + + public ServerUUID getServerUUID() { + return serverUUID; + } + + public long getStart() { + return start; + } + + public void addAfkTime(long time) { + afkTime += time; + } + + public void addDeath() { + extraData.get(DeathCounter.class).ifPresent(Counter::add); + } + + public void addMobKill() { + extraData.get(MobKillCounter.class).ifPresent(Counter::add); + } + + public void addPlayerKill(PlayerKill kill) { + extraData.get(PlayerKills.class).ifPresent(kills -> kills.add(kill)); + } + + public void setAsFirstSessionIfMatches(Long registerDate) { + if (registerDate != null && Math.abs(start - registerDate) < TimeUnit.SECONDS.toMillis(15L)) { + extraData.put(FirstSession.class, new FirstSession()); + } + } + + public DataMap getExtraData() { + return extraData; + } + + public void updateState() { + extraData.get(WorldTimes.class).ifPresent(times -> times.updateState(System.currentTimeMillis())); + } + + public void changeState(String world, String gameMode, long time) { + extraData.get(WorldTimes.class).ifPresent(times -> times.updateState(world, gameMode, time)); + } + + public Optional getExtraData(Class ofType) { + return getExtraData().get(ofType); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ActiveSession that = (ActiveSession) o; + return start == that.start && afkTime == that.afkTime && + Objects.equals(playerUUID, that.playerUUID) && + Objects.equals(serverUUID, that.serverUUID) && + Objects.equals(getExtraData(WorldTimes.class), that.getExtraData(WorldTimes.class)) && + Objects.equals(getExtraData(PlayerKills.class), that.getExtraData(PlayerKills.class)) && + Objects.equals(getExtraData(MobKillCounter.class), that.getExtraData(MobKillCounter.class)) && + Objects.equals(getExtraData(DeathCounter.class), that.getExtraData(DeathCounter.class)); + } + + @Override + public int hashCode() { + return Objects.hash(playerUUID, serverUUID, start, afkTime, extraData); + } + + @Override + public String toString() { + return "ActiveSession{" + + "playerUUID=" + playerUUID + + ", serverUUID=" + serverUUID + + ", start=" + start + + ", afkTime=" + afkTime + + ", extraData=" + extraData + + '}'; + } + + public static class FirstSession {} +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Counter.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Counter.java new file mode 100644 index 000000000..6bacaa7b3 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Counter.java @@ -0,0 +1,60 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +import java.util.Objects; + +public class Counter { + + private int count; + + public Counter() { + this(0); + } + + public Counter(int count) { + this.count = count; + } + + public int getCount() { + return count; + } + + public void add() { + count++; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Counter counter = (Counter) o; + return count == counter.count; + } + + @Override + public int hashCode() { + return Objects.hash(count); + } + + @Override + public String toString() { + return "Counter{" + + "count=" + count + + '}'; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/DataMap.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/DataMap.java new file mode 100644 index 000000000..e48389f8c --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/DataMap.java @@ -0,0 +1,60 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +public class DataMap { + + private final Map, Object> data; + + public DataMap() { + this.data = new HashMap<>(); + } + + public void put(Class type, T value) { + data.put(type, value); + } + + public Optional get(Class ofType) { + return Optional.ofNullable(ofType.cast(data.get(ofType))); + } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DataMap dataMap = (DataMap) o; + return Objects.equals(data, dataMap.data); + } + + @Override + public int hashCode() { + return Objects.hash(data); + } + + @Override + public String toString() { + return "DataMap{" + + "data=" + data + + '}'; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/DeathCounter.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/DeathCounter.java new file mode 100644 index 000000000..19bb60293 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/DeathCounter.java @@ -0,0 +1,29 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +public class DeathCounter extends Counter { + + public DeathCounter() { + } + + public DeathCounter(int count) { + super(count); + } + + +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/FinishedSession.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/FinishedSession.java new file mode 100644 index 000000000..a78685c92 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/FinishedSession.java @@ -0,0 +1,157 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +import com.djrapitops.plan.delivery.domain.DateHolder; +import com.djrapitops.plan.identification.ServerUUID; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +public class FinishedSession implements DateHolder { + + private final UUID playerUUID; + private final ServerUUID serverUUID; + private final long start; + private final long end; + + private final long afkTime; + private final DataMap extraData; + + public FinishedSession( + UUID playerUUID, ServerUUID serverUUID, + long start, long end, long afkTime, + DataMap extraData + ) { + this.playerUUID = playerUUID; + this.serverUUID = serverUUID; + this.start = start; + this.end = end; + this.afkTime = afkTime; + this.extraData = extraData; + } + + public UUID getPlayerUUID() { + return playerUUID; + } + + public ServerUUID getServerUUID() { + return serverUUID; + } + + public long getStart() { + return start; + } + + public long getEnd() { + return end; + } + + public long getAfkTime() { + return afkTime; + } + + public long getLength() { + return end - start; + } + + public long getActiveTime() { + return getLength() - getAfkTime(); + } + + public int getMobKillCount() { + return extraData.get(MobKillCounter.class).map(MobKillCounter::getCount).orElse(0); + } + + public int getDeathCount() { + return extraData.get(DeathCounter.class).map(DeathCounter::getCount).orElse(0); + } + + public int getPlayerKillCount() { + return extraData.get(PlayerKills.class).map(PlayerKills::asList).map(List::size).orElse(0); + } + + public void setAsFirstSessionIfMatches(Long registerDate) { + if (registerDate != null && Math.abs(start - registerDate) < TimeUnit.SECONDS.toMillis(15L)) { + extraData.put(ActiveSession.FirstSession.class, new ActiveSession.FirstSession()); + } + } + + public boolean isFirstSession() { + return extraData.get(ActiveSession.FirstSession.class).isPresent(); + } + + public DataMap getExtraData() { + return extraData; + } + + public Optional getExtraData(Class ofType) { + return getExtraData().get(ofType); + } + + @Override + public long getDate() { + return getStart(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FinishedSession that = (FinishedSession) o; + return start == that.start && end == that.end && + afkTime == that.afkTime && + Objects.equals(playerUUID, that.playerUUID) && + Objects.equals(serverUUID, that.serverUUID) && + Objects.equals(getExtraData(WorldTimes.class), that.getExtraData(WorldTimes.class)) && + Objects.equals(getExtraData(PlayerKills.class), that.getExtraData(PlayerKills.class)) && + Objects.equals(getExtraData(MobKillCounter.class), that.getExtraData(MobKillCounter.class)) && + Objects.equals(getExtraData(DeathCounter.class), that.getExtraData(DeathCounter.class)); + } + + @Override + public int hashCode() { + return Objects.hash(playerUUID, serverUUID, start, end, afkTime, extraData); + } + + @Override + public String toString() { + return "FinishedSession{" + + "playerUUID=" + playerUUID + + ", serverUUID=" + serverUUID + + ", start=" + start + + ", end=" + end + + ", afkTime=" + afkTime + + ", extraData=" + extraData + + '}'; + } + + public static class Id { + private final int id; + + public Id(int id) { + this.id = id; + } + + public int get() { + return id; + } + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/GMTimes.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/GMTimes.java index cf2aa8202..1e79cd901 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/GMTimes.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/GMTimes.java @@ -114,4 +114,13 @@ public class GMTimes extends TimeKeeper { String state = super.getState(); return state != null ? state : SURVIVAL; } + + @Override + public String toString() { + return "GMTimes{" + + "times=" + times + + ", state='" + state + '\'' + + ", lastStateChange=" + lastStateChange + + '}'; + } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/MobKillCounter.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/MobKillCounter.java new file mode 100644 index 000000000..50e1e613a --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/MobKillCounter.java @@ -0,0 +1,27 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +public class MobKillCounter extends Counter { + + public MobKillCounter() { + } + + public MobKillCounter(int count) { + super(count); + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Ping.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Ping.java index 795deeac3..ddc19e200 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Ping.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Ping.java @@ -17,18 +17,18 @@ package com.djrapitops.plan.gathering.domain; import com.djrapitops.plan.delivery.domain.DateObj; +import com.djrapitops.plan.identification.ServerUUID; import java.util.Objects; -import java.util.UUID; public class Ping extends DateObj { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final double average; private final int min; private final int max; - public Ping(long date, UUID serverUUID, int min, int max, double average) { + public Ping(long date, ServerUUID serverUUID, int min, int max, double average) { super(date, average); this.serverUUID = serverUUID; this.average = average; @@ -36,7 +36,7 @@ public class Ping extends DateObj { this.max = max; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/PlayerDeaths.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/PlayerDeaths.java new file mode 100644 index 000000000..1aeb1a58a --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/PlayerDeaths.java @@ -0,0 +1,55 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +import java.util.ArrayList; +import java.util.List; + +public class PlayerDeaths { + + private final DeathCounter deathCounter; + private final List deaths; + + public PlayerDeaths(DeathCounter deathCounter) { + this(deathCounter, new ArrayList<>()); + } + + public PlayerDeaths(DeathCounter deathCounter, List deaths) { + this.deathCounter = deathCounter; + this.deaths = deaths; + } + + public void add(PlayerKill kill) { + deaths.add(kill); + } + + public List playerCausedDeathsAsList() { + return deaths; + } + + public int getDeathCount() { + return deathCounter.getCount(); + } + + public int getPlayerCausedDeathCount() { + return playerCausedDeathsAsList().size(); + } + + public int getMobCausedDeathCount() { + return getDeathCount() - getPlayerCausedDeathCount(); + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/PlayerKills.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/PlayerKills.java new file mode 100644 index 000000000..9fb434299 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/PlayerKills.java @@ -0,0 +1,76 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain; + +import com.djrapitops.plan.utilities.comparators.DateHolderRecentComparator; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + +public class PlayerKills { + + private final List kills; + + public PlayerKills() { + this(new ArrayList<>()); + } + + public PlayerKills(List kills) { + this.kills = kills; + kills.sort(new DateHolderRecentComparator()); + } + + public void add(PlayerKill kill) { + kills.add(kill); + kills.sort(new DateHolderRecentComparator()); + } + + public List asList() { + return kills; + } + + public void addAll(Collection randomKills) { + this.kills.addAll(randomKills); + kills.sort(new DateHolderRecentComparator()); + } + + public boolean contains(PlayerKill newKill) { + return kills.contains(newKill); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PlayerKills that = (PlayerKills) o; + return Objects.equals(kills, that.kills); + } + + @Override + public int hashCode() { + return Objects.hash(kills); + } + + @Override + public String toString() { + return "PlayerKills{" + + "kills=" + kills + + '}'; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Session.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Session.java deleted file mode 100644 index 1eb87f993..000000000 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/Session.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * This file is part of Player Analytics (Plan). - * - * Plan is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License v3 as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Plan is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Plan. If not, see . - */ -package com.djrapitops.plan.gathering.domain; - -import com.djrapitops.plan.delivery.domain.DateHolder; -import com.djrapitops.plan.delivery.domain.container.DynamicDataContainer; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; -import com.djrapitops.plan.utilities.comparators.DateHolderRecentComparator; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -/** - * DataContainer for information about a player's play session. - * - * @author AuroraLS3 - * @see SessionKeys for Key objects. - */ -public class Session extends DynamicDataContainer implements DateHolder { - - private final long sessionStart; - private WorldTimes worldTimes; - private List playerKills; - - private int mobKills; - private int deaths; - private long afkTime; - private boolean firstSession; - - /** - * Creates a new session based on a join event. - * - * @param uuid UUID of the Player. - * @param serverUUID UUID of the server. - * @param sessionStart Epoch ms the session started. - * @param world Starting world. - * @param gm Starting GameMode. - */ - public Session(UUID uuid, UUID serverUUID, long sessionStart, String world, String gm) { - this.sessionStart = sessionStart; - worldTimes = new WorldTimes(world, gm, sessionStart); - playerKills = new ArrayList<>(); - - mobKills = 0; - deaths = 0; - afkTime = 0; - - putRawData(SessionKeys.UUID, uuid); - putRawData(SessionKeys.SERVER_UUID, serverUUID); - putSupplier(SessionKeys.START, this::getSessionStart); - putSupplier(SessionKeys.WORLD_TIMES, this::getWorldTimes); - putSupplier(SessionKeys.PLAYER_KILLS, this::getPlayerKills); - putSupplier(SessionKeys.MOB_KILL_COUNT, this::getMobKills); - putSupplier(SessionKeys.DEATH_COUNT, this::getDeaths); - putSupplier(SessionKeys.AFK_TIME, this::getAfkTime); - - putSupplier(SessionKeys.PLAYER_KILL_COUNT, getUnsafe(SessionKeys.PLAYER_KILLS)::size); - putSupplier(SessionKeys.LENGTH, () -> - getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START)); - putSupplier(SessionKeys.ACTIVE_TIME, () -> getLength() - this.afkTime); - } - - /** - * Recreates a Session found in the database. - *

- * WorldTimes and Player kills need to be set separately. - * - * @param id ID in the database (Used for fetching world times and player kills. - * @param uuid UUID of the Player. - * @param serverUUID UUID of the Server. - * @param sessionStart Epoch ms the session started. - * @param sessionEnd Epoch ms the session ended. - * @param mobKills Mobs killed during the session. - * @param deaths Death count during the session. - * @param afkTime Time spent AFK during the session. - */ - public Session( - int id, UUID uuid, UUID serverUUID, - long sessionStart, long sessionEnd, - int mobKills, int deaths, long afkTime - ) { - this.sessionStart = sessionStart; - worldTimes = new WorldTimes(); - playerKills = new ArrayList<>(); - - this.mobKills = mobKills; - this.deaths = deaths; - this.afkTime = afkTime; - - putRawData(SessionKeys.DB_ID, id); - putRawData(SessionKeys.UUID, uuid); - putRawData(SessionKeys.SERVER_UUID, serverUUID); - putSupplier(SessionKeys.START, this::getSessionStart); - putRawData(SessionKeys.END, sessionEnd); - putSupplier(SessionKeys.WORLD_TIMES, this::getWorldTimes); - putSupplier(SessionKeys.PLAYER_KILLS, this::getPlayerKills); - putSupplier(SessionKeys.MOB_KILL_COUNT, this::getMobKills); - putSupplier(SessionKeys.DEATH_COUNT, this::getDeaths); - putSupplier(SessionKeys.AFK_TIME, this::getAfkTime); - putSupplier(SessionKeys.FIRST_SESSION, this::isFirstSession); - - putSupplier(SessionKeys.PLAYER_KILL_COUNT, () -> getUnsafe(SessionKeys.PLAYER_KILLS).size()); - putSupplier(SessionKeys.LENGTH, () -> - getValue(SessionKeys.END).orElse(System.currentTimeMillis()) - getUnsafe(SessionKeys.START)); - putSupplier(SessionKeys.ACTIVE_TIME, () -> getLength() - this.afkTime); - } - - /** - * Ends the session with given end point. - *

- * Updates world times to the latest value. - * - * @param endOfSession Epoch millisecond the session ended. - */ - public void endSession(long endOfSession) { - putRawData(SessionKeys.END, endOfSession); - worldTimes.updateState(endOfSession); - } - - /** - * Updates WorldTimes state. - * - * @param world World Name the player has moved to - * @param gm GameMode the player is in. - * @param time Epoch ms of the event. - */ - public void changeState(String world, String gm, long time) { - worldTimes.updateState(world, gm, time); - } - - public void playerKilled(PlayerKill kill) { - playerKills.add(kill); - } - - public void mobKilled() { - mobKills++; - } - - public void died() { - deaths++; - } - - /** - * Get the length of the session in milliseconds. - * - * @return Long in ms. - */ - public long getLength() { - return getValue(SessionKeys.LENGTH).orElse(0L); - } - - @Override - public long getDate() { - return getUnsafe(SessionKeys.START); - } - - public void setWorldTimes(WorldTimes worldTimes) { - this.worldTimes = worldTimes; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Session session = (Session) o; - return getUnsafe(SessionKeys.START).equals(session.getUnsafe(SessionKeys.START)) && - getValue(SessionKeys.END).orElse(-1L).equals(session.getValue(SessionKeys.END).orElse(-1L)) && - mobKills == session.mobKills && - deaths == session.deaths && - Objects.equals(getPlayerKills(), session.getPlayerKills()) && - Objects.equals(worldTimes, session.worldTimes); - } - - public boolean isFetchedFromDB() { - return supports(SessionKeys.DB_ID); - } - - public void addAFKTime(long timeAFK) { - afkTime += timeAFK; - } - - public void setSessionID(int sessionID) { - putRawData(SessionKeys.DB_ID, sessionID); - } - - public void setAsFirstSessionIfMatches(Long registerDate) { - if (registerDate != null && Math.abs(sessionStart - registerDate) < TimeUnit.SECONDS.toMillis(15L)) { - this.firstSession = true; - } - } - - public boolean isFirstSession() { - return firstSession; - } - - public List getPlayerKills() { - playerKills.sort(new DateHolderRecentComparator()); - return playerKills; - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), mobKills, deaths, afkTime); - } - - private long getSessionStart() { - return sessionStart; - } - - private WorldTimes getWorldTimes() { - return worldTimes; - } - - public void setPlayerKills(List playerKills) { - this.playerKills = playerKills; - } - - private int getMobKills() { - return mobKills; - } - - private int getDeaths() { - return deaths; - } - - private long getAfkTime() { - return afkTime; - } - - @Override - public String toString() { - return "Session{" + - "sessionStart=" + getUnsafe(SessionKeys.START) + - ", sessionEnd=" + getValue(SessionKeys.END).orElse(null) + - ", worldTimes=" + worldTimes + - ", playerKills=" + playerKills + - ", mobKills=" + mobKills + - ", deaths=" + deaths + - ", afkTime=" + afkTime + - '}'; - } - - public void updateState() { - worldTimes.updateState(System.currentTimeMillis()); - } -} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/UserInfo.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/UserInfo.java index 60f873564..c3b34f387 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/UserInfo.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/UserInfo.java @@ -16,6 +16,8 @@ */ package com.djrapitops.plan.gathering.domain; +import com.djrapitops.plan.identification.ServerUUID; + import java.util.Objects; import java.util.UUID; @@ -30,13 +32,13 @@ import java.util.UUID; public class UserInfo { private final UUID playerUUID; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final long registered; private final boolean banned; private final boolean opped; private final String hostname; - public UserInfo(UUID playerUUID, UUID serverUUID, long registered, boolean opped, String hostname, boolean banned) { + public UserInfo(UUID playerUUID, ServerUUID serverUUID, long registered, boolean opped, String hostname, boolean banned) { this.playerUUID = playerUUID; this.serverUUID = serverUUID; this.registered = registered; @@ -49,7 +51,7 @@ public class UserInfo { return playerUUID; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/WorldTimes.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/WorldTimes.java index 584040858..b0c9623df 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/WorldTimes.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/WorldTimes.java @@ -159,17 +159,11 @@ public class WorldTimes { @Override public String toString() { - StringBuilder b = new StringBuilder("WorldTimes (Current: " + currentWorld + "){\n"); - - for (Map.Entry entry : times.entrySet()) { - GMTimes value = entry.getValue(); - b.append("World '").append(entry.getKey()).append("':\n") - .append(" Total: ").append(value.getTotal()).append("\n") - .append(" ").append(value.toString()).append("\n"); - } - - b.append("}"); - return b.toString(); + return "WorldTimes{" + + "times=" + times + + ", currentWorld='" + currentWorld + '\'' + + ", currentGamemode='" + currentGamemode + '\'' + + '}'; } public Optional getCurrentWorld() { @@ -192,4 +186,15 @@ public class WorldTimes { public boolean contains(String worldName) { return times.containsKey(worldName); } + + public boolean isEmpty() { + return getWorldTimes().isEmpty(); + } + + public void setAll(WorldTimes worldTimes) { + times.clear(); + for (Map.Entry entry : worldTimes.getWorldTimes().entrySet()) { + setGMTimesForWorld(entry.getKey(), entry.getValue()); + } + } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/event/PlayerJoin.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/event/PlayerJoin.java new file mode 100644 index 000000000..f86e37b9a --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/domain/event/PlayerJoin.java @@ -0,0 +1,83 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.domain.event; + +import com.djrapitops.plan.identification.ServerUUID; + +import java.net.InetAddress; +import java.util.UUID; + +public class PlayerJoin { + + private final UUID playerUUID; + private final String playerName; + private final String displayName; + private final InetAddress ipAddress; + + private final ServerUUID serverUUID; + private final String world; + private final String gameMode; + + private final long time; + + public PlayerJoin( + UUID playerUUID, String playerName, String displayName, InetAddress ipAddress, + ServerUUID serverUUID, String world, String gameMode, + long time + ) { + this.playerUUID = playerUUID; + this.playerName = playerName; + this.displayName = displayName; + this.ipAddress = ipAddress; + this.serverUUID = serverUUID; + this.world = world; + this.gameMode = gameMode; + this.time = time; + } + + public UUID getPlayerUUID() { + return playerUUID; + } + + public String getPlayerName() { + return playerName; + } + + public String getDisplayName() { + return displayName; + } + + public InetAddress getIpAddress() { + return ipAddress; + } + + public ServerUUID getServerUUID() { + return serverUUID; + } + + public String getWorld() { + return world; + } + + public String getGameMode() { + return gameMode; + } + + public long getTime() { + return time; + } +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/importing/data/UserImportData.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/importing/data/UserImportData.java index ccfa45969..d61f69420 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/importing/data/UserImportData.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/importing/data/UserImportData.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.gathering.importing.data; import com.djrapitops.plan.delivery.domain.Nickname; import com.djrapitops.plan.gathering.domain.GMTimes; import com.djrapitops.plan.gathering.domain.PlayerKill; +import com.djrapitops.plan.identification.ServerUUID; import java.util.*; @@ -64,7 +65,7 @@ public class UserImportData { this.hostname = hostname; } - public static UserImportDataBuilder builder(UUID serverUUID) { + public static UserImportDataBuilder builder(ServerUUID serverUUID) { return new UserImportDataBuilder(serverUUID); } @@ -173,7 +174,7 @@ public class UserImportData { } public static final class UserImportDataBuilder { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final List nicknames = new ArrayList<>(); private final List ips = new ArrayList<>(); @@ -189,7 +190,7 @@ public class UserImportData { private int deaths; private String hostname; - private UserImportDataBuilder(UUID serverUUID) { + private UserImportDataBuilder(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/Identifiers.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/Identifiers.java index 1f8b35f1a..7dee2ae1b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/identification/Identifiers.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/Identifiers.java @@ -52,11 +52,11 @@ public class Identifiers { * @return UUID of the server. * @throws BadRequestException If server parameter is not defined or the server is not in the database. */ - public UUID getServerUUID(Request request) { + public ServerUUID getServerUUID(Request request) { String identifier = request.getQuery().get("server") .orElseThrow(() -> new BadRequestException("'server' parameter was not defined.")); - Optional parsed = UUIDUtility.parseFromString(identifier); + Optional parsed = UUIDUtility.parseFromString(identifier).map(ServerUUID::from); return parsed.orElseGet(() -> getServerUUIDFromName(identifier).orElseThrow( () -> new BadRequestException("Given 'server' was not found in the database.") )); @@ -69,13 +69,13 @@ public class Identifiers { * @return UUID of the server. * @throws BadRequestException If the server is not in the database. */ - public Optional getServerUUID(String identifier) { - Optional parsed = UUIDUtility.parseFromString(identifier); + public Optional getServerUUID(String identifier) { + Optional parsed = UUIDUtility.parseFromString(identifier).map(ServerUUID::from); if (parsed.isPresent()) return parsed; return getServerUUIDFromName(identifier); } - private Optional getServerUUIDFromName(String serverName) { + private Optional getServerUUIDFromName(String serverName) { return dbSystem.getDatabase().query(ServerQueries.fetchServerMatchingIdentifier(serverName)) .map(Server::getUuid); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/Server.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/Server.java index 3712b4cb7..ed92faeaf 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/identification/Server.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/Server.java @@ -18,7 +18,6 @@ package com.djrapitops.plan.identification; import java.util.Objects; import java.util.Optional; -import java.util.UUID; /** * Represents a Server that is running Plan. @@ -26,17 +25,17 @@ import java.util.UUID; * @author AuroraLS3 */ public class Server implements Comparable { - private final UUID uuid; + private final ServerUUID uuid; private Integer id; private String name; private String webAddress; private boolean proxy; - public Server(UUID uuid, String name, String webAddress) { + public Server(ServerUUID uuid, String name, String webAddress) { this(null, uuid, name, webAddress, false); } - public Server(Integer id, UUID uuid, String name, String webAddress, boolean proxy) { + public Server(Integer id, ServerUUID uuid, String name, String webAddress, boolean proxy) { this.id = id; this.uuid = uuid; this.name = name; @@ -52,7 +51,7 @@ public class Server implements Comparable { this.id = id; } - public UUID getUuid() { + public ServerUUID getUuid() { return uuid; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerInfo.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerInfo.java index c0379a3ca..fc4f92eaa 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerInfo.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerInfo.java @@ -21,7 +21,6 @@ import com.djrapitops.plan.exceptions.EnableException; import com.djrapitops.plan.identification.properties.ServerProperties; import java.util.Optional; -import java.util.UUID; /** * SubSystem for managing Server information. @@ -43,11 +42,11 @@ public abstract class ServerInfo implements SubSystem { return server; } - public UUID getServerUUID() { + public ServerUUID getServerUUID() { return getServer().getUuid(); } - public Optional getServerUUIDSafe() { + public Optional getServerUUIDSafe() { return Optional.ofNullable(server).map(Server::getUuid); } @@ -68,7 +67,7 @@ public abstract class ServerInfo implements SubSystem { } - protected UUID generateNewUUID() { - return UUID.randomUUID(); + protected ServerUUID generateNewUUID() { + return ServerUUID.randomUUID(); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerServerInfo.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerServerInfo.java index 204c05479..4f5a66e01 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerServerInfo.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerServerInfo.java @@ -29,7 +29,6 @@ import com.djrapitops.plan.settings.config.paths.PluginSettings; import javax.inject.Inject; import javax.inject.Singleton; import java.util.Optional; -import java.util.UUID; /** * Manages the Server UUID for Bukkit servers. @@ -88,7 +87,7 @@ public class ServerServerInfo extends ServerInfo { return registerNew(generateNewUUID()); } - private Server registerNew(UUID serverUUID) { + private Server registerNew(ServerUUID serverUUID) { Server server = createServerObject(serverUUID); fromDatabase.save(server); @@ -98,7 +97,7 @@ public class ServerServerInfo extends ServerInfo { return stored; } - private Server createServerObject(UUID serverUUID) { + private Server createServerObject(ServerUUID serverUUID) { String webAddress = addresses.getAccessAddress().orElseGet(addresses::getFallbackLocalhostAddress); String name = config.get(PluginSettings.SERVER_NAME); return new Server(serverUUID, name, webAddress); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerUUID.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerUUID.java new file mode 100644 index 000000000..6e06c1687 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/ServerUUID.java @@ -0,0 +1,69 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.identification; + +import java.io.Serializable; +import java.util.Objects; +import java.util.UUID; + +public class ServerUUID implements Serializable { + private final UUID uuid; + + protected ServerUUID(UUID uuid) { + this.uuid = uuid; + } + + public static ServerUUID from(UUID uuid) { + return new ServerUUID(uuid); + } + + public static ServerUUID fromString(String name) { + return new ServerUUID(UUID.fromString(name)); + } + + public static ServerUUID randomUUID() { + return ServerUUID.from(UUID.randomUUID()); + } + + public UUID asUUID() { + return uuid; + } + + @Override + public String toString() { + return uuid.toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null) return false; + + if (o.getClass().equals(UUID.class)) { + return uuid.equals(o); + } + + if (getClass() != o.getClass()) return false; + ServerUUID that = (ServerUUID) o; + return Objects.equals(uuid, that.uuid); + } + + @Override + public int hashCode() { + return Objects.hash(uuid); + } +} \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerDBLoader.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerDBLoader.java index fbc72b0c3..b99355ef4 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerDBLoader.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerDBLoader.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.identification.storage; import com.djrapitops.plan.exceptions.EnableException; import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.queries.objects.ServerQueries; import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction; @@ -26,7 +27,6 @@ import com.djrapitops.plan.storage.database.transactions.StoreServerInformationT import javax.inject.Inject; import javax.inject.Singleton; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.ExecutionException; @Singleton @@ -42,7 +42,7 @@ public class ServerDBLoader implements ServerLoader { } @Override - public Optional load(UUID serverUUID) { + public Optional load(ServerUUID serverUUID) { try { if (serverUUID == null) { // Assumes that we want the server that has single entry in the database, the proxy diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerFileLoader.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerFileLoader.java index 2f048849d..1974269bd 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerFileLoader.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerFileLoader.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.identification.storage; import com.djrapitops.plan.exceptions.EnableException; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.Config; import com.djrapitops.plan.settings.config.ConfigNode; import com.djrapitops.plan.settings.config.ConfigReader; @@ -30,7 +31,6 @@ import javax.inject.Singleton; import java.io.IOException; import java.util.Objects; import java.util.Optional; -import java.util.UUID; @Singleton public class ServerFileLoader extends Config implements ServerLoader { @@ -61,7 +61,7 @@ public class ServerFileLoader extends Config implements ServerLoader { } @Override - public Optional load(UUID loaded) { + public Optional load(ServerUUID loaded) { try { if (!prepared) prepare(); @@ -69,7 +69,7 @@ public class ServerFileLoader extends Config implements ServerLoader { if (serverUUIDString == null) return Optional.empty(); Integer id = getInteger("Server.ID"); - UUID serverUUID = UUID.fromString(serverUUIDString); + ServerUUID serverUUID = ServerUUID.fromString(serverUUIDString); String name = config.getNode(PluginSettings.SERVER_NAME.getPath()) .map(ConfigNode::getString) .orElse("Proxy"); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerLoader.java b/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerLoader.java index 9cfe622e8..9775f352d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerLoader.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/identification/storage/ServerLoader.java @@ -17,9 +17,9 @@ package com.djrapitops.plan.identification.storage; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import java.util.Optional; -import java.util.UUID; /** * Interface for operating on server information. @@ -35,7 +35,7 @@ public interface ServerLoader { * @return Optional of the saved information or empty if it has not been stored. * @throws com.djrapitops.plan.exceptions.EnableException When the loading fails */ - Optional load(UUID serverUUID); + Optional load(ServerUUID serverUUID); /** * Save the server information. diff --git a/Plan/common/src/main/java/com/djrapitops/plan/modules/GatheringDataModule.java b/Plan/common/src/main/java/com/djrapitops/plan/modules/GatheringDataModule.java new file mode 100644 index 000000000..482844fa9 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/modules/GatheringDataModule.java @@ -0,0 +1,38 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.modules; + +import com.djrapitops.plan.DataService; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.event.PlayerJoin; +import dagger.Module; +import dagger.Provides; +import dagger.multibindings.IntoSet; + +import javax.inject.Singleton; + +@Module +public class GatheringDataModule { + + @Provides + @Singleton + @IntoSet + DataService.Mapping playerJoinToSession() { + return service -> service.registerMapper(PlayerJoin.class, ActiveSession.class, ActiveSession::fromPlayerJoin); + } + +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/placeholder/ServerPlaceHolders.java b/Plan/common/src/main/java/com/djrapitops/plan/placeholder/ServerPlaceHolders.java index 556d55989..7c97b9a9f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/placeholder/ServerPlaceHolders.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/placeholder/ServerPlaceHolders.java @@ -19,13 +19,13 @@ package com.djrapitops.plan.placeholder; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.queries.objects.TPSQueries; import javax.inject.Inject; import javax.inject.Singleton; -import java.util.UUID; import static com.djrapitops.plan.utilities.MiscUtils.*; @@ -60,7 +60,7 @@ public class ServerPlaceHolders implements Placeholders { Formatter percentage = formatters.percentage(); Database database = dbSystem.getDatabase(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); placeholders.registerStatic("server_tps_day", () -> decimals.apply(database.query(TPSQueries.averageTPS(dayAgo(), now(), serverUUID)))); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/placeholder/SessionPlaceHolders.java b/Plan/common/src/main/java/com/djrapitops/plan/placeholder/SessionPlaceHolders.java index 186984972..0d28a93aa 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/placeholder/SessionPlaceHolders.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/placeholder/SessionPlaceHolders.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.delivery.domain.DateObj; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; @@ -33,7 +34,6 @@ import com.djrapitops.plan.storage.database.queries.objects.TPSQueries; import javax.inject.Inject; import javax.inject.Singleton; import java.io.Serializable; -import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; @@ -65,6 +65,12 @@ public class SessionPlaceHolders implements Placeholders { this.formatters = formatters; } + private static String getPlaytime(Database database, long after, long before, ServerUUID serverUUID, Formatter timeAmount) { + Long playtime = database.query(SessionQueries.playtime(after, before, serverUUID)); + Long sessionCount = database.query(SessionQueries.sessionCount(after, before, serverUUID)); + return timeAmount.apply(sessionCount != 0 ? playtime / sessionCount : playtime); + } + @Override public void register( PlanPlaceholders placeholders @@ -74,7 +80,7 @@ public class SessionPlaceHolders implements Placeholders { Formatter year = formatters.year(); Formatter decimals = formatters.decimals(); Database database = dbSystem.getDatabase(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); placeholders.registerStatic("sessions_play_time_total", () -> timeAmount.apply(database.query(SessionQueries.playtime(0L, now(), serverUUID)))); @@ -188,10 +194,4 @@ public class SessionPlaceHolders implements Placeholders { placeholders.registerStatic("sessions_recent_peak_date", () -> database.query(TPSQueries.fetchPeakPlayerCount(serverUUID, now() - TimeUnit.DAYS.toMillis(2L))).map(year).orElse("-")); } - - private static String getPlaytime(Database database, long after, long before, UUID serverUUID, Formatter timeAmount) { - Long playtime = database.query(SessionQueries.playtime(after, before, serverUUID)); - Long sessionCount = database.query(SessionQueries.sessionCount(after, before, serverUUID)); - return timeAmount.apply(sessionCount != 0 ? playtime / sessionCount : playtime); - } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/MobKillProcessor.java b/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/MobKillProcessor.java index 5bf017b22..b2c56b23b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/MobKillProcessor.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/MobKillProcessor.java @@ -17,7 +17,7 @@ package com.djrapitops.plan.processing.processors.player; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.processing.CriticalRunnable; import java.util.Optional; @@ -46,12 +46,12 @@ public class MobKillProcessor implements CriticalRunnable { @Override public void run() { - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); if (!cachedSession.isPresent()) { return; } - Session session = cachedSession.get(); + ActiveSession session = cachedSession.get(); - session.mobKilled(); + session.addMobKill(); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/PlayerKillProcessor.java b/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/PlayerKillProcessor.java index 2f0212436..a4919d852 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/PlayerKillProcessor.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/processing/processors/player/PlayerKillProcessor.java @@ -17,8 +17,8 @@ package com.djrapitops.plan.processing.processors.player; import com.djrapitops.plan.gathering.cache.SessionCache; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.processing.CriticalRunnable; import java.util.Optional; @@ -56,12 +56,12 @@ public class PlayerKillProcessor implements CriticalRunnable { @Override public void run() { - Optional cachedSession = SessionCache.getCachedSession(killer); + Optional cachedSession = SessionCache.getCachedSession(killer); if (!cachedSession.isPresent()) { return; } - Session session = cachedSession.get(); + ActiveSession session = cachedSession.get(); - session.playerKilled(new PlayerKill(killer, victim, weaponName, time)); + session.addPlayerKill(new PlayerKill(killer, victim, weaponName, time)); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/query/CommonQueriesImplementation.java b/Plan/common/src/main/java/com/djrapitops/plan/query/CommonQueriesImplementation.java index 041c72089..68384909b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/query/CommonQueriesImplementation.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/query/CommonQueriesImplementation.java @@ -18,7 +18,9 @@ package com.djrapitops.plan.query; import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.FinishedSession; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.TimeSettings; import com.djrapitops.plan.storage.database.DBType; @@ -34,6 +36,7 @@ import com.djrapitops.plan.storage.database.queries.schema.SQLiteSchemaQueries; import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.stream.Collectors; public class CommonQueriesImplementation implements CommonQueries { @@ -47,22 +50,28 @@ public class CommonQueriesImplementation implements CommonQueries { @Override public long fetchPlaytime(UUID playerUUID, UUID serverUUID, long after, long before) { - return db.query(SessionQueries.playtimeOfPlayer(after, before, playerUUID)).getOrDefault(serverUUID, 0L); + return db.query(SessionQueries.playtimeOfPlayer(after, before, playerUUID)) + .getOrDefault(ServerUUID.from(serverUUID), 0L); } @Override public long fetchCurrentSessionPlaytime(UUID playerUUID) { - return SessionCache.getCachedSession(playerUUID).map(Session::getLength).orElse(0L); + return SessionCache.getCachedSession(playerUUID) + .map(ActiveSession::toFinishedSessionFromStillActive) + .map(FinishedSession::getLength) + .orElse(0L); } @Override public long fetchLastSeen(UUID playerUUID, UUID serverUUID) { - return db.query(SessionQueries.lastSeen(playerUUID, serverUUID)); + return db.query(SessionQueries.lastSeen(playerUUID, ServerUUID.from(serverUUID))); } @Override public Set fetchServerUUIDs() { - return db.query(ServerQueries.fetchServerNames()).keySet(); + return db.query(ServerQueries.fetchServerNames()).keySet().stream() + .map(ServerUUID::asUUID) + .collect(Collectors.toSet()); } @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/query/QuerySvc.java b/Plan/common/src/main/java/com/djrapitops/plan/query/QuerySvc.java index 9a9d9ac76..887ce4af3 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/query/QuerySvc.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/query/QuerySvc.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.query; import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; @@ -128,7 +129,7 @@ public class QuerySvc implements QueryService { @Override public Optional getServerUUID() { - return serverInfo.getServerUUIDSafe(); + return serverInfo.getServerUUIDSafe().map(ServerUUID::asUUID); } @Override diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java index c2dc1c56b..9cb796195 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/config/WorldAliasSettings.java @@ -16,11 +16,11 @@ */ package com.djrapitops.plan.settings.config; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.formatting.Formatter; import com.djrapitops.plan.delivery.formatting.Formatters; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.GMTimes; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.domain.WorldTimes; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.settings.config.paths.DisplaySettings; @@ -36,6 +36,7 @@ import javax.inject.Singleton; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -154,18 +155,26 @@ public class WorldAliasSettings { return gmTimesPerAlias; } - public String getLongestWorldPlayed(Session session) { - ConfigNode aliases = getAliasSection(); - - if (!session.supports(SessionKeys.WORLD_TIMES)) { + public String getLongestWorldPlayed(ActiveSession session) { + Optional foundWorldTimes = session.getExtraData(WorldTimes.class); + if (!foundWorldTimes.isPresent()) { return locale.get().getString(HtmlLang.UNIT_NO_DATA); } - WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes()); - if (!session.supports(SessionKeys.END)) { - return worldTimes.getCurrentWorld() - .map(currentWorld -> "Current: " + (aliases.contains(currentWorld) ? aliases.getString(currentWorld) : currentWorld)) - .orElse("Current: " + locale.get().getString(GenericLang.UNAVAILABLE)); + WorldTimes worldTimes = foundWorldTimes.orElseGet(WorldTimes::new); + + ConfigNode aliases = getAliasSection(); + return worldTimes.getCurrentWorld() + .map(currentWorld -> "Current: " + (aliases.contains(currentWorld) ? aliases.getString(currentWorld) : currentWorld)) + .orElse("Current: " + locale.get().getString(GenericLang.UNAVAILABLE)); + } + + public String getLongestWorldPlayed(FinishedSession session) { + + Optional foundWorldTimes = session.getExtraData(WorldTimes.class); + if (!foundWorldTimes.isPresent()) { + return locale.get().getString(HtmlLang.UNIT_NO_DATA); } + WorldTimes worldTimes = foundWorldTimes.orElseGet(WorldTimes::new); Map playtimePerAlias = getPlaytimePerAlias(worldTimes); long total = worldTimes.getTotal(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/network/NetworkSettingManager.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/network/NetworkSettingManager.java index 0141d9303..265d6ee70 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/network/NetworkSettingManager.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/network/NetworkSettingManager.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.settings.network; import com.djrapitops.plan.SubSystem; import com.djrapitops.plan.exceptions.EnableException; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.*; import com.djrapitops.plan.settings.config.paths.PluginSettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; @@ -43,7 +44,6 @@ import java.io.UncheckedIOException; import java.nio.file.Files; import java.util.Optional; import java.util.Set; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -108,10 +108,10 @@ public class NetworkSettingManager implements SubSystem { } } - public static UUID getServerUUIDFromFilename(File file) { + public static ServerUUID getServerUUIDFromFilename(File file) { String fileName = file.getName(); String uuidString = fileName.substring(0, fileName.length() - 4); - return UUID.fromString(uuidString); + return ServerUUID.fromString(uuidString); } private FileWatcher prepareFileWatcher() { @@ -133,7 +133,7 @@ public class NetworkSettingManager implements SubSystem { private void addFileToWatchList(FileWatcher fileWatcher, File file) { try { - UUID serverUUID = getServerUUIDFromFilename(file); + ServerUUID serverUUID = getServerUUIDFromFilename(file); fileWatcher.addToWatchlist(new WatchedFile(file, () -> updateConfigInDB(file, serverUUID))); } catch (IndexOutOfBoundsException | IllegalArgumentException ignore) { @@ -157,22 +157,22 @@ public class NetworkSettingManager implements SubSystem { } } - private File getServerConfigFile(UUID serverUUID) { + private File getServerConfigFile(ServerUUID serverUUID) { return new File(serverSettingsFolder, serverUUID + ".yml"); } private void updateConfigFromDBIfUpdated() { Database database = dbSystem.getDatabase(); - Set serverUUIDs = database.query(ServerQueries.fetchPlanServerInformation()).keySet(); + Set serverUUIDs = database.query(ServerQueries.fetchPlanServerInformation()).keySet(); // Remove the proxy server from the list serverUUIDs.remove(serverInfo.getServerUUID()); - for (UUID serverUUID : serverUUIDs) { + for (ServerUUID serverUUID : serverUUIDs) { updateConfigFromDBIfUpdated(database, serverUUID); } } - private void updateConfigFromDBIfUpdated(Database database, UUID serverUUID) { + private void updateConfigFromDBIfUpdated(Database database, ServerUUID serverUUID) { File configFile = getServerConfigFile(serverUUID); long lastModified = configFile.exists() ? configFile.lastModified() : -1; @@ -191,7 +191,7 @@ public class NetworkSettingManager implements SubSystem { } } - public void updateConfigInDB(File file, UUID serverUUID) { + public void updateConfigInDB(File file, ServerUUID serverUUID) { if (!file.exists()) { return; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/network/ServerSettingsManager.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/network/ServerSettingsManager.java index 6b3342540..60df29e94 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/network/ServerSettingsManager.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/network/ServerSettingsManager.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.settings.network; import com.djrapitops.plan.SubSystem; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.Config; import com.djrapitops.plan.settings.config.ConfigReader; import com.djrapitops.plan.settings.config.ConfigWriter; @@ -41,7 +42,6 @@ import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -107,7 +107,7 @@ public class ServerSettingsManager implements SubSystem { } Database database = dbSystem.getDatabase(); - Optional serverUUID = serverInfo.getServerUUIDSafe(); + Optional serverUUID = serverInfo.getServerUUIDSafe(); if (!serverUUID.isPresent()) { return; } @@ -131,7 +131,7 @@ public class ServerSettingsManager implements SubSystem { File configFile = files.getConfigFile(); long lastModified = configFile.exists() ? configFile.lastModified() : -1; - Optional serverUUID = serverInfo.getServerUUIDSafe(); + Optional serverUUID = serverInfo.getServerUUIDSafe(); if (!serverUUID.isPresent()) { return; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/settings/upkeep/NetworkConfigStoreTask.java b/Plan/common/src/main/java/com/djrapitops/plan/settings/upkeep/NetworkConfigStoreTask.java index b02164caf..d3aaf17dd 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/settings/upkeep/NetworkConfigStoreTask.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/settings/upkeep/NetworkConfigStoreTask.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.settings.upkeep; import com.djrapitops.plan.TaskSystem; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.TimeSettings; import com.djrapitops.plan.settings.network.NetworkSettingManager; @@ -26,7 +27,6 @@ import net.playeranalytics.plugin.scheduling.TimeAmount; import javax.inject.Inject; import javax.inject.Singleton; import java.io.File; -import java.util.UUID; import java.util.concurrent.TimeUnit; /** @@ -66,7 +66,7 @@ public class NetworkConfigStoreTask extends TaskSystem.Task { File[] configFiles = networkSettingManager.getConfigFiles(); for (File configFile : configFiles) { - UUID serverUUID = NetworkSettingManager.getServerUUIDFromFilename(configFile); + ServerUUID serverUUID = NetworkSettingManager.getServerUUIDFromFilename(configFile); networkSettingManager.updateConfigInDB(configFile, serverUUID); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/SQLDB.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/SQLDB.java index 900c3b7e9..494e2c67c 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/SQLDB.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/SQLDB.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.storage.database; import com.djrapitops.plan.exceptions.database.DBInitException; import com.djrapitops.plan.exceptions.database.DBOpException; import com.djrapitops.plan.exceptions.database.FatalDBException; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.PluginSettings; import com.djrapitops.plan.settings.config.paths.TimeSettings; @@ -40,7 +41,10 @@ import org.apache.commons.lang3.concurrent.BasicThreadFactory; import java.sql.Connection; import java.sql.SQLException; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; import java.util.concurrent.*; import java.util.function.BiFunction; import java.util.function.Supplier; @@ -52,7 +56,7 @@ import java.util.function.Supplier; */ public abstract class SQLDB extends AbstractDatabase { - private final Supplier serverUUIDSupplier; + private final Supplier serverUUIDSupplier; protected final Locale locale; protected final PlanConfig config; @@ -64,7 +68,7 @@ public abstract class SQLDB extends AbstractDatabase { private ExecutorService transactionExecutor; protected SQLDB( - Supplier serverUUIDSupplier, + Supplier serverUUIDSupplier, Locale locale, PlanConfig config, RunnableFactory runnableFactory, @@ -300,7 +304,7 @@ public abstract class SQLDB extends AbstractDatabase { return Objects.hash(getType().getName()); } - public Supplier getServerUUIDSupplier() { + public Supplier getServerUUIDSupplier() { return serverUUIDSupplier; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/DataStoreQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/DataStoreQueries.java index b97c9fdab..aee82e870 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/DataStoreQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/DataStoreQueries.java @@ -17,8 +17,8 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.delivery.domain.Nickname; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.gathering.domain.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.*; import com.djrapitops.plan.storage.database.transactions.ExecBatchStatement; import com.djrapitops.plan.storage.database.transactions.ExecStatement; @@ -45,14 +45,10 @@ public class DataStoreQueries { /** * Store a finished session in the database. * - * @param session Session, of which {@link Session#endSession(long)} has been called. + * @param session a finished session * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} - * @throws IllegalArgumentException If {@link Session#endSession(long)} has not yet been called. */ - public static Executable storeSession(Session session) { - if (!session.supports(SessionKeys.END)) { - throw new IllegalArgumentException("Attempted to save a session that has not ended."); - } + public static Executable storeSession(FinishedSession session) { return connection -> { storeSessionInformation(session).execute(connection); storeSessionKills(session).execute(connection); @@ -60,22 +56,22 @@ public class DataStoreQueries { }; } - private static Executable storeSessionInformation(Session session) { + private static Executable storeSessionInformation(FinishedSession session) { return new ExecStatement(SessionsTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { - statement.setString(1, session.getUnsafe(SessionKeys.UUID).toString()); - statement.setLong(2, session.getUnsafe(SessionKeys.START)); - statement.setLong(3, session.getUnsafe(SessionKeys.END)); - statement.setInt(4, session.getValue(SessionKeys.DEATH_COUNT).orElse(0)); - statement.setInt(5, session.getValue(SessionKeys.MOB_KILL_COUNT).orElse(0)); - statement.setLong(6, session.getValue(SessionKeys.AFK_TIME).orElse(0L)); - statement.setString(7, session.getUnsafe(SessionKeys.SERVER_UUID).toString()); + statement.setString(1, session.getPlayerUUID().toString()); + statement.setLong(2, session.getStart()); + statement.setLong(3, session.getEnd()); + statement.setInt(4, session.getDeathCount()); + statement.setInt(5, session.getMobKillCount()); + statement.setLong(6, session.getAfkTime()); + statement.setString(7, session.getServerUUID().toString()); } }; } - private static Executable storeSessionKills(Session session) { + private static Executable storeSessionKills(FinishedSession session) { return new ExecBatchStatement(KillsTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -84,7 +80,7 @@ public class DataStoreQueries { }; } - public static Executable insertWorldName(UUID serverUUID, String worldName) { + public static Executable insertWorldName(ServerUUID serverUUID, String worldName) { return new ExecStatement(WorldTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -94,10 +90,7 @@ public class DataStoreQueries { }; } - private static Executable storeSessionWorldTimes(Session session) { - if (session.getValue(SessionKeys.WORLD_TIMES).map(times -> times.getWorldTimes().isEmpty()).orElse(true)) { - return Executable.empty(); - } + private static Executable storeSessionWorldTimes(FinishedSession session) { return new ExecBatchStatement(WorldTimesTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -191,7 +184,7 @@ public class DataStoreQueries { * @param serverUUID UUID of the Plan server. * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} */ - public static Executable registerUserInfo(UUID playerUUID, long registered, UUID serverUUID, String hostname) { + public static Executable registerUserInfo(UUID playerUUID, long registered, ServerUUID serverUUID, String hostname) { return new ExecStatement(UserInfoTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -226,7 +219,7 @@ public class DataStoreQueries { * @param ping Ping data entry * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} */ - public static Executable storePing(UUID playerUUID, UUID serverUUID, Ping ping) { + public static Executable storePing(UUID playerUUID, ServerUUID serverUUID, Ping ping) { return new ExecStatement(PingTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -247,7 +240,7 @@ public class DataStoreQueries { * @param tps TPS data entry * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} */ - public static Executable storeTPS(UUID serverUUID, TPS tps) { + public static Executable storeTPS(ServerUUID serverUUID, TPS tps) { return new ExecStatement(TPSTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeFetchQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeFetchQueries.java index a9d2bdc1e..3b439894e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeFetchQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeFetchQueries.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.gathering.domain.TPS; import com.djrapitops.plan.gathering.domain.builders.TPSBuilder; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ServerTable; import com.djrapitops.plan.storage.database.sql.tables.TPSTable; import com.djrapitops.plan.storage.database.sql.tables.WorldTable; @@ -26,7 +27,10 @@ import com.djrapitops.plan.utilities.java.Maps; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -46,7 +50,7 @@ public class LargeFetchQueries { * * @return Map: Server UUID - List of TPS data */ - public static Query>> fetchAllTPSData() { + public static Query>> fetchAllTPSData() { String serverIDColumn = ServerTable.TABLE_NAME + '.' + ServerTable.SERVER_ID; String serverUUIDColumn = ServerTable.TABLE_NAME + '.' + ServerTable.SERVER_UUID + " as s_uuid"; String sql = SELECT + @@ -62,12 +66,12 @@ public class LargeFetchQueries { FROM + TPSTable.TABLE_NAME + INNER_JOIN + ServerTable.TABLE_NAME + " on " + serverIDColumn + "=" + TPSTable.SERVER_ID; - return new QueryAllStatement>>(sql, 50000) { + return new QueryAllStatement>>(sql, 50000) { @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> serverMap = new HashMap<>(); + public Map> processResults(ResultSet set) throws SQLException { + Map> serverMap = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString("s_uuid")); + ServerUUID serverUUID = ServerUUID.fromString(set.getString("s_uuid")); List tpsList = serverMap.computeIfAbsent(serverUUID, Lists::create); @@ -94,15 +98,15 @@ public class LargeFetchQueries { * * @return Map: Server UUID - List of world names */ - public static Query>> fetchAllWorldNames() { + public static Query>> fetchAllWorldNames() { String sql = SELECT + '*' + FROM + WorldTable.TABLE_NAME; - return new QueryAllStatement>>(sql, 1000) { + return new QueryAllStatement>>(sql, 1000) { @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> worldMap = new HashMap<>(); + public Map> processResults(ResultSet set) throws SQLException { + Map> worldMap = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(WorldTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(WorldTable.SERVER_UUID)); Collection worlds = worldMap.computeIfAbsent(serverUUID, Maps::createSet); worlds.add(set.getString(WorldTable.NAME)); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeStoreQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeStoreQueries.java index 3b09c91ad..b4c1751b2 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeStoreQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/LargeStoreQueries.java @@ -18,9 +18,9 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.delivery.domain.Nickname; import com.djrapitops.plan.delivery.domain.auth.User; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.gathering.domain.*; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.*; import com.djrapitops.plan.storage.database.transactions.ExecBatchStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -82,15 +82,15 @@ public class LargeStoreQueries { * @param ofServersAndUsers Multimap: Server UUID - (Player UUID - List of nicknames) * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} */ - public static Executable storeAllNicknameData(Map>> ofServersAndUsers) { + public static Executable storeAllNicknameData(Map>> ofServersAndUsers) { if (ofServersAndUsers == null || ofServersAndUsers.isEmpty()) return Executable.empty(); return new ExecBatchStatement(NicknamesTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { // Every Server - for (Map.Entry>> serverEntry : ofServersAndUsers.entrySet()) { - UUID serverUUID = serverEntry.getKey(); + for (Map.Entry>> serverEntry : ofServersAndUsers.entrySet()) { + ServerUUID serverUUID = serverEntry.getKey(); // Every User for (Map.Entry> entry : serverEntry.getValue().entrySet()) { UUID uuid = entry.getKey(); @@ -143,12 +143,12 @@ public class LargeStoreQueries { @Override public void prepare(PreparedStatement statement) throws SQLException { for (Server server : servers) { - UUID uuid = server.getUuid(); - if (uuid == null) { + ServerUUID serverUUID = server.getUuid(); + if (serverUUID == null) { continue; } - statement.setString(1, uuid.toString()); + statement.setString(1, serverUUID.toString()); statement.setString(2, server.getName()); statement.setString(3, server.getWebAddress()); statement.setBoolean(4, true); @@ -165,15 +165,15 @@ public class LargeStoreQueries { * @param ofServers Map: Server UUID - List of TPS data * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} */ - public static Executable storeAllTPSData(Map> ofServers) { + public static Executable storeAllTPSData(Map> ofServers) { if (ofServers == null || ofServers.isEmpty()) return Executable.empty(); return new ExecBatchStatement(TPSTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { // Every Server - for (Map.Entry> entry : ofServers.entrySet()) { - UUID serverUUID = entry.getKey(); + for (Map.Entry> entry : ofServers.entrySet()) { + ServerUUID serverUUID = entry.getKey(); // Every TPS Data point List tpsList = entry.getValue(); for (TPS tps : tpsList) { @@ -199,15 +199,15 @@ public class LargeStoreQueries { * @param ofServers Map: Server UUID - List of user information * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} */ - public static Executable storePerServerUserInformation(Map> ofServers) { + public static Executable storePerServerUserInformation(Map> ofServers) { if (ofServers == null || ofServers.isEmpty()) return Executable.empty(); return new ExecBatchStatement(UserInfoTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { // Every Server - for (Map.Entry> entry : ofServers.entrySet()) { - UUID serverUUID = entry.getKey(); + for (Map.Entry> entry : ofServers.entrySet()) { + ServerUUID serverUUID = entry.getKey(); // Every User for (UserInfo user : entry.getValue()) { statement.setString(1, user.getPlayerUuid().toString()); @@ -229,14 +229,14 @@ public class LargeStoreQueries { * @param ofServers Map: Server UUID - Collection of world names * @return Executable, use inside a {@link com.djrapitops.plan.storage.database.transactions.Transaction} */ - public static Executable storeAllWorldNames(Map> ofServers) { + public static Executable storeAllWorldNames(Map> ofServers) { if (ofServers == null || ofServers.isEmpty()) return Executable.empty(); return new ExecBatchStatement(WorldTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { - for (Map.Entry> entry : ofServers.entrySet()) { - UUID serverUUID = entry.getKey(); + for (Map.Entry> entry : ofServers.entrySet()) { + ServerUUID serverUUID = entry.getKey(); for (String world : entry.getValue()) { statement.setString(1, StringUtils.truncate(world, 100)); statement.setString(2, serverUUID.toString()); @@ -270,27 +270,27 @@ public class LargeStoreQueries { }; } - public static Executable storeAllSessionsWithoutKillOrWorldData(Collection sessions) { + public static Executable storeAllSessionsWithoutKillOrWorldData(Collection sessions) { if (sessions == null || sessions.isEmpty()) return Executable.empty(); return new ExecBatchStatement(SessionsTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { - for (Session session : sessions) { - statement.setString(1, session.getUnsafe(SessionKeys.UUID).toString()); - statement.setLong(2, session.getUnsafe(SessionKeys.START)); - statement.setLong(3, session.getUnsafe(SessionKeys.END)); - statement.setInt(4, session.getValue(SessionKeys.DEATH_COUNT).orElse(0)); - statement.setInt(5, session.getValue(SessionKeys.MOB_KILL_COUNT).orElse(0)); - statement.setLong(6, session.getValue(SessionKeys.AFK_TIME).orElse(0L)); - statement.setString(7, session.getUnsafe(SessionKeys.SERVER_UUID).toString()); + for (FinishedSession session : sessions) { + statement.setString(1, session.getPlayerUUID().toString()); + statement.setLong(2, session.getStart()); + statement.setLong(3, session.getEnd()); + statement.setInt(4, session.getDeathCount()); + statement.setInt(5, session.getMobKillCount()); + statement.setLong(6, session.getAfkTime()); + statement.setString(7, session.getServerUUID().toString()); statement.addBatch(); } } }; } - public static Executable storeAllSessionsWithKillAndWorldData(Collection sessions) { + public static Executable storeAllSessionsWithKillAndWorldData(Collection sessions) { return connection -> { storeAllSessionsWithoutKillOrWorldData(sessions).execute(connection); storeSessionKillData(sessions).execute(connection); @@ -298,20 +298,20 @@ public class LargeStoreQueries { }; } - private static Executable storeSessionKillData(Collection sessions) { + private static Executable storeSessionKillData(Collection sessions) { if (sessions == null || sessions.isEmpty()) return Executable.empty(); return new ExecBatchStatement(KillsTable.INSERT_STATEMENT) { @Override public void prepare(PreparedStatement statement) throws SQLException { - for (Session session : sessions) { + for (FinishedSession session : sessions) { KillsTable.addSessionKillsToBatch(statement, session); } } }; } - private static Executable storeSessionWorldTimeData(Collection sessions) { + private static Executable storeSessionWorldTimeData(Collection sessions) { if (sessions == null || sessions.isEmpty()) return Executable.empty(); return new ExecBatchStatement(WorldTimesTable.INSERT_STATEMENT) { @@ -319,7 +319,7 @@ public class LargeStoreQueries { public void prepare(PreparedStatement statement) throws SQLException { String[] gms = GMTimes.getGMKeyArray(); - for (Session session : sessions) { + for (FinishedSession session : sessions) { WorldTimesTable.addSessionWorldTimesToBatch(statement, session, gms); } } @@ -336,7 +336,7 @@ public class LargeStoreQueries { UUID uuid = entry.getKey(); List pings = entry.getValue(); for (Ping ping : pings) { - UUID serverUUID = ping.getServerUUID(); + ServerUUID serverUUID = ping.getServerUUID(); long date = ping.getDate(); int minPing = ping.getMin(); int maxPing = ping.getMax(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PerServerAggregateQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PerServerAggregateQueries.java index 7d8398683..47072b56f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PerServerAggregateQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PerServerAggregateQueries.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.queries; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.KillsTable; import com.djrapitops.plan.storage.database.sql.tables.SessionsTable; @@ -48,23 +49,23 @@ public class PerServerAggregateQueries { * @param playerUUID UUID of the player. * @return Map: Server UUID - Last seen epoch ms. */ - public static Query> lastSeenOnServers(UUID playerUUID) { + public static Query> lastSeenOnServers(UUID playerUUID) { String sql = SELECT + "MAX(" + SessionsTable.SESSION_END + ") as last_seen, " + SessionsTable.SERVER_UUID + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.USER_UUID + "=?" + GROUP_BY + SessionsTable.SERVER_UUID; - return new QueryStatement>(sql) { + return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, playerUUID.toString()); } @Override - public Map processResults(ResultSet set) throws SQLException { - Map lastSeenMap = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map lastSeenMap = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(SessionsTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(SessionsTable.SERVER_UUID)); long lastSeen = set.getLong("last_seen"); lastSeenMap.put(serverUUID, lastSeen); } @@ -79,7 +80,7 @@ public class PerServerAggregateQueries { * @param playerUUID UUID of the player. * @return Map: Server UUID - Player kill count */ - public static Query> playerKillCountOnServers(UUID playerUUID) { + public static Query> playerKillCountOnServers(UUID playerUUID) { String sql = SELECT + "COUNT(1) as kill_count, " + KillsTable.SERVER_UUID + FROM + KillsTable.TABLE_NAME + WHERE + KillsTable.KILLER_UUID + "=?" + GROUP_BY + KillsTable.SERVER_UUID; @@ -92,7 +93,7 @@ public class PerServerAggregateQueries { * @param playerUUID UUID of the player. * @return Map: Server UUID - Mob kill count */ - public static Query> mobKillCountOnServers(UUID playerUUID) { + public static Query> mobKillCountOnServers(UUID playerUUID) { String sql = SELECT + "SUM(" + SessionsTable.MOB_KILLS + ") as kill_count, " + SessionsTable.SERVER_UUID + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.USER_UUID + "=?" + @@ -100,7 +101,7 @@ public class PerServerAggregateQueries { return getQueryForCountOf(playerUUID, sql, "kill_count"); } - public static Query> totalDeathCountOnServers(UUID playerUUID) { + public static Query> totalDeathCountOnServers(UUID playerUUID) { String sql = SELECT + "SUM(" + SessionsTable.DEATHS + ") as death_count, " + SessionsTable.SERVER_UUID + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.USER_UUID + "=?" + @@ -109,18 +110,18 @@ public class PerServerAggregateQueries { } - private static QueryStatement> getQueryForCountOf(UUID playerUUID, String sql, String column) { - return new QueryStatement>(sql) { + private static QueryStatement> getQueryForCountOf(UUID playerUUID, String sql, String column) { + return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, playerUUID.toString()); } @Override - public Map processResults(ResultSet set) throws SQLException { - Map killCountMap = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map killCountMap = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(SessionsTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(SessionsTable.SERVER_UUID)); int count = set.getInt(column); killCountMap.put(serverUUID, count); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PlayerFetchQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PlayerFetchQueries.java index f5c52ddf6..d2fe2f134 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PlayerFetchQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/PlayerFetchQueries.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.queries; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable; import com.djrapitops.plan.storage.database.sql.tables.UsersTable; @@ -89,7 +90,7 @@ public class PlayerFetchQueries { * @param serverUUID UUID of the Plan server. * @return True if the player's UserInfo is found */ - public static Query isPlayerRegisteredOnServer(UUID playerUUID, UUID serverUUID) { + public static Query isPlayerRegisteredOnServer(UUID playerUUID, ServerUUID serverUUID) { String sql = SELECT + "COUNT(1) as c" + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.USER_UUID + "=?" + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/ServerAggregateQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/ServerAggregateQueries.java index eab94fc8a..0e0f2445e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/ServerAggregateQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/ServerAggregateQueries.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.queries; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable; import com.djrapitops.plan.storage.database.sql.tables.UsersTable; @@ -24,7 +25,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -57,10 +57,10 @@ public class ServerAggregateQueries { /** * Count how many users are on a server in the network. * - * @param serverUUID ServerUUID of the Plan server. + * @param serverUUID Server UUID of the Plan server. * @return Count of users registered to that server after Plan installation. */ - public static Query serverUserCount(UUID serverUUID) { + public static Query serverUserCount(ServerUUID serverUUID) { String sql = SELECT + "COUNT(1) as c FROM " + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.SERVER_UUID + "=?"; return new QueryStatement(sql) { @@ -84,15 +84,15 @@ public class ServerAggregateQueries { * * @return Map: Server UUID - Count of users registered to that server */ - public static Query> serverUserCounts() { + public static Query> serverUserCounts() { String sql = SELECT + "COUNT(1) as c, " + UserInfoTable.SERVER_UUID + FROM + UserInfoTable.TABLE_NAME + GROUP_BY + UserInfoTable.SERVER_UUID; - return new QueryAllStatement>(sql, 100) { + return new QueryAllStatement>(sql, 100) { @Override - public Map processResults(ResultSet set) throws SQLException { - Map ofServer = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map ofServer = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); int count = set.getInt("c"); ofServer.put(serverUUID, count); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java index 2c5510f39..12e91f60a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/ActivityIndexQueries.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.queries.analysis; import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.SessionsTable; @@ -25,7 +26,10 @@ import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -68,7 +72,7 @@ public class ActivityIndexQueries { // Static method class } - public static Query fetchRegularPlayerCount(long date, UUID serverUUID, long playtimeThreshold) { + public static Query fetchRegularPlayerCount(long date, ServerUUID serverUUID, long playtimeThreshold) { return fetchActivityGroupCount(date, serverUUID, playtimeThreshold, ActivityIndex.REGULAR, 5.1); } @@ -94,7 +98,7 @@ public class ActivityIndexQueries { GROUP_BY + "q1." + SessionsTable.USER_UUID; } - public static void setSelectActivityIndexSQLParameters(PreparedStatement statement, int index, long playtimeThreshold, UUID serverUUID, long date) throws SQLException { + public static void setSelectActivityIndexSQLParameters(PreparedStatement statement, int index, long playtimeThreshold, ServerUUID serverUUID, long date) throws SQLException { statement.setDouble(index, Math.PI); statement.setLong(index + 1, playtimeThreshold); @@ -109,7 +113,7 @@ public class ActivityIndexQueries { statement.setLong(index + 10, date - TimeUnit.DAYS.toMillis(14L)); } - public static Query fetchActivityGroupCount(long date, UUID serverUUID, long playtimeThreshold, double above, double below) { + public static Query fetchActivityGroupCount(long date, ServerUUID serverUUID, long playtimeThreshold, double above, double below) { String selectActivityIndex = selectActivityIndexSQL(); String selectIndexes = SELECT + "COALESCE(activity_index, 0) as activity_index" + @@ -140,7 +144,7 @@ public class ActivityIndexQueries { }; } - public static Query> fetchActivityIndexGroupingsOn(long date, UUID serverUUID, long threshold) { + public static Query> fetchActivityIndexGroupingsOn(long date, ServerUUID serverUUID, long threshold) { String selectActivityIndex = selectActivityIndexSQL(); String selectIndexes = SELECT + "activity_index" + @@ -170,7 +174,7 @@ public class ActivityIndexQueries { }; } - public static Query countNewPlayersTurnedRegular(long after, long before, UUID serverUUID, Long threshold) { + public static Query countNewPlayersTurnedRegular(long after, long before, ServerUUID serverUUID, Long threshold) { String selectActivityIndex = selectActivityIndexSQL(); String selectActivePlayerCount = SELECT + "COUNT(1) as count" + @@ -207,7 +211,7 @@ public class ActivityIndexQueries { * @param threshold Playtime threshold * @return Query how many players went from regular to inactive in a span of time. */ - public static Query countRegularPlayersTurnedInactive(long start, long end, UUID serverUUID, Long threshold) { + public static Query countRegularPlayersTurnedInactive(long start, long end, ServerUUID serverUUID, Long threshold) { String selectActivityIndex = selectActivityIndexSQL(); String selectActivePlayerCount = SELECT + "COUNT(1) as count" + @@ -238,7 +242,7 @@ public class ActivityIndexQueries { }; } - public static Query averagePlaytimePerRegularPlayer(long after, long before, UUID serverUUID, Long threshold) { + public static Query averagePlaytimePerRegularPlayer(long after, long before, ServerUUID serverUUID, Long threshold) { return database -> { // INNER JOIN limits the users to only those that are regular String selectPlaytimePerPlayer = SELECT + @@ -273,7 +277,7 @@ public class ActivityIndexQueries { }; } - public static Query averageSessionLengthPerRegularPlayer(long after, long before, UUID serverUUID, Long threshold) { + public static Query averageSessionLengthPerRegularPlayer(long after, long before, ServerUUID serverUUID, Long threshold) { return database -> { // INNER JOIN limits the users to only those that are regular String selectSessionLengthPerPlayer = SELECT + @@ -307,7 +311,7 @@ public class ActivityIndexQueries { }; } - public static Query averageAFKPerRegularPlayer(long after, long before, UUID serverUUID, Long threshold) { + public static Query averageAFKPerRegularPlayer(long after, long before, ServerUUID serverUUID, Long threshold) { return database -> { // INNER JOIN limits the users to only those that are regular String selectPlaytimePerPlayer = SELECT + @@ -342,7 +346,7 @@ public class ActivityIndexQueries { }; } - public static Query> activityIndexForNewPlayers(long after, long before, UUID serverUUID, Long threshold) { + public static Query> activityIndexForNewPlayers(long after, long before, ServerUUID serverUUID, Long threshold) { String selectNewUUIDs = SELECT + UserInfoTable.USER_UUID + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.REGISTERED + "<=?" + @@ -373,7 +377,7 @@ public class ActivityIndexQueries { }; } - public static Query averageActivityIndexForRetainedPlayers(long after, long before, UUID serverUUID, Long threshold) { + public static Query averageActivityIndexForRetainedPlayers(long after, long before, ServerUUID serverUUID, Long threshold) { String selectNewUUIDs = SELECT + UserInfoTable.USER_UUID + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.REGISTERED + "<=?" + @@ -413,7 +417,7 @@ public class ActivityIndexQueries { }; } - public static Query averageActivityIndexForNonRetainedPlayers(long after, long before, UUID serverUUID, Long threshold) { + public static Query averageActivityIndexForNonRetainedPlayers(long after, long before, ServerUUID serverUUID, Long threshold) { String selectNewUUIDs = SELECT + UserInfoTable.USER_UUID + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.REGISTERED + "<=?" + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/PlayerCountQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/PlayerCountQueries.java index d060e4b81..e186f1bfa 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/PlayerCountQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/analysis/PlayerCountQueries.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.queries.analysis; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.building.Sql; @@ -41,7 +42,7 @@ public class PlayerCountQueries { // Static method class } - private static QueryStatement queryPlayerCount(String sql, long after, long before, UUID serverUUID) { + private static QueryStatement queryPlayerCount(String sql, long after, long before, ServerUUID serverUUID) { return new QueryStatement(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { @@ -72,7 +73,7 @@ public class PlayerCountQueries { }; } - public static Query uniquePlayerCount(long after, long before, UUID serverUUID) { + public static Query uniquePlayerCount(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "COUNT(DISTINCT " + SessionsTable.USER_UUID + ") as player_count" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SESSION_END + "<=?" + @@ -98,14 +99,14 @@ public class PlayerCountQueries { return queryPlayerCount(sql, after, before); } - public static Query> uniquePlayerCounts(long after, long before) { + public static Query> uniquePlayerCounts(long after, long before) { String sql = SELECT + SessionsTable.SERVER_UUID + ",COUNT(DISTINCT " + SessionsTable.USER_UUID + ") as player_count" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SESSION_END + "<=?" + AND + SessionsTable.SESSION_START + ">=?" + GROUP_BY + UserInfoTable.SERVER_UUID; - return new QueryStatement>(sql) { + return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setLong(1, before); @@ -113,10 +114,10 @@ public class PlayerCountQueries { } @Override - public Map processResults(ResultSet set) throws SQLException { - Map byServer = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map byServer = new HashMap<>(); while (set.next()) { - byServer.put(UUID.fromString(set.getString(UserInfoTable.SERVER_UUID)), set.getInt("player_count")); + byServer.put(ServerUUID.fromString(set.getString(UserInfoTable.SERVER_UUID)), set.getInt("player_count")); } return byServer; } @@ -132,7 +133,7 @@ public class PlayerCountQueries { * @param serverUUID UUID of the Plan server * @return Map: Epoch ms (Start of day at 0 AM, no offset) - How many unique players played that day */ - public static Query> uniquePlayerCounts(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query> uniquePlayerCounts(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectUniquePlayersPerDay = SELECT + @@ -175,7 +176,7 @@ public class PlayerCountQueries { * @param serverUUID UUID of the Plan server * @return Map: Epoch ms (Start of day at 0 AM, no offset) - How many unique players played that day */ - public static Query> hourlyUniquePlayerCounts(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query> hourlyUniquePlayerCounts(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectUniquePlayersPerDay = SELECT + @@ -289,7 +290,7 @@ public class PlayerCountQueries { }; } - public static Query averageUniquePlayerCount(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query averageUniquePlayerCount(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectUniquePlayersPerDay = SELECT + @@ -320,7 +321,7 @@ public class PlayerCountQueries { }; } - public static Query newPlayerCount(long after, long before, UUID serverUUID) { + public static Query newPlayerCount(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "COUNT(1) as player_count" + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.REGISTERED + "<=?" + @@ -339,14 +340,14 @@ public class PlayerCountQueries { return queryPlayerCount(sql, after, before); } - public static Query> newPlayerCounts(long after, long before) { + public static Query> newPlayerCounts(long after, long before) { String sql = SELECT + UserInfoTable.SERVER_UUID + ",COUNT(1) as player_count" + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.REGISTERED + "<=?" + AND + UserInfoTable.REGISTERED + ">=?" + GROUP_BY + UserInfoTable.SERVER_UUID; - return new QueryStatement>(sql) { + return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setLong(1, before); @@ -354,10 +355,10 @@ public class PlayerCountQueries { } @Override - public Map processResults(ResultSet set) throws SQLException { - Map byServer = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map byServer = new HashMap<>(); while (set.next()) { - byServer.put(UUID.fromString(set.getString(UserInfoTable.SERVER_UUID)), set.getInt("player_count")); + byServer.put(ServerUUID.fromString(set.getString(UserInfoTable.SERVER_UUID)), set.getInt("player_count")); } return byServer; } @@ -373,7 +374,7 @@ public class PlayerCountQueries { * @param serverUUID UUID of the Plan server * @return Map: Epoch ms (Start of day at 0 AM, no offset) - How many new players joined that day */ - public static Query> newPlayerCounts(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query> newPlayerCounts(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectNewPlayersQuery = SELECT + @@ -530,7 +531,7 @@ public class PlayerCountQueries { }; } - public static Query averageNewPlayerCount(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query averageNewPlayerCount(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectNewPlayersQuery = SELECT + @@ -561,7 +562,7 @@ public class PlayerCountQueries { }; } - public static Query retainedPlayerCount(long after, long before, UUID serverUUID) { + public static Query retainedPlayerCount(long after, long before, ServerUUID serverUUID) { String selectNewUUIDs = SELECT + UserInfoTable.USER_UUID + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.REGISTERED + ">=?" + @@ -599,7 +600,7 @@ public class PlayerCountQueries { }; } - public static Query operators(UUID serverUUID) { + public static Query operators(ServerUUID serverUUID) { String sql = SELECT + "COUNT(1) as player_count" + FROM + UserInfoTable.TABLE_NAME + WHERE + UserInfoTable.SERVER_UUID + "=?" + AND + UserInfoTable.OP + "=?"; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PerServerContainerQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PerServerContainerQuery.java index e646a30e5..35cded68a 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PerServerContainerQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PerServerContainerQuery.java @@ -21,8 +21,9 @@ import com.djrapitops.plan.delivery.domain.container.PerServerContainer; import com.djrapitops.plan.delivery.domain.container.SupplierDataContainer; import com.djrapitops.plan.delivery.domain.keys.Key; import com.djrapitops.plan.delivery.domain.keys.PerServerKeys; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.UserInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.PerServerAggregateQueries; import com.djrapitops.plan.storage.database.queries.Query; @@ -58,10 +59,10 @@ public class PerServerContainerQuery implements Query { totalDeathCount(db, perServerContainer); worldTimes(db, perServerContainer); - Map> sessions = db.query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); - for (Map.Entry> entry : sessions.entrySet()) { - UUID serverUUID = entry.getKey(); - List serverSessions = entry.getValue(); + Map> sessions = db.query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); + for (Map.Entry> entry : sessions.entrySet()) { + ServerUUID serverUUID = entry.getKey(); + List serverSessions = entry.getValue(); DataContainer serverContainer = perServerContainer.getOrDefault(serverUUID, new SupplierDataContainer()); serverContainer.putRawData(PerServerKeys.SESSIONS, serverSessions); @@ -97,8 +98,8 @@ public class PerServerContainerQuery implements Query { container.putUserInfo(userInformation); } - private void matchingEntrySet(Key key, Query> map, SQLDB db, PerServerContainer container) { - for (Map.Entry entry : db.query(map).entrySet()) { + private void matchingEntrySet(Key key, Query> map, SQLDB db, PerServerContainer container) { + for (Map.Entry entry : db.query(map).entrySet()) { container.putToContainerOfServer(entry.getKey(), key, entry.getValue()); } } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PlayerContainerQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PlayerContainerQuery.java index 194acdd8e..6508e56fe 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PlayerContainerQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/PlayerContainerQuery.java @@ -20,11 +20,11 @@ import com.djrapitops.plan.delivery.domain.container.PerServerContainer; import com.djrapitops.plan.delivery.domain.container.PlayerContainer; import com.djrapitops.plan.delivery.domain.keys.Key; import com.djrapitops.plan.delivery.domain.keys.PlayerKeys; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.domain.mutators.PerServerMutator; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.domain.BaseUser; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.WorldTimes; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; @@ -69,8 +69,9 @@ public class PlayerContainerQuery implements Query { container.putSupplier(PlayerKeys.OPERATOR, () -> new PerServerMutator(container.getValue(PlayerKeys.PER_SERVER).orElse(new PerServerContainer())).isOperator()); container.putCachingSupplier(PlayerKeys.SESSIONS, () -> { - List sessions = new PerServerMutator(container.getValue(PlayerKeys.PER_SERVER).orElse(new PerServerContainer())).flatMapSessions(); - container.getValue(PlayerKeys.ACTIVE_SESSION).ifPresent(sessions::add); + List sessions = new PerServerMutator(container.getValue(PlayerKeys.PER_SERVER).orElse(new PerServerContainer())).flatMapSessions(); + container.getValue(PlayerKeys.ACTIVE_SESSION).map(ActiveSession::toFinishedSessionFromStillActive) + .ifPresent(sessions::add); return sessions; } ); @@ -78,7 +79,7 @@ public class PlayerContainerQuery implements Query { { WorldTimes worldTimes = db.query(WorldTimesQueries.fetchPlayerTotalWorldTimes(uuid)); container.getValue(PlayerKeys.ACTIVE_SESSION).ifPresent(session -> worldTimes.add( - session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes())) + session.getExtraData(WorldTimes.class).orElseGet(WorldTimes::new)) ); return worldTimes; }); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/ServerPlayerContainersQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/ServerPlayerContainersQuery.java index 3e64935a2..e42e1b09e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/ServerPlayerContainersQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/containers/ServerPlayerContainersQuery.java @@ -20,10 +20,10 @@ import com.djrapitops.plan.delivery.domain.Nickname; import com.djrapitops.plan.delivery.domain.container.PerServerContainer; import com.djrapitops.plan.delivery.domain.container.PlayerContainer; import com.djrapitops.plan.delivery.domain.keys.PlayerKeys; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.domain.mutators.PerServerMutator; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; import com.djrapitops.plan.gathering.domain.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.objects.*; @@ -43,9 +43,9 @@ import java.util.*; */ public class ServerPlayerContainersQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public ServerPlayerContainersQuery(UUID serverUUID) { + public ServerPlayerContainersQuery(ServerUUID serverUUID) { this.serverUUID = serverUUID; } @@ -58,7 +58,7 @@ public class ServerPlayerContainersQuery implements Query> Map> geoInformation = db.query(GeoInfoQueries.fetchServerGeoInformation(serverUUID)); Map> nicknames = db.query(NicknameQueries.fetchNicknameDataOfServer(serverUUID)); Map> pingData = db.query(PingQueries.fetchPingDataOfServer(serverUUID)); - Map> sessions = db.query(SessionQueries.fetchSessionsOfServer(serverUUID)); + Map> sessions = db.query(SessionQueries.fetchSessionsOfServer(serverUUID)); Map userInformation = db.query(UserInfoQueries.fetchUserInformationOfServer(serverUUID)); @@ -91,8 +91,10 @@ public class ServerPlayerContainersQuery implements Query> container.putRawData(PlayerKeys.PER_SERVER, perServerInfo.get(uuid)); container.putCachingSupplier(PlayerKeys.SESSIONS, () -> { - List playerSessions = sessions.getOrDefault(uuid, new ArrayList<>()); - container.getValue(PlayerKeys.ACTIVE_SESSION).ifPresent(playerSessions::add); + List playerSessions = sessions.getOrDefault(uuid, new ArrayList<>()); + container.getValue(PlayerKeys.ACTIVE_SESSION) + .map(ActiveSession::toFinishedSessionFromStillActive) + .ifPresent(playerSessions::add); return playerSessions; } ); @@ -102,7 +104,7 @@ public class ServerPlayerContainersQuery implements Query> WorldTimes worldTimes = new PerServerMutator(container.getUnsafe(PlayerKeys.PER_SERVER)).flatMapWorldTimes(); container.getValue(PlayerKeys.ACTIVE_SESSION) .ifPresent(session -> worldTimes.add( - session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes())) + session.getExtraData(WorldTimes.class).orElseGet(WorldTimes::new)) ); return worldTimes; }); @@ -131,7 +133,7 @@ public class ServerPlayerContainersQuery implements Query> */ private Map getPerServerData( Map userInformation, - Map> sessions, + Map> sessions, Map> ping ) { Map perServerContainers = new HashMap<>(); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/filter/filters/PluginGroupsFilter.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/filter/filters/PluginGroupsFilter.java index 8a10aa9ab..a580dbea0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/filter/filters/PluginGroupsFilter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/filter/filters/PluginGroupsFilter.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.extension.implementation.providers.ProviderIdentifier import com.djrapitops.plan.extension.implementation.storage.queries.ExtensionUUIDsInGroupQuery; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.filter.SpecifiedFilterInformation; @@ -100,7 +101,7 @@ public class PluginGroupsFilter extends MultiOptionFilter { while (set.next()) { String plugin = set.getString("plugin_name"); String provider = set.getString("provider_name"); - UUID serverUUID = UUID.fromString(set.getString("server_uuid")); + ServerUUID serverUUID = ServerUUID.fromString(set.getString("server_uuid")); ProviderIdentifier identifier = new ProviderIdentifier(serverUUID, plugin, provider); identifier.setServerName(Server.getIdentifiableName( set.getString("server_name"), diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/BaseUserQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/BaseUserQueries.java index 6f36a9458..487d5ee54 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/BaseUserQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/BaseUserQueries.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.gathering.domain.BaseUser; import com.djrapitops.plan.gathering.domain.UserInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -116,7 +117,7 @@ public class BaseUserQueries { * @param serverUUID UUID of the Plan server. * @return Collection: BaseUsers */ - public static Query> fetchServerBaseUsers(UUID serverUUID) { + public static Query> fetchServerBaseUsers(ServerUUID serverUUID) { String sql = SELECT + UsersTable.TABLE_NAME + '.' + UsersTable.USER_UUID + ',' + UsersTable.USER_NAME + ',' + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/GeoInfoQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/GeoInfoQueries.java index 7186a7a9b..aa9f78a05 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/GeoInfoQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/GeoInfoQueries.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.gathering.domain.GeoInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -108,7 +109,7 @@ public class GeoInfoQueries { }; } - public static Query>> fetchServerGeoInformation(UUID serverUUID) { + public static Query>> fetchServerGeoInformation(ServerUUID serverUUID) { String sql = SELECT + GeoInfoTable.TABLE_NAME + '.' + GeoInfoTable.USER_UUID + ',' + GeoInfoTable.GEOLOCATION + ',' + GeoInfoTable.LAST_USED + @@ -189,7 +190,7 @@ public class GeoInfoQueries { }; } - public static Query> serverGeolocationCounts(UUID serverUUID) { + public static Query> serverGeolocationCounts(ServerUUID serverUUID) { String selectGeolocations = SELECT + GeoInfoTable.USER_UUID + ", " + GeoInfoTable.GEOLOCATION + ", " + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/KillQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/KillQueries.java index 66b3ca948..b682d0165 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/KillQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/KillQueries.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.gathering.domain.PlayerKill; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.KillsTable; @@ -45,7 +46,7 @@ public class KillQueries { // Static method class } - public static Query> fetchPlayerKillsOnServer(UUID serverUUID, int limit) { + public static Query> fetchPlayerKillsOnServer(ServerUUID serverUUID, int limit) { String sql = SELECT + KillsTable.KILLER_UUID + ", " + KillsTable.VICTIM_UUID + ", " + @@ -152,7 +153,7 @@ public class KillQueries { return Optional.empty(); } - public static Query playerKillCount(long after, long before, UUID serverUUID) { + public static Query playerKillCount(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "COUNT(1) as count" + FROM + KillsTable.TABLE_NAME + WHERE + KillsTable.SERVER_UUID + "=?" + @@ -173,7 +174,7 @@ public class KillQueries { }; } - public static Query averageKDR(long after, long before, UUID serverUUID) { + public static Query averageKDR(long after, long before, ServerUUID serverUUID) { String selectKillCounts = SELECT + "COUNT(1) as kills," + KillsTable.KILLER_UUID + FROM + KillsTable.TABLE_NAME + WHERE + KillsTable.SERVER_UUID + "=?" + @@ -219,7 +220,7 @@ public class KillQueries { }; } - public static Query mobKillCount(long after, long before, UUID serverUUID) { + public static Query mobKillCount(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "SUM(" + SessionsTable.MOB_KILLS + ") as count" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SERVER_UUID + "=?" + @@ -240,7 +241,7 @@ public class KillQueries { }; } - public static Query deathCount(long after, long before, UUID serverUUID) { + public static Query deathCount(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "SUM(" + SessionsTable.DEATHS + ") as count" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SERVER_UUID + "=?" + @@ -261,7 +262,7 @@ public class KillQueries { }; } - public static Query> topWeaponsOfServer(long after, long before, UUID serverUUID, int limit) { + public static Query> topWeaponsOfServer(long after, long before, ServerUUID serverUUID, int limit) { String innerSQL = SELECT + KillsTable.WEAPON + ", COUNT(1) as kills" + FROM + KillsTable.TABLE_NAME + WHERE + KillsTable.SERVER_UUID + "=?" + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NewerConfigQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NewerConfigQuery.java index 9bacca9ff..a3fafb0ce 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NewerConfigQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NewerConfigQuery.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.queries.objects; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.Config; import com.djrapitops.plan.settings.config.ConfigReader; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -25,7 +26,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Optional; import java.util.Scanner; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; import static com.djrapitops.plan.storage.database.sql.tables.SettingsTable.*; @@ -41,7 +41,7 @@ public class NewerConfigQuery extends QueryStatement> { WHERE + UPDATED + ">?" + AND + SERVER_UUID + "=? LIMIT 1"; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final long updatedAfter; /** @@ -50,7 +50,7 @@ public class NewerConfigQuery extends QueryStatement> { * @param serverUUID UUID of the server * @param updatedAfter Epoch ms. */ - public NewerConfigQuery(UUID serverUUID, long updatedAfter) { + public NewerConfigQuery(ServerUUID serverUUID, long updatedAfter) { super(SELECT_STATEMENT); this.serverUUID = serverUUID; this.updatedAfter = updatedAfter; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NicknameQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NicknameQueries.java index ec2abebcf..4387cb779 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NicknameQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/NicknameQueries.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.delivery.domain.Nickname; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -47,7 +48,7 @@ public class NicknameQueries { * * @return Multimap: Server UUID - (Player UUID - List of nicknames) */ - public static Query>>> fetchAllNicknameData() { + public static Query>>> fetchAllNicknameData() { String sql = SELECT + NicknamesTable.NICKNAME + ',' + NicknamesTable.LAST_USED + ',' + @@ -55,12 +56,12 @@ public class NicknameQueries { NicknamesTable.SERVER_UUID + FROM + NicknamesTable.TABLE_NAME; - return new QueryAllStatement>>>(sql, 5000) { + return new QueryAllStatement>>>(sql, 5000) { @Override - public Map>> processResults(ResultSet set) throws SQLException { - Map>> map = new HashMap<>(); + public Map>> processResults(ResultSet set) throws SQLException { + Map>> map = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(NicknamesTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(NicknamesTable.SERVER_UUID)); UUID uuid = UUID.fromString(set.getString(NicknamesTable.USER_UUID)); Map> serverMap = map.computeIfAbsent(serverUUID, Maps::create); @@ -77,7 +78,7 @@ public class NicknameQueries { }; } - public static Query> fetchLastSeenNicknameOfPlayer(UUID playerUUID, UUID serverUUID) { + public static Query> fetchLastSeenNicknameOfPlayer(UUID playerUUID, ServerUUID serverUUID) { String subQuery = SELECT + "MAX(" + NicknamesTable.LAST_USED + ") FROM " + NicknamesTable.TABLE_NAME + WHERE + NicknamesTable.USER_UUID + "=?" + AND + NicknamesTable.SERVER_UUID + "=?" + @@ -130,7 +131,7 @@ public class NicknameQueries { public List processResults(ResultSet set) throws SQLException { List nicknames = new ArrayList<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(NicknamesTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(NicknamesTable.SERVER_UUID)); String nickname = set.getString(NicknamesTable.NICKNAME); nicknames.add(new Nickname(nickname, set.getLong(NicknamesTable.LAST_USED), serverUUID)); } @@ -145,12 +146,11 @@ public class NicknameQueries { * @param serverUUID UUID the the Plan server. * @return Map: Player UUID - List of Nicknames on the server. */ - public static Query>> fetchNicknameDataOfServer(UUID serverUUID) { + public static Query>> fetchNicknameDataOfServer(ServerUUID serverUUID) { String sql = SELECT + NicknamesTable.NICKNAME + ',' + NicknamesTable.LAST_USED + ',' + - NicknamesTable.USER_UUID + ',' + - NicknamesTable.SERVER_UUID + + NicknamesTable.USER_UUID + FROM + NicknamesTable.TABLE_NAME + WHERE + NicknamesTable.SERVER_UUID + "=?"; @@ -164,7 +164,6 @@ public class NicknameQueries { public Map> processResults(ResultSet set) throws SQLException { Map> serverMap = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(NicknamesTable.SERVER_UUID)); UUID uuid = UUID.fromString(set.getString(NicknamesTable.USER_UUID)); List nicknames = serverMap.computeIfAbsent(uuid, Lists::create); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/PingQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/PingQueries.java index 6a472291d..145df595c 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/PingQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/PingQueries.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.gathering.domain.Ping; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -69,7 +70,7 @@ public class PingQueries { while (set.next()) { UUID uuid = UUID.fromString(set.getString(PingTable.USER_UUID)); - UUID serverUUID = UUID.fromString(set.getString(PingTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(PingTable.SERVER_UUID)); long date = set.getLong(PingTable.DATE); double avgPing = set.getDouble(PingTable.AVG_PING); int minPing = set.getInt(PingTable.MIN_PING); @@ -108,7 +109,7 @@ public class PingQueries { while (set.next()) { pings.add(new Ping( set.getLong(PingTable.DATE), - UUID.fromString(set.getString(PingTable.SERVER_UUID)), + ServerUUID.fromString(set.getString(PingTable.SERVER_UUID)), set.getInt(PingTable.MIN_PING), set.getInt(PingTable.MAX_PING), set.getDouble(PingTable.AVG_PING) @@ -121,7 +122,7 @@ public class PingQueries { }; } - public static Query>> fetchPingDataOfServer(UUID serverUUID) { + public static Query>> fetchPingDataOfServer(ServerUUID serverUUID) { String sql = SELECT + PingTable.DATE + ',' + PingTable.MAX_PING + ',' + @@ -144,7 +145,7 @@ public class PingQueries { }; } - public static Query> fetchPingDataOfServer(long after, long before, UUID serverUUID) { + public static Query> fetchPingDataOfServer(long after, long before, ServerUUID serverUUID) { String sql = SELECT + PingTable.DATE + ", " + PingTable.MAX_PING + ", " + @@ -168,7 +169,7 @@ public class PingQueries { List pings = new ArrayList<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(PingTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(PingTable.SERVER_UUID)); long date = set.getLong(PingTable.DATE); double avgPing = set.getDouble(PingTable.AVG_PING); int minPing = set.getInt(PingTable.MIN_PING); @@ -185,7 +186,7 @@ public class PingQueries { }; } - public static Query> fetchPingDataOfServerByGeolocation(UUID serverUUID) { + public static Query> fetchPingDataOfServerByGeolocation(ServerUUID serverUUID) { String selectPingOfServer = SELECT + PingTable.MAX_PING + ", " + PingTable.MIN_PING + ", " + @@ -292,7 +293,7 @@ public class PingQueries { }; } - public static Query averagePing(long after, long before, UUID serverUUID) { + public static Query averagePing(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "AVG(" + PingTable.AVG_PING + ") as average" + FROM + PingTable.TABLE_NAME + WHERE + PingTable.SERVER_UUID + "=?" + AND + PingTable.DATE + ">=?" + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/ServerQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/ServerQueries.java index 3a5e6c860..e2a143714 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/ServerQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/ServerQueries.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -47,20 +48,20 @@ public class ServerQueries { * * @return Map: Server UUID - Plan Server Information */ - public static Query> fetchPlanServerInformation() { + public static Query> fetchPlanServerInformation() { String sql = SELECT + '*' + FROM + ServerTable.TABLE_NAME + WHERE + ServerTable.INSTALLED + "=?"; - return new QueryStatement>(sql, 100) { + return new QueryStatement>(sql, 100) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setBoolean(1, true); } @Override - public Map processResults(ResultSet set) throws SQLException { - Map servers = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map servers = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(ServerTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(ServerTable.SERVER_UUID)); servers.put(serverUUID, new Server( set.getInt(ServerTable.SERVER_ID), serverUUID, @@ -78,7 +79,7 @@ public class ServerQueries { return db -> db.query(fetchPlanServerInformation()).values(); } - public static Query> fetchServerMatchingIdentifier(UUID serverUUID) { + public static Query> fetchServerMatchingIdentifier(ServerUUID serverUUID) { return fetchServerMatchingIdentifier(serverUUID.toString()); } @@ -106,7 +107,7 @@ public class ServerQueries { if (set.next()) { return Optional.of(new Server( set.getInt(ServerTable.SERVER_ID), - UUID.fromString(set.getString(ServerTable.SERVER_UUID)), + ServerUUID.fromString(set.getString(ServerTable.SERVER_UUID)), set.getString(ServerTable.NAME), set.getString(ServerTable.WEB_ADDRESS), set.getBoolean(ServerTable.PROXY) @@ -134,7 +135,7 @@ public class ServerQueries { if (set.next()) { return Optional.of(new Server( set.getInt(ServerTable.SERVER_ID), - UUID.fromString(set.getString(ServerTable.SERVER_UUID)), + ServerUUID.fromString(set.getString(ServerTable.SERVER_UUID)), set.getString(ServerTable.NAME), set.getString(ServerTable.WEB_ADDRESS), set.getBoolean(ServerTable.PROXY) @@ -145,17 +146,17 @@ public class ServerQueries { }; } - public static Query> fetchServerNames() { + public static Query> fetchServerNames() { String sql = Select.from(ServerTable.TABLE_NAME, ServerTable.SERVER_UUID, ServerTable.NAME) .toString(); - return new QueryAllStatement>(sql) { + return new QueryAllStatement>(sql) { @Override - public Map processResults(ResultSet set) throws SQLException { - Map names = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map names = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(ServerTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(ServerTable.SERVER_UUID)); names.put(serverUUID, set.getString(ServerTable.NAME)); } return names; @@ -190,7 +191,7 @@ public class ServerQueries { while (set.next()) { matches.add(new Server( set.getInt(ServerTable.SERVER_ID), - UUID.fromString(set.getString(ServerTable.SERVER_UUID)), + ServerUUID.fromString(set.getString(ServerTable.SERVER_UUID)), set.getString(ServerTable.NAME), set.getString(ServerTable.WEB_ADDRESS), set.getBoolean(ServerTable.PROXY) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java index cacdde9b0..0cc8c26b4 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/SessionQueries.java @@ -17,13 +17,12 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.delivery.domain.DateHolder; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.delivery.domain.PlayerName; +import com.djrapitops.plan.delivery.domain.ServerName; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; -import com.djrapitops.plan.gathering.domain.GMTimes; -import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; -import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.gathering.domain.*; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -42,7 +41,7 @@ import java.util.stream.Collectors; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; /** - * Queries for {@link Session} objects. + * Queries for {@link FinishedSession} objects. * * @author AuroraLS3 */ @@ -90,12 +89,12 @@ public class SessionQueries { * * @return List of sessions */ - public static Query> fetchAllSessions() { + public static Query> fetchAllSessions() { String sql = SELECT_SESSIONS_STATEMENT + ORDER_BY_SESSION_START_DESC; - return new QueryAllStatement>(sql, 50000) { + return new QueryAllStatement>(sql, 50000) { @Override - public List processResults(ResultSet set) throws SQLException { + public List processResults(ResultSet set) throws SQLException { return extractDataFromSessionSelectStatement(set); } }; @@ -107,22 +106,22 @@ public class SessionQueries { * @param serverUUID UUID of the Plan server. * @return Map: Player UUID - List of sessions on the server. */ - public static Query>> fetchSessionsOfServer(UUID serverUUID) { + public static Query>> fetchSessionsOfServer(ServerUUID serverUUID) { return db -> SessionsMutator.sortByPlayers(db.query(fetchSessionsOfServerFlat(serverUUID))); } - public static QueryStatement> fetchSessionsOfServerFlat(UUID serverUUID) { + public static QueryStatement> fetchSessionsOfServerFlat(ServerUUID serverUUID) { String sql = SELECT_SESSIONS_STATEMENT + WHERE + "s." + SessionsTable.SERVER_UUID + "=?" + ORDER_BY_SESSION_START_DESC; - return new QueryStatement>(sql, 50000) { + return new QueryStatement>(sql, 50000) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, serverUUID.toString()); } @Override - public List processResults(ResultSet set) throws SQLException { + public List processResults(ResultSet set) throws SQLException { return extractDataFromSessionSelectStatement(set); } }; @@ -134,27 +133,27 @@ public class SessionQueries { * @param playerUUID UUID of the Player. * @return Map: Server UUID - List of sessions on the server. */ - public static Query>> fetchSessionsOfPlayer(UUID playerUUID) { + public static Query>> fetchSessionsOfPlayer(UUID playerUUID) { String sql = SELECT_SESSIONS_STATEMENT + WHERE + "s." + SessionsTable.USER_UUID + "=?" + ORDER_BY_SESSION_START_DESC; - return new QueryStatement>>(sql, 50000) { + return new QueryStatement>>(sql, 50000) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, playerUUID.toString()); } @Override - public Map> processResults(ResultSet set) throws SQLException { - List sessions = extractDataFromSessionSelectStatement(set); + public Map> processResults(ResultSet set) throws SQLException { + List sessions = extractDataFromSessionSelectStatement(set); return SessionsMutator.sortByServers(sessions); } }; } - private static List extractDataFromSessionSelectStatement(ResultSet set) throws SQLException { + private static List extractDataFromSessionSelectStatement(ResultSet set) throws SQLException { // Server UUID - Player UUID - Session Start - Session - Map>> tempSessionMap = new HashMap<>(); + Map>> byServer = new HashMap<>(); // Utilities String[] gms = GMTimes.getGMKeyArray(); @@ -162,26 +161,32 @@ public class SessionQueries { Comparator longRecentComparator = (one, two) -> Long.compare(two, one); // Descending order, most recent first. while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(SessionsTable.SERVER_UUID)); - Map> serverSessions = tempSessionMap.computeIfAbsent(serverUUID, Maps::create); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(SessionsTable.SERVER_UUID)); + Map> serverSessions = byServer.computeIfAbsent(serverUUID, Maps::create); UUID playerUUID = UUID.fromString(set.getString(SessionsTable.USER_UUID)); - SortedMap playerSessions = serverSessions.computeIfAbsent(playerUUID, key -> new TreeMap<>(longRecentComparator)); + SortedMap playerSessions = serverSessions.computeIfAbsent(playerUUID, key -> new TreeMap<>(longRecentComparator)); long sessionStart = set.getLong(SessionsTable.SESSION_START); // id, uuid, serverUUID, sessionStart, sessionEnd, mobKills, deaths, afkTime - Session session = playerSessions.getOrDefault(sessionStart, new Session( - set.getInt(SessionsTable.ID), + FinishedSession session = playerSessions.getOrDefault(sessionStart, new FinishedSession( playerUUID, serverUUID, sessionStart, set.getLong(SessionsTable.SESSION_END), - set.getInt(SessionsTable.MOB_KILLS), - set.getInt(SessionsTable.DEATHS), - set.getLong(SessionsTable.AFK_TIME) + set.getLong(SessionsTable.AFK_TIME), + new DataMap() )); - WorldTimes worldTimes = session.getValue(SessionKeys.WORLD_TIMES).orElse(new WorldTimes()); + DataMap extraData = session.getExtraData(); + extraData.put(FinishedSession.Id.class, new FinishedSession.Id(set.getInt(SessionsTable.ID))); + extraData.put(MobKillCounter.class, new MobKillCounter(set.getInt(SessionsTable.MOB_KILLS))); + extraData.put(DeathCounter.class, new DeathCounter(set.getInt(SessionsTable.DEATHS))); + + Optional existingWorldTimes = extraData.get(WorldTimes.class); + Optional existingPlayerKills = extraData.get(PlayerKills.class); + + WorldTimes worldTimes = existingWorldTimes.orElseGet(WorldTimes::new); String worldName = set.getString(WorldTable.NAME); if (!worldTimes.contains(worldName)) { @@ -194,28 +199,33 @@ public class SessionQueries { worldTimes.setGMTimesForWorld(worldName, gmTimes); } + if (!existingWorldTimes.isPresent()) extraData.put(WorldTimes.class, worldTimes); + + PlayerKills playerKills = existingPlayerKills.orElseGet(PlayerKills::new); + String victimName = set.getString("victim_name"); if (victimName != null) { UUID killer = UUID.fromString(set.getString(KillsTable.KILLER_UUID)); UUID victim = UUID.fromString(set.getString(KillsTable.VICTIM_UUID)); long date = set.getLong(KillsTable.DATE); String weapon = set.getString(KillsTable.WEAPON); - List playerKills = session.getPlayerKills(); PlayerKill newKill = new PlayerKill(killer, victim, weapon, date, victimName); + if (!playerKills.contains(newKill)) { playerKills.add(newKill); } } + if (!existingPlayerKills.isPresent()) extraData.put(PlayerKills.class, playerKills); - session.putRawData(SessionKeys.NAME, set.getString("name")); - session.putRawData(SessionKeys.SERVER_NAME, set.getString("server_name")); + extraData.put(PlayerName.class, new PlayerName(set.getString("name"))); + extraData.put(ServerName.class, new ServerName(set.getString("server_name"))); session.setAsFirstSessionIfMatches(set.getLong("registered")); playerSessions.put(sessionStart, session); } - return tempSessionMap.values().stream() + return byServer.values().stream() .map(Map::values) .flatMap(Collection::stream) .map(SortedMap::values) @@ -224,7 +234,7 @@ public class SessionQueries { .collect(Collectors.toList()); } - public static Query> fetchServerSessionsWithoutKillOrWorldData(long after, long before, UUID serverUUID) { + public static Query> fetchServerSessionsWithoutKillOrWorldData(long after, long before, ServerUUID serverUUID) { String sql = SELECT + SessionsTable.ID + ',' + SessionsTable.USER_UUID + ',' + @@ -238,7 +248,7 @@ public class SessionQueries { AND + SessionsTable.SESSION_START + ">=?" + AND + SessionsTable.SESSION_START + "<=?"; - return new QueryStatement>(sql, 1000) { + return new QueryStatement>(sql, 1000) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, serverUUID.toString()); @@ -247,8 +257,8 @@ public class SessionQueries { } @Override - public List processResults(ResultSet set) throws SQLException { - List sessions = new ArrayList<>(); + public List processResults(ResultSet set) throws SQLException { + List sessions = new ArrayList<>(); while (set.next()) { UUID uuid = UUID.fromString(set.getString(SessionsTable.USER_UUID)); long start = set.getLong(SessionsTable.SESSION_START); @@ -259,15 +269,19 @@ public class SessionQueries { int id = set.getInt(SessionsTable.ID); long timeAFK = set.getLong(SessionsTable.AFK_TIME); + DataMap extraData = new DataMap(); + extraData.put(FinishedSession.Id.class, new FinishedSession.Id(id)); + extraData.put(DeathCounter.class, new DeathCounter(deaths)); + extraData.put(MobKillCounter.class, new MobKillCounter(mobKills)); - sessions.add(new Session(id, uuid, serverUUID, start, end, mobKills, deaths, timeAFK)); + sessions.add(new FinishedSession(uuid, serverUUID, start, end, timeAFK, extraData)); } return sessions; } }; } - private static Query fetchLatestSessionStartLimitForServer(UUID serverUUID, int limit) { + private static Query fetchLatestSessionStartLimitForServer(ServerUUID serverUUID, int limit) { String sql = SELECT + SessionsTable.SESSION_START + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SERVER_UUID + "=?" + ORDER_BY_SESSION_START_DESC + " LIMIT ?"; @@ -311,7 +325,7 @@ public class SessionQueries { }; } - public static Query> fetchLatestSessionsOfServer(UUID serverUUID, int limit) { + public static Query> fetchLatestSessionsOfServer(ServerUUID serverUUID, int limit) { String sql = SELECT_SESSIONS_STATEMENT + WHERE + "s." + SessionsTable.SERVER_UUID + "=?" + AND + "s." + SessionsTable.SESSION_START + ">=?" + @@ -319,7 +333,7 @@ public class SessionQueries { return db -> { Long start = db.query(fetchLatestSessionStartLimitForServer(serverUUID, limit)); - return db.query(new QueryStatement>(sql) { + return db.query(new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, serverUUID.toString()); @@ -327,14 +341,14 @@ public class SessionQueries { } @Override - public List processResults(ResultSet set) throws SQLException { + public List processResults(ResultSet set) throws SQLException { return extractDataFromSessionSelectStatement(set); } }); }; } - public static Query> fetchLatestSessions(int limit) { + public static Query> fetchLatestSessions(int limit) { String sql = SELECT_SESSIONS_STATEMENT // Fix for "First Session" icons in the Most recent sessions on network page .replace(LEFT_JOIN + UserInfoTable.TABLE_NAME + " u_info on (u_info." + UserInfoTable.USER_UUID + "=s." + SessionsTable.USER_UUID + AND + "u_info." + UserInfoTable.SERVER_UUID + "=s." + SessionsTable.SERVER_UUID + ')', "") @@ -343,21 +357,21 @@ public class SessionQueries { ORDER_BY_SESSION_START_DESC; return db -> { Long start = db.query(fetchLatestSessionStartLimit(limit)); - return db.query(new QueryStatement>(sql) { + return db.query(new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setLong(1, start != null ? start : 0L); } @Override - public List processResults(ResultSet set) throws SQLException { + public List processResults(ResultSet set) throws SQLException { return extractDataFromSessionSelectStatement(set); } }); }; } - public static Query sessionCount(long after, long before, UUID serverUUID) { + public static Query sessionCount(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "COUNT(1) as count" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SERVER_UUID + "=?" + @@ -406,7 +420,7 @@ public class SessionQueries { * @param serverUUID UUID of the Plan server. * @return Map - Epoch ms (Start of day at 0 AM, no offset) : Session count of that day */ - public static Query> sessionCountPerDay(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query> sessionCountPerDay(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectSessionsPerDay = SELECT + @@ -440,7 +454,7 @@ public class SessionQueries { }; } - public static Query playtime(long after, long before, UUID serverUUID) { + public static Query playtime(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "SUM(" + SessionsTable.SESSION_END + '-' + SessionsTable.SESSION_START + ") as playtime" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SERVER_UUID + "=?" + @@ -461,14 +475,14 @@ public class SessionQueries { }; } - public static Query> playtimeOfPlayer(long after, long before, UUID playerUUID) { + public static Query> playtimeOfPlayer(long after, long before, UUID playerUUID) { String sql = SELECT + SessionsTable.SERVER_UUID + ",SUM(" + SessionsTable.SESSION_END + '-' + SessionsTable.SESSION_START + ") as playtime" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.USER_UUID + "=?" + AND + SessionsTable.SESSION_END + ">=?" + AND + SessionsTable.SESSION_START + "<=?" + GROUP_BY + SessionsTable.SERVER_UUID; - return new QueryStatement>(sql) { + return new QueryStatement>(sql) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, playerUUID.toString()); @@ -477,10 +491,10 @@ public class SessionQueries { } @Override - public Map processResults(ResultSet set) throws SQLException { - Map playtimeOfPlayer = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map playtimeOfPlayer = new HashMap<>(); while (set.next()) { - playtimeOfPlayer.put(UUID.fromString(set.getString(SessionsTable.SERVER_UUID)), set.getLong("playtime")); + playtimeOfPlayer.put(ServerUUID.fromString(set.getString(SessionsTable.SERVER_UUID)), set.getLong("playtime")); } return playtimeOfPlayer; } @@ -515,7 +529,7 @@ public class SessionQueries { * @param serverUUID UUID of the Plan server. * @return Map - Epoch ms (Start of day at 0 AM, no offset) : Playtime of that day */ - public static Query> playtimePerDay(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query> playtimePerDay(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectPlaytimePerDay = SELECT + @@ -549,7 +563,7 @@ public class SessionQueries { }; } - public static Query averagePlaytimePerDay(long after, long before, long timeZoneOffset, UUID serverUUID) { + public static Query averagePlaytimePerDay(long after, long before, long timeZoneOffset, ServerUUID serverUUID) { return database -> { Sql sql = database.getSql(); String selectPlaytimePerDay = SELECT + @@ -580,7 +594,7 @@ public class SessionQueries { }; } - public static Query averagePlaytimePerPlayer(long after, long before, UUID serverUUID) { + public static Query averagePlaytimePerPlayer(long after, long before, ServerUUID serverUUID) { return database -> { String selectPlaytimePerPlayer = SELECT + SessionsTable.USER_UUID + "," + @@ -641,7 +655,7 @@ public class SessionQueries { }; } - public static Query averageAfkPerPlayer(long after, long before, UUID serverUUID) { + public static Query averageAfkPerPlayer(long after, long before, ServerUUID serverUUID) { return database -> { String selectAfkPerPlayer = SELECT + SessionsTable.USER_UUID + "," + @@ -702,7 +716,7 @@ public class SessionQueries { }; } - public static Query afkTime(long after, long before, UUID serverUUID) { + public static Query afkTime(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "SUM(" + SessionsTable.AFK_TIME + ") as afk_time" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.SERVER_UUID + "=?" + @@ -774,7 +788,7 @@ public class SessionQueries { }; } - public static Query lastSeen(UUID playerUUID, UUID serverUUID) { + public static Query lastSeen(UUID playerUUID, ServerUUID serverUUID) { String sql = SELECT + "MAX(" + SessionsTable.SESSION_END + ") as last_seen" + FROM + SessionsTable.TABLE_NAME + WHERE + SessionsTable.USER_UUID + "=?" + @@ -793,7 +807,7 @@ public class SessionQueries { }; } - public static Query activePlaytime(long after, long before, UUID serverUUID) { + public static Query activePlaytime(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "SUM(" + SessionsTable.SESSION_END + '-' + SessionsTable.SESSION_START + '-' + SessionsTable.AFK_TIME + ") as playtime" + FROM + SessionsTable.TABLE_NAME + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java index a260065d2..eee73bc21 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/TPSQueries.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.delivery.domain.DateObj; import com.djrapitops.plan.gathering.domain.TPS; import com.djrapitops.plan.gathering.domain.builders.TPSBuilder; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.ServerTable; @@ -44,7 +45,7 @@ public class TPSQueries { /* Static method class */ } - public static Query> fetchTPSDataOfServerInResolution(long after, long before, long resolution, UUID serverUUID) { + public static Query> fetchTPSDataOfServerInResolution(long after, long before, long resolution, ServerUUID serverUUID) { return db -> { String sql = SELECT + min("t." + DATE) + " as " + DATE + ',' + @@ -96,7 +97,7 @@ public class TPSQueries { .toTPS(); } - public static Query> fetchTPSDataOfServer(long after, long before, UUID serverUUID) { + public static Query> fetchTPSDataOfServer(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "*" + FROM + TABLE_NAME + WHERE + SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + DATE + ">=?" + @@ -123,7 +124,7 @@ public class TPSQueries { }; } - public static Query>> fetchViewPreviewGraphData(UUID serverUUID) { + public static Query>> fetchViewPreviewGraphData(ServerUUID serverUUID) { String sql = SELECT + min(DATE) + " as " + DATE + ',' + max(PLAYERS_ONLINE) + " as " + PLAYERS_ONLINE + FROM + TABLE_NAME + @@ -146,7 +147,7 @@ public class TPSQueries { }; } - public static Query>> fetchPlayersOnlineOfServer(long after, long before, UUID serverUUID) { + public static Query>> fetchPlayersOnlineOfServer(long after, long before, ServerUUID serverUUID) { String sql = SELECT + ServerTable.SERVER_UUID + ',' + DATE + ',' + PLAYERS_ONLINE + FROM + TABLE_NAME + INNER_JOIN + ServerTable.TABLE_NAME + " on " + ServerTable.TABLE_NAME + '.' + ServerTable.SERVER_ID + '=' + SERVER_ID + @@ -174,7 +175,7 @@ public class TPSQueries { }; } - public static Query>> fetchTPSDataOfAllServersBut(long after, long before, UUID leaveOut) { + public static Query>> fetchTPSDataOfAllServersBut(long after, long before, ServerUUID leaveOut) { String sql = SELECT + '*' + FROM + TABLE_NAME + INNER_JOIN + ServerTable.TABLE_NAME + " on " + ServerTable.TABLE_NAME + '.' + ServerTable.SERVER_ID + '=' + SERVER_ID + @@ -182,7 +183,7 @@ public class TPSQueries { AND + ServerTable.INSTALLED + "=?" + AND + DATE + "?"; - return new QueryStatement>>(sql, 1000) { + return new QueryStatement>>(sql, 1000) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, leaveOut.toString()); @@ -192,10 +193,10 @@ public class TPSQueries { } @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> byServer = new HashMap<>(); + public Map> processResults(ResultSet set) throws SQLException { + Map> byServer = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(ServerTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(ServerTable.SERVER_UUID)); List ofServer = byServer.computeIfAbsent(serverUUID, Lists::create); ofServer.add(extractTPS(set)); } @@ -204,7 +205,7 @@ public class TPSQueries { }; } - public static Query>> fetchPeakPlayerCount(UUID serverUUID, long afterDate) { + public static Query>> fetchPeakPlayerCount(ServerUUID serverUUID, long afterDate) { String subQuery = '(' + SELECT + "MAX(" + PLAYERS_ONLINE + ')' + FROM + TABLE_NAME + WHERE + SERVER_ID + "=" + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + DATE + ">= ?)"; String sql = SELECT + @@ -237,11 +238,11 @@ public class TPSQueries { }; } - public static Query>> fetchAllTimePeakPlayerCount(UUID serverUUID) { + public static Query>> fetchAllTimePeakPlayerCount(ServerUUID serverUUID) { return fetchPeakPlayerCount(serverUUID, 0); } - public static Query> fetchLatestTPSEntryForServer(UUID serverUUID) { + public static Query> fetchLatestTPSEntryForServer(ServerUUID serverUUID) { String sql = SELECT + "*" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + @@ -272,7 +273,7 @@ public class TPSQueries { }; } - public static Query averageTPS(long after, long before, UUID serverUUID) { + public static Query averageTPS(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "AVG(" + TPS + ") as average" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + TPS + ">=0" + @@ -293,7 +294,7 @@ public class TPSQueries { }; } - public static Query averageCPU(long after, long before, UUID serverUUID) { + public static Query averageCPU(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "AVG(" + CPU_USAGE + ") as average" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + CPU_USAGE + ">=0" + @@ -314,7 +315,7 @@ public class TPSQueries { }; } - public static Query averageRAM(long after, long before, UUID serverUUID) { + public static Query averageRAM(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "AVG(" + RAM_USAGE + ") as average" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + RAM_USAGE + ">=0" + @@ -335,7 +336,7 @@ public class TPSQueries { }; } - public static Query averageChunks(long after, long before, UUID serverUUID) { + public static Query averageChunks(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "AVG(" + CHUNKS + ") as average" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + CHUNKS + ">=0" + @@ -356,7 +357,7 @@ public class TPSQueries { }; } - public static Query averageEntities(long after, long before, UUID serverUUID) { + public static Query averageEntities(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "AVG(" + ENTITIES + ") as average" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + ENTITIES + ">=0" + @@ -377,7 +378,7 @@ public class TPSQueries { }; } - public static Query maxFreeDisk(long after, long before, UUID serverUUID) { + public static Query maxFreeDisk(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "MAX(" + FREE_DISK + ") as free" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + FREE_DISK + ">=0" + @@ -398,7 +399,7 @@ public class TPSQueries { }; } - public static Query minFreeDisk(long after, long before, UUID serverUUID) { + public static Query minFreeDisk(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "MIN(" + FREE_DISK + ") as free" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + FREE_DISK + ">=0" + @@ -419,7 +420,7 @@ public class TPSQueries { }; } - public static Query averageFreeDisk(long after, long before, UUID serverUUID) { + public static Query averageFreeDisk(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "AVG(" + FREE_DISK + ") as average" + FROM + TABLE_NAME + WHERE + SERVER_ID + '=' + ServerTable.STATEMENT_SELECT_SERVER_ID + AND + FREE_DISK + ">=0" + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserIdentifierQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserIdentifierQueries.java index a0b36c850..29f0ed4e6 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserIdentifierQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserIdentifierQueries.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.queries.objects; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -69,7 +70,7 @@ public class UserIdentifierQueries { * @param serverUUID UUID of the Plan server. * @return Set of UUIDs. */ - public static Query> fetchPlayerUUIDsOfServer(UUID serverUUID) { + public static Query> fetchPlayerUUIDsOfServer(ServerUUID serverUUID) { String sql = SELECT + UsersTable.TABLE_NAME + '.' + UsersTable.USER_UUID + ',' + FROM + UsersTable.TABLE_NAME + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserInfoQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserInfoQueries.java index 44551f7bb..4163628b4 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserInfoQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/UserInfoQueries.java @@ -17,10 +17,10 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.gathering.domain.UserInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; -import com.djrapitops.plan.storage.database.sql.tables.ServerTable; import com.djrapitops.plan.storage.database.sql.tables.UserInfoTable; import com.djrapitops.plan.utilities.java.Lists; @@ -49,7 +49,7 @@ public class UserInfoQueries { * * @return Map: Server UUID - List of user information */ - public static Query>> fetchAllUserInformation() { + public static Query>> fetchAllUserInformation() { String sql = SELECT + UserInfoTable.REGISTERED + ',' + UserInfoTable.BANNED + ',' + @@ -59,12 +59,12 @@ public class UserInfoQueries { UserInfoTable.HOSTNAME + FROM + UserInfoTable.TABLE_NAME; - return new QueryAllStatement>>(sql, 50000) { + return new QueryAllStatement>>(sql, 50000) { @Override - public Map> processResults(ResultSet set) throws SQLException { - Map> serverMap = new HashMap<>(); + public Map> processResults(ResultSet set) throws SQLException { + Map> serverMap = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); UUID uuid = UUID.fromString(set.getString(UserInfoTable.USER_UUID)); List userInfos = serverMap.computeIfAbsent(serverUUID, Lists::create); @@ -110,7 +110,7 @@ public class UserInfoQueries { long registered = set.getLong(UserInfoTable.REGISTERED); boolean op = set.getBoolean(UserInfoTable.OP); boolean banned = set.getBoolean(UserInfoTable.BANNED); - UUID serverUUID = UUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); String hostname = set.getString(UserInfoTable.HOSTNAME); userInformation.add(new UserInfo(playerUUID, serverUUID, registered, op, hostname, banned)); @@ -126,7 +126,7 @@ public class UserInfoQueries { * @param serverUUID UUID of the Plan server. * @return Map: Player UUID - user information */ - public static Query> fetchUserInformationOfServer(UUID serverUUID) { + public static Query> fetchUserInformationOfServer(ServerUUID serverUUID) { String sql = SELECT + UserInfoTable.REGISTERED + ',' + UserInfoTable.BANNED + ',' + @@ -147,7 +147,7 @@ public class UserInfoQueries { public Map processResults(ResultSet set) throws SQLException { Map userInformation = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(UserInfoTable.SERVER_UUID)); UUID uuid = UUID.fromString(set.getString(UserInfoTable.USER_UUID)); long registered = set.getLong(UserInfoTable.REGISTERED); @@ -163,7 +163,7 @@ public class UserInfoQueries { }; } - public static Query> fetchRegisterDates(long after, long before, UUID serverUUID) { + public static Query> fetchRegisterDates(long after, long before, ServerUUID serverUUID) { String sql = SELECT + UserInfoTable.USER_UUID + ',' + UserInfoTable.REGISTERED + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/WorldTimesQueries.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/WorldTimesQueries.java index 98eef920d..037129574 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/WorldTimesQueries.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/WorldTimesQueries.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.queries.objects; import com.djrapitops.plan.gathering.domain.GMTimes; import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.SessionsTable; @@ -60,7 +61,7 @@ public class WorldTimesQueries { * @param serverUUID Server UUID of the Plan server. * @return WorldTimes with world name - playtime ms information. */ - public static Query fetchServerTotalWorldTimes(UUID serverUUID) { + public static Query fetchServerTotalWorldTimes(ServerUUID serverUUID) { String sql = SELECT_WORLD_TIMES_STATEMENT_START + SELECT_WORLD_TIMES_JOIN_WORLD_NAME + WHERE + WorldTimesTable.TABLE_NAME + '.' + WorldTimesTable.SERVER_UUID + "=?" + @@ -130,26 +131,26 @@ public class WorldTimesQueries { * @param playerUUID UUID of the player. * @return Map: Server UUID - WorldTimes total for the server */ - public static Query> fetchPlayerWorldTimesOnServers(UUID playerUUID) { + public static Query> fetchPlayerWorldTimesOnServers(UUID playerUUID) { String sql = SELECT_WORLD_TIMES_STATEMENT_START + WorldTimesTable.TABLE_NAME + '.' + WorldTimesTable.SERVER_UUID + ',' + SELECT_WORLD_TIMES_JOIN_WORLD_NAME + WHERE + WorldTimesTable.TABLE_NAME + '.' + WorldTimesTable.USER_UUID + "=?" + GROUP_BY + WORLD_COLUMN + ',' + WorldTimesTable.TABLE_NAME + '.' + WorldTimesTable.SERVER_UUID; - return new QueryStatement>(sql, 1000) { + return new QueryStatement>(sql, 1000) { @Override public void prepare(PreparedStatement statement) throws SQLException { statement.setString(1, playerUUID.toString()); } @Override - public Map processResults(ResultSet set) throws SQLException { + public Map processResults(ResultSet set) throws SQLException { String[] gms = GMTimes.getGMKeyArray(); - Map worldTimesMap = new HashMap<>(); + Map worldTimesMap = new HashMap<>(); while (set.next()) { - UUID serverUUID = UUID.fromString(set.getString(WorldTimesTable.SERVER_UUID)); + ServerUUID serverUUID = ServerUUID.fromString(set.getString(WorldTimesTable.SERVER_UUID)); WorldTimes worldTimes = worldTimesMap.getOrDefault(serverUUID, new WorldTimes()); String worldName = set.getString(WORLD_COLUMN); @@ -171,7 +172,7 @@ public class WorldTimesQueries { return new GMTimes(gmMap); } - public static Query fetchGMTimes(long after, long before, UUID serverUUID) { + public static Query fetchGMTimes(long after, long before, ServerUUID serverUUID) { String sql = SELECT + "SUM(" + WorldTimesTable.SURVIVAL + ") as SURVIVAL," + "SUM(" + WorldTimesTable.CREATIVE + ") as CREATIVE," + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/playertable/ServerTablePlayersQuery.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/playertable/ServerTablePlayersQuery.java index 9ef5f6880..ae9f61c8b 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/playertable/ServerTablePlayersQuery.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/queries/objects/playertable/ServerTablePlayersQuery.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.queries.objects.playertable; import com.djrapitops.plan.delivery.domain.TablePlayer; import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.SQLDB; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -43,7 +44,7 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class ServerTablePlayersQuery implements Query> { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final long date; private final long activeMsThreshold; private final int xMostRecentPlayers; @@ -56,7 +57,7 @@ public class ServerTablePlayersQuery implements Query> { * @param activeMsThreshold Playtime threshold for Activity Index calculation * @param xMostRecentPlayers Limit query size */ - public ServerTablePlayersQuery(UUID serverUUID, long date, long activeMsThreshold, int xMostRecentPlayers) { + public ServerTablePlayersQuery(ServerUUID serverUUID, long date, long activeMsThreshold, int xMostRecentPlayers) { this.serverUUID = serverUUID; this.date = date; this.activeMsThreshold = activeMsThreshold; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionPluginTable.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionPluginTable.java index 1886352a9..c888e60c8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionPluginTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionPluginTable.java @@ -16,13 +16,13 @@ */ package com.djrapitops.plan.storage.database.sql.tables; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBType; import com.djrapitops.plan.storage.database.sql.building.CreateTableBuilder; import com.djrapitops.plan.storage.database.sql.building.Sql; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -46,7 +46,7 @@ public class ExtensionPluginTable { WHERE + PLUGIN_NAME + "=?" + AND + SERVER_UUID + "=? LIMIT 1)"; - public static void set2PluginValuesToStatement(PreparedStatement statement, int parameterIndex, String pluginName, UUID serverUUID) throws SQLException { + public static void set2PluginValuesToStatement(PreparedStatement statement, int parameterIndex, String pluginName, ServerUUID serverUUID) throws SQLException { statement.setString(parameterIndex, pluginName); statement.setString(parameterIndex + 1, serverUUID.toString()); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionProviderTable.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionProviderTable.java index 629dea9da..2d84e6953 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionProviderTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionProviderTable.java @@ -16,13 +16,13 @@ */ package com.djrapitops.plan.storage.database.sql.tables; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBType; import com.djrapitops.plan.storage.database.sql.building.CreateTableBuilder; import com.djrapitops.plan.storage.database.sql.building.Sql; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -56,7 +56,7 @@ public class ExtensionProviderTable { WHERE + PROVIDER_NAME + "=?" + AND + PLUGIN_ID + "=" + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + " LIMIT 1)"; - public static void set3PluginValuesToStatement(PreparedStatement statement, int parameterIndex, String providerName, String pluginName, UUID serverUUID) throws SQLException { + public static void set3PluginValuesToStatement(PreparedStatement statement, int parameterIndex, String providerName, String pluginName, ServerUUID serverUUID) throws SQLException { statement.setString(parameterIndex, providerName); ExtensionPluginTable.set2PluginValuesToStatement(statement, parameterIndex + 1, pluginName, serverUUID); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTabTable.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTabTable.java index 6b0a2b27c..77cb9bc39 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTabTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTabTable.java @@ -17,13 +17,13 @@ package com.djrapitops.plan.storage.database.sql.tables; import com.djrapitops.plan.extension.ElementOrder; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBType; import com.djrapitops.plan.storage.database.sql.building.CreateTableBuilder; import com.djrapitops.plan.storage.database.sql.building.Sql; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -48,7 +48,7 @@ public class ExtensionTabTable { WHERE + TAB_NAME + "=?" + AND + PLUGIN_ID + "=" + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + " LIMIT 1)"; - public static void set3TabValuesToStatement(PreparedStatement statement, int parameterIndex, String tabName, String pluginName, UUID serverUUID) throws SQLException { + public static void set3TabValuesToStatement(PreparedStatement statement, int parameterIndex, String tabName, String pluginName, ServerUUID serverUUID) throws SQLException { Sql.setStringOrNull(statement, parameterIndex, tabName); ExtensionPluginTable.set2PluginValuesToStatement(statement, parameterIndex + 1, pluginName, serverUUID); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTableProviderTable.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTableProviderTable.java index a0aaa2b61..cf4716e85 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTableProviderTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/ExtensionTableProviderTable.java @@ -17,13 +17,13 @@ package com.djrapitops.plan.storage.database.sql.tables; import com.djrapitops.plan.extension.icon.Color; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBType; import com.djrapitops.plan.storage.database.sql.building.CreateTableBuilder; import com.djrapitops.plan.storage.database.sql.building.Sql; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -65,7 +65,7 @@ public class ExtensionTableProviderTable { /* Static information class */ } - public static void set3PluginValuesToStatement(PreparedStatement statement, int parameterIndex, String providerName, String pluginName, UUID serverUUID) throws SQLException { + public static void set3PluginValuesToStatement(PreparedStatement statement, int parameterIndex, String providerName, String pluginName, ServerUUID serverUUID) throws SQLException { statement.setString(parameterIndex, providerName); ExtensionPluginTable.set2PluginValuesToStatement(statement, parameterIndex + 1, pluginName, serverUUID); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/KillsTable.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/KillsTable.java index c30653de6..1ba8fe4f4 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/KillsTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/KillsTable.java @@ -16,9 +16,10 @@ */ package com.djrapitops.plan.storage.database.sql.tables; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.PlayerKills; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBType; import com.djrapitops.plan.storage.database.sql.building.CreateTableBuilder; import com.djrapitops.plan.storage.database.sql.building.Sql; @@ -29,6 +30,7 @@ import org.apache.commons.lang3.StringUtils; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.Optional; import java.util.UUID; /** @@ -81,19 +83,22 @@ public class KillsTable { .toString(); } - public static void addSessionKillsToBatch(PreparedStatement statement, Session session) throws SQLException { - UUID uuid = session.getUnsafe(SessionKeys.UUID); - UUID serverUUID = session.getUnsafe(SessionKeys.SERVER_UUID); + public static void addSessionKillsToBatch(PreparedStatement statement, FinishedSession session) throws SQLException { + UUID playerUUID = session.getPlayerUUID(); + ServerUUID serverUUID = session.getServerUUID(); - for (PlayerKill kill : session.getPlayerKills()) { + Optional playerKills = session.getExtraData().get(PlayerKills.class); + if (!playerKills.isPresent()) return; + + for (PlayerKill kill : playerKills.get().asList()) { // Session ID select statement parameters - statement.setString(1, uuid.toString()); + statement.setString(1, playerUUID.toString()); statement.setString(2, serverUUID.toString()); - statement.setLong(3, session.getUnsafe(SessionKeys.START)); - statement.setLong(4, session.getUnsafe(SessionKeys.END)); + statement.setLong(3, session.getStart()); + statement.setLong(4, session.getEnd()); // Kill data - statement.setString(5, uuid.toString()); + statement.setString(5, playerUUID.toString()); statement.setString(6, kill.getVictim().toString()); statement.setString(7, serverUUID.toString()); statement.setLong(8, kill.getDate()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/WorldTimesTable.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/WorldTimesTable.java index 6dc618969..956355751 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/WorldTimesTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/sql/tables/WorldTimesTable.java @@ -16,9 +16,10 @@ */ package com.djrapitops.plan.storage.database.sql.tables; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.GMTimes; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBType; import com.djrapitops.plan.storage.database.sql.building.CreateTableBuilder; import com.djrapitops.plan.storage.database.sql.building.Sql; @@ -30,6 +31,7 @@ import com.djrapitops.plan.storage.database.transactions.patches.WorldsServerIDP import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Map; +import java.util.Optional; import java.util.UUID; /** @@ -91,19 +93,21 @@ public class WorldTimesTable { .toString(); } - public static void addSessionWorldTimesToBatch(PreparedStatement statement, Session session, String[] gms) throws SQLException { - UUID uuid = session.getUnsafe(SessionKeys.UUID); - UUID serverUUID = session.getUnsafe(SessionKeys.SERVER_UUID); - Map worldTimes = session.getUnsafe(SessionKeys.WORLD_TIMES).getWorldTimes(); - for (Map.Entry worldTimesEntry : worldTimes.entrySet()) { + public static void addSessionWorldTimesToBatch(PreparedStatement statement, FinishedSession session, String[] gms) throws SQLException { + UUID uuid = session.getPlayerUUID(); + ServerUUID serverUUID = session.getServerUUID(); + Optional worldTimes = session.getExtraData().get(WorldTimes.class); + if (!worldTimes.isPresent()) return; + + for (Map.Entry worldTimesEntry : worldTimes.get().getWorldTimes().entrySet()) { String worldName = worldTimesEntry.getKey(); GMTimes gmTimes = worldTimesEntry.getValue(); // Session ID select statement statement.setString(1, uuid.toString()); statement.setString(2, serverUUID.toString()); - statement.setLong(3, session.getUnsafe(SessionKeys.START)); - statement.setLong(4, session.getUnsafe(SessionKeys.END)); + statement.setLong(3, session.getStart()); + statement.setLong(4, session.getEnd()); // World ID select statement statement.setString(5, worldName); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/StoreConfigTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/StoreConfigTransaction.java index ce0675291..b0cf5cce0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/StoreConfigTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/StoreConfigTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.Config; import com.djrapitops.plan.settings.config.ConfigWriter; import com.djrapitops.plan.storage.database.queries.HasMoreThanZeroQueryStatement; @@ -26,7 +27,6 @@ import org.apache.commons.text.TextStringBuilder; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -37,11 +37,11 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class StoreConfigTransaction extends Transaction { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final long lastModified; private final String configSettings; - public StoreConfigTransaction(UUID serverUUID, Config config, long lastModified) { + public StoreConfigTransaction(ServerUUID serverUUID, Config config, long lastModified) { this.serverUUID = serverUUID; this.configSettings = extractConfigSettingLines(config); this.lastModified = lastModified; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/Transaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/Transaction.java index c0949ebf8..576fa779f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/Transaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/Transaction.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.transactions; import com.djrapitops.plan.exceptions.database.DBOpException; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DBType; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.SQLDB; @@ -25,7 +26,6 @@ import com.djrapitops.plan.utilities.logging.ErrorContext; import net.playeranalytics.plugin.scheduling.TimeAmount; import java.sql.*; -import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -231,7 +231,7 @@ public abstract class Transaction { return db.getState(); } - protected UUID getServerUUID() { + protected ServerUUID getServerUUID() { return db.getServerUUIDSupplier().get(); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/commands/SetServerAsUninstalledTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/commands/SetServerAsUninstalledTransaction.java index b4b6e9afd..bd54722fa 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/commands/SetServerAsUninstalledTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/commands/SetServerAsUninstalledTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions.commands; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.ServerTable; import com.djrapitops.plan.storage.database.transactions.ExecStatement; import com.djrapitops.plan.storage.database.transactions.Executable; @@ -23,7 +24,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; @@ -34,9 +34,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; */ public class SetServerAsUninstalledTransaction extends ThrowawayTransaction { - private final UUID serverUUID; + private final ServerUUID serverUUID; - public SetServerAsUninstalledTransaction(UUID serverUUID) { + public SetServerAsUninstalledTransaction(ServerUUID serverUUID) { this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PingStoreTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PingStoreTransaction.java index 484b38cc8..a88f2a787 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PingStoreTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PingStoreTransaction.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.transactions.events; import com.djrapitops.plan.delivery.domain.DateObj; import com.djrapitops.plan.gathering.domain.Ping; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.DataStoreQueries; import com.djrapitops.plan.storage.database.transactions.Transaction; import com.djrapitops.plan.utilities.Predicates; @@ -35,10 +36,10 @@ import java.util.UUID; public class PingStoreTransaction extends Transaction { private final UUID playerUUID; - private final UUID serverUUID; + private final ServerUUID serverUUID; private final List> pingList; - public PingStoreTransaction(UUID playerUUID, UUID serverUUID, List> pingList) { + public PingStoreTransaction(UUID playerUUID, ServerUUID serverUUID, List> pingList) { this.playerUUID = playerUUID; this.serverUUID = serverUUID; this.pingList = pingList; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PlayerServerRegisterTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PlayerServerRegisterTransaction.java index 549ed0bd7..24ac6f756 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PlayerServerRegisterTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/PlayerServerRegisterTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions.events; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.DataStoreQueries; import com.djrapitops.plan.storage.database.queries.PlayerFetchQueries; @@ -30,11 +31,11 @@ import java.util.function.LongSupplier; */ public class PlayerServerRegisterTransaction extends PlayerRegisterTransaction { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String hostname; public PlayerServerRegisterTransaction(UUID playerUUID, LongSupplier registered, - String playerName, UUID serverUUID, String hostname) { + String playerName, ServerUUID serverUUID, String hostname) { super(playerUUID, registered, playerName); this.serverUUID = serverUUID; this.hostname = hostname; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/ServerShutdownTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/ServerShutdownTransaction.java index e82c377b2..eb1ea51b9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/ServerShutdownTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/ServerShutdownTransaction.java @@ -16,7 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions.events; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.storage.database.queries.LargeStoreQueries; import com.djrapitops.plan.storage.database.transactions.Transaction; @@ -29,9 +29,9 @@ import java.util.Collection; */ public class ServerShutdownTransaction extends Transaction { - private final Collection unsavedSessions; + private final Collection unsavedSessions; - public ServerShutdownTransaction(Collection unsavedSessions) { + public ServerShutdownTransaction(Collection unsavedSessions) { this.unsavedSessions = unsavedSessions; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/SessionEndTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/SessionEndTransaction.java index 25b048b83..ab80cc47e 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/SessionEndTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/SessionEndTransaction.java @@ -16,7 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions.events; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.storage.database.queries.DataStoreQueries; import com.djrapitops.plan.storage.database.transactions.Transaction; @@ -27,9 +27,9 @@ import com.djrapitops.plan.storage.database.transactions.Transaction; */ public class SessionEndTransaction extends Transaction { - private final Session session; + private final FinishedSession session; - public SessionEndTransaction(Session session) { + public SessionEndTransaction(FinishedSession session) { this.session = session; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/TPSStoreTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/TPSStoreTransaction.java index acddf7be1..bb5853ea4 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/TPSStoreTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/TPSStoreTransaction.java @@ -17,11 +17,10 @@ package com.djrapitops.plan.storage.database.transactions.events; import com.djrapitops.plan.gathering.domain.TPS; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.DataStoreQueries; import com.djrapitops.plan.storage.database.transactions.Transaction; -import java.util.UUID; - /** * Transaction to store server's TPS data. * @@ -29,10 +28,10 @@ import java.util.UUID; */ public class TPSStoreTransaction extends Transaction { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final TPS tps; - public TPSStoreTransaction(UUID serverUUID, TPS tps) { + public TPSStoreTransaction(ServerUUID serverUUID, TPS tps) { this.serverUUID = serverUUID; this.tps = tps; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/WorldNameStoreTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/WorldNameStoreTransaction.java index 38337b064..92564e757 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/WorldNameStoreTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/events/WorldNameStoreTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions.events; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.DataStoreQueries; import com.djrapitops.plan.storage.database.queries.HasMoreThanZeroQueryStatement; import com.djrapitops.plan.storage.database.sql.tables.WorldTable; @@ -24,7 +25,6 @@ import org.apache.commons.lang3.StringUtils; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -35,10 +35,10 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class WorldNameStoreTransaction extends Transaction { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final String worldName; - public WorldNameStoreTransaction(UUID serverUUID, String worldName) { + public WorldNameStoreTransaction(ServerUUID serverUUID, String worldName) { this.serverUUID = serverUUID; this.worldName = worldName; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldExtensionsTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldExtensionsTransaction.java index e533f18aa..805aa9912 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldExtensionsTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldExtensionsTransaction.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions.init; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.Query; import com.djrapitops.plan.storage.database.queries.QueryStatement; import com.djrapitops.plan.storage.database.sql.tables.*; @@ -27,7 +28,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import java.util.HashSet; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -39,9 +39,9 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; public class RemoveOldExtensionsTransaction extends ThrowawayTransaction { private final long deleteOlder; - private final UUID serverUUID; + private final ServerUUID serverUUID; - public RemoveOldExtensionsTransaction(long deleteAfterMs, UUID serverUUID) { + public RemoveOldExtensionsTransaction(long deleteAfterMs, ServerUUID serverUUID) { deleteOlder = System.currentTimeMillis() - deleteAfterMs; this.serverUUID = serverUUID; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldSampledDataTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldSampledDataTransaction.java index 9c470ec86..0c59d86fe 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldSampledDataTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/init/RemoveOldSampledDataTransaction.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.transactions.init; import com.djrapitops.plan.delivery.domain.DateObj; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.objects.TPSQueries; import com.djrapitops.plan.storage.database.sql.tables.PingTable; import com.djrapitops.plan.storage.database.sql.tables.ServerTable; @@ -28,7 +29,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Optional; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.*; @@ -39,12 +39,12 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.*; */ public class RemoveOldSampledDataTransaction extends ThrowawayTransaction { - private final UUID serverUUID; + private final ServerUUID serverUUID; private final long deleteTPSOlderThanMs; private final long deletePingOlderThanMs; public RemoveOldSampledDataTransaction( - UUID serverUUID, + ServerUUID serverUUID, long deleteTPSOlderThanMs, long deletePingOlderThanMs ) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/NicknameLastSeenPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/NicknameLastSeenPatch.java index b903e3dde..0382605a9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/NicknameLastSeenPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/NicknameLastSeenPatch.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.transactions.patches; import com.djrapitops.plan.delivery.domain.Nickname; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.sql.building.Select; import com.djrapitops.plan.storage.database.sql.tables.NicknamesTable; @@ -30,7 +31,6 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Set; -import java.util.UUID; import static com.djrapitops.plan.storage.database.sql.building.Sql.AND; import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE; @@ -64,9 +64,9 @@ public class NicknameLastSeenPatch extends Patch { executeSwallowingExceptions("CREATE TABLE IF NOT EXISTS plan_actions " + "(action_id integer, date bigint, server_id integer, user_id integer, additional_info varchar(1))"); - Map serverUUIDsByID = getServerUUIDsByID(); - Map serverIDsByUUID = new HashMap<>(); - for (Map.Entry entry : serverUUIDsByID.entrySet()) { + Map serverUUIDsByID = getServerUUIDsByID(); + Map serverIDsByUUID = new HashMap<>(); + for (Map.Entry entry : serverUUIDsByID.entrySet()) { serverIDsByUUID.put(entry.getValue(), entry.getKey()); } @@ -76,25 +76,25 @@ public class NicknameLastSeenPatch extends Patch { executeSwallowingExceptions("DROP TABLE plan_actions"); } - private Map getServerUUIDsByID() { + private Map getServerUUIDsByID() { String sql = Select.from(ServerTable.TABLE_NAME, ServerTable.SERVER_ID, ServerTable.SERVER_UUID) .toString(); - return query(new QueryAllStatement>(sql) { + return query(new QueryAllStatement>(sql) { @Override - public Map processResults(ResultSet set) throws SQLException { - Map uuids = new HashMap<>(); + public Map processResults(ResultSet set) throws SQLException { + Map uuids = new HashMap<>(); while (set.next()) { int id = set.getInt(ServerTable.SERVER_ID); - uuids.put(id, UUID.fromString(set.getString(ServerTable.SERVER_UUID))); + uuids.put(id, ServerUUID.fromString(set.getString(ServerTable.SERVER_UUID))); } return uuids; } }); } - private Map> getNicknamesByUserID(Map serverUUIDsByID) { + private Map> getNicknamesByUserID(Map serverUUIDsByID) { String fetchSQL = "SELECT * FROM plan_actions WHERE action_id=3 ORDER BY date DESC"; return query(new QueryAllStatement>>(fetchSQL, 10000) { @Override @@ -105,7 +105,7 @@ public class NicknameLastSeenPatch extends Patch { long date = set.getLong("date"); int userID = set.getInt("user_id"); int serverID = set.getInt("server_id"); - UUID serverUUID = serverUUIDsByID.get(serverID); + ServerUUID serverUUID = serverUUIDsByID.get(serverID); Nickname nick = new Nickname(set.getString("additional_info"), date, serverUUID); Set foundNicknames = map.computeIfAbsent(userID, Maps::createSet); if (serverUUID == null || foundNicknames.contains(nick)) { @@ -119,7 +119,7 @@ public class NicknameLastSeenPatch extends Patch { }); } - private void updateLastUsed(Map serverIDsByUUID, Map> nicknames) { + private void updateLastUsed(Map serverIDsByUUID, Map> nicknames) { String updateSQL = "UPDATE " + NicknamesTable.TABLE_NAME + " SET " + NicknamesTable.LAST_USED + "=?" + WHERE + NicknamesTable.NICKNAME + "=?" + AND + "user_id=?" + diff --git a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/WorldsServerIDPatch.java b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/WorldsServerIDPatch.java index a17b1e3e9..b64704fe8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/WorldsServerIDPatch.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/storage/database/transactions/patches/WorldsServerIDPatch.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.storage.database.transactions.patches; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.queries.LargeStoreQueries; import com.djrapitops.plan.storage.database.queries.QueryAllStatement; import com.djrapitops.plan.storage.database.queries.QueryStatement; @@ -55,10 +56,10 @@ public class WorldsServerIDPatch extends Patch { @Override protected void applyPatch() { - Collection serverUUIDs = query(ServerQueries.fetchPlanServerInformation()).keySet(); + Collection serverUUIDs = query(ServerQueries.fetchPlanServerInformation()).keySet(); - Map> worldsPerServer = new HashMap<>(); - for (UUID serverUUID : serverUUIDs) { + Map> worldsPerServer = new HashMap<>(); + for (ServerUUID serverUUID : serverUUIDs) { worldsPerServer.put(serverUUID, getWorldNamesOld(serverUUID)); } @@ -68,7 +69,7 @@ public class WorldsServerIDPatch extends Patch { executeSwallowingExceptions(DELETE_FROM + WorldTable.TABLE_NAME + WHERE + "server_id=0"); } - private Set getWorldNamesOld(UUID serverUUID) { + private Set getWorldNamesOld(ServerUUID serverUUID) { String worldIDColumn = WorldTimesTable.TABLE_NAME + '.' + WorldTimesTable.WORLD_ID; String worldSessionIDColumn = WorldTimesTable.TABLE_NAME + '.' + WorldTimesTable.SESSION_ID; String sessionIDColumn = SessionsTable.TABLE_NAME + '.' + SessionsTable.ID; diff --git a/Plan/common/src/test/java/com/djrapitops/plan/delivery/webserver/JSErrorRegressionTest.java b/Plan/common/src/test/java/com/djrapitops/plan/delivery/webserver/JSErrorRegressionTest.java index f040f3bb9..3e7c85ea9 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/delivery/webserver/JSErrorRegressionTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/delivery/webserver/JSErrorRegressionTest.java @@ -17,7 +17,9 @@ package com.djrapitops.plan.delivery.webserver; import com.djrapitops.plan.PlanSystem; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.DataMap; +import com.djrapitops.plan.gathering.domain.FinishedSession; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.WebserverSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -58,7 +60,7 @@ class JSErrorRegressionTest { public static PluginMockComponent component; private static PlanSystem bukkitSystem; - private static UUID serverUUID; + private static ServerUUID serverUUID; @BeforeAll static void setUpClass(@TempDir Path tempDir) throws Exception { @@ -78,8 +80,7 @@ class JSErrorRegressionTest { Database database = dbSystem.getDatabase(); UUID uuid = TestConstants.PLAYER_ONE_UUID; database.executeTransaction(new PlayerRegisterTransaction(uuid, RandomData::randomTime, "name")); - Session session = new Session(uuid, serverUUID, 1000L, "world", "SURVIVAL"); - session.endSession(11000L); + FinishedSession session = new FinishedSession(uuid, serverUUID, 1000L, 11000L, 500L, new DataMap()); database.executeTransaction(new WorldNameStoreTransaction(serverUUID, "world")); database.executeTransaction(new SessionEndTransaction(session)); } diff --git a/Plan/common/src/test/java/com/djrapitops/plan/gathering/ShutdownSaveTest.java b/Plan/common/src/test/java/com/djrapitops/plan/gathering/ShutdownSaveTest.java index 928f755b6..7ea9d29ff 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/gathering/ShutdownSaveTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/gathering/ShutdownSaveTest.java @@ -18,11 +18,12 @@ package com.djrapitops.plan.gathering; import com.djrapitops.plan.PlanPlugin; import com.djrapitops.plan.PlanSystem; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.gathering.cache.SessionCache; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.GMTimes; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.Database; @@ -46,7 +47,7 @@ import utilities.mocks.PlanPluginMocker; import utilities.mocks.TestPlatformAbstractionLayer; import java.nio.file.Path; -import java.util.Map; +import java.util.Collection; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; @@ -110,7 +111,7 @@ class ShutdownSaveTest { private void storeNecessaryInformation() throws Exception { database.executeTransaction(new RemoveEverythingTransaction()); - UUID serverUUID = TestConstants.SERVER_UUID; + ServerUUID serverUUID = TestConstants.SERVER_UUID; UUID playerUUID = TestConstants.PLAYER_ONE_UUID; String worldName = TestConstants.WORLD_ONE_NAME; @@ -151,11 +152,11 @@ class ShutdownSaveTest { } private void placeSessionToCache() { - UUID serverUUID = TestConstants.SERVER_UUID; + ServerUUID serverUUID = TestConstants.SERVER_UUID; UUID playerUUID = TestConstants.PLAYER_ONE_UUID; String worldName = TestConstants.WORLD_ONE_NAME; - Session session = new Session(playerUUID, serverUUID, 0L, worldName, GMTimes.getGMKeyArray()[0]); + ActiveSession session = new ActiveSession(playerUUID, serverUUID, 0L, worldName, GMTimes.getGMKeyArray()[0]); sessionCache.cacheSession(playerUUID, session); } @@ -164,16 +165,15 @@ class ShutdownSaveTest { public void endedSessionsHaveSameEndTime() { for (int i = 0; i < 100; i++) { UUID playerUUID = UUID.randomUUID(); - Session session = RandomData.randomUnfinishedSession( + ActiveSession session = RandomData.randomUnfinishedSession( TestConstants.SERVER_UUID, new String[]{"w1", "w2"}, playerUUID ); sessionCache.cacheSession(playerUUID, session); } long endTime = System.currentTimeMillis(); - Map activeSessions = SessionCache.getActiveSessions(); - underTest.prepareSessionsForStorage(activeSessions, endTime); - for (Session session : activeSessions.values()) { - assertEquals(endTime, session.getUnsafe(SessionKeys.END), () -> "One of the sessions had differing end time"); + Collection activeSessions = SessionCache.getActiveSessions(); + for (FinishedSession session : underTest.finishSessions(activeSessions, endTime)) { + assertEquals(endTime, session.getEnd(), () -> "One of the sessions had differing end time"); } } } \ No newline at end of file diff --git a/Plan/common/src/test/java/com/djrapitops/plan/gathering/cache/SessionCacheTest.java b/Plan/common/src/test/java/com/djrapitops/plan/gathering/cache/SessionCacheTest.java index 8ca89cb7f..0a5ae4a76 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/gathering/cache/SessionCacheTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/gathering/cache/SessionCacheTest.java @@ -16,7 +16,9 @@ */ package com.djrapitops.plan.gathering.cache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.FinishedSession; +import com.djrapitops.plan.identification.ServerUUID; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -29,14 +31,14 @@ import static org.junit.jupiter.api.Assertions.*; class SessionCacheTest { - private Session session; + private final ServerUUID serverUUID = TestConstants.SERVER_UUID; private final UUID uuid = TestConstants.PLAYER_ONE_UUID; - private final UUID serverUUID = TestConstants.SERVER_UUID; + private ActiveSession session; private SessionCache sessionCache; @BeforeEach void setUp() { - session = new Session(uuid, serverUUID, 12345L, "World1", "SURVIVAL"); + session = new ActiveSession(uuid, serverUUID, 12345L, "World1", "SURVIVAL"); sessionCache = new SessionCache(); sessionCache.cacheSession(uuid, session); @@ -49,26 +51,26 @@ class SessionCacheTest { @Test void testAtomity() { - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); assertTrue(cachedSession.isPresent()); assertEquals(session, cachedSession.get()); } @Test void sessionsAreRemovedFromCacheOnEnd() { - Optional ended = new SessionCache().endSession(uuid, System.currentTimeMillis()); + Optional ended = new SessionCache().endSession(uuid, System.currentTimeMillis()); assertTrue(ended.isPresent()); - for (Session session : SessionCache.getActiveSessions().values()) { + for (ActiveSession session : SessionCache.getActiveSessions()) { fail("Session was still in cache: " + session); } } @Test void sessionsAreRemovedFromCacheOnStart() { - Optional ended = new SessionCache().cacheSession(uuid, new Session(uuid, serverUUID, 52345L, "World1", "SURVIVAL")); + Optional ended = new SessionCache().cacheSession(uuid, new ActiveSession(uuid, serverUUID, 52345L, "World1", "SURVIVAL")); assertTrue(ended.isPresent()); - for (Session session : SessionCache.getActiveSessions().values()) { - if (session.getDate() == 12345L) { + for (ActiveSession session : SessionCache.getActiveSessions()) { + if (session.getStart() == 12345L) { fail("Session was still in cache: " + session); } } diff --git a/Plan/common/src/test/java/com/djrapitops/plan/gathering/domain/SessionTest.java b/Plan/common/src/test/java/com/djrapitops/plan/gathering/domain/SessionTest.java index 859a0cf4f..9e4e9be01 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/gathering/domain/SessionTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/gathering/domain/SessionTest.java @@ -16,61 +16,36 @@ */ package com.djrapitops.plan.gathering.domain; -import com.djrapitops.plan.delivery.domain.container.DataContainer; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.identification.ServerUUID; import org.junit.jupiter.api.Test; -import utilities.RandomData; import utilities.TestConstants; import java.util.List; import java.util.Optional; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; /** - * Test for {@link Session} {@link DataContainer}. + * Tests for {@link ActiveSession} and {@link FinishedSession}. * * @author AuroraLS3 */ class SessionTest { - private final UUID serverUUID = TestConstants.SERVER_UUID; - - @Test - void safeStartKeyConstructor() { - for (int i = 0; i < 10000; i++) { - long expected = RandomData.randomLong(0, System.currentTimeMillis()); - Session session = new Session(null, serverUUID, expected, null, null); - - // Should not throw - assertEquals(expected, session.getUnsafe(SessionKeys.START)); - } - } - - @Test - void safeStartKeyDBConstructor() { - for (int i = 0; i < 10000; i++) { - long expected = RandomData.randomLong(0, System.currentTimeMillis()); - Session session = new Session(-1, null, null, expected, expected + 1, 0, 0, 0); - - // Should not throw - assertEquals(expected, session.getUnsafe(SessionKeys.START)); - } - } + private final ServerUUID serverUUID = TestConstants.SERVER_UUID; @Test void killsAreAdded() { - Session session = new Session(null, serverUUID, System.currentTimeMillis(), "", ""); + ActiveSession session = new ActiveSession(null, serverUUID, System.currentTimeMillis(), "", ""); - Optional> beforeOptional = session.getValue(SessionKeys.PLAYER_KILLS); + Optional> beforeOptional = session.getExtraData().get(PlayerKills.class).map(PlayerKills::asList); assertTrue(beforeOptional.isPresent()); List before = beforeOptional.get(); assertTrue(before.isEmpty()); - session.playerKilled(new PlayerKill(TestConstants.PLAYER_ONE_UUID, TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis())); + session.addPlayerKill(new PlayerKill(TestConstants.PLAYER_ONE_UUID, TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis())); - Optional> afterOptional = session.getValue(SessionKeys.PLAYER_KILLS); + Optional> afterOptional = session.getExtraData().get(PlayerKills.class).map(PlayerKills::asList); assertTrue(afterOptional.isPresent()); List after = afterOptional.get(); @@ -80,11 +55,11 @@ class SessionTest { @Test void killsAreAdded2() { - Session session = new Session(null, serverUUID, System.currentTimeMillis(), "", ""); + ActiveSession session = new ActiveSession(null, serverUUID, System.currentTimeMillis(), "", ""); - session.playerKilled(new PlayerKill(TestConstants.PLAYER_ONE_UUID, TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis())); + session.addPlayerKill(new PlayerKill(TestConstants.PLAYER_ONE_UUID, TestConstants.PLAYER_TWO_UUID, "Weapon", System.currentTimeMillis())); - Optional> afterOptional = session.getValue(SessionKeys.PLAYER_KILLS); + Optional> afterOptional = session.getExtraData().get(PlayerKills.class).map(PlayerKills::asList); assertTrue(afterOptional.isPresent()); List after = afterOptional.get(); @@ -94,10 +69,10 @@ class SessionTest { @Test void worldTimesWorks() { long time = System.currentTimeMillis(); - Session session = new Session(null, serverUUID, time, "One", "Survival"); + ActiveSession session = new ActiveSession(null, serverUUID, time, "One", "Survival"); session.changeState("Two", "Three", time + 5L); - Optional optional = session.getValue(SessionKeys.WORLD_TIMES); + Optional optional = session.getExtraData().get(WorldTimes.class); assertTrue(optional.isPresent()); WorldTimes worldTimes = optional.get(); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTest.java index ae0b253ce..f0d94e28c 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTest.java @@ -21,9 +21,11 @@ import com.djrapitops.plan.delivery.domain.TablePlayer; import com.djrapitops.plan.delivery.domain.container.PlayerContainer; import com.djrapitops.plan.delivery.domain.keys.Key; import com.djrapitops.plan.delivery.domain.keys.PlayerKeys; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.domain.BaseUser; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.GeoInfo; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.query.QuerySvc; import com.djrapitops.plan.settings.config.Config; import com.djrapitops.plan.settings.config.PlanConfig; @@ -94,7 +96,7 @@ public interface DatabaseTest extends DatabaseTestPreparer { TestConstants.PLAYER_ONE_NAME, serverUUID(), TestConstants.PLAYER_HOSTNAME)); saveTwoWorlds(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); execute(DataStoreQueries.storeSession(session)); db().executeTransaction(new NicknameStoreTransaction(playerUUID, new Nickname("TestNick", RandomData.randomTime(), serverUUID()), (uuid, name) -> false /* Not cached */)); @@ -125,9 +127,8 @@ public interface DatabaseTest extends DatabaseTestPreparer { saveTwoWorlds(); long sessionStart = System.currentTimeMillis(); - Session session = new Session(playerUUID, serverUUID(), sessionStart, worlds[0], "SURVIVAL"); - session.endSession(sessionStart + 22345L); - execute(DataStoreQueries.storeSession(session)); + ActiveSession session = new ActiveSession(playerUUID, serverUUID(), sessionStart, worlds[0], "SURVIVAL"); + execute(DataStoreQueries.storeSession(session.toFinishedSession(sessionStart + 22345L))); TestPluginLogger logger = new TestPluginLogger(); new DBCleanTask( @@ -149,7 +150,7 @@ public interface DatabaseTest extends DatabaseTestPreparer { saveUserOne(); saveUserTwo(); saveTwoWorlds(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); execute(DataStoreQueries.storeSession(session)); db().executeTransaction(new NicknameStoreTransaction(playerUUID, RandomData.randomNickname(serverUUID()), (uuid, name) -> false /* Not cached */)); saveGeoInfo(playerUUID, new GeoInfo("TestLoc", RandomData.randomTime())); @@ -158,7 +159,7 @@ public interface DatabaseTest extends DatabaseTestPreparer { PlayerContainer playerContainer = db().query(ContainerFetchQueries.fetchPlayerContainer(playerUUID)); // Active sessions are added after fetching - playerContainer.putRawData(PlayerKeys.ACTIVE_SESSION, RandomData.randomSession(serverUUID(), worlds, playerUUID)); + playerContainer.putRawData(PlayerKeys.ACTIVE_SESSION, RandomData.randomUnfinishedSession(serverUUID(), worlds, playerUUID)); List unsupported = new ArrayList<>(); List keys = FieldFetcher.getPublicStaticFields(PlayerKeys.class, Key.class); @@ -203,10 +204,10 @@ public interface DatabaseTest extends DatabaseTestPreparer { @Test default void playerCountForServersIsCorrect() { - Map expected = Collections.singletonMap(serverUUID(), 1); + Map expected = Collections.singletonMap(serverUUID(), 1); saveUserOne(); - Map result = db().query(ServerAggregateQueries.serverUserCounts()); + Map result = db().query(ServerAggregateQueries.serverUserCounts()); assertEquals(expected, result); } diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTestPreparer.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTestPreparer.java index 41f7f9465..1195dc838 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTestPreparer.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/DatabaseTestPreparer.java @@ -19,6 +19,7 @@ package com.djrapitops.plan.storage.database; import com.djrapitops.plan.PlanSystem; import com.djrapitops.plan.delivery.DeliveryUtilities; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.storage.database.transactions.Executable; import com.djrapitops.plan.storage.database.transactions.Transaction; @@ -36,7 +37,7 @@ public interface DatabaseTestPreparer { Database db(); - UUID serverUUID(); + ServerUUID serverUUID(); @Deprecated PlanSystem system(); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/H2Test.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/H2Test.java index 941b0c5a8..4e13aa2bd 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/H2Test.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/H2Test.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.PlanSystem; import com.djrapitops.plan.delivery.DeliveryUtilities; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.storage.database.queries.*; import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction; @@ -37,7 +38,6 @@ import utilities.DBPreparer; import utilities.RandomData; import java.nio.file.Path; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @@ -118,7 +118,7 @@ public class H2Test implements DatabaseTest, } @Override - public UUID serverUUID() { + public ServerUUID serverUUID() { return component.serverInfo().getServerUUID(); } diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java index 061cc396f..02f485dd0 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/MySQLTest.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.PlanSystem; import com.djrapitops.plan.delivery.DeliveryUtilities; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.storage.database.queries.*; import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction; @@ -40,7 +41,6 @@ import utilities.TestConstants; import java.nio.file.Path; import java.util.Optional; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @@ -122,7 +122,7 @@ class MySQLTest implements DatabaseTest, } @Override - public UUID serverUUID() { + public ServerUUID serverUUID() { return component.serverInfo().getServerUUID(); } diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/SQLiteTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/SQLiteTest.java index 1a9b37ae3..518e01d6a 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/SQLiteTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/SQLiteTest.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.PlanSystem; import com.djrapitops.plan.delivery.DeliveryUtilities; import com.djrapitops.plan.identification.Server; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.storage.database.queries.*; import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction; @@ -37,7 +38,6 @@ import utilities.DBPreparer; import utilities.RandomData; import java.nio.file.Path; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @@ -115,7 +115,7 @@ public class SQLiteTest implements DatabaseTest, } @Override - public UUID serverUUID() { + public ServerUUID serverUUID() { return component.serverInfo().getServerUUID(); } diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ActivityIndexQueriesTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ActivityIndexQueriesTest.java index cc9622f10..88e0c036c 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ActivityIndexQueriesTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ActivityIndexQueriesTest.java @@ -17,10 +17,9 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.delivery.domain.TablePlayer; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.storage.database.DatabaseTestPreparer; import com.djrapitops.plan.storage.database.queries.analysis.ActivityIndexQueries; import com.djrapitops.plan.storage.database.queries.objects.SessionQueries; @@ -50,7 +49,7 @@ import static org.junit.jupiter.api.Assertions.*; public interface ActivityIndexQueriesTest extends DatabaseTestPreparer { - default void storeSessions(Predicate save) { + default void storeSessions(Predicate save) { db().executeTransaction(new PlayerServerRegisterTransaction(playerUUID, RandomData::randomTime, TestConstants.PLAYER_ONE_NAME, serverUUID(), TestConstants.PLAYER_HOSTNAME)); db().executeTransaction(new PlayerServerRegisterTransaction(player2UUID, RandomData::randomTime, @@ -59,7 +58,7 @@ public interface ActivityIndexQueriesTest extends DatabaseTestPreparer { db().executeTransaction(new WorldNameStoreTransaction(serverUUID(), world)); } - for (Session session : RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID)) { + for (FinishedSession session : RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID)) { if (save.test(session)) execute(DataStoreQueries.storeSession(session)); } } @@ -80,7 +79,7 @@ public interface ActivityIndexQueriesTest extends DatabaseTestPreparer { long date = System.currentTimeMillis(); long playtimeThreshold = TimeUnit.HOURS.toMillis(5L); - List sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)) + List sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)) .values().stream().flatMap(Collection::stream).collect(Collectors.toList()); ActivityIndex javaCalculation = new ActivityIndex(sessions, date, playtimeThreshold); @@ -123,11 +122,11 @@ public interface ActivityIndexQueriesTest extends DatabaseTestPreparer { @RepeatedTest(value = 3, name = "Activity Index calculations match with missing data {currentRepetition}/{totalRepetitions}") default void activityIndexCalculationsMatchWithMissingData() { long keepAfter = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(7L); - storeSessions(session -> session.getDate() >= keepAfter && session.getUnsafe(SessionKeys.END) >= keepAfter); + storeSessions(session -> session.getDate() >= keepAfter && session.getEnd() >= keepAfter); long date = System.currentTimeMillis(); long playtimeThreshold = TimeUnit.HOURS.toMillis(5L); - List sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)) + List sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)) .values().stream().flatMap(Collection::stream).collect(Collectors.toList()); ActivityIndex javaCalculation = new ActivityIndex(sessions, date, playtimeThreshold); @@ -173,7 +172,7 @@ public interface ActivityIndexQueriesTest extends DatabaseTestPreparer { long date = System.currentTimeMillis(); long playtimeThreshold = TimeUnit.HOURS.toMillis(5L); - List sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)) + List sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)) .values().stream().flatMap(Collection::stream).collect(Collectors.toList()); ActivityIndex javaCalculation = new ActivityIndex(sessions, date, playtimeThreshold); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/DatabaseBackupTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/DatabaseBackupTest.java index 9c71cf5c8..2ba3c0c83 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/DatabaseBackupTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/DatabaseBackupTest.java @@ -18,8 +18,8 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.delivery.domain.DateObj; import com.djrapitops.plan.delivery.domain.auth.User; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.GeoInfo; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.domain.TPS; import com.djrapitops.plan.storage.database.Database; import com.djrapitops.plan.storage.database.DatabaseTestPreparer; @@ -52,7 +52,7 @@ public interface DatabaseBackupTest extends DatabaseTestPreparer { db().executeTransaction(new PlayerServerRegisterTransaction(player2UUID, RandomData::randomTime, TestConstants.PLAYER_TWO_NAME, serverUUID(), TestConstants.PLAYER_HOSTNAME)); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); execute(DataStoreQueries.storeSession(session)); db().executeTransaction( diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ExtensionsDatabaseTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ExtensionsDatabaseTest.java index 8e679e3c6..52800e7e0 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ExtensionsDatabaseTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ExtensionsDatabaseTest.java @@ -31,7 +31,9 @@ import com.djrapitops.plan.extension.implementation.storage.queries.ExtensionSer import com.djrapitops.plan.extension.implementation.storage.transactions.results.RemoveUnsatisfiedConditionalPlayerResultsTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.RemoveUnsatisfiedConditionalServerResultsTransaction; import com.djrapitops.plan.extension.table.Table; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; +import com.djrapitops.plan.gathering.domain.WorldTimes; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DatabaseTestPreparer; import com.djrapitops.plan.storage.database.transactions.commands.RemoveEverythingTransaction; import com.djrapitops.plan.storage.database.transactions.events.WorldNameStoreTransaction; @@ -85,7 +87,7 @@ public interface ExtensionsDatabaseTest extends DatabaseTestPreparer { extensionService.register(new PlayerExtension()); extensionService.updatePlayerValues(playerUUID, TestConstants.PLAYER_ONE_NAME, CallEvents.MANUAL); - Map> playerDataByServerUUID = db().query(new ExtensionPlayerDataQuery(playerUUID)); + Map> playerDataByServerUUID = db().query(new ExtensionPlayerDataQuery(playerUUID)); List ofServer = playerDataByServerUUID.get(serverUUID()); assertNotNull(ofServer); assertFalse(ofServer.isEmpty()); @@ -110,11 +112,9 @@ public interface ExtensionsDatabaseTest extends DatabaseTestPreparer { db().executeTransaction(new WorldNameStoreTransaction(serverUUID(), worlds[1])); // Store a session to check against issue https://github.com/plan-player-analytics/Plan/issues/1039 - Session session = new Session(playerUUID, serverUUID(), 32345L, worlds[0], "SURVIVAL"); - session.endSession(42345L); - session.setWorldTimes(RandomData.randomWorldTimes(worlds)); - - execute(DataStoreQueries.storeSession(session)); + ActiveSession session = new ActiveSession(playerUUID, serverUUID(), 32345L, worlds[0], "SURVIVAL"); + session.getExtraData().put(WorldTimes.class, RandomData.randomWorldTimes(worlds)); + execute(DataStoreQueries.storeSession(session.toFinishedSession(42345L))); Map result = db().query(new ExtensionServerTableDataQuery(serverUUID(), 50)); assertEquals(1, result.size()); @@ -326,7 +326,7 @@ public interface ExtensionsDatabaseTest extends DatabaseTestPreparer { extensionService.updatePlayerValues(playerUUID, TestConstants.PLAYER_ONE_NAME, CallEvents.MANUAL); extensionService.updatePlayerValues(playerUUID, TestConstants.PLAYER_ONE_NAME, CallEvents.MANUAL); - Map> ofPlayer = db().query(new ExtensionPlayerDataQuery(playerUUID)); + Map> ofPlayer = db().query(new ExtensionPlayerDataQuery(playerUUID)); assertFalse(ofPlayer.isEmpty()); List ofServer = ofPlayer.get(serverUUID()); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ServerQueriesTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ServerQueriesTest.java index 2b97ca0b0..e2abe7122 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ServerQueriesTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/ServerQueriesTest.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DatabaseTestPreparer; import com.djrapitops.plan.storage.database.queries.objects.ServerQueries; import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction; @@ -28,7 +29,6 @@ import utilities.OptionalAssert; import java.util.Collection; import java.util.Map; import java.util.Optional; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; @@ -55,7 +55,7 @@ public interface ServerQueriesTest extends DatabaseTestPreparer { Optional bungeeInfo = db().query(ServerQueries.fetchProxyServerInformation()); assertFalse(bungeeInfo.isPresent()); - UUID bungeeUUID = UUID.randomUUID(); + ServerUUID bungeeUUID = ServerUUID.randomUUID(); Server bungeeCord = new Server(bungeeUUID, "BungeeCord", "Random:1234"); bungeeCord.setProxy(true); db().executeTransaction(new StoreServerInformationTransaction(bungeeCord)); @@ -76,7 +76,7 @@ public interface ServerQueriesTest extends DatabaseTestPreparer { default void proxyIsDetected() { bungeeInformationIsStored(); - Map serverInformation = db().query(ServerQueries.fetchPlanServerInformation()); + Map serverInformation = db().query(ServerQueries.fetchPlanServerInformation()); assertEquals(1, serverInformation.values().stream().filter(Server::isNotProxy).count()); assertEquals(1, serverInformation.values().stream().filter(Server::isProxy).count()); diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java index e8c181ef0..8bd352fbe 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/SessionQueriesTest.java @@ -18,12 +18,13 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.delivery.domain.TablePlayer; import com.djrapitops.plan.delivery.domain.container.PlayerContainer; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.domain.mutators.SessionsMutator; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.PlayerKill; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.PlayerKills; import com.djrapitops.plan.gathering.domain.WorldTimes; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DatabaseTestPreparer; import com.djrapitops.plan.storage.database.queries.containers.PlayerContainerQuery; import com.djrapitops.plan.storage.database.queries.objects.KillQueries; @@ -53,15 +54,15 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { default void sessionPlaytimeIsCalculatedCorrectlyAfterStorage() { prepareForSessionSave(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); long expectedLength = session.getLength(); - long sessionEnd = session.getValue(SessionKeys.END).orElseThrow(AssertionError::new); + long sessionEnd = session.getEnd(); execute(DataStoreQueries.storeSession(session)); forcePersistenceCheck(); - Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); + Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); assertTrue(sessions.containsKey(serverUUID())); SessionsMutator sessionsMutator = new SessionsMutator(sessions.get(serverUUID())); @@ -85,13 +86,13 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { @Test default void sessionsAreStoredWithAllData() { prepareForSessionSave(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); execute(DataStoreQueries.storeSession(session)); forcePersistenceCheck(); - Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); - List savedSessions = sessions.get(serverUUID()); + Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); + List savedSessions = sessions.get(serverUUID()); assertNotNull(savedSessions); assertEquals(1, savedSessions.size()); @@ -102,11 +103,11 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { @Test default void mostRecentSessionsCanBeQueried() { prepareForSessionSave(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); execute(DataStoreQueries.storeSession(session)); - List expected = Collections.singletonList(session); - List result = db().query(SessionQueries.fetchLatestSessionsOfServer(serverUUID(), 1)); + List expected = Collections.singletonList(session); + List result = db().query(SessionQueries.fetchLatestSessionsOfServer(serverUUID(), 1)); assertEquals(expected, result); } @@ -115,9 +116,9 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { prepareForSessionSave(); WorldTimes worldTimes = RandomData.randomWorldTimes(worlds); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID); - session.setWorldTimes(worldTimes); - List sessions = Collections.singletonList(session); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID); + session.getExtraData().put(WorldTimes.class, worldTimes); + List sessions = Collections.singletonList(session); db().executeTransaction(new Transaction() { @Override protected void performOperations() { @@ -125,7 +126,7 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { } }); - Map saved = db().query(WorldTimesQueries.fetchPlayerWorldTimesOnServers(playerUUID)); + Map saved = db().query(WorldTimesQueries.fetchPlayerWorldTimesOnServers(playerUUID)); WorldTimes savedWorldTimes = saved.get(serverUUID()); assertEquals(worldTimes, savedWorldTimes); } @@ -135,9 +136,9 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { prepareForSessionSave(); WorldTimes worldTimes = RandomData.randomWorldTimes(worlds); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID); - session.setWorldTimes(worldTimes); - List sessions = new ArrayList<>(); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID); + session.getExtraData().put(WorldTimes.class, worldTimes); + List sessions = new ArrayList<>(); sessions.add(session); db().executeTransaction(new Transaction() { @Override @@ -146,16 +147,16 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { } }); - List allSessions = db().query(SessionQueries.fetchAllSessions()); + List allSessions = db().query(SessionQueries.fetchAllSessions()); - assertEquals(worldTimes, allSessions.get(0).getUnsafe(SessionKeys.WORLD_TIMES)); + assertEquals(worldTimes, allSessions.get(0).getExtraData(WorldTimes.class).get()); } @Test default void playersWorldTimesMatchTotal() { worldTimesAreSavedWithSession(); - Session session = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)).get(serverUUID()).get(0); - WorldTimes expected = session.getValue(SessionKeys.WORLD_TIMES).orElseThrow(AssertionError::new); + FinishedSession session = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)).get(serverUUID()).get(0); + WorldTimes expected = session.getExtraData(WorldTimes.class).orElseThrow(AssertionError::new); WorldTimes worldTimesOfUser = db().query(WorldTimesQueries.fetchPlayerTotalWorldTimes(playerUUID)); assertEquals(expected, worldTimesOfUser); } @@ -163,8 +164,8 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { @Test default void serverWorldTimesMatchTotal() { worldTimesAreSavedWithSession(); - Session session = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)).get(serverUUID()).get(0); - WorldTimes expected = session.getValue(SessionKeys.WORLD_TIMES).orElseThrow(AssertionError::new); + FinishedSession session = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)).get(serverUUID()).get(0); + WorldTimes expected = session.getExtraData(WorldTimes.class).orElseThrow(AssertionError::new); WorldTimes worldTimesOfServer = db().query(WorldTimesQueries.fetchServerTotalWorldTimes(serverUUID())); assertEquals(expected, worldTimesOfServer); } @@ -178,13 +179,13 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { @Test default void serverSessionsAreFetchedByPlayerUUID() { prepareForSessionSave(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); execute(DataStoreQueries.storeSession(session)); forcePersistenceCheck(); - Map> expected = Collections.singletonMap(playerUUID, Collections.singletonList(session)); - Map> fetched = db().query(SessionQueries.fetchSessionsOfServer(serverUUID())); + Map> expected = Collections.singletonMap(playerUUID, Collections.singletonList(session)); + Map> fetched = db().query(SessionQueries.fetchSessionsOfServer(serverUUID())); assertEquals(expected, fetched); } @@ -193,13 +194,13 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { default void playerSessionsAreFetchedByServerUUID() { prepareForSessionSave(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); execute(DataStoreQueries.storeSession(session)); forcePersistenceCheck(); - Map> expected = Collections.singletonMap(serverUUID(), Collections.singletonList(session)); - Map> fetched = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); + Map> expected = Collections.singletonMap(serverUUID(), Collections.singletonList(session)); + Map> fetched = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); assertEquals(expected, fetched); } @@ -207,18 +208,18 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { default void testKillTableGetKillsOfServer() { prepareForSessionSave(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); - List expected = session.getPlayerKills(); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + List expected = session.getExtraData(PlayerKills.class).map(PlayerKills::asList).get(); execute(DataStoreQueries.storeSession(session)); forcePersistenceCheck(); - Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); - List savedSessions = sessions.get(serverUUID()); + Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); + List savedSessions = sessions.get(serverUUID()); assertNotNull(savedSessions); assertFalse(savedSessions.isEmpty()); - List got = savedSessions.get(0).getPlayerKills(); + List got = savedSessions.get(0).getExtraData(PlayerKills.class).map(PlayerKills::asList).get(); assertEquals(expected, got); } @@ -226,17 +227,17 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { default void sessionWorldTimesAreFetchedCorrectly() { prepareForSessionSave(); - Session session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); - WorldTimes expected = session.getValue(SessionKeys.WORLD_TIMES).orElseThrow(AssertionError::new); + FinishedSession session = RandomData.randomSession(serverUUID(), worlds, playerUUID, player2UUID); + WorldTimes expected = session.getExtraData(WorldTimes.class).orElseThrow(AssertionError::new); execute(DataStoreQueries.storeSession(session)); // Fetch the session - Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); - List serverSessions = sessions.get(serverUUID()); + Map> sessions = db().query(SessionQueries.fetchSessionsOfPlayer(playerUUID)); + List serverSessions = sessions.get(serverUUID()); assertNotNull(serverSessions); assertFalse(serverSessions.isEmpty()); - WorldTimes got = serverSessions.get(0).getValue(SessionKeys.WORLD_TIMES).orElseThrow(AssertionError::new); + WorldTimes got = serverSessions.get(0).getExtraData(WorldTimes.class).orElseThrow(AssertionError::new); assertEquals(expected, got); } @@ -273,8 +274,8 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { @RepeatedTest(value = 3, name = "Players table and Player page playtimes match {currentRepetition}/{totalRepetitions}") default void playersTableAndPlayerPagePlaytimeMatches() { prepareForSessionSave(); - List player1Sessions = RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID); - List player2Sessions = RandomData.randomSessions(serverUUID(), worlds, player2UUID, playerUUID); + List player1Sessions = RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID); + List player2Sessions = RandomData.randomSessions(serverUUID(), worlds, player2UUID, playerUUID); player1Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); player2Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); @@ -293,8 +294,8 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { @RepeatedTest(value = 3, name = "Players table and player page Activity Index calculations match {currentRepetition}/{totalRepetitions}") default void playersTableAndPlayerPageActivityIndexMatches() { prepareForSessionSave(); - List player1Sessions = RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID); - List player2Sessions = RandomData.randomSessions(serverUUID(), worlds, player2UUID, playerUUID); + List player1Sessions = RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID); + List player2Sessions = RandomData.randomSessions(serverUUID(), worlds, player2UUID, playerUUID); player1Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); player2Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); @@ -330,14 +331,14 @@ public interface SessionQueriesTest extends DatabaseTestPreparer { @Test default void serverPreferencePieValuesAreCorrect() { prepareForSessionSave(); - List server1Sessions = RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID); + List server1Sessions = RandomData.randomSessions(serverUUID(), worlds, playerUUID, player2UUID); server1Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); - UUID serverTwoUuid = TestConstants.SERVER_TWO_UUID; + ServerUUID serverTwoUuid = TestConstants.SERVER_TWO_UUID; executeTransactions(new StoreServerInformationTransaction(new Server(serverTwoUuid, TestConstants.SERVER_TWO_NAME, ""))); db().executeTransaction(new WorldNameStoreTransaction(serverTwoUuid, worlds[0])); db().executeTransaction(new WorldNameStoreTransaction(serverTwoUuid, worlds[1])); - List server2Sessions = RandomData.randomSessions(serverTwoUuid, worlds, playerUUID, player2UUID); + List server2Sessions = RandomData.randomSessions(serverTwoUuid, worlds, playerUUID, player2UUID); server2Sessions.forEach(session -> execute(DataStoreQueries.storeSession(session))); Map expected = Maps.builder(String.class, Long.class) diff --git a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/TPSQueriesTest.java b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/TPSQueriesTest.java index c321395d1..1e5ecc1d8 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/TPSQueriesTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/storage/database/queries/TPSQueriesTest.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.storage.database.queries; import com.djrapitops.plan.delivery.domain.DateObj; import com.djrapitops.plan.gathering.domain.TPS; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.DatabaseTestPreparer; import com.djrapitops.plan.storage.database.queries.objects.TPSQueries; import com.djrapitops.plan.storage.database.transactions.commands.RemoveEverythingTransaction; @@ -29,7 +30,6 @@ import utilities.RandomData; import java.util.Comparator; import java.util.List; -import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -53,7 +53,7 @@ public interface TPSQueriesTest extends DatabaseTestPreparer { default void removeEverythingRemovesTPS() { tpsIsStored(); db().executeTransaction(new RemoveEverythingTransaction()); - assertTrue(db().query(TPSQueries.fetchTPSDataOfAllServersBut(0, System.currentTimeMillis(), UUID.randomUUID())).isEmpty()); + assertTrue(db().query(TPSQueries.fetchTPSDataOfAllServersBut(0, System.currentTimeMillis(), ServerUUID.randomUUID())).isEmpty()); } @Test diff --git a/Plan/common/src/test/java/com/djrapitops/plan/utilities/comparators/ComparatorTest.java b/Plan/common/src/test/java/com/djrapitops/plan/utilities/comparators/ComparatorTest.java index 1b1b29d5c..bd858b02f 100644 --- a/Plan/common/src/test/java/com/djrapitops/plan/utilities/comparators/ComparatorTest.java +++ b/Plan/common/src/test/java/com/djrapitops/plan/utilities/comparators/ComparatorTest.java @@ -16,10 +16,9 @@ */ package com.djrapitops.plan.utilities.comparators; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; import com.djrapitops.plan.delivery.rendering.json.graphs.line.Point; +import com.djrapitops.plan.gathering.domain.FinishedSession; import com.djrapitops.plan.gathering.domain.GeoInfo; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.domain.TPS; import com.djrapitops.plan.settings.locale.Message; import com.djrapitops.plan.settings.locale.lang.HelpLang; @@ -51,14 +50,14 @@ class ComparatorTest { @Test void sessionDataComparator() { - List sessions = RandomData.randomSessions(); + List sessions = RandomData.randomSessions(); - List expected = sessions.stream().map(s -> s.getUnsafe(SessionKeys.START)) + List expected = sessions.stream().map(FinishedSession::getStart) .sorted(Long::compare).collect(Collectors.toList()); Collections.reverse(expected); sessions.sort(new SessionStartComparator()); - List result = Lists.map(sessions, s -> s.getUnsafe(SessionKeys.START)); + List result = Lists.map(sessions, FinishedSession::getStart); assertEquals(expected, result); } diff --git a/Plan/common/src/test/java/utilities/RandomData.java b/Plan/common/src/test/java/utilities/RandomData.java index fbf86c2a7..f8f256c15 100644 --- a/Plan/common/src/test/java/utilities/RandomData.java +++ b/Plan/common/src/test/java/utilities/RandomData.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.delivery.domain.DateObj; import com.djrapitops.plan.delivery.domain.Nickname; import com.djrapitops.plan.delivery.rendering.json.graphs.line.Point; import com.djrapitops.plan.gathering.domain.*; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.sql.tables.KillsTable; import org.apache.commons.lang3.RandomStringUtils; @@ -56,11 +57,11 @@ public class RandomData { return RandomStringUtils.randomAlphanumeric(size); } - public static List randomNicknames(UUID serverUUID) { + public static List randomNicknames(ServerUUID serverUUID) { return pickMultiple(randomInt(15, 30), () -> randomNickname(serverUUID)); } - public static Nickname randomNickname(UUID serverUUID) { + public static Nickname randomNickname(ServerUUID serverUUID) { return new Nickname(randomString(randomInt(50, 100)), randomTime(), serverUUID); } @@ -74,7 +75,7 @@ public class RandomData { return test; } - public static List randomSessions() { + public static List randomSessions() { return pickMultiple(randomInt(15, 30), () -> randomSession( TestConstants.SERVER_UUID, @@ -100,31 +101,44 @@ public class RandomData { return picked; } - public static List randomSessions(UUID serverUUID, String[] worlds, UUID... uuids) { + public static List randomSessions(ServerUUID serverUUID, String[] worlds, UUID... uuids) { return pickMultiple(randomInt(5, 50), () -> randomSession(serverUUID, worlds, uuids)); } - public static Session randomSession(UUID serverUUID, String[] worlds, UUID... uuids) { - Session session = new Session(uuids[0], serverUUID, RandomData.randomTime(), pickAtRandom(worlds), randomGameMode()); - session.endSession(RandomData.randomTimeAfter(session.getDate())); - session.setWorldTimes(RandomData.randomWorldTimes(worlds)); - session.addAFKTime(RandomData.randomLong(1, session.getLength())); + public static FinishedSession randomSession(ServerUUID serverUUID, String[] worlds, UUID... uuids) { + DataMap extraData = new DataMap(); + extraData.put(WorldTimes.class, RandomData.randomWorldTimes(worlds)); + long start = RandomData.randomTime(); + long end = RandomData.randomTimeAfter(start); + if (uuids.length >= 2) { - session.setPlayerKills(RandomData.randomKills(uuids[0], pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length)))); + List kills = RandomData.randomKills(uuids[0], pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length))); + extraData.put(PlayerKills.class, new PlayerKills(kills)); } - return session; + extraData.put(MobKillCounter.class, new MobKillCounter()); + extraData.put(DeathCounter.class, new DeathCounter()); + return new FinishedSession( + uuids[0], serverUUID, + start, end, RandomData.randomLong(0, end - start), + extraData + ); } - public static List randomUnfinishedSessions(UUID serverUUID, String[] worlds, UUID... uuids) { + public static List randomUnfinishedSessions(ServerUUID serverUUID, String[] worlds, UUID... uuids) { return pickMultiple(randomInt(5, 50), () -> randomUnfinishedSession(serverUUID, worlds, uuids)); } - public static Session randomUnfinishedSession(UUID serverUUID, String[] worlds, UUID... uuids) { - Session session = new Session(uuids[0], serverUUID, RandomData.randomTime(), pickAtRandom(worlds), randomGameMode()); - session.setWorldTimes(RandomData.randomWorldTimes(worlds)); + public static ActiveSession randomUnfinishedSession(ServerUUID serverUUID, String[] worlds, UUID... uuids) { + ActiveSession session = new ActiveSession(uuids[0], serverUUID, RandomData.randomTime(), pickAtRandom(worlds), randomGameMode()); + + session.getExtraData().get(WorldTimes.class) + .ifPresent(worldTimes -> worldTimes.setAll(RandomData.randomWorldTimes(worlds))); + if (uuids.length >= 2) { - session.setPlayerKills(RandomData.randomKills(uuids[0], pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length)))); + List randomKills = RandomData.randomKills(uuids[0], pickAtRandom(Arrays.copyOfRange(uuids, 1, uuids.length))); + session.getExtraData().get(PlayerKills.class).ifPresent(kills -> kills.addAll(randomKills)); } + return session; } @@ -162,11 +176,11 @@ public class RandomData { )); } - public static List randomPings(UUID serverUUID) { + public static List randomPings(ServerUUID serverUUID) { return pickMultiple(randomInt(15, 30), () -> randomPing(serverUUID)); } - public static Ping randomPing(UUID serverUUID) { + public static Ping randomPing(ServerUUID serverUUID) { int r1 = randomInt(1, 200); int r2 = randomInt(1, 200); return new Ping(randomTime(), serverUUID, Math.min(r1, r2), Math.max(r1, r2), (r1 + r2) / 2.0); diff --git a/Plan/common/src/test/java/utilities/TestConstants.java b/Plan/common/src/test/java/utilities/TestConstants.java index 1a1a4a7e7..c1f651776 100644 --- a/Plan/common/src/test/java/utilities/TestConstants.java +++ b/Plan/common/src/test/java/utilities/TestConstants.java @@ -16,6 +16,8 @@ */ package utilities; +import com.djrapitops.plan.identification.ServerUUID; + import java.util.UUID; /** @@ -31,8 +33,8 @@ public class TestConstants { public static final String SERVER_NAME = "ServerName"; public static final String SERVER_TWO_NAME = "ServerName2"; - public static final UUID SERVER_UUID = UUID.fromString("e4ec2edd-e0ed-3c58-a87d-8a9021899479"); - public static final UUID SERVER_TWO_UUID = UUID.fromString("c4ec2edd-e0ed-3c58-a87d-8a9024791899"); + public static final ServerUUID SERVER_UUID = ServerUUID.fromString("e4ec2edd-e0ed-3c58-a87d-8a9021899479"); + public static final ServerUUID SERVER_TWO_UUID = ServerUUID.fromString("c4ec2edd-e0ed-3c58-a87d-8a9024791899"); public static final UUID PLAYER_ONE_UUID = UUID.fromString("45b0dfdb-f71d-4cf3-8c21-27c9d4c651db"); public static final UUID PLAYER_TWO_UUID = UUID.fromString("ec94a954-1fa1-445b-b09b-9b698519af80"); public static final UUID PLAYER_THREE_UUID = UUID.randomUUID(); diff --git a/Plan/common/src/test/java/utilities/TestData.java b/Plan/common/src/test/java/utilities/TestData.java index 7d8584477..2cb8ca2dc 100644 --- a/Plan/common/src/test/java/utilities/TestData.java +++ b/Plan/common/src/test/java/utilities/TestData.java @@ -18,6 +18,7 @@ package utilities; import com.djrapitops.plan.gathering.domain.*; import com.djrapitops.plan.identification.Server; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.storage.database.transactions.StoreServerInformationTransaction; import com.djrapitops.plan.storage.database.transactions.Transaction; import com.djrapitops.plan.storage.database.transactions.events.*; @@ -39,8 +40,8 @@ public class TestData { private static final UUID playerUUID = TestConstants.PLAYER_ONE_UUID; private static final UUID player2UUID = TestConstants.PLAYER_TWO_UUID; - private static final UUID serverUUID = TestConstants.SERVER_UUID; - private static final UUID server2UUID = TestConstants.SERVER_TWO_UUID; + private static final ServerUUID serverUUID = TestConstants.SERVER_UUID; + private static final ServerUUID server2UUID = TestConstants.SERVER_TWO_UUID; private static final String playerName = TestConstants.PLAYER_ONE_NAME; private static final String player2Name = TestConstants.PLAYER_TWO_NAME; @@ -54,8 +55,8 @@ public class TestData { private static final long playerFirstJoin = 1234500L; private static final long playerSecondJoin = 234000L; - private static final List playerSessions = createSessionsForPlayer(playerUUID); - private static final List player2Sessions = createSessionsForPlayer(player2UUID); + private static final List playerSessions = createSessionsForPlayer(playerUUID); + private static final List player2Sessions = createSessionsForPlayer(player2UUID); private static final List playerGeoInfo = createGeoInfoForPlayer(); @@ -70,24 +71,24 @@ public class TestData { return geoInfos; } - private static List createSessionsForPlayer(UUID uuid) { - List sessions = new ArrayList<>(); + private static List createSessionsForPlayer(UUID uuid) { + List sessions = new ArrayList<>(); String[] gms = GMTimes.getGMKeyArray(); - Session sessionOne = new Session(uuid, serverUUID, playerFirstJoin, serverWorldNames[0], gms[0]); + ActiveSession sessionOne = new ActiveSession(uuid, serverUUID, playerFirstJoin, serverWorldNames[0], gms[0]); UUID otherUUID = uuid.equals(playerUUID) ? player2UUID : playerUUID; - sessionOne.playerKilled(new PlayerKill(uuid, otherUUID, "Iron Sword", 1234750L)); - sessionOne.playerKilled(new PlayerKill(uuid, otherUUID, "Gold Sword", 1234800L)); + sessionOne.addPlayerKill(new PlayerKill(uuid, otherUUID, "Iron Sword", 1234750L)); + sessionOne.addPlayerKill(new PlayerKill(uuid, otherUUID, "Gold Sword", 1234800L)); - sessionOne.endSession(1235000L); // Length 500ms - sessions.add(sessionOne); + // Length 500ms + sessions.add(sessionOne.toFinishedSession(1235000L)); - Session sessionTwo = new Session(uuid, server2UUID, playerSecondJoin, server2WorldNames[0], gms[1]); + ActiveSession sessionTwo = new ActiveSession(uuid, server2UUID, playerSecondJoin, server2WorldNames[0], gms[1]); sessionTwo.changeState(server2WorldNames[1], gms[0], 334000L); // Length 100s - sessionTwo.endSession(434000L); // Length 200s - sessions.add(sessionTwo); + // Length 200s + sessions.add(sessionTwo.toFinishedSession(434000L)); return sessions; } @@ -124,7 +125,7 @@ public class TestData { executeOther(new GeoInfoStoreTransaction(playerUUID, geoInfo)); } - for (Session session : playerSessions) { + for (FinishedSession session : playerSessions) { executeOther(new SessionEndTransaction(session)); } } @@ -147,7 +148,7 @@ public class TestData { executeOther(new GeoInfoStoreTransaction(player2UUID, geoInfo)); } - for (Session session : player2Sessions) { + for (FinishedSession session : player2Sessions) { executeOther(new SessionEndTransaction(session)); } } @@ -163,11 +164,11 @@ public class TestData { return server2WorldNames; } - public static List getPlayerSessions() { + public static List getPlayerSessions() { return playerSessions; } - public static List getPlayer2Sessions() { + public static List getPlayer2Sessions() { return player2Sessions; } diff --git a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/DeathEventListener.java b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/DeathEventListener.java index 961016e17..d6c888e14 100644 --- a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/DeathEventListener.java +++ b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/DeathEventListener.java @@ -31,7 +31,7 @@ import cn.nukkit.item.Item; import com.djrapitops.plan.delivery.formatting.EntityNameFormatter; import com.djrapitops.plan.delivery.formatting.ItemNameFormatter; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.processing.processors.player.MobKillProcessor; import com.djrapitops.plan.processing.processors.player.PlayerKillProcessor; @@ -64,7 +64,7 @@ public class DeathEventListener implements Listener { public void onPlayerDeath(PlayerDeathEvent event) { long time = System.currentTimeMillis(); Player dead = event.getEntity(); - SessionCache.getCachedSession(dead.getUniqueId()).ifPresent(Session::died); + SessionCache.getCachedSession(dead.getUniqueId()).ifPresent(ActiveSession::addDeath); try { EntityDamageEvent entityDamageEvent = dead.getLastDamageCause(); diff --git a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/GameModeChangeListener.java b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/GameModeChangeListener.java index 883e2a514..21c803fb4 100644 --- a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/GameModeChangeListener.java +++ b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/GameModeChangeListener.java @@ -22,8 +22,8 @@ import cn.nukkit.event.EventPriority; import cn.nukkit.event.Listener; import cn.nukkit.event.player.PlayerGameModeChangeEvent; import com.djrapitops.plan.gathering.cache.SessionCache; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.domain.GMTimes; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -82,7 +82,7 @@ public class GameModeChangeListener implements Listener { dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), worldName)); worldAliasSettings.addWorld(worldName); - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); } } diff --git a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/PlayerOnlineListener.java b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/PlayerOnlineListener.java index 55ceab89c..bde58900c 100644 --- a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/PlayerOnlineListener.java +++ b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/PlayerOnlineListener.java @@ -25,17 +25,19 @@ import cn.nukkit.event.player.PlayerKickEvent; import cn.nukkit.event.player.PlayerLoginEvent; import cn.nukkit.event.player.PlayerQuitEvent; import com.djrapitops.plan.delivery.domain.Nickname; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.delivery.domain.PlayerName; +import com.djrapitops.plan.delivery.domain.ServerName; import com.djrapitops.plan.delivery.export.Exporter; import com.djrapitops.plan.extension.CallEvents; import com.djrapitops.plan.extension.ExtensionSvc; import com.djrapitops.plan.gathering.cache.NicknameCache; import com.djrapitops.plan.gathering.cache.SessionCache; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.domain.GMTimes; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.gathering.geolocation.GeolocationCache; import com.djrapitops.plan.gathering.listeners.Status; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; @@ -145,7 +147,7 @@ public class PlayerOnlineListener implements Listener { Player player = event.getPlayer(); UUID playerUUID = player.getUniqueId(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); long time = System.currentTimeMillis(); NukkitAFKListener.AFK_TRACKER.performedAction(playerUUID, time); @@ -172,9 +174,9 @@ public class PlayerOnlineListener implements Listener { long registerDate = TimeUnit.SECONDS.toMillis(player.getFirstPlayed()); database.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> registerDate, playerName, serverUUID, hostname)); - Session session = new Session(playerUUID, serverUUID, time, world, gm); - session.putRawData(SessionKeys.NAME, playerName); - session.putRawData(SessionKeys.SERVER_NAME, serverInfo.getServer().getIdentifiableName()); + ActiveSession session = new ActiveSession(playerUUID, serverUUID, time, world, gm); + session.getExtraData().put(PlayerName.class, new PlayerName(playerName)); + session.getExtraData().put(ServerName.class, new ServerName(serverInfo.getServer().getIdentifiableName())); sessionCache.cacheSession(playerUUID, session) .ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession))); diff --git a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/WorldChangeListener.java b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/WorldChangeListener.java index 539c644d8..bcfe1a927 100644 --- a/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/WorldChangeListener.java +++ b/Plan/nukkit/src/main/java/com/djrapitops/plan/gathering/listeners/nukkit/WorldChangeListener.java @@ -22,8 +22,8 @@ import cn.nukkit.event.EventPriority; import cn.nukkit.event.Listener; import cn.nukkit.event.entity.EntityLevelChangeEvent; import com.djrapitops.plan.gathering.cache.SessionCache; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.domain.GMTimes; -import com.djrapitops.plan.gathering.domain.Session; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -79,7 +79,7 @@ public class WorldChangeListener implements Listener { dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), worldName)); worldAliasSettings.addWorld(worldName); - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); } } diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/PlayerOnlineListener.java b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/PlayerOnlineListener.java index a9bee61d3..7ad95e243 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/PlayerOnlineListener.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/PlayerOnlineListener.java @@ -17,16 +17,18 @@ package com.djrapitops.plan.gathering.listeners.sponge; import com.djrapitops.plan.delivery.domain.Nickname; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.delivery.domain.PlayerName; +import com.djrapitops.plan.delivery.domain.ServerName; import com.djrapitops.plan.delivery.export.Exporter; import com.djrapitops.plan.extension.CallEvents; import com.djrapitops.plan.extension.ExtensionSvc; import com.djrapitops.plan.gathering.cache.NicknameCache; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.geolocation.GeolocationCache; import com.djrapitops.plan.gathering.listeners.Status; import com.djrapitops.plan.identification.ServerInfo; +import com.djrapitops.plan.identification.ServerUUID; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; @@ -149,7 +151,7 @@ public class PlayerOnlineListener { Player player = event.getTargetEntity(); UUID playerUUID = player.getUniqueId(); - UUID serverUUID = serverInfo.getServerUUID(); + ServerUUID serverUUID = serverInfo.getServerUUID(); long time = System.currentTimeMillis(); SpongeAFKListener.AFK_TRACKER.performedAction(playerUUID, time); @@ -176,9 +178,9 @@ public class PlayerOnlineListener { database.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> time, playerName, serverUUID, hostname)); - Session session = new Session(playerUUID, serverUUID, time, world, gm); - session.putRawData(SessionKeys.NAME, playerName); - session.putRawData(SessionKeys.SERVER_NAME, serverInfo.getServer().getIdentifiableName()); + ActiveSession session = new ActiveSession(playerUUID, serverUUID, time, world, gm); + session.getExtraData().put(PlayerName.class, new PlayerName(playerName)); + session.getExtraData().put(ServerName.class, new ServerName(serverInfo.getServer().getIdentifiableName())); sessionCache.cacheSession(playerUUID, session) .ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession))); diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeDeathListener.java b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeDeathListener.java index f7daf7f89..6fedfd11f 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeDeathListener.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeDeathListener.java @@ -19,7 +19,7 @@ package com.djrapitops.plan.gathering.listeners.sponge; import com.djrapitops.plan.delivery.formatting.EntityNameFormatter; import com.djrapitops.plan.delivery.formatting.ItemNameFormatter; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.processing.processors.player.MobKillProcessor; import com.djrapitops.plan.processing.processors.player.PlayerKillProcessor; @@ -70,7 +70,7 @@ public class SpongeDeathListener { if (dead instanceof Player) { // Process Death - SessionCache.getCachedSession(dead.getUniqueId()).ifPresent(Session::died); + SessionCache.getCachedSession(dead.getUniqueId()).ifPresent(ActiveSession::addDeath); } try { diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeGMChangeListener.java b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeGMChangeListener.java index 983b4b38d..2a5da6f25 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeGMChangeListener.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeGMChangeListener.java @@ -17,7 +17,7 @@ package com.djrapitops.plan.gathering.listeners.sponge; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -82,7 +82,7 @@ public class SpongeGMChangeListener { dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), worldName)); worldAliasSettings.addWorld(worldName); - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); } diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeWorldChangeListener.java b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeWorldChangeListener.java index 73eb479d9..30e98f2e2 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeWorldChangeListener.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/gathering/listeners/sponge/SpongeWorldChangeListener.java @@ -17,7 +17,7 @@ package com.djrapitops.plan.gathering.listeners.sponge; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.settings.config.WorldAliasSettings; import com.djrapitops.plan.storage.database.DBSystem; @@ -85,7 +85,7 @@ public class SpongeWorldChangeListener { dbSystem.getDatabase().executeTransaction(new WorldNameStoreTransaction(serverInfo.getServerUUID(), worldName)); worldAliasSettings.addWorld(worldName); - Optional cachedSession = SessionCache.getCachedSession(uuid); + Optional cachedSession = SessionCache.getCachedSession(uuid); cachedSession.ifPresent(session -> session.changeState(worldName, gameMode, time)); } diff --git a/Plan/velocity/src/main/java/com/djrapitops/plan/gathering/listeners/velocity/PlayerOnlineListener.java b/Plan/velocity/src/main/java/com/djrapitops/plan/gathering/listeners/velocity/PlayerOnlineListener.java index 1ba489e2d..e951e54f3 100644 --- a/Plan/velocity/src/main/java/com/djrapitops/plan/gathering/listeners/velocity/PlayerOnlineListener.java +++ b/Plan/velocity/src/main/java/com/djrapitops/plan/gathering/listeners/velocity/PlayerOnlineListener.java @@ -16,12 +16,13 @@ */ package com.djrapitops.plan.gathering.listeners.velocity; -import com.djrapitops.plan.delivery.domain.keys.SessionKeys; +import com.djrapitops.plan.delivery.domain.PlayerName; +import com.djrapitops.plan.delivery.domain.ServerName; import com.djrapitops.plan.delivery.export.Exporter; import com.djrapitops.plan.extension.CallEvents; import com.djrapitops.plan.extension.ExtensionSvc; import com.djrapitops.plan.gathering.cache.SessionCache; -import com.djrapitops.plan.gathering.domain.Session; +import com.djrapitops.plan.gathering.domain.ActiveSession; import com.djrapitops.plan.gathering.geolocation.GeolocationCache; import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.processing.Processing; @@ -105,9 +106,9 @@ public class PlayerOnlineListener { InetAddress address = player.getRemoteAddress().getAddress(); long time = System.currentTimeMillis(); - Session session = new Session(playerUUID, serverInfo.getServerUUID(), time, null, null); - session.putRawData(SessionKeys.NAME, playerName); - session.putRawData(SessionKeys.SERVER_NAME, "Proxy Server"); + ActiveSession session = new ActiveSession(playerUUID, serverInfo.getServerUUID(), time, null, null); + session.getExtraData().put(PlayerName.class, new PlayerName(playerName)); + session.getExtraData().put(ServerName.class, new ServerName("Proxy Server")); sessionCache.cacheSession(playerUUID, session); Database database = dbSystem.getDatabase(); @@ -170,9 +171,9 @@ public class PlayerOnlineListener { long time = System.currentTimeMillis(); // Replaces the current session in the cache. - Session session = new Session(playerUUID, serverInfo.getServerUUID(), time, null, null); - session.putRawData(SessionKeys.NAME, playerName); - session.putRawData(SessionKeys.SERVER_NAME, "Proxy Server"); + ActiveSession session = new ActiveSession(playerUUID, serverInfo.getServerUUID(), time, null, null); + session.getExtraData().put(PlayerName.class, new PlayerName(playerName)); + session.getExtraData().put(ServerName.class, new ServerName("Proxy Server")); sessionCache.cacheSession(playerUUID, session); if (config.isTrue(ExportSettings.EXPORT_ON_ONLINE_STATUS_CHANGE)) { diff --git a/Plan/velocity/src/main/java/com/djrapitops/plan/identification/VelocityServerInfo.java b/Plan/velocity/src/main/java/com/djrapitops/plan/identification/VelocityServerInfo.java index 6a283e182..e900ab1fb 100644 --- a/Plan/velocity/src/main/java/com/djrapitops/plan/identification/VelocityServerInfo.java +++ b/Plan/velocity/src/main/java/com/djrapitops/plan/identification/VelocityServerInfo.java @@ -27,7 +27,6 @@ import net.playeranalytics.plugin.server.PluginLogger; import javax.inject.Inject; import javax.inject.Singleton; -import java.util.UUID; /** * Manages Server information on the Velocity instance. @@ -108,7 +107,7 @@ public class VelocityServerInfo extends ServerInfo { * @throws EnableException */ private Server createServerObject() { - UUID serverUUID = generateNewUUID(); + ServerUUID serverUUID = generateNewUUID(); String accessAddress = addresses.getAccessAddress().orElseThrow(() -> new EnableException("Velocity can not have '0.0.0.0' or '' as an address. Set up 'Server.IP' setting.")); return new Server(-1, serverUUID, "Velocity", accessAddress, true);