Skip to content

Commit 5e012d1

Browse files
authored
Merge pull request #35 from Innectic/refactor/HUGE
Refactor/huge
2 parents e04a70e + 4454f1d commit 5e012d1

File tree

16 files changed

+388
-78
lines changed

16 files changed

+388
-78
lines changed

API/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,11 @@
1010

1111
<artifactId>PermissifyAPI</artifactId>
1212

13+
<dependencies>
14+
<dependency>
15+
<groupId>com.google.code.gson</groupId>
16+
<artifactId>gson</artifactId>
17+
<version>2.8.0</version>
18+
</dependency>
19+
</dependencies>
1320
</project>

API/src/main/java/me/innectic/permissify/api/PermissifyConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
public class PermissifyConstants {
3838
// TODO: Create a language formatter to allow for translating.
3939

40+
public static final int PERMISSIFY_PROFILE_VERSION = 2;
41+
4042
// Chat messages
4143
private static final String PERMISSIFY_PREFIX = "&a&lPermissify> ";
4244

API/src/main/java/me/innectic/permissify/api/database/DatabaseHandler.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,10 @@ public abstract class DatabaseHandler {
4343
@Getter protected Map<UUID, List<Permission>> cachedPermissions = new HashMap<>();
4444
@Getter protected Map<String, PermissionGroup> cachedGroups = new HashMap<>();
4545
@Getter protected Optional<PermissionGroup> defaultGroup = Optional.empty();
46+
@Getter protected Map<String, AbstractLadder> cachedLadders = new HashMap<>();
4647
@Getter protected final Optional<ConnectionInformation> connectionInformation;
4748
@Getter protected List<UUID> superAdmins = new ArrayList<>();
49+
// Revisit: Maybe different default formatters?
4850
protected String chatFormat = "{group} {username}: {message}";
4951
protected String whisperFormat = "{senderGroup} {username} > {receiverGroup} {to}: {message}";
5052

@@ -71,6 +73,21 @@ public DatabaseHandler(ConnectionInformation connectionInformation) {
7173
*/
7274
public abstract void reload(List<UUID> onlinePlayers);
7375

76+
/**
77+
* Load all groups
78+
*/
79+
protected abstract void loadGroups();
80+
81+
/**
82+
* Load all ladders
83+
*/
84+
protected abstract void loadLadders();
85+
86+
/**
87+
* Load all super admins
88+
*/
89+
protected abstract void loadSuperAdmins();
90+
7491
/**
7592
* Drop all values from the handler.
7693
*/
@@ -239,6 +256,13 @@ public DatabaseHandler(ConnectionInformation connectionInformation) {
239256
*/
240257
public abstract boolean isSuperAdmin(UUID uuid);
241258

259+
/***
260+
* Remove a superadmin.
261+
*
262+
* @param uuid the uuid of the player to remove
263+
*/
264+
public abstract void removeSuperAdmin(UUID uuid);
265+
242266
/**
243267
* Set the format for chat messages
244268
*
@@ -276,6 +300,19 @@ public DatabaseHandler(ConnectionInformation connectionInformation) {
276300
*/
277301
public abstract void setDefaultGroup(PermissionGroup group);
278302

303+
/**
304+
* Set the ladder of a group.
305+
*
306+
* @param group the name of the group
307+
* @param ladder the ladder to add to the group
308+
*/
279309
public abstract void setGroupLadder(String group, AbstractLadder ladder);
310+
311+
/**
312+
* Get the current ladder of a group.
313+
*
314+
* @param group the name of the group to get the ladder from
315+
* @return the ladder, if present.
316+
*/
280317
public abstract Optional<AbstractLadder> getGroupLadder(String group);
281318
}

API/src/main/java/me/innectic/permissify/api/database/handlers/SQLHandler.java

Lines changed: 137 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
import me.innectic.permissify.api.database.ConnectionInformation;
3232
import me.innectic.permissify.api.group.group.PermissionGroup;
3333
import me.innectic.permissify.api.group.ladder.AbstractLadder;
34+
import me.innectic.permissify.api.group.ladder.LadderLevel;
3435
import me.innectic.permissify.api.group.ladder.impl.DefaultLadder;
36+
import me.innectic.permissify.api.group.ladder.impl.LadderBuilder;
3537
import me.innectic.permissify.api.profile.PermissifyProfile;
3638
import me.innectic.permissify.api.util.FormatterType;
3739

@@ -55,7 +57,6 @@ public SQLHandler(ConnectionInformation connectionInformation) {
5557

5658
if(connectionInformation.getMeta().containsKey("sqlite")) {
5759
type = "sqlite";
58-
// TODO: It would be nice to give this types...
5960
Map sqliteData = (Map) connectionInformation.getMeta().get("sqlite");
6061
databaseUrl = (String) sqliteData.get("file");
6162
isUsingSqlite = true;
@@ -93,23 +94,25 @@ public void initialize() {
9394
else connection = Optional.ofNullable(DriverManager.getConnection(baseConnectionURL, connectionInformation.get().getUsername(), connectionInformation.get().getPassword()));
9495
if (!connection.isPresent()) return;
9596
String database = connectionInformation.get().getDatabase();
96-
if (!database.equals("")) database += ".";
97+
if (!database.equals("")) database = ".";
9798
// TODO: This should all be prepared statements, but that breaks for some reason
9899
if (!isUsingSqlite) {
99100
PreparedStatement databaseStatement = connection.get().prepareStatement("CREATE DATABASE IF NOT EXISTS " + database);
100101
databaseStatement.execute();
101102
databaseStatement.close();
102103
}
103104

104-
PreparedStatement groupMembersStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database + "groupMembers (uuid VARCHAR(767) NOT NULL, `group` VARCHAR(700) NOT NULL, `primary` TINYINT NOT NULL)");
105+
PreparedStatement groupMembersStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database +
106+
"groupMembers (uuid VARCHAR(767) NOT NULL, `group` VARCHAR(700) NOT NULL, `primary` TINYINT NOT NULL, ladderPosition INTEGER NOT NULL)");
105107
groupMembersStatement.execute();
106108
groupMembersStatement.close();
107109

108110
PreparedStatement groupPermissionsStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database +"groupPermissions (groupName VARCHAR(767) NOT NULL, permission VARCHAR(767) NOT NULL)");
109111
groupPermissionsStatement.execute();
110112
groupPermissionsStatement.close();
111113

112-
PreparedStatement groupsStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database + "groups (name VARCHAR(100) NOT NULL UNIQUE, prefix VARCHAR(100) NOT NULL, suffix VARCHAR(100) NOT NULL, chatcolor VARCHAR(4) NOT NULL, defaultGroup TINYINT NOT NULL)");
114+
PreparedStatement groupsStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database +
115+
"groups (name VARCHAR(100) NOT NULL UNIQUE, prefix VARCHAR(100) NOT NULL, suffix VARCHAR(100) NOT NULL, chatcolor VARCHAR(4) NOT NULL, defaultGroup TINYINT NOT NULL, ladder VARCHAR(767))");
113116
groupsStatement.execute();
114117
groupsStatement.close();
115118

@@ -121,6 +124,14 @@ public void initialize() {
121124
superAdminStatement.execute();
122125
superAdminStatement.close();
123126

127+
PreparedStatement ladderStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database + "ladders (name VARCHAR(767))");
128+
ladderStatement.execute();
129+
ladderStatement.close();
130+
131+
PreparedStatement ladderLevelStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database + "ladderLevels (ladder VARCHAR(767), name VARCHAR(767), power INTEGER)");
132+
ladderLevelStatement.execute();
133+
ladderLevelStatement.close();
134+
124135
if (!hasFormattingTable(connection.get(), database)) {
125136
PreparedStatement formattingStatement = connection.get().prepareStatement("CREATE TABLE IF NOT EXISTS " + database + "formatting (`format` VARCHAR(400) NOT NULL, formatter VARCHAR(200) NOT NULL)");
126137
formattingStatement.execute();
@@ -163,59 +174,131 @@ public void reload(List<UUID> onlinePlayers) {
163174
cachedGroups = new HashMap<>();
164175
cachedPermissions = new HashMap<>();
165176
superAdmins = new ArrayList<>();
177+
cachedLadders = new HashMap<>();
166178

167179
chatFormat = getChatFormat(true);
168180
whisperFormat = getWhisperFormat(true);
169181

182+
loadSuperAdmins();
183+
loadLadders();
184+
loadGroups();
185+
186+
onlinePlayers.forEach(this::getPermissions);
187+
}
188+
189+
@Override
190+
protected void loadGroups() {
170191
Optional<Connection> connection = getConnection();
171-
if (connection.isPresent()) {
172-
try {
173-
// Load all super admins
174-
PreparedStatement adminStatement = connection.get().prepareStatement("SELECT uuid FROM superAdmin");
175-
ResultSet adminResults = adminStatement.executeQuery();
176-
while (adminResults.next()) {
177-
superAdmins.add(UUID.fromString(adminResults.getString("uuid")));
192+
if (!connection.isPresent()) {
193+
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
194+
return;
195+
}
196+
197+
try {
198+
PreparedStatement groupStatement = connection.get().prepareStatement("SELECT * from groups");
199+
ResultSet groupResults = groupStatement.executeQuery();
200+
while (groupResults.next()) {
201+
String groupName = groupResults.getString("name");
202+
PermissionGroup group = new PermissionGroup(groupName,
203+
groupResults.getString("chatcolor"),
204+
groupResults.getString("prefix"),
205+
groupResults.getString("suffix"), getGroupLadder(groupName).orElse(new DefaultLadder()));
206+
String ladder = groupResults.getString("ladder");
207+
ladder = ladder == null || ladder.equals("") ? null : ladder;
208+
209+
PreparedStatement groupPermissionsStatement = connection.get().prepareStatement("SELECT * FROM groupPermissions WHERE groupName=?");
210+
groupPermissionsStatement.setString(1, group.getName());
211+
ResultSet groupPermissionsResult = groupPermissionsStatement.executeQuery();
212+
213+
while (groupPermissionsResult.next()) {
214+
group.addPermission(groupPermissionsResult.getString("permission"));
178215
}
179-
adminResults.close();
180-
adminStatement.close();
181-
182-
// Load all group names
183-
PreparedStatement groupStatement = connection.get().prepareStatement("SELECT * from groups");
184-
ResultSet groupResults = groupStatement.executeQuery();
185-
while (groupResults.next()) {
186-
String groupName = groupResults.getString("name");
187-
PermissionGroup group = new PermissionGroup(groupName,
188-
groupResults.getString("chatcolor"),
189-
groupResults.getString("prefix"),
190-
groupResults.getString("suffix"), getGroupLadder(groupName).orElse(new DefaultLadder()));
191-
PreparedStatement groupPermissionsStatement = connection.get().prepareStatement("SELECT * FROM groupPermissions WHERE groupName=?");
192-
groupPermissionsStatement.setString(1, group.getName());
193-
ResultSet groupPermissionsResult = groupPermissionsStatement.executeQuery();
194-
while (groupPermissionsResult.next()) {
195-
group.addPermission(groupPermissionsResult.getString("permission"));
196-
}
197-
groupPermissionsResult.close();
198-
groupPermissionsStatement.close();
199-
200-
PreparedStatement groupMembersStatement = connection.get().prepareStatement("SELECT uuid,`primary` FROM groupMembers WHERE `group`=?");
201-
groupMembersStatement.setString(1, group.getName());
202-
ResultSet groupMembersResults = groupMembersStatement.executeQuery();
203-
while (groupMembersResults.next()) {
204-
group.addPlayer(UUID.fromString(groupMembersResults.getString("uuid")), groupMembersResults.getBoolean("primary"));
205-
}
206-
groupMembersResults.close();
207-
groupMembersStatement.close();
208-
cachedGroups.put(groupName, group);
209-
if (groupResults.getBoolean("defaultGroup")) defaultGroup = Optional.of(group);
216+
groupPermissionsResult.close();
217+
groupPermissionsStatement.close();
218+
219+
PreparedStatement groupMembersStatement = connection.get().prepareStatement("SELECT uuid,`primary` FROM groupMembers WHERE `group`=?");
220+
groupMembersStatement.setString(1, group.getName());
221+
222+
ResultSet groupMembersResults = groupMembersStatement.executeQuery();
223+
while (groupMembersResults.next()) {
224+
group.addPlayer(UUID.fromString(groupMembersResults.getString("uuid")), groupMembersResults.getBoolean("primary"));
210225
}
211-
groupStatement.close();
212-
groupResults.close();
213-
connection.get().close();
214-
} catch (SQLException e) {
215-
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.of(e)));
226+
227+
if (ladder == null) {
228+
// Default ladder
229+
group.setLadder(new DefaultLadder());
230+
} else {
231+
// Get the built ladder
232+
group.setLadder(cachedLadders.getOrDefault(ladder, new DefaultLadder()));
233+
}
234+
235+
groupMembersResults.close();
236+
groupMembersStatement.close();
237+
cachedGroups.put(groupName, group);
238+
239+
if (groupResults.getBoolean("defaultGroup")) defaultGroup = Optional.of(group);
216240
}
217-
} else PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
218-
onlinePlayers.forEach(this::getPermissions);
241+
groupResults.close();
242+
groupStatement.close();
243+
} catch (SQLException e) {
244+
e.printStackTrace();
245+
}
246+
}
247+
248+
@Override
249+
protected void loadLadders() {
250+
Optional<Connection> connection = getConnection();
251+
if (!connection.isPresent()) {
252+
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
253+
return;
254+
}
255+
256+
try {
257+
PreparedStatement ladderNameStatements = connection.get().prepareStatement("SELECT * FROM ladders");
258+
ResultSet ladderNameResults = ladderNameStatements.executeQuery();
259+
260+
while (ladderNameResults.next()) {
261+
String ladderName = ladderNameResults.getString("name");
262+
263+
List<LadderLevel> levels = new ArrayList<>();
264+
PreparedStatement ladderLevelsStatement = connection.get().prepareStatement("SELECT * FROM ladderLevels where ladder=?");
265+
ResultSet ladderLevelsResults = ladderLevelsStatement.executeQuery();
266+
267+
while (ladderLevelsResults.next()) {
268+
String levelName = ladderLevelsResults.getString("name");
269+
int levelPower = ladderLevelsResults.getInt("power");
270+
271+
levels.add(new LadderLevel(levelPower, Optional.of(levelName)));
272+
}
273+
274+
LadderBuilder ladderBuilder = new LadderBuilder(new HashMap<>(), levels);
275+
cachedLadders.put(ladderName, ladderBuilder);
276+
}
277+
} catch (SQLException e) {
278+
e.printStackTrace();
279+
}
280+
}
281+
282+
@Override
283+
protected void loadSuperAdmins() {
284+
Optional<Connection> connection = getConnection();
285+
if (!connection.isPresent()) {
286+
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
287+
return;
288+
}
289+
try {
290+
// Load all super admins
291+
PreparedStatement adminStatement = connection.get().prepareStatement("SELECT uuid FROM superAdmin");
292+
ResultSet adminResults = adminStatement.executeQuery();
293+
while (adminResults.next()) {
294+
superAdmins.add(UUID.fromString(adminResults.getString("uuid")));
295+
}
296+
adminResults.close();
297+
adminStatement.close();
298+
connection.get().close();
299+
} catch (SQLException e) {
300+
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.of(e)));
301+
}
219302
}
220303

