From 1efa9f7f9d09661229a2eb6133676362cd681cca Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 25 May 2018 23:16:28 +0300 Subject: [PATCH] Split server page plugin players table creation into a separate class --- .../plan/data/element/TableContainer.java | 2 +- .../AnalysisPluginsTabContentCreator.java | 5 +- .../html/tables/PlayersTableCreator.java | 71 +----------- .../html/tables/PluginPlayersTable.java | 105 ++++++++++++++++++ 4 files changed, 110 insertions(+), 73 deletions(-) create mode 100644 Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PluginPlayersTable.java diff --git a/Plan/src/main/java/com/djrapitops/plan/data/element/TableContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/element/TableContainer.java index 9a6be1dec..39a47ea6a 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/element/TableContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/element/TableContainer.java @@ -18,7 +18,7 @@ import java.util.List; */ public class TableContainer { - private final String[] header; + protected final String[] header; private List values; private boolean jqueryDatatable; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java index b826c875f..63ab170e7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/structure/AnalysisPluginsTabContentCreator.java @@ -9,7 +9,7 @@ import com.djrapitops.plan.data.element.InspectContainer; import com.djrapitops.plan.data.plugin.PluginData; import com.djrapitops.plan.utilities.analysis.Analysis; import com.djrapitops.plan.utilities.comparators.PluginDataNameComparator; -import com.djrapitops.plan.utilities.html.tables.PlayersTableCreator; +import com.djrapitops.plan.utilities.html.tables.PluginPlayersTable; import java.util.ArrayList; import java.util.List; @@ -73,8 +73,7 @@ public class AnalysisPluginsTabContentCreator { "
" + "

Plugin Data

" + "
" + - "
" + - PlayersTableCreator.createPluginsTable(containers, Analysis.getServerProfile().getPlayers()) + + new PluginPlayersTable(containers, Analysis.getServerProfile().getPlayers()).parseHtml() + "
" + ""; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTableCreator.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTableCreator.java index 030421a9a..69484fd17 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTableCreator.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PlayersTableCreator.java @@ -3,18 +3,14 @@ package com.djrapitops.plan.utilities.html.tables; import com.djrapitops.plan.api.PlanAPI; import com.djrapitops.plan.data.PlayerProfile; import com.djrapitops.plan.data.calculation.ActivityIndex; -import com.djrapitops.plan.data.element.AnalysisContainer; -import com.djrapitops.plan.data.element.TableContainer; -import com.djrapitops.plan.data.plugin.PluginData; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plan.utilities.FormatUtils; import com.djrapitops.plan.utilities.html.Html; import com.djrapitops.plugin.api.utility.log.Log; -import org.apache.commons.lang3.ArrayUtils; -import java.io.Serializable; -import java.util.*; +import java.util.List; +import java.util.UUID; /** * @author Rsl1122 @@ -84,67 +80,4 @@ public class PlayersTableCreator { return html.toString(); } - - public static String createPluginsTable(Map containers, Collection players) { - TreeMap> data = new TreeMap<>(); - for (AnalysisContainer container : containers.values()) { - if (!container.hasPlayerTableValues()) { - continue; - } - data.putAll(container.getPlayerTableValues()); - } - - List header = new ArrayList<>(data.keySet()); - Collections.sort(header); - - int size = header.size(); - TableContainer tableContainer = new TableContainer(true, header.toArray(new String[size])); - - try { - if (players.isEmpty()) { - tableContainer.addRow("No Players"); - throw new IllegalArgumentException("No players"); - } - - Map sortedData = new HashMap<>(); - - for (PlayerProfile profile : players) { - UUID uuid = profile.getUuid(); - String[] playerdata = new String[size]; - for (int i = 0; i < size; i++) { - String label = header.get(i); - Map playerSpecificData = data.getOrDefault(label, new HashMap<>()); - Serializable value = playerSpecificData.get(uuid); - if (value != null) { - playerdata[i] = value.toString(); - } else { - playerdata[i] = "-"; - } - } - sortedData.put(uuid, playerdata); - } - - int i = 0; - int maxPlayers = Settings.MAX_PLAYERS.getNumber(); - if (maxPlayers <= 0) { - maxPlayers = 2000; - } - for (PlayerProfile profile : players) { - if (i >= maxPlayers) { - break; - } - UUID uuid = profile.getUuid(); - String link = Html.LINK_EXTERNAL.parse(PlanAPI.getInstance().getPlayerInspectPageLink(profile.getName()), profile.getName()); - - String[] playerData = FormatUtils.mergeArrays(new String[]{link}, sortedData.getOrDefault(uuid, new String[]{})); - tableContainer.addRow(ArrayUtils.addAll(playerData)); - - i++; - } - } catch (IllegalArgumentException ignored) { - } - return tableContainer.parseHtml().replace(Html.TABLE_SCROLL.parse(), ""); - } - - } diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PluginPlayersTable.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PluginPlayersTable.java new file mode 100644 index 000000000..348c265b5 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/tables/PluginPlayersTable.java @@ -0,0 +1,105 @@ +package com.djrapitops.plan.utilities.html.tables; + +import com.djrapitops.plan.api.PlanAPI; +import com.djrapitops.plan.data.PlayerProfile; +import com.djrapitops.plan.data.element.AnalysisContainer; +import com.djrapitops.plan.data.element.TableContainer; +import com.djrapitops.plan.data.plugin.PluginData; +import com.djrapitops.plan.system.settings.Settings; +import com.djrapitops.plan.utilities.FormatUtils; +import com.djrapitops.plan.utilities.html.Html; +import org.apache.commons.lang3.ArrayUtils; + +import java.io.Serializable; +import java.util.*; + +/** + * TableContainer that creates the html table for per player plugins values. + * + * @author Rsl1122 + */ +public class PluginPlayersTable extends TableContainer { + + private Collection players; + + public PluginPlayersTable(Map containers, Collection players) { + this(getPluginDataSet(containers), players); + } + + private PluginPlayersTable(TreeMap> pluginDataSet, Collection players) { + super(true, getHeaders(pluginDataSet.keySet())); + + this.players = players; + + useJqueryDataTables(); + + if (players.isEmpty()) { + addRow("No Players"); + } else { + Map rows = getRows(pluginDataSet); + addValues(rows); + } + } + + private static String[] getHeaders(Set columnNames) { + List header = new ArrayList<>(columnNames); + Collections.sort(header); + return header.toArray(new String[0]); + } + + private static TreeMap> getPluginDataSet(Map containers) { + TreeMap> data = new TreeMap<>(); + for (AnalysisContainer container : containers.values()) { + if (!container.hasPlayerTableValues()) { + continue; + } + data.putAll(container.getPlayerTableValues()); + } + return data; + } + + private void addValues(Map rows) { + int i = 0; + int maxPlayers = Settings.MAX_PLAYERS.getNumber(); + if (maxPlayers <= 0) { + maxPlayers = 2000; + } + for (PlayerProfile profile : players) { + if (i >= maxPlayers) { + break; + } + UUID uuid = profile.getUuid(); + String link = Html.LINK_EXTERNAL.parse(PlanAPI.getInstance().getPlayerInspectPageLink(profile.getName()), profile.getName()); + + String[] playerData = FormatUtils.mergeArrays(new String[]{link}, rows.getOrDefault(uuid, new String[]{})); + addRow(ArrayUtils.addAll(playerData)); + + i++; + } + } + + private Map getRows(TreeMap> data) { + Map rows = new HashMap<>(); + + int size = header.length - 1; + for (PlayerProfile profile : players) { + UUID uuid = profile.getUuid(); + + String[] row = new String[size]; + for (int i = 0; i < size; i++) { + String label = header[i + 1]; + + Map playerSpecificData = data.getOrDefault(label, new HashMap<>()); + Serializable value = playerSpecificData.get(uuid); + if (value != null) { + row[i] = value.toString(); + } else { + row[i] = "-"; + } + } + rows.put(uuid, row); + } + return rows; + } + +} \ No newline at end of file