Search in sources :

Example 1 with Database

use of com.iCo6.IO.Database in project Core by iConomy.

the class iConomy method onEnable.

public void onEnable() {
    final long startTime = System.nanoTime();
    final long endTime;
    try {
        // Localize locale to prevent issues.
        Locale.setDefault(Locale.US);
        // Server & Terminal Support
        Server = getServer();
        if (getServer().getServerName().equalsIgnoreCase("craftbukkit")) {
            TerminalSupport = ((CraftServer) getServer()).getReader().getTerminal().isANSISupported();
        }
        // Get general plugin information
        info = getDescription();
        // Plugin directory setup
        directory = getDataFolder();
        if (!directory.exists())
            directory.mkdir();
        // Extract Files
        Common.extract("Config.yml", "Template.yml");
        // Setup Configuration
        Constants.load(new File(directory, "Config.yml"));
        // Setup Template
        Template = new Template(directory.getPath(), "Template.yml");
        // Upgrade Template to 6.0.9b
        LinkedHashMap<String, String> nodes = new LinkedHashMap<String, String>();
        nodes.put("top.opening", "<green>-----[ <white>Wealthiest Accounts <green>]-----");
        nodes.put("top.item", "<gray>+i. <green>+name <gray>- <white>+amount");
        try {
            Template.update(nodes);
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
        // Check Drivers if needed
        Type type = Database.getType(Constants.Nodes.DatabaseType.toString());
        if (!(type.equals(Type.InventoryDB) || type.equals(Type.MiniDB))) {
            Drivers driver = null;
            switch(type) {
                case H2DB:
                    driver = Constants.Drivers.H2;
                    break;
                case MySQL:
                    driver = Constants.Drivers.MySQL;
                    break;
                case SQLite:
                    driver = Constants.Drivers.SQLite;
                    break;
                case Postgre:
                    driver = Constants.Drivers.Postgre;
                    break;
            }
            if (driver != null)
                if (!(new File("lib", driver.getFilename()).exists())) {
                    System.out.println("[iConomy] Downloading " + driver.getFilename() + "...");
                    wget.fetch(driver.getUrl(), driver.getFilename());
                    System.out.println("[iConomy] Finished Downloading.");
                }
        }
        // Setup Commands
        Commands.add("/money +name", new Money(this));
        Commands.setPermission("money", "iConomy.holdings");
        Commands.setPermission("money+", "iConomy.holdings.others");
        Commands.setHelp("money", new String[] { "", "Check your balance." });
        Commands.setHelp("money+", new String[] { " [name]", "Check others balance." });
        Commands.add("/money -h|?|help +command", new Help(this));
        Commands.setPermission("help", "iConomy.help");
        Commands.setHelp("help", new String[] { " (command)", "For Help & Information." });
        Commands.add("/money -t|top", new Top(this));
        Commands.setPermission("top", "iConomy.top");
        Commands.setHelp("top", new String[] { "", "View top economical accounts." });
        Commands.add("/money -p|pay +name +amount:empty", new Payment(this));
        Commands.setPermission("pay", "iConomy.payment");
        Commands.setHelp("pay", new String[] { " [name] [amount]", "Send money to others." });
        Commands.add("/money -c|create +name", new Create(this));
        Commands.setPermission("create", "iConomy.accounts.create");
        Commands.setHelp("create", new String[] { " [name]", "Create an account." });
        Commands.add("/money -r|remove +name", new Remove(this));
        Commands.setPermission("remove", "iConomy.accounts.remove");
        Commands.setHelp("remove", new String[] { " [name]", "Remove an account." });
        Commands.add("/money -g|give +name +amount:empty", new Give(this));
        Commands.setPermission("give", "iConomy.accounts.give");
        Commands.setHelp("give", new String[] { " [name] [amount]", "Give money." });
        Commands.add("/money -t|take +name +amount:empty", new Take(this));
        Commands.setPermission("take", "iConomy.accounts.take");
        Commands.setHelp("take", new String[] { " [name] [amount]", "Take money." });
        Commands.add("/money -s|set +name +amount:empty", new Set(this));
        Commands.setPermission("set", "iConomy.accounts.set");
        Commands.setHelp("set", new String[] { " [name] [amount]", "Set account balance." });
        Commands.add("/money -u|status +name +status:empty", new Status(this));
        Commands.setPermission("status", "iConomy.accounts.status");
        Commands.setPermission("status+", "iConomy.accounts.status.set");
        Commands.setHelp("status", new String[] { " [name] (status)", "Check/Set account status." });
        Commands.add("/money -x|purge", new Purge(this));
        Commands.setPermission("purge", "iConomy.accounts.purge");
        Commands.setHelp("purge", new String[] { "", "Purge all accounts with initial holdings." });
        Commands.add("/money -e|empty", new Empty(this));
        Commands.setPermission("empty", "iConomy.accounts.empty");
        Commands.setHelp("empty", new String[] { "", "Empty database of accounts." });
        // Setup Database.
        try {
            Database = new Database(Constants.Nodes.DatabaseType.toString(), Constants.Nodes.DatabaseUrl.toString(), Constants.Nodes.DatabaseUsername.toString(), Constants.Nodes.DatabasePassword.toString());
            // If it doesn't exist, Create one.
            if (Database.isSQL()) {
                if (!Database.tableExists(Constants.Nodes.DatabaseTable.toString())) {
                    String SQL = Common.resourceToString("SQL/Core/Create-Table-" + Database.getType().toString().toLowerCase() + ".sql");
                    SQL = String.format(SQL, Constants.Nodes.DatabaseTable.getValue());
                    try {
                        QueryRunner run = new QueryRunner();
                        Connection c = iConomy.Database.getConnection();
                        try {
                            run.update(c, SQL);
                        } catch (SQLException ex) {
                            System.out.println("[iConomy] Error creating database: " + ex);
                        } finally {
                            DbUtils.close(c);
                        }
                    } catch (SQLException ex) {
                        System.out.println("[iConomy] Database Error: " + ex);
                    }
                }
            } else {
                this.onConversion();
            }
        } catch (MissingDriver ex) {
            System.out.println(ex.getMessage());
        }
        getServer().getPluginManager().registerEvents(new players(), this);
    } finally {
        endTime = System.nanoTime();
    }
    // Setup Interest
    if (Constants.Nodes.Interest.getBoolean()) {
        Thrun.init(new Runnable() {

            public void run() {
                long time = Constants.Nodes.InterestTime.getLong() * 1000L;
                Interest = new Timer();
                Interest.scheduleAtFixedRate(new Interest(getDataFolder().getPath()), time, time);
            }
        });
    }
    if (Constants.Nodes.Purging.getBoolean()) {
        Thrun.init(new Runnable() {

            public void run() {
                Queried.purgeDatabase();
                System.out.println("[" + info.getName() + " - " + Constants.Nodes.CodeName.toString() + "] Purged accounts with default balance.");
            }
        });
    }
    final long duration = endTime - startTime;
    // Finish
    System.out.println("[" + info.getName() + " - " + Constants.Nodes.CodeName.toString() + "] Enabled (" + Common.readableProfile(duration) + ")");
}
Also used : ResultSet(java.sql.ResultSet) Drivers(com.iCo6.Constants.Drivers) SQLException(java.sql.SQLException) Template(com.iCo6.util.Template) LinkedHashMap(java.util.LinkedHashMap) Interest(com.iCo6.system.Interest) Database(com.iCo6.IO.Database) com.iCo6.listeners.players(com.iCo6.listeners.players) Connection(java.sql.Connection) IOException(java.io.IOException) QueryRunner(com.iCo6.util.org.apache.commons.dbutils.QueryRunner) Type(com.iCo6.IO.Database.Type) Timer(java.util.Timer) MissingDriver(com.iCo6.IO.exceptions.MissingDriver) File(java.io.File) PluginDescriptionFile(org.bukkit.plugin.PluginDescriptionFile)

Example 2 with Database

use of com.iCo6.IO.Database in project Core by iConomy.

the class iConomy method onConversion.

public boolean onConversion() {
    if (!Constants.Nodes.Convert.getBoolean())
        return false;
    Thrun.init(new Runnable() {

        public void run() {
            String from = Constants.Nodes.ConvertFrom.toString();
            String table = Constants.Nodes.ConvertTable.toString();
            String username = Constants.Nodes.ConvertUsername.toString();
            String password = Constants.Nodes.ConvertPassword.toString();
            String url = Constants.Nodes.ConvertURL.toString();
            if (!Common.matches(from, "h2", "h2db", "h2sql", "mysql", "mysqldb"))
                return;
            String driver = "", dsn = "";
            if (Common.matches(from, "sqlite", "h2", "h2sql", "h2db")) {
                driver = "org.h2.Driver";
                dsn = "jdbc:h2:" + directory + File.separator + table + ";AUTO_RECONNECT=TRUE";
                username = "sa";
                password = "sa";
            } else if (Common.matches(from, "mysql", "mysqldb")) {
                driver = "com.mysql.jdbc.Driver";
                dsn = url + "/" + table;
            }
            if (!DbUtils.loadDriver(driver)) {
                System.out.println("Please make sure the " + from + " driver library jar exists.");
                return;
            }
            Connection old = null;
            try {
                old = (username.isEmpty() && password.isEmpty()) ? DriverManager.getConnection(url) : DriverManager.getConnection(url, username, password);
            } catch (SQLException ex) {
                System.out.println(ex);
                return;
            }
            QueryRunner run = new QueryRunner();
            try {
                try {
                    run.query(old, "SELECT * FROM " + table, new ResultSetHandler() {

                        public Object handle(ResultSet rs) throws SQLException {
                            Account current = null;
                            Boolean next = rs.next();
                            if (next)
                                if (iConomy.Accounts.exists(rs.getString("username")))
                                    current = iConomy.Accounts.get(rs.getString("username"));
                                else
                                    iConomy.Accounts.create(rs.getString("username"), rs.getDouble("balance"));
                            if (current != null)
                                current.getHoldings().setBalance(rs.getDouble("balance"));
                            if (next)
                                if (iConomy.Accounts.exists(rs.getString("username")))
                                    if (rs.getBoolean("hidden"))
                                        iConomy.Accounts.get(rs.getString("username")).setStatus(1);
                            return true;
                        }
                    });
                } catch (SQLException ex) {
                    System.out.println("[iConomy] Error issueing SQL query: " + ex);
                } finally {
                    DbUtils.close(old);
                }
            } catch (SQLException ex) {
                System.out.println("[iConomy] Database Error: " + ex);
            }
            System.out.println("[iConomy] Conversion complete. Please update your configuration, change convert to false!");
        }
    });
    return false;
}
Also used : Account(com.iCo6.system.Account) SQLException(java.sql.SQLException) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) ResultSetHandler(com.iCo6.util.org.apache.commons.dbutils.ResultSetHandler) QueryRunner(com.iCo6.util.org.apache.commons.dbutils.QueryRunner)

