Fixes PluginData Playerlist

This commit is contained in:
Rsl1122 2017-11-26 20:06:26 +02:00
parent e60a9a77d7
commit 580daf9796
7 changed files with 102 additions and 16 deletions

View File

@ -48,4 +48,8 @@ public final class AnalysisContainer extends InspectContainer {
public boolean isEmpty() {
return playerTableValues.isEmpty() && super.isEmpty();
}
public boolean hasPlayerTableValues() {
return !playerTableValues.isEmpty();
}
}

View File

@ -76,4 +76,8 @@ public class InspectContainer {
public boolean isEmpty() {
return values.isEmpty() && html.isEmpty() && tables.isEmpty();
}
public final boolean hasValues() {
return !values.isEmpty();
}
}

View File

@ -69,7 +69,7 @@ public abstract class PluginData {
}
public final String getWithIcon(String text, String icon) {
return getWithIcon(text, icon, "black");
return getWithIcon(text, icon, "");
}
public final String getWithIcon(String text, String icon, String color) {

View File

@ -4,6 +4,7 @@
*/
package main.java.com.djrapitops.plan.data.additional;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.html.Html;
import java.io.Serializable;
@ -32,6 +33,11 @@ public final class TableContainer {
values = new ArrayList<>();
}
public TableContainer(boolean players, String... header) {
this.header = FormatUtils.mergeArrays(new String[]{Html.FONT_AWESOME_ICON.parse("user") + " Player"}, header);
values = new ArrayList<>();
}
public void addRow(Serializable... values) {
this.values.add(values);
}
@ -45,11 +51,10 @@ public final class TableContainer {
private String parseBody() {
StringBuilder body = new StringBuilder();
if (values.isEmpty()) {
addRow("No Data");
}
body.append("<tbody>");
for (Serializable[] row : values) {
int maxIndex = row.length - 1;
body.append("<tr>");
@ -64,7 +69,6 @@ public final class TableContainer {
}
body.append("</tr>");
}
body.append("</tbody>");
return Html.TABLE_BODY.parse(body.toString());
}

View File

@ -6,7 +6,9 @@ package main.java.com.djrapitops.plan.utilities.html.structure;
import main.java.com.djrapitops.plan.data.additional.AnalysisContainer;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.analysis.Analysis;
import main.java.com.djrapitops.plan.utilities.comparators.PluginDataNameComparator;
import main.java.com.djrapitops.plan.utilities.html.tables.PlayersTableCreator;
import java.util.ArrayList;
import java.util.List;
@ -33,7 +35,7 @@ public class AnalysisPluginsTabContentCreator {
generalTab.append("<div class=\"tab\"><div class=\"row clearfix\">");
boolean hadOtherThanTabs = false;
boolean hasGeneralBoxes = false;
for (PluginData pluginData : order) {
AnalysisContainer container = containers.get(pluginData);
@ -45,29 +47,41 @@ public class AnalysisPluginsTabContentCreator {
case WHOLE:
if (!container.hasOnlyValues()) {
appendWhole(pluginData, container, generalTab);
hadOtherThanTabs = true;
hasGeneralBoxes = true;
break;
}
case TWO_THIRDS:
if (!container.hasOnlyValues()) {
appendTwoThirds(pluginData, container, generalTab);
hadOtherThanTabs = true;
hasGeneralBoxes = true;
break;
}
case THIRD:
default:
appendThird(pluginData, container, generalTab);
hadOtherThanTabs = true;
hasGeneralBoxes = true;
break;
}
}
generalTab.append("</div></div>");
String playerListTab = "<div class=\"tab\">" +
"<div class=\"row clearfix\">" +
"<div class=\"col-lg-12 col-md-12 col-sm-12 col-xs-12\">" +
"<div class=\"card\">" +
"<div class=\"header\"><h2><i class=\"fa fa-users\"></i> Plugin Data</h2></div>" +
"<div class=\"body\">" +
"<div class=\"table-responsive\">" +
PlayersTableCreator.createPluginsTable(containers, Analysis.getServerProfile().getPlayers()) +
"</div></div></div>" +
"</div></div></div>";
return new String[]{
hadOtherThanTabs ? "<li><a class=\"nav-button\" href=\"javascript:void(0)\">General</a></li>" + nav.toString() : nav.toString(),
hadOtherThanTabs ? generalTab.toString() + otherTabs.toString() : otherTabs.toString()
(hasGeneralBoxes ? "<li><a class=\"nav-button\" href=\"javascript:void(0)\">General</a></li>" : "")
+ "<li><a class=\"nav-button\" href=\"javascript:void(0)\">Player Data</a></li>" + nav.toString(),
(hasGeneralBoxes ? generalTab.toString() : "") + playerListTab + otherTabs.toString()
};
}

View File

@ -4,13 +4,16 @@ import com.djrapitops.plugin.api.utility.log.Log;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.PlayerProfile;
import main.java.com.djrapitops.plan.data.additional.AnalysisContainer;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.data.additional.TableContainer;
import main.java.com.djrapitops.plan.utilities.FormatUtils;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
import main.java.com.djrapitops.plan.utilities.comparators.PlayerProfileLastPlayedComparator;
import main.java.com.djrapitops.plan.utilities.html.Html;
import org.apache.commons.lang3.ArrayUtils;
import java.util.List;
import java.util.UUID;
import java.io.Serializable;
import java.util.*;
/**
* @author Rsl1122
@ -29,8 +32,6 @@ public class PlayersTableCreator {
return Html.TABLELINE_PLAYERS.parse("<b>No Players</b>", "", "", "", "", "", "", "", "", "");
}
players.sort(new PlayerProfileLastPlayedComparator());
StringBuilder html = new StringBuilder();
long now = MiscUtils.getTime();
@ -73,4 +74,63 @@ public class PlayersTableCreator {
return html.toString();
}
public static String createPluginsTable(Map<PluginData, AnalysisContainer> containers, List<PlayerProfile> players) {
TreeMap<String, Map<UUID, ? extends Serializable>> data = new TreeMap<>();
for (AnalysisContainer container : containers.values()) {
if (!container.hasPlayerTableValues()) {
continue;
}
data.putAll(container.getPlayerTableValues());
}
List<String> 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("<b>No Players</b>");
throw new IllegalArgumentException("No players");
}
Map<UUID, String[]> 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<UUID, ? extends Serializable> 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;
for (PlayerProfile profile : players) {
if (i >= 2000) {
break;
}
UUID uuid = profile.getUuid();
String link = Html.LINK_EXTERNAL.parse(Plan.getPlanAPI().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.parse(), "<table class=\"table table-bordered table-striped table-hover player-table dataTable\">");
}
}

View File

@ -63,7 +63,7 @@ public class ViaVersionData extends PluginData {
String versionS = getWithIcon("Version", "signal");
String membersS = getWithIcon("Users", "users");
TableContainer versionTable = new TableContainer(versionS, membersS);
versionTable.setColor("green");
versionTable.setColor("light-green");
Map<String, Integer> usersPerVersion = getUsersPerVersion(versions);
for (Map.Entry<String, Integer> entry : usersPerVersion.entrySet()) {
versionTable.addRow(entry.getKey(), entry.getValue());