diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java index a7c7d9d..d754cac 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/ArgumentUtilities.java @@ -8,8 +8,8 @@ public class ArgumentUtilities { public static class OptionalParams { - public Integer expirience; public Destination destination; + public Integer expirience; public Integer lifetime; } public static OptionalParams parseCommandParams(String[] args) throws CommandAnswerException @@ -23,9 +23,17 @@ public class ArgumentUtilities throw new CommandAnswerException("RequiresOneMoreArg"); switch(args[index].toLowerCase()) { - case "e": - case "exp": + case "destination": + case "dest": + case "d": + index += 1; + if(args[index] == null || "".equals(args[index])) + throw new CommandAnswerException("NotEnoughArguments: args #" + index); + result.destination = Destination.parseDestination(args[index]); + break; case "expirience": + case "exp": + case "e": try { index += 1; @@ -36,16 +44,8 @@ public class ArgumentUtilities throw new CommandAnswerException("NullPointerException: args #" + index); } break; - case "d": - case "dest": - case "destination": - index += 1; - if(args[index] == null || "".equals(args[index])) - throw new CommandAnswerException("NotEnoughArguments: args #" + index); - result.destination = Destination.parseDestination(args[index]); - break; - case "l": case "lifetime": + case "l": index += 1; result.lifetime = TimeIntervalParser.parseTimeInterval(args[index]); if(result.lifetime < 0) diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java index b859cb4..3f3f65c 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntity.java @@ -1,11 +1,9 @@ package ru.simsonic.rscPermissions.Bukkit.Commands; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Set; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; @@ -18,15 +16,13 @@ import ru.simsonic.rscPermissions.API.RowPermission; import ru.simsonic.rscPermissions.Bukkit.BukkitUtilities; import ru.simsonic.rscPermissions.Bukkit.Commands.ArgumentUtilities.OptionalParams; import ru.simsonic.rscPermissions.BukkitPluginMain; -import ru.simsonic.rscPermissions.Engine.Matchers; import ru.simsonic.rscPermissions.Engine.ResolutionResult; -public class CommandEntity +public class CommandEntity extends CommandEntityHelper { - private final BukkitPluginMain rscp; CommandEntity(BukkitPluginMain plugin) { - this.rscp = plugin; + super(plugin); } public static enum TargetType { @@ -81,6 +77,36 @@ public class CommandEntity answer.add(line.replace("{:T}", typeId)); return answer; } + public void listGroups(CommandSender sender) throws CommandAnswerException + { + if(sender.hasPermission("rscp.admin") == false) + throw new CommandAnswerException("Not enough permissions."); + final List answer = new ArrayList<>(16); + final Set groups = rscp.internalCache.getKnownGroupObjects(); + answer.add("There are following known groups in database:"); + for(RowEntity group : groups) + { + final String details = showEntityDetails(group); + if(details != null) + answer.add(details); + } + throw new CommandAnswerException(answer); + } + public void listUsers(CommandSender sender) throws CommandAnswerException + { + if(sender.hasPermission("rscp.admin") == false) + throw new CommandAnswerException("Not enough permissions."); + final List answer = new LinkedList<>(); + final Set users = rscp.internalCache.getKnownUserObjects(); + answer.add("There are following known users in database:"); + for(RowEntity user : users) + { + final String details = showEntityDetails(user); + if(details != null) + answer.add(details); + } + throw new CommandAnswerException(answer); + } public void onCommandHub(CommandSender sender, TargetType type, String[] args) throws CommandAnswerException { if(sender.hasPermission("rscp.admin") == false) @@ -300,287 +326,4 @@ public class CommandEntity result.inheritance = new RowInheritance[] {}; return result; } - public void listGroups(CommandSender sender) throws CommandAnswerException - { - if(sender.hasPermission("rscp.admin") == false) - throw new CommandAnswerException("Not enough permissions."); - final List answer = new ArrayList<>(16); - final Set groups = rscp.internalCache.getKnownGroupObjects(); - answer.add("There are following known groups in database:"); - for(RowEntity group : groups) - { - final String details = showEntityDetails(group); - if(details != null) - answer.add(details); - } - throw new CommandAnswerException(answer); - } - public void listUsers(CommandSender sender) throws CommandAnswerException - { - if(sender.hasPermission("rscp.admin") == false) - throw new CommandAnswerException("Not enough permissions."); - final List answer = new LinkedList<>(); - final Set users = rscp.internalCache.getKnownUserObjects(); - answer.add("There are following known users in database:"); - for(RowEntity user : users) - { - final String details = showEntityDetails(user); - if(details != null) - answer.add(details); - } - throw new CommandAnswerException(answer); - } - private String showEntityDetails(RowEntity entity) - { - final String name = entity.entity; - if("".equals(name)) - return null; - final StringBuilder sb = new StringBuilder(); - if(entity.splittedId != null) - sb.append("{_WH}").append(entity.splittedId).append(" "); - sb.append("{_YL}").append(name); - 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", " "); - 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 showEntityPermissions(RowEntity entity) throws CommandAnswerException - { - final ArrayList answer = new ArrayList<>(); - final String typeName = entity.entityType.name().toLowerCase(); - answer.add("Explicit permissions for " + typeName + " {_YL}" + entity.entity + "{_LS}:"); - for(RowPermission permission : entity.permissions) - { - 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 answer = new ArrayList<>(); - answer.add("Explicit parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:"); - for(RowInheritance parent : entity.inheritance) - { - 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 showPlayerPermissions(ResolutionResult result, String user) throws CommandAnswerException - { - if(Matchers.isCorrectDashlessUUID(user)) - user = Matchers.uuidAddDashes(user); - final ArrayList answer = new ArrayList<>(); - answer.add("Permission list for user {_YL}" + user + "{_LS}:"); - for(Map.Entry entry : result.getPermissions().entrySet()) - answer.add((entry.getValue() ? "{_LG}" : "{_LR}") + entry.getKey()); - throw new CommandAnswerException(answer); - } - private void showPlayerParents(ResolutionResult result, String player) throws CommandAnswerException - { - if(Matchers.isCorrectDashlessUUID(player)) - player = Matchers.uuidAddDashes(player); - final ArrayList answer = new ArrayList<>(); - answer.add("List of parent groups for player {_YL}" + player + "{_LS}:"); - for(String group : result.getOrderedGroups()) - answer.add("{_LG}" + group); - throw new CommandAnswerException(answer); - } - 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); - final ArrayList 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 showPlayerSuffix(ResolutionResult result, String user) throws CommandAnswerException - { - if(Matchers.isCorrectDashlessUUID(user)) - user = Matchers.uuidAddDashes(user); - final ArrayList 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(RowEntity entity, String parent, OptionalParams optional) throws CommandAnswerException - { - final String[] splitted = RowInheritance.splitIntoNameAndInstance(parent); - final RowEntity existing = rscp.internalCache.findGroupEntity(splitted[0]); - if(existing != null) - parent = RowInheritance.mergeNameAndInstance(existing.entity, splitted[1]); - // final ArrayList answer = new ArrayList<>(); - final RowInheritance row = new RowInheritance(); - row.entity = entity.entity; - row.entityType = entity.entityType; - row.parent = parent; - if(row.destination == null) - row.destination = optional.destination; - rscp.connection.addInheritance(row); - rscp.fetchNowAndReschedule(); - throw new CommandAnswerException("{_LG}All is ok? I don't ready to check it myself."); - } - private void addPermission(RowEntity entity, String permission, OptionalParams optional) throws CommandAnswerException - { - // final ArrayList answer = new ArrayList<>(); - final RowPermission row = new RowPermission(); - boolean negate = permission.startsWith("-"); - if(negate) - permission = permission.substring(1); - row.entity = entity.entity; - row.entityType = entity.entityType; - row.permission = permission; - row.value = !negate; - if(row.destination == null) - row.destination = optional.destination; - rscp.connection.addPermission(row); - rscp.fetchNowAndReschedule(); - throw new CommandAnswerException("{_LG}All is ok? I don't ready to check it myself."); - } - private void removeGroup(RowEntity entity, String whatToRemove) throws CommandAnswerException - { - final ArrayList answer = new ArrayList<>(); - // Find out what does entered identifier mean? - final LinkedList possibleTargets = new LinkedList<>(); - for(RowInheritance row : entity.inheritance) - { - if(whatToRemove.equalsIgnoreCase(row.splittedId)) - { - if(row.hasClonesInRow()) - answer.add("{_LR}Cannot remove inheritance record {_WH}" - + row.splittedId + "{_LR} from DB due to too complex initial data."); - else - possibleTargets.add(row); - continue; - } - if(whatToRemove.equalsIgnoreCase(row.getParentWithInstance())) - possibleTargets.add(row); - } - if(possibleTargets.isEmpty()) - throw new CommandAnswerException("{_LR}Sorry, I don't understand what I have to remove from DB."); - if(possibleTargets.size() > 1) - throw new CommandAnswerException("{_LR}There are several possibilities what to remove. Please use unique white id."); - final RowInheritance row = possibleTargets.get(0); - rscp.connection.removeInheritanceById(row.id); - answer.add("{_LG}Successfully removed inheritance record {_WH}" + row.splittedId + "{_LG}!"); - rscp.fetchNowAndReschedule(); - throw new CommandAnswerException(answer); - } - private void removePermission(RowEntity entity, String whatToRemove) throws CommandAnswerException - { - final ArrayList answer = new ArrayList<>(); - // Find out what does entered identifier mean? - final LinkedList possibleTargets = new LinkedList<>(); - for(RowPermission row : entity.permissions) - { - if(whatToRemove.equalsIgnoreCase(row.splittedId)) - { - if(row.hasClonesInRow()) - answer.add("{_LR}Cannot remove inheritance record {_WH}" - + row.splittedId + "{_LR} from DB due to too complex initial data."); - else - possibleTargets.add(row); - continue; - } - if(whatToRemove.equalsIgnoreCase(row.permission)) - possibleTargets.add(row); - } - if(possibleTargets.isEmpty()) - throw new CommandAnswerException("{_LR}Sorry, I don't understand what I should remove from DB."); - if(possibleTargets.size() > 1) - throw new CommandAnswerException("{_LR}There are several possibilities what to remove. Please use unique white id."); - final RowPermission row = possibleTargets.get(0); - rscp.connection.removePermissionsById(row.id); - answer.add("{_LG}Successfully removed inheritance record {_WH}" + row.splittedId + "{_LG}!"); - rscp.fetchNowAndReschedule(); - throw new CommandAnswerException(answer); - } } diff --git a/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntityHelper.java b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntityHelper.java new file mode 100644 index 0000000..20d4501 --- /dev/null +++ b/src/main/java/ru/simsonic/rscPermissions/Bukkit/Commands/CommandEntityHelper.java @@ -0,0 +1,279 @@ +package ru.simsonic.rscPermissions.Bukkit.Commands; + +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.bukkit.command.CommandSender; +import ru.simsonic.rscMinecraftLibrary.Bukkit.CommandAnswerException; +import ru.simsonic.rscPermissions.API.EntityType; +import ru.simsonic.rscPermissions.API.RowEntity; +import ru.simsonic.rscPermissions.API.RowInheritance; +import ru.simsonic.rscPermissions.API.RowPermission; +import ru.simsonic.rscPermissions.BukkitPluginMain; +import ru.simsonic.rscPermissions.Engine.Matchers; +import ru.simsonic.rscPermissions.Engine.ResolutionResult; + +public class CommandEntityHelper +{ + protected final BukkitPluginMain rscp; + CommandEntityHelper(BukkitPluginMain plugin) + { + this.rscp = plugin; + } + protected String showEntityDetails(RowEntity entity) + { + final String name = entity.entity; + if("".equals(name)) + return null; + final StringBuilder sb = new StringBuilder(); + if(entity.splittedId != null) + sb.append("{_WH}").append(entity.splittedId).append(" "); + sb.append("{_YL}").append(name); + 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", " "); + 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(); + } + protected void showEntityPermissions(RowEntity entity) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + final String typeName = entity.entityType.name().toLowerCase(); + answer.add("Explicit permissions for " + typeName + " {_YL}" + entity.entity + "{_LS}:"); + for(RowPermission permission : entity.permissions) + { + final String details = showPermissionDetails(permission); + if(details != null) + answer.add(details); + } + throw new CommandAnswerException(answer); + } + protected 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(); + } + protected void showEntityParents(RowEntity entity) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + answer.add("Explicit parent groups for " + entity.entityType.name().toLowerCase() + " {_YL}" + entity.entity + "{_LS}:"); + for(RowInheritance parent : entity.inheritance) + { + final String details = showInheritanceDetails(parent); + if(details != null) + answer.add(details); + } + throw new CommandAnswerException(answer); + } + protected 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(); + } + protected void showPlayerPermissions(ResolutionResult result, String user) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); + final ArrayList answer = new ArrayList<>(); + answer.add("Permission list for user {_YL}" + user + "{_LS}:"); + for(Map.Entry entry : result.getPermissions().entrySet()) + answer.add((entry.getValue() ? "{_LG}" : "{_LR}") + entry.getKey()); + throw new CommandAnswerException(answer); + } + protected void showPlayerParents(ResolutionResult result, String player) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(player)) + player = Matchers.uuidAddDashes(player); + final ArrayList answer = new ArrayList<>(); + answer.add("List of parent groups for player {_YL}" + player + "{_LS}:"); + for(String group : result.getOrderedGroups()) + answer.add("{_LG}" + group); + throw new CommandAnswerException(answer); + } + protected 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)); + } + protected 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)); + } + protected void showPlayerPrefix(ResolutionResult result, String user) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); + final ArrayList answer = new ArrayList<>(); + answer.add("Calculated prefix for user {_YL}" + user + "{_LS} is:"); + answer.add("{_R}\"" + result.getPrefix() + "{_R}\""); + throw new CommandAnswerException(answer); + } + protected void showPlayerSuffix(ResolutionResult result, String user) throws CommandAnswerException + { + if(Matchers.isCorrectDashlessUUID(user)) + user = Matchers.uuidAddDashes(user); + final ArrayList answer = new ArrayList<>(); + answer.add("Calculated suffix for user {_YL}" + user + "{_LS} is:"); + answer.add("{_R}\"" + result.getSuffix() + "{_R}\""); + throw new CommandAnswerException(answer); + } + protected void addGroup(RowEntity entity, String parent, ArgumentUtilities.OptionalParams optional) throws CommandAnswerException + { + final String[] splitted = RowInheritance.splitIntoNameAndInstance(parent); + final RowEntity existing = rscp.internalCache.findGroupEntity(splitted[0]); + if(existing != null) + parent = RowInheritance.mergeNameAndInstance(existing.entity, splitted[1]); + // final ArrayList answer = new ArrayList<>(); + final RowInheritance row = new RowInheritance(); + row.entity = entity.entity; + row.entityType = entity.entityType; + row.parent = parent; + if(row.destination == null) + row.destination = optional.destination; + rscp.connection.addInheritance(row); + rscp.fetchNowAndReschedule(); + throw new CommandAnswerException("{_LG}All is ok? I don't ready to check it myself."); + } + protected void addPermission(RowEntity entity, String permission, ArgumentUtilities.OptionalParams optional) throws CommandAnswerException + { + // final ArrayList answer = new ArrayList<>(); + final RowPermission row = new RowPermission(); + boolean negate = permission.startsWith("-"); + if(negate) + permission = permission.substring(1); + row.entity = entity.entity; + row.entityType = entity.entityType; + row.permission = permission; + row.value = !negate; + if(row.destination == null) + row.destination = optional.destination; + rscp.connection.addPermission(row); + rscp.fetchNowAndReschedule(); + throw new CommandAnswerException("{_LG}All is ok? I don't ready to check it myself."); + } + protected void removeGroup(RowEntity entity, String whatToRemove) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + // Find out what does entered identifier mean? + final LinkedList possibleTargets = new LinkedList<>(); + for(RowInheritance row : entity.inheritance) + { + if(whatToRemove.equalsIgnoreCase(row.splittedId)) + { + if(row.hasClonesInRow()) + answer.add("{_LR}Cannot remove inheritance record {_WH}" + + row.splittedId + "{_LR} from DB due to too complex initial data."); + else + possibleTargets.add(row); + continue; + } + if(whatToRemove.equalsIgnoreCase(row.getParentWithInstance())) + possibleTargets.add(row); + } + if(possibleTargets.isEmpty()) + throw new CommandAnswerException("{_LR}Sorry, I don't understand what I have to remove from DB."); + if(possibleTargets.size() > 1) + throw new CommandAnswerException("{_LR}There are several possibilities what to remove. Please use unique white id."); + final RowInheritance row = possibleTargets.get(0); + rscp.connection.removeInheritanceById(row.id); + answer.add("{_LG}Successfully removed inheritance record {_WH}" + row.splittedId + "{_LG}!"); + rscp.fetchNowAndReschedule(); + throw new CommandAnswerException(answer); + } + protected void removePermission(RowEntity entity, String whatToRemove) throws CommandAnswerException + { + final ArrayList answer = new ArrayList<>(); + // Find out what does entered identifier mean? + final LinkedList possibleTargets = new LinkedList<>(); + for(RowPermission row : entity.permissions) + { + if(whatToRemove.equalsIgnoreCase(row.splittedId)) + { + if(row.hasClonesInRow()) + answer.add("{_LR}Cannot remove inheritance record {_WH}" + + row.splittedId + "{_LR} from DB due to too complex initial data."); + else + possibleTargets.add(row); + continue; + } + if(whatToRemove.equalsIgnoreCase(row.permission)) + possibleTargets.add(row); + } + if(possibleTargets.isEmpty()) + throw new CommandAnswerException("{_LR}Sorry, I don't understand what I should remove from DB."); + if(possibleTargets.size() > 1) + throw new CommandAnswerException("{_LR}There are several possibilities what to remove. Please use unique white id."); + final RowPermission row = possibleTargets.get(0); + rscp.connection.removePermissionsById(row.id); + answer.add("{_LG}Successfully removed inheritance record {_WH}" + row.splittedId + "{_LG}!"); + rscp.fetchNowAndReschedule(); + throw new CommandAnswerException(answer); + } +}