diff --git a/Plan/src/main/java/com/djrapitops/plan/data/plugin/HookHandler.java b/Plan/src/main/java/com/djrapitops/plan/data/plugin/HookHandler.java
index d6e3c3e45..ed0f3b7d7 100644
--- a/Plan/src/main/java/com/djrapitops/plan/data/plugin/HookHandler.java
+++ b/Plan/src/main/java/com/djrapitops/plan/data/plugin/HookHandler.java
@@ -1,11 +1,11 @@
package com.djrapitops.plan.data.plugin;
import com.djrapitops.plan.Plan;
+import com.djrapitops.plan.data.element.InspectContainer;
import com.djrapitops.plugin.StaticHolder;
import com.djrapitops.plugin.api.utility.log.Log;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
/**
* Class responsible for hooking to other plugins and managing the %plugins%
@@ -35,6 +35,10 @@ public class HookHandler {
}
}
+ public static HookHandler getInstance() {
+ return null;// TODO
+ }
+
/**
* Adds a new PluginData source to the list.
*
@@ -72,4 +76,23 @@ public class HookHandler {
public List getAdditionalDataSources() {
return additionalDataSources;
}
+
+ public Map getInspectContainersFor(UUID uuid) {
+ List plugins = getAdditionalDataSources();
+ Map containers = new HashMap<>();
+ for (PluginData pluginData : plugins) {
+ InspectContainer inspectContainer = new InspectContainer();
+ try {
+ InspectContainer container = pluginData.getPlayerData(uuid, inspectContainer);
+ if (container != null && !container.isEmpty()) {
+ containers.put(pluginData, container);
+ }
+ } catch (Exception e) {
+ String sourcePlugin = pluginData.getSourcePlugin();
+ Log.error("PluginData caused exception: " + sourcePlugin);
+ Log.toLog(this.getClass().getName() + " " + sourcePlugin, e);
+ }
+ }
+ return containers;
+ }
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/TransferOperations.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/TransferOperations.java
index 84201fb98..c385f693a 100644
--- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/TransferOperations.java
+++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/TransferOperations.java
@@ -11,7 +11,7 @@ import java.util.UUID;
/**
* Operations for transferring data via Database to another server.
- *
+ *
* Receiving server has to be using the same database.
*
* @author Rsl1122
@@ -26,6 +26,8 @@ public interface TransferOperations {
void storeNetworkPageContent(UUID serverUUID, String encodedHtml) throws DBException;
+ void storePlayerPluginsTab(UUID player, UUID serverUUID, String encodedHtml) throws DBException;
+
// Get
Map getEncodedPlayerHtml() throws DBException;
@@ -35,4 +37,6 @@ public interface TransferOperations {
Map getEncodedServerHtml() throws DBException;
UUID getServerPlayerIsOnline(UUID playerUUID) throws DBException;
+
+ Map getEncodedPlayerPluginsTabs(UUID playerUUID) throws DBException;
}
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/request/CacheInspectPluginsTabRequest.java b/Plan/src/main/java/com/djrapitops/plan/system/info/request/CacheInspectPluginsTabRequest.java
new file mode 100644
index 000000000..2f81dc2c6
--- /dev/null
+++ b/Plan/src/main/java/com/djrapitops/plan/system/info/request/CacheInspectPluginsTabRequest.java
@@ -0,0 +1,90 @@
+/*
+ * Licence is provided in the jar as license.yml also here:
+ * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
+ */
+package com.djrapitops.plan.system.info.request;
+
+import com.djrapitops.plan.api.exceptions.connection.BadRequestException;
+import com.djrapitops.plan.api.exceptions.connection.TransferDatabaseException;
+import com.djrapitops.plan.api.exceptions.connection.WebException;
+import com.djrapitops.plan.api.exceptions.database.DBException;
+import com.djrapitops.plan.system.database.databases.Database;
+import com.djrapitops.plan.system.info.server.ServerInfo;
+import com.djrapitops.plan.system.webserver.pages.DefaultResponses;
+import com.djrapitops.plan.system.webserver.response.Response;
+import com.djrapitops.plan.system.webserver.response.cache.PageId;
+import com.djrapitops.plan.system.webserver.response.cache.ResponseCache;
+import com.djrapitops.plan.system.webserver.response.pages.parts.InspectPagePluginsContent;
+import com.djrapitops.plan.utilities.Base64Util;
+import com.djrapitops.plan.utilities.NullCheck;
+import com.djrapitops.plugin.utilities.Verify;
+
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * InfoRequest used to place HTML of player's Plugins Tab to ResponseCache.
+ *
+ * @author Rsl1122
+ */
+public class CacheInspectPluginsTabRequest extends InfoRequestWithVariables implements CacheRequest {
+
+ private static final String SPLIT = ";;SPLIT;;";
+ private final UUID player;
+ private final String navAndHtml;
+
+ private CacheInspectPluginsTabRequest() {
+ player = null;
+ navAndHtml = null;
+ }
+
+ public CacheInspectPluginsTabRequest(UUID player, String nav, String html) {
+ Verify.nullCheck(player, nav);
+ variables.put("player", player.toString());
+ this.player = player;
+ this.navAndHtml = nav + SPLIT + html;
+ }
+
+ public static CacheInspectPluginsTabRequest createHandler() {
+ return new CacheInspectPluginsTabRequest();
+ }
+
+ @Override
+ public void placeDataToDatabase() throws WebException {
+ Verify.nullCheck(player, navAndHtml);
+
+ String encodedHtml = Base64Util.encode(navAndHtml);
+ try {
+ Database.getActive().transfer().storePlayerPluginsTab(player, ServerInfo.getServerUUID(), encodedHtml);
+ } catch (DBException e) {
+ throw new TransferDatabaseException(e);
+ }
+ }
+
+ @Override
+ public Response handleRequest(Map variables) throws WebException {
+ // Available variables: sender, player
+
+ String player = variables.get("player");
+ NullCheck.check(player, new BadRequestException("Player UUID 'player' variable not supplied."));
+
+ UUID uuid = UUID.fromString(player);
+
+ try {
+ Map pages = Database.getActive().transfer().getEncodedPlayerPluginsTabs(uuid);
+
+ InspectPagePluginsContent pluginsTab = (InspectPagePluginsContent)
+ ResponseCache.loadResponse(PageId.PLAYER_PLUGINS_TAB.of(uuid), InspectPagePluginsContent::new);
+
+ for (Map.Entry entry : pages.entrySet()) {
+ UUID serverUUID = entry.getKey();
+ String[] html = Base64Util.decode(entry.getValue()).split(SPLIT);
+
+ pluginsTab.addTab(serverUUID, html[0], html[1]);
+ }
+ } catch (DBException e) {
+ throw new TransferDatabaseException(e);
+ }
+ return DefaultResponses.SUCCESS.get();
+ }
+}
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateInspectPluginsTabRequest.java b/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateInspectPluginsTabRequest.java
new file mode 100644
index 000000000..e6557a995
--- /dev/null
+++ b/Plan/src/main/java/com/djrapitops/plan/system/info/request/GenerateInspectPluginsTabRequest.java
@@ -0,0 +1,72 @@
+/*
+ * Licence is provided in the jar as license.yml also here:
+ * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
+ */
+package com.djrapitops.plan.system.info.request;
+
+import com.djrapitops.plan.api.exceptions.connection.BadRequestException;
+import com.djrapitops.plan.api.exceptions.connection.WebException;
+import com.djrapitops.plan.system.info.InfoSystem;
+import com.djrapitops.plan.system.webserver.pages.DefaultResponses;
+import com.djrapitops.plan.system.webserver.response.Response;
+import com.djrapitops.plan.system.webserver.response.cache.PageId;
+import com.djrapitops.plan.system.webserver.response.cache.ResponseCache;
+import com.djrapitops.plan.system.webserver.response.pages.parts.InspectPagePluginsContent;
+import com.djrapitops.plan.utilities.NullCheck;
+import com.djrapitops.plugin.utilities.Verify;
+
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * InfoRequest for Generating Inspect page plugins tab on receiving WebServer.
+ *
+ * @author Rsl1122
+ */
+public class GenerateInspectPluginsTabRequest extends InfoRequestWithVariables implements GenerateRequest {
+
+ private final UUID playerUUID;
+
+ private GenerateInspectPluginsTabRequest() {
+ playerUUID = null;
+ }
+
+ public GenerateInspectPluginsTabRequest(UUID uuid) {
+ Verify.nullCheck(uuid);
+ playerUUID = uuid;
+ variables.put("player", uuid.toString());
+ }
+
+ public static GenerateInspectPluginsTabRequest createHandler() {
+ return new GenerateInspectPluginsTabRequest();
+ }
+
+ @Override
+ public void placeDataToDatabase() {
+ // No data required in a Generate request
+ }
+
+ @Override
+ public Response handleRequest(Map variables) throws WebException {
+ // Available variables: sender, player
+
+ String player = variables.get("player");
+ NullCheck.check(player, new BadRequestException("Player UUID 'player' variable not supplied."));
+
+ UUID uuid = UUID.fromString(player);
+ String[] navAndhtml = getNavAndHtml(uuid);
+
+ InfoSystem.getInstance().sendRequest(new CacheInspectPluginsTabRequest(uuid, navAndhtml[0], navAndhtml[1]));
+
+ return DefaultResponses.SUCCESS.get();
+ }
+
+ private String[] getNavAndHtml(UUID uuid) {
+ return ((InspectPagePluginsContent) ResponseCache.loadResponse(PageId.PLAYER_PLUGINS_TAB.of(uuid),
+ InspectPagePluginsContent::new)).getContents();
+ }
+
+ public UUID getPlayerUUID() {
+ return playerUUID;
+ }
+}
\ No newline at end of file
diff --git a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/parts/InspectPagePluginsContent.java b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/parts/InspectPagePluginsContent.java
index 691711f6a..bc976bed0 100644
--- a/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/parts/InspectPagePluginsContent.java
+++ b/Plan/src/main/java/com/djrapitops/plan/system/webserver/response/pages/parts/InspectPagePluginsContent.java
@@ -4,8 +4,14 @@
*/
package com.djrapitops.plan.system.webserver.response.pages.parts;
+import com.djrapitops.plan.data.element.InspectContainer;
+import com.djrapitops.plan.data.plugin.HookHandler;
+import com.djrapitops.plan.data.plugin.PluginData;
+import com.djrapitops.plan.system.info.server.ServerInfo;
import com.djrapitops.plan.system.webserver.response.Response;
+import com.djrapitops.plan.utilities.comparators.PluginDataNameComparator;
import com.djrapitops.plan.utilities.html.HtmlStructure;
+import com.djrapitops.plan.utilities.html.structure.AnalysisPluginsTabContentCreator;
import java.util.*;
@@ -26,11 +32,37 @@ public class InspectPagePluginsContent extends Response {
}
public InspectPagePluginsContent(UUID serverUUID, String nav, String html) {
- pluginsTab = new HashMap<>();
-
+ this();
addTab(serverUUID, nav, html);
}
+ public static InspectPagePluginsContent generateForThisServer(UUID uuid) {
+ HookHandler hookHandler = HookHandler.getInstance();
+ Map containers = hookHandler.getInspectContainersFor(uuid);
+ String serverName = ServerInfo.getServerName();
+ String actualServerName = serverName.equals("Plan") ? "Server " + ServerInfo.getServerID() : serverName;
+ if (containers.isEmpty()) {
+ new InspectPagePluginsContent(uuid, "" + actualServerName + "(No Data)", "");
+ }
+
+ String nav = "" + actualServerName + "";
+
+ StringBuilder tab = new StringBuilder();
+ tab.append("");
+
+ List
order = new ArrayList<>(containers.keySet());
+ order.sort(new PluginDataNameComparator());
+
+ for (PluginData pluginData : order) {
+ InspectContainer container = containers.get(pluginData);
+ AnalysisPluginsTabContentCreator.appendThird(pluginData, container, tab);
+ }
+
+ tab.append(" ");
+
+ return new InspectPagePluginsContent(ServerInfo.getServerUUID(), nav, tab.toString());
+ }
+
public void addTab(UUID serverUUID, String nav, String html) {
pluginsTab.put(serverUUID, new String[]{nav, html});
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/systems/info/BukkitInformationManager.java b/Plan/src/main/java/com/djrapitops/plan/systems/info/BukkitInformationManager.java
index fd65773d8..74a95f9fc 100644
--- a/Plan/src/main/java/com/djrapitops/plan/systems/info/BukkitInformationManager.java
+++ b/Plan/src/main/java/com/djrapitops/plan/systems/info/BukkitInformationManager.java
@@ -12,9 +12,6 @@ import com.djrapitops.plan.api.exceptions.connection.WebException;
import com.djrapitops.plan.api.exceptions.connection.WebFailException;
import com.djrapitops.plan.command.commands.AnalyzeCommand;
import com.djrapitops.plan.data.AnalysisData;
-import com.djrapitops.plan.data.element.InspectContainer;
-import com.djrapitops.plan.data.plugin.HookHandler;
-import com.djrapitops.plan.data.plugin.PluginData;
import com.djrapitops.plan.settings.theme.Theme;
import com.djrapitops.plan.system.cache.DataCache;
import com.djrapitops.plan.system.processing.processors.Processor;
@@ -31,6 +28,7 @@ import com.djrapitops.plan.system.webserver.response.errors.InternalErrorRespons
import com.djrapitops.plan.system.webserver.response.errors.NotFoundResponse;
import com.djrapitops.plan.system.webserver.response.pages.AnalysisPageResponse;
import com.djrapitops.plan.system.webserver.response.pages.InspectPageResponse;
+import com.djrapitops.plan.system.webserver.response.pages.parts.InspectPagePluginsContent;
import com.djrapitops.plan.system.webserver.webapi.WebAPIManager;
import com.djrapitops.plan.system.webserver.webapi.bukkit.AnalysisReadyWebAPI;
import com.djrapitops.plan.system.webserver.webapi.bukkit.AnalyzeWebAPI;
@@ -40,7 +38,6 @@ import com.djrapitops.plan.utilities.MiscUtils;
import com.djrapitops.plan.utilities.analysis.Analysis;
import com.djrapitops.plan.utilities.file.export.HtmlExport;
import com.djrapitops.plan.utilities.html.HtmlStructure;
-import com.djrapitops.plan.utilities.html.structure.InspectPluginsTabContentCreator;
import com.djrapitops.plugin.api.utility.log.ErrorLogger;
import com.djrapitops.plugin.api.utility.log.Log;
@@ -162,24 +159,7 @@ public class BukkitInformationManager extends InformationManager {
cacheInspectPluginsTab(uuid, origin);
}
} else {
- HookHandler hookHandler = plugin.getHookHandler();
- List plugins = hookHandler.getAdditionalDataSources();
- Map containers = new HashMap<>();
- for (PluginData pluginData : plugins) {
- InspectContainer inspectContainer = new InspectContainer();
- try {
- InspectContainer container = pluginData.getPlayerData(uuid, inspectContainer);
- if (container != null && !container.isEmpty()) {
- containers.put(pluginData, container);
- }
- } catch (Exception e) {
- String sourcePlugin = pluginData.getSourcePlugin();
- Log.error("PluginData caused exception: " + sourcePlugin);
- Log.toLog(this.getClass().getName() + " " + sourcePlugin, e);
- }
- }
-
- cacheInspectPluginsTab(uuid, InspectPluginsTabContentCreator.createContent(containers));
+ cacheInspectPluginsTab(uuid, InspectPagePluginsContent.generateForThisServer(uuid).getContents());
}
}
diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/InspectPluginsTabContentCreator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/InspectPluginsTabContentCreator.java
deleted file mode 100644
index 46f9f383b..000000000
--- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/InspectPluginsTabContentCreator.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licence is provided in the jar as license.yml also here:
- * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
- */
-package com.djrapitops.plan.utilities.html.structure;
-
-import com.djrapitops.plan.Plan;
-import com.djrapitops.plan.data.element.InspectContainer;
-import com.djrapitops.plan.data.plugin.PluginData;
-import com.djrapitops.plan.system.info.server.BukkitServerInfo;
-import com.djrapitops.plan.system.info.server.ServerInfo;
-import com.djrapitops.plan.utilities.comparators.PluginDataNameComparator;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * HTML utility class for parsing HTML for Inspect page plugins tabs.
- *
- * @author Rsl1122
- */
-public class InspectPluginsTabContentCreator {
-
- public static String[] createContent(Map containers) {
- BukkitServerInfo serverInfoManager = Plan.getInstance().getServerInfoManager();
- String serverName = ServerInfo.getServerName();
- String actualServerName = serverName.equals("Plan") ? "Server " + ServerInfo.getServerID() : serverName;
-
- if (containers.isEmpty()) {
- return new String[]{"" + actualServerName + "(No Data)",
- ""};
- }
-
- String nav = "" + actualServerName + "";
-
- StringBuilder tab = new StringBuilder();
- tab.append("");
-
- List
order = new ArrayList<>(containers.keySet());
- order.sort(new PluginDataNameComparator());
-
- for (PluginData pluginData : order) {
- InspectContainer container = containers.get(pluginData);
- AnalysisPluginsTabContentCreator.appendThird(pluginData, container, tab);
- }
-
- tab.append(" ");
-
- return new String[]{nav, tab.toString()};
- }
-
-}
\ No newline at end of file