Browse Source

Continue ...

master
SimSonic 9 years ago
parent
commit
eae749baae
  1. 6
      src/main/java/ru/simsonic/rscPermissions/API/Destination.java
  2. 4
      src/main/java/ru/simsonic/rscPermissions/API/EntityType.java
  3. 8
      src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java
  4. 10
      src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java
  5. 8
      src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java
  6. 8
      src/main/java/ru/simsonic/rscPermissions/API/Settings.java
  7. 99
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java
  8. 36
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java
  9. 12
      src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java
  10. 14
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java
  11. 0
      src/main/resources/sqlt/UpdateEntity.sqlt

6
src/main/java/ru/simsonic/rscPermissions/API/Destination.java

@ -31,7 +31,7 @@ public class Destination
if(this.world == null || this.world.isEmpty() || "*".equals(this.world))
return true;
final String instantiated = (instantiator != null && !instantiator.isEmpty())
? this.world.replace(Settings.INSTANTIATOR, instantiator)
? this.world.replace(Settings.INSTANCE_PHOLDER, instantiator)
: this.world;
return wildcardTest(world, instantiated);
}
@ -40,7 +40,7 @@ public class Destination
if(this.region == null || "".equals(this.region) || "*".equals(this.region))
return true;
final String instantiated = (instantiator != null && !"".equals(instantiator))
? this.region.replace(Settings.INSTANTIATOR, instantiator)
? this.region.replace(Settings.INSTANCE_PHOLDER, instantiator)
: this.region;
for(String regionId : regions)
if(wildcardTest(regionId, instantiated))
@ -52,7 +52,7 @@ public class Destination
if(this.region == null || "".equals(this.region) || "*".equals(this.region))
return true;
final String instantiated = (instantiator != null && !"".equals(instantiator))
? this.region.replace(Settings.INSTANTIATOR, instantiator)
? this.region.replace(Settings.INSTANCE_PHOLDER, instantiator)
: this.region;
for(String regionId : regions)
if(wildcardTest(regionId, instantiated))

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

