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>.