package uk.codingbadgers.bstore.database; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import uk.codingbadgers.bFundamentals.bFundamentals; import uk.thecodingbadgers.bDatabaseManager.Database.BukkitDatabase; import uk.thecodingbadgers.bDatabaseManager.DatabaseTable.DatabaseTable; public class DatabaseManager { /** * The database instance */ BukkitDatabase database; /** * The purchase table */ private DatabaseTable purchaseTable; /** * The investor table */ private DatabaseTable investorTable; /** * The xp purchase table */ private DatabaseTable xpTable; /** * Class constructor */ public DatabaseManager() { setupDatabase(); } /** * Setup the database and its tables */ private void setupDatabase() { database = bFundamentals.getBukkitDatabase(); purchaseTable = database.createTable("Store-Purchases", PurchaseData.class); if (purchaseTable == null) { bFundamentals.log(Level.SEVERE, "Failed to setup purchases table!"); } investorTable = database.createTable("Store-Investors", InvestorData.class); if (investorTable == null) { bFundamentals.log(Level.SEVERE, "Failed to setup investors table!"); } xpTable = database.createTable("Store-XP", XPPurchaseData.class); if (xpTable == null) { bFundamentals.log(Level.SEVERE, "Failed to setup xp table!"); } } /** * * @param playerName * @param type * @param item */ public void logPurchase(String playerName, String type, String item) { PurchaseData data = new PurchaseData(); data.date = System.currentTimeMillis(); data.item = item; data.type = type; data.playerName = playerName; this.purchaseTable.insert(data, PurchaseData.class, false); } /** * * @param playerName * @param from * @param to */ public void logInvestor(String playerName, long from, long to, String oldRank, boolean update) { InvestorData data = new InvestorData(); data.playerName = playerName; data.startTime = from; data.endTime = to; data.oldRank = oldRank; long lengthMS = to - from; long oneDay = 1000 * 60 * 60 * 24; long noofDays = lengthMS / oneDay; data.lengthDays = noofDays + " days"; if (!update) { this.investorTable.insert(data, InvestorData.class, true); } else { String updateQuery = "UPDATE `Store-Investors` SET `endTime` = '" + data.endTime + "', `lengthDays` = '" + data.lengthDays + "' WHERE `playerName` = '" + data.playerName + "'"; database.query(updateQuery, true); } } /** * * @param playerName * @return */ public InvestorData getInvestor(String playerName) { ResultSet result = database.queryResult("SELECT * FROM `Store-Investors` WHERE `playerName` = '" + playerName + "'"); try { if (result == null) { return null; } if (result.next()) { InvestorData data = new InvestorData(); data.playerName = result.getString("playerName"); data.startTime = result.getLong("startTime"); data.endTime = result.getLong("endTime"); data.lengthDays = result.getString("lengthDays"); data.oldRank = result.getString("oldRank"); result.close(); return data; } else { result.close(); return null; } } catch (SQLException e) { e.printStackTrace(); return null; } } /** * * @param playerName */ public void removeInvestor(String playerName) { this.database.query("DELETE FROM `Store-Investors` WHERE `playerName`='" + playerName + "'"); } /** * * @param playerName * @param levels */ public void logXPPurchase(String playerName, int levels) { XPPurchaseData data = new XPPurchaseData(); data.playerName = playerName; data.levels = levels; this.xpTable.insert(data, XPPurchaseData.class, true); } /** * * @param playerName * @return */ public List<XPPurchaseData> getXPPurchases(String playerName) { List<XPPurchaseData> data = new ArrayList<XPPurchaseData>(); ResultSet result = this.database.queryResult("SELECT * FROM `Store-XP` WHERE `playerName`='" + playerName + "'"); if (result == null) { return data; } try { while(result.next()) { XPPurchaseData newData = new XPPurchaseData(); newData.playerName = result.getString("playerName"); newData.levels = result.getInt("levels"); data.add(newData); } } catch(SQLException ex) { return data; } return data; } /** * * @param playerName */ public void removeXPPurchases(String playerName) { this.database.query("DELETE FROM `Store-XP` WHERE `playerName`= '" + playerName + "'"); } }