You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:00:40 UTC
[sling-org-apache-sling-resourcemerger] 03/11: SLING-4915
preferably take the order from the overlying resource
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.resourcemerger-1.3.2
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourcemerger.git
commit 152c8a5b34e563648052ae89ea0ef392f669032e
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Fri Feb 12 10:57:38 2016 +0000
SLING-4915 preferably take the order from the overlying resource
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/resourcemerger@1729981 13f79535-47bb-0310-9956-ffa450edef68
---
.../impl/MergingResourceProvider.java | 15 +++++++
.../impl/CommonMergedResourceProviderTest.java | 52 ++++++++++++++++++++++
2 files changed, 67 insertions(+)
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 81d3a3c..735d208 100644
--- a/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
+++ b/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
@@ -314,7 +314,16 @@ public class MergingResourceProvider extends ResourceProvider<Void> {
for (final Resource child : parentResource.getChildren()) {
final String rsrcName = child.getName();
ResourceHolder holder = null;
+ int childPositionInCandidateList = -1;
// check if is this an overlaid resource (i.e. has the resource with the same name already be exposed through the underlying resource)
+ for (int index=0; index < candidates.size(); index++) {
+ ResourceHolder current = candidates.get(index);
+ if (current.name.equals(rsrcName)) {
+ holder = current;
+ childPositionInCandidateList = index;
+ break;
+ }
+ }
for (final ResourceHolder current : candidates) {
if (current.name.equals(rsrcName)) {
holder = current;
@@ -351,6 +360,12 @@ public class MergingResourceProvider extends ResourceProvider<Void> {
if (orderBeforeIndex > -1) {
candidates.add(orderBeforeIndex, holder);
candidates.remove(candidates.size() - 1);
+ } else {
+ // if there was no explicit order, just assume the order given by the overlying resource
+ if (childPositionInCandidateList != -1) {
+ candidates.add(holder);
+ candidates.remove(childPositionInCandidateList);
+ }
}
}
diff --git a/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java b/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java
index 28403e4..2a8fd1d 100644
--- a/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java
+++ b/src/test/java/org/apache/sling/resourcemerger/impl/CommonMergedResourceProviderTest.java
@@ -238,4 +238,56 @@ public class CommonMergedResourceProviderTest {
Assert.assertFalse(mergedResource.getValueMap().containsKey(MergedResourceConstants.PN_HIDE_CHILDREN));
Assert.assertFalse(mergedResource.getValueMap().containsKey(MergedResourceConstants.PN_HIDE_PROPERTIES));
}
+
+ @Test
+ public void testOrderOfPartiallyOverwrittenChildren() throws PersistenceException {
+ // see https://issues.apache.org/jira/browse/SLING-4915
+
+ // create new child nodes below base and overlay
+ MockHelper.create(this.resolver)
+ .resource("/apps/base/child1")
+ .resource("/apps/base/child2")
+ .resource("/apps/base/child3")
+ .resource("/apps/overlay/child4")
+ .resource("/apps/overlay/child2")
+ .resource("/apps/overlay/child3")
+ .commit();
+
+ 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);
+
+ Assert.assertThat(iterable, Matchers.contains(ResourceMatchers.resourceWithName("child1"),ResourceMatchers.resourceWithName("child4"), ResourceMatchers.resourceWithName("child2"), ResourceMatchers.resourceWithName("child3")));
+ }
+
+ @Test
+ public void testOrderOfNonOverlappingChildren() throws PersistenceException {
+ // create new child nodes below base and overlay
+ MockHelper.create(this.resolver)
+ .resource("/apps/base/child1")
+ .resource("/apps/base/child2")
+ .resource("/apps/overlay/child3")
+ .resource("/apps/overlay/child4")
+ .commit();
+ 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);
+
+ Assert.assertThat(iterable, Matchers.contains(ResourceMatchers.resourceWithName("child1"),ResourceMatchers.resourceWithName("child2"), ResourceMatchers.resourceWithName("child3"), ResourceMatchers.resourceWithName("child4")));
+ }
+
+ @Test
+ public void testOrderBeingModifiedThroughOrderBefore() throws PersistenceException {
+ // create new child nodes below base and overlay
+ MockHelper.create(this.resolver)
+ .resource("/apps/base/child1")
+ .resource("/apps/base/child2")
+ .resource("/apps/overlay/child3").p(MergedResourceConstants.PN_ORDER_BEFORE, "child2")
+ .commit();
+ 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);
+
+ Assert.assertThat(iterable, Matchers.contains(ResourceMatchers.resourceWithName("child1"),ResourceMatchers.resourceWithName("child3"), ResourceMatchers.resourceWithName("child2")));
+ }
}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.