Plan/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageHotswapCommand.java

73 lines
2.3 KiB
Java

package main.java.com.djrapitops.plan.command.commands.manage;
import java.sql.SQLException;
import main.java.com.djrapitops.plan.Phrase;
import main.java.com.djrapitops.plan.Plan;
import main.java.com.djrapitops.plan.command.CommandType;
import main.java.com.djrapitops.plan.command.SubCommand;
import main.java.com.djrapitops.plan.database.Database;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
/**
*
* @author Rsl1122
*/
public class ManageHotswapCommand extends SubCommand {
private Plan plugin;
/**
* Class Constructor.
*
* @param plugin Current instance of Plan
*/
public ManageHotswapCommand(Plan plugin) {
super("hotswap", "plan.manage", Phrase.CMD_USG_MANAGE_HOTSWAP + "", CommandType.CONSOLE_WITH_ARGUMENTS, "<DB>");
this.plugin = plugin;
}
/**
* Subcommand hotswap. Swaps db type and reloads plugin if the connection
* works.
*
* @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) {
if (args.length == 0) {
sender.sendMessage(Phrase.COMMAND_REQUIRES_ARGUMENTS_ONE + "");
return true;
}
String dbToSwapTo = args[0].toLowerCase();
if (!dbToSwapTo.equals("mysql") && !dbToSwapTo.equals("sqlite")) {
sender.sendMessage(Phrase.MANAGE_ERROR_INCORRECT_DB + dbToSwapTo);
return true;
}
try {
Database db = null;
for (Database database : plugin.getDatabases()) {
if (dbToSwapTo.equalsIgnoreCase(database.getConfigName())) {
db = database;
db.init();
db.getVersion(); //Test db connection
}
}
} catch (NullPointerException | SQLException e) {
plugin.toLog(this.getClass().getName(), e);
sender.sendMessage(Phrase.MANAGE_DATABASE_FAILURE + "");
return true;
}
plugin.getConfig().set("database.type", dbToSwapTo);
plugin.saveConfig();
plugin.onDisable();
plugin.onEnable();
return true;
}
}