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 2009/09/10 17:10:51 UTC

svn commit: r813472 - in /sling/trunk/bundles/api/src: main/java/org/apache/sling/api/resource/ResourceUtil.java test/java/org/apache/sling/api/resource/ResourceUtilTest.java

Author: cziegeler
Date: Thu Sep 10 15:10:50 2009
New Revision: 813472

URL: http://svn.apache.org/viewvc?rev=813472&view=rev
Log:
SLING-1107 - ResourceUtil.getResourceSuperType should check for overwritten resource super type

Modified:
    sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
    sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java

Modified: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java?rev=813472&r1=813471&r2=813472&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java (original)
+++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/resource/ResourceUtil.java Thu Sep 10 15:10:50 2009
@@ -346,13 +346,26 @@
                                               final String resourceType) {
         // normalize resource type to a path string
         final String rtPath = resourceTypeToPath(resourceType);
-        // get the resource type resource
-        final Resource rtResource = resourceResolver.getResource(rtPath);
-        // check for endless recursion
-        if ( rtResource != null ) {
-            return rtResource.getResourceSuperType();
+        // get the resource type resource and check its super type
+        String resourceSuperType = null;
+        // if the path is absolute, use it directly
+        if ( rtPath != null && rtPath.startsWith("/") ) {
+            final Resource rtResource = resourceResolver.getResource(rtPath);
+            if ( rtResource != null ) {
+                resourceSuperType = rtResource.getResourceSuperType();
+            }
+
+        } else {
+            // if the path is relative we use the search paths
+            for(final String searchPath : resourceResolver.getSearchPath()) {
+                final Resource rtResource = resourceResolver.getResource(searchPath + rtPath);
+                if ( rtResource != null && rtResource.getResourceSuperType() != null ) {
+                    resourceSuperType = rtResource.getResourceSuperType();
+                    break;
+                }
+            }
         }
-        return null;
+        return resourceSuperType;
     }
 
     /**

Modified: sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java?rev=813472&r1=813471&r2=813472&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java (original)
+++ sling/trunk/bundles/api/src/test/java/org/apache/sling/api/resource/ResourceUtilTest.java Thu Sep 10 15:10:50 2009
@@ -277,6 +277,8 @@
             will(returnValue(typeResource));
             allowing(resolver).getResource("a/c");
             will(returnValue(null));
+            allowing(resolver).getSearchPath();
+            will(returnValue(new String[] {""}));
         }});
         assertEquals("t:c", ResourceUtil.getResourceSuperType(r.getResourceResolver(), r.getResourceType()));
         assertNull(ResourceUtil.getResourceSuperType(r2.getResourceResolver(), r2.getResourceType()));
@@ -306,6 +308,8 @@
             will(returnValue(null));
             allowing(resolver).getResource("d/e");
             will(returnValue(typeResource));
+            allowing(resolver).getSearchPath();
+            will(returnValue(new String[] {""}));
         }});
         assertTrue(ResourceUtil.isA(r, "a:b"));
         assertTrue(ResourceUtil.isA(r, "d:e"));