From c77ec3fd7939bf75a15eeb5952bcb210b7d234c5 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 24 Mar 2019 16:53:51 +0200 Subject: [PATCH] Added flow for Negated conditions Negated conditions' names are prefixed with not_ This allows checking against negated Conditionals and does not need adding more table rows. --- .../db/sql/tables/ExtensionProviderTable.java | 2 +- .../implementation/DataProviderExtractor.java | 4 +- .../implementation/ProviderInformation.java | 7 ++-- .../providers/BooleanDataProvider.java | 3 +- .../providers/DoubleDataProvider.java | 3 +- .../providers/NumberDataProvider.java | 3 +- .../providers/PercentageDataProvider.java | 3 +- .../providers/StringDataProvider.java | 3 +- .../BooleanProviderValueGatherer.java | 28 +++++++++---- ...bleAndPercentageProviderValueGatherer.java | 12 +++--- .../NumberProviderValueGatherer.java | 12 +++--- .../gathering/ProviderValueGatherer.java | 16 +++---- .../StringProviderValueGatherer.java | 12 +++--- .../results/player/Conditions.java | 42 +++++++++++++++++++ 14 files changed, 107 insertions(+), 43 deletions(-) create mode 100644 Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/player/Conditions.java diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/ExtensionProviderTable.java b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/ExtensionProviderTable.java index a1277bfc4..eab746ea1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/ExtensionProviderTable.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/sql/tables/ExtensionProviderTable.java @@ -67,7 +67,7 @@ public class ExtensionProviderTable { .column(DESCRIPTION, Sql.varchar(150)) .column(PRIORITY, INT).notNull().defaultValue("0") .column(GROUPABLE, BOOL).notNull().defaultValue(false) - .column(CONDITION, Sql.varchar(50)) + .column(CONDITION, Sql.varchar(54)) // 50 + 4 for "not_" .column(PROVIDED_CONDITION, Sql.varchar(50)) .column(FORMAT_TYPE, Sql.varchar(25)) .column(IS_PLAYER_NAME, BOOL).notNull().defaultValue(false) diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/DataProviderExtractor.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/DataProviderExtractor.java index dbb00eba9..a981b8a16 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/DataProviderExtractor.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/DataProviderExtractor.java @@ -138,7 +138,7 @@ public class DataProviderExtractor { factory.placeToDataProviders( dataProviders, method, annotation, - conditional.map(Conditional::value).orElse(null), + conditional.orElse(null), tab.map(Tab::value).orElse(null), pluginInfo.name() ); @@ -157,7 +157,7 @@ public class DataProviderExtractor { interface DataProviderFactory { void placeToDataProviders( DataProviders dataProviders, - Method method, T annotation, String condition, String tab, String pluginName + Method method, T annotation, Conditional condition, String tab, String pluginName ); } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java index ffcddc4ac..b6fabe078 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/ProviderInformation.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation; +import com.djrapitops.plan.extension.annotation.Conditional; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.results.player.ExtensionDescriptive; import org.apache.commons.lang3.StringUtils; @@ -31,10 +32,10 @@ public class ProviderInformation extends ExtensionDescriptive { private final String pluginName; private final String tab; // can be null - private final String condition; // can be null + private final Conditional condition; // can be null public ProviderInformation( - String pluginName, String name, String text, String description, Icon icon, int priority, String tab, String condition + String pluginName, String name, String text, String description, Icon icon, int priority, String tab, Conditional condition ) { super(name, text, description, icon, priority); this.pluginName = pluginName; @@ -51,6 +52,6 @@ public class ProviderInformation extends ExtensionDescriptive { } public Optional getCondition() { - return condition == null || condition.isEmpty() ? Optional.empty() : Optional.of(StringUtils.truncate(condition, 50)); + return condition == null || condition.value().isEmpty() ? Optional.empty() : Optional.of((condition.negated() ? "not_" : "") + StringUtils.truncate(condition.value(), 50)); } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/BooleanDataProvider.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/BooleanDataProvider.java index 2df2dead1..99509ba67 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/BooleanDataProvider.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/BooleanDataProvider.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.extension.implementation.providers; import com.djrapitops.plan.extension.annotation.BooleanProvider; +import com.djrapitops.plan.extension.annotation.Conditional; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.ProviderInformation; import org.apache.commons.lang3.StringUtils; @@ -43,7 +44,7 @@ public class BooleanDataProvider extends DataProvider { public static void placeToDataProviders( DataProviders dataProviders, Method method, BooleanProvider annotation, - String condition, String tab, String pluginName + Conditional condition, String tab, String pluginName ) { MethodWrapper methodWrapper = new MethodWrapper<>(method, Boolean.class); Icon providerIcon = new Icon(annotation.iconFamily(), annotation.iconName(), annotation.iconColor()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/DoubleDataProvider.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/DoubleDataProvider.java index 91c6a5d60..204b28c73 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/DoubleDataProvider.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/DoubleDataProvider.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation.providers; +import com.djrapitops.plan.extension.annotation.Conditional; import com.djrapitops.plan.extension.annotation.DoubleProvider; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.ProviderInformation; @@ -37,7 +38,7 @@ public class DoubleDataProvider extends DataProvider { public static void placeToDataProviders( DataProviders dataProviders, Method method, DoubleProvider annotation, - String condition, String tab, String pluginName + Conditional condition, String tab, String pluginName ) { MethodWrapper methodWrapper = new MethodWrapper<>(method, Double.class); Icon providerIcon = new Icon(annotation.iconFamily(), annotation.iconName(), annotation.iconColor()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/NumberDataProvider.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/NumberDataProvider.java index fac5b50d5..353dbdd44 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/NumberDataProvider.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/NumberDataProvider.java @@ -17,6 +17,7 @@ package com.djrapitops.plan.extension.implementation.providers; import com.djrapitops.plan.extension.FormatType; +import com.djrapitops.plan.extension.annotation.Conditional; import com.djrapitops.plan.extension.annotation.NumberProvider; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.ProviderInformation; @@ -41,7 +42,7 @@ public class NumberDataProvider extends DataProvider { public static void placeToDataProviders( DataProviders dataProviders, Method method, NumberProvider annotation, - String condition, String tab, String pluginName + Conditional condition, String tab, String pluginName ) { MethodWrapper methodWrapper = new MethodWrapper<>(method, Long.class); Icon providerIcon = new Icon(annotation.iconFamily(), annotation.iconName(), annotation.iconColor()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/PercentageDataProvider.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/PercentageDataProvider.java index 01c235d8d..8aaa4dfd9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/PercentageDataProvider.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/PercentageDataProvider.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation.providers; +import com.djrapitops.plan.extension.annotation.Conditional; import com.djrapitops.plan.extension.annotation.PercentageProvider; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.ProviderInformation; @@ -37,7 +38,7 @@ public class PercentageDataProvider extends DataProvider { public static void placeToDataProviders( DataProviders dataProviders, Method method, PercentageProvider annotation, - String condition, String tab, String pluginName + Conditional condition, String tab, String pluginName ) { MethodWrapper methodWrapper = new MethodWrapper<>(method, Double.class); Icon providerIcon = new Icon(annotation.iconFamily(), annotation.iconName(), annotation.iconColor()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/StringDataProvider.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/StringDataProvider.java index 5ecab404b..fa90e00a8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/StringDataProvider.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/StringDataProvider.java @@ -16,6 +16,7 @@ */ package com.djrapitops.plan.extension.implementation.providers; +import com.djrapitops.plan.extension.annotation.Conditional; import com.djrapitops.plan.extension.annotation.StringProvider; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.ProviderInformation; @@ -40,7 +41,7 @@ public class StringDataProvider extends DataProvider { public static void placeToDataProviders( DataProviders dataProviders, Method method, StringProvider annotation, - String condition, String tab, String pluginName + Conditional condition, String tab, String pluginName ) { MethodWrapper methodWrapper = new MethodWrapper<>(method, String.class); Icon providerIcon = new Icon(annotation.iconFamily(), annotation.iconName(), annotation.iconColor()); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java index ce66a114e..7ec1bc525 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/BooleanProviderValueGatherer.java @@ -18,10 +18,12 @@ package com.djrapitops.plan.extension.implementation.providers.gathering; import com.djrapitops.plan.db.Database; import com.djrapitops.plan.extension.DataExtension; +import com.djrapitops.plan.extension.implementation.ProviderInformation; import com.djrapitops.plan.extension.implementation.providers.BooleanDataProvider; import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.DataProviders; import com.djrapitops.plan.extension.implementation.providers.MethodWrapper; +import com.djrapitops.plan.extension.implementation.results.player.Conditions; import com.djrapitops.plan.extension.implementation.storage.transactions.StoreIconTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreBooleanProviderTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerBooleanResultTransaction; @@ -60,8 +62,8 @@ class BooleanProviderValueGatherer { this.logger = logger; } - Set gatherBooleanData(UUID playerUUID, String playerName) { - Set providedConditions = new HashSet<>(); + Conditions gatherBooleanData(UUID playerUUID, String playerName) { + Conditions conditions = new Conditions(); List> unsatisifiedProviders = new ArrayList<>(dataProviders.getPlayerMethodsByType(Boolean.class)); Set> satisfied = new HashSet<>(); @@ -71,9 +73,11 @@ class BooleanProviderValueGatherer { satisfied.clear(); // Loop through all unsatisfied providers to see if more conditions are satisfied for (DataProvider booleanProvider : unsatisifiedProviders) { - Optional condition = booleanProvider.getProviderInformation().getCondition(); - if (condition.isPresent() && !providedConditions.contains(condition.get())) { - continue; // Condition not met + ProviderInformation providerInformation = booleanProvider.getProviderInformation(); + + Optional condition = providerInformation.getCondition(); + if (condition.isPresent() && conditions.isNotFulfilled(condition.get())) { + continue; } Optional providedCondition = BooleanDataProvider.getProvidedCondition(booleanProvider); @@ -88,12 +92,18 @@ class BooleanProviderValueGatherer { continue; } - if (result && providedCondition.isPresent()) { - providedConditions.add(providedCondition.get()); // The condition was fulfilled for this player. + if (providedCondition.isPresent()) { + if (result) { + // The condition was fulfilled (true) for this player. + conditions.conditionFulfilled(providedCondition.get()); + } else { + // The negated condition was fulfilled (false) for this player. + conditions.conditionFulfilled("not_" + providedCondition.get()); + } } satisfied.add(booleanProvider); // Prevents further attempts to call this provider for this player. - database.executeTransaction(new StoreIconTransaction(booleanProvider.getProviderInformation().getIcon())); + database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon())); database.executeTransaction(new StoreBooleanProviderTransaction(booleanProvider, providedCondition.orElse(null), serverUUID)); database.executeTransaction(new StorePlayerBooleanResultTransaction(pluginName, serverUUID, method.getMethodName(), playerUUID, result)); } @@ -102,7 +112,7 @@ class BooleanProviderValueGatherer { // If no new conditions could be satisfied, stop looping. } while (!satisfied.isEmpty()); - return providedConditions; + return conditions; } private T getMethodResult(Callable callable, Function errorMsg) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/DoubleAndPercentageProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/DoubleAndPercentageProviderValueGatherer.java index 648a1981e..678611415 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/DoubleAndPercentageProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/DoubleAndPercentageProviderValueGatherer.java @@ -18,10 +18,12 @@ package com.djrapitops.plan.extension.implementation.providers.gathering; import com.djrapitops.plan.db.Database; import com.djrapitops.plan.extension.DataExtension; +import com.djrapitops.plan.extension.implementation.ProviderInformation; import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.DataProviders; import com.djrapitops.plan.extension.implementation.providers.MethodWrapper; import com.djrapitops.plan.extension.implementation.providers.PercentageDataProvider; +import com.djrapitops.plan.extension.implementation.results.player.Conditions; import com.djrapitops.plan.extension.implementation.storage.transactions.StoreIconTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreDoubleProviderTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerDoubleResultTransaction; @@ -29,7 +31,6 @@ import com.djrapitops.plan.extension.implementation.storage.transactions.results import com.djrapitops.plugin.logging.console.PluginLogger; import java.util.Optional; -import java.util.Set; import java.util.UUID; import java.util.concurrent.Callable; import java.util.function.Function; @@ -63,10 +64,11 @@ class DoubleAndPercentageProviderValueGatherer { this.logger = logger; } - void gatherDoubleData(UUID playerUUID, String playerName, Set providedConditions) { + void gatherDoubleData(UUID playerUUID, String playerName, Conditions conditions) { for (DataProvider doubleProvider : dataProviders.getPlayerMethodsByType(Double.class)) { - Optional condition = doubleProvider.getProviderInformation().getCondition(); - if (condition.isPresent() && !providedConditions.contains(condition.get())) { + ProviderInformation providerInformation = doubleProvider.getProviderInformation(); + Optional condition = providerInformation.getCondition(); + if (condition.isPresent() && conditions.isNotFulfilled(condition.get())) { continue; // Condition not met } @@ -79,7 +81,7 @@ class DoubleAndPercentageProviderValueGatherer { continue; } - database.executeTransaction(new StoreIconTransaction(doubleProvider.getProviderInformation().getIcon())); + database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon())); database.executeTransaction(new StoreDoubleProviderTransaction(doubleProvider, serverUUID)); if (doubleProvider instanceof PercentageDataProvider) { diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/NumberProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/NumberProviderValueGatherer.java index d1047bb01..1d58d73b0 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/NumberProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/NumberProviderValueGatherer.java @@ -19,17 +19,18 @@ package com.djrapitops.plan.extension.implementation.providers.gathering; import com.djrapitops.plan.db.Database; import com.djrapitops.plan.extension.DataExtension; import com.djrapitops.plan.extension.FormatType; +import com.djrapitops.plan.extension.implementation.ProviderInformation; import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.DataProviders; import com.djrapitops.plan.extension.implementation.providers.MethodWrapper; import com.djrapitops.plan.extension.implementation.providers.NumberDataProvider; +import com.djrapitops.plan.extension.implementation.results.player.Conditions; import com.djrapitops.plan.extension.implementation.storage.transactions.StoreIconTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreNumberProviderTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerNumberResultTransaction; import com.djrapitops.plugin.logging.console.PluginLogger; import java.util.Optional; -import java.util.Set; import java.util.UUID; import java.util.concurrent.Callable; import java.util.function.Function; @@ -63,10 +64,11 @@ class NumberProviderValueGatherer { this.logger = logger; } - void gatherNumberData(UUID playerUUID, String playerName, Set providedConditions) { + void gatherNumberData(UUID playerUUID, String playerName, Conditions conditions) { for (DataProvider numberProvider : dataProviders.getPlayerMethodsByType(Long.class)) { - Optional condition = numberProvider.getProviderInformation().getCondition(); - if (condition.isPresent() && !providedConditions.contains(condition.get())) { + ProviderInformation providerInformation = numberProvider.getProviderInformation(); + Optional condition = providerInformation.getCondition(); + if (condition.isPresent() && conditions.isNotFulfilled(condition.get())) { continue; // Condition not met } @@ -81,7 +83,7 @@ class NumberProviderValueGatherer { FormatType formatType = NumberDataProvider.getFormatType(numberProvider); - database.executeTransaction(new StoreIconTransaction(numberProvider.getProviderInformation().getIcon())); + database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon())); database.executeTransaction(new StoreNumberProviderTransaction(numberProvider, formatType, serverUUID)); database.executeTransaction(new StorePlayerNumberResultTransaction(pluginName, serverUUID, method.getMethodName(), playerUUID, result)); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java index 86a774596..7d22d6894 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/ProviderValueGatherer.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.DataExtension; import com.djrapitops.plan.extension.icon.Icon; import com.djrapitops.plan.extension.implementation.DataProviderExtractor; import com.djrapitops.plan.extension.implementation.TabInformation; +import com.djrapitops.plan.extension.implementation.results.player.Conditions; import com.djrapitops.plan.extension.implementation.storage.transactions.StoreIconTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.StorePluginTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.StoreTabInformationTransaction; @@ -29,7 +30,6 @@ import com.djrapitops.plan.system.database.DBSystem; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plugin.logging.console.PluginLogger; -import java.util.Set; import java.util.UUID; /** @@ -79,11 +79,11 @@ public class ProviderValueGatherer { } public void updateValues(UUID playerUUID, String playerName) { - Set providedConditions = gatherBooleanData(playerUUID, playerName); - gatherValueData(playerUUID, playerName, providedConditions); + Conditions conditions = gatherBooleanData(playerUUID, playerName); + gatherValueData(playerUUID, playerName, conditions); } - private Set gatherBooleanData(UUID playerUUID, String playerName) { + private Conditions gatherBooleanData(UUID playerUUID, String playerName) { return new BooleanProviderValueGatherer( extractor.getPluginName(), extension, serverInfo.getServerUUID(), dbSystem.getDatabase(), @@ -91,21 +91,21 @@ public class ProviderValueGatherer { ).gatherBooleanData(playerUUID, playerName); } - private void gatherValueData(UUID playerUUID, String playerName, Set providedConditions) { + private void gatherValueData(UUID playerUUID, String playerName, Conditions conditions) { new NumberProviderValueGatherer( extractor.getPluginName(), extension, serverInfo.getServerUUID(), dbSystem.getDatabase(), extractor.getDataProviders(), logger - ).gatherNumberData(playerUUID, playerName, providedConditions); + ).gatherNumberData(playerUUID, playerName, conditions); new DoubleAndPercentageProviderValueGatherer( extractor.getPluginName(), extension, serverInfo.getServerUUID(), dbSystem.getDatabase(), extractor.getDataProviders(), logger - ).gatherDoubleData(playerUUID, playerName, providedConditions); + ).gatherDoubleData(playerUUID, playerName, conditions); new StringProviderValueGatherer( extractor.getPluginName(), extension, serverInfo.getServerUUID(), dbSystem.getDatabase(), extractor.getDataProviders(), logger - ).gatherStringData(playerUUID, playerName, providedConditions); + ).gatherStringData(playerUUID, playerName, conditions); } } \ No newline at end of file diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/StringProviderValueGatherer.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/StringProviderValueGatherer.java index 9ff65575a..245830ba9 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/StringProviderValueGatherer.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/providers/gathering/StringProviderValueGatherer.java @@ -18,10 +18,12 @@ package com.djrapitops.plan.extension.implementation.providers.gathering; import com.djrapitops.plan.db.Database; import com.djrapitops.plan.extension.DataExtension; +import com.djrapitops.plan.extension.implementation.ProviderInformation; import com.djrapitops.plan.extension.implementation.providers.DataProvider; import com.djrapitops.plan.extension.implementation.providers.DataProviders; import com.djrapitops.plan.extension.implementation.providers.MethodWrapper; import com.djrapitops.plan.extension.implementation.providers.StringDataProvider; +import com.djrapitops.plan.extension.implementation.results.player.Conditions; import com.djrapitops.plan.extension.implementation.storage.transactions.StoreIconTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreStringProviderTransaction; import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerStringResultTransaction; @@ -29,7 +31,6 @@ import com.djrapitops.plugin.logging.console.PluginLogger; import org.apache.commons.lang3.StringUtils; import java.util.Optional; -import java.util.Set; import java.util.UUID; import java.util.concurrent.Callable; import java.util.function.Function; @@ -63,10 +64,11 @@ class StringProviderValueGatherer { this.logger = logger; } - void gatherStringData(UUID playerUUID, String playerName, Set providedConditions) { + void gatherStringData(UUID playerUUID, String playerName, Conditions conditions) { for (DataProvider stringProvider : dataProviders.getPlayerMethodsByType(String.class)) { - Optional condition = stringProvider.getProviderInformation().getCondition(); - if (condition.isPresent() && !providedConditions.contains(condition.get())) { + ProviderInformation providerInformation = stringProvider.getProviderInformation(); + Optional condition = providerInformation.getCondition(); + if (condition.isPresent() && conditions.isNotFulfilled(condition.get())) { continue; // Condition not met } @@ -81,7 +83,7 @@ class StringProviderValueGatherer { result = StringUtils.truncate(result, 50); - database.executeTransaction(new StoreIconTransaction(stringProvider.getProviderInformation().getIcon())); + database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon())); database.executeTransaction(new StoreStringProviderTransaction(stringProvider, StringDataProvider.isPlayerName(stringProvider), serverUUID)); database.executeTransaction(new StorePlayerStringResultTransaction(pluginName, serverUUID, method.getMethodName(), playerUUID, result)); } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/player/Conditions.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/player/Conditions.java new file mode 100644 index 000000000..26b9df5ef --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/results/player/Conditions.java @@ -0,0 +1,42 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.extension.implementation.results.player; + +import java.util.HashSet; +import java.util.Set; + +/** + * Utility object for managing conditions. + * + * @author Rsl1122 + */ +public class Conditions { + + private final Set fulfilledConditions; + + public Conditions() { + this.fulfilledConditions = new HashSet<>(); + } + + public boolean isNotFulfilled(String condition) { + return !fulfilledConditions.contains(condition); + } + + public void conditionFulfilled(String condition) { + fulfilledConditions.add(condition); + } +} \ No newline at end of file