Browse Source

Some changes in organizing regexp constants.

master
Stanislav Usenkov 9 years ago
parent
commit
0029bfb6f4
  1. 4
      src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java
  2. 24
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  3. 8
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultChat.java
  4. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/VaultPermission.java
  5. 20
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java
  6. 38
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java
  7. 2
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java
  8. 38
      src/main/java/ru/simsonic/rscPermissions/Engine/Matchers.java
  9. 2
      src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java

4
src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java

@ -24,10 +24,10 @@ public class RowInheritance implements Cloneable, Comparable<RowInheritance>
{ {
if(parent != null) if(parent != null)
{ {
final String[] splitted = parent.split(Settings.SEPARATOR_REGEXP); final String[] splitted = parent.split(Settings.REGEXP_SEPARATOR);
if(splitted.length > 1) 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]; instance = splitted[splitted.length - 1];
return; return;
} }

24
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 UPDATER_URL = "http://simsonic.github.io/rscPermissions/latest.json";
public static final String CHAT_PREFIX = "{GOLD}[rscp] {_LS}"; 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 String TEXT_INHERITER = "%";
public static final char GROUP_LEVEL_TAB = '┏'; public static final char SHOW_GROUP_LEVEL = '┏';
public static final String SPLITTED_ID_SEP = ":"; 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 onLoad();
public void onEnable(); public void onEnable();
public String getDefaultGroup(); public String getDefaultGroup();

8
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) public String getGroupPrefix(String world, String group)
{ {
rscp.bridgeForBukkit.printDebugStackTrace(); rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).prefix; return rscp.internalCache.findGroupRow(group).prefix;
} }
@Override @Override
public String getGroupPrefix(World world, String group) public String getGroupPrefix(World world, String group)
{ {
rscp.bridgeForBukkit.printDebugStackTrace(); rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).prefix; return rscp.internalCache.findGroupRow(group).prefix;
} }
// ***** GET GROUP SUFFIX ***** // ***** GET GROUP SUFFIX *****
@Override @Override
public String getGroupSuffix(String world, String group) public String getGroupSuffix(String world, String group)
{ {
rscp.bridgeForBukkit.printDebugStackTrace(); rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).suffix; return rscp.internalCache.findGroupRow(group).suffix;
} }
@Override @Override
public String getGroupSuffix(World world, String group) public String getGroupSuffix(World world, String group)
{ {
rscp.bridgeForBukkit.printDebugStackTrace(); rscp.bridgeForBukkit.printDebugStackTrace();
return rscp.internalCache.getGroup(group).suffix; return rscp.internalCache.findGroupRow(group).suffix;
} }
// ***** SET GROUP PREFIX ***** // ***** SET GROUP PREFIX *****
@Override @Override

2
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() public String[] getGroups()
{ {
bridge.printDebugStackTrace(); bridge.printDebugStackTrace();
final Set<String> groups = rscp.internalCache.getGroups(); final Set<String> groups = rscp.internalCache.getKnownGroups();
return groups.toArray(new String[groups.size()]); return groups.toArray(new String[groups.size()]);
} }
} }

20
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java