221304
@Override
@@ -678,6 +761,11 @@ public boolean isSuperAdmin(UUID uuid) {
678761
return superAdmins.contains(uuid);
679762
}
680763

764+
@Override
765+
public void removeSuperAdmin(UUID uuid) {
766+
767+
}
768+
681769
@Override
682770
public void setChatFormat(String format) {
683771
this.chatFormat = format;

API/src/main/java/me/innectic/permissify/api/group/Permission.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,15 @@
3535
* @since 6/8/2017
3636
*/
3737
@AllArgsConstructor
38-
public class Permission implements Serializable {
38+
public class Permission {
3939
@Getter private String permission;
4040
@Getter @Setter private boolean granted;
41+
42+
@Override
43+
public String toString() {
44+
return "Permission [" +
45+
"permission=" + permission +
46+
", granted=" + granted +
47+
"]";
48+
}
4149
}

API/src/main/java/me/innectic/permissify/api/group/group/PermissionGroup.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
* @since 6/14/2017
4040
*/
4141
@RequiredArgsConstructor
42-
public class PermissionGroup implements Serializable {
42+
public class PermissionGroup {
4343
@Getter private final String name;
4444
@Getter private final String chatColor;
4545
@Getter private final String prefix;
@@ -92,4 +92,17 @@ public boolean isPrimaryGroup(UUID uuid) {
9292
public void setPrimaryGroup(UUID uuid, boolean isPrimary) {
9393
players.put(uuid, isPrimary);
9494
}
95+
96+
@Override
97+
public String toString() {
98+
return "PermissionGroup [" +
99+
"name=" + name +
100+
", chatColor=" + chatColor +
101+
", prefix=" + prefix +
102+
", suffix=" + suffix +
103+
", ladder=" + ladder +
104+
", permissions=" + permissions +
105+
", players=" + players +
106+
" ]";
107+
}
95108
}

0 commit comments

Comments
 (0)