3131import me .innectic .permissify .api .database .ConnectionInformation ;
3232import me .innectic .permissify .api .group .group .PermissionGroup ;
3333import me .innectic .permissify .api .group .ladder .AbstractLadder ;
34+ import me .innectic .permissify .api .group .ladder .impl .DefaultLadder ;
3435import me .innectic .permissify .api .profile .PermissifyProfile ;
3536import me .innectic .permissify .api .util .FormatterType ;
3637
@@ -159,7 +160,7 @@ public boolean connect() {
159160
160161 @ Override
161162 public void reload (List <UUID > onlinePlayers ) {
162- cachedGroups = new ArrayList <>();
163+ cachedGroups = new HashMap <>();
163164 cachedPermissions = new HashMap <>();
164165 superAdmins = new ArrayList <>();
165166
@@ -182,10 +183,11 @@ public void reload(List<UUID> onlinePlayers) {
182183 PreparedStatement groupStatement = connection .get ().prepareStatement ("SELECT * from groups" );
183184 ResultSet groupResults = groupStatement .executeQuery ();
184185 while (groupResults .next ()) {
185- PermissionGroup group = new PermissionGroup (groupResults .getString ("name" ),
186+ String groupName = groupResults .getString ("name" );
187+ PermissionGroup group = new PermissionGroup (groupName ,
186188 groupResults .getString ("chatcolor" ),
187189 groupResults .getString ("prefix" ),
188- groupResults .getString ("suffix" ));
190+ groupResults .getString ("suffix" ), getGroupLadder ( groupName ). orElse ( new DefaultLadder ()) );
189191 PreparedStatement groupPermissionsStatement = connection .get ().prepareStatement ("SELECT * FROM groupPermissions WHERE groupName=?" );
190192 groupPermissionsStatement .setString (1 , group .getName ());
191193 ResultSet groupPermissionsResult = groupPermissionsStatement .executeQuery ();
@@ -203,7 +205,7 @@ public void reload(List<UUID> onlinePlayers) {
203205 }
204206 groupMembersResults .close ();
205207 groupMembersStatement .close ();
206- cachedGroups .add ( group );
208+ cachedGroups .put ( groupName , group );
207209 if (groupResults .getBoolean ("defaultGroup" )) defaultGroup = Optional .of (group );
208210 }
209211 groupStatement .close ();
@@ -218,7 +220,7 @@ public void reload(List<UUID> onlinePlayers) {
218220
219221 @ Override
220222 public void drop () {
221- cachedGroups = new ArrayList <>();
223+ cachedGroups = new HashMap <>();
222224 cachedPermissions = new HashMap <>();
223225 superAdmins = new ArrayList <>();
224226 chatFormat = "" ;
@@ -233,7 +235,7 @@ public void loadProfile(PermissifyProfile profile) {
233235 else removePermission (uuid , permission .getPermission ());
234236 }));
235237 // Create groups
236- profile .getGroups ().forEach (group -> {
238+ profile .getGroups ().forEach (( key , group ) -> {
237239 createGroup (group .getName (), group .getPrefix (), group .getSuffix (), group .getChatColor ());
238240 Optional <PermissionGroup > created = getGroup (group .getName ());
239241 if (!created .isPresent ()) {
@@ -386,9 +388,9 @@ public List<Permission> getPermissions(UUID uuid) {
386388 @ Override
387389 public boolean createGroup (String name , String prefix , String suffix , String chatColor ) {
388390 // Make sure that this group doesn't already exist
389- if (cachedGroups .stream (). anyMatch ( group -> group . getName (). equalsIgnoreCase ( name )) ) return false ;
391+ if (cachedGroups .getOrDefault ( name , null ) != null ) return false ;
390392 // Add the new group to the cache
391- cachedGroups .add ( new PermissionGroup (name , chatColor , prefix , suffix ));
393+ cachedGroups .put ( name , new PermissionGroup (name , chatColor , prefix , suffix , new DefaultLadder () ));
392394
393395 Optional <Connection > connection = getConnection ();
394396 if (!connection .isPresent ()) {
@@ -416,9 +418,10 @@ public boolean createGroup(String name, String prefix, String suffix, String cha
416418
417419 @ Override
418420 public boolean deleteGroup (String name ) {
419- if (getGroups ().stream ().noneMatch (group -> group .getName ().equalsIgnoreCase (name ))) return false ;
421+ if (getGroups ().entrySet ().stream ().map (Map .Entry ::getValue ).noneMatch (group -> group .getName ().equalsIgnoreCase (name )))
422+ return false ;
420423 // Delete from the cache
421- cachedGroups .removeIf ( group -> group . getName (). equalsIgnoreCase ( name ) );
424+ cachedGroups .remove ( name );
422425
423426 Optional <Connection > connection = getConnection ();
424427 if (!connection .isPresent ()) {
@@ -440,16 +443,15 @@ public boolean deleteGroup(String name) {
440443
441444 @ Override
442445 public Optional <PermissionGroup > getGroup (String name ) {
443- return cachedGroups . stream (). filter ( group -> group . getName (). equalsIgnoreCase ( name )). findFirst ( );
446+ return Optional . ofNullable ( cachedGroups . getOrDefault ( name , null ) );
444447 }
445448
446449 @ Override
447450 public boolean addPlayerToGroup (UUID uuid , PermissionGroup group ) {
448451 if (group .hasPlayer (uuid )) return false ;
449452 group .addPlayer (uuid , false );
450453 // Update the cache
451- cachedGroups .removeIf (entry -> entry .getName ().equals (group .getName ()));
452- cachedGroups .add (group );
454+ cachedGroups .put (group .getName (), group );
453455
454456 Optional <Connection > connection = getConnection ();
455457 if (!connection .isPresent ()) {
@@ -476,8 +478,8 @@ public boolean removePlayerFromGroup(UUID uuid, PermissionGroup group) {
476478 if (!group .hasPlayer (uuid )) return false ;
477479 group .removePlayer (uuid );
478480 // Update the cache
479- cachedGroups .removeIf ( entry -> entry . getName (). equals ( group .getName () ));
480- cachedGroups .add ( group );
481+ cachedGroups .remove ( group .getName ());
482+ cachedGroups .put ( group . getName (), group );
481483
482484 Optional <Connection > connection = getConnection ();
483485 if (!connection .isPresent ()) {
@@ -499,13 +501,13 @@ public boolean removePlayerFromGroup(UUID uuid, PermissionGroup group) {
499501 }
500502
501503 @ Override
502- public List < PermissionGroup > getGroups () {
504+ public Map < String , PermissionGroup > getGroups () {
503505 return cachedGroups ;
504506 }
505507
506508 @ Override
507509 public List <PermissionGroup > getGroups (UUID uuid ) {
508- return cachedGroups .stream ().filter (group -> group .hasPlayer (uuid )).collect (Collectors .toList ());
510+ return cachedGroups .entrySet (). stream (). map ( Map . Entry :: getValue ).filter (group -> group .hasPlayer (uuid )).collect (Collectors .toList ());
509511 }
510512
511513 @ Override
@@ -552,7 +554,7 @@ public void updateCache(UUID uuid) {
552554 ResultSet results = statement .executeQuery ();
553555 while (results .next ()) {
554556 String groupName = results .getString ("group" );
555- Optional <PermissionGroup > group = cachedGroups . stream (). filter ( permissionGroup -> permissionGroup . getName (). equals ( groupName )). findFirst ( );
557+ Optional <PermissionGroup > group = getGroup ( groupName );
556558 // Get the group from the database, if we don't have have it already
557559 if (!group .isPresent ()) {
558560 PreparedStatement groupStatement = connection .get ().prepareStatement ("SELECT prefix,suffix,chatcolor FROM groups WHERE name=?" );
@@ -561,7 +563,7 @@ public void updateCache(UUID uuid) {
561563 if (!groupResults .next ()) return ;
562564 PermissionGroup permissionGroup = new PermissionGroup (
563565 groupName , groupResults .getString ("chatcolor" ), groupResults .getString ("prefix" ),
564- groupResults .getString ("suffix" ));
566+ groupResults .getString ("suffix" ), getGroupLadder ( groupName ). orElse ( new DefaultLadder ()) );
565567 groupResults .close ();
566568 groupStatement .close ();
567569 PreparedStatement groupPlayersStatement = connection .get ().prepareStatement ("SELECT uuid,`primary` FROM groupMembers WHERE `group`=?" );
@@ -571,7 +573,7 @@ public void updateCache(UUID uuid) {
571573 permissionGroup .addPlayer (UUID .fromString (groupPlayersResult .getString ("uuid" )),
572574 groupPlayersResult .getBoolean ("primary" ));
573575 }
574- cachedGroups .add ( permissionGroup );
576+ cachedGroups .put ( groupName , permissionGroup );
575577 }
576578 }
577579 results .close ();
@@ -585,7 +587,8 @@ public void updateCache(UUID uuid) {
585587 @ Override
586588 public boolean addGroupPermission (String group , String ... permissions ) {
587589 // Make sure this is a valid group
588- Optional <PermissionGroup > permissionGroup = getGroups ().stream ().filter (permission -> permission .getName ().equalsIgnoreCase (group )).findFirst ();
590+ Optional <PermissionGroup > permissionGroup = getGroups ().entrySet ().stream ().map (Map .Entry ::getValue )
591+ .filter (permission -> permission .getName ().equalsIgnoreCase (group )).findFirst ();
589592 if (!permissionGroup .isPresent ()) return false ;
590593 // Update the cache
591594 for (String permission : permissions ) {
@@ -614,7 +617,8 @@ public boolean addGroupPermission(String group, String... permissions) {
614617
615618 @ Override
616619 public boolean removeGroupPermission (String group , String ... permissions ) {
617- Optional <PermissionGroup > permissionGroup = getGroups ().stream ().filter (permission -> permission .getName ().equalsIgnoreCase (group )).findFirst ();
620+ Optional <PermissionGroup > permissionGroup = getGroups ().entrySet ().stream ().map (Map .Entry ::getValue )
621+ .filter (permission -> permission .getName ().equalsIgnoreCase (group )).findFirst ();
618622 if (!permissionGroup .isPresent ()) return false ;
619623
620624 for (String permission : permissions ) {
@@ -642,7 +646,8 @@ public boolean removeGroupPermission(String group, String... permissions) {
642646
643647 @ Override
644648 public boolean hasGroupPermission (String group , String permission ) {
645- Optional <PermissionGroup > permissionGroup = getGroups ().stream ().filter (perm -> perm .getName ().equalsIgnoreCase (group )).findFirst ();
649+ Optional <PermissionGroup > permissionGroup = getGroups ().entrySet ().stream ().map (Map .Entry ::getValue )
650+ .filter (perm -> perm .getName ().equalsIgnoreCase (group )).findFirst ();
646651 return permissionGroup .map (groupPermission -> groupPermission .hasPermission (permission )).orElse (false );
647652 }
648653
@@ -795,17 +800,17 @@ public void setDefaultGroup(PermissionGroup group) {
795800 }
796801
797802 @ Override
798- public void setGroupLadder (PermissionGroup group , AbstractLadder ladder ) {
799- // TODO: Make this method less expensive
800- group .setLadder (ladder );
801- this .cachedGroups .removeIf ( pGroup -> pGroup . getName (). equals ( group . getName ())); // TODO: Groups should have their own equals thing
802- this . cachedGroups . add ( group );
803+ public void setGroupLadder (String name , AbstractLadder ladder ) {
804+ getGroup ( name ). ifPresent ( group -> {
805+ group .setLadder (ladder );
806+ this .cachedGroups .put ( name , group );
807+ } );
803808 }
804809
805810 @ Override
806- public Optional <AbstractLadder > getGroupLadder (PermissionGroup group ) {
807- // TODO: Actually commit this to the database
808- return Optional .ofNullable ( group .getLadder ());
811+ public Optional <AbstractLadder > getGroupLadder (String name ) {
812+ Optional < PermissionGroup > groupOptional = getGroup ( name );
813+ return groupOptional . map ( permissionGroup -> Optional .of ( permissionGroup .getLadder ())). orElseGet (() -> Optional . of ( new DefaultLadder () ));
809814 }
810815
811816 private boolean hasFormattingTable (Connection connection , String database ) {
0 commit comments