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());
+    }
 }
 
 

Reply via email to