package be.isach.ultracosmetics.mysql;
import be.isach.ultracosmetics.player.UltraPlayer;
import org.bukkit.entity.Player;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Package: be.isach.ultracosmetics.mysql
* Created by: sacha
* Date: 15/08/15
* Project: UltraCosmetics
*/
public class SqlUtils {
private MySqlConnectionManager MySqlConnectionManager;
SqlUtils(MySqlConnectionManager MySqlConnectionManager) {
this.MySqlConnectionManager = MySqlConnectionManager;
}
public void initStats(UltraPlayer up) {
Player p = up.getBukkitPlayer();
try {
if (!MySqlConnectionManager.getTable().select().where("uuid", p.getUniqueId().toString()).execute()
.next()) {
MySqlConnectionManager.getTable().insert().insert("uuid").value(p.getUniqueId().toString()).execute();
MySqlConnectionManager.getTable().update().set("username", p.getName())
.where("uuid", p.getUniqueId().toString()).execute();
return;
} else {
ResultSet res = MySqlConnectionManager.getTable().select().where("uuid", p.getUniqueId().toString())
.execute();
res.first();
String s = res.getString("username");
if (s == null) {
MySqlConnectionManager.getTable().update().set("username", p.getName())
.where("uuid", p.getUniqueId().toString()).execute();
return;
}
if (!s.equals(p.getName())) {
MySqlConnectionManager.getTable().update().set("username", p.getName())
.where("uuid", p.getUniqueId().toString()).execute();
}
res.close();
}
ResultSet res = MySqlConnectionManager.getTable().select().where("uuid", p.getUniqueId().toString())
.execute();
res.first();
be.isach.ultracosmetics.mysql.MySqlConnectionManager.INDEXS.put(p.getUniqueId(), res.getInt("id"));
res.close();
} catch (Exception e) {
// Triggered when user is already offline when this method is invoked.
}
}
public int getAmmo(int index, String name) {
ResultSet res = null;
try {
res = MySqlConnectionManager.getTable().select().where("id", index).execute();
res.first();
return res.getInt(name.replace("_", ""));
} catch (SQLException e) {
return 0;
} finally {
if (res != null)
try {
res.close();
} catch (SQLException ignored) {
}
}
}
public String getPetName(int index, String pet) {
ResultSet res = null;
try {
res = MySqlConnectionManager.getTable().select().where("id", index).execute();
res.first();
return res.getString("name" + pet);
} catch (SQLException e) {
return "Unknown";
} finally {
if (res != null)
try {
res.close();
} catch (SQLException ignored) {
}
}
}
public boolean exists(int index) {
ResultSet resultSet = null;
try {
resultSet = MySqlConnectionManager.getTable().select().where("id", index).execute();
resultSet.first();
return resultSet.next();
} catch (SQLException e) {
return false;
} finally {
if (resultSet != null)
try {
resultSet.close();
} catch (SQLException ignored) {
}
}
}
public void setName(int index, String pet, String name) {
DatabaseMetaData md = null;
ResultSet rs = null;
try {
md = MySqlConnectionManager.co.getMetaData();
rs = md.getColumns(null, null, "UltraCosmeticsData", "name" + pet);
if (!rs.next()) {
PreparedStatement statement = MySqlConnectionManager.co
.prepareStatement("ALTER TABLE UltraCosmeticsData ADD name" + pet + " varchar(255)");
statement.executeUpdate();
statement.close();
}
MySqlConnectionManager.getTable().update().set("name" + pet, name).where("id", index).execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException ignored) {
}
}
}
public int getKeys(int index) {
ResultSet res = null;
try {
res = MySqlConnectionManager.getTable().select().where("id", index).execute();
res.first();
return res.getInt("treasureKeys");
} catch (SQLException e) {
return 0;
} finally {
if (res != null)
try {
res.close();
} catch (SQLException ignored) {
}
}
}
public void removeKey(int index) {
MySqlConnectionManager.getTable().update().set("treasureKeys", getKeys(index) - 1).where("id", index).execute();
}
public void addKey(int index) {
MySqlConnectionManager.getTable().update().set("treasureKeys", getKeys(index) + 1).where("id", index).execute();
}
public void removeAmmo(int index, String name) {
MySqlConnectionManager.getTable().update().set(name.replace("_", ""), getAmmo(index, name) - 1)
.where("id", index).execute();
}
public void addAmmo(int index, String name, int i) {
MySqlConnectionManager.getTable().update().set(name.replace("_", ""), getAmmo(index, name) + i)
.where("id", index).execute();
}
public void setGadgetsEnabled(int index, boolean enabled) {
DatabaseMetaData md = null;
ResultSet rs = null;
try {
md = MySqlConnectionManager.co.getMetaData();
rs = md.getColumns(null, null, "UltraCosmeticsData", "gadgetsEnabled");
if (!rs.next()) {
PreparedStatement statement = MySqlConnectionManager.co
.prepareStatement("ALTER TABLE UltraCosmeticsData ADD gadgetsEnabled INT NOT NULL DEFAULT 1");
statement.executeUpdate();
statement.close();
MySqlConnectionManager.getTable().update().set("gadgetsEnabled", 1).where("id", index).execute();
return;
}
MySqlConnectionManager.getTable().update().set("gadgetsEnabled", enabled ? 1 : 0).where("id", index)
.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException ignored) {
}
}
}
public boolean hasGadgetsEnabled(int index) {
DatabaseMetaData md;
ResultSet rs = null;
try {
md = MySqlConnectionManager.co.getMetaData();
rs = md.getColumns(null, null, "UltraCosmeticsData", "gadgetsEnabled");
if (!rs.next()) {
PreparedStatement statement = MySqlConnectionManager.co
.prepareStatement("ALTER TABLE UltraCosmeticsData ADD gadgetsEnabled INT NOT NULL DEFAULT 1");
statement.executeUpdate();
statement.close();
setGadgetsEnabled(index, true);
return true;
}
ResultSet res = MySqlConnectionManager.getTable().select().where("id", index).execute();
res.first();
return res.getBoolean("gadgetsEnabled");
} catch (SQLException e) {
return false;
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException ignored) {
}
}
}
public void setSeeSelfMorph(int index, boolean enabled) {
DatabaseMetaData md = null;
ResultSet rs = null;
try {
md = MySqlConnectionManager.co.getMetaData();
rs = md.getColumns(null, null, "UltraCosmeticsData", "selfmorphview");
if (!rs.next()) {
PreparedStatement statement = MySqlConnectionManager.co
.prepareStatement("ALTER TABLE UltraCosmeticsData ADD selfmorphview INT NOT NULL DEFAULT 1");
statement.executeUpdate();
statement.close();
MySqlConnectionManager.getTable().update().set("selfmorphview", 1).where("id", index).execute();
return;
}
MySqlConnectionManager.getTable().update().set("selfmorphview", enabled ? 1 : 0).where("id", index)
.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException ignored) {
}
}
}
public boolean canSeeSelfMorph(int index) {
DatabaseMetaData md;
ResultSet rs = null;
try {
md = MySqlConnectionManager.co.getMetaData();
rs = md.getColumns(null, null, "UltraCosmeticsData", "selfmorphview");
if (!rs.next()) {
PreparedStatement statement = MySqlConnectionManager.co
.prepareStatement("ALTER TABLE UltraCosmeticsData ADD selfmorphview INT NOT NULL DEFAULT 1");
statement.executeUpdate();
statement.close();
setGadgetsEnabled(index, true);
return true;
}
ResultSet res = MySqlConnectionManager.getTable().select().where("id", index).execute();
res.first();
return res.getBoolean("selfmorphview");
} catch (SQLException e) {
return false;
} finally {
if (rs != null)
try {
rs.close();
} catch (SQLException ignored) {
}
}
}
public Map<UUID, Integer> getIds() {
Map<UUID, Integer> map = new HashMap<>();
ResultSet rs = MySqlConnectionManager.getTable().select("*").execute();
try {
while (rs.next()) {
int id = rs.getInt("id");
String uuid = rs.getString("uuid");
map.put(UUID.fromString(uuid), id);
}
} catch (SQLException ignored) {
} finally {
try {
rs.close();
} catch (SQLException ignored) {
}
}
return map;
}
}