Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
 Wed Dec  7 18:03:16 2016
@@ -24,6 +24,9 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 
+import java.util.Collection;
+import java.util.Collections;
+
 import org.apache.sling.api.resource.Resource;
 import 
org.apache.sling.caconfig.management.impl.ContextPathStrategyMultiplexerImpl;
 import 
org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStrategy;
@@ -36,6 +39,7 @@ import org.junit.Test;
 public class DefaultConfigurationResourceResolvingStrategyTest {
 
     private static final String BUCKET = "sling:test";
+    private static final Collection<String> BUCKETS = 
Collections.singleton(BUCKET);
 
     @Rule
     public SlingContext context = new SlingContext();
@@ -73,8 +77,8 @@ public class DefaultConfigurationResourc
             .resource("/conf/site1/sling:test/test")
             .resource("/libs/conf/sling:test/test");
 
-        assertEquals("/conf/site1/sling:test/test", 
underTest.getResource(site1Page1, BUCKET, "test").getPath());
-        assertEquals("/libs/conf/sling:test/test", 
underTest.getResource(site2Page1, BUCKET, "test").getPath());
+        assertEquals("/conf/site1/sling:test/test", 
underTest.getResource(site1Page1, BUCKETS, "test").getPath());
+        assertEquals("/libs/conf/sling:test/test", 
underTest.getResource(site2Page1, BUCKETS, "test").getPath());
     }
 
     @Test
@@ -86,8 +90,8 @@ public class DefaultConfigurationResourc
             .resource("/conf/main/sub/sling:test/test")
             .resource("/conf/main/sub/deep/sling:test/test");
 
-        assertEquals("/conf/main/sub/sling:test/test", 
underTest.getResource(subPage, BUCKET, "test").getPath());
-        assertEquals("/conf/main/sub/deep/sling:test/test", 
underTest.getResource(deepPage, BUCKET, "test").getPath());
+        assertEquals("/conf/main/sub/sling:test/test", 
underTest.getResource(subPage, BUCKETS, "test").getPath());
+        assertEquals("/conf/main/sub/deep/sling:test/test", 
underTest.getResource(deepPage, BUCKETS, "test").getPath());
     }
 
     /**
@@ -106,10 +110,10 @@ public class DefaultConfigurationResourc
             .resource("/apps/conf/sling:test/feature/a")
             .resource("/libs/conf/sling:test/feature/b");
 
-        assertThat(underTest.getResourceCollection(site1Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site1/sling:test/feature/c"));
 
-        assertThat(underTest.getResourceCollection(site2Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site2Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site2/sling:test/feature/c",
                 "/conf/site2/sling:test/feature/d"));
     }
@@ -128,10 +132,10 @@ public class DefaultConfigurationResourc
             .resource("/libs/conf/sling:test/feature/a")
             .resource("/libs/conf/sling:test/feature/b");
 
-        assertThat(underTest.getResourceCollection(site1Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/apps/conf/sling:test/feature/a"));
 
-        assertThat(underTest.getResourceCollection(site2Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site2Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/apps/conf/sling:test/feature/a"));
     }
 
@@ -153,11 +157,11 @@ public class DefaultConfigurationResourc
             .resource("/apps/conf/sling:test/feature/a")
             .resource("/libs/conf/sling:test/feature/b");
 
-        assertThat(underTest.getResourceCollection(site1Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site1/sling:test/feature/c",
                 "/apps/conf/sling:test/feature/a"));
 
-        assertThat(underTest.getResourceCollection(site2Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site2Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site2/sling:test/feature/c",
                 "/conf/site2/sling:test/feature/d",
                 "/apps/conf/sling:test/feature/a"));
@@ -184,12 +188,12 @@ public class DefaultConfigurationResourc
             .resource("/libs/conf/sling:test/feature")
                 .resource("b");
 
-        assertThat(underTest.getResourceCollection(site1Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site1/sling:test/feature/c",
                 "/apps/conf/sling:test/feature/a",
                 "/libs/conf/sling:test/feature/b"));
 
-        assertThat(underTest.getResourceCollection(site2Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site2Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site2/sling:test/feature/c",
                 "/conf/site2/sling:test/feature/d",
                 "/apps/conf/sling:test/feature/a",
@@ -212,10 +216,10 @@ public class DefaultConfigurationResourc
             .resource("/apps/conf/sling:test/feature/a")
             .resource("/libs/conf/sling:test/feature", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("b");
 
-        assertThat(underTest.getResourceCollection(site1Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site1/sling:test/feature/c"));
 
-        assertThat(underTest.getResourceCollection(site2Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site2Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site2/sling:test/feature/c",
                 "/conf/site2/sling:test/feature/d"));
     }
@@ -233,7 +237,7 @@ public class DefaultConfigurationResourc
             .resource("/conf/site1/sling:test/feature/b")
             .resource("/conf/site2/sling:test/feature/jcr:content");
 
-        assertThat(underTest.getResourceCollection(site1Page1, BUCKET, 
"feature"), ResourceCollectionMatchers.paths(
+        assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, 
"feature"), ResourceCollectionMatchers.paths(
                 "/conf/site1/sling:test/feature/a",
                 "/conf/site1/sling:test/feature/b"));
     }
@@ -255,8 +259,8 @@ public class DefaultConfigurationResourc
         ConfigurationResourceResolvingStrategy underTest = 
context.registerInjectActivateService(new 
DefaultConfigurationResourceResolvingStrategy(),
                 "enabled", false);
 
-        assertNull(underTest.getResource(site1Page1, BUCKET, "test"));
-        assertNull(underTest.getResourceCollection(site1Page1, BUCKET, 
"feature"));
+        assertNull(underTest.getResource(site1Page1, BUCKETS, "test"));
+        assertNull(underTest.getResourceCollection(site1Page1, BUCKETS, 
"feature"));
         assertNull(underTest.getResourcePath(site1Page1, BUCKET, "test"));
         assertNull(underTest.getResourceCollectionParentPath(site1Page1, 
BUCKET, "feature"));
     }

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java
 Wed Dec  7 18:03:16 2016
@@ -22,8 +22,12 @@ import static org.junit.Assert.assertArr
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Collection;
+
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableList;
+
 public class ConfigNameUtilTest {
 
     @Test
@@ -33,11 +37,18 @@ public class ConfigNameUtilTest {
         assertTrue(ConfigNameUtil.isValid("a/b/c"));
         assertTrue(ConfigNameUtil.isValid("a/jcr:content/b/c"));
 
-        assertFalse(ConfigNameUtil.isValid(null));
+        assertTrue(ConfigNameUtil.isValid(ImmutableList.<String>of()));
+        assertTrue(ConfigNameUtil.isValid(ImmutableList.of("a")));
+        assertTrue(ConfigNameUtil.isValid(ImmutableList.of("a", "a/b", 
"a/b/c")));
+        
+        assertFalse(ConfigNameUtil.isValid((String)null));
         assertFalse(ConfigNameUtil.isValid(""));
         assertFalse(ConfigNameUtil.isValid("/a"));
         assertFalse(ConfigNameUtil.isValid("/a/b/c"));
         assertFalse(ConfigNameUtil.isValid("a/b/../c"));
+
+        assertFalse(ConfigNameUtil.isValid((Collection<String>)null));
+        assertFalse(ConfigNameUtil.isValid(ImmutableList.of("a", "/a")));
     }
 
     @Test

Modified: 
sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
 Wed Dec  7 18:03:16 2016
@@ -43,48 +43,43 @@ public interface ConfigurationResourceRe
     /**
      * Get a context-aware singleton configuration resource defined by the 
given configuration name.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level 
configuration resolver should store
-     *     it's configuration data grouped in a child resource of the 
configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this 
parameter.
-     * @param configName Configuration name or relative path.
+     * @param bucketNames Configuration "bucket" names. For each inheritance 
level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @return Configuration resource or {@code null} if this strategy did not 
found matching resources.
      */
