Author: sseifert
Date: Fri Oct 7 07:57:53 2016
New Revision: 1763689
URL: http://svn.apache.org/viewvc?rev=1763689&view=rev
Log:
SLING-6059 Context-Aware Config: Make resource inheritance for configuration
collections configurable
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/ConfigurationResourceNameConstants.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/ConfigurationResourceNameConstants.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/ConfigurationResourceNameConstants.java?rev=1763689&r1=1763688&r2=1763689&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/ConfigurationResourceNameConstants.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/ConfigurationResourceNameConstants.java
Fri Oct 7 07:57:53 2016
@@ -30,4 +30,10 @@ public final class ConfigurationResource
*/
public static final String PROPERTY_CONFIG_REF = "sling:config-ref";
+ /**
+ * Boolean property that controls whether config resource collections
should be merged on inheritance or not.
+ * Merging means merging the lists, not the list items (properties of the
resources) itself.
+ */
+ public static final String PROPERTY_CONFIG_INHERIT =
"sling:config-inherit";
+
}
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java?rev=1763689&r1=1763688&r2=1763689&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
Fri Oct 7 07:57:53 2016
@@ -18,6 +18,7 @@
*/
package org.apache.sling.contextaware.config.resource.impl.def;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_INHERIT;
import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_REF;
import java.util.ArrayList;
@@ -34,6 +35,7 @@ import org.apache.commons.collections.it
import org.apache.commons.collections.iterators.FilterIterator;
import org.apache.commons.collections.iterators.IteratorChain;
import org.apache.commons.collections.iterators.TransformIterator;
+import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
import
org.apache.sling.contextaware.config.resource.impl.ContextPathStrategyMultiplexer;
@@ -230,24 +232,59 @@ public class DefaultConfigurationResourc
final Set<String> names = new HashSet<>();
final List<Resource> result = new ArrayList<>();
+ final Set<String> nameCandidates = new HashSet<>();
+ final List<Resource> resultCandidates = new ArrayList<>();
+
int idx = 1;
Iterator<String> paths = getResolvePaths(contentResource);
+ Boolean listMergingEnabled = null;
while (paths.hasNext()) {
final String path = paths.next();
Resource item =
contentResource.getResourceResolver().getResource(buildResourcePath(path,
name));
if (item != null) {
+
+ // check inheritance mode on current level
+ listMergingEnabled =
item.getValueMap().get(PROPERTY_CONFIG_INHERIT, listMergingEnabled);
+
+ // in inheritance is enabled on this level and candidates
where collected on previous levels add them now
+ if (listMergingEnabled == Boolean.TRUE &&
!resultCandidates.isEmpty()) {
+ result.addAll(resultCandidates);
+ names.addAll(nameCandidates);
+ resultCandidates.clear();
+ nameCandidates.clear();
+ }
+
if (logger.isTraceEnabled()) {
logger.trace("+ resolved config item at [{}]: {}", idx,
item.getPath());
}
- for (Resource child : item.getChildren()) {
- if ( !child.getName().contains(":") &&
!names.contains(child.getName()) ) {
- result.add(child);
- names.add(child.getName());
+ // add resource items only if none found yet, or inheritance
is enabled
+ if (result.isEmpty() || listMergingEnabled == Boolean.TRUE) {
+ for (Resource child : item.getChildren()) {
+ if (!names.contains(child.getName())) {
+ result.add(child);
+ names.add(child.getName());
+ }
+ }
+ }
+ // if resources are skipped due to inheritance restrictions
collect them in candidate list
+ // they may be added later if inheritance is enabled on a
parent level
+ else {
+ for (Resource child : item.getChildren()) {
+ if (isValidResourceCollectionItem(child)
+ && !names.contains(child.getName()) &&
!nameCandidates.contains(child.getName())) {
+ resultCandidates.add(child);
+ nameCandidates.add(child.getName());
+ }
}
}
- } else {
+ // do not go further upwards in level is inheritance is broken
here
+ if (listMergingEnabled == Boolean.FALSE) {
+ break;
+ }
+ }
+ else {
if (logger.isTraceEnabled()) {
logger.trace("- no item '{}' under config '{}'", name,
path);
}
@@ -261,6 +298,11 @@ public class DefaultConfigurationResourc
return result;
}
+
+ private boolean isValidResourceCollectionItem(Resource resource) {
+ // do not include jcr:content nodes in resource collection list
+ return !StringUtils.equals(resource.getName(), "jcr:content");
+ }
@Override
public String getResourcePath(Resource contentResource, String bucketName,
String configName) {
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java?rev=1763689&r1=1763688&r2=1763689&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java
Fri Oct 7 07:57:53 2016
@@ -18,6 +18,8 @@
*/
package org.apache.sling.contextaware.config.resource.impl;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_INHERIT;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_REF;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -49,8 +51,8 @@ public class ConfigurationResourceResolv
// content resources
context.build()
- .resource("/content/site1", "sling:config-ref", "/conf/site1")
- .resource("/content/site2", "sling:config-ref", "/conf/site2");
+ .resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/site1")
+ .resource("/content/site2", PROPERTY_CONFIG_REF, "/conf/site2");
site1Page1 = context.create().resource("/content/site1/page1");
site2Page1 = context.create().resource("/content/site2/page1");
@@ -62,6 +64,7 @@ public class ConfigurationResourceResolv
.resource("/conf/site2/sling:test/feature/d")
.resource("/apps/conf/sling:test/feature/a")
.resource("/libs/conf/sling:test/test")
+ .resource("/libs/conf/sling:test/feature",
PROPERTY_CONFIG_INHERIT, true)
.resource("/libs/conf/sling:test/feature/b");
}
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java?rev=1763689&r1=1763688&r2=1763689&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java
Fri Oct 7 07:57:53 2016
@@ -18,6 +18,8 @@
*/
package org.apache.sling.contextaware.config.resource.impl;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_INHERIT;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_REF;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
@@ -57,8 +59,8 @@ public class ConfigurationResourceResolv
// content resources
context.build()
- .resource("/content/site1", "sling:config-ref", "/conf/site1")
- .resource("/content/site2", "sling:config-ref", "/conf/site2");
+ .resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/site1")
+ .resource("/content/site2", PROPERTY_CONFIG_REF, "/conf/site2");
site1Page1 = context.create().resource("/content/site1/page1");
// configuration
@@ -69,6 +71,7 @@ public class ConfigurationResourceResolv
.resource("/conf/site2/sling:test/feature/d")
.resource("/apps/conf/sling:test/feature/a")
.resource("/libs/conf/sling:test/test")
+ .resource("/libs/conf/sling:test/feature",
PROPERTY_CONFIG_INHERIT, true)
.resource("/libs/conf/sling:test/feature/b");
}
@@ -150,6 +153,5 @@ public class ConfigurationResourceResolv
assertEquals("/conf/site1/sling:test/test",
underTest.getResourcePath(site1Page1, BUCKET, "test"));
assertEquals("/conf/site1/sling:test/feature",
underTest.getResourceCollectionParentPath(site1Page1, BUCKET, "feature"));
}
-
-
+
}
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java?rev=1763689&r1=1763688&r2=1763689&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
Fri Oct 7 07:57:53 2016
@@ -18,6 +18,8 @@
*/
package org.apache.sling.contextaware.config.resource.impl.def;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_INHERIT;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_REF;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
@@ -54,36 +56,30 @@ public class DefaultConfigurationResourc
// content resources that form a deeper hierarchy
context.build()
- .resource("/content/tenant1", "sling:config-ref", "/conf/tenant1")
- .resource("/content/tenant1/region1", "sling:config-ref",
"/conf/tenant1/region1")
- .resource("/content/tenant1/region1/site1", "sling:config-ref",
"/conf/tenant1/region1/site1")
- .resource("/content/tenant1/region1/site2", "sling:config-ref",
"/conf/tenant1/region1/site2");
+ .resource("/content/tenant1", PROPERTY_CONFIG_REF, "/conf/tenant1")
+ .resource("/content/tenant1/region1", PROPERTY_CONFIG_REF,
"/conf/tenant1/region1")
+ .resource("/content/tenant1/region1/site1", PROPERTY_CONFIG_REF,
"/conf/tenant1/region1/site1")
+ .resource("/content/tenant1/region1/site2", PROPERTY_CONFIG_REF,
"/conf/tenant1/region1/site2");
site1Page1 =
context.create().resource("/content/tenant1/region1/site1/page1");
site2Page1 =
context.create().resource("/content/tenant1/region1/site2/page1");
- // configuration
+ }
+
+ @Test
+ public void testGetResource() {
+ // build config resources
context.build()
.resource("/conf/tenant1/region1/site1/sling:test/cfgSite1")
- .resource("/conf/tenant1/region1/site1/sling:test/cfgCol/site1")
.resource("/conf/tenant1/region1/sling:test/cfgRegion1")
- .resource("/conf/tenant1/region1/sling:test/cfgCol/region1")
.resource("/conf/tenant1/sling:test/cfgTenant1")
- .resource("/conf/tenant1/sling:test/cfgCol/tenant1")
.resource("/conf/tenant1/sling:test/test")
.resource("/conf/global/sling:test/cfgGlobal")
- .resource("/conf/global/sling:test/cfgCol/confGlobal")
.resource("/conf/global/sling:test/test")
.resource("/apps/conf/sling:test/cfgAppsGlobal")
- .resource("/apps/conf/sling:test/cfgCol/appsGlobal")
.resource("/apps/conf/sling:test/test")
.resource("/libs/conf/sling:test/cfgLibsGlobal")
- .resource("/libs/conf/sling:test/cfgCol/libsGlobal1")
- .resource("/libs/conf/sling:test/cfgCol/libsGlobal2")
.resource("/libs/conf/sling:test/test");
- }
- @Test
- public void testGetResource() {
assertEquals("/conf/tenant1/region1/site1/sling:test/cfgSite1",
underTest.getResource(site1Page1, BUCKET, "cfgSite1").getPath());
assertEquals("/conf/tenant1/region1/sling:test/cfgRegion1",
underTest.getResource(site1Page1, BUCKET, "cfgRegion1").getPath());
assertEquals("/conf/tenant1/sling:test/cfgTenant1",
underTest.getResource(site1Page1, BUCKET, "cfgTenant1").getPath());
@@ -102,7 +98,18 @@ public class DefaultConfigurationResourc
}
@Test
- public void testGetResourceCollection() {
+ public void testGetResourceCollectionWithInheritance() {
+ // build config resources
+ context.build()
+ .resource("/conf/tenant1/region1/site1/sling:test/cfgCol/site1")
+ .resource("/conf/tenant1/region1/sling:test/cfgCol/region1")
+ .resource("/conf/tenant1/sling:test/cfgCol/tenant1")
+ .resource("/conf/global/sling:test/cfgCol/confGlobal")
+ .resource("/apps/conf/sling:test/cfgCol/appsGlobal")
+ .resource("/libs/conf/sling:test/cfgCol", PROPERTY_CONFIG_INHERIT,
true)
+ .resource("/libs/conf/sling:test/cfgCol/libsGlobal1")
+ .resource("/libs/conf/sling:test/cfgCol/libsGlobal2");
+
assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"cfgCol"), ResourceCollectionMatchers.paths(
"/conf/tenant1/region1/site1/sling:test/cfgCol/site1",
"/conf/tenant1/region1/sling:test/cfgCol/region1",
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java?rev=1763689&r1=1763688&r2=1763689&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
Fri Oct 7 07:57:53 2016
@@ -18,6 +18,8 @@
*/
package org.apache.sling.contextaware.config.resource.impl.def;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_INHERIT;
+import static
org.apache.sling.contextaware.config.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_REF;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
@@ -49,34 +51,117 @@ public class DefaultConfigurationResourc
// content resources
context.build()
- .resource("/content/site1", "sling:config-ref", "/conf/site1")
- .resource("/content/site2", "sling:config-ref", "/conf/site2");
+ .resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/site1")
+ .resource("/content/site2", PROPERTY_CONFIG_REF, "/conf/site2");
site1Page1 = context.create().resource("/content/site1/page1");
site2Page1 = context.create().resource("/content/site2/page1");
- // configuration
+ }
+
+ @Test
+ public void testGetResource() {
+ ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
+
+ // build config resources
context.build()
.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());
+ }
+
+ /**
+ * Default resource inheritance without customizing inheritance.
+ * => no resource list merging.
+ */
+ @Test
+ public void testGetResourceCollection_NoInheritProps() {
+ ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
+
+ // build config resources
+ context.build()
.resource("/conf/site1/sling:test/feature/c")
.resource("/conf/site2/sling:test/feature/c")
.resource("/conf/site2/sling:test/feature/d")
.resource("/apps/conf/sling:test/feature/a")
- .resource("/libs/conf/sling:test/test")
.resource("/libs/conf/sling:test/feature/b");
+
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
+ "/conf/site1/sling:test/feature/c"));
+
+ assertThat(underTest.getResourceCollection(site2Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
+ "/conf/site2/sling:test/feature/c",
+ "/conf/site2/sling:test/feature/d"));
}
+ /**
+ * Default resource inheritance without customizing inheritance, but with
now resources inner-most context.
+ * => inherit from next context level.
+ */
@Test
- public void testGetResource() {
+ public void testGetResourceCollection_NoInheritProps_InheritParent() {
ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
- assertEquals("/conf/site1/sling:test/test",
underTest.getResource(site1Page1, BUCKET, "test").getPath());
- assertEquals("/libs/conf/sling:test/test",
underTest.getResource(site2Page1, BUCKET, "test").getPath());
+ // build config resources
+ context.build()
+ .resource("/apps/conf/sling:test/feature/a")
+ .resource("/libs/conf/sling:test/feature/b");
+
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
+ "/apps/conf/sling:test/feature/a"));
+
+ assertThat(underTest.getResourceCollection(site2Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
+ "/apps/conf/sling:test/feature/a"));
+ }
+
+ /**
+ * Resource inheritance with enabling list merging on inner-most context
level.
+ * => merge resource lists from all levels
+ */
+ @Test
+ public void testGetResourceCollection_PropsChild() {
+ ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
+
+ // build config resources
+ context.build()
+ .resource("/conf/site1/sling:test/feature",
PROPERTY_CONFIG_INHERIT, true)
+ .resource("/conf/site1/sling:test/feature/c")
+ .resource("/conf/site2/sling:test/feature",
PROPERTY_CONFIG_INHERIT, true)
+ .resource("/conf/site2/sling:test/feature/c")
+ .resource("/conf/site2/sling:test/feature/d")
+ .resource("/apps/conf/sling:test/feature/a")
+ .resource("/libs/conf/sling:test/feature/b");
+
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"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(
+ "/conf/site2/sling:test/feature/c",
+ "/conf/site2/sling:test/feature/d",
+ "/apps/conf/sling:test/feature/a",
+ "/libs/conf/sling:test/feature/b"));
}
+ /**
+ * Resource inheritance with enabling list merging on a parent context
level.
+ * => merge resource lists from all levels
+ */
@Test
- public void testGetResourceCollection() {
+ public void testGetResourceCollection_PropsParent() {
ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
+ // build config resources
+ context.build()
+ .resource("/conf/site1/sling:test/feature/c")
+ .resource("/conf/site2/sling:test/feature/c")
+ .resource("/conf/site2/sling:test/feature/d")
+ .resource("/apps/conf/sling:test/feature/a")
+ .resource("/libs/conf/sling:test/feature",
PROPERTY_CONFIG_INHERIT, true)
+ .resource("/libs/conf/sling:test/feature/b");
+
assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
"/conf/site1/sling:test/feature/c",
"/apps/conf/sling:test/feature/a",
@@ -89,6 +174,52 @@ public class DefaultConfigurationResourc
"/libs/conf/sling:test/feature/b"));
}
+ /**
+ * Resource inheritance with enabling list merging on a parent context
level, but disabling it on the inner-most level.
+ * => no resource list merging.
+ */
+ @Test
+ public void testGetResourceCollection_PropsParent_ChildCancel() {
+ ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
+
+ // build config resources
+ context.build()
+ .resource("/conf/site1/sling:test/feature",
PROPERTY_CONFIG_INHERIT, false)
+ .resource("/conf/site1/sling:test/feature/c")
+ .resource("/conf/site2/sling:test/feature/c")
+ .resource("/conf/site2/sling:test/feature/d")
+ .resource("/apps/conf/sling:test/feature/a")
+ .resource("/libs/conf/sling:test/feature",
PROPERTY_CONFIG_INHERIT, true)
+ .resource("/libs/conf/sling:test/feature/b");
+
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
+ "/conf/site1/sling:test/feature/c"));
+
+ assertThat(underTest.getResourceCollection(site2Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
+ "/conf/site2/sling:test/feature/c",
+ "/conf/site2/sling:test/feature/d",
+ "/apps/conf/sling:test/feature/a",
+ "/libs/conf/sling:test/feature/b"));
+ }
+
+ /**
+ * Ensure jcr:content nodes are not included in resource collection.
+ */
+ @Test
+ public void testGetResourceCollection_SkipJcrContent() {
+ ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
+
+ // build config resources
+ context.build()
+ .resource("/conf/site1/sling:test/feature/a")
+ .resource("/conf/site1/sling:test/feature/b")
+ .resource("/conf/site2/sling:test/feature/jcr:content");
+
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
+ "/conf/site1/sling:test/feature/a",
+ "/conf/site1/sling:test/feature/b"));
+ }
+
@Test
public void testGetResourcePath() throws Exception {
ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());