Improved performance of some PluginData objects

Fixed PluginConfigSectionHandler not creating new Enabled section properly for Factions & Towny
This commit is contained in:
Rsl1122 2017-11-26 18:39:55 +02:00
parent b897e3ac29
commit 17d15cfcd9
16 changed files with 104 additions and 61 deletions

View File

@ -43,4 +43,9 @@ public final class AnalysisContainer extends InspectContainer {
public void addPlayerTableValues(String columnName, Map<UUID, ? extends Serializable> values) {
playerTableValues.put(columnName, values);
}
@Override
public boolean isEmpty() {
return playerTableValues.isEmpty() && super.isEmpty();
}
}

View File

@ -49,14 +49,15 @@ public class InspectContainer {
public final String parseHtml() {
StringBuilder html = new StringBuilder();
html.append("<div class=\"body\">");
for (Map.Entry<String, String> entry : values.entrySet()) {
html.append("<p>").append(entry.getKey()).append(": ").append(entry.getValue()).append("</p>");
if (!values.isEmpty()) {
html.append("<div class=\"body\">");
for (Map.Entry<String, String> entry : values.entrySet()) {
html.append("<p>").append(entry.getKey()).append(": ").append(entry.getValue()).append("</p>");
}
html.append("</div>");
}
html.append("</div>");
for (Map.Entry<String, String> entry : this.html.entrySet()) {
html.append(entry.getValue());
}
@ -72,7 +73,7 @@ public class InspectContainer {
return html.isEmpty() && tables.isEmpty();
}
public final boolean isEmpty() {
public boolean isEmpty() {
return values.isEmpty() && html.isEmpty() && tables.isEmpty();
}
}

View File

@ -24,7 +24,10 @@ public class PluginConfigSectionHandler {
public boolean hasSection(PluginData dataSource) {
ConfigNode section = getPluginsSection();
String pluginName = dataSource.getSourcePlugin();
return section.getChildren().containsKey(pluginName);
if (!section.getChildren().containsKey(pluginName)) {
return false;
}
return section.getConfigNode(pluginName).getChildren().containsKey("Enabled");
}
private ConfigNode getPluginsSection() {

View File

@ -74,11 +74,11 @@ public final class TableContainer {
}
public String parseHeader() {
StringBuilder header = new StringBuilder("<thead" + (color != null ? " bg-" + color : "") + "><tr>");
StringBuilder header = new StringBuilder("<thead" + (color != null ? " class=\"bg-" + color + "\"" : "") + "><tr>");
for (String title : this.header) {
header.append("<th>").append(title).append("</th>");
}
header.append("</tr></thead>");
return Html.TABLE_HEAD.parse(header.toString());
return header.toString();
}
}

View File

@ -25,6 +25,7 @@ public class DataCache extends SessionCache {
private static final Map<UUID, Integer> firstSessionInformation = new HashMap<>();
private final Database db;
private final Map<UUID, String> playerNames;
private final Map<String, UUID> uuids;
private final Map<UUID, String> displayNames;
/**
@ -38,6 +39,7 @@ public class DataCache extends SessionCache {
playerNames = new HashMap<>();
displayNames = new HashMap<>();
uuids = new HashMap<>();
}
/**
@ -48,13 +50,22 @@ public class DataCache extends SessionCache {
* @param displayName DisplayName of the player.
*/
public void updateNames(UUID uuid, String playerName, String displayName) {
playerNames.put(uuid, playerName);
displayNames.put(uuid, displayName);
if (playerName != null) {
playerNames.put(uuid, playerName);
uuids.put(playerName, uuid);
}
if (displayName != null) {
displayNames.put(uuid, displayName);
}
}
public void cacheSavedNames() {
try {
playerNames.putAll(db.getUsersTable().getPlayerNames());
Map<UUID, String> playerNames = db.getUsersTable().getPlayerNames();
this.playerNames.putAll(playerNames);
for (Map.Entry<UUID, String> entry : playerNames.entrySet()) {
uuids.put(entry.getValue(), entry.getKey());
}
} catch (SQLException e) {
Log.toLog(this.getClass().getName(), e);
}
@ -144,4 +155,8 @@ public class DataCache extends SessionCache {
public Map<UUID, Integer> getFirstSessionMsgCounts() {
return firstSessionInformation;
}
public UUID getUUIDof(String playerName) {
return uuids.get(playerName);
}
}

View File

@ -8,6 +8,7 @@ import com.djrapitops.plugin.task.RunnableFactory;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.AnalysisData;
import main.java.com.djrapitops.plan.data.PlayerProfile;
import main.java.com.djrapitops.plan.data.ServerProfile;
import main.java.com.djrapitops.plan.data.additional.AnalysisContainer;
import main.java.com.djrapitops.plan.data.additional.PluginData;
@ -108,6 +109,11 @@ public class Analysis {
Benchmark.start("Fetch Phase");
ServerProfile profile = db.getServerProfile(Plan.getServerUUID());
serverProfile = profile;
for (PlayerProfile player : profile.getPlayers()) {
plugin.getDataCache().updateNames(player.getUuid(), player.getName(), null);
}
long fetchPhaseLength = Benchmark.stop("Analysis", "Fetch Phase");
// TODO BanData (PluginData) effects

View File

@ -21,7 +21,7 @@ public class AnalysisPluginsTabContentCreator {
public static String[] createContent(Map<PluginData, AnalysisContainer> containers) {
if (containers.isEmpty()) {
return new String[]{"<li><a>No Compatible Plugins</a></li>", ""};
return new String[]{"<li><a>No Data</a></li>", ""};
}
List<PluginData> order = new ArrayList<>(containers.keySet());
@ -77,9 +77,9 @@ public class AnalysisPluginsTabContentCreator {
"<div class=\"header\">" +
"<h2>")
.append(pluginData.parsePluginIcon()).append(" ").append(pluginData.getSourcePlugin())
.append("</h2></div>").append("<div class=\"body\">")
.append("</h2></div>")
.append(container.parseHtml())
.append("</div></div></div>");
.append("</div></div>");
}
private static void appendTwoThirds(PluginData pluginData, AnalysisContainer container, StringBuilder generalTab) {
@ -88,9 +88,9 @@ public class AnalysisPluginsTabContentCreator {
"<div class=\"header\">" +
"<h2>")
.append(pluginData.parsePluginIcon()).append(" ").append(pluginData.getSourcePlugin())
.append("</h2></div>").append("<div class=\"body\">")
.append("</h2></div>")
.append(container.parseHtml())
.append("</div></div></div>");
.append("</div></div>");
}
private static void appendWhole(PluginData pluginData, AnalysisContainer container, StringBuilder generalTab) {

View File

@ -5,8 +5,10 @@
*/
package main.java.com.djrapitops.plan.utilities.uuid;
import com.djrapitops.plugin.api.Check;
import com.djrapitops.plugin.api.utility.UUIDFetcher;
import com.djrapitops.plugin.api.utility.log.Log;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.database.Database;
import main.java.com.djrapitops.plan.utilities.MiscUtils;
@ -48,6 +50,12 @@ public class UUIDUtility {
*/
public static UUID getUUIDOf(String playerName, Database db) {
UUID uuid = null;
if (Check.isBukkitAvailable()) {
UUID uuidOf = Plan.getInstance().getDataCache().getUUIDof(playerName);
if (uuidOf != null) {
return uuidOf;
}
}
try {
uuid = db.getUsersTable().getUuidOf(playerName);
} catch (SQLException e) {

View File

@ -60,7 +60,7 @@ public class AdvancedAchievementsData extends PluginData {
}
private long getTotal(Map<UUID, Integer> totalAchievements) {
return MathUtils.sumLong(totalAchievements.values().stream().map(i -> i));
return MathUtils.sumLong(totalAchievements.values().stream().map(i -> (long) i));
}
private void refreshTotalAchievements() {

View File

@ -10,10 +10,7 @@ import main.java.com.djrapitops.plan.data.additional.ContainerSize;
import main.java.com.djrapitops.plan.data.additional.InspectContainer;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
@ -57,12 +54,6 @@ public class ASkyBlockData extends PluginData {
analysisContainer.addValue(getWithIcon("Island World", "map-o", "green"), islandWorldName);
analysisContainer.addValue(getWithIcon("Island Count", "street-view", "green"), islandCount);
Map<UUID, Serializable> islandLevels = new HashMap<>();
for (UUID uuid : uuids) {
islandLevels.put(uuid, api.hasIsland(uuid) ? api.getIslandLevel(uuid) : "-");
}
analysisContainer.addPlayerTableValues(getWithIcon("Island Level", "street-view"), islandLevels);
return analysisContainer;
}
}

View File

@ -6,6 +6,7 @@ package com.djrapitops.pluginbridge.plan.factions;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MPlayer;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.PlayerProfile;
import main.java.com.djrapitops.plan.data.ServerProfile;
import main.java.com.djrapitops.plan.data.Session;
@ -42,10 +43,15 @@ public class FactionAccordionCreator {
int landCount = faction.getLandCount();
Set<UUID> members = new HashSet<>();
for (MPlayer mPlayer : faction.getMPlayers()) {
members.add(mPlayer.getUuid());
List<MPlayer> mPlayers = faction.getMPlayers();
int membersNum = mPlayers.size();
for (MPlayer mPlayer : mPlayers) {
UUID uuid = Plan.getInstance().getDataCache().getUUIDof(mPlayer.getName());
if (uuid != null) {
members.add(uuid);
}
}
int membersNum = members.size();
List<PlayerProfile> memberProfiles = players.stream().filter(p -> members.contains(p.getUniqueId())).collect(Collectors.toList());

View File

@ -54,21 +54,23 @@ public class FactionsData extends PluginData {
analysisContainer.addValue(getWithIcon("Number of Factions", "flag", "deep-purple"), factions.size());
analysisContainer.addHtml("factionAccordion", FactionAccordionCreator.createAccordion(factions));
if (!factions.isEmpty()) {
analysisContainer.addHtml("factionAccordion", FactionAccordionCreator.createAccordion(factions));
Map<UUID, String> userFactions = new HashMap<>();
for (UUID uuid : uuids) {
MPlayer mPlayer = MPlayer.get(uuid);
Map<UUID, String> userFactions = new HashMap<>();
for (UUID uuid : uuids) {
MPlayer mPlayer = MPlayer.get(uuid);
if (mPlayer.hasFaction()) {
Faction faction = mPlayer.getFaction();
String factionName = faction.isNone() ? "-" : faction.getName();
if (mPlayer.hasFaction()) {
Faction faction = mPlayer.getFaction();
String factionName = faction.isNone() ? "-" : faction.getName();
userFactions.put(uuid, factionName);
userFactions.put(uuid, factionName);
}
}
}
analysisContainer.addPlayerTableValues(getWithIcon("Faction", "flag"), userFactions);
analysisContainer.addPlayerTableValues(getWithIcon("Faction", "flag"), userFactions);
}
return analysisContainer;
}

View File

@ -45,7 +45,7 @@ public class GriefPreventionData extends PluginData {
PlayerData data = dataStore.getPlayerData(uuid);
int blocks = data.getAccruedClaimBlocks() + data.getBonusClaimBlocks() + dataStore.getGroupBonusBlocks(uuid);
String softMuted = dataStore.isSoftMuted(uuid) ? "Yes" : "No";
long totalArea = MathUtils.sumLong(claims.values().stream().map(i -> i));
long totalArea = MathUtils.sumLong(claims.values().stream().map(i -> (long) i));
inspectContainer.addValue(getWithIcon("SoftMuted", "bell-slash-o", "deep-orange"), softMuted);
inspectContainer.addValue(getWithIcon("Claims", "map-marker", "blue-grey"), claims.size());
@ -68,7 +68,7 @@ public class GriefPreventionData extends PluginData {
.filter(Objects::nonNull)
.collect(Collectors.toMap(claim -> claim.ownerID, Claim::getArea));
long totalArea = MathUtils.sumLong(area.values().stream().map(i -> i));
long totalArea = MathUtils.sumLong(area.values().stream().map(i -> (long) i));
analysisContainer.addValue(getWithIcon("Total Claimed Area", "map-o", "blue-grey"), totalArea);
analysisContainer.addPlayerTableValues(getWithIcon("Claimed Area", "map-o"), area);

View File

@ -8,12 +8,12 @@ import com.palmergames.bukkit.towny.exceptions.TownyException;
import com.palmergames.bukkit.towny.object.Coord;
import com.palmergames.bukkit.towny.object.Resident;
import com.palmergames.bukkit.towny.object.Town;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.data.PlayerProfile;
import main.java.com.djrapitops.plan.data.ServerProfile;
import main.java.com.djrapitops.plan.data.Session;
import main.java.com.djrapitops.plan.utilities.analysis.Analysis;
import main.java.com.djrapitops.plan.utilities.html.HtmlStructure;
import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility;
import java.util.*;
import java.util.stream.Collectors;
@ -48,7 +48,10 @@ public class TownAccordionCreator {
Set<UUID> members = new HashSet<>();
for (Resident resident : residents) {
members.add(UUIDUtility.getUUIDOf(resident.getName()));
UUID uuid = Plan.getInstance().getDataCache().getUUIDof(resident.getName());
if (uuid != null) {
members.add(uuid);
}
}
List<PlayerProfile> memberProfiles = players.stream().filter(p -> members.contains(p.getUniqueId())).collect(Collectors.toList());

View File

@ -4,6 +4,7 @@
*/
package com.djrapitops.pluginbridge.plan.towny;
import com.djrapitops.plugin.utilities.Verify;
import com.palmergames.bukkit.towny.exceptions.TownyException;
import com.palmergames.bukkit.towny.object.Coord;
import com.palmergames.bukkit.towny.object.Resident;
@ -16,7 +17,6 @@ import main.java.com.djrapitops.plan.data.additional.ContainerSize;
import main.java.com.djrapitops.plan.data.additional.InspectContainer;
import main.java.com.djrapitops.plan.data.additional.PluginData;
import main.java.com.djrapitops.plan.utilities.html.Html;
import main.java.com.djrapitops.plan.utilities.uuid.UUIDUtility;
import java.util.*;
import java.util.stream.Collectors;
@ -70,17 +70,21 @@ public class TownyData extends PluginData {
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) throws Exception {
List<Town> towns = getTopTowns();
Map<UUID, String> userTowns = new HashMap<>();
for (Town town : towns) {
String townName = town.getName();
town.getResidents().stream()
.map(Resident::getName)
.map(UUIDUtility::getUUIDOf)
.forEach(uuid -> userTowns.put(uuid, townName));
}
analysisContainer.addPlayerTableValues(getWithIcon("Town", "bank"), userTowns);
if (!towns.isEmpty()) {
analysisContainer.addValue(getWithIcon("Number of Towns", "bank", "brown"), towns.size());
analysisContainer.addHtml("townAccordion", TownAccordionCreator.createAccordion(towns));
Map<UUID, String> userTowns = new HashMap<>();
for (Town town : towns) {
String townName = town.getName();
town.getResidents().stream()
.map(Resident::getName)
.map(name -> Plan.getInstance().getDataCache().getUUIDof(name))
.filter(Verify::notNull)
.forEach(uuid -> userTowns.put(uuid, townName));
}
analysisContainer.addPlayerTableValues(getWithIcon("Town", "bank"), userTowns);
analysisContainer.addHtml("townAccordion", TownAccordionCreator.createAccordion(towns));
}
return analysisContainer;
}

View File

@ -4,7 +4,6 @@ import com.djrapitops.pluginbridge.plan.Hook;
import main.java.com.djrapitops.plan.api.API;
import main.java.com.djrapitops.plan.data.additional.HookHandler;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import static org.bukkit.Bukkit.getServer;
@ -34,11 +33,11 @@ public class VaultHook extends Hook {
return;
}
try {
Permission permSys = getServer().getServicesManager().getRegistration(Permission.class).getProvider();
addPluginDataSource(new VaultPermData(permSys));
} catch (NoSuchFieldError | NoSuchMethodError | Exception e) {
}
// try {
// Permission permSys = getServer().getServicesManager().getRegistration(Permission.class).getProvider();
// addPluginDataSource(new VaultPermData(permSys));
// } catch (NoSuchFieldError | NoSuchMethodError | Exception e) {
// }
try {
Economy econ = getServer().getServicesManager().getRegistration(Economy.class).getProvider();