-    @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull 
String bucketName, @Nonnull String configName);
+    @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull 
Collection<String> bucketNames, @Nonnull String configName);
 
     /**
      * Get a collection of context-aware configuration resources defined by 
the given configuration name.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level 
configuration resolver should store
-     *     it's configuration data grouped in a child resource of the 
configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this 
parameter.
+     * @param bucketNames Configuration "bucket" names. For each inheritance 
level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @param configName Configuration name or relative path.
      * @return Collection of configuration resources or {@code null} if this 
strategy did not found matching resources.
      */
-    @CheckForNull Collection<Resource> getResourceCollection(@Nonnull Resource 
resource, @Nonnull String bucketName, @Nonnull String configName);
+    @CheckForNull Collection<Resource> getResourceCollection(@Nonnull Resource 
resource, @Nonnull Collection<String> bucketNames, @Nonnull String configName);
 
     /**
      * Get a context-aware singleton configuration resource inheritance chain 
defined by the given configuration name.
      * The first item of the inheritance chain it the same resource returned 
by {@link #getResource(Resource, String, String)}.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level 
configuration resolver should store
-     *     it's configuration data grouped in a child resource of the 
configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this 
parameter.
+     * @param bucketNames Configuration "bucket" names. For each inheritance 
level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @param configName Configuration name or relative path.
      * @return Configuration resource inheritance chain or {@code null} if 
this strategy did not found matching resources.
      */
-    @CheckForNull Iterator<Resource> getResourceInheritanceChain(@Nonnull 
Resource resource, @Nonnull String bucketName, @Nonnull String configName);
+    @CheckForNull Iterator<Resource> getResourceInheritanceChain(@Nonnull 
Resource resource, @Nonnull Collection<String> bucketNames, @Nonnull String 
configName);
 
     /**
      * Get a collection of context-aware configuration resource inheritance 
chains defined by the given configuration name.
      * The first item of each inheritance chain is the same item returned by 
{@link #getResourceCollection(Resource, String, String)}.
      * @param resource Context resource to fetch configuration for
-     * @param bucketName Configuration "bucket" name. Each high-level 
configuration resolver should store
-     *     it's configuration data grouped in a child resource of the 
configuration resource. This is what
-     *     we call a "bucket", and the resource name is specified with this 
parameter.
+     * @param bucketNames Configuration "bucket" names. For each inheritance 
level all bucket names are tried, and the first
+     *   one that has a result is included.
      * @param configName Configuration name or relative path.
      * @return Collection of configuration resource inheritance chains or 
{@code null} if this strategy did not found matching resources.
      */
-    @CheckForNull Collection<Iterator<Resource>> 
getResourceCollectionInheritanceChain(@Nonnull Resource resource, @Nonnull 
String bucketName, @Nonnull String configName);
+    @CheckForNull Collection<Iterator<Resource>> 
getResourceCollectionInheritanceChain(@Nonnull Resource resource, @Nonnull 
Collection<String> bucketNames, @Nonnull String configName);
 
     /**
      * Get the configuration resource path for storing configuration data for 
the given context resource and configuration name.


Reply via email to