Browse Source

Better information gathering about all entities. Cancel early serverId filtration.

master
Stanislav Usenkov 9 years ago
parent
commit
460de8eb37
  1. 2
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java
  2. 12
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java
  3. 174
      src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java
  4. 1
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  5. 21
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java
  6. 3
      src/main/java/ru/simsonic/rscPermissions/Engine/InternalStorage.java

2
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitDatabaseFetcher.java

@ -80,7 +80,7 @@ public class BukkitDatabaseFetcher extends RestartableThread
{
rscp.localStorage.cleanup();
rscp.localStorage.saveContents(contents);
contents.filterServerId(rscp.getServer().getServerId());
// contents.filterServerId(rscp.getServer().getServerId());
}
return contents;
}

12
src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/BukkitCommands.java

@ -93,18 +93,18 @@ public class BukkitCommands
if(args.length == 0)
throw new CommandAnswerException(help);
help.add(Phrases.HELP_HEADER_2.toString().replace("{SERVER-ID}", rscp.getServer().getServerId()));
final String mm = rscp.settings.getMaintenanceMode();
if(sender.hasPermission("rscp.admin.lock") && !"".equals(mm))
help.add("{_LS}Server is in maintenance mode \'{_LG}" + mm + "{_LS}\' now!");
final String mmode = rscp.settings.getMaintenanceMode();
if(sender.hasPermission("rscp.admin.lock") && !"".equals(mmode))
help.add("{_WH}Server is in maintenance mode \'{_LG}" + mmode + "{_WH}\' now!");
help.add(Phrases.HELP_USAGE.toString());
if(sender.hasPermission("rscp.admin"))
{
help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.GROUP));
help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.USER));
help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.PLAYER));
help.add("{_YL}/rscp {_LR}groups {_LS}-- show known groups");
help.add("{_YL}/rscp {_LR}users {_LS}-- show known users");
help.add(Phrases.HELP_CMD_USER_LP.toString());
help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.GROUP));
help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.USER));
help.addAll(cmdEntity.getHelpForType(CommandEntity.TargetType.PLAYER));
help.add(Phrases.HELP_CMD_USER_LG.toString());
help.add(Phrases.HELP_CMD_USER_P.toString());
help.add(Phrases.HELP_CMD_USER_S.toString());

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

