diff --git a/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java b/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java index dba6307..bc0bb08 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/EntityType.java @@ -2,9 +2,10 @@ package ru.simsonic.rscPermissions.API; public enum EntityType { - GROUP(0), - PLAYER(1), - UNKNOWN(-1); + GROUP ( 0), + PLAYER ( 1), + UNKNOWN(-1), + ; private final int value; private EntityType(int value) { diff --git a/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java b/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java index f729587..17351f9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/PlayerType.java @@ -5,12 +5,13 @@ import ru.simsonic.rscPermissions.Engine.Matchers; public enum PlayerType { - NAME(0), // 16 chars [_a-zA-Z0-9] max - UUID(1), // 550e8400-e29b-41d4-a716-446655440000 - DASHLESS_UUID(2), // 550e8400e29b41d4a716446655440000 - INTERNET_WILDCARD(3), // 192.168.*.* - INTERNET_SUBNETMASK(4), // 192.168.0.0/16 - INAPPLICABLE(-1); + NAME ( 0), // 16 chars [_a-zA-Z0-9] max + UUID ( 1), // 550e8400-e29b-41d4-a716-446655440000 + DASHLESS_UUID ( 2), // 550e8400e29b41d4a716446655440000 + INTERNET_WILDCARD ( 3), // 192.168.*.* + INTERNET_SUBNETMASK( 4), // 192.168.0.0/16 + INAPPLICABLE (-1), + ; private final int value; private PlayerType(int value) { diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java b/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java index 03466bd..372c090 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java @@ -22,6 +22,7 @@ public class RowEntity implements Cloneable, Comparable @Override public int compareTo(RowEntity other) { - return id - other.id; + final int deltaId = id - other.id; + return deltaId != 0 ? deltaId : entity.compareTo(other.entity); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java index de497a9..f6ac0b7 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java @@ -139,24 +139,51 @@ public class CommandEntity } public void listGroups(CommandSender sender) throws CommandAnswerException { - final List answer = new ArrayList<>(16); - final Set groups = rscp.internalCache.getKnownGroups(); + final List answer = new ArrayList<>(16); + final Set groups = rscp.internalCache.getKnownGroupObjects(); answer.add("There are following known groups in database:"); - for(String group : groups) - if(!"".equals(group)) - answer.add("{_WH}" + group); + for(RowEntity group : groups) + { + final String details = detailsAboutEntity(group); + if(details != null) + answer.add(details); + } throw new CommandAnswerException(answer); } public void listUsers(CommandSender sender) throws CommandAnswerException { - final List answer = new LinkedList<>(); - final Set users = rscp.internalCache.getKnownUsers(); + final List answer = new LinkedList<>(); + final Set users = rscp.internalCache.getKnownUserObjects(); answer.add("There are following known users in database:"); - for(String user : users) - if(!"".equals(user)) - answer.add("{_WH}" + user); + for(RowEntity user : users) + { + final String details = detailsAboutEntity(user); + if(details != null) + answer.add(details); + } throw new CommandAnswerException(answer); } + private String detailsAboutEntity(RowEntity entity) + { + String name = entity.entity; + if("".equals(name)) + // return null; + name = ""; + final StringBuilder sb = new StringBuilder(); + if(entity.splittedId != null) + sb.append("{_WH}").append(entity.splittedId).append(" "); + sb.append("{_YL}").append(name); + if(entity.prefix != null && !"".equals(entity.prefix)) + sb.append("{_LS}, prefix \"").append(entity.prefix).append("{_LS}\""); + if(entity.suffix != null && !"".equals(entity.suffix)) + sb.append("{_LS}, suffix \"").append(entity.suffix).append("{_LS}\""); + if(entity.lifetime != null) + { + final String lifetime = entity.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " "); + sb.append("{_R} {_YL}").append(lifetime); + } + return sb.toString(); + } private void viewEntityPrefix(RowEntity entity) throws CommandAnswerException { final ArrayList answer = new ArrayList<>(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java index 50abec6..2bf3193 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java @@ -320,7 +320,7 @@ public final class VaultPermission extends net.milkbowl.vault.permission.Permiss public String[] getGroups() { bridge.printDebugStackTrace(); - final Set groups = rscp.internalCache.getKnownGroups(); + final Set groups = rscp.internalCache.getKnownGroupNames(); return groups.toArray(new String[groups.size()]); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java index 17198cb..7d6e5ae 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseEditor.java @@ -5,7 +5,6 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.Map; import org.bukkit.Bukkit; -import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes; import ru.simsonic.rscPermissions.API.RowEntity; import ru.simsonic.rscPermissions.API.RowInheritance; @@ -70,40 +69,6 @@ public class DatabaseEditor extends BackendDatabase (row.expirience != 0 ? row.expirience : null), /* FIX LIFETIME */ 0); } - public void apply() throws CommandAnswerException - { - final DatabaseContents contents = prepareChanges(); - // UNDERSTAND WHAT TO DO - if(contents != null) - { - // OPTIONAL: REMOVE OLD `id`'s WITH POTENTIALLY MULTIPLY DATA - if(false) - { - // OPTIONAL: RESTORE DATA THAT SHOULDN'T BE REMOVED - } - // OPTIONAL: INSERT NEW DATA THAT SHOULD BE ADDED - if(false) - { - - } - // COMMIT CHANGES AND UNLOCK TABLES - finishChanges(true); - } else - // CANCEL TRANSACTION AND UNLOCK TABLES - finishChanges(false); - } - private void applyAddUserPermission() - { - } - private void applyAddUserInheritance() - { - } - private void applyRemoveUserPermission() - { - } - private void applyRemoveUserInheritance() - { - } private DatabaseContents prepareChanges() { // START TRANSACTION AND LOCK TABLE diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index 39ed691..ce5a759 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -26,14 +26,22 @@ public class InternalCache extends InternalStorage this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup; this.groupsInheritParentPrefixes = groupsInheritParentPrefixes; } - public synchronized Set getKnownGroups() + public synchronized Set getKnownGroupObjects() + { + return new TreeSet<>(entities_g.values()); + } + public synchronized Set getKnownUserObjects() + { + return new TreeSet<>(entities_u.values()); + } + public synchronized Set getKnownGroupNames() { final Set result = new TreeSet<>(); for(RowEntity row : entities_g.values()) result.add(row.entity); return result; } - public synchronized Set getKnownUsers() + public synchronized Set getKnownUserNames() { final Set result = new TreeSet<>(); for(RowEntity row : entities_u.values())