BanData is now used in Server Analysis #630

This commit is contained in:
Rsl1122 2018-07-11 10:55:00 +03:00
parent 228997950a
commit 5bf69b61aa
6 changed files with 107 additions and 2 deletions

View File

@ -11,7 +11,8 @@ import java.util.UUID;
* Interface for PluginData objects that affect Ban state of players. * Interface for PluginData objects that affect Ban state of players.
* *
* @author Rsl1122 * @author Rsl1122
* @deprecated As of 4.3.2+ BanData has been deprecated as a way to display bans. Use Key integration instead. * @deprecated New implementations should not be created as better plugin data integration is
* being created.
*/ */
@Deprecated @Deprecated
public interface BanData { public interface BanData {

View File

@ -10,6 +10,7 @@ import com.djrapitops.plugin.utilities.Verify;
import com.djrapitops.pluginbridge.plan.Bridge; import com.djrapitops.pluginbridge.plan.Bridge;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* Class responsible for hooking to other plugins and managing the %plugins% * Class responsible for hooking to other plugins and managing the %plugins%
@ -87,6 +88,13 @@ public class HookHandler implements SubSystem {
return additionalDataSources; return additionalDataSources;
} }
public List<BanData> getBanDataSources() {
return additionalDataSources.stream()
.filter(p -> p instanceof BanData)
.map(p -> (BanData) p)
.collect(Collectors.toList());
}
public Map<PluginData, InspectContainer> getInspectContainersFor(UUID uuid) { public Map<PluginData, InspectContainer> getInspectContainersFor(UUID uuid) {
List<PluginData> plugins = getAdditionalDataSources(); List<PluginData> plugins = getAdditionalDataSources();
Map<PluginData, InspectContainer> containers = new HashMap<>(); Map<PluginData, InspectContainer> containers = new HashMap<>();

View File

@ -7,6 +7,7 @@ import com.djrapitops.plan.data.store.keys.AnalysisKeys;
import com.djrapitops.plan.data.store.keys.PlayerKeys; import com.djrapitops.plan.data.store.keys.PlayerKeys;
import com.djrapitops.plan.data.store.keys.ServerKeys; import com.djrapitops.plan.data.store.keys.ServerKeys;
import com.djrapitops.plan.data.store.mutators.*; import com.djrapitops.plan.data.store.mutators.*;
import com.djrapitops.plan.data.store.mutators.combiners.MultiBanCombiner;
import com.djrapitops.plan.data.store.mutators.formatting.Formatters; import com.djrapitops.plan.data.store.mutators.formatting.Formatters;
import com.djrapitops.plan.data.time.WorldTimes; import com.djrapitops.plan.data.time.WorldTimes;
import com.djrapitops.plan.system.database.databases.Database; import com.djrapitops.plan.system.database.databases.Database;
@ -16,6 +17,7 @@ import com.djrapitops.plan.system.settings.Settings;
import com.djrapitops.plan.system.settings.theme.Theme; import com.djrapitops.plan.system.settings.theme.Theme;
import com.djrapitops.plan.system.settings.theme.ThemeVal; import com.djrapitops.plan.system.settings.theme.ThemeVal;
import com.djrapitops.plan.utilities.MiscUtils; import com.djrapitops.plan.utilities.MiscUtils;
import com.djrapitops.plan.utilities.analysis.ServerBanDataReader;
import com.djrapitops.plan.utilities.html.graphs.ActivityStackGraph; import com.djrapitops.plan.utilities.html.graphs.ActivityStackGraph;
import com.djrapitops.plan.utilities.html.graphs.PunchCardGraph; import com.djrapitops.plan.utilities.html.graphs.PunchCardGraph;
import com.djrapitops.plan.utilities.html.graphs.WorldMap; import com.djrapitops.plan.utilities.html.graphs.WorldMap;
@ -69,6 +71,12 @@ public class AnalysisContainer extends DataContainer {
addCommandSuppliers(); addCommandSuppliers();
addServerHealth(); addServerHealth();
addPluginSuppliers(); addPluginSuppliers();
runCombiners();
}
private void runCombiners() {
new MultiBanCombiner(this.serverContainer).combine(getUnsafe(AnalysisKeys.BAN_DATA));
} }
private void addConstants() { private void addConstants() {
@ -379,8 +387,10 @@ public class AnalysisContainer extends DataContainer {
putSupplier(navAndTabs, () -> putSupplier(navAndTabs, () ->
AnalysisPluginsTabContentCreator.createContent( AnalysisPluginsTabContentCreator.createContent(
getUnsafe(AnalysisKeys.PLAYERS_MUTATOR), getUnsafe(AnalysisKeys.PLAYERS_MUTATOR),
this) this
)
); );
putSupplier(AnalysisKeys.BAN_DATA, () -> new ServerBanDataReader().readBanDataForContainer(this));
putSupplier(AnalysisKeys.PLUGINS_TAB_NAV, () -> getUnsafe(navAndTabs)[0]); putSupplier(AnalysisKeys.PLUGINS_TAB_NAV, () -> getUnsafe(navAndTabs)[0]);
putSupplier(AnalysisKeys.PLUGINS_TAB, () -> getUnsafe(navAndTabs)[1]); putSupplier(AnalysisKeys.PLUGINS_TAB, () -> getUnsafe(navAndTabs)[1]);
} }

View File

@ -139,6 +139,7 @@ public class AnalysisKeys {
public static final Key<Long> ANALYSIS_TIME_MONTH_AGO = new Key<>(Long.class, "ANALYSIS_TIME_MONTH_AGO"); public static final Key<Long> ANALYSIS_TIME_MONTH_AGO = new Key<>(Long.class, "ANALYSIS_TIME_MONTH_AGO");
public static final Key<Map<UUID, String>> PLAYER_NAMES = new Key<>(new Type<Map<UUID, String>>() {}, "PLAYER_NAMES"); public static final Key<Map<UUID, String>> PLAYER_NAMES = new Key<>(new Type<Map<UUID, String>>() {}, "PLAYER_NAMES");
public static final Key<TreeMap<Long, Map<String, Set<UUID>>>> ACTIVITY_DATA = new Key<>(new Type<TreeMap<Long, Map<String, Set<UUID>>>>() {}, "ACTIVITY_DATA"); public static final Key<TreeMap<Long, Map<String, Set<UUID>>>> ACTIVITY_DATA = new Key<>(new Type<TreeMap<Long, Map<String, Set<UUID>>>>() {}, "ACTIVITY_DATA");
public static final Key<Set<UUID>> BAN_DATA = new Key<>(new Type<Set<UUID>>() {}, "BAN_DATA");
private AnalysisKeys() { private AnalysisKeys() {
/* Static variable class */ /* Static variable class */

View File

@ -0,0 +1,49 @@
package com.djrapitops.plan.data.store.mutators.combiners;
import com.djrapitops.plan.data.store.containers.DataContainer;
import com.djrapitops.plan.data.store.containers.PerServerContainer;
import com.djrapitops.plan.data.store.containers.PlayerContainer;
import com.djrapitops.plan.data.store.keys.PerServerKeys;
import com.djrapitops.plan.data.store.keys.PlayerKeys;
import com.djrapitops.plan.data.store.keys.ServerKeys;
import com.djrapitops.plan.system.info.server.ServerInfo;
import java.util.*;
public class MultiBanCombiner {
private final DataContainer container;
/**
* Constructor.
*
* @param container DataContainer that supports {@link com.djrapitops.plan.data.store.keys.ServerKeys}.PLAYERS
*/
public MultiBanCombiner(DataContainer container) {
this.container = container;
}
public void combine(Set<UUID> banned) {
combine(Collections.singletonMap(ServerInfo.getServerUUID(), banned));
}
public void combine(Map<UUID, Set<UUID>> perServerBanned) {
List<PlayerContainer> playerContainers = container.getValue(ServerKeys.PLAYERS).orElse(new ArrayList<>());
for (Map.Entry<UUID, Set<UUID>> entry : perServerBanned.entrySet()) {
UUID serverUUID = entry.getKey();
Set<UUID> banned = entry.getValue();
for (PlayerContainer player : playerContainers) {
if (player.getValue(PlayerKeys.UUID).map(banned::contains).orElse(false)) {
PerServerContainer perServer = player.getValue(PlayerKeys.PER_SERVER)
.orElse(new PerServerContainer());
DataContainer perServerContainer = perServer.getOrDefault(serverUUID, new DataContainer());
perServerContainer.putRawData(PerServerKeys.BANNED, true);
perServer.put(serverUUID, perServerContainer);
}
}
}
}
}

View File

@ -0,0 +1,36 @@
package com.djrapitops.plan.utilities.analysis;
import com.djrapitops.plan.data.plugin.BanData;
import com.djrapitops.plan.data.plugin.HookHandler;
import com.djrapitops.plan.data.store.containers.DataContainer;
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
import com.djrapitops.plan.data.store.mutators.PlayersMutator;
import com.djrapitops.plugin.api.utility.log.Log;
import java.util.*;
public class ServerBanDataReader {
public Set<UUID> readBanDataForContainer(DataContainer container) {
return readBanData(
container.getValue(AnalysisKeys.PLAYERS_MUTATOR)
.map(PlayersMutator::uuids)
.orElse(new ArrayList<>())
);
}
public Set<UUID> readBanData(Collection<UUID> uuids) {
List<BanData> banPlugins = HookHandler.getInstance().getBanDataSources();
Set<UUID> banned = new HashSet<>();
for (BanData banPlugin : banPlugins) {
try {
banned.addAll(banPlugin.filterBanned(uuids));
} catch (Exception | NoSuchMethodError | NoClassDefFoundError | NoSuchFieldError e) {
Log.toLog("PluginData caused exception: " + banPlugin.getClass().getName(), e);
}
}
return banned;
}
}