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.
