From 62e3aa9988e8fb1cf437c28dfb35a5625fa2d48d Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 3 Sep 2017 14:59:46 +0300 Subject: [PATCH] Restored Backup and Restore functionality --- .../commands/manage/ManageBackupCommand.java | 7 +--- .../commands/manage/ManageMoveCommand.java | 42 +++++-------------- .../commands/manage/ManageRestoreCommand.java | 34 +++++---------- .../djrapitops/plan/database/Database.java | 4 ++ .../tables/move/BatchOperationTable.java | 16 ++++--- .../plan/utilities/ManageUtils.java | 25 +++++------ 6 files changed, 49 insertions(+), 79 deletions(-) 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 index 397858b4b..339803812 100644 --- 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 @@ -73,11 +73,8 @@ public class ManageBackupCommand extends SubCommand { public void run() { try { sender.sendMessage(Locale.get(Msg.MANAGE_INFO_START).parse()); - if (ManageUtils.backup(args[0], database)) { - sender.sendMessage(Locale.get(Msg.MANAGE_INFO_COPY_SUCCESS).toString()); - } else { - sender.sendMessage(Locale.get(Msg.MANAGE_INFO_FAIL).toString()); - } + ManageUtils.backup(args[0], database); + sender.sendMessage(Locale.get(Msg.MANAGE_INFO_COPY_SUCCESS).toString()); } catch (Exception e) { Log.toLog(this.getClass().getName() + " " + getTaskName(), e); sender.sendMessage(Locale.get(Msg.MANAGE_INFO_FAIL).toString()); 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 abb1dba69..0c760ddeb 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 @@ -14,9 +14,6 @@ import main.java.com.djrapitops.plan.locale.Msg; import main.java.com.djrapitops.plan.utilities.Check; import main.java.com.djrapitops.plan.utilities.ManageUtils; -import java.util.Collection; -import java.util.UUID; - /** * This manage subcommand is used to move all data from one database to another. *

@@ -72,22 +69,14 @@ public class ManageMoveCommand extends SubCommand { return true; } - // TODO Move command. -// final Database fromDatabase = ManageUtils.getDB(plugin, fromDB); + try { + final Database fromDatabase = ManageUtils.getDB(plugin, fromDB); + final Database toDatabase = ManageUtils.getDB(plugin, toDB); -// if (!Check.isTrue(Verify.notNull(fromDatabase), Locale.get(Msg.MANAGE_FAIL_FAULTY_DB).toString(), sender)) { -// Log.error(fromDB + " was null!"); -// return true; -// } - -// final Database toDatabase = ManageUtils.getDB(plugin, toDB); - -// if (!Check.isTrue(Verify.notNull(toDatabase), Locale.get(Msg.MANAGE_FAIL_FAULTY_DB).toString(), sender)) { -// Log.error(toDB + " was null!"); -// return true; -// } - -// runMoveTask(fromDatabase, toDatabase, sender); + runMoveTask(fromDatabase, toDatabase, sender); + } catch (Exception e) { + sender.sendMessage(Locale.get(Msg.MANAGE_FAIL_FAULTY_DB).toString()); + } return true; } @@ -96,21 +85,12 @@ public class ManageMoveCommand extends SubCommand { @Override public void run() { try { - final Collection uuids = ManageUtils.getUUIDS(fromDatabase); - if (Check.isTrue(Verify.isEmpty(uuids), Locale.get(Msg.MANAGE_FAIL_NO_PLAYERS) + " (" + fromDatabase.getName() + ")", sender)) { - return; - } - sender.sendMessage(Locale.get(Msg.MANAGE_INFO_START).parse()); - if (ManageUtils.clearAndCopy(toDatabase, fromDatabase)) { - sender.sendMessage(Locale.get(Msg.MANAGE_INFO_MOVE_SUCCESS).toString()); - boolean movedToCurrentDatabase = Verify.equalsIgnoreCase(toDatabase.getConfigName(), plugin.getDB().getConfigName()); - - Check.isTrue(!movedToCurrentDatabase, Locale.get(Msg.MANAGE_INFO_CONFIG_REMINDER).toString(), sender); - } else { - sender.sendMessage(Locale.get(Msg.MANAGE_INFO_FAIL).toString()); - } + ManageUtils.clearAndCopy(toDatabase, fromDatabase); + sender.sendMessage(Locale.get(Msg.MANAGE_INFO_MOVE_SUCCESS).toString()); + boolean movedToCurrentDatabase = Verify.equalsIgnoreCase(toDatabase.getConfigName(), plugin.getDB().getConfigName()); + Check.isTrue(!movedToCurrentDatabase, Locale.get(Msg.MANAGE_INFO_CONFIG_REMINDER).toString(), sender); } catch (Exception e) { Log.toLog(this.getClass().getName() + " " + getTaskName(), e); sender.sendMessage(Locale.get(Msg.MANAGE_INFO_FAIL).toString()); 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 index 072491bcb..e480601a7 100644 --- 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 @@ -16,8 +16,6 @@ import main.java.com.djrapitops.plan.utilities.Check; import main.java.com.djrapitops.plan.utilities.ManageUtils; import java.io.File; -import java.util.Collection; -import java.util.UUID; /** * This manage subcommand is used to restore a backup.db file in the @@ -61,15 +59,13 @@ public class ManageRestoreCommand extends SubCommand { return true; } - // TODO Restore command -// final Database database = ManageUtils.getDB(plugin, db); -// -// if (!Check.isTrue(Verify.notNull(database), Locale.get(Msg.MANAGE_FAIL_FAULTY_DB).toString(), sender)) { -// Log.error(db + " was null!"); -// return true; -// } -// -// runRestoreTask(args, sender, database); + try { + final Database database = ManageUtils.getDB(plugin, db); + + runRestoreTask(args, sender, database); + } catch (Exception e) { + sender.sendMessage(Locale.get(Msg.MANAGE_FAIL_FAULTY_DB).toString()); + } return true; } @@ -95,20 +91,12 @@ public class ManageRestoreCommand extends SubCommand { sender.sendMessage(Locale.get(Msg.MANAGE_INFO_START).parse()); - final Collection uuids = ManageUtils.getUUIDS(backupDB); - if (!Check.isTrue(!Verify.isEmpty(uuids), Locale.get(Msg.MANAGE_FAIL_NO_PLAYERS) + " (" + backupDBName + ")", sender)) { - return; - } - - if (ManageUtils.clearAndCopy(database, backupDB)) { - if (database.getConfigName().equals(plugin.getDB().getConfigName())) { + ManageUtils.clearAndCopy(database, backupDB); + if (database.getConfigName().equals(plugin.getDB().getConfigName())) { // plugin.getDataCache().getCommandUseFromDb(); - } - - sender.sendMessage(Locale.get(Msg.MANAGE_INFO_COPY_SUCCESS).toString()); - } else { - sender.sendMessage(Locale.get(Msg.MANAGE_INFO_FAIL).toString()); } + + sender.sendMessage(Locale.get(Msg.MANAGE_INFO_COPY_SUCCESS).toString()); } catch (Exception e) { Log.toLog(this.getClass().getName() + " " + getTaskName(), e); sender.sendMessage(Locale.get(Msg.MANAGE_INFO_FAIL).toString()); 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 3b0f3a59e..bdfa2e85f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/Database.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/Database.java @@ -325,4 +325,8 @@ public abstract class Database { } public abstract void commit(Connection connection) throws SQLException; + + public boolean isUsingMySQL() { + return "mysql".equals(getConfigName()); + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/database/tables/move/BatchOperationTable.java b/Plan/src/main/java/com/djrapitops/plan/database/tables/move/BatchOperationTable.java index 483fd32f0..e7b4d04d5 100644 --- a/Plan/src/main/java/com/djrapitops/plan/database/tables/move/BatchOperationTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/database/tables/move/BatchOperationTable.java @@ -5,6 +5,7 @@ package main.java.com.djrapitops.plan.database.tables.move; import main.java.com.djrapitops.plan.api.exceptions.DBCreateTableException; +import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.SQLDB; import main.java.com.djrapitops.plan.database.tables.ServerTable; import main.java.com.djrapitops.plan.database.tables.Table; @@ -37,12 +38,12 @@ public class BatchOperationTable extends Table { /** * Constructor, call to access copy functionality. * - * @param db - * @param usingMySQL - * @throws IllegalStateException if db.init has not been called. + * @param database + * @throws IllegalStateException if database.init has not been called. + * @throws ClassCastException if database is not SQLDB. */ - public BatchOperationTable(SQLDB db, boolean usingMySQL) { - super("", db, usingMySQL); + public BatchOperationTable(Database database) { + super("", (SQLDB) database, false); if (!db.isOpen()) { throw new IllegalStateException("Given Database had not been initialized."); } @@ -57,6 +58,11 @@ public class BatchOperationTable extends Table { table.removeAllData(); } + @Override + public void removeAllData() throws SQLException { + db.removeAllData(); + } + public void copyEverything(BatchOperationTable toDB) throws SQLException { if (toDB.equals(this)) { return; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java index cf4590dce..c67f4506e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/ManageUtils.java @@ -6,6 +6,7 @@ import main.java.com.djrapitops.plan.Plan; import main.java.com.djrapitops.plan.api.exceptions.DatabaseInitException; import main.java.com.djrapitops.plan.database.Database; import main.java.com.djrapitops.plan.database.databases.SQLiteDB; +import main.java.com.djrapitops.plan.database.tables.move.BatchOperationTable; import java.sql.SQLException; import java.util.*; @@ -29,17 +30,17 @@ public class ManageUtils { * @param copyFromDB Database you want to backup. * @return success? */ - public static boolean backup(String dbName, Database copyFromDB) throws DatabaseInitException { + public static void backup(String dbName, Database copyFromDB) throws DatabaseInitException, SQLException { Plan plugin = Plan.getInstance(); String timeStamp = new Date().toString().substring(4, 10).replace(" ", "-"); String fileName = dbName + "-backup-" + timeStamp; SQLiteDB backupDB = new SQLiteDB(plugin, fileName); Collection uuids = ManageUtils.getUUIDS(copyFromDB); if (uuids.isEmpty()) { - return false; + return; } backupDB.init(); - return clearAndCopy(backupDB, copyFromDB); + clearAndCopy(backupDB, copyFromDB); } /** @@ -66,18 +67,12 @@ public class ManageUtils { * @param copyFromDB Database where data will be copied from * @return success? */ - public static boolean clearAndCopy(Database clearAndCopyToDB, Database copyFromDB) { -// try { - //clearAndCopyToDB.removeAllData(); - //TODO List allUserData = copyFromDB.getUserDataForUUIDS(copyFromDB.getSavedUUIDs()); - // clearAndCopyToDB.saveMultipleUserData(allUserData); -// TODO clearAndCopyToDB.getCommandUseTable().saveCommandUse(copyFromDB.getCommandUseTable().getCommandUse()); - //TODO clearAndCopyToDB.getTpsTable().saveTPSData(copyFromDB.getTpsTable().getTPSData()); -// } catch (SQLException | NullPointerException e) { -// Log.toLog("ManageUtils.move", e); -// return false; -// } - return true; + public static void clearAndCopy(Database clearAndCopyToDB, Database copyFromDB) throws SQLException { + BatchOperationTable toDB = new BatchOperationTable(clearAndCopyToDB); + BatchOperationTable fromDB = new BatchOperationTable(copyFromDB); + + toDB.removeAllData(); + fromDB.copyEverything(toDB); } public static Database getDB(Plan plugin, String dbName) throws DatabaseInitException {