package io.github.lucaseasedup.logit.command.hub;
import static io.github.lucaseasedup.logit.message.MessageHelper.sendMsg;
import static io.github.lucaseasedup.logit.message.MessageHelper.t;
import io.github.lucaseasedup.logit.command.CommandAccess;
import io.github.lucaseasedup.logit.command.CommandHelpLine;
import io.github.lucaseasedup.logit.command.wizard.ConfirmationWizard;
import io.github.lucaseasedup.logit.common.ReportedException;
import java.io.File;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public final class BackupRestoreFileHubCommand extends HubCommand
{
public BackupRestoreFileHubCommand()
{
super("backup restore file", new String[] {"filename"},
new CommandAccess.Builder()
.permission("logit.backup.restore")
.playerOnly(false)
.runningCoreRequired(true)
.build(),
new CommandHelpLine.Builder()
.command("logit backup restore file")
.descriptionLabel("subCmdDesc.backup.restore.filename")
.build());
}
@Override
public void execute(final CommandSender sender, final String[] args)
{
File selectedBackup = getBackupManager().getBackupFile(args[0]);
if (selectedBackup == null)
{
sendMsg(sender, t("restoreBackup.backupNotFound")
.replace("{0}", args[0]));
return;
}
Date selectedBackupDate;
try
{
selectedBackupDate = getBackupManager().parseBackupFilename(
selectedBackup.getName()
);
}
catch (ParseException ex)
{
sendMsg(sender, t("restoreBackup.fail")
.replace("{0}", selectedBackup.getName()));
return;
}
if (sender instanceof Player)
{
sendMsg(sender, "");
}
sendMsg(sender, t("restoreBackup.confirm.header"));
sendMsg(sender, t("restoreBackup.confirm.typeToProceed"));
sendMsg(sender, "");
sendMsg(sender, t("restoreBackup.confirm.filename")
.replace("{0}", selectedBackup.getName()));
sendMsg(sender, t("restoreBackup.confirm.date")
.replace("{0}", selectedBackupDate.toString()));
sendMsg(sender, "");
sendMsg(sender, t("restoreBackup.confirm.typeToCancel"));
new ConfirmationWizard(sender, "proceed", new Runnable()
{
@Override
public void run()
{
try
{
ReportedException.incrementRequestCount();
boolean forceBeforeRestore = getConfig("config.yml")
.getBoolean("backup.forceBeforeRestore");
if (forceBeforeRestore)
{
getBackupManager().createBackup();
}
getBackupManager().restoreBackup(args[0]);
if (sender instanceof Player)
{
sendMsg(sender, t("restoreBackup.success")
.replace("{0}", args[0]));
}
}
catch (FileNotFoundException | ReportedException ex)
{
if (sender instanceof Player)
{
sendMsg(sender, t("restoreBackup.fail")
.replace("{0}", args[0]));
}
}
finally
{
ReportedException.decrementRequestCount();
}
}
}).createWizard();
}
@Override
public List<String> complete(CommandSender sender, String[] args)
{
if (!getConfig("secret.yml").getBoolean("tabCompletion"))
return null;
if (args.length == 1)
{
return getTabCompleter().completeBackupFilename(args[0]);
}
return null;
}
}