@ -34,11 +34,11 @@ public class DatabaseContents
for(RowEntity row : entities) for(RowEntity row : entities)
{ {
subRowEntry = 0; subRowEntry = 0;
final String[] splittedByEntity = Matchers.genericParse(row.entity); final String[] splittedByEntity = Matchers.splitDatabaseRows(row.entity);
for(String oneEntity : splittedByEntity) for(String oneEntity : splittedByEntity)
{ {
final RowEntity clone = row.clone(); 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); clone.entity = PlayerType.normalize(oneEntity);
le.add(clone); le.add(clone);
subRowEntry += 1; subRowEntry += 1;
@ -48,9 +48,9 @@ public class DatabaseContents
for(RowPermission row : permissions) for(RowPermission row : permissions)
{ {
subRowEntry = 0; subRowEntry = 0;
final String[] splittedByEntity = Matchers.genericParse(row.entity); final String[] splittedByEntity = Matchers.splitDatabaseRows(row.entity);
final String[] splittedByPermission = Matchers.genericParse(row.permission); final String[] splittedByPermission = Matchers.splitDatabaseRows(row.permission);
final String[] splittedByDestination = Matchers.genericParse(row.destinationSource); final String[] splittedByDestination = Matchers.splitDatabaseRows(row.destinationSource);
row.destinationSource = null; row.destinationSource = null;
for(String oneDestination : splittedByDestination) for(String oneDestination : splittedByDestination)
{ {
@ -59,7 +59,7 @@ public class DatabaseContents
for(String entity : splittedByEntity) for(String entity : splittedByEntity)
{ {
final RowPermission clone = row.clone(); 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.entity = PlayerType.normalize(entity);
clone.permission = permission; clone.permission = permission;
clone.destination = destination; clone.destination = destination;
@ -72,9 +72,9 @@ public class DatabaseContents
for(RowInheritance row : inheritance) for(RowInheritance row : inheritance)
{ {
subRowEntry = 0; subRowEntry = 0;
final String[] splittedByEntity = Matchers.genericParse(row.entity); final String[] splittedByEntity = Matchers.splitDatabaseRows(row.entity);
final String[] splittedByParent = Matchers.genericParse(row.parent); final String[] splittedByParent = Matchers.splitDatabaseRows(row.parent);
final String[] splittedByDestination = Matchers.genericParse(row.destinationSource); final String[] splittedByDestination = Matchers.splitDatabaseRows(row.destinationSource);
row.destinationSource = null; row.destinationSource = null;
for(String oneDestination : splittedByDestination) for(String oneDestination : splittedByDestination)
{ {
@ -83,7 +83,7 @@ public class DatabaseContents
for(String entity : splittedByEntity) for(String entity : splittedByEntity)
{ {
final RowInheritance clone = row.clone(); 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.entity = PlayerType.normalize(entity);
clone.parent = parent; clone.parent = parent;
clone.deriveInstance(); clone.deriveInstance();

38
src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java

@ -26,6 +26,23 @@ public class InternalCache extends InternalStorage
this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup; this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup;
this.groupsInheritParentPrefixes = groupsInheritParentPrefixes; 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<String> getKnownGroups()
{
final HashSet<String> result = new HashSet<>(entities_g.size());
for(RowEntity row : entities_g.values())
result.add(row.entity);
return result;
}
public synchronized ResolutionResult resolvePlayer(String player) public synchronized ResolutionResult resolvePlayer(String player)
{ {
return resolvePlayer(new String[] { player }); return resolvePlayer(new String[] { player });
@ -109,7 +126,7 @@ public class InternalCache extends InternalStorage
} }
params.depth -= 1; params.depth -= 1;
params.groupList.add(depthPrefix(params.depth) + currentParent.entity params.groupList.add(depthPrefix(params.depth) + currentParent.entity
+ ("".equals(instantiator) ? "" : Settings.SEPARATOR + instantiator)); + ("".equals(instantiator) ? "" : Settings.INSTANCE_SEP + instantiator));
// Prefixes and suffixes // Prefixes and suffixes
params.parentEntity = currentParent; params.parentEntity = currentParent;
params.instantiator = instantiator; params.instantiator = instantiator;
@ -125,7 +142,7 @@ public class InternalCache extends InternalStorage
if(depth > 0) if(depth > 0)
{ {
final char[] levelParent = new char[depth]; 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 new String(levelParent).replace('\0', ' ');
} }
return ""; return "";
@ -179,21 +196,4 @@ public class InternalCache extends InternalStorage
? row.destination.isRegionApplicable(params.destRegions, params.instantiator) ? row.destination.isRegionApplicable(params.destRegions, params.instantiator)
: false; : 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<String> getGroups()
{
final HashSet<String> result = new HashSet<>(entities_g.size());
for(RowEntity row : entities_g.values())
result.add(row.entity);
return result;
}
} }

2
src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java

@ -23,10 +23,10 @@ class InternalStorage
public synchronized void fill(DatabaseContents contents) public synchronized void fill(DatabaseContents contents)
{ {
clear(); clear();
this.freshRemoteData = contents.cached;
importEntities (contents); importEntities (contents);
importPermissions(contents.permissions); importPermissions(contents.permissions);
importInheritance(contents.inheritance); importInheritance(contents.inheritance);
freshRemoteData = contents.cached;
implicit_g = entities_g.get(""); implicit_g = entities_g.get("");
implicit_u = entities_u.get(""); implicit_u = entities_u.get("");
} }

38
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.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import ru.simsonic.rscPermissions.API.Settings;
public final class Matchers public final class Matchers
{ {
private static final String GENERIC_SPLITTER = "\\s*[;,\\r\\n\\s]+\\s*"; private static final Pattern PATTERN_FOR_NICKNAME = Pattern.compile(Settings.REGEXP_NICKNAME);
public static String[] genericParse(String multiobject) 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) return multiobject != null
multiobject = ""; ? multiobject.split(Settings.REGEXP_ROW_SPLIT)
return multiobject.split(GENERIC_SPLITTER); : new String[] { "" };
} }
private static final Pattern NICKNAME_PATTERN = Pattern.compile("^[\\*a-zA-Z0-9_-]{3,16}$");
public static boolean isCorrectNickname(String entityName) public static boolean isCorrectNickname(String entityName)
{ {
if(entityName == null || "".equals(entityName)) if(entityName == null || "".equals(entityName))
return false; 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) public static boolean isCorrectUUID(String entityName)
{ {
if(entityName == null || "".equals(entityName)) if(entityName == null || "".equals(entityName))
return false; return false;
entityName = entityName.toLowerCase(); entityName = entityName.toLowerCase();
return UUID_PATTERN.matcher(entityName).matches(); return PATTERN_FOR_UUID.matcher(entityName).matches();
} }
public static boolean isCorrectDashlessUUID(String entityName) public static boolean isCorrectDashlessUUID(String entityName)
{ {
if(entityName == null || "".equals(entityName)) if(entityName == null || "".equals(entityName))
return false; return false;
entityName = entityName.toLowerCase(); 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 public static String uuidRemoveDashes(String uuid) throws IllegalArgumentException
{ {
@ -46,20 +48,10 @@ public final class Matchers
{ {
if(!isCorrectUUID(uuid) && !isCorrectDashlessUUID(uuid)) if(!isCorrectUUID(uuid) && !isCorrectDashlessUUID(uuid))
throw new IllegalArgumentException("Invalid UUID format"); 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(); 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) public static boolean isCorrectWildcard(String wildcard)
{ {
/* /*

2
src/main/java/ru/simsonic/rscPermissions/Engine/ResolutionResult.java

@ -40,7 +40,7 @@ public class ResolutionResult
public String[] getDeorderedGroups() public String[] getDeorderedGroups()
{ {
final ArrayList<String> list = new ArrayList(groups.size()); final ArrayList<String> 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) for(String group : groups)
{ {
String[] splitted = group.split(separator); String[] splitted = group.split(separator);

Loading…
Cancel
Save