diff --git a/src/main/java/netneutrality/db/AsyncMySqlAction.java b/src/main/java/netneutrality/db/AsyncMySqlAction.java index 2e84098..6370575 100644 --- a/src/main/java/netneutrality/db/AsyncMySqlAction.java +++ b/src/main/java/netneutrality/db/AsyncMySqlAction.java @@ -21,11 +21,13 @@ public class AsyncMySqlAction { private final Object[] params; private final MysqlDatabase.CommandType type; private final MysqlDatabase db; + public final String tableName; public AsyncMySqlAction(MysqlDatabase db, String sql, Object... params) { this.db = db; this.sqlString = sql; this.params = params; + this.tableName = sqlString.toUpperCase().split(" ")[1]; type = MysqlDatabase.CommandType.stringToType(sqlString.toUpperCase().split(" ")[0]); } @@ -56,7 +58,7 @@ public class AsyncMySqlAction { case SELECT: ThreadManager.dispatch(executor, () -> { ResultSet result = db.prepareAndExecute(this.sqlString, this.params); - MTableModel table = MysqlDatabase.convertToTableModel(result); + MTableModel table = MysqlDatabase.convertToTableModel(result, tableName); success.accept(table); }); @@ -85,7 +87,7 @@ public class AsyncMySqlAction { case SELECT: Callable task = () -> { ResultSet result = db.prepareAndExecute(this.sqlString, this.params); - MTableModel table = MysqlDatabase.convertToTableModel(result); + MTableModel table = MysqlDatabase.convertToTableModel(result, tableName); return table; }; diff --git a/src/main/java/netneutrality/db/MysqlDatabase.java b/src/main/java/netneutrality/db/MysqlDatabase.java index 6f1f67c..78b49a2 100644 --- a/src/main/java/netneutrality/db/MysqlDatabase.java +++ b/src/main/java/netneutrality/db/MysqlDatabase.java @@ -248,13 +248,42 @@ public class MysqlDatabase { /** * @param rs The ResultSet returned by the SELECT query * @return a {@link MTableModel} with the appropriate column and rows - * @throws SQLException + */ + public static MTableModel convertToTableModel(ResultSet rs, String tableName) { + MTableModel table = new MTableModel(); + + try { + ResultSetMetaData metadata = rs.getMetaData(); + + for (int i = 1; i < metadata.getColumnCount() + 1; i++) { + table.addColumn(metadata.getColumnName(i)); + } + + while (rs.next()) { + MRowModel row = new MRowModel(rs.getRow() - 1); + for (int i = 0; i < metadata.getColumnCount(); i++) { + row.addColumnToRow(rs.getObject(i + 1)); + } + table.addRow(row); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + + return table; + } + + /** + * @param rs The ResultSet returned by the SELECT query + * @return a {@link MTableModel} with the appropriate column and rows */ public static MTableModel convertToTableModel(ResultSet rs) { MTableModel table = new MTableModel(); try { ResultSetMetaData metadata = rs.getMetaData(); + for (int i = 1; i < metadata.getColumnCount() + 1; i++) { table.addColumn(metadata.getColumnName(i)); } diff --git a/src/main/java/netneutrality/db/controllers/DBBlacklist.java b/src/main/java/netneutrality/db/controllers/DBBlacklist.java index 352f85d..fc6c757 100644 --- a/src/main/java/netneutrality/db/controllers/DBBlacklist.java +++ b/src/main/java/netneutrality/db/controllers/DBBlacklist.java @@ -1,14 +1,11 @@ package netneutrality.db.controllers; -import java.sql.ResultSet; import java.util.ArrayList; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; -import netneutrality.ThreadManager; import netneutrality.db.AbstractController; -import netneutrality.db.MysqlDatabase; import netneutrality.db.models.MBlacklist; import netneutrality.db.models.MTableModel; import org.slf4j.Logger; @@ -81,20 +78,15 @@ public class DBBlacklist extends AbstractController { @Deprecated public void getBlacklistForWord(String word, String serverId, Consumer success) { - ThreadManager.getExecutor("db-action").submit(() -> { + database.prepareAndExecuteAsync("SELECT * FROM blacklist WHERE word = ? AND serverId = ?", word, serverId).async((table -> { MBlacklist blacklisted = null; - if (isAlreadyBlacklisted(word, serverId)) { - ResultSet rs = database.prepareAndExecute("SELECT * FROM blacklist WHERE word = ? AND serverId = ?", word, serverId); - MTableModel table = MysqlDatabase.convertToTableModel(rs); - - if (table.getNbRows() > 0) { - blacklisted = new MBlacklist(table.getRow(0)); - } + if (table.getNbRows() > 0) { + blacklisted = new MBlacklist(table.getRow(0)); } - success.accept(blacklisted); - }); + + })); } diff --git a/src/main/java/netneutrality/db/entities/AbstractEntity.java b/src/main/java/netneutrality/db/entities/AbstractEntity.java new file mode 100644 index 0000000..bcc2873 --- /dev/null +++ b/src/main/java/netneutrality/db/entities/AbstractEntity.java @@ -0,0 +1,48 @@ +package netneutrality.db.entities;/* + * Copyright (c) anthorob + * + * https://xtremcommunity.com/ + * https://discord.gg/CdFcyQ + */ + +import netneutrality.MusicBot; +import netneutrality.db.DBController; +import netneutrality.db.models.MTableModel; + +public abstract class AbstractEntity implements EntityInterface { + private final String primaryKey; + private final String[] primaryKeys; + protected MTableModel table; + + + public AbstractEntity(String primaryKey, String... primaryKeys) throws ArrayIndexOutOfBoundsException { + this.primaryKey = primaryKey; + this.primaryKeys = primaryKeys; + + fillTableModel(); + + if (!table.isEmpty()) + convertFromTableModel(table); + } + + private void fillTableModel() throws ArrayIndexOutOfBoundsException { + StringBuilder whereClause = new StringBuilder(); + for (String pk : getPrimaryKeys()) { + whereClause.append(pk + " = ?"); + + if (getPrimaryKeys().length > 1) + whereClause.append(" AND "); + } + + + String sql = "SELECT * FROM " + getTableName() + " WHERE " + whereClause; + System.out.println(sql + " - pk: " + primaryKey); + + if (this.primaryKeys.length > 0) + this.table = DBController.get().prepareAndExecuteAsync(sql, this.primaryKey, this.primaryKeys).blocking(); + else + this.table = DBController.get().prepareAndExecuteAsync(sql, this.primaryKey).blocking(); + System.out.println(table); + } + +} diff --git a/src/main/java/netneutrality/db/entities/EntityInterface.java b/src/main/java/netneutrality/db/entities/EntityInterface.java index 65940aa..98cae86 100644 --- a/src/main/java/netneutrality/db/entities/EntityInterface.java +++ b/src/main/java/netneutrality/db/entities/EntityInterface.java @@ -7,8 +7,13 @@ package netneutrality.db.entities;/* import netneutrality.db.models.MTableModel; -public interface EntityInterface { +public interface EntityInterface { - public E ConvertFromTableModel(MTableModel table); + String getTableName(); + String[] getPrimaryKeys(); + boolean exists(); + + + void convertFromTableModel(MTableModel table); } diff --git a/src/main/java/netneutrality/db/entities/Guild.java b/src/main/java/netneutrality/db/entities/Guild.java deleted file mode 100644 index c562498..0000000 --- a/src/main/java/netneutrality/db/entities/Guild.java +++ /dev/null @@ -1,16 +0,0 @@ -package netneutrality.db.entities;/* - * Copyright (c) anthorob - * - * https://xtremcommunity.com/ - * https://discord.gg/CdFcyQ - */ - - -public class Guild { - - private int guildID; - - public Guild() { - - } -} diff --git a/src/main/java/netneutrality/db/entities/OGuild.java b/src/main/java/netneutrality/db/entities/OGuild.java new file mode 100644 index 0000000..5d8decd --- /dev/null +++ b/src/main/java/netneutrality/db/entities/OGuild.java @@ -0,0 +1,53 @@ +package netneutrality.db.entities;/* + * Copyright (c) anthorob + * + * https://xtremcommunity.com/ + * https://discord.gg/CdFcyQ + */ + + +import netneutrality.db.models.MTableModel; + +public class OGuild extends AbstractEntity { + + private String guildID; + public boolean logging; + public String logchannel; + + public OGuildSetting settings; + + public OGuild(String guildId) { + super(guildId); + + this.settings = new OGuildSetting(this); + } + + @Override + public boolean exists() { + return guildID != null; + } + + public String getGuildID() { + return guildID; + } + + @Override + public String getTableName() { + return "guilds"; + } + + @Override + public String[] getPrimaryKeys() { + return new String[] {"guild_id"}; + } + + + @Override + public void convertFromTableModel(MTableModel table) { + this.guildID = (String) table.getRow(0).get(0); + this.logging = ((Integer) table.getRow(0).get(1)) == 1; + this.logchannel = (String) table.getRow(0).get(2); + + } + +} diff --git a/src/main/java/netneutrality/db/entities/OGuildSetting.java b/src/main/java/netneutrality/db/entities/OGuildSetting.java new file mode 100644 index 0000000..c463c73 --- /dev/null +++ b/src/main/java/netneutrality/db/entities/OGuildSetting.java @@ -0,0 +1,74 @@ +package netneutrality.db.entities;/* + * Copyright (c) anthorob + * + * https://xtremcommunity.com/ + * https://discord.gg/CdFcyQ + */ + +import netneutrality.db.models.MRowModel; +import netneutrality.db.models.MTableModel; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class OGuildSetting extends AbstractEntity { + private final OGuild guild; + private Map settings; + + public OGuildSetting(OGuild OGuild) { + super(OGuild.getGuildID()); + + this.guild = OGuild; + } + + public OGuild getGuild() { + return guild; + } + + public Map getSettings() { + return settings; + } + + public String getSettingByKey(String key) { + if (settings.containsKey(key)) { + return settings.get(key); + } + + return null; + } + + @Override + public String getTableName() { + return "guild_settings"; + } + + @Override + public String[] getPrimaryKeys() { + return new String[] {"guild_id"}; + } + + @Override + public boolean exists() { + return !settings.isEmpty(); + } + + @Override + public void convertFromTableModel(MTableModel table) { + settings = new HashMap<>(); + + List columns = table.getColumns(); + MRowModel row = table.getRowModel(0); + + for (int i = 0; i < columns.size(); i++) { + if (i == 0) continue; + + String key = columns.get(i).replace('_', '.'); + String value = (row.getItem(i) == null ? "" : row.getItem(i).toString()); + + settings.put(key, value); + } + + + } +} diff --git a/src/main/java/netneutrality/db/entities/OPermission.java b/src/main/java/netneutrality/db/entities/OPermission.java new file mode 100644 index 0000000..8f35ffe --- /dev/null +++ b/src/main/java/netneutrality/db/entities/OPermission.java @@ -0,0 +1,66 @@ +package netneutrality.db.entities;/* + * Copyright (c) anthorob + * + * https://xtremcommunity.com/ + * https://discord.gg/CdFcyQ + */ + +import netneutrality.command.CommandType; +import netneutrality.db.models.MTableModel; + +import java.util.List; + +public class OPermission extends AbstractEntity { + private final String guild_id; + private final String role_id; + public CommandType type; + public String command; + + public OPermission(String guild_id, String role_id) { + super(guild_id, role_id); + + this.guild_id = guild_id; + this.role_id = role_id; + } + + @Override + public boolean exists() { + return guild_id != null && role_id != null; + } + + public String getGuildId() { + return guild_id; + } + + public String getRoleId() { + return role_id; + } + + public CommandType getType() { + return type; + } + + public String getCommand() { + return command; + } + + + @Override + public String getTableName() { + return "permissions"; + } + + @Override + public String[] getPrimaryKeys() { + return new String[] {"guild_id", "role_id"}; + } + + + @Override + public void convertFromTableModel(MTableModel table) { + + this.type = (CommandType) table.getRow(0).get(2); + this.command = (String) table.getRow(0).get(3); + + } +} diff --git a/src/main/java/netneutrality/db/entities/Permission.java b/src/main/java/netneutrality/db/entities/Permission.java deleted file mode 100644 index 553b1ed..0000000 --- a/src/main/java/netneutrality/db/entities/Permission.java +++ /dev/null @@ -1,53 +0,0 @@ -package netneutrality.db.entities;/* - * Copyright (c) anthorob - * - * https://xtremcommunity.com/ - * https://discord.gg/CdFcyQ - */ - -import netneutrality.command.CommandType; -import netneutrality.db.models.MTableModel; - -import java.util.List; - -public class Permission implements EntityInterface { - private final String guild_id; - private final String role_id; - private final CommandType type; - private final String command; - - public Permission(String guild_id, String role_id, CommandType type, String command) { - this.guild_id = guild_id; - this.role_id = role_id; - this.type = type; - this.command = command; - } - - public Permission(List row) { - this.guild_id = (String) row.get(0); - this.role_id = (String) row.get(1); - this.type = (CommandType) row.get(2); - this.command = (String) row.get(3); - } - - public String getGuild_id() { - return guild_id; - } - - public String getRole_id() { - return role_id; - } - - public CommandType getType() { - return type; - } - - public String getCommand() { - return command; - } - - @Override - public Permission ConvertFromTableModel(MTableModel table) { - return null; - } -} diff --git a/src/main/java/netneutrality/db/models/MRowModel.java b/src/main/java/netneutrality/db/models/MRowModel.java index 0d0dae4..a277bee 100644 --- a/src/main/java/netneutrality/db/models/MRowModel.java +++ b/src/main/java/netneutrality/db/models/MRowModel.java @@ -11,17 +11,27 @@ import java.util.Arrays; import java.util.List; public class MRowModel { - private ArrayList row; + private final ArrayList row; + private int rowIndex; public MRowModel() { row = new ArrayList<>(); } + public MRowModel(Integer rowIndex) { + row = new ArrayList<>(); + this.rowIndex = rowIndex; + } + public MRowModel(Object... objs) { row = new ArrayList<>(); row.addAll(Arrays.asList(objs)); } + public int getRowIndex() { + return rowIndex; + } + public void addColumnToRow(Object obj) { row.add(obj); } diff --git a/src/main/java/netneutrality/db/models/MRowsModel.java b/src/main/java/netneutrality/db/models/MRowsModel.java index 2cce3b0..fd9da06 100644 --- a/src/main/java/netneutrality/db/models/MRowsModel.java +++ b/src/main/java/netneutrality/db/models/MRowsModel.java @@ -9,7 +9,8 @@ package netneutrality.db.models; import java.util.ArrayList; public class MRowsModel { - private ArrayList rows; + private final ArrayList rows; + private String[] primaryKeys; public MRowsModel() { rows = new ArrayList<>(); @@ -26,6 +27,10 @@ public class MRowsModel { return null; } + public int size() { + return rows.size(); + } + public void addColumnInRow(int index, Object obj) { rows.get(index).addColumnToRow(obj); } diff --git a/src/main/java/netneutrality/db/models/MTableModel.java b/src/main/java/netneutrality/db/models/MTableModel.java index 5a93c95..e69d5a4 100644 --- a/src/main/java/netneutrality/db/models/MTableModel.java +++ b/src/main/java/netneutrality/db/models/MTableModel.java @@ -3,36 +3,49 @@ package netneutrality.db.models; /* * Copyright (c) anthorob * - * This file is closed-source. It should not be distributed or copied in any way or form + * https://xtremcommunity.com/ + * https://discord.gg/CdFcyQ */ - import java.util.Arrays; import java.util.LinkedList; import java.util.List; public class MTableModel { + private String name; private final List column; private final MRowsModel rows; public MTableModel() { + this.name = null; this.column = new LinkedList<>(); this.rows = new MRowsModel(); } public MTableModel(String tableName) { + this.name = tableName; this.column = new LinkedList<>(); this.rows = new MRowsModel(); } public MTableModel(String... columns) { + this.name = null; this.column = new LinkedList<>(); this.rows = new MRowsModel(); this.column.addAll(Arrays.asList(columns)); } + public String getName() { + return name; + } + + public void setName(String name) { + if (this.name != null) + this.name = name; + } + public MTableModel addColumn(String name) { column.add(name); return this; @@ -75,6 +88,6 @@ public class MTableModel { @Override public String toString() { - return "Column: [" + column + "], Rows (" + getNbRows() + "): [" + rows + "]"; + return "Column: " + column + ", Rows (" + getNbRows() + "): " + rows; } } diff --git a/src/main/java/netneutrality/handler/ReactionHandler.java b/src/main/java/netneutrality/handler/ReactionHandler.java new file mode 100644 index 0000000..512a834 --- /dev/null +++ b/src/main/java/netneutrality/handler/ReactionHandler.java @@ -0,0 +1,31 @@ +package netneutrality.handler;/* + * Copyright (c) anthorob + * + * https://xtremcommunity.com/ + * https://discord.gg/CdFcyQ + */ + +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent; +import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionAddEvent; +import net.dv8tion.jda.api.events.message.guild.react.GuildMessageReactionRemoveEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.jetbrains.annotations.NotNull; + +public class ReactionHandler extends ListenerAdapter { + + @Override + public void onGuildMessageReactionAdd(@NotNull GuildMessageReactionAddEvent event) { + Member member = event.getMember(); + } + + @Override + public void onGuildMessageReactionRemove(@NotNull GuildMessageReactionRemoveEvent event) { + super.onGuildMessageReactionRemove(event); + } + + @Override + public void onGuildMessageUpdate(@NotNull GuildMessageUpdateEvent event) { + super.onGuildMessageUpdate(event); + } +}