From 0029bfb6f4e833be3cfd20d1bdaf351ce3182417 Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Thu, 7 Jul 2016 13:49:52 +0600 Subject: [PATCH] Some changes in organizing regexp constants. --- .../rscPermissions/API/RowInheritance.java | 4 +- .../simsonic/rscPermissions/API/Settings.java | 24 +++++++++--- .../rscPermissions/Bukkit/VaultChat.java | 8 ++-- .../Bukkit/VaultPermission.java | 2 +- .../Engine/Backends/DatabaseContents.java | 20 +++++----- .../rscPermissions/Engine/InternalCache.java | 38 +++++++++---------- .../Engine/InternalStorage.java | 6 +-- .../rscPermissions/Engine/Matchers.java | 38 ++++++++----------- .../Engine/ResolutionResult.java | 2 +- 9 files changed, 74 insertions(+), 68 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java index d0bd44a..dc7ef08 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java @@ -24,10 +24,10 @@ public class RowInheritance implements Cloneable, Comparable { if(parent != null) { - final String[] splitted = parent.split(Settings.SEPARATOR_REGEXP); + final String[] splitted = parent.split(Settings.REGEXP_SEPARATOR); if(splitted.length > 1) { - parent = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.SEPARATOR); + parent = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.INSTANCE_SEP); instance = splitted[splitted.length - 1]; return; } diff --git a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java index 1c5b67d..0289a92 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/Settings.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/Settings.java @@ -7,12 +7,26 @@ public interface Settings { public static final String UPDATER_URL = "http://simsonic.github.io/rscPermissions/latest.json"; public static final String CHAT_PREFIX = "{GOLD}[rscp] {_LS}"; - public static final String SEPARATOR = "."; - public static final String SEPARATOR_REGEXP = "\\."; - public static final String INSTANTIATOR = "?"; public static final String TEXT_INHERITER = "%"; - public static final char GROUP_LEVEL_TAB = '┏'; - public static final String SPLITTED_ID_SEP = ":"; + public static final char SHOW_GROUP_LEVEL = '┏'; + public static final String INSTANTIATOR = "?"; + public static final String INSTANCE_SEP = "."; + public static final String REGEXP_SEPARATOR = "\\."; + public static final String REGEXP_ROW_SPLIT = "\\s*[;,\\r\\n\\s]+\\s*"; + public static final String REGEXP_NICKNAME = "^[\\*a-zA-Z0-9_-]{3,16}$"; + public static final String REGEXP_UUID_DASH = "^(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})$"; + public static final String REGEXP_UUID = "^([A-Fa-f0-9]{8})([A-Fa-f0-9]{4})([A-Fa-f0-9]{4})([A-Fa-f0-9]{4})([A-Fa-f0-9]{12})$"; + public static final String REGEXP_IPADDR = "^" + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)\\." + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)\\." + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)\\." + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)$"; + public static final String REGEXP_SUBNET = "^" + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\." + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\." + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\." + + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" + + "(?:/([0-9]|[1-2][0-9]|3[0-2]))$"; public void onLoad(); public void onEnable(); public String getDefaultGroup(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java index 2df585a..68e3248 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java @@ -120,26 +120,26 @@ public final class VaultChat extends VaultDeprecatedChat public String getGroupPrefix(String world, String group) { rscp.bridgeForBukkit.printDebugStackTrace(); - return rscp.internalCache.getGroup(group).prefix; + return rscp.internalCache.findGroupRow(group).prefix; } @Override public String getGroupPrefix(World world, String group) { rscp.bridgeForBukkit.printDebugStackTrace(); - return rscp.internalCache.getGroup(group).prefix; + return rscp.internalCache.findGroupRow(group).prefix; } // ***** GET GROUP SUFFIX ***** @Override public String getGroupSuffix(String world, String group) { rscp.bridgeForBukkit.printDebugStackTrace(); - return rscp.internalCache.getGroup(group).suffix; + return rscp.internalCache.findGroupRow(group).suffix; } @Override public String getGroupSuffix(World world, String group) { rscp.bridgeForBukkit.printDebugStackTrace(); - return rscp.internalCache.getGroup(group).suffix; + return rscp.internalCache.findGroupRow(group).suffix; } // ***** SET GROUP PREFIX ***** @Override diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java index 1a1a497..50abec6 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.getGroups(); + final Set groups = rscp.internalCache.getKnownGroups(); return groups.toArray(new String[groups.size()]); } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java index b2ddc78..97341e9 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java @@ -34,11 +34,11 @@ public class DatabaseContents for(RowEntity row : entities) { subRowEntry = 0; - final String[] splittedByEntity = Matchers.genericParse(row.entity); + final String[] splittedByEntity = Matchers.splitDatabaseRows(row.entity); for(String oneEntity : splittedByEntity) { final RowEntity clone = row.clone(); - clone.splittedId = String.format("e%d%s%d", row.id, Settings.SPLITTED_ID_SEP, subRowEntry); + clone.splittedId = String.format("e%d:%d", row.id, subRowEntry); clone.entity = PlayerType.normalize(oneEntity); le.add(clone); subRowEntry += 1; @@ -48,9 +48,9 @@ public class DatabaseContents for(RowPermission row : permissions) { subRowEntry = 0; - final String[] splittedByEntity = Matchers.genericParse(row.entity); - final String[] splittedByPermission = Matchers.genericParse(row.permission); - final String[] splittedByDestination = Matchers.genericParse(row.destinationSource); + final String[] splittedByEntity = Matchers.splitDatabaseRows(row.entity); + final String[] splittedByPermission = Matchers.splitDatabaseRows(row.permission); + final String[] splittedByDestination = Matchers.splitDatabaseRows(row.destinationSource); row.destinationSource = null; for(String oneDestination : splittedByDestination) { @@ -59,7 +59,7 @@ public class DatabaseContents for(String entity : splittedByEntity) { final RowPermission clone = row.clone(); - clone.splittedId = String.format("p%d%s%d", row.id, Settings.SPLITTED_ID_SEP, subRowEntry); + clone.splittedId = String.format("p%d:%d", row.id, subRowEntry); clone.entity = PlayerType.normalize(entity); clone.permission = permission; clone.destination = destination; @@ -72,9 +72,9 @@ public class DatabaseContents for(RowInheritance row : inheritance) { subRowEntry = 0; - final String[] splittedByEntity = Matchers.genericParse(row.entity); - final String[] splittedByParent = Matchers.genericParse(row.parent); - final String[] splittedByDestination = Matchers.genericParse(row.destinationSource); + final String[] splittedByEntity = Matchers.splitDatabaseRows(row.entity); + final String[] splittedByParent = Matchers.splitDatabaseRows(row.parent); + final String[] splittedByDestination = Matchers.splitDatabaseRows(row.destinationSource); row.destinationSource = null; for(String oneDestination : splittedByDestination) { @@ -83,7 +83,7 @@ public class DatabaseContents for(String entity : splittedByEntity) { final RowInheritance clone = row.clone(); - clone.splittedId = String.format("i%d%s%d", row.id, Settings.SPLITTED_ID_SEP, subRowEntry); + clone.splittedId = String.format("i%d:%d", row.id, subRowEntry); clone.entity = PlayerType.normalize(entity); clone.parent = parent; clone.deriveInstance(); diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index 0f6ab99..d82e9d6 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -26,6 +26,23 @@ public class InternalCache extends InternalStorage this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup; this.groupsInheritParentPrefixes = groupsInheritParentPrefixes; } + public synchronized RowEntity findGroupRow(String group) + { + if(group != null && !"".equals(group)) + { + final RowEntity row = entities_g.get(group.toLowerCase()); + if(row != null) + return row; + } + return new RowEntity(); + } + public synchronized Set getKnownGroups() + { + final HashSet result = new HashSet<>(entities_g.size()); + for(RowEntity row : entities_g.values()) + result.add(row.entity); + return result; + } public synchronized ResolutionResult resolvePlayer(String player) { return resolvePlayer(new String[] { player }); @@ -109,7 +126,7 @@ public class InternalCache extends InternalStorage } params.depth -= 1; params.groupList.add(depthPrefix(params.depth) + currentParent.entity - + ("".equals(instantiator) ? "" : Settings.SEPARATOR + instantiator)); + + ("".equals(instantiator) ? "" : Settings.INSTANCE_SEP + instantiator)); // Prefixes and suffixes params.parentEntity = currentParent; params.instantiator = instantiator; @@ -125,7 +142,7 @@ public class InternalCache extends InternalStorage if(depth > 0) { final char[] levelParent = new char[depth]; - levelParent[depth - 1] = Settings.GROUP_LEVEL_TAB; + levelParent[depth - 1] = Settings.SHOW_GROUP_LEVEL; return new String(levelParent).replace('\0', ' '); } return ""; @@ -179,21 +196,4 @@ public class InternalCache extends InternalStorage ? row.destination.isRegionApplicable(params.destRegions, params.instantiator) : false; } - public synchronized RowEntity getGroup(String group) - { - if(group != null && !"".equals(group)) - { - final RowEntity row = entities_g.get(group.toLowerCase()); - if(row != null) - return row; - } - return new RowEntity(); - } - public synchronized Set getGroups() - { - final HashSet result = new HashSet<>(entities_g.size()); - for(RowEntity row : entities_g.values()) - result.add(row.entity); - return result; - } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java index 7049bd3..af01e91 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java @@ -23,12 +23,12 @@ class InternalStorage public synchronized void fill(DatabaseContents contents) { clear(); - this.freshRemoteData = contents.cached; importEntities (contents); importPermissions(contents.permissions); importInheritance(contents.inheritance); - implicit_g = entities_g.get(""); - implicit_u = entities_u.get(""); + freshRemoteData = contents.cached; + implicit_g = entities_g.get(""); + implicit_u = entities_u.get(""); } public boolean isFreshData() { diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java index f407fe5..33aa7d3 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java @@ -2,38 +2,40 @@ package ru.simsonic.rscPermissions.Engine; import java.util.regex.Matcher; import java.util.regex.Pattern; +import ru.simsonic.rscPermissions.API.Settings; public final class Matchers { - private static final String GENERIC_SPLITTER = "\\s*[;,\\r\\n\\s]+\\s*"; - public static String[] genericParse(String multiobject) + private static final Pattern PATTERN_FOR_NICKNAME = Pattern.compile(Settings.REGEXP_NICKNAME); + private static final Pattern PATTERN_FOR_UUID = Pattern.compile(Settings.REGEXP_UUID_DASH); + private static final Pattern PATTERN_FOR_UUID_DASHLESS = Pattern.compile(Settings.REGEXP_UUID); + private static final Pattern PATTERN_FOR_IPADDR = Pattern.compile(Settings.REGEXP_IPADDR); + private static final Pattern PATTERN_FOR_SUBNETMASK = Pattern.compile(Settings.REGEXP_SUBNET); + public static String[] splitDatabaseRows(String multiobject) { - if(multiobject == null) - multiobject = ""; - return multiobject.split(GENERIC_SPLITTER); + return multiobject != null + ? multiobject.split(Settings.REGEXP_ROW_SPLIT) + : new String[] { "" }; } - private static final Pattern NICKNAME_PATTERN = Pattern.compile("^[\\*a-zA-Z0-9_-]{3,16}$"); public static boolean isCorrectNickname(String entityName) { if(entityName == null || "".equals(entityName)) return false; - return NICKNAME_PATTERN.matcher(entityName).matches(); + return PATTERN_FOR_NICKNAME.matcher(entityName).matches(); } - private static final Pattern UUID_PATTERN = Pattern.compile("^(?:[a-f\\d]{8}(?:-[a-f\\d]{4}){3}-[a-f\\d]{12})$"); - private static final Pattern DASHLESS_UUID_PATTERN = Pattern.compile("^([A-Fa-f0-9]{8})([A-Fa-f0-9]{4})([A-Fa-f0-9]{4})([A-Fa-f0-9]{4})([A-Fa-f0-9]{12})$"); public static boolean isCorrectUUID(String entityName) { if(entityName == null || "".equals(entityName)) return false; entityName = entityName.toLowerCase(); - return UUID_PATTERN.matcher(entityName).matches(); + return PATTERN_FOR_UUID.matcher(entityName).matches(); } public static boolean isCorrectDashlessUUID(String entityName) { if(entityName == null || "".equals(entityName)) return false; entityName = entityName.toLowerCase(); - return DASHLESS_UUID_PATTERN.matcher(entityName).matches(); + return PATTERN_FOR_UUID_DASHLESS.matcher(entityName).matches(); } public static String uuidRemoveDashes(String uuid) throws IllegalArgumentException { @@ -46,20 +48,10 @@ public final class Matchers { if(!isCorrectUUID(uuid) && !isCorrectDashlessUUID(uuid)) throw new IllegalArgumentException("Invalid UUID format"); - final Matcher matcher = DASHLESS_UUID_PATTERN.matcher(uuidRemoveDashes(uuid)); + final Matcher matcher = PATTERN_FOR_UUID_DASHLESS.matcher(uuidRemoveDashes(uuid)); return matcher.replaceAll("$1-$2-$3-$4-$5").toLowerCase(); } - private static final Pattern WILDCARD_PATTERN = Pattern.compile("^" - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)\\." - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)\\." - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)\\." - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]|\\*)$"); - private static final Pattern SUBNETMASK_PATTERN = Pattern.compile("^" - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\." - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\." - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\." - + "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" - + "(?:/([0-9]|[1-2][0-9]|3[0-2]))$"); + public static boolean isCorrectWildcard(String wildcard) { /* diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java index 7ad5d84..88e2c9e 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java @@ -40,7 +40,7 @@ public class ResolutionResult public String[] getDeorderedGroups() { final ArrayList list = new ArrayList(groups.size()); - final String separator = new String(new char[] { Settings.GROUP_LEVEL_TAB }); + final String separator = new String(new char[] { Settings.SHOW_GROUP_LEVEL }); for(String group : groups) { String[] splitted = group.split(separator);