This is an automated email from the ASF dual-hosted git repository.
joerghoh pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-resource.git
The following commit(s) were added to refs/heads/master by this push:
new 58da1d0 SLING-10011 - Use javax.jcr.Item.getParent to retrieve parent
resource in JcrResourceProvider (#11)
58da1d0 is described below
commit 58da1d05ef62f0f32f85e09336dbd2d6cd5eb05e
Author: Miroslav Smiljanic <[email protected]>
AuthorDate: Thu Jul 22 14:56:40 2021 +0200
SLING-10011 - Use javax.jcr.Item.getParent to retrieve parent resource in
JcrResourceProvider (#11)
Co-authored-by: Miroslav Smiljanic <[email protected]>
---
.../internal/helper/jcr/JcrResourceProvider.java | 4 +--
.../helper/jcr/JcrResourceProviderTest.java | 33 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git
a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
index e40afb6..c6b29ae 100644
---
a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
+++
b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
@@ -358,8 +358,8 @@ public class JcrResourceProvider extends
ResourceProvider<JcrProviderState> {
if (version == null) {
String parentPath =
ResourceUtil.getParent(child.getPath());
if (parentPath != null) {
- Item parentItem =
ctx.getProviderState().getResourceFactory()
- .getItemOrNull(parentPath);
+ Item parentItem =
((JcrItemResource)child).getItem().getParent();
+
if (parentItem != null && parentItem.isNode()) {
return new
JcrNodeResource(ctx.getResourceResolver(),
parentPath, null, (Node)parentItem,
diff --git
a/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java
b/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java
index b7641bc..637108a 100644
---
a/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java
+++
b/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java
@@ -20,10 +20,15 @@ package org.apache.sling.jcr.resource.internal.helper.jcr;
import java.security.Principal;
+import javax.jcr.Node;
import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+import org.apache.sling.api.resource.Resource;
import org.apache.sling.spi.resource.provider.ResolveContext;
+import org.apache.sling.spi.resource.provider.ResourceContext;
import org.junit.Assert;
import org.mockito.Mockito;
import org.osgi.framework.ServiceReference;
@@ -57,6 +62,34 @@ public class JcrResourceProviderTest extends
SlingRepositoryTestBase {
Mockito.when(ctx.getProviderState()).thenReturn(new
JcrProviderState(session, null, false));
Assert.assertNotNull(jcrResourceProvider.adaptTo(ctx,
Principal.class));
}
+
+ public void testGetParent() throws RepositoryException {
+
+ ResolveContext ctx = Mockito.mock(ResolveContext.class);
+ ResourceContext rCtx = Mockito.mock(ResourceContext.class);
+ Mockito.when(ctx.getProviderState()).thenReturn(new
JcrProviderState(session, null, false));
+
+ Node root = session.getRootNode();
+
+ assertNotNull(root);
+
+ Node nodeA =
root.addNode("test-jcr-resource-provider-"+System.nanoTime()).addNode("node-a",
NodeType.NT_UNSTRUCTURED);
+ Node nodeB = nodeA.addNode("node-b", NodeType.NT_UNSTRUCTURED);
+ Node nodeC = nodeB.addNode("node-c", NodeType.NT_UNSTRUCTURED);
+
+ session.save();
+
+ Resource resourceC = jcrResourceProvider.getResource(ctx,
nodeC.getPath(), rCtx, null);
+ assertNotNull(resourceC);
+
+ Resource resourceB = jcrResourceProvider.getParent(ctx, resourceC);
+ assertNotNull(resourceB);
+ assertEquals(resourceB.getPath(), nodeB.getPath());
+
+ Resource resourceA = jcrResourceProvider.getParent(ctx, resourceB);
+ assertNotNull(resourceA);
+ assertEquals(resourceA.getPath(), nodeA.getPath());
+ }
}