This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.resourcemerger-1.2.10
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourcemerger.git

commit 72cd4333fcae3b39b37b94bea902a82391bd25e9
Author: Carsten Ziegeler <cziege...@apache.org>
AuthorDate: Thu Apr 23 15:26:28 2015 +0000

    SLING-4653 : [Regression] Merging resource provider is traversing parent 
hierarchy for finding hide properties
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/resourcemerger@1675623
 13f79535-47bb-0310-9956-ffa450edef68
---
 .../resourcemerger/impl/CRUDMergingResourceProvider.java  |  7 ++++---
 .../impl/MergedResourcePickerWhiteboard.java              |  3 ++-
 .../resourcemerger/impl/MergingResourceProvider.java      | 15 +++++++++++----
 .../impl/MergingResourceProviderFactory.java              | 14 +++++++++-----
 .../impl/picker/OverridingResourcePicker.java             |  5 ++---
 .../sling/resourcemerger/spi/MergedResourcePicker.java    |  8 ++++++++
 .../org/apache/sling/resourcemerger/spi/package-info.java |  2 +-
 .../resourcemerger/impl/MergedResourceProviderTest.java   |  2 +-
 .../impl/OverridingResourceProviderTest.java              |  4 ++--
 9 files changed, 40 insertions(+), 20 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
 