Example 3 with Database

use of com.iCo6.IO.Database in project Core by iConomy.

the class MoneyComparator method createAccount.

static boolean createAccount(String name, Double balance, Integer status) {
    Boolean created = false;
    if (useMiniDB() || useInventoryDB() || useOrbDB()) {
        if (hasAccount(name))
            return false;
        if (useOrbDB())
            if (iConomy.Server.getPlayer(name) != null)
                return false;
        if (useInventoryDB())
            if (inventory.dataExists(name))
                return false;
        Arguments Row = new Arguments(name);
        Row.setValue("balance", balance);
        Row.setValue("status", status);
        database.addIndex(Row.getKey(), Row);
        database.update();
        return true;
    }
    try {
        QueryRunner run = new QueryRunner();
        Connection c = iConomy.Database.getConnection();
        try {
            String t = Constants.Nodes.DatabaseTable.toString();
            Integer amount = run.update(c, "INSERT INTO " + t + "(username, balance, status) values (?, ?, ?)", name.toLowerCase(), balance, status);
            if (amount > 0)
                created = true;
        } catch (SQLException ex) {
            System.out.println("[iConomy] Error issueing SQL query: " + ex);
        } finally {
            DbUtils.close(c);
        }
    } catch (SQLException ex) {
        System.out.println("[iConomy] Database Error: " + ex);
    }
    return false;
}
Also used : SQLException(java.sql.SQLException) Arguments(com.iCo6.IO.mini.Arguments) Connection(java.sql.Connection) QueryRunner(com.iCo6.util.org.apache.commons.dbutils.QueryRunner)

