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>


Reply via email to