You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/04/23 17:26:29 UTC

svn commit: r1675623 - in /sling/trunk/contrib/extensions/resourcemerger/src: main/java/org/apache/sling/resourcemerger/impl/ main/java/org/apache/sling/resourcemerger/impl/picker/ main/java/org/apache/sling/resourcemerger/spi/ test/java/org/apache/sli...

Author: cziegeler
Date: Thu Apr 23 15:26:28 2015
New Revision: 1675623

URL: http://svn.apache.org/r1675623
Log:
SLING-4653 : [Regression] Merging resource provider is traversing parent hierarchy for finding hide properties

Modified:
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java
    sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java
    sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
    sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java Thu Apr 23 15:26:28 2015
@@ -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 {

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergedResourcePickerWhiteboard.java Thu Apr 23 15:26:28 2015
@@ -64,7 +64,8 @@ public class MergedResourcePickerWhitebo
             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);

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java Thu Apr 23 15:26:28 2015
@@ -39,12 +39,16 @@ class MergingResourceProvider implements
 
     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
 
         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
                             }
                         }
                     }
+                    if ( !traverseParent ) {
+                        break;
+                    }
                     previousAncestorName = ancestor.getName();
                     ancestor = ancestor.getParent();
                 }
@@ -220,7 +227,7 @@ class MergingResourceProvider implements
                     // 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
 
             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;

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProviderFactory.java Thu Apr 23 15:26:28 2015
@@ -33,28 +33,32 @@ class MergingResourceProviderFactory imp
 
     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);
     }
 
 }

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/picker/OverridingResourcePicker.java Thu Apr 23 15:26:28 2015
@@ -27,7 +27,6 @@ import org.apache.felix.scr.annotations.
 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.s
             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 {
 

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/MergedResourcePicker.java Thu Apr 23 15:26:28 2015
@@ -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.

Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/spi/package-info.java Thu Apr 23 15:26:28 2015
@@ -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;

Modified: sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/MergedResourceProviderTest.java Thu Apr 23 15:26:28 2015
@@ -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() {

Modified: sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java?rev=1675623&r1=1675622&r2=1675623&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java Thu Apr 23 15:26:28 2015
@@ -59,7 +59,7 @@ public class OverridingResourceProviderT
      * /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 OverridingResourceProviderT
                     .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