Author: rombert
Date: Wed Jan 20 16:14:20 2016
New Revision: 1725748
URL: http://svn.apache.org/viewvc?rev=1725748&view=rev
Log:
SLING-5442 - CombinedResourceProvider.listChildren returns wrong paths
for SyntheticResources under '/'
Fix and tests.
Modified:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java
Modified:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java?rev=1725748&r1=1725747&r2=1725748&view=diff
==============================================================================
---
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
(original)
+++
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
Wed Jan 20 16:14:20 2016
@@ -222,7 +222,12 @@ public class CombinedResourceProvider {
for (final Entry<String, Node<ResourceProviderHandler>> entry :
node.getChildren().entrySet()) {
final String name = entry.getKey();
final ResourceProviderHandler handler =
entry.getValue().getValue();
- final String childPath = new
StringBuilder(parent.getPath()).append('/').append(name).toString();
+ StringBuilder pathBuilder = new StringBuilder();
+ if ( !parent.getPath().equals("/")) {
+ pathBuilder.append(parent.getPath());
+ }
+ pathBuilder.append('/').append(name);
+ final String childPath = pathBuilder.toString();
if (handler == null) {
syntheticList.add(new SyntheticResource(resolver,
childPath, RESOURCE_TYPE_SYNTHETIC));
} else {
Modified:
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java?rev=1725748&r1=1725747&r2=1725748&view=diff
==============================================================================
---
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java
(original)
+++
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java
Wed Jan 20 16:14:20 2016
@@ -178,4 +178,40 @@ public class CombinedResourceProviderTes
assertThat(crp.getResource("/something", null, null, false),
not(nullValue()));
assertThat(crp.getResource("/some/path/object", null, null, false),
not(nullValue()));
}
+
+ /**
+ * Verifies that listing the children at root lists both the synthetic and
the 'real' children
+ */
+ @Test
+ public void listChildren_root() {
+ Resource root = crp.getResource("/", null, null, false);
+ Iterator<Resource> children = crp.listChildren(root);
+
+ Map<String, Resource> all = new HashMap<String, Resource>();
+ while ( children.hasNext() ) {
+ Resource child = children.next();
+ all.put(child.getPath(), child);
+ }
+
+ assertThat(all.entrySet(), Matchers.hasSize(2));
+ assertThat("Resource at /something", all.get("/something"),
not(nullValue()));
+ assertThat("Resource at /some", all.get("/some"), not(nullValue()));
+ }
+
+ @Test
+ public void listChildren_lowerLevel() {
+
+ Resource root = crp.getResource("/some", null, null, false);
+ Iterator<Resource> children = crp.listChildren(root);
+ Map<String, Resource> all = new HashMap<String, Resource>();
+
+ while ( children.hasNext() ) {
+ Resource child = children.next();
+ all.put(child.getPath(), child);
+ }
+
+ assertThat(all.entrySet(), Matchers.hasSize(1));
+ assertThat("Resource at /some/path", all.get("/some/path"),
not(nullValue()));
+
+ }
}