/**
* This file is part of Craftconomy3.
*
* Copyright (c) 2011-2016, Greatman <http://github.com/greatman/>
*
* Craftconomy3 is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Craftconomy3 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Craftconomy3. If not, see <http://www.gnu.org/licenses/>.
*/
package com.greatmancode.craftconomy3.commands.setup;
import com.greatmancode.craftconomy3.Common;
import com.greatmancode.craftconomy3.NewSetupWizard;
import com.greatmancode.craftconomy3.converter.Converter;
import com.greatmancode.craftconomy3.converter.ConverterList;
import com.greatmancode.tools.commands.interfaces.CommandExecutor;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
public class NewSetupConvertCommand extends CommandExecutor {
private enum INTERNALSTEP {
START,
SELECT_CONVERT,
SELECT_DB,
INSERT_VALUES,
CONVERT;
}
private static final ConverterList IMPORTER_LIST = new ConverterList();
private static Converter selectedConverter = null;
private INTERNALSTEP step = INTERNALSTEP.START;
@Override
public void execute(String sender, String[] args) {
if (NewSetupWizard.getState().equals(NewSetupWizard.CONVERT_STEP)) {
if (step.equals(INTERNALSTEP.START)) {
start(sender, args);
} else if (step.equals(INTERNALSTEP.SELECT_CONVERT)) {
selectConvert(sender, args);
} else if (step.equals(INTERNALSTEP.SELECT_DB)) {
selectDb(sender, args);
} else if (step.equals(INTERNALSTEP.INSERT_VALUES)) {
selectValues(sender, args);
}
}
}
@Override
public String help() {
return "/ccsetup convert - Convert wizard.";
}
@Override
public int maxArgs() {
return 3;
}
@Override
public int minArgs() {
return 1;
}
@Override
public boolean playerOnly() {
return false;
}
@Override
public String getPermissionNode() {
return "craftconomy.setup";
}
private void selectValues(final String sender, String[] args) {
if (args.length <= 2) {
if (selectedConverter != null) {
if (selectedConverter.setDbInfo(args[0], args[1])) {
if (selectedConverter.allSet()) {
//We start the convert!
if (selectedConverter.connect()) {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}All values are ok! Let's start this conversion!");
Common.getInstance().getServerCaller().getSchedulerCaller().schedule(new Runnable() {
@Override
public void run() {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}NOTICE: {{WHITE}}The conversion is made in another thread so it doesn't hang the server. Craftconomy will be unlocked when the conversion is complete.");
selectedConverter.importData(sender);
Common.getInstance().getMainConfig().setValue("System.Setup", false);
Common.getInstance().reloadPlugin();
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Conversion complete! Enjoy Craftconomy!");
}
}, 0, 0, true);
} else {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}Some settings are wrong. Be sure that every settings are ok! Check the console log for more information.");
}
} else {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Value for {{WHITE}}" + args[0] + "{{DARK_GREEN}} set. Please continue.");
}
}
} else {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}Something is wrong. There isn't a converter selected!");
}
}
}
private void selectDb(String sender, String[] args) {
if (selectedConverter.getDbTypes().contains(args[0])) {
selectedConverter.setDbType(args[0]);
step = INTERNALSTEP.INSERT_VALUES;
if (selectedConverter.getDbInfo().size() == 0) {
selectedConverter.importData(sender);
Common.getInstance().getMainConfig().setValue("System.Setup", false);
Common.getInstance().reloadPlugin();
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Conversion complete! Enjoy Craftconomy!");
} else {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, args[0] + " {{DARK_GREEN}}selected. Now, Please enter the correct values for the database format chosen. Syntax is: {{WHITE}}/ccsetup convert <" + formatListString(selectedConverter.getDbInfo()) + "> <value>");
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Example: {{WHITE}}/ccsetup convert " + selectedConverter.getDbInfo().get(0) + " test");
}
} else {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}This db type doesn't exist! Please type {{WHITE}}/ccsetup convert <" + formatListString(selectedConverter.getDbTypes()) + ">");
}
}
private void selectConvert(String sender, String[] args) {
if (IMPORTER_LIST.getConverterList().containsKey(args[0])) {
selectedConverter = IMPORTER_LIST.getConverterList().get(args[0]);
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{WHITE}}" + args[0] + " {{DARK_GREEN}}importer selected.");
if (selectedConverter.getWarning() != null) {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}Warning{{WHITE}}: " + selectedConverter.getWarning());
}
if (selectedConverter.getDbTypes().size() == 1) {
step = INTERNALSTEP.SELECT_DB;
selectDb(sender, new String[]{selectedConverter.getDbTypes().get(0)});
} else {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}This converter support those database types. Please select one");
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{WHITE}}/ccsetup convert <" + formatListString(selectedConverter.getDbTypes()) + ">");
step = INTERNALSTEP.SELECT_DB;
}
}
}
private void start(String sender, String[] args) {
if ("yes".equalsIgnoreCase(args[0])) {
step = INTERNALSTEP.SELECT_CONVERT;
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}I currently support those systems: {{WHITE}}" + getConverterListFormatted());
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Please type {{WHITE}}/ccsetup convert <" + getConverterListFormatted() + ">");
} else if ("no".equalsIgnoreCase(args[0])) {
Common.getInstance().getMainConfig().setValue("System.Setup", false);
Common.getInstance().reloadPlugin();
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}The setup is done! Enjoy Craftconomy!");
} else {
Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}Correct values are yes or no! Please type {{WHITE}}/ccsetup convert <yes/no>");
}
}
private String getConverterListFormatted() {
String result = "";
Iterator<Entry<String, Converter>> iterator = IMPORTER_LIST.getConverterList().entrySet().iterator();
while (iterator.hasNext()) {
result += iterator.next().getKey();
if (iterator.hasNext()) {
result += ", ";
}
}
return result;
}
private String formatListString(List<String> list) {
String result = "";
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
result += iterator.next();
if (iterator.hasNext()) {
result += ", ";
}
}
return result;
}
}