/** * 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.tools.commands.interfaces.CommandExecutor; import com.greatmancode.tools.utils.Tools; import java.util.HashMap; import java.util.Map; public class NewSetupDatabaseCommand extends CommandExecutor { private enum INTERNALSTEP { START, SQLITE, MYSQL, H2; } private static final Map<String, String> VALUES = new HashMap<>(); private static final String ERROR_MESSAGE = "{{DARK_RED}}A error occured. The error is: {{WHITE}}%s"; private static final String CONFIG_NODE = "System.Database.Type"; private INTERNALSTEP step = INTERNALSTEP.START; @Override public void execute(String sender, String[] args) { if (NewSetupWizard.getState().equals(NewSetupWizard.DATABASE_STEP)) { if (step.equals(INTERNALSTEP.START)) { start(sender, args); } else if (step.equals(INTERNALSTEP.MYSQL)) { mysql(sender, args); } } } @Override public String help() { return "/ccsetup database - Database step for setup wizard."; } @Override public int maxArgs() { return 3; } @Override public int minArgs() { return 0; } @Override public boolean playerOnly() { return false; } @Override public String getPermissionNode() { return "craftconomy.setup"; } private void start(String sender, String[] args) { if (args.length == 1) { if ("mysql".equalsIgnoreCase(args[0])) { step = INTERNALSTEP.MYSQL; Common.getInstance().getMainConfig().setValue(CONFIG_NODE, "mysql"); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}You selected {{WHITE}}MySQL{{DARK_GREEN}}. Please type {{WHITE}}/ccsetup database address <Your host>"); } else if ("h2".equalsIgnoreCase(args[0])) { step = INTERNALSTEP.H2; h2(sender); } else { Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}Invalid value!"); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Please type {{WHITE}}/ccsetup database <mysql/h2>"); } } } private void h2(String sender) { Common.getInstance().getMainConfig().setValue(CONFIG_NODE, "h2"); Common.getInstance().initialiseDatabase(); done(sender); } private void mysql(String sender, String[] args) { if (args.length == 2) { if ("address".equalsIgnoreCase(args[0])) { VALUES.put("address", args[1]); Common.getInstance().getMainConfig().setValue("System.Database.Address", args[1]); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Alright! Please type {{WHITE}}/ccsetup database port <Your port> {{DARK_GREEN}}to set your MySQL port (Usually 3306)"); } else if ("port".equalsIgnoreCase(args[0])) { if (Tools.isInteger(args[1])) { int port = Integer.parseInt(args[1]); VALUES.put("port", args[1]); Common.getInstance().getMainConfig().setValue("System.Database.Port", port); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Saved! Please type {{WHITE}}/ccsetup database username <Username> {{DARK_GREEN}}to set your MySQL username"); } else { Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_RED}}Invalid port!"); } } else if ("username".equalsIgnoreCase(args[0])) { VALUES.put("username", args[1]); Common.getInstance().getMainConfig().setValue("System.Database.Username", args[1]); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Saved! Please type {{WHITE}}/ccsetup database password <Password> {{DARK_GREEN}}to set your MySQL password (enter \"\" for none)"); } else if ("password".equalsIgnoreCase(args[0])) { if (args[1].equals("''") || args[1].equals("\"\"")) { VALUES.put("password", ""); Common.getInstance().getMainConfig().setValue("System.Database.Password", ""); } else { VALUES.put("password", args[1]); Common.getInstance().getMainConfig().setValue("System.Database.Password", args[1]); } Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Saved! Please type {{WHITE}}/ccsetup database db <Database Name> {{DARK_GREEN}}to set your MySQL database."); } else if ("db".equalsIgnoreCase(args[0])) { VALUES.put("db", args[1]); Common.getInstance().getMainConfig().setValue("System.Database.Db", args[1]); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Saved! Please type {{WHITE}}/ccsetup database prefix <Prefix> {{DARK_GREEN}}to set your table prefix (If not sure, put cc3_)."); } else if ("prefix".equalsIgnoreCase(args[0])) { VALUES.put("prefix", args[1]); Common.getInstance().getMainConfig().setValue("System.Database.Prefix", args[1]); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Done! Please wait while the database is initializing."); } } if (VALUES.size() == 6) { Common.getInstance().initialiseDatabase(); done(sender); //TODO: A catch } } private void done(String sender) { Common.getInstance().initializeCurrency(); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}Alright! Welcome to Craftconomy! We use a Multi-Currency system. I need you to write the settings for the default currency."); Common.getInstance().getServerCaller().getPlayerCaller().sendMessage(sender, "{{DARK_GREEN}}First, let's configure the {{WHITE}}main currency name {{DARK_GREEN}}(Ex: {{WHITE}}Dollar{{DARK_GREEN}}). Type {{WHITE}}/ccsetup currency name <Name>"); NewSetupWizard.setState(NewSetupWizard.CURRENCY_STEP); } }