@ -11,6 +11,10 @@ public enum EntityType
{
this.value = value;
}
public int getValue()
{
return value;
}
public static EntityType byValue(int value)
{
for(EntityType constant : EntityType.values())

8
src/main/java/ru/simsonic/rscPermissions/API/RowEntity.java

@ -14,6 +14,14 @@ public class RowEntity implements Cloneable, Comparable<RowEntity>
public transient PlayerType playerType;
public transient RowPermission[] permissions;
public transient RowInheritance[] inheritance;
public boolean isMappedInDB()
{
return splittedId != null && !"".equals(splittedId);
}
public boolean hasClonesInRow()
{
return splittedId != null && splittedId.contains(Settings.SPLITTED_ID_SEP);
}
@Override
public RowEntity clone() throws CloneNotSupportedException
{

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

@ -24,7 +24,7 @@ public class RowInheritance implements Cloneable, Comparable<RowInheritance>
{
if(parent != null)
{
final String[] splitted = parent.split(Settings.REGEXP_SEPARATOR);
final String[] splitted = parent.split(Settings.REGEXP_INSTANCE);
if(splitted.length > 1)
{
parent = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.INSTANCE_SEP);
@ -38,6 +38,14 @@ public class RowInheritance implements Cloneable, Comparable<RowInheritance>
{
return this.parent + (instance.isEmpty() ? "" : "." + instance);
}
public boolean isMappedInDB()
{
return splittedId != null && !"".equals(splittedId);
}
public boolean hasClonesInRow()
{
return splittedId != null && splittedId.contains(Settings.SPLITTED_ID_SEP);
}
@Override
public RowInheritance clone() throws CloneNotSupportedException
{

8
src/main/java/ru/simsonic/rscPermissions/API/RowPermission.java

@ -16,6 +16,14 @@ public class RowPermission implements Cloneable, Comparable<RowPermission>
public transient PlayerType playerType;
public transient String destinationSource;
public transient RowEntity entityObject;
public boolean isMappedInDB()
{
return splittedId != null && !"".equals(splittedId);
}
public boolean hasClonesInRow()
{
return splittedId != null && splittedId.contains(Settings.SPLITTED_ID_SEP);
}
@Override
public RowPermission clone() throws CloneNotSupportedException
{

8
src/main/java/ru/simsonic/rscPermissions/API/Settings.java

@ -1,6 +1,7 @@
package ru.simsonic.rscPermissions.API;
import java.util.Map;
import java.util.regex.Pattern;
import ru.simsonic.rscCommonsLibrary.ConnectionMySQL.ConnectionParams;
public interface Settings
@ -9,11 +10,12 @@ public interface Settings
public static final String CHAT_PREFIX = "{GOLD}[rscp] {_LS}";
public static final String UPDATE_CMD = "/rscp update do";
public static final String TEXT_INHERITER = "%";
public static final String PREFIX_PHOLDER = "%";
public static final char SHOW_GROUP_LEVEL = '┏';
public static final String INSTANTIATOR = "?";
public static final String SPLITTED_ID_SEP = ":";
public static final String INSTANCE_SEP = ".";
public static final String REGEXP_SEPARATOR = "\\.";
public static final String INSTANCE_PHOLDER = "?";
public static final String REGEXP_INSTANCE = Pattern.quote(INSTANCE_SEP);
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})$";

99
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java

@ -15,6 +15,7 @@ import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance;
import ru.simsonic.rscPermissions.API.RowPermission;
import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities;
import ru.simsonic.rscPermissions.Bukkit.Commands.ArgumentUtilities.CommandParams;
import ru.simsonic.rscPermissions.BukkitPluginMain;
import ru.simsonic.rscPermissions.Engine.Matchers;
import ru.simsonic.rscPermissions.Engine.ResolutionResult;
@ -107,16 +108,16 @@ public class CommandEntity
case "prefix":
case "p":
if(result != null)
viewPlayerPrefix(result, targetName);
showPlayerPrefix(result, targetName);
else
viewEntityPrefix(entity);
showEntityPrefix(entity);
break;
case "suffix":
case "s":
if(result != null)
viewPlayerSuffix(result, targetName);
showPlayerSuffix(result, targetName);
else
viewEntitySuffix(entity);
showEntitySuffix(entity);
break;
case "listpermissions":
case "permissions":
@ -134,33 +135,49 @@ public class CommandEntity
else
showEntityParents(entity);
break;
case "info":
if(entity != null)
throw new CommandAnswerException(showEntityDetails(entity));
case "help":
throw new CommandAnswerException(getHelpForType(type));
}
if(args.length < 3)
throw new CommandAnswerException("FEW ARGUMENTS");
final String target = args[2];
args = Arrays.copyOfRange(args, 3, args.length);
CommandParams optional = ArgumentUtilities.parseCommandParams(args);
switch(subcommand)
{
case "addgroup":
case "ag":
// TO DO HERE
addGroup(entity, "group", null, null);
addGroup(entity, target, optional);
break;
case "addpermission":
case "ap":
// TO DO HERE
addPermission(entity, "permission", null, null);
addPermission(entity, target, optional);
break;
case "removegroup":
case "rg":
// TO DO HERE
removeGroup(entity, "group");
removeGroup(entity, target);
break;
case "removepermission":
case "rp":
// TO DO HERE
this.removePermission(entity, "permission");
removePermission(entity, target);
break;
case "setprefix":
case "sp":
// TO DO HERE
break;
case "setsuffix":
case "ss":
// TO DO HERE
break;
case "info":
if(entity != null)
throw new CommandAnswerException(showEntityDetails(entity));
case "help":
default:
throw new CommandAnswerException(getHelpForType(type));
}
throw new CommandAnswerException(getHelpForType(type));
}
public void listGroups(CommandSender sender) throws CommandAnswerException
{
@ -309,23 +326,33 @@ public class CommandEntity
answer.add("{_LG}" + group);
throw new CommandAnswerException(answer);
}
private void viewEntityPrefix(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
answer.add("Own prefix for " + (entity.entityType == EntityType.GROUP ? "group" : "user")
+ " {_YL}" + entity.entity + "{_LS} is:");
answer.add("{_R}\"" + (entity.prefix != null ? entity.prefix : "") + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewEntitySuffix(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
answer.add("Own suffix for " + (entity.entityType == EntityType.GROUP ? "group" : "user")
+ " {_YL}" + entity.entity + "{_LS} is:");
answer.add("{_R}\"" + (entity.suffix != null ? entity.suffix : "") + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewPlayerPrefix(ResolutionResult result, String user) throws CommandAnswerException
private void showEntityPrefix(RowEntity entity) throws CommandAnswerException
{
if(entity.prefix != null)
throw new CommandAnswerException(String.format(
"Own prefix for %s {_YL}%s{_LS} is {_R}\"%s{_R}\"",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity,
entity.prefix));
throw new CommandAnswerException(String.format(
"Own prefix for %s {_YL}%s{_LS} is not set (null).",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity));
}
private void showEntitySuffix(RowEntity entity) throws CommandAnswerException
{
if(entity.suffix != null)
throw new CommandAnswerException(String.format(
"Own suffix for %s {_YL}%s{_LS} is {_R}\"%s{_R}\"",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity,
entity.suffix));
throw new CommandAnswerException(String.format(
"Own suffix for %s {_YL}%s{_LS} is not set (null).",
entity.entityType.equals(EntityType.GROUP) ? "group" : "user",
entity.entity));
}
private void showPlayerPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
@ -334,7 +361,7 @@ public class CommandEntity
answer.add("{_R}\"" + result.getPrefix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewPlayerSuffix(ResolutionResult result, String user) throws CommandAnswerException
private void showPlayerSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
@ -343,12 +370,12 @@ public class CommandEntity
answer.add("{_R}\"" + result.getSuffix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void addGroup(RowEntity entity, String parent, String destination, Integer seconds) throws CommandAnswerException
private void addGroup(RowEntity entity, String parent, CommandParams optional) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
throw new CommandAnswerException(answer);
}
private void addPermission(RowEntity entity, String parent, String destination, Integer seconds) throws CommandAnswerException
private void addPermission(RowEntity entity, String parent, CommandParams optional) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
throw new CommandAnswerException(answer);
@ -356,11 +383,15 @@ public class CommandEntity
private void removeGroup(RowEntity entity, String whatToRemove) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
// Find out what does entered identifier mean?
rscp.connection.removeInheritanceById(1200);
throw new CommandAnswerException(answer);
}
private void removePermission(RowEntity entity, String whatToRemove) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
// Find out what does entered identifier mean?
rscp.connection.removePermissionsById(1200);
throw new CommandAnswerException(answer);
}
}

36
src/main/java/ru/simsonic/rscPermissions/Engine/Backends/BackendDatabase.java

@ -111,18 +111,6 @@ public class BackendDatabase extends ConnectionMySQL
}
return result.toArray(new RowInheritance[result.size()]);
}
public synchronized void updateEntityText(String entity, boolean entity_type, String text, boolean isPrefix)
{
if("".equals(entity))
return;
if("".equals(text) || "\"\"".equals(text))
text = null;
setupQueryTemplate("{ENTITY}", entity);
setupQueryTemplate("{ENTITY_TYPE}", entity_type ? "1" : "0");
setupQueryTemplate("{TEXT_TYPE}", isPrefix ? "prefix" : "suffix");
setupQueryTemplate("{TEXT}", (text != null) ? "'" + text + "'" : "NULL");
executeUpdateT("Update_entity_text");
}
public synchronized void lockTableEntities()
{
executeUpdate("LOCK TABLES `{DATABASE}`.`{PREFIX}entities`;");
@ -151,6 +139,30 @@ public class BackendDatabase extends ConnectionMySQL
{
executeUpdate("ROLLBACK;");
}
public synchronized void updateEntityPrefix(String entity, EntityType type, String prefix)
{
if("".equals(entity))
return;
if("".equals(prefix) || "\"\"".equals(prefix))
prefix = null;
setupQueryTemplate("{ENTITY}", entity);
setupQueryTemplate("{ENTITY_TYPE}", String.valueOf(type.getValue()));
setupQueryTemplate("{TEXT_TYPE}", "prefix");
setupQueryTemplate("{TEXT}", (prefix != null) ? "'" + prefix + "'" : "NULL");
executeUpdateT("UpdateEntity");
}
public synchronized void updateEntitySuffix(String entity, EntityType type, String suffix)
{
if("".equals(entity))
return;
if("".equals(suffix) || "\"\"".equals(suffix))
suffix = null;
setupQueryTemplate("{ENTITY}", entity);
setupQueryTemplate("{ENTITY_TYPE}", String.valueOf(type.getValue()));
setupQueryTemplate("{TEXT_TYPE}", "suffix");
setupQueryTemplate("{TEXT}", (suffix != null) ? "'" + suffix + "'" : "NULL");
executeUpdateT("UpdateEntity");
}
public synchronized void removeEntityById(long id)
{
setupQueryTemplate("{ID}", Long.toString(id));

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

@ -38,8 +38,8 @@ public class DatabaseContents
for(String oneEntity : splittedByE)
{
final RowEntity clone = row.clone();
clone.splittedId = String.format(isAlone ? "e%d" : "e%d:%d",
row.id, subRowEntry);
clone.splittedId = String.format(isAlone ? "e%d" : "e%d%s%d",
row.id, Settings.SPLITTED_ID_SEP, subRowEntry);
clone.entity = PlayerType.normalize(oneEntity);
le.add(clone);
subRowEntry += 1;
@ -61,8 +61,8 @@ public class DatabaseContents
for(String entity : splittedByE)
{
final RowPermission clone = row.clone();
clone.splittedId = String.format(isAlone ? "p%d" : "p%d:%d",
row.id, subRowEntry);
clone.splittedId = String.format(isAlone ? "p%d" : "p%d%s%d",
row.id, Settings.SPLITTED_ID_SEP, subRowEntry);
clone.entity = PlayerType.normalize(entity);
clone.permission = permission;
clone.destination = destination;
@ -87,8 +87,8 @@ public class DatabaseContents
for(String entity : splittedByE)
{
final RowInheritance clone = row.clone();
clone.splittedId = String.format(isAlone ? "i%d" : "i%d:%d",
row.id, subRowEntry);
clone.splittedId = String.format(isAlone ? "i%d" : "i%d%s%d",
row.id, Settings.SPLITTED_ID_SEP, subRowEntry);
clone.entity = PlayerType.normalize(entity);
clone.parent = parent;
clone.deriveInstance();

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

@ -168,9 +168,9 @@ public class InternalCache extends InternalStorage
result.prefix = params.parentEntity.prefix;
result.suffix = params.parentEntity.suffix;
if(result.prefix == null || "".equals(result.prefix))
result.prefix = (gipp ? Settings.TEXT_INHERITER : "");
result.prefix = (gipp ? Settings.PREFIX_PHOLDER : "");
if(result.suffix == null || "".equals(result.suffix))
result.suffix = (gipp ? Settings.TEXT_INHERITER : "");
result.suffix = (gipp ? Settings.PREFIX_PHOLDER : "");
final StringBuilder sbp = new StringBuilder();
final StringBuilder sbs = new StringBuilder();
for(ResolutionResult inherited : intermediate)
@ -180,10 +180,10 @@ public class InternalCache extends InternalStorage
if(inherited.suffix != null)
sbs.append(inherited.suffix);
}
result.prefix = result.prefix.replace(Settings.TEXT_INHERITER, sbp.toString());
result.suffix = result.suffix.replace(Settings.TEXT_INHERITER, sbs.toString());
result.prefix = result.prefix.replace(Settings.INSTANTIATOR, params.instantiator);
result.suffix = result.suffix.replace(Settings.INSTANTIATOR, params.instantiator);
result.prefix = result.prefix.replace(Settings.PREFIX_PHOLDER, sbp.toString());
result.suffix = result.suffix.replace(Settings.PREFIX_PHOLDER, sbs.toString());
result.prefix = result.prefix.replace(Settings.INSTANCE_PHOLDER, params.instantiator);
result.suffix = result.suffix.replace(Settings.INSTANCE_PHOLDER, params.instantiator);
return result;
}
private void processPermissions(ResolutionParams params, List<RowPermission> permissions)
@ -191,7 +191,7 @@ public class InternalCache extends InternalStorage
for(RowPermission row : permissions)
if(isPermissionApplicable(params, row))
params.finalPerms.put(
row.permission.replace(Settings.INSTANTIATOR, params.instantiator),
row.permission.replace(Settings.INSTANCE_PHOLDER, params.instantiator),
row.value);
}
private boolean isPermissionApplicable(ResolutionParams params, RowPermission row)

0
src/main/resources/sqlt/Update_entity_text.sqlt → src/main/resources/sqlt/UpdateEntity.sqlt

Loading…
Cancel
Save