diff --git a/Plan/src/main/java/com/djrapitops/plan/Phrase.java b/Plan/src/main/java/com/djrapitops/plan/Phrase.java index 8a4c0314d..1e664aae1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/Phrase.java +++ b/Plan/src/main/java/com/djrapitops/plan/Phrase.java @@ -69,13 +69,16 @@ public enum Phrase { ERROR_WEBSERVER_OFF_INSPECT(ChatColor.YELLOW + "" + PREFIX + "This command can be only used if webserver/planlite is enabled on this server."), // MANAGE_ERROR_INCORRECT_PLUGIN(ChatColor.RED + "" + PREFIX + "Plugin not supported: "), + MANAGE_PROCESS_START(ARROWS_RIGHT +""+COLOR_SEC.color() +" Processing data.."), MANAGE_ERROR_PLUGIN_NOT_ENABLED(ChatColor.RED + "" + PREFIX + "Plugin is not enabled: "), MANAGE_ERROR_INCORRECT_DB(ChatColor.RED + "" + PREFIX + "Incorrect database! (sqlite/mysql accepted): "), MANAGE_ERROR_SAME_DB(ChatColor.RED + "" + PREFIX + "Can't move to the same database!"), MANAGE_DATABASE_FAILURE(ChatColor.RED + "" + PREFIX + "One of the databases was not initialized properly."), MANAGE_DB_CONFIG_REMINDER(ChatColor.YELLOW + "" + PREFIX + "Remember to swap to the new database and reload plugin"), MANAGE_ERROR_NO_PLAYERS(ChatColor.RED + "" + PREFIX + "Database has no player data!"), + MANAGE_ERROR_BACKUP_FILE_NOT_FOUND(ChatColor.RED + "" + PREFIX + "Backup file doesn't exist!"), MANAGE_MOVE_SUCCESS(ChatColor.GREEN + "" + PREFIX + "All data moved successfully!"), + MANAGE_COPY_SUCCESS(ChatColor.GREEN + "" + PREFIX + "All data copied successfully!"), MANAGE_CLEAR_SUCCESS(ChatColor.GREEN + "" + PREFIX + "All data cleared successfully!"), // CMD_FOOTER(COLOR_TER.color() + "" + ARROWS_RIGHT), @@ -114,6 +117,10 @@ public enum Phrase { return text; } + public String parse() { + return this.toString(); + } + public String parse(String... p) { String returnValue = this.toString(); for (int i = 0; i < p.length; i++) { @@ -128,4 +135,12 @@ public enum Phrase { public ChatColor color() { return color; } + + public void setText(String text) { + this.text = text; + } + + public void setColor(String colorCode) { + this.color = ChatColor.getByChar(colorCode); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java index 0fe391f28..0a4c21a57 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/ManageCommand.java @@ -36,6 +36,8 @@ public class ManageCommand extends SubCommand { commands.add(new ManageMoveCommand(plugin)); commands.add(new ManageCombineCommand(plugin)); commands.add(new ManageHotswapCommand(plugin)); + commands.add(new ManageBackupCommand(plugin)); + commands.add(new ManageRestoreCommand(plugin)); commands.add(new ManageStatusCommand(plugin)); commands.add(new ManageImportCommand(plugin)); commands.add(new ManageRemoveCommand(plugin)); diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageBackupCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageBackupCommand.java new file mode 100644 index 000000000..ce5119f9d --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageBackupCommand.java @@ -0,0 +1,107 @@ +package main.java.com.djrapitops.plan.command.commands.manage; + +import com.djrapitops.plan.Phrase; +import com.djrapitops.plan.Plan; +import com.djrapitops.plan.command.CommandType; +import com.djrapitops.plan.command.SubCommand; +import com.djrapitops.plan.data.ServerData; +import com.djrapitops.plan.database.Database; +import com.djrapitops.plan.database.databases.SQLiteDB; +import com.djrapitops.plan.utilities.FormatUtils; +import java.util.Date; +import java.util.HashMap; +import java.util.Set; +import java.util.UUID; +import main.java.com.djrapitops.plan.utilities.DataCombineUtils; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.scheduler.BukkitRunnable; + +/** + * + * @author Rsl1122 + */ +public class ManageBackupCommand extends SubCommand { + + private Plan plugin; + + /** + * Class Constructor. + * + * @param plugin Current instance of Plan + */ + public ManageBackupCommand(Plan plugin) { + super("backup", "plan.manage", "Backup a database to .db file", CommandType.CONSOLE, ""); + + this.plugin = plugin; + } + + /** + * Subcommand Manage backup. + * + * @param sender + * @param cmd + * @param commandLabel + * @param args Player's name or nothing - if empty sender's name is used. + * @return true in all cases. + */ + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + try { + if (args.length < 1) { + sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS.toString() + " Use /plan manage backup "); + return true; + } + String db = args[0].toLowerCase(); + if (!db.equals("mysql") && !db.equals("sqlite")) { + sender.sendMessage(Phrase.MANAGE_ERROR_INCORRECT_DB + db); + return true; + } + Database database = null; + for (Database sqldb : plugin.getDatabases()) { + if (db.equalsIgnoreCase(sqldb.getConfigName())) { + database = sqldb; + if (!database.init()) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + return true; + } + } + } + if (database == null) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + plugin.logError(db + " was null!"); + return true; + } + final Database copyfromDB = database; + (new BukkitRunnable() { + @Override + public void run() { + Date now = new Date(); + SQLiteDB backupDB = new SQLiteDB(plugin, + "backup-"+now.toString().substring(4, 10).replaceAll(" ", "-").replaceAll(":", "-")); + + if (!backupDB.init()) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + this.cancel(); + return; + } + sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse()); + backupDB.removeAllData(); + Set uuids = copyfromDB.getSavedUUIDs(); + for (UUID uuid : uuids) { + backupDB.saveUserData(uuid, copyfromDB.getUserData(uuid)); + } + HashMap serverDataHashMap = copyfromDB.getServerDataHashMap(); + backupDB.saveServerDataHashMap(serverDataHashMap); + backupDB.saveCommandUse(DataCombineUtils.getCommandUse(serverDataHashMap)); + sender.sendMessage(Phrase.MANAGE_COPY_SUCCESS.toString()); + this.cancel(); + } + }).runTaskAsynchronously(plugin); + } catch (NullPointerException e) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + } + return true; + } +} diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java index 38ea56a36..3796d0eb7 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageClearCommand.java @@ -76,6 +76,7 @@ public class ManageClearCommand extends SubCommand { (new BukkitRunnable() { @Override public void run() { + sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse()); clearThisDB.removeAllData(); sender.sendMessage(Phrase.MANAGE_CLEAR_SUCCESS+""); this.cancel(); diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageCombineCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageCombineCommand.java index 820cdcce5..84e8a9f07 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageCombineCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageCombineCommand.java @@ -8,7 +8,6 @@ import com.djrapitops.plan.data.ServerData; import com.djrapitops.plan.data.UserData; import com.djrapitops.plan.database.Database; -import com.djrapitops.plan.utilities.MiscUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -111,74 +110,66 @@ public class ManageCombineCommand extends SubCommand { } final List fromUUIDS = new ArrayList<>(); final List toUUIDS = new ArrayList<>(); - try {for (OfflinePlayer p : offlinePlayers) { - UUID uuid = p.getUniqueId(); - if (fromDatabase.wasSeenBefore(uuid)) { - fromUUIDS.add(uuid); + try { + for (OfflinePlayer p : offlinePlayers) { + UUID uuid = p.getUniqueId(); + if (fromDatabase.wasSeenBefore(uuid)) { + fromUUIDS.add(uuid); + } + if (toDatabase.wasSeenBefore(uuid)) { + toUUIDS.add(uuid); + } } - if (toDatabase.wasSeenBefore(uuid)) { - toUUIDS.add(uuid); - } - } - if (fromUUIDS.isEmpty() && toUUIDS.isEmpty()) { - sender.sendMessage(Phrase.MANAGE_ERROR_NO_PLAYERS + " (" + fromDB + ")"); - return true; - } - - final Database moveFromDB = fromDatabase; - final Database moveToDB = toDatabase; - (new BukkitRunnable() { - @Override - public void run() { - HashMap allFromUserData = new HashMap<>(); - HashMap allToUserData = new HashMap<>(); - for (UUID uuid : fromUUIDS) { - allFromUserData.put(uuid, moveFromDB.getUserData(uuid)); - } - for (UUID uuid : toUUIDS) { - allToUserData.put(uuid, moveToDB.getUserData(uuid)); - } - Set uuids = new HashSet<>(); - uuids.addAll(toUUIDS); - uuids.addAll(fromUUIDS); - - List combinedUserData = DataCombineUtils.combineUserDatas(allFromUserData, allToUserData, uuids); - - HashMap fromServerData = moveFromDB.getServerDataHashMap(); - HashMap toServerData = moveToDB.getServerDataHashMap(); - HashMap combinedServerData = DataCombineUtils.combineServerDatas(fromServerData, toServerData); - - HashMap commandUse = DataCombineUtils.combineCommandUses(getCommandUse(fromServerData), getCommandUse(toServerData)); - - moveToDB.removeAllData(); - - moveToDB.saveServerDataHashMap(combinedServerData); - moveToDB.saveMultipleUserData(combinedUserData); - moveToDB.saveCommandUse(commandUse); - - sender.sendMessage(Phrase.MANAGE_MOVE_SUCCESS + ""); - if (!toDB.equals(plugin.getDB().getConfigName())) { - sender.sendMessage(Phrase.MANAGE_DB_CONFIG_REMINDER + ""); - } - this.cancel(); + if (fromUUIDS.isEmpty() && toUUIDS.isEmpty()) { + sender.sendMessage(Phrase.MANAGE_ERROR_NO_PLAYERS + " (" + fromDB + ")"); + return true; } - public HashMap getCommandUse(HashMap fromServerData) { - ServerData sData = null; - for (long sDataKey : fromServerData.keySet()) { - sData = fromServerData.get(sDataKey); - break; + final Database moveFromDB = fromDatabase; + final Database moveToDB = toDatabase; + (new BukkitRunnable() { + @Override + public void run() { + sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse()); + HashMap allFromUserData = new HashMap<>(); + HashMap allToUserData = new HashMap<>(); + for (UUID uuid : fromUUIDS) { + allFromUserData.put(uuid, moveFromDB.getUserData(uuid)); + } + for (UUID uuid : toUUIDS) { + allToUserData.put(uuid, moveToDB.getUserData(uuid)); + } + Set uuids = new HashSet<>(); + uuids.addAll(toUUIDS); + uuids.addAll(fromUUIDS); + + List combinedUserData = DataCombineUtils.combineUserDatas(allFromUserData, allToUserData, uuids); + + HashMap fromServerData = moveFromDB.getServerDataHashMap(); + HashMap toServerData = moveToDB.getServerDataHashMap(); + HashMap combinedServerData = DataCombineUtils.combineServerDatas(fromServerData, toServerData); + + HashMap commandUse = DataCombineUtils.combineCommandUses(DataCombineUtils.getCommandUse(fromServerData), DataCombineUtils.getCommandUse(toServerData)); + + moveToDB.removeAllData(); + + moveToDB.saveServerDataHashMap(combinedServerData); + moveToDB.saveMultipleUserData(combinedUserData); + moveToDB.saveCommandUse(commandUse); + + sender.sendMessage(Phrase.MANAGE_MOVE_SUCCESS + ""); + if (!toDB.equals(plugin.getDB().getConfigName())) { + sender.sendMessage(Phrase.MANAGE_DB_CONFIG_REMINDER + ""); + } + this.cancel(); } - HashMap fromCommandUse = null; - if (sData != null) { - fromCommandUse = sData.getCommandUsage(); - } - return fromCommandUse; - } - }).runTaskAsynchronously(plugin); + + }).runTaskAsynchronously(plugin); + } catch (NullPointerException e) { - sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE+""); + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); } return true; } + } diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java index 86b70bf54..c86fc0ee5 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageImportCommand.java @@ -16,7 +16,6 @@ import java.util.UUID; import main.java.com.djrapitops.plan.data.importing.Importer; import main.java.com.djrapitops.plan.data.importing.OnTimeImporter; import org.bukkit.Bukkit; -import static org.bukkit.Bukkit.getOfflinePlayer; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -24,12 +23,6 @@ import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; /** * diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java index 9778312cd..780591bbb 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageMoveCommand.java @@ -124,6 +124,7 @@ public class ManageMoveCommand extends SubCommand { @Override public void run() { try { + sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse()); moveToDB.removeAllData(); List allUserData = new ArrayList<>(); for (UUID uuid : uuids) { diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java index 8d59b924c..e7566a48f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRemoveCommand.java @@ -16,13 +16,6 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.scheduler.BukkitRunnable; import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; -import static org.bukkit.Bukkit.getOfflinePlayer; /** * @@ -95,6 +88,7 @@ public class ManageRemoveCommand extends SubCommand { (new BukkitRunnable() { @Override public void run() { + sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse()); plugin.getDB().removeAccount(uuid.toString()); sender.sendMessage(hColor+""+Phrase.ARROWS_RIGHT+" "+oColor+"Data of "+hColor+playerName+oColor+" was removed from Database "+hColor+plugin.getDB().getConfigName()+oColor+"."); this.cancel(); diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRestoreCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRestoreCommand.java new file mode 100644 index 000000000..a6640e257 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageRestoreCommand.java @@ -0,0 +1,119 @@ +package main.java.com.djrapitops.plan.command.commands.manage; + +import com.djrapitops.plan.Phrase; +import com.djrapitops.plan.Plan; +import com.djrapitops.plan.command.CommandType; +import com.djrapitops.plan.command.SubCommand; +import com.djrapitops.plan.data.ServerData; +import com.djrapitops.plan.database.Database; +import com.djrapitops.plan.database.databases.SQLiteDB; +import java.io.File; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Set; +import java.util.UUID; +import main.java.com.djrapitops.plan.utilities.DataCombineUtils; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.scheduler.BukkitRunnable; + +/** + * + * @author Rsl1122 + */ +public class ManageRestoreCommand extends SubCommand { + + private Plan plugin; + + /** + * Class Constructor. + * + * @param plugin Current instance of Plan + */ + public ManageRestoreCommand(Plan plugin) { + super("restore", "plan.restore", "Restore a database from a backup file", CommandType.CONSOLE, " [-a]"); + + this.plugin = plugin; + } + + /** + * Subcommand Manage backup. + * + * @param sender + * @param cmd + * @param commandLabel + * @param args Player's name or nothing - if empty sender's name is used. + * @return true in all cases. + */ + @Override + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { + try { + if (args.length < 2) { + sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS.toString() + " Use /plan manage restore [-a]"); + return true; + } + String db = args[1].toLowerCase(); + if (!db.equals("mysql") && !db.equals("sqlite")) { + sender.sendMessage(Phrase.MANAGE_ERROR_INCORRECT_DB + db); + return true; + } + if (!Arrays.asList(args).contains("-a")) { + sender.sendMessage(Phrase.COMMAND_ADD_CONFIRMATION_ARGUMENT.toString() + " Data in " + args[1] + "-database will be rewritten!"); + return true; + } + Database database = null; + for (Database sqldb : plugin.getDatabases()) { + if (db.equalsIgnoreCase(sqldb.getConfigName())) { + database = sqldb; + if (!database.init()) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + return true; + } + } + } + if (database == null) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + plugin.logError(db + " was null!"); + return true; + } + final Database copyToDB = database; + (new BukkitRunnable() { + @Override + public void run() { + String backupDBName = args[0]; + + File backupDBFile = new File(plugin.getDataFolder(), backupDBName + (backupDBName.contains(".db") ? "" : ".db")); + if (!backupDBFile.exists()) { + sender.sendMessage(Phrase.MANAGE_ERROR_BACKUP_FILE_NOT_FOUND + " "+args[0]); + this.cancel(); + return; + } + if (backupDBName.contains(".db")) { + backupDBName = backupDBName.replace(".db", ""); + } + SQLiteDB backupDB = new SQLiteDB(plugin, backupDBName); + if (!backupDB.init()) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + this.cancel(); + return; + } + sender.sendMessage(Phrase.MANAGE_PROCESS_START.parse()); + copyToDB.removeAllData(); + Set uuids = backupDB.getSavedUUIDs(); + for (UUID uuid : uuids) { + copyToDB.saveUserData(uuid, backupDB.getUserData(uuid)); + } + HashMap serverDataHashMap = backupDB.getServerDataHashMap(); + copyToDB.saveServerDataHashMap(serverDataHashMap); + copyToDB.saveCommandUse(DataCombineUtils.getCommandUse(serverDataHashMap)); + sender.sendMessage(Phrase.MANAGE_COPY_SUCCESS.toString()); + this.cancel(); + } + }).runTaskAsynchronously(plugin); + } catch (NullPointerException e) { + sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + ""); + } + return true; + } +} 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 cdfae54e3..81c4c18a1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/Database.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/Database.java @@ -144,4 +144,5 @@ public abstract class Database { public abstract void removeAllData(); public abstract void saveServerDataHashMap(HashMap serverData); public abstract void saveCommandUse(HashMap data); + public abstract Set getSavedUUIDs(); } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java index 180b6030a..2e360ed0e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLDB.java @@ -15,6 +15,7 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -72,7 +73,7 @@ public abstract class SQLDB extends Database { private String ipsColumnIP; private String versionName; - + public SQLDB(Plan plugin, boolean supportsModification) { super(plugin); this.plugin = plugin; @@ -124,7 +125,7 @@ public abstract class SQLDB extends Database { serverdataColumnPlayersOnline = "players_online"; versionName = "plan_version"; - + // Maintains Connection. (new BukkitRunnable() { @Override @@ -308,6 +309,22 @@ public abstract class SQLDB extends Database { return userId; } + @Override + public Set getSavedUUIDs() { + Set uuids = new HashSet<>(); + try { + PreparedStatement statement = connection.prepareStatement("SELECT " + userColumnUUID + " FROM " + userName); + ResultSet set = statement.executeQuery(); + while (set.next()) { + uuids.add(UUID.fromString(set.getString(userColumnUUID))); + } + set.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + return uuids; + } + @Override public HashMap getServerDataHashMap() { HashMap commandUse = getCommandUse(); @@ -423,15 +440,17 @@ public abstract class SQLDB extends Database { + commanduseColumnTimesUsed + ") VALUES (?, ?)"); boolean commitRequired = false; - for (String key : data.keySet()) { - statement.setString(1, key); - statement.setInt(2, data.get(key)); - statement.addBatch(); - commitRequired = true; - } - statement.executeBatch(); - if (commitRequired) { - connection.commit(); + if (!data.isEmpty()) { + for (String key : data.keySet()) { + statement.setString(1, key); + statement.setInt(2, data.get(key)); + statement.addBatch(); + commitRequired = true; + } + statement.executeBatch(); + if (commitRequired) { + connection.commit(); + } } statement.close(); connection.setAutoCommit(true); @@ -888,11 +907,11 @@ public abstract class SQLDB extends Database { public void removeAllData() { checkConnection(); - try { + try { connection.prepareStatement("DELETE FROM " + locationName).executeUpdate(); connection.prepareStatement("DELETE FROM " + nicknamesName).executeUpdate(); connection.prepareStatement("DELETE FROM " + ipsName).executeUpdate(); - connection.prepareStatement("DELETE FROM " + gamemodetimesName).executeUpdate(); + connection.prepareStatement("DELETE FROM " + gamemodetimesName).executeUpdate(); connection.prepareStatement("DELETE FROM " + commanduseName).executeUpdate(); connection.prepareStatement("DELETE FROM " + serverdataName).executeUpdate(); connection.prepareStatement("DELETE FROM " + userName).executeUpdate(); diff --git a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java index 706b1c530..ac6a307a1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/databases/SQLiteDB.java @@ -15,6 +15,7 @@ import java.sql.SQLException; public class SQLiteDB extends SQLDB { private final Plan plugin; + private final String dbName; /** * Class Constructor. @@ -22,9 +23,14 @@ public class SQLiteDB extends SQLDB { * @param plugin Current instance of Plan */ public SQLiteDB(Plan plugin) { + this(plugin, "database"); + } + + public SQLiteDB(Plan plugin, String dbName) { super(plugin, false); this.plugin = plugin; + this.dbName = dbName; } /** @@ -34,10 +40,14 @@ public class SQLiteDB extends SQLDB { */ @Override public Connection getNewConnection() { + return getNewConnection(dbName); + } + + public Connection getNewConnection(String dbName) { try { Class.forName("org.sqlite.JDBC"); - return DriverManager.getConnection("jdbc:sqlite:" + new File(plugin.getDataFolder(), "database.db").getAbsolutePath()); + return DriverManager.getConnection("jdbc:sqlite:" + new File(plugin.getDataFolder(), dbName+".db").getAbsolutePath()); } catch (ClassNotFoundException | SQLException e) { return null; } diff --git a/Plan/src/main/java/com/djrapitops/plan/ui/Html.java b/Plan/src/main/java/com/djrapitops/plan/ui/Html.java index aa2bfcef5..e8061e0d1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/ui/Html.java +++ b/Plan/src/main/java/com/djrapitops/plan/ui/Html.java @@ -47,7 +47,7 @@ public enum Html { BANNED("| "+SPAN.parse(COLOR_4.parse()+"Banned")), OPERATOR(", Operator (Op)"), ONLINE("| "+SPAN.parse(COLOR_2.parse()+"Online")), - OFFLINE("| "+SPAN.parse(COLOR_4.parse()+"Online")), + OFFLINE("| "+SPAN.parse(COLOR_4.parse()+"Offline")), ACTIVE("| Player is Active"), INACTIVE("| Player is inactive"), ERROR_LIST("Error Creating List

"), diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/DataCombineUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/DataCombineUtils.java index 2d32bdddd..9eeaef575 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/DataCombineUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/DataCombineUtils.java @@ -142,4 +142,17 @@ public class DataCombineUtils { return combinedData; } + public static HashMap getCommandUse(HashMap fromServerData) { + ServerData sData = null; + for (long sDataKey : fromServerData.keySet()) { + sData = fromServerData.get(sDataKey); + break; + } + HashMap fromCommandUse = null; + if (sData != null) { + fromCommandUse = sData.getCommandUsage(); + } + return fromCommandUse; + } + }