Author: angela
Date: Thu Sep 12 09:09:27 2013
New Revision: 1522494

URL: http://svn.apache.org/r1522494
Log:
OAK-51 : Access Control Management

- composite restrictions

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java?rev=1522494&r1=1522493&r2=1522494&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java
 Thu Sep 12 09:09:27 2013
@@ -27,6 +27,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.jcr.security.AccessControlException;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.Tree;
 
@@ -38,12 +39,16 @@ public class CompositeRestrictionProvide
 
     private final Collection<? extends RestrictionProvider> providers;
 
-    private CompositeRestrictionProvider(Collection<? extends 
RestrictionProvider> providers) {
-        this.providers = providers;
+    private CompositeRestrictionProvider(@Nonnull Collection<? extends 
RestrictionProvider> providers) {
+        this.providers = ImmutableSet.copyOf(providers);
     }
 
-    public static RestrictionProvider newInstance(Collection<? extends 
RestrictionProvider> providers) {
-        return new CompositeRestrictionProvider(providers);
+    public static RestrictionProvider newInstance(@Nonnull Collection<? 
extends RestrictionProvider> providers) {
+        switch (providers.size()) {
+            case 0: return EMPTY;
+            case 1: return providers.iterator().next();
+            default: return new CompositeRestrictionProvider(providers);
+        }
     }
 
     @Nonnull

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java?rev=1522494&r1=1522493&r2=1522494&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java
 Thu Sep 12 09:09:27 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.restriction;
 
+import java.util.Collections;
 import java.util.Set;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -129,4 +130,51 @@ public interface RestrictionProvider {
      */
     @Nonnull
     RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree 
tree);
+
+    /**
+     * Empty restriction provider implementation that doesn't support any
+     * restrictions.
+     */
+    RestrictionProvider EMPTY = new RestrictionProvider() {
+
+        @Nonnull
+        @Override
+        public Set<RestrictionDefinition> getSupportedRestrictions(@Nullable 
String oakPath) {
+            return Collections.emptySet();
+        }
+
+        @Nonnull
+        @Override
+        public Restriction createRestriction(@Nullable String oakPath, 
@Nonnull String oakName, @Nonnull Value value) throws AccessControlException, 
RepositoryException {
+            throw new AccessControlException("This implementation doesn't 
support any restrictions");
+        }
+
+        @Nonnull
+        @Override
+        public Restriction createRestriction(@Nullable String oakPath, 
@Nonnull String oakName, @Nonnull Value... values) throws 
AccessControlException, RepositoryException {
+            throw new AccessControlException("This implementation doesn't 
support any restrictions");
+        }
+
+        @Nonnull
+        @Override
+        public Set<Restriction> readRestrictions(@Nullable String oakPath, 
@Nonnull Tree aceTree) {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public void writeRestrictions(String oakPath, Tree aceTree, 
Set<Restriction> restrictions) {
+            // nothing to do
+        }
+
+        @Override
+        public void validateRestrictions(@Nullable String oakPath, @Nonnull 
Tree aceTree) {
+            // nothing to do
+        }
+
+        @Nonnull
+        @Override
+        public RestrictionPattern getPattern(@Nullable String oakPath, 
@Nonnull Tree tree) {
+            return RestrictionPattern.EMPTY;
+        }
+    };
 }


Reply via email to