· 4 years ago · Feb 14, 2021, 12:14 PM
1package fr.freezman31.pluginmc.utils.claim;
2
3import lu.poucy.qjdb.Colum;
4import lu.poucy.qjdb.Condition;
5import lu.poucy.qjdb.DataBase;
6import lu.poucy.qjdb.requests.DBInsertRequest;
7import lu.poucy.qjdb.requests.DBSelectRequest;
8import lu.poucy.qjdb.results.DBRequestResult;
9import lu.poucy.qjdb.results.DBSelectRequestResult;
10
11
12import java.io.File;
13import java.io.IOException;
14import java.sql.Connection;
15import java.sql.DriverManager;
16import java.sql.SQLException;
17import java.sql.Statement;
18import java.util.*;
19
20import static fr.freezman31.pluginmc.Main.*;
21public final class ClaimChunkTable {
22
23 private static Connection connection;
24
25 public static String HOST = "plugins/PluginMetrics/claim.db";
26 // "jdbc:mysql://localhost/claims?characterEncoding=UTF8", "root", ""
27
28 public ClaimChunkTable() {
29 try {
30 Connection connection = DriverManager.getConnection("jdbc:sqlite:" + HOST); // host
31 Statement stmt = connection.createStatement();
32
33 String query = "CREATE TABLE IF NOT EXISTS `data`(name TEXT, owner TEXT, perms TEXT, players TEXT);";
34
35 stmt.execute(query);
36
37 stmt.close();
38 connection.close();
39 } catch (SQLException e) {
40 e.printStackTrace();
41 }
42 }
43
44 public static void save(ClaimChunkData data) {
45 /*String name = data.getChunk().toString().substring(11).replace('-', 'm').replace('=', 'e').replace('}', 'f').replace('{', 'f');
46
47 try {
48 Connection connection = DriverManager.getConnection("jdbc:sqlite:" + HOST); // host
49 Statement stmt = connection.createStatement();
50
51 String query = "";
52
53 query = "UPDATE `data` ";
54 query += "SET `owner`='" + data.getOwner() + "',";
55
56 String perms = "";
57 for (String s : data.getPermissions().keySet())
58 perms += s + ":" + data.getPermissions().get(s) + ";";
59 try {
60 perms = perms.substring(0, perms.length() - 1);
61 } catch (StringIndexOutOfBoundsException ignore) {
62 }
63 System.out.println(perms);
64 query += "`perms`='" + perms + "',";
65
66 String player = "";
67 for (UUID s : data.getPlayers())
68 player += s + ";";
69 try {
70 player = player.substring(0, player.length() - 1);
71 } catch (StringIndexOutOfBoundsException ignore) {
72 }
73 query += "`players`='" + player + "' ";
74
75 query += "WHERE `name`='" + name + "';";
76
77 stmt.executeUpdate(query);
78 System.out.println(query);
79
80 stmt.close();
81 connection.close();
82 } catch (SQLException e) {
83 e.printStackTrace();
84 }*/
85 DataBase db = new DataBase("pcdb", Arrays.asList("name", "owner", "players", "perms"), Arrays.asList(), new File("db.pcdb"));
86
87 HashMap<String, Object> obj = new HashMap<>();
88 obj.put("owner", data.getOwner().toString());
89 obj.put("name", data.getChunk().toString());
90
91 String perms = "";
92 for(String s : data.getPermissions().keySet())
93 perms += s+":"+data.getPermissions().get(s)+";";
94 try{perms = perms.substring(0, perms.length()-1);}catch(StringIndexOutOfBoundsException ignore) {}
95 obj.put("perms", perms);
96
97 String player = "";
98 for(UUID s : data.getPlayers())
99 player += s+";";
100 try{player = player.substring(0, player.length()-1);}catch(StringIndexOutOfBoundsException ignore) {}
101 obj.put("players", player);
102
103 db.request(new DBInsertRequest(obj));
104 }
105
106 public static void load(ClaimChunkData data) throws IOException {
107
108 /*
109 String name = data.getChunk().toString().substring(11).replace('-', 'm').replace('=', 'e').replace('}', 'f').replace('{', 'f');
110
111 try {
112 Connection connection = DriverManager.getConnection("jdbc:sqlite:"+HOST);
113 Statement stmt = connection.createStatement();
114 ResultSet rs = stmt.executeQuery("SELECT * FROM `data` WHERE `name` = '"+name+"';");
115 if(rs.next()) {
116 if(rs.getString("owner") == null)return;
117 data.setOwner(UUID.fromString(rs.getString("owner")));
118
119 for(String p : rs.getString("perms").split(";"))
120 try {data.addPermission(p.split(":")[0], Boolean.valueOf(p.split(":")[1]));}catch(Exception ignore) {}
121
122 for(String uid : rs.getString("players").split(";"))
123 try {data.addPlayer(UUID.fromString(uid));}catch(Exception ignore) {}
124 }else {
125 String query = "INSERT INTO `data` (`name`,`owner`,`perms`,`players`) ";
126
127 String perms = "";
128 for(String s : data.getPermissions().keySet())
129 perms += s+":"+data.getPermissions().get(s)+";";
130 try{perms = perms.substring(0, perms.length()-1);}catch(StringIndexOutOfBoundsException ignore) {}
131
132 String players = "";
133 for(UUID s : data.getPlayers())
134 players += s+";";
135 try{players = players.substring(0, players.length()-1);}catch(StringIndexOutOfBoundsException ignore) {}
136
137 query += "VALUES ('"+name+"','"+data.getOwner()+"','"+perms+"','"+players+"');";
138
139 stmt.execute(query);
140 }
141 stmt.close();
142 connection.close();
143 } catch (SQLException e) {
144 e.printStackTrace();
145 }*/
146
147
148 File file = new File("claimDB.db");
149 if (!file.exists())
150 db = new DataBase(file);
151 else {
152 file.createNewFile();
153 db = new DataBase(
154 "claimDB", // name
155 Arrays.asList("name", "owner", "perms", "players"),
156 new ArrayList<>(),
157 file
158 );
159 }
160 DBSelectRequestResult select = (DBSelectRequestResult) db.request(new DBSelectRequest(new Colum[] {}, new Condition[] {new Condition("name", Condition.EQUALS, data.getChunk().toString())}));
161
162 if(select.getResult().isEmpty()) { // s'il n'existe pas
163
164 HashMap<String, Object> obj = new HashMap<>();
165 obj.put("owner", data.getOwner().toString());
166 obj.put("name", data.getChunk().toString());
167
168 String perms = "";
169 for(String s : data.getPermissions().keySet())
170 perms += s+":"+data.getPermissions().get(s)+";";
171 try{perms = perms.substring(0, perms.length()-1);}catch(StringIndexOutOfBoundsException ignore) {}
172 obj.put("perms", perms);
173
174 String player = "";
175 for(UUID s : data.getPlayers())
176 player += s+";";
177 try{player = player.substring(0, player.length()-1);}catch(StringIndexOutOfBoundsException ignore) {}
178 obj.put("players", player);
179
180 db.request(new DBInsertRequest(obj));
181
182 }else { // s'il existe
183
184 data.setOwner(UUID.fromString((String) select.getResult().get(0).get("owner")));
185 for(String p : ((String) select.getResult().get(0).get("perms")).split(";"))
186 try {data.addPermission(p.split(":")[0], Boolean.valueOf(p.split(":")[1]));}catch(Exception ignore) {}
187 for(String uid : ((String) select.getResult().get(0).get("players")).split(";"))
188 try {data.addPlayer(UUID.fromString(uid));}catch(Exception ignore) {}
189
190 }
191
192 }
193
194}
195