@ -63,10 +63,13 @@ public class CommandEntity
if(entity == null && result == null)
throw new CommandAnswerException("{_LR}I don't know such name!");
if(args[1] == null)
args[1] = "help";
args[1] = "info";
final String targetName = args[0];
switch(args[1].toLowerCase())
{
case "info":
if(entity != null)
throw new CommandAnswerException(showEntityDetails(entity));
case "help":
throw new CommandAnswerException(getHelpForType(type));
case "prefix":
@ -144,7 +147,7 @@ public class CommandEntity
answer.add("There are following known groups in database:");
for(RowEntity group : groups)
{
final String details = detailsAboutEntity(group);
final String details = showEntityDetails(group);
if(details != null)
answer.add(details);
}
@ -157,67 +160,44 @@ public class CommandEntity
answer.add("There are following known users in database:");
for(RowEntity user : users)
{
final String details = detailsAboutEntity(user);
final String details = showEntityDetails(user);
if(details != null)
answer.add(details);
}
throw new CommandAnswerException(answer);
}
private String detailsAboutEntity(RowEntity entity)
private String showEntityDetails(RowEntity entity)
{
String name = entity.entity;
final String name = entity.entity;
if("".equals(name))
// return null;
name = "<WTF?!?>";
return null;
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}\"");
final boolean isPrefix = entity.prefix != null && !"".equals(entity.prefix);
final boolean isSuffix = entity.suffix != null && !"".equals(entity.suffix);
if(isPrefix || isSuffix)
sb
.append("{_R} {_LS}[\'")
.append(isPrefix ? entity.prefix : "")
.append("{_LS}\', \'")
.append(isSuffix ? entity.suffix : "")
.append("{_LS}\']");
if(entity.lifetime != null)
{
final String lifetime = entity.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " ");
final String lifetime = entity.lifetime
.toLocalDateTime()
.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.replace("T", " ");
sb.append("{_R} {_YL}").append(lifetime);
}
if(entity.permissions != null && entity.permissions.length > 0)
sb.append(String.format("{_R} {_LC}%d{_DC}p", entity.permissions.length));
if(entity.inheritance != null && entity.inheritance.length > 0)
sb.append(String.format("{_R} {_LC}%d{_DC}i", entity.inheritance.length));
return sb.toString();
}
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 viewCalculatedPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getPrefix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewCalculatedSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getSuffix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void showEntityPermissions(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
@ -225,34 +205,64 @@ public class CommandEntity
answer.add("Explicit permissions for " + typeName + " {_YL}" + entity.entity + "{_LS}:");
for(RowPermission permission : entity.permissions)
{
final StringBuilder sb = new StringBuilder();
sb.append("{_WH}").append(permission.splittedId);
sb.append(permission.value ? " {_LG}" : " {_LR}").append(permission.permission);
if(permission.destination != null)
{
final String destination = permission.destination.toString();
if(!"".equals(destination))
sb.append("{_R} {_LC}{_U}").append(destination);
}
if(permission.expirience > 0)
sb.append("{_R} {_LB}").append(permission.expirience).append(" LVLs");
if(permission.lifetime != null)
{
final String lifetime = permission.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " ");
sb.append("{_R} {_YL}").append(lifetime);
}
answer.add(sb.toString());
final String details = showPermissionDetails(permission);
if(details != null)
answer.add(details);
}
throw new CommandAnswerException(answer);
}
private String showPermissionDetails(RowPermission row)
{
final StringBuilder sb = new StringBuilder();
sb.append("{_WH}").append(row.splittedId);
sb.append(row.value ? " {_LG}" : " {_LR}").append(row.permission);
if(row.destination != null)
{
final String destination = row.destination.toString();
if(!"".equals(destination))
sb.append("{_R} {_LC}{_U}").append(destination);
}
if(row.expirience > 0)
sb.append("{_R} {_LB}").append(row.expirience).append(" LVLs");
if(row.lifetime != null)
{
final String lifetime = row.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " ");
sb.append("{_R} {_YL}").append(lifetime);
}
return sb.toString();
}
private void showEntityParents(RowEntity entity) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();
answer.add("Parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:");
answer.add("Explicit parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:");
for(RowInheritance parent : entity.inheritance)
answer.add("{_WH}" + parent.splittedId + " {_LG}" + parent.getParentWithInstance());
{
final String details = showInheritanceDetails(parent);
if(details != null)
answer.add(details);
}
throw new CommandAnswerException(answer);
}
private String showInheritanceDetails(RowInheritance row)
{
final StringBuilder sb = new StringBuilder();
sb.append("{_WH}").append(row.splittedId).append(" {_LG}").append(row.getParentWithInstance());
sb.append(String.format("{_R} {_DG}({_LG}%d{_DG})", row.priority));
if(row.destination != null)
{
final String destination = row.destination.toString();
if(!"".equals(destination))
sb.append("{_R} {_LC}{_U}").append(destination);
}
if(row.expirience > 0)
sb.append("{_R} {_LB}").append(row.expirience).append(" LVLs");
if(row.lifetime != null)
{
final String lifetime = row.lifetime.toLocalDateTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).replace("T", " ");
sb.append("{_R} {_YL}").append(lifetime);
}
return sb.toString();
}
private void listFinalPlayerPermissions(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
@ -273,6 +283,40 @@ 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 viewCalculatedPrefix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getPrefix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void viewCalculatedSuffix(ResolutionResult result, String user) throws CommandAnswerException
{
if(Matchers.isCorrectDashlessUUID(user))
user = Matchers.uuidAddDashes(user);
final ArrayList<String> answer = new ArrayList<>();
answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:");
answer.add("{_R}\"" + result.getSuffix() + "{_R}\"");
throw new CommandAnswerException(answer);
}
private void addGroup(ResolutionResult result, String user, String parent, String destination, Integer seconds) throws CommandAnswerException
{
final ArrayList<String> answer = new ArrayList<>();

1
src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -65,6 +65,7 @@ public final class BukkitPluginMain extends JavaPlugin
settings.getDefaultGroup(),
settings.isDefaultForever(),
settings.isUsingAncestorPrefixes());
internalCache.setCurrentServerId(getServer().getServerId());
Phrases.applyTranslation(settings.getTranslationProvider());
// Restore temporary cached data from json files
final DatabaseContents contents = localStorage.retrieveContents();

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

@ -9,6 +9,7 @@ import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import ru.simsonic.rscMinecraftLibrary.Bukkit.GenericChatCodes;
import ru.simsonic.rscPermissions.API.Destination;
import ru.simsonic.rscPermissions.API.EntityType;
import ru.simsonic.rscPermissions.API.RowEntity;
import ru.simsonic.rscPermissions.API.RowInheritance;
@ -26,6 +27,10 @@ public class InternalCache extends InternalStorage
this.alwaysInheritDefaultGroup = alwaysInheritDefaultGroup;
this.groupsInheritParentPrefixes = groupsInheritParentPrefixes;
}
public void setCurrentServerId(String serverId)
{
super.serverId = serverId;
}
public synchronized Set<RowEntity> getKnownGroupObjects()
{
return new TreeSet<>(entities_g.values());
@ -193,16 +198,20 @@ public class InternalCache extends InternalStorage
{
if(params.expirience < row.expirience)
return false;
return row.destination.isWorldApplicable(params.destWorld, params.instantiator)
? row.destination.isRegionApplicable(params.destRegions, params.instantiator)
: false;
return isDestinationApplicable(params, row.destination);
}
private boolean isInheritanceApplicable(ResolutionParams params, RowInheritance row)
{
if(params.expirience < row.expirience)
return false;
return row.destination.isWorldApplicable(params.destWorld, params.instantiator)
? row.destination.isRegionApplicable(params.destRegions, params.instantiator)
: false;
return isDestinationApplicable(params, row.destination);
}
private boolean isDestinationApplicable(ResolutionParams params, Destination destination)
{
if(destination.isServerIdApplicable(super.serverId) == false)
return false;
if(destination.isWorldApplicable(params.destWorld, params.instantiator) == false)
return false;
return destination.isRegionApplicable(params.destRegions, params.instantiator);
}
}

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

@ -17,6 +17,7 @@ class InternalStorage
protected final HashMap<String, RowEntity> entities_g = new HashMap<>();
protected final HashMap<String, RowEntity> entities_u = new HashMap<>();
protected final RowInheritance defaultInheritance = new RowInheritance();
protected String serverId;
protected RowEntity implicit_g;
protected RowEntity implicit_u;
private boolean freshRemoteData;
@ -102,6 +103,7 @@ class InternalStorage
for(RowPermission row : permissions_p2g)
if(row.entity.toLowerCase().equals(entry))
permissions.add(row);
Collections.sort(permissions);
entities_g.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]);
}
for(String entry : entities_u.keySet())
@ -110,6 +112,7 @@ class InternalStorage
for(RowPermission row : permissions_p2u)
if(row.entity.equals(entry))
permissions.add(row);
Collections.sort(permissions);
entities_u.get(entry).permissions = permissions.toArray(new RowPermission[permissions.size()]);
}
}

Loading…
Cancel
Save