Example 4 with Database

use of com.iCo6.IO.Database in project Core by iConomy.

the class MoneyComparator method setStatus.

static void setStatus(String name, int status) {
    if (!hasAccount(name))
        return;
    if (useMiniDB()) {
        database.setArgument(name, "status", status);
        database.update();
        return;
    }
    if (useInventoryDB() || useOrbDB()) {
        if (database.hasIndex(name)) {
            database.setArgument(name, "status", status);
            database.update();
        }
        return;
    }
    try {
        QueryRunner run = new QueryRunner();
        Connection c = iConomy.Database.getConnection();
        try {
            String t = Constants.Nodes.DatabaseTable.toString();
            int update = run.update(c, "UPDATE " + t + " SET status=? WHERE username=?", status, name.toLowerCase());
        } catch (SQLException ex) {
            System.out.println("[iConomy] Error issueing SQL query: " + ex);
        } finally {
            DbUtils.close(c);
        }
    } catch (SQLException ex) {
        System.out.println("[iConomy] Database Error: " + ex);
    }
}
Also used : SQLException(java.sql.SQLException) Connection(java.sql.Connection) QueryRunner(com.iCo6.util.org.apache.commons.dbutils.QueryRunner)

Example 5 with Database

use of com.iCo6.IO.Database in project Core by iConomy.

