Author: sseifert
Date: Tue Oct 11 17:25:53 2016
New Revision: 1764311
URL: http://svn.apache.org/viewvc?rev=1764311&view=rev
Log:
SLING-6059 simplify resource inheritance to support only inheritance from
direct hierachy parent ("option e)")
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml
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
sling/trunk/contrib/extensions/contextaware-config/spi/pom.xml
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml?rev=1764311&r1=1764310&r2=1764311&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml Tue Oct 11
17:25:53 2016
@@ -151,6 +151,13 @@
<version>1.8.0</version>
<scope>test</scope>
</dependency>
+ <!-- this dependency can be removed when updated to sling-mock 1.8.2
or higher -->
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.resourcebuilder</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.hamcrest</artifactId>
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=1764311&r1=1764310&r2=1764311&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
Tue Oct 11 17:25:53 2016
@@ -234,59 +234,28 @@ 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
- final Boolean inheritVal =
item.getValueMap().get(PROPERTY_CONFIG_COLLECTION_INHERIT, Boolean.class);
- if ( inheritVal != null ) {
- listMergingEnabled = inheritVal;
- }
-
- // 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());
}
- // add resource items only if none found yet, or inheritance
is enabled
- if (result.isEmpty() || listMergingEnabled == Boolean.TRUE) {
- for (Resource child : item.getChildren()) {
- if (isValidResourceCollectionItem(child)
- && !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());
- }
+ for (Resource child : item.getChildren()) {
+ if (isValidResourceCollectionItem(child) &&
!names.contains(child.getName())) {
+ result.add(child);
+ names.add(child.getName());
}
}
- // do not go further upwards in level is inheritance is broken
here
- if (listMergingEnabled == Boolean.FALSE) {
+ // check inheritance mode on current level - should we check
on next-highest level as well?
+ boolean inheritFromNextConfigPath =
item.getValueMap().get(PROPERTY_CONFIG_COLLECTION_INHERIT, false);
+ if (!inheritFromNextConfigPath) {
break;
}
}
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=1764311&r1=1764310&r2=1764311&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
Tue Oct 11 17:25:53 2016
@@ -59,13 +59,17 @@ public class ConfigurationResourceResolv
// configuration
context.build()
.resource("/conf/site1/sling:test/test")
- .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("/conf/site1/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .resource("c")
+ .resource("/conf/site2/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .siblingsMode()
+ .resource("c")
+ .resource("d")
+ .resource("/apps/conf/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .resource("a")
.resource("/libs/conf/sling:test/test")
- .resource("/libs/conf/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
- .resource("/libs/conf/sling:test/feature/b");
+ .resource("/libs/conf/sling:test/feature")
+ .resource("b");
}
@Test
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=1764311&r1=1764310&r2=1764311&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
Tue Oct 11 17:25:53 2016
@@ -66,13 +66,17 @@ public class ConfigurationResourceResolv
// configuration
context.build()
.resource("/conf/site1/sling:test/test")
- .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("/conf/site1/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .resource("c")
+ .resource("/conf/site2/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .siblingsMode()
+ .resource("c")
+ .resource("d")
+ .resource("/apps/conf/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .resource("a")
.resource("/libs/conf/sling:test/test")
- .resource("/libs/conf/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
- .resource("/libs/conf/sling:test/feature/b");
+ .resource("/libs/conf/sling:test/feature")
+ .resource("b");
}
@Test
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=1764311&r1=1764310&r2=1764311&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
Tue Oct 11 17:25:53 2016
@@ -104,13 +104,12 @@ public class DefaultConfigurationResourc
public void testGetResourceCollectionWithInheritance() {
// build config resources
context.build()
-
.resource("/conf/brand1/tenant1/region1/site1/sling:test/cfgCol/site1")
- .resource("/conf/brand1/tenant1/region1/sling:test/cfgCol/region1")
- .resource("/conf/brand1/tenant1/sling:test/cfgCol/tenant1")
- .resource("/conf/brand1/sling:test/cfgCol/brand1")
- .resource("/conf/global/sling:test/cfgCol/confGlobal")
- .resource("/apps/conf/sling:test/cfgCol/appsGlobal")
- .resource("/libs/conf/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .resource("/conf/brand1/tenant1/region1/site1/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("site1")
+ .resource("/conf/brand1/tenant1/region1/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("region1")
+ .resource("/conf/brand1/tenant1/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("tenant1")
+ .resource("/conf/brand1/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("brand1")
+ .resource("/conf/global/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("confGlobal")
+ .resource("/apps/conf/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("appsGlobal")
.resource("/libs/conf/sling:test/cfgCol/libsGlobal1")
.resource("/libs/conf/sling:test/cfgCol/libsGlobal2");
@@ -140,13 +139,12 @@ public class DefaultConfigurationResourc
context.build()
.resource("/content/level1", PROPERTY_CONFIG_REF, "/conf/a1/a2")
.resource("/content/level1/level2", PROPERTY_CONFIG_REF,
"/conf/b1/b2")
- .resource("/conf/a1/sling:test/cfgCol/a1")
- .resource("/conf/a1/a2/sling:test/cfgCol/a1_a2")
- .resource("/conf/b1/sling:test/cfgCol/b1")
- .resource("/conf/b1/b2/sling:test/cfgCol/b1_b2")
- .resource("/conf/global/sling:test/cfgCol/confGlobal")
- .resource("/libs/conf/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
- .resource("/apps/conf/sling:test/cfgCol/appsGlobal")
+ .resource("/conf/a1/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("a1")
+ .resource("/conf/a1/a2/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("a1_a2")
+ .resource("/conf/b1/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("b1")
+ .resource("/conf/b1/b2/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("b1_b2")
+ .resource("/conf/global/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("confGlobal")
+ .resource("/apps/conf/sling:test/cfgCol",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("appsGlobal")
.resource("/libs/conf/sling:test/cfgCol/libsGlobal");
Resource level1_2 =
context.resourceResolver().getResource("/content/level1/level2");
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=1764311&r1=1764310&r2=1764311&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
Tue Oct 11 17:25:53 2016
@@ -106,6 +106,7 @@ public class DefaultConfigurationResourc
// build config resources
context.build()
.resource("/apps/conf/sling:test/feature/a")
+ .resource("/libs/conf/sling:test/feature/a")
.resource("/libs/conf/sling:test/feature/b");
assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
@@ -117,10 +118,10 @@ public class DefaultConfigurationResourc
/**
* Resource inheritance with enabling list merging on inner-most context
level.
- * => merge resource lists from all levels
+ * => merge resource lists from next level
*/
@Test
- public void testGetResourceCollection_PropsChild() {
+ public void testGetResourceCollection_Inherit1Level() {
ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
// build config resources
@@ -135,32 +136,34 @@ public class DefaultConfigurationResourc
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"));
+ "/apps/conf/sling:test/feature/a"));
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"));
+ "/apps/conf/sling:test/feature/a"));
}
/**
- * Resource inheritance with enabling list merging on a parent context
level.
+ * Resource inheritance with enabling list merging on all levels.
* => merge resource lists from all levels
*/
@Test
- public void testGetResourceCollection_PropsParent() {
+ public void testGetResourceCollection_InheritMultipleLevels() {
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_COLLECTION_INHERIT, true)
- .resource("/libs/conf/sling:test/feature/b");
+ .resource("/conf/site1/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .resource("c")
+ .resource("/conf/site2/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .siblingsMode()
+ .resource("c")
+ .resource("d")
+ .resource("/apps/conf/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+ .resource("a")
+ .resource("/libs/conf/sling:test/feature")
+ .resource("b");
assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"feature"), ResourceCollectionMatchers.paths(
"/conf/site1/sling:test/feature/c",
@@ -175,31 +178,27 @@ public class DefaultConfigurationResourc
}
/**
- * Resource inheritance with enabling list merging on a parent context
level, but disabling it on the inner-most level.
- * => no resource list merging.
+ * Resource inheritance with enabling list merging on a parent context
level.
+ * => no inheritance takes place
*/
@Test
- public void testGetResourceCollection_PropsParent_ChildCancel() {
+ public void testGetResourceCollection_PropsParent() {
ConfigurationResourceResolvingStrategy underTest =
context.registerInjectActivateService(new
DefaultConfigurationResourceResolvingStrategy());
// build config resources
context.build()
- .resource("/conf/site1/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_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_COLLECTION_INHERIT, true)
- .resource("/libs/conf/sling:test/feature/b");
+ .resource("/libs/conf/sling:test/feature",
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("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"));
+ "/conf/site2/sling:test/feature/d"));
}
/**
Modified: sling/trunk/contrib/extensions/contextaware-config/spi/pom.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi/pom.xml?rev=1764311&r1=1764310&r2=1764311&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/spi/pom.xml (original)
+++ sling/trunk/contrib/extensions/contextaware-config/spi/pom.xml Tue Oct 11
17:25:53 2016
@@ -90,6 +90,13 @@
<version>1.8.0</version>
<scope>test</scope>
</dependency>
+ <!-- this dependency can be removed when updated to sling-mock 1.8.2
or higher -->
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.resourcebuilder</artifactId>
+ <version>1.0.1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.osgi</artifactId>