diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java index 7c6cc7630..78ce31b8d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/SessionCache.java @@ -1,7 +1,10 @@ package main.java.com.djrapitops.plan.data.cache; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.Session; +import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -16,11 +19,13 @@ import java.util.UUID; public class SessionCache { private static final Map activeSessions = new HashMap<>(); + protected final Plan plugin; /** * Class Constructor. */ - public SessionCache() { + public SessionCache(Plan plugin) { + this.plugin = plugin; } public void cacheSession(UUID uuid, Session session) { @@ -33,25 +38,11 @@ public class SessionCache { return; } session.endSession(time); - // TODO DB Save the session. - } - - /** - * Starts a session for a player at the current moment. - * - * @param uuid UUID of the player. - */ - @Deprecated - public void startSession(UUID uuid) { - } - - /** - * Ends a session for a player at the current moment. - * - * @param uuid UUID of the player. - */ - @Deprecated - public void endSession(UUID uuid) { + try { + plugin.getDB().getSessionsTable().saveSession(uuid, session); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } /** diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/FirstLeaveProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/FirstLeaveProcessor.java new file mode 100644 index 000000000..fbcf458ac --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/FirstLeaveProcessor.java @@ -0,0 +1,38 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package main.java.com.djrapitops.plan.data.handling.player; + +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.data.Action; +import main.java.com.djrapitops.plan.database.tables.Actions; + +import java.sql.SQLException; +import java.util.UUID; + +/** + * Processor for inserting a FIRST_LOGOUT Action. + * + * @author Rsl1122 + * @since 4.0.0 + */ +public class FirstLeaveProcessor extends PlayerProcessor { + + private final Action leaveAction; + + public FirstLeaveProcessor(UUID uuid, long time, int messagesSent) { + super(uuid); + leaveAction = new Action(time, Actions.FIRST_LOGOUT, "Messages sent: " + messagesSent); + } + + @Override + public void process() { + try { + Plan.getInstance().getDB().getActionsTable().insertAction(getUUID(), leaveAction); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java index 997a21e87..0ff2b7f77 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/IPUpdateProcessor.java @@ -4,8 +4,11 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.data.cache.GeolocationCacheHandler; +import java.sql.SQLException; import java.util.UUID; /** @@ -26,6 +29,10 @@ public class IPUpdateProcessor extends PlayerProcessor { public void process() { UUID uuid = getUUID(); String country = GeolocationCacheHandler.getCountry(ip); - // TODO DB Update IP & Geolocation + try { + Plan.getInstance().getDB().getIpsTable().updateIP(uuid, ip, country); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java index 85bb0c16b..77b6d2740 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/KickProcessor.java @@ -4,6 +4,10 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; + +import java.sql.SQLException; import java.util.UUID; /** @@ -19,6 +23,10 @@ public class KickProcessor extends PlayerProcessor { @Override public void process() { UUID uuid = getUUID(); - // TODO Update DB Kick +1 + try { + Plan.getInstance().getDB().getUsersTable().kicked(uuid); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java index acb3286c4..368a23420 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/NameProcessor.java @@ -4,6 +4,11 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; +import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.database.Database; + +import java.sql.SQLException; import java.util.UUID; /** @@ -25,6 +30,12 @@ public class NameProcessor extends PlayerProcessor { @Override public void process() { UUID uuid = getUUID(); - // TODO DB Update Name & Nicknames. + Database db = Plan.getInstance().getDB(); + try { + db.getUsersTable().updateName(uuid, playerName); + db.getNicknamesTable().saveUserName(uuid, displayName); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/OPProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/OPProcessor.java new file mode 100644 index 000000000..65b5e3f88 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/OPProcessor.java @@ -0,0 +1,28 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package main.java.com.djrapitops.plan.data.handling.player; + +import java.util.UUID; + +/** + * //TODO Class Javadoc Comment + * + * @author Rsl1122 + */ +public class OPProcessor extends PlayerProcessor { + + private final boolean banned; + + public OPProcessor(UUID uuid, boolean banned) { + super(uuid); + this.banned = banned; + } + + @Override + public void process() { + UUID uuid = getUUID(); + // TODO DB Update Ban status + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java index 14a39e612..e89fc6692 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/handling/player/RegisterProcessor.java @@ -4,8 +4,14 @@ */ package main.java.com.djrapitops.plan.data.handling.player; +import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.data.Action; +import main.java.com.djrapitops.plan.data.listeners.PlanPlayerListener; +import main.java.com.djrapitops.plan.database.Database; +import main.java.com.djrapitops.plan.database.tables.Actions; +import java.sql.SQLException; import java.util.UUID; /** @@ -17,19 +23,31 @@ public class RegisterProcessor extends PlayerProcessor { private final long time; private final int playersOnline; + private final String name; - public RegisterProcessor(UUID uuid, long time, int playersOnline) { + private final PlanPlayerListener listener; + + public RegisterProcessor(PlanPlayerListener listener, UUID uuid, long time, String name, int playersOnline) { super(uuid); + this.listener = listener; this.time = time; this.playersOnline = playersOnline; + this.name = name; } @Override public void process() { UUID uuid = getUUID(); - if (Plan.getInstance().getDB().wasSeenBefore(uuid)) { + Database db = Plan.getInstance().getDB(); + if (db.wasSeenBefore(uuid)) { return; } - // TODO DB Register + listener.addFirstLeaveCheck(uuid); + try { + db.getUsersTable().registerUser(uuid, time, name); + db.getActionsTable().insertAction(uuid, new Action(time, Actions.REGISTERED, "Online: " + playersOnline + " Players")); + } catch (SQLException e) { + Log.toLog(this.getClass().getName(), e); + } } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java index dd2c42b90..8ae8cdb66 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanChatListener.java @@ -38,6 +38,7 @@ public class PlanChatListener implements Listener { } Player p = event.getPlayer(); + // TODO NameCache to DataCache plugin.addToProcessQueue(new NameProcessor(p.getUniqueId(), p.getName(), p.getDisplayName())); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java index 6f22c8f6b..ce57b68c9 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/listeners/PlanPlayerListener.java @@ -16,6 +16,8 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; /** @@ -29,6 +31,8 @@ public class PlanPlayerListener implements Listener { private final Plan plugin; private final DataCache cache; + private final Set playersWithFirstSession; + /** * Class Constructor. * @@ -37,6 +41,7 @@ public class PlanPlayerListener implements Listener { public PlanPlayerListener(Plan plugin) { this.plugin = plugin; cache = plugin.getDataCache(); + playersWithFirstSession = new HashSet<>(); } @EventHandler(priority = EventPriority.MONITOR) @@ -95,9 +100,9 @@ public class PlanPlayerListener implements Listener { cache.cacheSession(uuid, Session.start(time, world, gm)); plugin.addToProcessQueue( - new RegisterProcessor(uuid, time, playersOnline), //TODO Add required variables after UsersTable is done. + new RegisterProcessor(this, uuid, time, playerName, playersOnline), new IPUpdateProcessor(uuid, ip), - new NameProcessor(uuid, playerName, displayName), + new NameProcessor(uuid, playerName, displayName), // TODO NameCache to DataCache new DBCommitProcessor(plugin.getDB()) ); } @@ -120,5 +125,16 @@ public class PlanPlayerListener implements Listener { new BanProcessor(uuid, player.isBanned()), new EndSessionProcessor(uuid, time) ); + + int messagesSent = 0; // TODO messages Sent on first session + + if (playersWithFirstSession.contains(uuid)) { + plugin.addToProcessQueue(new FirstLeaveProcessor(uuid, time, messagesSent)); + } + } + + // TODO MOVE TO DATACACHE + public void addFirstLeaveCheck(UUID uuid) { + playersWithFirstSession.add(uuid); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/Database.java b/Plan/src/main/java/com/djrapitops/plan/database/Database.java index 1fb81f82a..f0da49cf7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/Database.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/Database.java @@ -328,4 +328,8 @@ public abstract class Database { } public abstract void commit() throws SQLException; + + public ActionsTable getActionsTable() { + return actionsTable; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java index 316229e55..220b79925 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/SessionsTable.java @@ -20,6 +20,8 @@ import java.util.stream.Collectors; */ public class SessionsTable extends UserIDTable { + // TODO getLastPlayed(UUID, UUID) + private final String columnID = "id"; private final String columnSessionStart = "session_start"; private final String columnSessionEnd = "session_end"; diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java new file mode 100644 index 000000000..4a2360a27 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UserInfoTable.java @@ -0,0 +1,34 @@ +/* + * Licence is provided in the jar as license.yml also here: + * https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml + */ +package main.java.com.djrapitops.plan.database.tables; + +import main.java.com.djrapitops.plan.database.databases.SQLDB; + +/** + * //TODO Class Javadoc Comment + * + * @author Rsl1122 + */ +public class UserInfoTable extends UserIDTable { + + //TODO Server Specific Table + private final String columnUserID = "user_ id"; + private final String columnRegistered = "registered"; + private final String columnOP = "opped"; + private final String columnBanned = "banned"; + private final String columnServerID = "server_id"; + + private final ServerTable serverTable; + + public UserInfoTable(SQLDB db, boolean usingMySQL) { + super("plan_user_info", db, usingMySQL); + serverTable = db.getServerTable(); + } + + @Override + public boolean createTable() { + return false; + } +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java index e8140395b..3a16e608f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/UsersTable.java @@ -1,12 +1,9 @@ package main.java.com.djrapitops.plan.database.tables; +import com.djrapitops.plugin.utilities.Verify; import main.java.com.djrapitops.plan.Log; -import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.database.databases.SQLDB; -import main.java.com.djrapitops.plan.database.sql.Select; -import main.java.com.djrapitops.plan.database.sql.Sql; -import main.java.com.djrapitops.plan.database.sql.TableSqlParser; -import main.java.com.djrapitops.plan.utilities.Benchmark; +import main.java.com.djrapitops.plan.database.sql.*; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -20,36 +17,9 @@ public class UsersTable extends Table { private final String columnID = "id"; private final String columnUUID = "uuid"; - @Deprecated - private final String columnGeolocation; - @Deprecated - private final String columnLastGM; - @Deprecated - private final String columnLastGMSwapTime; - @Deprecated - private final String columnPlayTime; - @Deprecated - private final String columnLoginTimes; - @Deprecated - private final String columnLastPlayed; - @Deprecated - private final String columnDeaths; - @Deprecated - private final String columnMobKills; - private final String columnRegistered; - private final String columnName; - //TODO Server Specific Table (Also has registered on it) - @Deprecated - private final String columnOP; - @Deprecated - private final String columnBanned; - // - @Deprecated - private final String columnContainsBukkitData; - @Deprecated - private final String columnLastWorldSwapTime; - @Deprecated - private final String columnLastWorld; + private final String columnRegistered = "registered"; + private final String columnName = "name"; + private final String columnTimesKicked = "times_kicked"; public final String statementSelectID; @@ -60,24 +30,6 @@ public class UsersTable extends Table { public UsersTable(SQLDB db, boolean usingMySQL) { super("plan_users", db, usingMySQL); statementSelectID = "(" + Select.from(tableName, tableName + "." + columnID).where(columnUUID + "=?").toString() + ")"; - - columnGeolocation = "geolocation"; - columnLastGM = "last_gamemode"; - columnLastGMSwapTime = "last_gamemode_swap"; - columnPlayTime = "play_time"; - columnLoginTimes = "login_times"; - columnLastPlayed = "last_played"; - columnMobKills = "mob_kills"; - - columnDeaths = "deaths"; - columnRegistered = "registered"; - columnOP = "opped"; - columnName = "name"; - columnBanned = "banned"; - columnContainsBukkitData = "contains_bukkit_data"; - - columnLastWorldSwapTime = "last_world_swap"; - columnLastWorld = "last_world"; } /** @@ -89,37 +41,12 @@ public class UsersTable extends Table { execute(TableSqlParser.createTable(tableName) .primaryKeyIDColumn(usingMySQL, columnID, Sql.INT) .column(columnUUID, Sql.varchar(36)).notNull().unique() - .column(columnGeolocation, Sql.varchar(50)).notNull() - .column(columnLastGM, Sql.varchar(15)).notNull() - .column(columnLastGMSwapTime, Sql.LONG).notNull() - .column(columnPlayTime, Sql.LONG).notNull() - .column(columnLoginTimes, Sql.INT).notNull() - .column(columnLastPlayed, Sql.LONG).notNull() - .column(columnDeaths, Sql.INT).notNull() - .column(columnMobKills, Sql.INT).notNull() .column(columnRegistered, Sql.LONG).notNull() - .column(columnOP, Sql.BOOL).notNull().defaultValue(false) .column(columnName, Sql.varchar(16)).notNull() - .column(columnBanned, Sql.BOOL).notNull().defaultValue(false) - .column(columnContainsBukkitData, Sql.BOOL).notNull().defaultValue(false) - .column(columnLastWorld, Sql.varchar(255)).notNull() - .column(columnLastWorldSwapTime, Sql.LONG).notNull() + .column(columnTimesKicked, Sql.INT).notNull().defaultValue("0") .primaryKey(usingMySQL, columnID) .toString() ); - int version = getVersion(); - if (version < 3) { - alterTablesV3(); - } - if (version < 4) { - alterTablesV4(); - } - if (version < 5) { - alterTablesV5(); - } - if (version < 8) { - alterTablesV8(); - } return true; } catch (SQLException ex) { Log.toLog(this.getClass().getName(), ex); @@ -127,100 +54,15 @@ public class UsersTable extends Table { } } - private void alterTablesV8() { - addColumns( - columnLastWorldSwapTime + " bigint NOT NULL DEFAULT 0", - columnLastWorld + " varchar(255) NOT NULL DEFAULT 'Unknown'" - ); - } - - private void alterTablesV5() { - removeColumns("age", "gender"); - } - - private void alterTablesV4() { - addColumns( - columnContainsBukkitData + " boolean NOT NULL DEFAULT 0", - columnOP + " boolean NOT NULL DEFAULT 0", - columnBanned + " boolean NOT NULL DEFAULT 0", - columnName + " varchar(16) NOT NULL DEFAULT 'Unknown'", - columnRegistered + " bigint NOT NULL DEFAULT 0" - ); - } - - private void alterTablesV3() { - addColumns( - columnDeaths + " integer NOT NULL DEFAULT 0", - columnMobKills + " integer NOT NULL DEFAULT 0" - ); - removeColumns("player_kills"); - } - - /** - * @param uuid - * @return - * @throws SQLException - */ - public int getUserId(UUID uuid) throws SQLException { - return getUserId(uuid.toString()); - } - - /** - * @param uuid - * @return - * @throws SQLException - */ - public int getUserId(String uuid) throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - try { - int userId = -1; - statement = prepareStatement("SELECT " + columnID + " FROM " + tableName + " WHERE (" + columnUUID + "=?)"); - statement.setString(1, uuid); - set = statement.executeQuery(); - while (set.next()) { - userId = set.getInt(columnID); - } - return userId; - } finally { - close(set); - close(statement); - } - } - - /** - * @param userID - * @return - * @throws SQLException - */ - public UUID getUserUUID(String userID) throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - try { - UUID uuid = null; - statement = prepareStatement("SELECT " + columnUUID + " FROM " + tableName + " WHERE (" + columnID + "=?)"); - statement.setString(1, userID); - set = statement.executeQuery(); - while (set.next()) { - uuid = UUID.fromString(set.getString(columnUUID)); - } - return uuid; - } finally { - close(set); - close(statement); - } - } - /** * @return @throws SQLException */ public Set getSavedUUIDs() throws SQLException { - Benchmark.start("Get Saved UUIDS"); PreparedStatement statement = null; ResultSet set = null; try { Set uuids = new HashSet<>(); - statement = prepareStatement("SELECT " + columnUUID + " FROM " + tableName); + statement = prepareStatement(Select.from(tableName, columnUUID).toString()); set = statement.executeQuery(); while (set.next()) { UUID uuid = UUID.fromString(set.getString(columnUUID)); @@ -228,9 +70,7 @@ public class UsersTable extends Table { } return uuids; } finally { - close(set); - close(statement); - Benchmark.stop("Database", "Get Saved UUIDS"); + close(set, statement); } } @@ -239,18 +79,10 @@ public class UsersTable extends Table { * @return */ public boolean removeUser(UUID uuid) { - return removeUser(uuid.toString()); - } - - /** - * @param uuid - * @return - */ - public boolean removeUser(String uuid) { PreparedStatement statement = null; try { statement = prepareStatement("DELETE FROM " + tableName + " WHERE (" + columnUUID + "=?)"); - statement.setString(1, uuid); + statement.setString(1, uuid.toString()); statement.execute(); return true; } catch (SQLException ex) { @@ -260,89 +92,6 @@ public class UsersTable extends Table { } } - /** - * @param uuids - * @return - * @throws SQLException - */ - public List getContainsBukkitData(Collection uuids) throws SQLException { - PreparedStatement statement = null; - ResultSet set = null; - List containsBukkitData = new ArrayList<>(); - try { - statement = prepareStatement("SELECT " + columnContainsBukkitData + ", " + columnUUID + " FROM " + tableName); - set = statement.executeQuery(); - while (set.next()) { - String uuidS = set.getString(columnUUID); - UUID uuid = UUID.fromString(uuidS); - if (!uuids.contains(uuid)) { - continue; - } - boolean contains = set.getBoolean(columnContainsBukkitData); - if (contains) { - containsBukkitData.add(uuid); - } - } - } finally { - close(statement); - close(set); - } - return containsBukkitData; - } - - /** - * @param uuids - * @return - * @throws SQLException - */ - public Map getUserIds(Collection uuids) throws SQLException { - Benchmark.start("Get User IDS Multiple"); - PreparedStatement statement = null; - ResultSet set = null; - try { - Map ids = new HashMap<>(); - statement = prepareStatement("SELECT " + columnUUID + ", " + columnID + " FROM " + tableName); - set = statement.executeQuery(); - while (set.next()) { - String uuidS = set.getString(columnUUID); - UUID uuid = UUID.fromString(uuidS); - if (!uuids.contains(uuid)) { - continue; - } - ids.put(uuid, set.getInt(columnID)); - } - return ids; - } finally { - close(set); - close(statement); - Benchmark.stop("Database", "Get User IDS Multiple"); - } - } - - /** - * @return @throws SQLException - */ - public Map getAllUserIds() throws SQLException { - Benchmark.start("Get User IDS ALL"); - PreparedStatement statement = null; - ResultSet set = null; - try { - Map ids = new HashMap<>(); - statement = prepareStatement("SELECT " + columnUUID + ", " + columnID + " FROM " + tableName); - set = statement.executeQuery(); - while (set.next()) { - String uuidS = set.getString(columnUUID); - UUID uuid = UUID.fromString(uuidS); - ids.put(uuid, set.getInt(columnID)); - } - return ids; - } finally { - close(set); - close(statement); - Benchmark.stop("Database", "Get User IDS ALL"); - } - } - /** * @return */ @@ -350,6 +99,10 @@ public class UsersTable extends Table { return columnID; } + public String getColumnUUID() { + return columnUUID; + } + /** * @param playername * @return @@ -359,7 +112,9 @@ public class UsersTable extends Table { PreparedStatement statement = null; ResultSet set = null; try { - statement = prepareStatement("SELECT " + columnUUID + " FROM " + tableName + " WHERE (UPPER(" + columnName + ")=UPPER(?))"); + statement = prepareStatement(Select.from(tableName, columnUUID) + .where("UPPER(" + columnName + ")=UPPER(?)") + .toString()); statement.setString(1, playername); set = statement.executeQuery(); if (set.next()) { @@ -368,17 +123,111 @@ public class UsersTable extends Table { } return null; } finally { - close(set); + close(set, statement); + } + } + + public List getRegisterDates() throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement(Select.from(tableName, columnRegistered).toString()); + set = statement.executeQuery(); + List registerDates = new ArrayList<>(); + while (set.next()) { + registerDates.add(set.getLong(columnRegistered)); + } + return registerDates; + } finally { + close(set, statement); + } + } + + /** + * Register a new user (UUID) to the database. + * + * @param uuid UUID of the player. + * @param registered Register date. + * @param name Name of the player. + * @throws SQLException + * @throws IllegalArgumentException If uuid or name are null. + */ + public void registerUser(UUID uuid, long registered, String name) throws SQLException { + Verify.nullCheck(uuid, name); + + PreparedStatement statement = null; + try { + statement = prepareStatement(Insert.values(tableName, + columnUUID, + columnRegistered, + columnName)); + statement.setString(1, uuid.toString()); + statement.setLong(2, registered); + statement.setString(3, name); + statement.execute(); + } finally { close(statement); } } - public List getUserData(List uuids) { - // TODO Rewrite method for new UserData objects. - return new ArrayList<>(); + public boolean isRegistered(UUID uuid) throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement(Select.from(tableName, columnID) + .where(columnUUID + "=?") + .toString()); + statement.setString(1, uuid.toString()); + set = statement.executeQuery(); + return set.next(); + } finally { + close(set, statement); + } } - public String getColumnUUID() { - return columnUUID; + public void updateName(UUID uuid, String name) throws SQLException { + PreparedStatement statement = null; + try { + statement = prepareStatement(Update.values(tableName, columnName) + .where(columnUUID + "=?") + .toString()); + statement.setString(1, name); + statement.setString(2, uuid.toString()); + statement.execute(); + } finally { + close(statement); + } + } + + public int getTimesKicked(UUID uuid) throws SQLException { + PreparedStatement statement = null; + ResultSet set = null; + try { + statement = prepareStatement(Select.from(tableName, columnTimesKicked) + .where(columnUUID + "=?") + .toString()); + statement.setString(1, uuid.toString()); + set = statement.executeQuery(); + if (set.next()) { + return set.getInt(columnTimesKicked); + } + return 0; + } finally { + close(set, statement); + } + } + + public void kicked(UUID uuid) throws SQLException { + PreparedStatement statement = null; + try { + statement = prepareStatement(Update.values(tableName, columnTimesKicked) + .where(columnUUID + "=?") + .toString()); + statement.setInt(1, getTimesKicked(uuid) + 1); + statement.setString(2, uuid.toString()); + statement.execute(); + } finally { + close(statement); + } } } diff --git a/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java b/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java index ddc00eb91..bb44f6262 100644 --- a/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java +++ b/Plan/src/main/java/com/djrapitops/plan/queue/processing/ProcessingQueue.java @@ -1,5 +1,6 @@ package main.java.com.djrapitops.plan.queue.processing; +import main.java.com.djrapitops.plan.Log; import main.java.com.djrapitops.plan.queue.Consumer; import main.java.com.djrapitops.plan.queue.Queue; import main.java.com.djrapitops.plan.queue.Setup; @@ -47,7 +48,11 @@ class ProcessConsumer extends Consumer { if (process == null) { return; } - process.process(); + try { + process.process(); + } catch (Exception | NoClassDefFoundError | NoSuchFieldError | NoSuchMethodError e) { + Log.toLog(this.getTaskName() + ":" + process.getClass().getSimpleName(), e); + } } @Override