the class MoneyComparator method setBalance.

static void setBalance(String name, double balance) {
    double original = 0.0, gain = 0.0, loss = 0.0;
    if (Constants.Nodes.Logging.getBoolean()) {
        original = getBalance(name);
        gain = balance - original;
        loss = original - balance;
    }
    if (!hasAccount(name)) {
        createAccount(name, balance, 0);
        if (Constants.Nodes.Logging.getBoolean()) {
            if (gain < 0.0)
                gain = 0.0;
            if (loss < 0.0)
                loss = 0.0;
            Transactions.insert(new Transaction("setBalance", "System", name).setFromBalance(original).setToBalance(balance).setGain(gain).setLoss(loss).setSet(balance));
        }
        return;
    }
    if (useMiniDB() || useInventoryDB() || useOrbDB()) {
        if (useInventoryDB())
            if (inventory.dataExists(name)) {
                inventory.setBalance(name, balance);
                return;
            }
        if (useOrbDB()) {
            Player gainer = iConomy.Server.getPlayer(name);
            if (gainer != null)
                if (balance < gainer.getTotalExperience()) {
                    int amount = (int) (gainer.getTotalExperience() - balance);
                    for (int i = 0; i < amount; i++) {
                        if (gainer.getExp() > 0)
                            gainer.setExp(gainer.getExp() - 1);
                        else if (gainer.getTotalExperience() > 0)
                            gainer.setTotalExperience(gainer.getTotalExperience() - 1);
                        else
                            break;
                    }
                } else {
                    int amount = (int) (balance - gainer.getTotalExperience());
                    for (int i = 0; i < amount; i++) gainer.setExp(gainer.getExp() + 1);
                }
            return;
        }
        if (database.hasIndex(name)) {
            database.setArgument(name, "balance", balance);
            database.update();
        }
        return;
    }
    try {
        QueryRunner run = new QueryRunner();
        Connection c = iConomy.Database.getConnection();
        try {
            String t = Constants.Nodes.DatabaseTable.toString();
            int update = run.update(c, "UPDATE " + t + " SET balance=? WHERE username=?", balance, name.toLowerCase());
        } catch (SQLException ex) {
            System.out.println("[iConomy] Error issueing SQL query: " + ex);
        } finally {
            DbUtils.close(c);
        }
    } catch (SQLException ex) {
        System.out.println("[iConomy] Database Error: " + ex);
    }
}
Also used : Player(org.bukkit.entity.Player) SQLException(java.sql.SQLException) Connection(java.sql.Connection) QueryRunner(com.iCo6.util.org.apache.commons.dbutils.QueryRunner)

Aggregations

QueryRunner (com.iCo6.util.org.apache.commons.dbutils.QueryRunner)12 Connection (java.sql.Connection)12 SQLException (java.sql.SQLException)12 Player (org.bukkit.entity.Player)4 Arguments (com.iCo6.IO.mini.Arguments)2 ResultSet (java.sql.ResultSet)2 ArrayList (java.util.ArrayList)2 Drivers (com.iCo6.Constants.Drivers)1 Database (com.iCo6.IO.Database)1 Type (com.iCo6.IO.Database.Type)1 MissingDriver (com.iCo6.IO.exceptions.MissingDriver)1 Mini (com.iCo6.IO.mini.Mini)1 com.iCo6.listeners.players (com.iCo6.listeners.players)1 Account (com.iCo6.system.Account)1 Interest (com.iCo6.system.Interest)1 Template (com.iCo6.util.Template)1 ResultSetHandler (com.iCo6.util.org.apache.commons.dbutils.ResultSetHandler)1 File (java.io.File)1 IOException (java.io.IOException)1 LinkedHashMap (java.util.LinkedHashMap)1