diff --git a/src/main/java/org/ultramine/permission/GroupPermission.java b/src/main/java/org/ultramine/permission/GroupPermission.java index 4704f86..943025f 100644 --- a/src/main/java/org/ultramine/permission/GroupPermission.java +++ b/src/main/java/org/ultramine/permission/GroupPermission.java @@ -3,14 +3,15 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; -/** - * Created by Евгений on 08.05.2014. - */ + public class GroupPermission extends MetaHolder implements IChangeablePermission, IDirtyListener { - private static Logger logger = LogManager.getLogger(); + private static Logger logger = LogManager.getLogger(GroupPermission.class); private String key; private boolean dirty; @@ -83,7 +84,7 @@ permissions.put(permission.getKey(), permission); if (permission instanceof IChangeablePermission) - ((IChangeablePermission)permission).subscribe(this); + ((IChangeablePermission) permission).subscribe(this); makeDirty(); } @@ -100,7 +101,7 @@ IPermission perm = permissions.remove(key); if (perm instanceof IChangeablePermission) - ((IChangeablePermission)perm).unsubscribe(this); + ((IChangeablePermission) perm).unsubscribe(this); makeDirty(); } @@ -126,6 +127,7 @@ @Override public void makeDirty() { + logger.error(getName()); if (isDirty()) return; @@ -148,31 +150,22 @@ makeDirty(); } - public void calculate() throws RecursiveCalculationException + public void calculate() { if (!isDirty()) return; + dirty = false; permissionResolver.clear(); metaResolver.clear(); - try + for (IPermission permission : permissions.values()) { - for (IPermission permission : permissions.values()) - { - permissionResolver.merge(permission.getPermissions(), permission.getPriority()); - metaResolver.merge(permission.getMeta(), permission.getPriority()); - } + permissionResolver.merge(permission.getPermissions(), permission.getPriority()); + metaResolver.merge(permission.getMeta(), permission.getPriority()); } - catch (StackOverflowError ignored) - { - throw new RecursiveCalculationException(this); - } - finally - { - metaResolver.merge(innerMeta, Integer.MAX_VALUE); - dirty = false; - } + + metaResolver.merge(innerMeta, Integer.MAX_VALUE); } @Override @@ -185,7 +178,7 @@ public boolean equals(Object obj) { if (obj instanceof IPermission) - return getKey().equals(((IPermission)obj).getKey()); + return getKey().equals(((IPermission) obj).getKey()); return super.equals(obj); } diff --git a/src/main/java/org/ultramine/permission/IChangeablePermission.java b/src/main/java/org/ultramine/permission/IChangeablePermission.java index a79f0da..2b8bc5a 100644 --- a/src/main/java/org/ultramine/permission/IChangeablePermission.java +++ b/src/main/java/org/ultramine/permission/IChangeablePermission.java @@ -1,10 +1,5 @@ package org.ultramine.permission; -import java.util.Map; - -/** - * Created by Евгений on 07.05.2014. - */ public interface IChangeablePermission extends IPermission { public boolean isDirty(); diff --git a/src/main/java/org/ultramine/permission/IDirtyListener.java b/src/main/java/org/ultramine/permission/IDirtyListener.java index 4aff430..349785b 100644 --- a/src/main/java/org/ultramine/permission/IDirtyListener.java +++ b/src/main/java/org/ultramine/permission/IDirtyListener.java @@ -1,8 +1,5 @@ package org.ultramine.permission; -/** - * Created by Евгений on 07.05.2014. - */ public interface IDirtyListener { public void makeDirty(); diff --git a/src/main/java/org/ultramine/permission/IPermission.java b/src/main/java/org/ultramine/permission/IPermission.java index a1e551b..4179247 100644 --- a/src/main/java/org/ultramine/permission/IPermission.java +++ b/src/main/java/org/ultramine/permission/IPermission.java @@ -1,8 +1,5 @@ package org.ultramine.permission; -/** - * Created by Евгений on 02.05.2014. - */ public interface IPermission { public String getKey(); diff --git a/src/main/java/org/ultramine/permission/MetaHolder.java b/src/main/java/org/ultramine/permission/MetaHolder.java index 7e92981..e8480c3 100644 --- a/src/main/java/org/ultramine/permission/MetaHolder.java +++ b/src/main/java/org/ultramine/permission/MetaHolder.java @@ -3,9 +3,6 @@ import java.util.HashMap; import java.util.Map; -/** - * Created by Евгений on 08.05.2014. - */ public abstract class MetaHolder { protected Map innerMeta; diff --git a/src/main/java/org/ultramine/permission/MetaResolver.java b/src/main/java/org/ultramine/permission/MetaResolver.java index 1388c97..73836da 100644 --- a/src/main/java/org/ultramine/permission/MetaResolver.java +++ b/src/main/java/org/ultramine/permission/MetaResolver.java @@ -1,8 +1,5 @@ package org.ultramine.permission; -/** - * Created by uguuseha on 08.05.14. - */ public class MetaResolver extends Resolver { public static final MetaResolver BLANK_RESOLVER = new MetaResolver(); diff --git a/src/main/java/org/ultramine/permission/NegativePermission.java b/src/main/java/org/ultramine/permission/NegativePermission.java index 0b72ec9..0aaeed1 100644 --- a/src/main/java/org/ultramine/permission/NegativePermission.java +++ b/src/main/java/org/ultramine/permission/NegativePermission.java @@ -1,8 +1,5 @@ package org.ultramine.permission; -/** - * Created by Евгений on 07.05.2014. - */ public class NegativePermission implements IChangeablePermission { private IPermission permission; diff --git a/src/main/java/org/ultramine/permission/Permission.java b/src/main/java/org/ultramine/permission/Permission.java index 98d1142..f4be49f 100644 --- a/src/main/java/org/ultramine/permission/Permission.java +++ b/src/main/java/org/ultramine/permission/Permission.java @@ -1,8 +1,5 @@ package org.ultramine.permission; -/** - * Created by Евгений on 07.05.2014. - */ public class Permission implements IPermission { private String key; diff --git a/src/main/java/org/ultramine/permission/PermissionRepository.java b/src/main/java/org/ultramine/permission/PermissionRepository.java index 3989c31..f04de7b 100644 --- a/src/main/java/org/ultramine/permission/PermissionRepository.java +++ b/src/main/java/org/ultramine/permission/PermissionRepository.java @@ -5,9 +5,6 @@ import java.util.List; import java.util.Map; -/** - * Created by Евгений on 08.05.2014. - */ public class PermissionRepository { private Map permissions = new HashMap(); diff --git a/src/main/java/org/ultramine/permission/PermissionResolver.java b/src/main/java/org/ultramine/permission/PermissionResolver.java index 8e3ea52..d9aeb3e 100644 --- a/src/main/java/org/ultramine/permission/PermissionResolver.java +++ b/src/main/java/org/ultramine/permission/PermissionResolver.java @@ -2,9 +2,6 @@ import java.util.Map; -/** - * Created by Евгений on 07.05.2014. - */ public class PermissionResolver extends Resolver { public static PermissionResolver createInverted(PermissionResolver anotherResolver) diff --git a/src/main/java/org/ultramine/permission/RecursiveCalculationException.java b/src/main/java/org/ultramine/permission/RecursiveCalculationException.java index a218b9c..00a70f6 100644 --- a/src/main/java/org/ultramine/permission/RecursiveCalculationException.java +++ b/src/main/java/org/ultramine/permission/RecursiveCalculationException.java @@ -1,8 +1,5 @@ package org.ultramine.permission; -/** - * Created by uguuseha on 08.05.14. - */ public class RecursiveCalculationException extends RuntimeException { public RecursiveCalculationException(String location) diff --git a/src/main/java/org/ultramine/permission/Resolver.java b/src/main/java/org/ultramine/permission/Resolver.java index fe1e834..48b3b21 100644 --- a/src/main/java/org/ultramine/permission/Resolver.java +++ b/src/main/java/org/ultramine/permission/Resolver.java @@ -1,16 +1,14 @@ package org.ultramine.permission; -import java.util.Collection; +import gnu.trove.map.hash.TObjectIntHashMap; + import java.util.HashMap; import java.util.Map; -/** - * Created by uguuseha on 08.05.14. - */ public class Resolver { protected Map values = new HashMap(); - protected Map priorities = new HashMap(); + protected TObjectIntHashMap priorities = new TObjectIntHashMap(); public void clear() { diff --git a/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy b/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy index 6ca47d0..b69863c 100644 --- a/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy +++ b/src/test/groovy/org/ultramine/permission/GroupPermissionTest.groovy @@ -62,7 +62,6 @@ def "Test recursive calculation"() { setup: "Prepare recursive groups" - def logger = Mock(Logger) def group1 = new GroupPermission("g1", [m1: "a"]) def group2 = new GroupPermission("g2", [m2: "b"]) group1.addPermission(group2) @@ -71,20 +70,13 @@ when: "Calculate permissions" group1.calculate() - then: "Recursive calculation is logged" - thrown(RecursiveCalculationException) - - and: "Both groups are not dirty" + then: "Both groups are not dirty" !group1.isDirty() !group2.isDirty() - and: "Both groups are calculated" + and: "Both groups have own meta" group1.getMeta().getString("m1") - group1.getMeta().getString("m2") - - group2.getMeta().getString("m1") group2.getMeta().getString("m2") - } def "Test dirty notification"() {