package be.isach.ultracosmetics.mysql;
import be.isach.ultracosmetics.UltraCosmetics;
import be.isach.ultracosmetics.config.SettingsManager;
import be.isach.ultracosmetics.cosmetics.type.GadgetType;
import be.isach.ultracosmetics.manager.SqlLoader;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Package: be.isach.ultracosmetics.mysql
* Created by: sachalewin
* Date: 5/08/16
* Project: UltraCosmetics
*/
public class MySqlConnectionManager extends BukkitRunnable {
/**
* Player Sql Indexs.
*/
public static final Map<UUID, Integer> INDEXS = new HashMap<>();
/**
* UltraCosmetics instance.
*/
private UltraCosmetics ultraCosmetics;
/**
* MySQL Connection & Table.
*/
public Connection co;
private Table table;
/**
* SQLLoader Manager instance
*/
private SqlLoader sqlLoader;
/**
* MySQL Stuff.
*/
private MySqlConnection sql;
/**
* Sql Utils instance.
*/
private SqlUtils sqlUtils;
public MySqlConnectionManager(UltraCosmetics ultraCosmetics) {
this.ultraCosmetics = ultraCosmetics;
this.sqlUtils = new SqlUtils(this);
}
public void start() {
runTaskTimerAsynchronously(ultraCosmetics, 0, 24000);
}
@Override
public void run() {
try {
String hostname = String.valueOf(SettingsManager.getConfig().get("Ammo-System-For-Gadgets.MySQL.hostname"));
String portNumber = String.valueOf(SettingsManager.getConfig().get("Ammo-System-For-Gadgets.MySQL.port"));
String database = String.valueOf(SettingsManager.getConfig().get("Ammo-System-For-Gadgets.MySQL.database"));
String username = String.valueOf(SettingsManager.getConfig().get("Ammo-System-For-Gadgets.MySQL.username"));
String password = String.valueOf(SettingsManager.getConfig().get("Ammo-System-For-Gadgets.MySQL.password"));
if (co != null)
co.close();
sql = new MySqlConnection(hostname, portNumber, database, username, password);
co = sql.getConnection();
Bukkit.getConsoleSender().sendMessage(ChatColor.AQUA + "" + ChatColor.BOLD
+ "UltraCosmetics -> Successfully connected to MySQL server! :)");
PreparedStatement sql = co.prepareStatement(
"CREATE TABLE IF NOT EXISTS UltraCosmeticsData(" + "id INTEGER not NULL AUTO_INCREMENT,"
+ " uuid VARCHAR(255)," + " username VARCHAR(255)," + " PRIMARY KEY ( id ))");
sql.executeUpdate();
for (GadgetType gadgetType : GadgetType.values()) {
DatabaseMetaData md = co.getMetaData();
ResultSet rs = md.getColumns(null, null, "UltraCosmeticsData",
gadgetType.toString().replace("_", "").toLowerCase());
if (!rs.next()) {
PreparedStatement statement = co.prepareStatement(
"ALTER TABLE UltraCosmeticsData ADD " + gadgetType.toString().replace("_", "").toLowerCase()
+ " INTEGER DEFAULT 0 not NULL");
statement.executeUpdate();
statement.close();
}
rs.close();
}
table = new Table(co, "UltraCosmeticsData");
DatabaseMetaData md = co.getMetaData();
ResultSet rs = md.getColumns(null, null, "UltraCosmeticsData", "treasureKeys");
if (!rs.next()) {
PreparedStatement statement = co
.prepareStatement("ALTER TABLE UltraCosmeticsData ADD treasureKeys INTEGER DEFAULT 0 NOT NULL");
statement.executeUpdate();
statement.close();
}
rs.close();
ultraCosmetics.getSmartLogger().write("initial SQLLoader to reduce lag when table is large");
sqlLoader = new SqlLoader(ultraCosmetics);
INDEXS.putAll(sqlUtils.getIds());
} catch (Exception e) {
Bukkit.getLogger().info("");
Bukkit.getConsoleSender().sendMessage(
ChatColor.RED + "" + ChatColor.BOLD + "Ultra Cosmetics >>> Could not connect to MySQL server!");
Bukkit.getLogger().info("");
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "Error:");
e.printStackTrace();
}
}
public Table getTable() {
return table;
}
public SqlUtils getSqlUtils() {
return sqlUtils;
}
public SqlLoader getSqlLoader() {
return sqlLoader;
}
}