b/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
index 1ef1d6b..6197263 100644
--- 
a/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
+++ 
b/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
@@ -40,8 +40,9 @@ public class CRUDMergingResourceProvider
     implements ModifyingResourceProvider {
 
     public CRUDMergingResourceProvider(final String mergeRootPath,
-            final MergedResourcePicker picker) {
-        super(mergeRootPath, picker, false);
+            final MergedResourcePicker picker,
+            final boolean traverseHierarchie) {
+        super(mergeRootPath, picker, false, traverseHierarchie);
     }
 
     private static final class ExtendedResourceHolder {
@@ -71,7 +72,7 @@ public class CRUDMergingResourceProvider
                 // check parent for hiding
                 final Resource parent = rsrc.getParent();
                 if ( parent != null ) {
-                    final boolean hidden = new 
ParentHidingHandler(parent).isHidden(holder.name);
+                    final boolean hidden = new ParentHidingHandler(parent, 
this.traverseHierarchie).isHidden(holder.name);
                     if ( hidden ) {
                         holder.resources.clear();
                     } else {
diff --git 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
index 8954a75..dd411b4 100644
--- 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
+++ 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
@@ -64,7 +64,8 @@ public class MergedResourcePickerWhiteboard implements 
ServiceTrackerCustomizer
             final String mergeRoot = 
PropertiesUtil.toString(reference.getProperty(MergedResourcePicker.MERGE_ROOT), 
null);
             if (mergeRoot != null) {
                 final ResourceProviderFactory providerFactory = new 
MergingResourceProviderFactory(mergeRoot, picker,
-                        
PropertiesUtil.toBoolean(reference.getProperty(MergedResourcePicker.READ_ONLY), 
true));
+                        
PropertiesUtil.toBoolean(reference.getProperty(MergedResourcePicker.READ_ONLY), 
true),
+                        
PropertiesUtil.toBoolean(reference.getProperty(MergedResourcePicker.TRAVERSE_PARENT),
 false));
                 final Dictionary<Object, Object> props = new Hashtable<Object, 
Object>();
                 props.put(ResourceProvider.ROOTS, mergeRoot);
                 props.put(ResourceProvider.OWNS_ROOTS, true);
diff --git 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
index fac390c..6682b8d 100644
--- 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
+++ 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
@@ -39,12 +39,16 @@ class MergingResourceProvider implements ResourceProvider {
 
     private final boolean readOnly;
 
+    protected final boolean traverseHierarchie;
+
     MergingResourceProvider(final String mergeRootPath,
             final MergedResourcePicker picker,
-            final boolean readOnly) {
+            final boolean readOnly,
+            final boolean traverseHierarchie) {
         this.mergeRootPath = mergeRootPath;
         this.picker = picker;
         this.readOnly = readOnly;
+        this.traverseHierarchie = traverseHierarchie;
     }
 
     protected static final class ExcludeEntry {
@@ -70,7 +74,7 @@ class MergingResourceProvider implements ResourceProvider {
 
         private List<ExcludeEntry> entries = new ArrayList<ExcludeEntry>();
 
-        public ParentHidingHandler(final Resource parent) {
+        public ParentHidingHandler(final Resource parent, final boolean 
traverseParent) {
             final ValueMap parentProps = parent.getValueMap();
             final String[] childrenToHideArray = 
parentProps.get(MergedResourceConstants.PN_HIDE_CHILDREN, String[].class);
             if (childrenToHideArray != null) {
@@ -95,6 +99,9 @@ class MergingResourceProvider implements ResourceProvider {
                             }
                         }
                     }
+                    if ( !traverseParent ) {
+                        break;
+                    }
                     previousAncestorName = ancestor.getName();
                     ancestor = ancestor.getParent();
                 }
@@ -220,7 +227,7 @@ class MergingResourceProvider implements ResourceProvider {
                     // check parent for hiding
                     // SLING 3521 : if parent is not readable, nothing is 
hidden
                     final Resource parent = resource.getParent();
-                    hidden = (parent == null ? false : new 
ParentHidingHandler(parent).isHidden(holder.name));
+                    hidden = (parent == null ? false : new 
ParentHidingHandler(parent, this.traverseHierarchie).isHidden(holder.name));
                 }
                 if (hidden) {
                     holder.resources.clear();
@@ -249,7 +256,7 @@ class MergingResourceProvider implements ResourceProvider {
 
             while (resources.hasNext()) {
                 Resource parentResource = resources.next();
-                final ParentHidingHandler handler = new 
ParentHidingHandler(parentResource);
+                final ParentHidingHandler handler = new 
ParentHidingHandler(parentResource, this.traverseHierarchie);
                 for (final Resource child : parentResource.getChildren()) {
                     final String rsrcName = child.getName();
                     ResourceHolder holder = null;
diff --git 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java
 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java
index 72bbddf..8760747 100644
--- 
a/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java
+++ 
b/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java
@@ -33,28 +33,32 @@ class MergingResourceProviderFactory implements 
ResourceProviderFactory {
 
     private final boolean readOnly;
 
+    private final boolean traverseHierarchie;
+
     MergingResourceProviderFactory(final String mergeRootPath,
             final MergedResourcePicker picker,
-            final boolean readOnly) {
+            final boolean readOnly,
+            final boolean traverseHierarchie) {
         this.mergeRootPath = mergeRootPath;
         this.picker = picker;
         this.readOnly = readOnly;
+        this.traverseHierarchie = traverseHierarchie;
     }
 
     public ResourceProvider getResourceProvider(final Map<String, Object> 
authenticationInfo)
     throws LoginException {
         if ( this.readOnly ) {
-            return new MergingResourceProvider(mergeRootPath, picker, 
this.readOnly);
+            return new MergingResourceProvider(mergeRootPath, picker, 
this.readOnly, this.traverseHierarchie);
         }
-        return new CRUDMergingResourceProvider(mergeRootPath, picker);
+        return new CRUDMergingResourceProvider(mergeRootPath, picker, 
this.traverseHierarchie);
     }
 
     public ResourceProvider getAdministrativeResourceProvider(final 
Map<String, Object> authenticationInfo)
     throws LoginException {
         if ( this.readOnly ) {
-            return new MergingResourceProvider(mergeRootPath, picker, 
this.readOnly);
+            return new MergingResourceProvider(mergeRootPath, picker, 
this.readOnly, this.traverseHierarchie);
         }
-        return new CRUDMergingResourceProvider(mergeRootPath, picker);
+        return new CRUDMergingResourceProvider(mergeRootPath, picker, 
this.traverseHierarchie);
     }
 
 }
diff --git 
a/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
 
b/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
index febeffc..49090ec 100644
--- 
a/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
+++ 
b/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
@@ -27,7 +27,6 @@ import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.api.resource.NonExistingResource;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.resourcemerger.impl.StubResource;
@@ -43,8 +42,8 @@ import 
org.apache.sling.resourcemerger.spi.MergedResourcePicker;
             label = "Root", description = "Root path at which merged resources 
will be available."),
     @Property(name=MergedResourcePicker.READ_ONLY, boolValue=true,
     label="Read Only",
-    description="Specifies if the resources are read-only or can be modified.")
-
+    description="Specifies if the resources are read-only or can be 
modified."),
+    @Property(name=MergedResourcePicker.TRAVERSE_PARENT, boolValue=true, 
propertyPrivate=true)
 })
 public class OverridingResourcePicker implements MergedResourcePicker {
 
diff --git 
a/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java 
b/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java
index f5619ab..d3d0935 100644
--- 
a/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java
+++ 
b/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java
@@ -51,6 +51,14 @@ public interface MergedResourcePicker {
     String READ_ONLY = "merge.readOnly";
 
     /**
+     * Service property name specifying whether the parent hierarchy is
+     * traversed to check for hiding properties. If not specified this
+     * property defaults to <code>false</code>. The value of this
+     * property must be of type Boolean.
+     */
+    String TRAVERSE_PARENT = "merge.traverseParent";
+
+    /**
      * Method invoked by the MergingResourceProvider to identify the resources 
to be merged for a given
      * relative path. The resources returned may be either resources returned 
from the ResourceResolver
      * directory or an instance of NonExistingResource.
diff --git 
a/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java 
b/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java
index 68a22a6..a97f861 100644
--- a/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java
+++ b/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java
@@ -20,7 +20,7 @@
 /**
  * Provides a service to merge multiple physical resources into a single one
  */
-@Version("1.0.0")
+@Version("1.1.0")
 package org.apache.sling.resourcemerger.spi;
 
 import aQute.bnd.annotation.Version;
diff --git 
a/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
 
b/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
index 73b24cb..587dde0 100644
--- 
a/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
+++ 
b/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
@@ -81,7 +81,7 @@ public class MergedResourceProviderTest {
                                           .resource("/libs/a/Y/c")
                                         .commit();
 
-        this.provider = new CRUDMergingResourceProvider("/merged", new 
MergingResourcePicker());
+        this.provider = new CRUDMergingResourceProvider("/merged", new 
MergingResourcePicker(), false);
     }
 
     @Test public void testHideChildren() {
diff --git 
a/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
 
b/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
index acbe0b8..7531002 100644
--- 
a/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
+++ 
b/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
@@ -59,7 +59,7 @@ public class OverridingResourceProviderTest {
      * /apps/a/1/c
      * /apps/a/2/c
      * /apps/a/3
-     * 
+     *
      * /apps/a/2 has the super type of /apps/a/1
      * /apps/a/3 has the super type of /apps/a/2
      */
@@ -87,7 +87,7 @@ public class OverridingResourceProviderTest {
                     .resource("/apps/a/3").p(SUPER_TYPE, "a/2")
                     .commit();
 
-        this.provider = new MergingResourceProvider("/override", new 
OverridingResourcePicker(), true);
+        this.provider = new MergingResourceProvider("/override", new 
OverridingResourcePicker(), false, true);
     }
 
     @Test

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <commits@sling.apache.org>.

Reply via email to