You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/02/06 13:53:45 UTC

svn commit: r1728834 - /sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java

Author: cziegeler
Date: Sat Feb  6 12:53:45 2016
New Revision: 1728834

URL: http://svn.apache.org/viewvc?rev=1728834&view=rev
Log:
SLING-5492 : ResourceResolver#getParent might ask wrong resource provider

Modified:
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java?rev=1728834&r1=1728833&r2=1728834&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControl.java Sat Feb  6 12:53:45 2016
@@ -160,20 +160,26 @@ public class ResourceResolverControl {
      * {@link #getResource(String, Resource, Map, boolean)} for more details
      */
     public Resource getParent(final ResourceResolverContext context, final Resource child) {
-        final String path = child.getPath();
-        final AuthenticatedResourceProvider provider = getBestMatchingProvider(context, path);
-        if ( provider != null ) {
-            final Resource parentCandidate = provider.getParent(child);
-            if (parentCandidate != null) {
-                return parentCandidate;
+        final String parentPath = ResourceUtil.getParent(child.getPath());
+        if ( parentPath != null ) {
+            final AuthenticatedResourceProvider childProvider = getBestMatchingProvider(context, child.getPath());
+            final AuthenticatedResourceProvider parentProvider = getBestMatchingProvider(context, parentPath);
+            if ( parentProvider != null ) {
+                final Resource parentCandidate;
+                if ( childProvider == parentProvider ) {
+                    parentCandidate = parentProvider.getParent(child);
+                } else {
+                    parentCandidate = parentProvider.getResource(parentPath, null, null);
+                }
+                if (parentCandidate != null) {
+                    return parentCandidate;
+                }
             }
-        }
 
-        final String parentPath = ResourceUtil.getParent(path);
-        if (parentPath != null && isIntermediatePath(parentPath)) {
-            return new SyntheticResource(context.getResourceResolver(), parentPath, ResourceProvider.RESOURCE_TYPE_SYNTHETIC);
+            if (isIntermediatePath(parentPath)) {
+                return new SyntheticResource(context.getResourceResolver(), parentPath, ResourceProvider.RESOURCE_TYPE_SYNTHETIC);
+            }
         }
-
         return null;
     }