Restored Backup and Restore functionality

This commit is contained in:
Rsl1122 2017-09-03 14:59:46 +03:00
parent a91338dab8
commit 62e3aa9988
6 changed files with 49 additions and 79 deletions

View File

@ -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());

View File

@ -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.
* <p>
@ -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<UUID> 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());

View File

@ -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<UUID> 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());

View File

@ -325,4 +325,8 @@ public abstract class Database {
}
public abstract void commit(Connection connection) throws SQLException;
public boolean isUsingMySQL() {
return "mysql".equals(getConfigName());
}
}

View File

@ -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;

View File

@ -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<UUID> 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<UserInfo> 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 {