mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-12 22:59:26 +01:00
StoreProviderTransaction
- Removes duplicate code by replacing 5 different Store___ProviderTransaction classes with a single one. Null value is inserted where possible / makes sense
This commit is contained in:
parent
0b1ae59c48
commit
2c19e0e980
@ -148,7 +148,7 @@ public class ExtensionServiceImplementation implements ExtensionService {
|
||||
}
|
||||
|
||||
public void updatePlayerValues(ProviderValueGatherer gatherer, UUID playerUUID, String playerName, CallEvents event) {
|
||||
if (!gatherer.canCallEvent(event)) return;
|
||||
if (gatherer.shouldSkipEvent(event)) return;
|
||||
if (playerUUID == null && playerName == null) return;
|
||||
|
||||
try {
|
||||
@ -190,7 +190,7 @@ public class ExtensionServiceImplementation implements ExtensionService {
|
||||
}
|
||||
|
||||
public void updateServerValues(ProviderValueGatherer gatherer, CallEvents event) {
|
||||
if (!gatherer.canCallEvent(event)) return;
|
||||
if (gatherer.shouldSkipEvent(event)) return;
|
||||
|
||||
try {
|
||||
logger.getDebugLogger().logOn(DebugChannels.DATA_EXTENSIONS, "Gathering values for server");
|
||||
|
@ -58,7 +58,7 @@ public class BooleanDataProvider extends DataProvider<Boolean> {
|
||||
dataProviders.put(new BooleanDataProvider(providerInformation, methodWrapper, annotation.conditionName(), annotation.hidden()));
|
||||
}
|
||||
|
||||
public static Optional<String> getProvidedCondition(DataProvider<Boolean> provider) {
|
||||
public static Optional<String> getProvidedCondition(DataProvider<?> provider) {
|
||||
if (provider instanceof BooleanDataProvider) {
|
||||
return ((BooleanDataProvider) provider).getProvidedCondition();
|
||||
}
|
||||
@ -69,7 +69,7 @@ public class BooleanDataProvider extends DataProvider<Boolean> {
|
||||
return providedCondition == null || providedCondition.isEmpty() ? Optional.empty() : Optional.of(StringUtils.truncate(providedCondition, 50));
|
||||
}
|
||||
|
||||
public static boolean isHidden(DataProvider<Boolean> provider) {
|
||||
public static boolean isHidden(DataProvider<?> provider) {
|
||||
return provider instanceof BooleanDataProvider && ((BooleanDataProvider) provider).isHidden();
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ import com.djrapitops.plan.extension.icon.Icon;
|
||||
import com.djrapitops.plan.extension.implementation.ProviderInformation;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Represents a DataExtension API method annotated with {@link NumberProvider} annotation.
|
||||
@ -54,11 +55,11 @@ public class NumberDataProvider extends DataProvider<Long> {
|
||||
dataProviders.put(new NumberDataProvider(providerInformation, methodWrapper, annotation.format()));
|
||||
}
|
||||
|
||||
public static FormatType getFormatType(DataProvider<Long> provider) {
|
||||
public static Optional<FormatType> getFormatType(DataProvider<?> provider) {
|
||||
if (provider instanceof NumberDataProvider) {
|
||||
return ((NumberDataProvider) provider).getFormatType();
|
||||
return Optional.of(((NumberDataProvider) provider).getFormatType());
|
||||
}
|
||||
return FormatType.NONE;
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
public FormatType getFormatType() {
|
||||
|
@ -55,7 +55,7 @@ public class StringDataProvider extends DataProvider<String> {
|
||||
dataProviders.put(new StringDataProvider(providerInformation, methodWrapper, playerName));
|
||||
}
|
||||
|
||||
public static boolean isPlayerName(DataProvider<String> provider) {
|
||||
public static boolean isPlayerName(DataProvider<?> provider) {
|
||||
if (provider instanceof StringDataProvider) {
|
||||
return ((StringDataProvider) provider).isPlayerName();
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ 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.storage.transactions.StoreIconTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreBooleanProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerBooleanResultTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StoreServerBooleanResultTransaction;
|
||||
import com.djrapitops.plan.storage.database.Database;
|
||||
@ -121,8 +121,6 @@ class BooleanProviderValueGatherer {
|
||||
}
|
||||
|
||||
Optional<String> providedCondition = BooleanDataProvider.getProvidedCondition(booleanProvider);
|
||||
boolean hidden = BooleanDataProvider.isHidden(booleanProvider);
|
||||
|
||||
MethodWrapper<Boolean> method = booleanProvider.getMethod();
|
||||
Boolean result = getMethodResult(methodCaller.apply(method), method);
|
||||
if (result == null) {
|
||||
@ -143,7 +141,7 @@ class BooleanProviderValueGatherer {
|
||||
|
||||
satisfied.add(booleanProvider); // Prevents further attempts to call this provider for this player.
|
||||
database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon()));
|
||||
database.executeTransaction(new StoreBooleanProviderTransaction(booleanProvider, providedCondition.orElse(null), hidden, serverUUID));
|
||||
database.executeTransaction(new StoreProviderTransaction(booleanProvider, serverUUID));
|
||||
database.executeTransaction(storeTransactionCreator.apply(method, result));
|
||||
}
|
||||
return satisfied;
|
||||
|
@ -24,7 +24,7 @@ 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.storage.transactions.StoreIconTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreDoubleProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerDoubleResultTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerPercentageResultTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StoreServerDoubleResultTransaction;
|
||||
@ -108,7 +108,7 @@ class DoubleAndPercentageProviderValueGatherer {
|
||||
}
|
||||
|
||||
database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon()));
|
||||
database.executeTransaction(new StoreDoubleProviderTransaction(doubleProvider, serverUUID));
|
||||
database.executeTransaction(new StoreProviderTransaction(doubleProvider, serverUUID));
|
||||
|
||||
if (doubleProvider instanceof PercentageDataProvider) {
|
||||
database.executeTransaction(percStoreTransactionCreator.apply(method, result));
|
||||
|
@ -23,7 +23,7 @@ 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.storage.transactions.StoreIconTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreGroupProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerGroupsResultTransaction;
|
||||
import com.djrapitops.plan.storage.database.Database;
|
||||
|
||||
@ -81,7 +81,7 @@ class GroupProviderValueGatherer {
|
||||
}
|
||||
|
||||
database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon()));
|
||||
database.executeTransaction(new StoreGroupProviderTransaction(groupProvider, serverUUID));
|
||||
database.executeTransaction(new StoreProviderTransaction(groupProvider, serverUUID));
|
||||
database.executeTransaction(new StorePlayerGroupsResultTransaction(pluginName, serverUUID, method.getMethodName(), playerUUID, result));
|
||||
} catch (Exception | NoClassDefFoundError | NoSuchFieldError | NoSuchMethodError e) {
|
||||
throw new DataExtensionMethodCallException(e, pluginName, method);
|
||||
|
@ -18,14 +18,12 @@ package com.djrapitops.plan.extension.implementation.providers.gathering;
|
||||
|
||||
import com.djrapitops.plan.exceptions.DataExtensionMethodCallException;
|
||||
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.storage.transactions.StoreIconTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreNumberProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerNumberResultTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StoreServerNumberResultTransaction;
|
||||
import com.djrapitops.plan.storage.database.Database;
|
||||
@ -102,10 +100,8 @@ class NumberProviderValueGatherer {
|
||||
return; // Error during call
|
||||
}
|
||||
|
||||
FormatType formatType = NumberDataProvider.getFormatType(numberProvider);
|
||||
|
||||
database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon()));
|
||||
database.executeTransaction(new StoreNumberProviderTransaction(numberProvider, formatType, serverUUID));
|
||||
database.executeTransaction(new StoreProviderTransaction(numberProvider, serverUUID));
|
||||
database.executeTransaction(storeTransactionCreator.apply(method, result));
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ import com.djrapitops.plan.extension.implementation.providers.MethodWrapper;
|
||||
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;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreNumberProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.RemoveInvalidResultsTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerNumberResultTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StoreServerNumberResultTransaction;
|
||||
@ -104,25 +104,25 @@ public class ProviderValueGatherer {
|
||||
serverNumberGatherer = new Gatherer<>(
|
||||
Long.class,
|
||||
method -> method.callMethod(extension),
|
||||
StoreNumberProviderTransaction::new,
|
||||
StoreProviderTransaction::new,
|
||||
(provider, result) -> new StoreServerNumberResultTransaction(provider, serverUUID, result)
|
||||
);
|
||||
}
|
||||
|
||||
public void disableMethodFromUse(MethodWrapper method) {
|
||||
public void disableMethodFromUse(MethodWrapper<?> method) {
|
||||
dataProviders.removeProviderWithMethod(method);
|
||||
}
|
||||
|
||||
public boolean canCallEvent(CallEvents event) {
|
||||
public boolean shouldSkipEvent(CallEvents event) {
|
||||
if (event == CallEvents.MANUAL) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
for (CallEvents accepted : callEvents) {
|
||||
if (event == accepted) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public String getPluginName() {
|
||||
@ -153,7 +153,7 @@ public class ProviderValueGatherer {
|
||||
UUID serverUUID = serverInfo.getServerUUID();
|
||||
playerNumberGatherer = new Gatherer<>(
|
||||
Long.class, method -> method.callMethod(extension, playerUUID, playerName),
|
||||
StoreNumberProviderTransaction::new,
|
||||
StoreProviderTransaction::new,
|
||||
(provider, result) -> new StorePlayerNumberResultTransaction(provider, serverUUID, playerUUID, result)
|
||||
);
|
||||
playerNumberGatherer.gather(conditions);
|
||||
|
@ -22,9 +22,8 @@ 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.storage.transactions.StoreIconTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreStringProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.providers.StoreProviderTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StorePlayerStringResultTransaction;
|
||||
import com.djrapitops.plan.extension.implementation.storage.transactions.results.StoreServerStringResultTransaction;
|
||||
import com.djrapitops.plan.storage.database.Database;
|
||||
@ -106,7 +105,7 @@ class StringProviderValueGatherer {
|
||||
result = StringUtils.truncate(result, 50);
|
||||
|
||||
database.executeTransaction(new StoreIconTransaction(providerInformation.getIcon()));
|
||||
database.executeTransaction(new StoreStringProviderTransaction(stringProvider, StringDataProvider.isPlayerName(stringProvider), serverUUID));
|
||||
database.executeTransaction(new StoreProviderTransaction(stringProvider, serverUUID));
|
||||
database.executeTransaction(storeTransactionCreator.apply(method, result));
|
||||
}
|
||||
|
||||
|
@ -1,150 +0,0 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.extension.implementation.storage.transactions.providers;
|
||||
|
||||
import com.djrapitops.plan.extension.implementation.ProviderInformation;
|
||||
import com.djrapitops.plan.extension.implementation.providers.DataProvider;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionTabTable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ExecStatement;
|
||||
import com.djrapitops.plan.storage.database.transactions.Executable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.AND;
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE;
|
||||
import static com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable.*;
|
||||
|
||||
/**
|
||||
* Transaction to store information about a dobule {@link DataProvider}.
|
||||
* <p>
|
||||
* Includes:
|
||||
* {@link com.djrapitops.plan.extension.implementation.providers.DoubleDataProvider}.
|
||||
* {@link com.djrapitops.plan.extension.implementation.providers.PercentageDataProvider}.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class StoreDoubleProviderTransaction extends ThrowawayTransaction {
|
||||
|
||||
private final UUID serverUUID;
|
||||
private final ProviderInformation providerInformation;
|
||||
|
||||
public StoreDoubleProviderTransaction(DataProvider<Double> provider, UUID serverUUID) {
|
||||
this.serverUUID = serverUUID;
|
||||
this.providerInformation = provider.getProviderInformation();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void performOperations() {
|
||||
execute(storeProvider());
|
||||
}
|
||||
|
||||
private Executable storeProvider() {
|
||||
return connection -> {
|
||||
if (!updateProvider().execute(connection)) {
|
||||
return insertProvider().execute(connection);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
private Executable updateProvider() {
|
||||
String sql = "UPDATE " + TABLE_NAME +
|
||||
" SET " +
|
||||
TEXT + "=?," +
|
||||
DESCRIPTION + "=?," +
|
||||
PRIORITY + "=?," +
|
||||
CONDITION + "=?," +
|
||||
TAB_ID + "=" + ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ICON_ID + "=" + ExtensionIconTable.STATEMENT_SELECT_ICON_ID + ',' +
|
||||
SHOW_IN_PLAYERS_TABLE + "=?" +
|
||||
WHERE + PLUGIN_ID + "=" + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID +
|
||||
AND + PROVIDER_NAME + "=?";
|
||||
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(2, description.get());
|
||||
} else {
|
||||
statement.setNull(2, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(3, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(4, condition.get());
|
||||
} else {
|
||||
statement.setNull(4, Types.VARCHAR);
|
||||
}
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 5, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 8, providerInformation.getIcon());
|
||||
statement.setBoolean(11, providerInformation.isShownInPlayersTable());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 12, providerInformation.getPluginName(), serverUUID);
|
||||
statement.setString(14, providerInformation.getName());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Executable insertProvider() {
|
||||
String sql = "INSERT INTO " + TABLE_NAME + "(" +
|
||||
PROVIDER_NAME + "," +
|
||||
TEXT + "," +
|
||||
DESCRIPTION + "," +
|
||||
PRIORITY + "," +
|
||||
CONDITION + "," +
|
||||
SHOW_IN_PLAYERS_TABLE + ',' +
|
||||
TAB_ID + "," +
|
||||
ICON_ID + "," +
|
||||
PLUGIN_ID +
|
||||
") VALUES (?,?,?,?,?,?," +
|
||||
ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ExtensionIconTable.STATEMENT_SELECT_ICON_ID + "," +
|
||||
ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + ")";
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getName());
|
||||
statement.setString(2, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(3, description.get());
|
||||
} else {
|
||||
statement.setNull(3, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(4, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(5, condition.get());
|
||||
} else {
|
||||
statement.setNull(5, Types.VARCHAR);
|
||||
}
|
||||
statement.setBoolean(6, providerInformation.isShownInPlayersTable());
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 7, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 10, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 13, providerInformation.getPluginName(), serverUUID);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,126 +0,0 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.extension.implementation.storage.transactions.providers;
|
||||
|
||||
import com.djrapitops.plan.extension.implementation.ProviderInformation;
|
||||
import com.djrapitops.plan.extension.implementation.providers.DataProvider;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionTabTable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ExecStatement;
|
||||
import com.djrapitops.plan.storage.database.transactions.Executable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.AND;
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE;
|
||||
import static com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable.*;
|
||||
|
||||
/**
|
||||
* Transaction to store information about a {@link com.djrapitops.plan.extension.implementation.providers.GroupDataProvider}.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class StoreGroupProviderTransaction extends ThrowawayTransaction {
|
||||
|
||||
private final UUID serverUUID;
|
||||
private final ProviderInformation providerInformation;
|
||||
|
||||
public StoreGroupProviderTransaction(DataProvider<String[]> provider, UUID serverUUID) {
|
||||
this.serverUUID = serverUUID;
|
||||
providerInformation = provider.getProviderInformation();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void performOperations() {
|
||||
execute(storeProvider());
|
||||
}
|
||||
|
||||
private Executable storeProvider() {
|
||||
return connection -> {
|
||||
if (!updateProvider().execute(connection)) {
|
||||
return insertProvider().execute(connection);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
private Executable updateProvider() {
|
||||
String sql = "UPDATE " + TABLE_NAME +
|
||||
" SET " +
|
||||
TEXT + "=?," +
|
||||
CONDITION + "=?," +
|
||||
TAB_ID + "=" + ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ICON_ID + "=" + ExtensionIconTable.STATEMENT_SELECT_ICON_ID +
|
||||
WHERE + PLUGIN_ID + "=" + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID +
|
||||
AND + PROVIDER_NAME + "=?";
|
||||
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getText());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(2, condition.get());
|
||||
} else {
|
||||
statement.setNull(2, Types.VARCHAR);
|
||||
}
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 3, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 6, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 9, providerInformation.getPluginName(), serverUUID);
|
||||
statement.setString(11, providerInformation.getName());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Executable insertProvider() {
|
||||
String sql = "INSERT INTO " + TABLE_NAME + "(" +
|
||||
PROVIDER_NAME + "," +
|
||||
TEXT + "," +
|
||||
CONDITION + "," +
|
||||
SHOW_IN_PLAYERS_TABLE + "," +
|
||||
TAB_ID + "," +
|
||||
ICON_ID + "," +
|
||||
PLUGIN_ID +
|
||||
") VALUES (?,?,?,?," +
|
||||
ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ExtensionIconTable.STATEMENT_SELECT_ICON_ID + "," +
|
||||
ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + ")";
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getName());
|
||||
statement.setString(2, providerInformation.getText());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(3, condition.get());
|
||||
} else {
|
||||
statement.setNull(3, Types.VARCHAR);
|
||||
}
|
||||
statement.setBoolean(4, providerInformation.isShownInPlayersTable());
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 5, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 8, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 11, providerInformation.getPluginName(), serverUUID);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -1,158 +0,0 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.extension.implementation.storage.transactions.providers;
|
||||
|
||||
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.NumberDataProvider;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionTabTable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ExecStatement;
|
||||
import com.djrapitops.plan.storage.database.transactions.Executable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.AND;
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE;
|
||||
import static com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable.*;
|
||||
|
||||
/**
|
||||
* Transaction to store information about a {@link com.djrapitops.plan.extension.implementation.providers.NumberDataProvider}.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
@SuppressWarnings("Duplicates")
|
||||
public class StoreNumberProviderTransaction extends ThrowawayTransaction {
|
||||
|
||||
private final FormatType formatType;
|
||||
private final UUID serverUUID;
|
||||
private final ProviderInformation providerInformation;
|
||||
|
||||
public StoreNumberProviderTransaction(DataProvider<Long> provider, FormatType formatType, UUID serverUUID) {
|
||||
this.formatType = formatType;
|
||||
this.serverUUID = serverUUID;
|
||||
this.providerInformation = provider.getProviderInformation();
|
||||
}
|
||||
|
||||
public StoreNumberProviderTransaction(DataProvider<Long> provider, UUID serverUUID) {
|
||||
this(provider, NumberDataProvider.getFormatType(provider), serverUUID);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void performOperations() {
|
||||
execute(storeProvider());
|
||||
}
|
||||
|
||||
private Executable storeProvider() {
|
||||
return connection -> {
|
||||
if (!updateProvider().execute(connection)) {
|
||||
return insertProvider().execute(connection);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
private Executable updateProvider() {
|
||||
String sql = "UPDATE " + TABLE_NAME + " SET " +
|
||||
TEXT + "=?," +
|
||||
DESCRIPTION + "=?," +
|
||||
PRIORITY + "=?," +
|
||||
CONDITION + "=?," +
|
||||
SHOW_IN_PLAYERS_TABLE + "=?," +
|
||||
FORMAT_TYPE + "=?," +
|
||||
TAB_ID + "=" + ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ICON_ID + "=" + ExtensionIconTable.STATEMENT_SELECT_ICON_ID +
|
||||
WHERE + PLUGIN_ID + "=" + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID +
|
||||
AND + PROVIDER_NAME + "=?";
|
||||
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(2, description.get());
|
||||
} else {
|
||||
statement.setNull(2, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(3, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(4, condition.get());
|
||||
} else {
|
||||
statement.setNull(4, Types.VARCHAR);
|
||||
}
|
||||
statement.setBoolean(5, providerInformation.isShownInPlayersTable());
|
||||
statement.setString(6, formatType.name());
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 7, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 10, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 13, providerInformation.getPluginName(), serverUUID);
|
||||
statement.setString(15, providerInformation.getName());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Executable insertProvider() {
|
||||
String sql = "INSERT INTO " + TABLE_NAME + "(" +
|
||||
PROVIDER_NAME + "," +
|
||||
TEXT + "," +
|
||||
DESCRIPTION + "," +
|
||||
PRIORITY + "," +
|
||||
CONDITION + "," +
|
||||
SHOW_IN_PLAYERS_TABLE + ',' +
|
||||
FORMAT_TYPE + "," +
|
||||
TAB_ID + "," +
|
||||
ICON_ID + "," +
|
||||
PLUGIN_ID +
|
||||
") VALUES (?,?,?,?,?,?,?," +
|
||||
ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ExtensionIconTable.STATEMENT_SELECT_ICON_ID + "," +
|
||||
ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + ")";
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getName());
|
||||
statement.setString(2, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(3, description.get());
|
||||
} else {
|
||||
statement.setNull(3, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(4, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(5, condition.get());
|
||||
} else {
|
||||
statement.setNull(5, Types.VARCHAR);
|
||||
}
|
||||
statement.setBoolean(6, providerInformation.isShownInPlayersTable());
|
||||
statement.setString(7, formatType.name());
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 8, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 11, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 14, providerInformation.getPluginName(), serverUUID);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -16,8 +16,13 @@
|
||||
*/
|
||||
package com.djrapitops.plan.extension.implementation.storage.transactions.providers;
|
||||
|
||||
import com.djrapitops.plan.extension.FormatType;
|
||||
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.NumberDataProvider;
|
||||
import com.djrapitops.plan.extension.implementation.providers.StringDataProvider;
|
||||
import com.djrapitops.plan.storage.database.sql.building.Sql;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionTabTable;
|
||||
@ -27,8 +32,6 @@ import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.AND;
|
||||
@ -36,22 +39,18 @@ import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE;
|
||||
import static com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable.*;
|
||||
|
||||
/**
|
||||
* Transaction to store information about a {@link com.djrapitops.plan.extension.implementation.providers.BooleanDataProvider}.
|
||||
* Transaction to store information about a simple {@link DataProvider}.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class StoreBooleanProviderTransaction extends ThrowawayTransaction {
|
||||
public class StoreProviderTransaction extends ThrowawayTransaction {
|
||||
|
||||
private final String providedCondition;
|
||||
private final boolean hidden;
|
||||
private final DataProvider<?> provider;
|
||||
private final UUID serverUUID;
|
||||
private final ProviderInformation providerInformation;
|
||||
|
||||
public StoreBooleanProviderTransaction(DataProvider<Boolean> booleanProvider, String providedCondition, boolean hidden, UUID serverUUID) {
|
||||
this.providedCondition = providedCondition;
|
||||
this.hidden = hidden;
|
||||
public StoreProviderTransaction(DataProvider<?> provider, UUID serverUUID) {
|
||||
this.provider = provider;
|
||||
this.serverUUID = serverUUID;
|
||||
this.providerInformation = booleanProvider.getProviderInformation();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -75,91 +74,100 @@ public class StoreBooleanProviderTransaction extends ThrowawayTransaction {
|
||||
DESCRIPTION + "=?," +
|
||||
PRIORITY + "=?," +
|
||||
CONDITION + "=?," +
|
||||
PROVIDED_CONDITION + "=?," +
|
||||
TAB_ID + '=' + ExtensionTabTable.STATEMENT_SELECT_TAB_ID + ',' +
|
||||
ICON_ID + '=' + ExtensionIconTable.STATEMENT_SELECT_ICON_ID + ',' +
|
||||
TAB_ID + '=' + ExtensionTabTable.STATEMENT_SELECT_TAB_ID + ',' +
|
||||
SHOW_IN_PLAYERS_TABLE + "=?," +
|
||||
HIDDEN + "=?," +
|
||||
SHOW_IN_PLAYERS_TABLE + "=?" +
|
||||
PROVIDED_CONDITION + "=?," +
|
||||
FORMAT_TYPE + "=?," +
|
||||
IS_PLAYER_NAME + "=?" +
|
||||
WHERE + PLUGIN_ID + '=' + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID +
|
||||
AND + PROVIDER_NAME + "=?";
|
||||
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(2, description.get());
|
||||
} else {
|
||||
statement.setNull(2, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(3, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(4, condition.get());
|
||||
} else {
|
||||
statement.setNull(4, Types.VARCHAR);
|
||||
}
|
||||
if (providedCondition != null) {
|
||||
statement.setString(5, providedCondition);
|
||||
} else {
|
||||
statement.setNull(5, Types.VARCHAR);
|
||||
}
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 6, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 9, providerInformation.getIcon());
|
||||
statement.setBoolean(12, hidden);
|
||||
statement.setBoolean(13, providerInformation.isShownInPlayersTable());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 14, providerInformation.getPluginName(), serverUUID);
|
||||
statement.setString(16, providerInformation.getName());
|
||||
ProviderInformation info = provider.getProviderInformation();
|
||||
|
||||
// Found for all providers
|
||||
statement.setString(1, info.getText());
|
||||
Sql.setStringOrNull(statement, 2, info.getDescription().orElse(null));
|
||||
statement.setInt(3, info.getPriority());
|
||||
Sql.setStringOrNull(statement, 4, info.getCondition().orElse(null));
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 5, info.getTab().orElse(null), info.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 8, info.getIcon());
|
||||
statement.setBoolean(11, info.isShownInPlayersTable());
|
||||
|
||||
// Specific provider cases
|
||||
statement.setBoolean(12, BooleanDataProvider.isHidden(provider));
|
||||
Sql.setStringOrNull(statement, 13, BooleanDataProvider.getProvidedCondition(provider).orElse(null));
|
||||
Sql.setStringOrNull(statement, 14, NumberDataProvider.getFormatType(provider).map(FormatType::name).orElse(null));
|
||||
statement.setBoolean(15, StringDataProvider.isPlayerName(provider));
|
||||
|
||||
// Find appropriate provider
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 16, info.getPluginName(), serverUUID);
|
||||
statement.setString(18, info.getName());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Executable insertProvider() {
|
||||
/* PROVIDER_NAME
|
||||
PLUGIN_ID
|
||||
|
||||
TEXT
|
||||
DESCRIPTION // Can be null
|
||||
PRIORITY
|
||||
GROUPABLE // default false
|
||||
CONDITION // Can be null, related to @Conditional
|
||||
ICON_ID
|
||||
TAB_ID // Can be null, related to @Tab
|
||||
SHOW_IN_PLAYERS_TABLE // default false
|
||||
HIDDEN // default false, related to @BooleanProvider
|
||||
PROVIDED_CONDITION // Can be null, related to @BooleanProvider
|
||||
FORMAT_TYPE // Can be null, related to @NumberProvider
|
||||
IS_PLAYER_NAME // default false, related to @StringProvider */
|
||||
String sql = "INSERT INTO " + TABLE_NAME + '(' +
|
||||
PROVIDER_NAME + ',' +
|
||||
TEXT + ',' +
|
||||
DESCRIPTION + ',' +
|
||||
PRIORITY + ',' +
|
||||
CONDITION + ',' +
|
||||
PROVIDED_CONDITION + ',' +
|
||||
HIDDEN + ',' +
|
||||
SHOW_IN_PLAYERS_TABLE + ',' +
|
||||
HIDDEN + ',' +
|
||||
PROVIDED_CONDITION + ',' +
|
||||
FORMAT_TYPE + ',' +
|
||||
IS_PLAYER_NAME + ',' +
|
||||
TAB_ID + ',' +
|
||||
ICON_ID + ',' +
|
||||
PLUGIN_ID +
|
||||
") VALUES (?,?,?,?,?,?,?,?," +
|
||||
") VALUES (?,?,?,?,?,?,?,?,?,?," +
|
||||
ExtensionTabTable.STATEMENT_SELECT_TAB_ID + ',' +
|
||||
ExtensionIconTable.STATEMENT_SELECT_ICON_ID + ',' +
|
||||
ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + ')';
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getName());
|
||||
statement.setString(2, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(3, description.get());
|
||||
} else {
|
||||
statement.setNull(3, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(4, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(5, condition.get());
|
||||
} else {
|
||||
statement.setNull(5, Types.VARCHAR);
|
||||
}
|
||||
if (providedCondition != null) {
|
||||
statement.setString(6, providedCondition);
|
||||
} else {
|
||||
statement.setNull(6, Types.VARCHAR);
|
||||
}
|
||||
statement.setBoolean(7, hidden);
|
||||
statement.setBoolean(8, providerInformation.isShownInPlayersTable());
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 9, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 12, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 15, providerInformation.getPluginName(), serverUUID);
|
||||
ProviderInformation info = provider.getProviderInformation();
|
||||
|
||||
// Found for all providers
|
||||
statement.setString(1, info.getName());
|
||||
statement.setString(2, info.getText());
|
||||
Sql.setStringOrNull(statement, 3, info.getDescription().orElse(null));
|
||||
statement.setInt(4, info.getPriority());
|
||||
Sql.setStringOrNull(statement, 5, info.getCondition().orElse(null));
|
||||
statement.setBoolean(6, info.isShownInPlayersTable());
|
||||
|
||||
// Specific provider cases
|
||||
statement.setBoolean(7, BooleanDataProvider.isHidden(provider));
|
||||
Sql.setStringOrNull(statement, 8, BooleanDataProvider.getProvidedCondition(provider).orElse(null));
|
||||
Sql.setStringOrNull(statement, 9, NumberDataProvider.getFormatType(provider).map(FormatType::name).orElse(null));
|
||||
statement.setBoolean(10, StringDataProvider.isPlayerName(provider));
|
||||
|
||||
// Found for all providers
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 11, info.getTab().orElse(null), info.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 14, info.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 17, info.getPluginName(), serverUUID);
|
||||
}
|
||||
};
|
||||
}
|
@ -1,152 +0,0 @@
|
||||
/*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.djrapitops.plan.extension.implementation.storage.transactions.providers;
|
||||
|
||||
import com.djrapitops.plan.extension.implementation.ProviderInformation;
|
||||
import com.djrapitops.plan.extension.implementation.providers.DataProvider;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionIconTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionPluginTable;
|
||||
import com.djrapitops.plan.storage.database.sql.tables.ExtensionTabTable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ExecStatement;
|
||||
import com.djrapitops.plan.storage.database.transactions.Executable;
|
||||
import com.djrapitops.plan.storage.database.transactions.ThrowawayTransaction;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.AND;
|
||||
import static com.djrapitops.plan.storage.database.sql.building.Sql.WHERE;
|
||||
import static com.djrapitops.plan.storage.database.sql.tables.ExtensionProviderTable.*;
|
||||
|
||||
/**
|
||||
* Transaction to store information about a {@link com.djrapitops.plan.extension.implementation.providers.StringDataProvider}.
|
||||
*
|
||||
* @author Rsl1122
|
||||
*/
|
||||
public class StoreStringProviderTransaction extends ThrowawayTransaction {
|
||||
|
||||
private final boolean playerName;
|
||||
private final UUID serverUUID;
|
||||
private final ProviderInformation providerInformation;
|
||||
|
||||
public StoreStringProviderTransaction(DataProvider<String> provider, boolean playerName, UUID serverUUID) {
|
||||
this.playerName = playerName;
|
||||
this.serverUUID = serverUUID;
|
||||
providerInformation = provider.getProviderInformation();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void performOperations() {
|
||||
execute(storeProvider());
|
||||
}
|
||||
|
||||
private Executable storeProvider() {
|
||||
return connection -> {
|
||||
if (!updateProvider().execute(connection)) {
|
||||
return insertProvider().execute(connection);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
private Executable updateProvider() {
|
||||
String sql = "UPDATE " + TABLE_NAME +
|
||||
" SET " +
|
||||
TEXT + "=?," +
|
||||
DESCRIPTION + "=?," +
|
||||
PRIORITY + "=?," +
|
||||
CONDITION + "=?," +
|
||||
SHOW_IN_PLAYERS_TABLE + "=?," +
|
||||
IS_PLAYER_NAME + "=?," +
|
||||
TAB_ID + "=" + ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ICON_ID + "=" + ExtensionIconTable.STATEMENT_SELECT_ICON_ID +
|
||||
WHERE + PLUGIN_ID + "=" + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID +
|
||||
AND + PROVIDER_NAME + "=?";
|
||||
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(2, description.get());
|
||||
} else {
|
||||
statement.setNull(2, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(3, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(4, condition.get());
|
||||
} else {
|
||||
statement.setNull(4, Types.VARCHAR);
|
||||
}
|
||||
statement.setBoolean(5, providerInformation.isShownInPlayersTable());
|
||||
statement.setBoolean(6, playerName);
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 7, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 10, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 13, providerInformation.getPluginName(), serverUUID);
|
||||
statement.setString(15, providerInformation.getName());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private Executable insertProvider() {
|
||||
String sql = "INSERT INTO " + TABLE_NAME + "(" +
|
||||
PROVIDER_NAME + "," +
|
||||
TEXT + "," +
|
||||
DESCRIPTION + "," +
|
||||
PRIORITY + "," +
|
||||
CONDITION + "," +
|
||||
SHOW_IN_PLAYERS_TABLE + "," +
|
||||
IS_PLAYER_NAME + "," +
|
||||
TAB_ID + "," +
|
||||
ICON_ID + "," +
|
||||
PLUGIN_ID +
|
||||
") VALUES (?,?,?,?,?,?,?," +
|
||||
ExtensionTabTable.STATEMENT_SELECT_TAB_ID + "," +
|
||||
ExtensionIconTable.STATEMENT_SELECT_ICON_ID + "," +
|
||||
ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + ")";
|
||||
return new ExecStatement(sql) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setString(1, providerInformation.getName());
|
||||
statement.setString(2, providerInformation.getText());
|
||||
Optional<String> description = providerInformation.getDescription();
|
||||
if (description.isPresent()) {
|
||||
statement.setString(3, description.get());
|
||||
} else {
|
||||
statement.setNull(3, Types.VARCHAR);
|
||||
}
|
||||
statement.setInt(4, providerInformation.getPriority());
|
||||
Optional<String> condition = providerInformation.getCondition();
|
||||
if (condition.isPresent()) {
|
||||
statement.setString(5, condition.get());
|
||||
} else {
|
||||
statement.setNull(5, Types.VARCHAR);
|
||||
}
|
||||
statement.setBoolean(6, providerInformation.isShownInPlayersTable());
|
||||
statement.setBoolean(7, playerName);
|
||||
ExtensionTabTable.set3TabValuesToStatement(statement, 8, providerInformation.getTab().orElse("No Tab"), providerInformation.getPluginName(), serverUUID);
|
||||
ExtensionIconTable.set3IconValuesToStatement(statement, 11, providerInformation.getIcon());
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, 14, providerInformation.getPluginName(), serverUUID);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
@ -16,6 +16,9 @@
|
||||
*/
|
||||
package com.djrapitops.plan.storage.database.sql.building;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
@ -61,6 +64,14 @@ public abstract class Sql {
|
||||
return TimeUnit.DAYS.toMillis(day + 2L);
|
||||
}
|
||||
|
||||
public static void setStringOrNull(PreparedStatement statement, int index, String value) throws SQLException {
|
||||
if (value != null) {
|
||||
statement.setString(index, value);
|
||||
} else {
|
||||
statement.setNull(index, Types.VARCHAR);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract String epochSecondToDate(String sql);
|
||||
|
||||
public abstract String dateToEpochSecond(String sql);
|
||||
|
@ -49,7 +49,7 @@ public class ExtensionTabTable {
|
||||
AND + PLUGIN_ID + "=" + ExtensionPluginTable.STATEMENT_SELECT_PLUGIN_ID + " LIMIT 1)";
|
||||
|
||||
public static void set3TabValuesToStatement(PreparedStatement statement, int parameterIndex, String tabName, String pluginName, UUID serverUUID) throws SQLException {
|
||||
statement.setString(parameterIndex, tabName);
|
||||
Sql.setStringOrNull(statement, parameterIndex, tabName);
|
||||
ExtensionPluginTable.set2PluginValuesToStatement(statement, parameterIndex + 1, pluginName, serverUUID);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user