Search in sources :

Example 1 with QueryRunner

use of com.iCo6.util.org.apache.commons.dbutils.QueryRunner 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 QueryRunner

use of com.iCo6.util.org.apache.commons.dbutils.QueryRunner 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 QueryRunner

use of com.iCo6.util.org.apache.commons.dbutils.QueryRunner 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 QueryRunner

use of com.iCo6.util.org.apache.commons.dbutils.QueryRunner 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 QueryRunner

use of com.iCo6.util.org.apache.commons.dbutils.QueryRunner 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)13 Connection (java.sql.Connection)13 SQLException (java.sql.SQLException)13 Player (org.bukkit.entity.Player)4 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 Arguments (com.iCo6.IO.mini.Arguments)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 Timer (java.util.Timer)1