· 6 years ago · Jul 12, 2019, 09:30 PM
1package fr.sengoku54.fteam.database;
2
3import fr.sengoku54.fteam.Main;
4import fr.sengoku54.fteam.models.Chat;
5import fr.sengoku54.fteam.models.Team;
6import org.bukkit.entity.Player;
7
8import java.sql.Connection;
9import java.sql.PreparedStatement;
10import java.sql.ResultSet;
11import java.sql.SQLException;
12import java.text.MessageFormat;
13import java.util.*;
14import java.util.logging.Level;
15
16public class TeamDAO {
17 private String table;
18 private String name;
19 private String tag;
20 private String prefix;
21 private String money;
22 private Main main;
23 private Connection connection;
24
25 public TeamDAO(Main main) {
26 this.main = main;
27 String tablePrefix = main.getConfig().getString("mysql.prefix");
28 table = tablePrefix + main.getConfig().getString("mysql.team.table");
29 name = main.getConfig().getString("mysql.team.name.column");
30 tag = main.getConfig().getString("mysql.team.tag.column");
31 prefix = main.getConfig().getString("mysql.team.prefix.column");
32 money = main.getConfig().getString("mysql.team.money");
33 connection = main.getConnectionDB().getConnection();
34 }
35
36 public void createTableIfNotExist() throws SQLException {
37 String statement = "CREATE TABLE IF NOT EXISTS `" + table + "` (\n" +
38 " `" + name + "` varchar(255) NOT NULL,\n" +
39 " `" + tag + "` varchar(50) NOT NULL,\n" +
40 " `" + prefix + "` varchar(50) NOT NULL,\n" +
41 " `" + money + "` decimal(12,3) NOT NULL,\n" +
42 " PRIMARY KEY (`" + name + "`)" +
43 ") ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;";
44 try (PreparedStatement createTable = connection.prepareStatement(statement)) {
45 createTable.executeUpdate();
46 main.getLogger().info(MessageFormat.format("Table {0} created", table));
47 }
48 }
49
50 public void createTeam(Player player, String teamName, String teamTag, String teamPrefix) throws SQLException {
51 String statement = "INSERT INTO `" + table + "` (`" + name + "`, `" + tag + "`, `" + prefix + "`, `" + money + "`) VALUES (?, ?, ?, 0);";
52 try (PreparedStatement createTeam = connection.prepareStatement(statement)) {
53 createTeam.setString(1, teamName);
54 createTeam.setString(2, teamTag);
55 createTeam.setString(3, teamPrefix);
56 createTeam.executeUpdate();
57 }
58 }
59
60 public Team getTeam(String teamName) throws SQLException {
61 String statement = "SELECT * FROM `" + table + "` where `" + name + "`=?";
62 try (PreparedStatement getTeam = connection.prepareStatement(statement)) {
63 getTeam.setString(1, teamName);
64 try (ResultSet resultSet = getTeam.executeQuery()) {
65 if (resultSet.next()) {
66 List<UUID> teamMembers = main.getTeamMembersDAO().getTeamMembers(teamName);
67 List<UUID> leaders = main.getTeamMembersDAO().getPlayersWithRankConditions(teamName, main.getConfig().getInt("commands.fteam.create.creator-rank"), main.getTeamMembersDAO().getPlayerAtRank());
68 UUID leader = (leaders.size() == 1) ? leaders.get(0) : null;
69 Map<String, Chat> chats = initChats(teamName);
70 int kill = main.getTeamMembersDAO().getTeamKillOrDeath(teamName, main.getConfig().getString("mysql.team-members.kill"));
71 int death = main.getTeamMembersDAO().getTeamKillOrDeath(teamName, main.getConfig().getString("mysql.team-members.death"));
72 return new Team(resultSet.getString(name), resultSet.getString(tag), resultSet.getString(prefix), resultSet.getDouble(money), teamMembers, leader, chats, kill, death);
73 }
74 }
75 }
76 return null;
77 }
78
79 private Map<String, Chat> initChats(String teamName) {
80 Map<String, Chat> chats = new HashMap<>();
81 main.getChatList().forEach((name, rank) -> {
82 String chatPrefix = main.getConfig().getString("chat-list." + name + ".prefix");
83 if (chatPrefix == null) chatPrefix = "";
84 try {
85 chats.put(name, new Chat(chatPrefix, main.getTeamMembersDAO().getPlayersWithRankConditions(teamName, rank, main.getTeamMembersDAO().getPlayerMinRank()), rank));
86 } catch (SQLException e) {
87 main.getLogger().log(Level.SEVERE, "$cError during chat " + name + " creation for team " + teamName, e);
88 }
89
90 });
91 return chats;
92 }
93
94 public List<Team> getAllTeams() throws SQLException {
95 List<Team> teams = new ArrayList<>();
96 String statement = "SELECT `" + name + "` FROM `" + table + "`";
97 try (PreparedStatement getTeams = connection.prepareStatement(statement)) {
98 try (ResultSet resultSet = getTeams.executeQuery()) {
99 while (resultSet.next()) {
100 teams.add(getTeam(resultSet.getString(name)));
101 }
102 }
103 }
104 return teams;
105 }
106
107 public void deleteTeam(String teamName) throws SQLException {
108 String statement = "DELETE FROM `" + table + "` WHERE `" + name + "`=?";
109 try (PreparedStatement preparedStatement = connection.prepareStatement(statement)) {
110 preparedStatement.setString(1, teamName);
111 preparedStatement.executeUpdate();
112 }
113 }
114
115 public void modifyMoney(String teamName, double newAmount) throws SQLException {
116 String statement = "UPDATE `" + table + "` SET `" + money + "`=? WHERE `" + name + "`=?";
117 try (PreparedStatement changeMoney = connection.prepareStatement(statement)) {
118 changeMoney.setDouble(1, newAmount);
119 changeMoney.setString(2, teamName);
120 changeMoney.executeUpdate();
121 }
122 }
123
124 public void modifyName(String teamName, String newName) throws SQLException {
125 String statement = "UPDATE `" + table + "` SET `" + name + "`=? WHERE `" + name + "`=?";
126 try (PreparedStatement changeMoney = connection.prepareStatement(statement)) {
127 changeMoney.setString(1, newName);
128 changeMoney.setString(2, teamName);
129 changeMoney.executeUpdate();
130 }
131 }
132
133}