diff --git a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreNumberProviderTransaction.java b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreNumberProviderTransaction.java index fba7b4825..7fb55fbf8 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreNumberProviderTransaction.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/extension/implementation/storage/transactions/providers/StoreNumberProviderTransaction.java @@ -16,13 +16,24 @@ */ package com.djrapitops.plan.extension.implementation.storage.transactions.providers; +import com.djrapitops.plan.db.access.ExecStatement; +import com.djrapitops.plan.db.access.Executable; import com.djrapitops.plan.db.access.transactions.Transaction; +import com.djrapitops.plan.db.sql.tables.ExtensionIconTable; +import com.djrapitops.plan.db.sql.tables.ExtensionPluginTable; +import com.djrapitops.plan.db.sql.tables.ExtensionTabTable; import com.djrapitops.plan.extension.FormatType; import com.djrapitops.plan.extension.implementation.ProviderInformation; import com.djrapitops.plan.extension.implementation.providers.DataProvider; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.util.UUID; +import static com.djrapitops.plan.db.sql.parsing.Sql.AND; +import static com.djrapitops.plan.db.sql.parsing.Sql.WHERE; +import static com.djrapitops.plan.db.sql.tables.ExtensionProviderTable.*; + /** * Transaction to store information about a {@link com.djrapitops.plan.extension.implementation.providers.NumberDataProvider}. * @@ -30,20 +41,87 @@ import java.util.UUID; */ public class StoreNumberProviderTransaction extends Transaction { - private final DataProvider provider; private final FormatType formatType; private final UUID serverUUID; + private final ProviderInformation providerInformation; public StoreNumberProviderTransaction(DataProvider provider, FormatType formatType, UUID serverUUID) { - this.provider = provider; this.formatType = formatType; this.serverUUID = serverUUID; + this.providerInformation = provider.getProviderInformation(); } @Override protected void performOperations() { - ProviderInformation providerInformation = provider.getProviderInformation(); + execute(storeProvider()); + } - // TODO Store provider in a table + 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 + "=?," + + 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()); + statement.setString(2, providerInformation.getDescription()); + statement.setInt(3, providerInformation.getPriority()); + statement.setString(4, providerInformation.getCondition().orElse(null)); + statement.setString(5, formatType.name()); + ExtensionTabTable.set3TabValuesToStatement(statement, 6, providerInformation.getTab().orElse(null), providerInformation.getPluginName(), serverUUID); + ExtensionIconTable.set3IconValuesToStatement(statement, 9, providerInformation.getIcon()); + ExtensionPluginTable.set2PluginValuesToStatement(statement, 11, providerInformation.getPluginName(), serverUUID); + statement.setString(13, providerInformation.getName()); + } + }; + } + + private Executable insertProvider() { + String sql = "INSERT INTO " + TABLE_NAME + "(" + + PROVIDER_NAME + "," + + TEXT + "," + + DESCRIPTION + "," + + PRIORITY + "," + + CONDITION + "," + + 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()); + statement.setString(3, providerInformation.getDescription()); + statement.setInt(4, providerInformation.getPriority()); + statement.setString(5, providerInformation.getCondition().orElse(null)); + statement.setString(6, formatType.name()); + ExtensionTabTable.set3TabValuesToStatement(statement, 7, providerInformation.getTab().orElse(null), providerInformation.getPluginName(), serverUUID); + ExtensionIconTable.set3IconValuesToStatement(statement, 10, providerInformation.getIcon()); + ExtensionPluginTable.set2PluginValuesToStatement(statement, 12, providerInformation.getPluginName(), serverUUID); + } + }; } } \ No newline at end of file