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. 6
      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)
{
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;
}

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 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();

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)
{
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

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()
{
bridge.printDebugStackTrace();
final Set<String> groups = rscp.internalCache.getGroups();
final Set<String> groups = rscp.internalCache.getKnownGroups();
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)
{
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();

38
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<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)
{
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<String> getGroups()
{
final HashSet<String> result = new HashSet<>(entities_g.size());
for(RowEntity row : entities_g.values())
result.add(row.entity);
return result;
}
}

6
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()
{

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.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)
{
/*

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

@ -40,7 +40,7 @@ public class ResolutionResult
public String[] getDeorderedGroups()
{
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)
{
String[] splitted = group.split(separator);

Loading…
Cancel
Save