Author: jukka
Date: Thu Dec 19 20:33:59 2013
New Revision: 1552419

URL: http://svn.apache.org/r1552419
Log:
OAK-1296: Use TypePredicate instead of NodeType.isNodeType() for NodeState type 
checks

Use TypePredicate in AccessControlValidator

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java?rev=1552419&r1=1552418&r2=1552419&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
 Thu Dec 19 20:33:59 2013
@@ -35,7 +35,8 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.core.AbstractTree;
-import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
+import org.apache.jackrabbit.oak.core.ImmutableTree;
+import org.apache.jackrabbit.oak.plugins.nodetype.TypePredicate;
 import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
@@ -57,25 +58,35 @@ import static org.apache.jackrabbit.oak.
  */
 class AccessControlValidator extends DefaultValidator implements 
AccessControlConstants {
 
-    private final Tree parentBefore;
-    private final Tree parentAfter;
+    private final ImmutableTree parentAfter;
 
     private final PrivilegeBitsProvider privilegeBitsProvider;
     private final PrivilegeManager privilegeManager;
     private final RestrictionProvider restrictionProvider;
-    private final ReadOnlyNodeTypeManager ntMgr;
 
-    AccessControlValidator(Tree parentBefore, Tree parentAfter,
+    private final TypePredicate isRepoAccessControllable;
+    private final TypePredicate isAccessControllable;
+
+    AccessControlValidator(ImmutableTree parentAfter,
                            PrivilegeManager privilegeManager,
                            PrivilegeBitsProvider privilegeBitsProvider,
-                           RestrictionProvider restrictionProvider,
-                           ReadOnlyNodeTypeManager ntMgr) {
-        this.parentBefore = parentBefore;
+                           RestrictionProvider restrictionProvider) {
         this.parentAfter = parentAfter;
         this.privilegeBitsProvider = privilegeBitsProvider;
         this.privilegeManager = privilegeManager;
         this.restrictionProvider = restrictionProvider;
-        this.ntMgr = ntMgr;
+        this.isRepoAccessControllable = new 
TypePredicate(parentAfter.getNodeState(), MIX_REP_REPO_ACCESS_CONTROLLABLE);
+        this.isAccessControllable = new 
TypePredicate(parentAfter.getNodeState(), MIX_REP_ACCESS_CONTROLLABLE);
+    }
+
+    private AccessControlValidator(
+            AccessControlValidator parent, ImmutableTree parentAfter) {
+        this.parentAfter = parentAfter;
+        this.privilegeBitsProvider = parent.privilegeBitsProvider;
+        this.privilegeManager = parent.privilegeManager;
+        this.restrictionProvider = parent.restrictionProvider;
+        this.isRepoAccessControllable = parent.isRepoAccessControllable;
+        this.isAccessControllable = parent.isAccessControllable;
     }
 
     //----------------------------------------------------------< Validator 
>---
@@ -106,19 +117,18 @@ class AccessControlValidator extends Def
 
     @Override
     public Validator childNodeAdded(String name, NodeState after) throws 
CommitFailedException {
-        Tree treeAfter = checkNotNull(parentAfter.getChild(name));
+        ImmutableTree treeAfter = checkNotNull(parentAfter.getChild(name));
 
         checkValidTree(parentAfter, treeAfter, after);
-        return new AccessControlValidator(null, treeAfter, privilegeManager, 
privilegeBitsProvider, restrictionProvider, ntMgr);
+        return new AccessControlValidator(this, treeAfter);
     }
 
     @Override
     public Validator childNodeChanged(String name, NodeState before, NodeState 
after) throws CommitFailedException {
-        Tree treeBefore = checkNotNull(parentBefore.getChild(name));
-        Tree treeAfter = checkNotNull(parentAfter.getChild(name));
+        ImmutableTree treeAfter = checkNotNull(parentAfter.getChild(name));
 
         checkValidTree(parentAfter, treeAfter, after);
-        return new AccessControlValidator(treeBefore, treeAfter, 
privilegeManager, privilegeBitsProvider, restrictionProvider, ntMgr);
+        return new AccessControlValidator(this, treeAfter);
     }
 
     @Override
@@ -129,7 +139,7 @@ class AccessControlValidator extends Def
 
     //------------------------------------------------------------< private 
>---
 
-    private void checkValidTree(Tree parentAfter, Tree treeAfter, NodeState 
nodeAfter) throws CommitFailedException {
+    private void checkValidTree(ImmutableTree parentAfter, Tree treeAfter, 
NodeState nodeAfter) throws CommitFailedException {
         if (isPolicy(treeAfter)) {
             checkValidPolicy(parentAfter, treeAfter, nodeAfter);
         } else if (isAccessControlEntry(treeAfter)) {
@@ -155,11 +165,10 @@ class AccessControlValidator extends Def
         }
     }
 
-    private void checkValidPolicy(Tree parent, Tree policyTree, NodeState 
policyNode) throws CommitFailedException {
-        String mixinType = (REP_REPO_POLICY.equals(policyTree.getName())) ?
-                MIX_REP_REPO_ACCESS_CONTROLLABLE :
-                MIX_REP_ACCESS_CONTROLLABLE;
-        checkValidAccessControlledNode(parent, mixinType);
+    private void checkValidPolicy(ImmutableTree parent, Tree policyTree, 
NodeState policyNode) throws CommitFailedException {
+        TypePredicate requiredMixin = 
(REP_REPO_POLICY.equals(policyTree.getName())) ?
+                isRepoAccessControllable : isAccessControllable;
+        checkValidAccessControlledNode(parent, requiredMixin);
 
         Collection<String> validPolicyNames = (parent.isRoot()) ?
                 POLICY_NODE_NAMES :
@@ -182,13 +191,13 @@ class AccessControlValidator extends Def
         }
     }
 
-    private void checkValidAccessControlledNode(Tree accessControlledTree, 
String requiredMixin) throws CommitFailedException {
+    private void checkValidAccessControlledNode(ImmutableTree 
accessControlledTree, TypePredicate requiredMixin) throws CommitFailedException 
{
         if 
(AC_NODETYPE_NAMES.contains(TreeUtil.getPrimaryTypeName(accessControlledTree))) 
{
             throw accessViolation(5, "Access control policy within access 
control content (" + accessControlledTree.getPath() + ')');
         }
 
-        String msg = "Isolated policy node. Parent is not of type " + 
requiredMixin;
-        if (!ntMgr.isNodeType(accessControlledTree, requiredMixin)) {
+        if (!requiredMixin.apply(accessControlledTree.getNodeState())) {
+            String msg = "Isolated policy node. Parent is not of type " + 
requiredMixin;
             throw accessViolation(6, msg);
         }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java?rev=1552419&r1=1552418&r2=1552419&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
 Thu Dec 19 20:33:59 2013
@@ -20,11 +20,9 @@ import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
 import org.apache.jackrabbit.oak.api.Root;
-import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.core.ImmutableRoot;
 import org.apache.jackrabbit.oak.core.ImmutableTree;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
 import org.apache.jackrabbit.oak.spi.commit.Validator;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
@@ -52,17 +50,15 @@ public class AccessControlValidatorProvi
     @Nonnull
     @Override
     public Validator getRootValidator(NodeState before, NodeState after) {
-        Tree rootBefore = new ImmutableTree(before);
-        Tree rootAfter = new ImmutableTree(after);
+        ImmutableTree rootAfter = new ImmutableTree(after);
 
         RestrictionProvider restrictionProvider = 
getConfig(AuthorizationConfiguration.class).getRestrictionProvider();
 
         Root root = new ImmutableRoot(before);
         PrivilegeManager privilegeManager = 
getConfig(PrivilegeConfiguration.class).getPrivilegeManager(root, 
NamePathMapper.DEFAULT);
         PrivilegeBitsProvider privilegeBitsProvider = new 
PrivilegeBitsProvider(root);
-        ReadOnlyNodeTypeManager ntMgr = 
ReadOnlyNodeTypeManager.getInstance(before);
 
-        return new AccessControlValidator(rootBefore, rootAfter, 
privilegeManager, privilegeBitsProvider, restrictionProvider, ntMgr);
+        return new AccessControlValidator(rootAfter, privilegeManager, 
privilegeBitsProvider, restrictionProvider);
     }
 
     private <T> T getConfig(Class<T> configClass) {


Reply via email to