diff --git a/src/main/java/org/ultramine/commands/Command.java b/src/main/java/org/ultramine/commands/Command.java index 6ab6f3f..ceb0cb8 100644 --- a/src/main/java/org/ultramine/commands/Command.java +++ b/src/main/java/org/ultramine/commands/Command.java @@ -11,7 +11,7 @@ { public String name(); public String group(); - public String[] completions() default {}; + public String[] syntax() default {}; public String[] aliases() default {}; public String[] permissions() default {}; public boolean isUsableFromServer() default true; diff --git a/src/main/java/org/ultramine/commands/CommandRegistry.java b/src/main/java/org/ultramine/commands/CommandRegistry.java index 1a2af02..b81698b 100644 --- a/src/main/java/org/ultramine/commands/CommandRegistry.java +++ b/src/main/java/org/ultramine/commands/CommandRegistry.java @@ -61,7 +61,7 @@ .setPermissions(data.permissions()) .setUsableFromServer(data.isUsableFromServer()); - for (String completion : data.completions()) + for (String completion : data.syntax()) builder.addArgumentsPattern(argumentsPatternParser.parse(completion)); builders.add(builder); diff --git a/src/main/java/org/ultramine/permission/CheckResult.java b/src/main/java/org/ultramine/permission/CheckResult.java new file mode 100644 index 0000000..f11d2e6 --- /dev/null +++ b/src/main/java/org/ultramine/permission/CheckResult.java @@ -0,0 +1,29 @@ +package org.ultramine.permission; + +public enum CheckResult +{ + TRUE, FALSE, UNRESOLVED; + + public static CheckResult fromBoolean(boolean value) + { + return value ? TRUE : FALSE; + } + + public boolean toBoolean() + { + return this == TRUE; + } + + public CheckResult invert() + { + switch (this) + { + case TRUE: + return FALSE; + case FALSE: + return TRUE; + default: + return UNRESOLVED; + } + } +} \ No newline at end of file diff --git a/src/main/java/org/ultramine/permission/ClientPermissionManager.java b/src/main/java/org/ultramine/permission/ClientPermissionManager.java index 57daaee..23b34e2 100644 --- a/src/main/java/org/ultramine/permission/ClientPermissionManager.java +++ b/src/main/java/org/ultramine/permission/ClientPermissionManager.java @@ -83,11 +83,11 @@ if (!global.contains(player)) return MetaResolver.BLANK_RESOLVER; - return global.get(player).getMeta(); + return global.get(player).getMetaResolver(); } @Override - public void setMeta(String world, String player, String key, Object value) + public void setMeta(String world, String player, String key, String value) { if (!global.contains(player)) global.add(new User(player)); diff --git a/src/main/java/org/ultramine/permission/DummyPermission.java b/src/main/java/org/ultramine/permission/DummyPermission.java new file mode 100644 index 0000000..6e8c5a8 --- /dev/null +++ b/src/main/java/org/ultramine/permission/DummyPermission.java @@ -0,0 +1,85 @@ +package org.ultramine.permission; + +public class DummyPermission implements IPermission +{ + private String key; + + public DummyPermission(String key) + { + this.key = key.toLowerCase(); + } + + @Override + public String getKey() + { + return key; + } + + @Override + public int getPriority() + { + return Integer.MAX_VALUE; + } + + @Override + public CheckResult check(String key) + { + if (key == null) + return CheckResult.UNRESOLVED; + + key = key.toLowerCase(); + if (key.equals(getKey()) || "*".equals(getKey())) + return CheckResult.TRUE; + + if (getKey().endsWith(".*")) + { + String base = getKey().substring(0, getKey().length() - 3); + if (key.startsWith(base)) + return CheckResult.TRUE; + } + + return CheckResult.UNRESOLVED; + } + + @Override + public String getMeta(String key) + { + return ""; + } + + @Override + public void mergeTo(PermissionResolver resolver) + { + resolver.merge(getKey(), true, getPriority()); + } + + @Override + public void mergeTo(MetaResolver resolver) + { + } + + @Override + public void subscribe(IDirtyListener listener) + { + } + + @Override + public void unsubscribe(IDirtyListener listener) + { + } + + @Override + public int hashCode() + { + return getKey().hashCode(); + } + + @Override + public boolean equals(Object obj) + { + if (obj instanceof IPermission) + return getKey().equals(((IPermission)obj).getKey()); + + return super.equals(obj); + } +} diff --git a/src/main/java/org/ultramine/permission/GroupPermission.java b/src/main/java/org/ultramine/permission/GroupPermission.java index 6f9ed11..1740946 100644 --- a/src/main/java/org/ultramine/permission/GroupPermission.java +++ b/src/main/java/org/ultramine/permission/GroupPermission.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Map; -public class GroupPermission extends PermissionHolder implements IChangeablePermission +public class GroupPermission extends PermissionHolder implements IPermission { private final String key; private final List listeners = new ArrayList(); @@ -15,7 +15,7 @@ this.key = key.toLowerCase(); } - public GroupPermission(String key, Map meta) + public GroupPermission(String key, Map meta) { super(meta); this.key = key.toLowerCase(); @@ -28,21 +28,27 @@ } @Override - public String getName() + public CheckResult check(String key) { - if (innerMeta.containsKey("name")) - return (String) innerMeta.get("name"); - else - return key; + return getPermissionResolver().check(key); } @Override - public String getDescription() + public String getMeta(String key) { - if (innerMeta.containsKey("description")) - return (String) innerMeta.get("description"); - else - return ""; + return getMetaResolver().getString(key); + } + + @Override + public void mergeTo(PermissionResolver resolver) + { + resolver.merge(getPermissionResolver(), getPriority()); + } + + @Override + public void mergeTo(MetaResolver resolver) + { + resolver.merge(getMetaResolver(), getPriority()); } @Override diff --git a/src/main/java/org/ultramine/permission/IChangeablePermission.java b/src/main/java/org/ultramine/permission/IChangeablePermission.java deleted file mode 100644 index cad4c8c..0000000 --- a/src/main/java/org/ultramine/permission/IChangeablePermission.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ultramine.permission; - -public interface IChangeablePermission extends IPermission -{ - public void subscribe(IDirtyListener listener); - public void unsubscribe(IDirtyListener listener); -} diff --git a/src/main/java/org/ultramine/permission/IPermission.java b/src/main/java/org/ultramine/permission/IPermission.java index 4179247..13e4e21 100644 --- a/src/main/java/org/ultramine/permission/IPermission.java +++ b/src/main/java/org/ultramine/permission/IPermission.java @@ -3,10 +3,14 @@ public interface IPermission { public String getKey(); - public String getName(); - public String getDescription(); public int getPriority(); - public PermissionResolver getPermissions(); - public MetaResolver getMeta(); + public CheckResult check(String key); + public String getMeta(String key); + + public void mergeTo(PermissionResolver resolver); + public void mergeTo(MetaResolver resolver); + + public void subscribe(IDirtyListener listener); + public void unsubscribe(IDirtyListener listener); } \ No newline at end of file diff --git a/src/main/java/org/ultramine/permission/IPermissionHandler.java b/src/main/java/org/ultramine/permission/IPermissionHandler.java index 51a99b2..d22905b 100644 --- a/src/main/java/org/ultramine/permission/IPermissionHandler.java +++ b/src/main/java/org/ultramine/permission/IPermissionHandler.java @@ -20,7 +20,7 @@ public MetaResolver getMeta(String world, String player); - public void setMeta(String world, String player, String key, Object value); + public void setMeta(String world, String player, String key, String value); public Set findUsersWithPermission(String world, String permission); diff --git a/src/main/java/org/ultramine/permission/MetaHolder.java b/src/main/java/org/ultramine/permission/MetaHolder.java index 9ff56e4..99bb29a 100644 --- a/src/main/java/org/ultramine/permission/MetaHolder.java +++ b/src/main/java/org/ultramine/permission/MetaHolder.java @@ -5,19 +5,19 @@ public abstract class MetaHolder { - protected Map innerMeta; + protected Map innerMeta; public MetaHolder() { - innerMeta = new HashMap(); + innerMeta = new HashMap(); } - public MetaHolder(Map meta) + public MetaHolder(Map meta) { setInnerMeta(meta); } - public void setMeta(String key, Object value) + public void setMeta(String key, String value) { innerMeta.put(key, value); } @@ -34,18 +34,18 @@ public int getPriority() { - return getMeta().getInt("priority"); + return getMetaResolver().getInt("priority"); } - public Map getInnerMeta() + public Map getInnerMeta() { - return new HashMap(innerMeta); + return new HashMap(innerMeta); } - public void setInnerMeta(Map meta) + public void setInnerMeta(Map meta) { - innerMeta = new HashMap(meta); + innerMeta = new HashMap(meta); } - public abstract MetaResolver getMeta(); + public abstract MetaResolver getMetaResolver(); } diff --git a/src/main/java/org/ultramine/permission/MetaResolver.java b/src/main/java/org/ultramine/permission/MetaResolver.java index 73836da..d587538 100644 --- a/src/main/java/org/ultramine/permission/MetaResolver.java +++ b/src/main/java/org/ultramine/permission/MetaResolver.java @@ -1,13 +1,13 @@ package org.ultramine.permission; -public class MetaResolver extends Resolver +public class MetaResolver extends Resolver { public static final MetaResolver BLANK_RESOLVER = new MetaResolver(); public String getString(String key) { if (values.containsKey(key)) - return (String)values.get(key); + return values.get(key); else return ""; } @@ -15,9 +15,17 @@ public int getInt(String key) { if (values.containsKey(key)) - return (Integer)values.get(key); - else - return 0; + { + try + { + return Integer.parseInt(values.get(key)); + } + catch (Exception ignored) + { + } + } + + return 0; } diff --git a/src/main/java/org/ultramine/permission/NegativePermission.java b/src/main/java/org/ultramine/permission/NegativePermission.java deleted file mode 100644 index aa1b0f0..0000000 --- a/src/main/java/org/ultramine/permission/NegativePermission.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.ultramine.permission; - -public class NegativePermission extends PermissionRepository.ProxyPermission implements IDirtyListener -{ - private PermissionResolver resolver; - private boolean dirty; - - public NegativePermission(IPermission permission) - { - super(permission); - super.subscribe(this); - this.dirty = true; - } - - @Override - public String getKey() - { - return "^" + super.getKey(); - } - - @Override - public String getName() - { - return "NOT: " + super.getName(); - } - - @Override - public String getDescription() - { - if (!super.getDescription().isEmpty()) - return "NOT: " + super.getDescription(); - else - return ""; - } - - @Override - public PermissionResolver getPermissions() - { - if (dirty) - { - resolver = PermissionResolver.createInverted(super.getPermissions()); - dirty = false; - } - return resolver; - } - - @Override - public MetaResolver getMeta() - { - return MetaResolver.BLANK_RESOLVER; - } - - @Override - public void makeDirty() - { - dirty = true; - } -} diff --git a/src/main/java/org/ultramine/permission/Permission.java b/src/main/java/org/ultramine/permission/Permission.java deleted file mode 100644 index f4be49f..0000000 --- a/src/main/java/org/ultramine/permission/Permission.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.ultramine.permission; - -public class Permission implements IPermission -{ - private String key; - private String name; - private String description; - private PermissionResolver resolver; - - public Permission(String key, String name, String description) - { - this.key = key.toLowerCase(); - this.name = name; - this.description = description; - this.resolver = PermissionResolver.createForKey(key, getPriority()); - } - - public Permission(String key) - { - this(key, key, ""); - } - - @Override - public String getKey() - { - return key; - } - - @Override - public String getName() - { - return name; - } - - @Override - public String getDescription() - { - return description; - } - - @Override - public int getPriority() - { - return Integer.MAX_VALUE; - } - - @Override - public PermissionResolver getPermissions() - { - return resolver; - } - - @Override - public MetaResolver getMeta() - { - return MetaResolver.BLANK_RESOLVER; - } - - @Override - public int hashCode() - { - return getKey().hashCode(); - } - - @Override - public boolean equals(Object obj) - { - if (obj instanceof IPermission) - return getKey().equals(((IPermission)obj).getKey()); - - return super.equals(obj); - } -} diff --git a/src/main/java/org/ultramine/permission/PermissionHolder.java b/src/main/java/org/ultramine/permission/PermissionHolder.java index bdb3971..303eb09 100644 --- a/src/main/java/org/ultramine/permission/PermissionHolder.java +++ b/src/main/java/org/ultramine/permission/PermissionHolder.java @@ -19,13 +19,13 @@ this.dirty = false; } - public PermissionHolder(Map meta) + public PermissionHolder(Map meta) { super(meta); this.dirty = true; } - public PermissionResolver getPermissions() + public PermissionResolver getPermissionResolver() { if (isDirty()) calculate(); @@ -34,7 +34,7 @@ } @Override - public MetaResolver getMeta() + public MetaResolver getMetaResolver() { if (isDirty()) calculate(); @@ -48,8 +48,7 @@ return; permissions.put(permission.getKey(), permission); - if (permission instanceof IChangeablePermission) - ((IChangeablePermission) permission).subscribe(this); + permission.subscribe(this); makeDirty(); } @@ -64,20 +63,17 @@ if (!permissions.containsKey(key)) return; - IPermission perm = permissions.remove(key); - if (perm instanceof IChangeablePermission) - ((IChangeablePermission) perm).unsubscribe(this); + IPermission permission = permissions.remove(key); + permission.unsubscribe(this); makeDirty(); } public void clearPermissions() { - for (IPermission perm : permissions.values()) - { - if (perm instanceof IChangeablePermission) - ((IChangeablePermission) perm).unsubscribe(this); - } + for (IPermission permission : permissions.values()) + permission.unsubscribe(this); + permissions.clear(); makeDirty(); } @@ -99,7 +95,7 @@ } @Override - public void setMeta(String key, Object value) + public void setMeta(String key, String value) { super.setMeta(key, value); makeDirty(); @@ -130,10 +126,10 @@ for (IPermission permission : permissions.values()) { - permissionResolver.merge(permission.getPermissions(), permission.getPriority()); - metaResolver.merge(permission.getMeta(), permission.getPriority()); + permission.mergeTo(getPermissionResolver()); + permission.mergeTo(getMetaResolver()); } metaResolver.merge(innerMeta, Integer.MAX_VALUE); } -} +} \ No newline at end of file diff --git a/src/main/java/org/ultramine/permission/PermissionRepository.java b/src/main/java/org/ultramine/permission/PermissionRepository.java index 744bd50..27deaf1 100644 --- a/src/main/java/org/ultramine/permission/PermissionRepository.java +++ b/src/main/java/org/ultramine/permission/PermissionRepository.java @@ -32,7 +32,7 @@ { if (key.startsWith("^")) { - proxyPermissions.put(key, new NegativePermission(getPermission(key.substring(1)))); + proxyPermissions.put(key, new NegativePermission(key)); registeredPermissions.add(key); } else @@ -57,43 +57,36 @@ } ProxyPermission proxy = getPermission(permission.getKey()); - if (permission instanceof IChangeablePermission) - proxy.linkChangeable((IChangeablePermission)permission); - else - proxy.linkSimple(permission); + proxy.link(permission); registeredPermissions.add(permission.getKey()); return proxy; } - public static class ProxyPermission implements IChangeablePermission + public static class ProxyPermission implements IPermission { - private String key; private IPermission wrappedPermission; - private ProxyType proxyType; - private List listeners = new ArrayList(); + private boolean isDummy; + private List listeners; public ProxyPermission(String key) { - this.key = key; - this.wrappedPermission = new Permission(key); - this.proxyType = ProxyType.DUMMY; + this.wrappedPermission = new DummyPermission(key); + this.isDummy = true; + listeners = new ArrayList(); } public ProxyPermission(IPermission permission) { - this.key = permission.getKey(); this.wrappedPermission = permission; - if (permission instanceof IChangeablePermission) - proxyType = ProxyType.CHANGEABLE; - else - proxyType = ProxyType.SIMPLE; + this.isDummy = false; + listeners = new ArrayList(); } @Override public String getKey() { - return key; + return wrappedPermission.getKey(); } public IPermission getWrappedPermission() @@ -101,23 +94,6 @@ return wrappedPermission; } - public ProxyType getType() - { - return proxyType; - } - - @Override - public String getName() - { - return wrappedPermission.getName(); - } - - @Override - public String getDescription() - { - return wrappedPermission.getDescription(); - } - @Override public int getPriority() { @@ -125,55 +101,48 @@ } @Override - public PermissionResolver getPermissions() + public CheckResult check(String key) { - return wrappedPermission.getPermissions(); + return wrappedPermission.check(key); } @Override - public MetaResolver getMeta() + public String getMeta(String key) { - return wrappedPermission.getMeta(); + return wrappedPermission.getMeta(key); + } + + @Override + public void mergeTo(PermissionResolver resolver) + { + wrappedPermission.mergeTo(resolver); + } + + @Override + public void mergeTo(MetaResolver resolver) + { + wrappedPermission.mergeTo(resolver); } @Override public void subscribe(IDirtyListener listener) { - switch (proxyType) - { - case CHANGEABLE: - ((IChangeablePermission)wrappedPermission).subscribe(listener); - break; - case DUMMY: - listeners.add(listener); - break; - } + if (isDummy) + listeners.add(listener); + else + wrappedPermission.subscribe(listener); } @Override public void unsubscribe(IDirtyListener listener) { - switch (proxyType) - { - case CHANGEABLE: - ((IChangeablePermission)wrappedPermission).unsubscribe(listener); - break; - case DUMMY: - listeners.remove(listener); - break; - } + if (isDummy) + listeners.remove(listener); + else + wrappedPermission.unsubscribe(listener); } - private void linkSimple(IPermission permission) - { - wrappedPermission = permission; - for (IDirtyListener listener : listeners) - listener.makeDirty(); - listeners.clear(); - proxyType = ProxyType.SIMPLE; - } - - private void linkChangeable(IChangeablePermission permission) + private void link(IPermission permission) { wrappedPermission = permission; for (IDirtyListener listener : listeners) @@ -181,8 +150,8 @@ permission.subscribe(listener); listener.makeDirty(); } - listeners.clear(); - proxyType = ProxyType.CHANGEABLE; + listeners = null; + isDummy = false; } @Override @@ -202,7 +171,34 @@ { return wrappedPermission.toString(); } - - public static enum ProxyType { DUMMY, SIMPLE, CHANGEABLE } } -} + + private class NegativePermission extends ProxyPermission + { + private String key; + + public NegativePermission(String key) + { + super(getPermission(key.substring(1))); + this.key = key; + } + + @Override + public String getKey() + { + return key; + } + + @Override + public CheckResult check(String key) + { + return super.check(key).invert(); + } + + @Override + public String getMeta(String key) + { + return ""; + } + } +} \ No newline at end of file diff --git a/src/main/java/org/ultramine/permission/PermissionResolver.java b/src/main/java/org/ultramine/permission/PermissionResolver.java index 7c7ba4f..3607453 100644 --- a/src/main/java/org/ultramine/permission/PermissionResolver.java +++ b/src/main/java/org/ultramine/permission/PermissionResolver.java @@ -30,7 +30,7 @@ key = key.toLowerCase(); if (values.containsKey(key)) - return toCheckResult(values.get(key)); + return CheckResult.fromBoolean(values.get(key)); int index = key.lastIndexOf('.'); while (index >= 0) @@ -38,19 +38,13 @@ key = key.substring(0, index); String wildcard = key + ".*"; if (values.containsKey(wildcard)) - return toCheckResult(values.get(wildcard)); + return CheckResult.fromBoolean(values.get(wildcard)); index = key.lastIndexOf('.'); } if (values.containsKey("*")) - return toCheckResult(values.get("*")); + return CheckResult.fromBoolean(values.get("*")); return CheckResult.UNRESOLVED; } - - public enum CheckResult { TRUE, FALSE, UNRESOLVED } - private CheckResult toCheckResult(boolean bool) - { - return bool ? CheckResult.TRUE : CheckResult.FALSE; - } } diff --git a/src/main/java/org/ultramine/permission/Resolver.java b/src/main/java/org/ultramine/permission/Resolver.java index 48b3b21..78a917a 100644 --- a/src/main/java/org/ultramine/permission/Resolver.java +++ b/src/main/java/org/ultramine/permission/Resolver.java @@ -7,8 +7,14 @@ public class Resolver { - protected Map values = new HashMap(); - protected TObjectIntHashMap priorities = new TObjectIntHashMap(); + protected Map values; + protected TObjectIntHashMap priorities; + + public Resolver() + { + values = new HashMap(); + priorities = new TObjectIntHashMap(); + } public void clear() { @@ -18,16 +24,23 @@ public void merge(Resolver anotherResolver, int priority) { - merge(anotherResolver.values, priority); + if (anotherResolver != null) + merge(anotherResolver.values, priority); } public void merge(Map newValues, int priority) { - for (String key : newValues.keySet()) - if (!priorities.containsKey(key) || priorities.get(key) < priority) - { - values.put(key, newValues.get(key)); - priorities.put(key, priority); - } + for (Map.Entry entry : newValues.entrySet()) + merge(entry.getKey(), entry.getValue(), priority); + + } + + public void merge(String key, T value, int priority) + { + if (!priorities.containsKey(key) || priorities.get(key) < priority) + { + values.put(key, value); + priorities.put(key, priority); + } } } diff --git a/src/main/java/org/ultramine/permission/ServerPermissionManager.java b/src/main/java/org/ultramine/permission/ServerPermissionManager.java index 364119a..9ab09f9 100644 --- a/src/main/java/org/ultramine/permission/ServerPermissionManager.java +++ b/src/main/java/org/ultramine/permission/ServerPermissionManager.java @@ -118,11 +118,11 @@ if (!worldContainer.contains(player)) return MetaResolver.BLANK_RESOLVER; - return worldContainer.get(player).getMeta(); + return worldContainer.get(player).getMetaResolver(); } @Override - public void setMeta(String world, String player, String key, Object value) + public void setMeta(String world, String player, String key, String value) { if (!worlds.containsKey(world)) reloadWorld(world); diff --git a/src/main/java/org/ultramine/permission/User.java b/src/main/java/org/ultramine/permission/User.java index 78f77ec..193ac5d 100644 --- a/src/main/java/org/ultramine/permission/User.java +++ b/src/main/java/org/ultramine/permission/User.java @@ -12,7 +12,7 @@ this.name = name.toLowerCase(); } - public User(String name, Map meta) + public User(String name, Map meta) { super(meta); this.name = name.toLowerCase(); @@ -26,6 +26,6 @@ @Override public int getPriority() { - return getMeta().getInt("priority"); + return getMetaResolver().getInt("priority"); } } \ No newline at end of file diff --git a/src/main/java/org/ultramine/permission/UserContainer.java b/src/main/java/org/ultramine/permission/UserContainer.java index e47bfbe..8a5735e 100644 --- a/src/main/java/org/ultramine/permission/UserContainer.java +++ b/src/main/java/org/ultramine/permission/UserContainer.java @@ -5,8 +5,6 @@ import java.util.Map; import java.util.Set; -import static org.ultramine.permission.PermissionResolver.CheckResult; - public class UserContainer { protected Map users; @@ -37,7 +35,7 @@ result = parentContainer.check(userName, permissionKey); if (result == CheckResult.UNRESOLVED && contains(userName)) - result = get(userName).getPermissions().check(permissionKey); + result = get(userName).getPermissionResolver().check(permissionKey); return result; } @@ -57,7 +55,7 @@ for (User user : users.values()) { - if (user.getPermissions().check(permission) == CheckResult.TRUE) + if (user.getPermissionResolver().check(permission) == CheckResult.TRUE) result.add(user.getName()); } diff --git a/src/main/java/org/ultramine/permission/World.java b/src/main/java/org/ultramine/permission/World.java index db24b0f..20e65db 100644 --- a/src/main/java/org/ultramine/permission/World.java +++ b/src/main/java/org/ultramine/permission/World.java @@ -65,12 +65,12 @@ } @Override - protected PermissionResolver.CheckResult check(String userName, String permissionKey) + protected CheckResult check(String userName, String permissionKey) { - PermissionResolver.CheckResult result = super.check(userName, permissionKey); + CheckResult result = super.check(userName, permissionKey); - if (result == PermissionResolver.CheckResult.UNRESOLVED) - result = defaultPermissions.getPermissions().check(permissionKey); + if (result == CheckResult.UNRESOLVED) + result = defaultPermissions.getPermissionResolver().check(permissionKey); return result; } @@ -84,12 +84,12 @@ public static class HolderData { public List permissions; - public Map meta; + public Map meta; public HolderData() { permissions = new ArrayList(); - meta = new HashMap(); + meta = new HashMap(); } public HolderData(PermissionHolder holder) diff --git a/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java b/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java index 5bc0540..96c57e3 100644 --- a/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java +++ b/src/main/java/org/ultramine/permission/commands/BasicPermissionCommands.java @@ -13,7 +13,7 @@ group = "permissions", aliases = {"permissions", "pcfg"}, permissions = {"permissions.admin"}, - completions = {"[save reload]"} + syntax = {"[save reload]"} ) public static void pcofnig(CommandContext context) { @@ -35,7 +35,7 @@ name = "pworld", group = "permissions", permissions = {"permissions.admin.world"}, - completions = { + syntax = { "[add remove] ...", " [add remove] ..." } @@ -84,7 +84,7 @@ name = "puser", group = "permissions", permissions = {"permissions.admin.user"}, - completions = { + syntax = { " [add remove] ...", " [meta] <%value>", " [add remove] ...", @@ -149,7 +149,7 @@ name = "pgroup", group = "permissions", permissions = {"permissions.admin.group"}, - completions = { + syntax = { " [add remove] ...", " [meta] <%value>" } diff --git a/src/main/java/org/ultramine/server/PermissionHandler.java b/src/main/java/org/ultramine/server/PermissionHandler.java index 5fb331d..b0e18e0 100644 --- a/src/main/java/org/ultramine/server/PermissionHandler.java +++ b/src/main/java/org/ultramine/server/PermissionHandler.java @@ -1,13 +1,8 @@ package org.ultramine.server; import net.minecraft.command.ICommandSender; -import org.ultramine.permission.ClientPermissionManager; -import org.ultramine.permission.IPermission; -import org.ultramine.permission.IPermissionHandler; -import org.ultramine.permission.MetaResolver; -import org.ultramine.permission.Permission; -import org.ultramine.permission.PermissionRepository; -import org.ultramine.permission.ServerPermissionManager; +import org.ultramine.permission.*; +import org.ultramine.permission.DummyPermission; import java.util.Set; @@ -18,12 +13,13 @@ private static PermissionHandler instance; private static PermissionRepository mainRepository = new PermissionRepository(); + // TODO: Удалить public static void registerPermission(String key, String name, String description) { if (instance != null) - getInstance().getRepository().registerPermission(new Permission(key, name, description)); + getInstance().getRepository().registerPermission(new DummyPermission(key)); else - mainRepository.registerPermission(new Permission(key, name, description)); + mainRepository.registerPermission(new DummyPermission(key)); } public static void registerPermission(IPermission permission) @@ -164,12 +160,12 @@ } @Override - public void setMeta(String world, String player, String key, Object value) + public void setMeta(String world, String player, String key, String value) { handler.setMeta(world, player, key, value); } - public void setMeta(ICommandSender player, String key, Object value) + public void setMeta(ICommandSender player, String key, String value) { setMeta(worldName(player), player.getCommandSenderName(), key, value); } diff --git a/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy b/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy index e3331cb..cccb648 100644 --- a/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy +++ b/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy @@ -22,8 +22,8 @@ !group2.isDirty() and: "Both groups have own meta" - group1.getMeta().getString("m1") - group2.getMeta().getString("m2") + group1.getMetaResolver().getString("m1") + group2.getMetaResolver().getString("m2") } def "Test dirty notification"() { @@ -44,7 +44,7 @@ def "Test subscribing to permission changes"() { setup: def sPerm = Mock(IPermission) { getKey() >> "p" } - def cPerm = Mock(IChangeablePermission) { getKey() >> "c" } + def cPerm = Mock(IPermission) { getKey() >> "c" } def group = new GroupPermission("group.test") when: "Add permissions to group" @@ -78,9 +78,9 @@ group.getName() == "Test1" group.getDescription() == "Test2" group.getPriority() == 200 - group.getMeta().getString("perfix") == "Test3" - group.getMeta().getString("asd") == "" - group.getMeta().getInt("dsa") == 0 + group.getMetaResolver().getString("perfix") == "Test3" + group.getMetaResolver().getString("asd") == "" + group.getMetaResolver().getInt("dsa") == 0 } def "Test blank group"() { diff --git a/src/test/groovy/org/ultramine/permission/NegativePermissionTest.groovy b/src/test/groovy/org/ultramine/permission/NegativePermissionTest.groovy index c548bab..c6de2c1 100644 --- a/src/test/groovy/org/ultramine/permission/NegativePermissionTest.groovy +++ b/src/test/groovy/org/ultramine/permission/NegativePermissionTest.groovy @@ -1,6 +1,6 @@ package org.ultramine.permission -import static org.ultramine.permission.PermissionResolver.CheckResult.* +import static CheckResult.* import spock.lang.Specification /** @@ -15,18 +15,18 @@ getName() >> "Test Name" getDescription() >> "Test Description" getPriority() >> 100 - getPermissions() >> PermissionResolver.createForKey("test.key", 1) + getPermissionResolver() >> PermissionResolver.createForKey("test.key", 1) } when: "Create new NegativePermission" - def perm = new NegativePermission(permission) + def perm = new PermissionRepository.NegativePermission(permission) then: "PermissionResolver was inverted" perm.getKey() == "^test.key" perm.getName() == "NOT: Test Name" perm.getDescription() == "NOT: Test Description" perm.getPriority() == 100 - perm.getPermissions().check("test.key") == FALSE + perm.getPermissionResolver().check("test.key") == FALSE } def "Test subscribe/unsubscribe IPermission"() { @@ -34,7 +34,7 @@ IPermission permission = Mock(IPermission) def listener = Mock(IDirtyListener) - def perm = new NegativePermission(permission) + def perm = new PermissionRepository.NegativePermission(permission) when: "Try to subscribe/unsubscribe listener" perm.subscribe(listener) @@ -47,23 +47,23 @@ def "Test wrap IChangeablePermission"() { setup: "Create new NegativePermission" - IPermission permission = Mock(IChangeablePermission) { + IPermission permission = Mock(IPermission) { getKey() >> "test.key" getName() >> "Test Name" getDescription() >> "Test Description" getPriority() >> 100 - getPermissions() >> PermissionResolver.createForKey("test.key", 1) + getPermissionResolver() >> PermissionResolver.createForKey("test.key", 1) } when: "Create new NegativePermission" - def perm = new NegativePermission(permission) + def perm = new PermissionRepository.NegativePermission(permission) then: "PermissionResolver was inverted" perm.getKey() == "^test.key" perm.getName() == "NOT: Test Name" perm.getDescription() == "NOT: Test Description" perm.getPriority() == 100 - perm.getPermissions().check("test.key") == FALSE + perm.getPermissionResolver().check("test.key") == FALSE and: "Subscribed to permission" 1 * permission.subscribe(_) @@ -71,10 +71,10 @@ def "Test subscribe/unsubscribe IChangeablePermission"() { setup: - IPermission permission = Mock(IChangeablePermission) + IPermission permission = Mock(IPermission) def listener = Mock(IDirtyListener) - def perm = new NegativePermission(permission) + def perm = new PermissionRepository.NegativePermission(permission) when: "Try to subscribe/unsubscribe listener" perm.subscribe(listener) @@ -88,12 +88,12 @@ def "Test blank description"() { setup: "Permission with blank description" - IPermission permission = Mock(IChangeablePermission) { + IPermission permission = Mock(IPermission) { getDescription() >> "" } when: "Create new NegativePermission" - def perm = new NegativePermission(permission) + def perm = new PermissionRepository.NegativePermission(permission) then: "Description is blank" perm.getDescription() == "" @@ -102,7 +102,7 @@ def "Test blank meta"() { when: "Create new NegativePermission" - def perm = new NegativePermission(Mock(IPermission)) + def perm = new PermissionRepository.NegativePermission(Mock(IPermission)) then: "Description is blank" perm.getMeta() == MetaResolver.BLANK_RESOLVER @@ -111,19 +111,19 @@ def "Test integration with group permission"() { setup: def group = new GroupPermission("group") - group.addPermission(new Permission("p1")) + group.addPermission(new DummyPermission("p1")) when: "Create negative permission" - def perm = new NegativePermission(group) + def perm = new PermissionRepository.NegativePermission(group) then: "Negative permission contains group permissions" - perm.getPermissions().check("p1") == FALSE + perm.getPermissionResolver().check("p1") == FALSE when: "Group permission updates" - group.addPermission(new Permission("p2")) + group.addPermission(new DummyPermission("p2")) then: "Negative permission also updates" - perm.getPermissions().check("p1") == FALSE - perm.getPermissions().check("p2") == FALSE + perm.getPermissionResolver().check("p1") == FALSE + perm.getPermissionResolver().check("p2") == FALSE } } diff --git a/src/test/groovy/org/ultramine/permission/PermissionHolderTest.groovy b/src/test/groovy/org/ultramine/permission/PermissionHolderTest.groovy index 7c35bf8..2a112cd 100644 --- a/src/test/groovy/org/ultramine/permission/PermissionHolderTest.groovy +++ b/src/test/groovy/org/ultramine/permission/PermissionHolderTest.groovy @@ -2,7 +2,7 @@ import spock.lang.Specification -import static org.ultramine.permission.PermissionResolver.CheckResult.UNRESOLVED +import static CheckResult.UNRESOLVED class PermissionHolderTest extends Specification { @@ -18,13 +18,13 @@ def resolver = Mock(PermissionResolver) def perm1 = Mock(IPermission) { getKey() >> "p.1" - getPermissions() >> resolver + getPermissionResolver() >> resolver getMeta() >> createMetaResolver([test1: "1", test2: "1", test3: "1"]) getPriority() >> 1 } def perm2 = Mock(IPermission) { getKey() >> "p.2" - getPermissions() >> resolver + getPermissionResolver() >> resolver getMeta() >> createMetaResolver([test2: "2"]) getPriority() >> 2 } @@ -45,9 +45,9 @@ 0 * resolver._ and: "Meta is correct" - holder.getMeta().getString("test1") == "0" - holder.getMeta().getString("test2") == "2" - holder.getMeta().getString("test3") == "1" + holder.getMetaResolver().getString("test1") == "0" + holder.getMetaResolver().getString("test2") == "2" + holder.getMetaResolver().getString("test3") == "1" when: "Calculate one more time" holder.calculate() @@ -59,26 +59,26 @@ def "Test clearPermissions"() { setup: - def perm = Mock(IChangeablePermission) { + def perm = Mock(IPermission) { getKey() >> "p1" - getPermissions() >> PermissionResolver.createForKey("p1", 0) + getPermissionResolver() >> PermissionResolver.createForKey("p1", 0) getMeta() >> createMetaResolver([p1: 1]) } def holder = new PermissionHolder([a: 1, b: 2]) - holder.addPermission(new Permission("p2")) + holder.addPermission(new DummyPermission("p2")) holder.addPermission(perm) when: "Clear holder's permissions" holder.clearPermissions() then: "It contains only inner meta" - !holder.getMeta().getInt("p1") - holder.getMeta().getInt("a") == 1 - holder.getMeta().getInt("b") == 2 + !holder.getMetaResolver().getInt("p1") + holder.getMetaResolver().getInt("a") == 1 + holder.getMetaResolver().getInt("b") == 2 and: "It contains no permissions" - holder.getPermissions().check("p1") == UNRESOLVED - holder.getPermissions().check("p2") == UNRESOLVED + holder.getPermissionResolver().check("p1") == UNRESOLVED + holder.getPermissionResolver().check("p2") == UNRESOLVED and: "It unsubscribed from all permissions" 1 * perm.unsubscribe(holder) @@ -86,26 +86,26 @@ def "Test clearMeta"() { setup: - def perm = Mock(IChangeablePermission) { + def perm = Mock(IPermission) { getKey() >> "p1" - getPermissions() >> PermissionResolver.createForKey("p1", 0) + getPermissionResolver() >> PermissionResolver.createForKey("p1", 0) getMeta() >> createMetaResolver([p1: 1]) } def holder = new PermissionHolder([a: 1, b: 2]) - holder.addPermission(new Permission("p2")) + holder.addPermission(new DummyPermission("p2")) holder.addPermission(perm) when: "Clear holder's meta" holder.clearMeta() then: "It contains only permission's meta" - holder.getMeta().getInt("p1") == 1 - !holder.getMeta().getInt("a") - !holder.getMeta().getInt("b") + holder.getMetaResolver().getInt("p1") == 1 + !holder.getMetaResolver().getInt("a") + !holder.getMetaResolver().getInt("b") and: "It contains all permissions" - holder.getPermissions().check("p1") != UNRESOLVED - holder.getPermissions().check("p2") != UNRESOLVED + holder.getPermissionResolver().check("p1") != UNRESOLVED + holder.getPermissionResolver().check("p2") != UNRESOLVED and: "It did not unsubscribe from all permissions" 0 * perm.unsubscribe(holder) @@ -143,7 +143,7 @@ when: "Call addPermission method" holder.calculate() - holder.addPermission(new Permission("test")) + holder.addPermission(new DummyPermission("test")) then: "Group becomes dirty" 1 * holder.makeDirty() diff --git a/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy b/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy index 0c73425..66a498f 100644 --- a/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy +++ b/src/test/groovy/org/ultramine/permission/PermissionRepositoryTest.groovy @@ -4,9 +4,9 @@ import spock.lang.Specification import static org.ultramine.permission.PermissionRepository.ProxyPermission.ProxyType.* -import static org.ultramine.permission.PermissionResolver.CheckResult.FALSE -import static org.ultramine.permission.PermissionResolver.CheckResult.TRUE -import static org.ultramine.permission.PermissionResolver.CheckResult.UNRESOLVED +import static CheckResult.FALSE +import static CheckResult.TRUE +import static CheckResult.UNRESOLVED class PermissionRepositoryTest extends Specification { @@ -23,7 +23,7 @@ def proxy = repository.getPermission("key") then: "Returned proxy of dummy permission" - proxy.getWrappedPermission().class == Permission + proxy.getWrappedPermission().class == DummyPermission proxy.getType() == DUMMY proxy.getName() == "key" @@ -80,7 +80,7 @@ def "Test proxy of IChangeablePermission"() { setup: def listener = Mock(IDirtyListener) - def perm = Mock(IChangeablePermission) { getKey() >> "key" } + def perm = Mock(IPermission) { getKey() >> "key" } def repository = new PermissionRepository() when: "Listener is subscribed to proxy permission" @@ -115,7 +115,7 @@ def "Test proxy unsubscribe"() { setup: def listener = Mock(IDirtyListener) - def perm = Mock(IChangeablePermission) { getKey() >> "key" } + def perm = Mock(IPermission) { getKey() >> "key" } def repository = new PermissionRepository() when: "Listener is subscribed and unsubscribe to proxy permission" @@ -138,7 +138,7 @@ def perm = repository.getPermission("^group.admin") then: "Proxy of negative permission is return" - perm.class == NegativePermission + perm.class == PermissionRepository.NegativePermission and: "Negative permission linked to proxy" perm.getWrappedPermission().getName() == "group.admin" @@ -168,19 +168,19 @@ def perm = repository.getPermission("^group1") then: "Negative permission contains group1 permissions" - perm.getPermissions().check("p1") == FALSE - perm.getPermissions().check("p2") == UNRESOLVED - perm.getPermissions().check("group2") == FALSE - perm.getPermissions().check("p3") == UNRESOLVED + perm.getPermissionResolver().check("p1") == FALSE + perm.getPermissionResolver().check("p2") == UNRESOLVED + perm.getPermissionResolver().check("group2") == FALSE + perm.getPermissionResolver().check("p3") == UNRESOLVED when: "Group permission updates" group1.addPermission(repository.getPermission("p2")) then: "Negative permission also updates" - perm.getPermissions().check("p1") == FALSE - perm.getPermissions().check("p2") == FALSE - perm.getPermissions().check("group2") == FALSE - perm.getPermissions().check("p3") == UNRESOLVED + perm.getPermissionResolver().check("p1") == FALSE + perm.getPermissionResolver().check("p2") == FALSE + perm.getPermissionResolver().check("group2") == FALSE + perm.getPermissionResolver().check("p3") == UNRESOLVED when: "Register group2" def group2 = new GroupPermission("group2") @@ -188,15 +188,15 @@ repository.registerPermission(group2) then: "Negative permission also updates" - perm.getPermissions().check("p1") == FALSE - perm.getPermissions().check("p2") == FALSE - perm.getPermissions().check("group2") == UNRESOLVED - perm.getPermissions().check("p3") == TRUE + perm.getPermissionResolver().check("p1") == FALSE + perm.getPermissionResolver().check("p2") == FALSE + perm.getPermissionResolver().check("group2") == UNRESOLVED + perm.getPermissionResolver().check("p3") == TRUE and: "Group1 updates too" - group1.getPermissions().check("p1") == TRUE - group1.getPermissions().check("p2") == TRUE - group1.getPermissions().check("group2") == UNRESOLVED - group1.getPermissions().check("p3") == FALSE + group1.getPermissionResolver().check("p1") == TRUE + group1.getPermissionResolver().check("p2") == TRUE + group1.getPermissionResolver().check("group2") == UNRESOLVED + group1.getPermissionResolver().check("p3") == FALSE } } diff --git a/src/test/groovy/org/ultramine/permission/PermissionResolverTest.groovy b/src/test/groovy/org/ultramine/permission/PermissionResolverTest.groovy index 51f106a..23811df 100644 --- a/src/test/groovy/org/ultramine/permission/PermissionResolverTest.groovy +++ b/src/test/groovy/org/ultramine/permission/PermissionResolverTest.groovy @@ -2,7 +2,7 @@ import spock.lang.Specification import spock.lang.Unroll -import static org.ultramine.permission.PermissionResolver.CheckResult.* +import static CheckResult.* /** * Created by Евгений on 08.05.2014. diff --git a/src/test/groovy/org/ultramine/permission/UserContainerTest.groovy b/src/test/groovy/org/ultramine/permission/UserContainerTest.groovy index 743e3e6..3ad47e4 100644 --- a/src/test/groovy/org/ultramine/permission/UserContainerTest.groovy +++ b/src/test/groovy/org/ultramine/permission/UserContainerTest.groovy @@ -9,7 +9,7 @@ resolver.merge(permissions, 0) Mock(User) { getName() >> name - getPermissions() >> resolver + getPermissionResolver() >> resolver } } diff --git a/src/test/groovy/org/ultramine/permission/WorldTest.groovy b/src/test/groovy/org/ultramine/permission/WorldTest.groovy index 776ad45..a0db744 100644 --- a/src/test/groovy/org/ultramine/permission/WorldTest.groovy +++ b/src/test/groovy/org/ultramine/permission/WorldTest.groovy @@ -23,11 +23,11 @@ !container.checkUserPermission("user2", "group.admin") and: "Meta is loaded correctly" - container.get("user1").getMeta().getString("a") == "a" - container.get("user1").getMeta().getInt("b") == 1 + container.get("user1").getMetaResolver().getString("a") == "a" + container.get("user1").getMetaResolver().getInt("b") == 1 - !container.get("user2").getMeta().getString("a") - !container.get("user2").getMeta().getInt("b") + !container.get("user2").getMetaResolver().getString("a") + !container.get("user2").getMetaResolver().getInt("b") } def "Test config reloading"() { @@ -42,14 +42,14 @@ then: "User have this permission and meta" container.checkUserPermission("user1", "test") - container.get("user2").getMeta().getString("test") == "data" + container.get("user2").getMetaResolver().getString("test") == "data" when: "Reloading container" container.load(testWorldData) then: "User have not this permission and meta" !container.checkUserPermission("user1", "test") - !container.get("user2").getMeta().getString("test") + !container.get("user2").getMetaResolver().getString("test") and: "Container is reloaded correctly" container.checkUserPermission("user1", "d") @@ -64,10 +64,10 @@ container.checkUserPermission("user2", "p.3") !container.checkUserPermission("user2", "group.admin") - container.get("user1").getMeta().getString("a") == "a" - container.get("user1").getMeta().getInt("b") == 1 - !container.get("user2").getMeta().getString("a") - !container.get("user2").getMeta().getInt("b") + container.get("user1").getMetaResolver().getString("a") == "a" + container.get("user1").getMetaResolver().getInt("b") == 1 + !container.get("user2").getMetaResolver().getString("a") + !container.get("user2").getMetaResolver().getInt("b") } def "Test config saving"() {