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:00 UTC
[sling-org-apache-sling-resourcemerger] 19/31: SLING-4468 - fixing
case where parent is missing but grandparent is available
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 0b50e2121367c96a822ee3bd75e2b4693aba7328
Author: Justin Edelson <ju...@apache.org>
AuthorDate: Mon Mar 2 15:35:44 2015 +0000
SLING-4468 - fixing case where parent is missing but grandparent is available
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/resourcemerger@1663332 13f79535-47bb-0310-9956-ffa450edef68
---
.../impl/picker/OverridingResourcePicker.java | 43 +++++++++++++++-------
.../impl/OverridingResourceProviderTest.java | 11 ++++++
2 files changed, 40 insertions(+), 14 deletions(-)
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 878db88..febeffc 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
@@ -63,25 +63,25 @@ public class OverridingResourcePicker implements MergedResourcePicker {
resources.add(currentTarget);
while (currentTarget != null) {
- final Resource inheritanceRootResource = findInheritanceRoot(currentTarget);
- if (inheritanceRootResource == null) {
+ final InheritanceRootInfo info = new InheritanceRootInfo();
+ findInheritanceRoot(currentTarget, info);
+ if (info.resource == null) {
currentTarget = null;
} else {
- final String relPath = currentTarget.getPath()
- .substring(inheritanceRootResource.getPath().length());
+ final Resource inheritanceRootResource = info.resource;
+ final String pathRelativeToInheritanceRoot = info.getPathRelativeToInheritanceRoot();
final String superType = inheritanceRootResource.getResourceSuperType();
if (superType == null) {
currentTarget = null;
} else {
- final String superTypeChildPath = superType + relPath;
+ final String superTypeChildPath = superType + pathRelativeToInheritanceRoot;
final Resource superTypeResource = resolver.getResource(superTypeChildPath);
if (superTypeResource != null) {
- resources.add(superTypeResource);
currentTarget = superTypeResource;
} else {
- resources.add(new NonExistingResource(resolver, superTypeChildPath));
- currentTarget = null;
+ currentTarget = new StubResource(resolver, superTypeChildPath);
}
+ resources.add(currentTarget);
}
}
}
@@ -91,18 +91,33 @@ public class OverridingResourcePicker implements MergedResourcePicker {
return resources;
}
- private Resource findInheritanceRoot(final Resource target) {
+ private void findInheritanceRoot(final Resource target, final InheritanceRootInfo info) {
String superType = target.getResourceSuperType();
if (superType != null) {
- return target;
+ info.resource = target;
} else {
Resource parent = target.getParent();
- if (parent == null) {
- return null;
- } else {
- return findInheritanceRoot(parent);
+ if (parent != null) {
+ info.addLevel(target.getName());
+ findInheritanceRoot(parent, info);
}
}
}
+ // Using a value object here as a sort-of tuple because the original
+ // way of calculating the relative path of the current resource from the
+ // inheritance root did not deal with missing resources.
+ private class InheritanceRootInfo {
+ private Resource resource;
+ private final StringBuilder pathRelativeToInheritanceRoot = new StringBuilder();
+
+ private String getPathRelativeToInheritanceRoot() {
+ return pathRelativeToInheritanceRoot.toString();
+ }
+
+ private void addLevel(String name) {
+ pathRelativeToInheritanceRoot.insert(0, name).insert(0, '/');
+ }
+ }
+
}
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 fced547..acbe0b8 100644
--- a/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
+++ b/src/test/java/org/apache/sling/resourcemerger/impl/OverridingResourceProviderTest.java
@@ -58,8 +58,10 @@ public class OverridingResourceProviderTest {
* /apps/a/1/d/1/b/1
* /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
*/
@Before
public void setup() throws Exception {
@@ -82,6 +84,7 @@ public class OverridingResourceProviderTest {
.resource("/apps/a/1/c").p("1", "a").p("2", "b")
.resource("/apps/a/2").p(SUPER_TYPE, "a/1").p("b", "2").p(MergedResourceConstants.PN_HIDE_CHILDREN, new String[] {"b"})
.resource("c").p("1", "c")
+ .resource("/apps/a/3").p(SUPER_TYPE, "a/2")
.commit();
this.provider = new MergingResourceProvider("/override", new OverridingResourcePicker(), true);
@@ -108,6 +111,14 @@ public class OverridingResourceProviderTest {
}
@Test
+ public void testInheritingFromGrandParent() {
+ assertNotNull(this.provider.getResource(this.resolver, "/override/apps/a/3/a"));
+ assertNull(this.provider.getResource(this.resolver, "/override/apps/a/3/b"));
+ assertNotNull(this.provider.getResource(this.resolver, "/override/apps/a/3/c"));
+ assertNotNull(this.provider.getResource(this.resolver, "/override/apps/a/3/d"));
+ }
+
+ @Test
public void testHideChildrenFromList() {
final Resource rsrcA2 = this.provider.getResource(this.resolver, "/override/apps/a/2");
final Iterator<Resource> children = this.provider.listChildren(rsrcA2);
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.