You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2017/06/13 11:36:26 UTC
svn commit: r1798579 - in /sling/trunk/contrib/extensions/resourcemerger/src:
main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java
Author: kwin
Date: Tue Jun 13 11:36:26 2017
New Revision: 1798579
URL: http://svn.apache.org/viewvc?rev=1798579&view=rev
Log:
SLING-6951 do not hide local grandchildren when sling:hideChildren is set on the grandparent
Modified:
sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java
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=1798579&r1=1798578&r2=1798579&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 Tue Jun 13 11:36:26 2017
@@ -110,10 +110,16 @@ public class MergingResourceProvider ext
final String[] ancestorChildrenToHideArray = ancestorProps.get(MergedResourceConstants.PN_HIDE_CHILDREN, String[].class);
if (ancestorChildrenToHideArray != null) {
for (final String value : ancestorChildrenToHideArray) {
- final ExcludeEntry entry = new ExcludeEntry(value, false);
+ final boolean onlyUnderlying;
+ if (value.equals("*")) {
+ onlyUnderlying = true;
+ } else {
+ onlyUnderlying = false;
+ }
+ final ExcludeEntry entry = new ExcludeEntry(value, onlyUnderlying);
final Boolean hides = hides(entry, previousAncestorName, true);
if (hides != null && hides.booleanValue() == true) {
- this.entries.add(new ExcludeEntry("*", false));
+ this.entries.add(new ExcludeEntry("*", entry.onlyUnderlying));
break;
}
}
Modified: sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java?rev=1798579&r1=1798578&r2=1798579&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java Tue Jun 13 11:36:26 2017
@@ -118,7 +118,13 @@ public class CommonMergedResourceProvide
MockHelper.create(this.resolver)
.resource("/apps/base/child1").p("property1", "frombase")
.resource("/apps/base/child2").p("property1", "frombase")
+ .resource("/apps/base/child1/grandchild").p("propertygrandchild1", "frombase")
+ .resource("/apps/base/child1/grandchild/grandgrandchild").p("propertygrandgrandchild1", "frombase")
.resource("/apps/overlay/child1").p("property1", "fromoverlay")
+ .resource("/apps/overlay/child1/grandchild").p("propertygrandchild1", "fromoverlay")
+ .resource("/apps/overlay/child1/grandchild/grandgrandchild").p("propertygrandgrandchild1", "fromoverlay")
+ .resource("/apps/overlay/child1/grandchild1").p("propertygrandchild1", "fromoverlay")
+ .resource("/apps/overlay/child1/grandchild1/grandgrandchild1").p("propertygrandgrandchild1", "fromoverlay")
.resource("/apps/overlay/child3").p("property1", "fromoverlay")
.commit();
@@ -129,21 +135,55 @@ public class CommonMergedResourceProvide
Resource mergedResource = this.provider.getResource(ctx, "/merged", ResourceContext.EMPTY_CONTEXT, null);
// convert the iterator returned by list children into an iterable (to be able to perform some tests)
- IteratorIterable<Resource> iterable = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedResource), true);
+ IteratorIterable<Resource> iterableChildren = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedResource), true);
// all overlay resource are still exposed, because hiding children by wildcard only hides children from underlying resources
- Assert.assertThat(iterable, Matchers.containsInAnyOrder(
+ Assert.assertThat(iterableChildren, Matchers.containsInAnyOrder(
ResourceMatchers.nameAndProps("child1", Collections.singletonMap("property1", (Object)"fromoverlay")),
ResourceMatchers.nameAndProps("child3", Collections.singletonMap("property1", (Object)"fromoverlay"))
));
+ // go down one level!
+ Resource mergedChildResource = this.provider.getResource(ctx, "/merged/child1", ResourceContext.EMPTY_CONTEXT, null);
+
+ // convert the iterator returned by list children into an iterable (to be able to perform some tests)
+ IteratorIterable<Resource> iterableGrandchildren = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedChildResource), true);
+
+ // all overlay resource are still exposed, because hiding children by wildcard only hides children from underlying resources
+ Assert.assertThat(iterableGrandchildren, Matchers.containsInAnyOrder(
+ ResourceMatchers.nameAndProps("grandchild", Collections.singletonMap("propertygrandchild1", (Object)"fromoverlay")),
+ ResourceMatchers.nameAndProps("grandchild1", Collections.singletonMap("propertygrandchild1", (Object)"fromoverlay")))
+ );
+
+ // go down two levels
+ Resource mergedGrandChildResource = this.provider.getResource(ctx, "/merged/child1/grandchild", ResourceContext.EMPTY_CONTEXT, null);
+
+ // convert the iterator returned by list children into an iterable (to be able to perform some tests)
+ IteratorIterable<Resource> iterableGrandGrandchildren = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedGrandChildResource), true);
+
+ // all overlay resource are still exposed, because hiding children by wildcard only hides children from underlying resources
+ Assert.assertThat(iterableGrandGrandchildren, Matchers.contains(
+ ResourceMatchers.nameAndProps("grandgrandchild", Collections.singletonMap("propertygrandgrandchild1", (Object)"fromoverlay")))
+ );
+
+ // go down two levels (in node which is only available in overlay!)
+ mergedGrandChildResource = this.provider.getResource(ctx, "/merged/child1/grandchild1", ResourceContext.EMPTY_CONTEXT, null);
+
+ // convert the iterator returned by list children into an iterable (to be able to perform some tests)
+ iterableGrandGrandchildren = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedGrandChildResource), true);
+
+ // all overlay resource are still exposed, because hiding children by wildcard only hides children from underlying resources
+ Assert.assertThat(iterableGrandGrandchildren, Matchers.contains(
+ ResourceMatchers.nameAndProps("grandgrandchild1", Collections.singletonMap("propertygrandgrandchild1", (Object)"fromoverlay")))
+ );
+
// now hide by explicit value
properties.put(MergedResourceConstants.PN_HIDE_CHILDREN, "child1");
resolver.commit();
// child1 is no longer exposed from overlay, because hiding children by name hides children from underlying as well as from local resources, child2 is exposed from base
- iterable = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedResource), true);
- Assert.assertThat(iterable, Matchers.containsInAnyOrder(
+ iterableChildren = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedResource), true);
+ Assert.assertThat(iterableChildren, Matchers.containsInAnyOrder(
ResourceMatchers.name("child2"),
ResourceMatchers.name("child3")));
@@ -151,8 +191,8 @@ public class CommonMergedResourceProvide
properties.put(MergedResourceConstants.PN_HIDE_CHILDREN, new String[]{"!child2", "*", "child3"});
resolver.commit();
- iterable = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedResource), true);
- Assert.assertThat(iterable, Matchers.containsInAnyOrder(
+ iterableChildren = new IteratorIterable<Resource>(provider.listChildren(ctx, mergedResource), true);
+ Assert.assertThat(iterableChildren, Matchers.containsInAnyOrder(
ResourceMatchers.name("child2"),
ResourceMatchers.nameAndProps("child1", Collections.singletonMap("property1", (Object)"fromoverlay"))
));