Author: cziegeler Date: Fri Jul 17 08:33:26 2009 New Revision: 795007 URL: http://svn.apache.org/viewvc?rev=795007&view=rev Log: Add helper method to check if the resource is of a specific resource type (which checks the resource type hierarchy)
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=795007&r1=795006&r2=795007&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 Fri Jul 17 08:33:26 2009 @@ -373,4 +373,28 @@ } return resourceSuperType; } + + /** + * Check if the resource is of the given type. + * This method first checks the resource type of the resource, then + * its super resource type and continues to go up the resource super + * type hierarchy. + * @since 2.0.6 + */ + public static boolean isA(final Resource resource, String resourceType) { + if ( resource == null || resourceType == null ) { + return false; + } + if ( resourceType.equals(resource.getResourceType()) ) { + return true; + } + String superType = findResourceSuperType(resource); + while ( superType != null ) { + if ( resourceType.equals(superType) ) { + return true; + } + superType = getResourceSuperType(resource.getResourceResolver(), superType); + } + return false; + } } 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=795007&r1=795006&r2=795007&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 Fri Jul 17 08:33:26 2009 @@ -19,8 +19,10 @@ package org.apache.sling.api.resource; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.HashMap; @@ -275,4 +277,36 @@ assertEquals("t:c", ResourceUtil.getResourceSuperType(r.getResourceResolver(), r.getResourceType())); assertNull(ResourceUtil.getResourceSuperType(r2.getResourceResolver(), r2.getResourceType())); } + + @Test public void test_isA() { + // the resource resolver + final ResourceResolver resolver = this.context.mock(ResourceResolver.class); + // the resource to test + final Resource r = this.context.mock(Resource.class); + final Resource typeResource = this.context.mock(Resource.class); + this.context.checking(new Expectations() {{ + allowing(r).getResourceType(); will(returnValue("a:b")); + allowing(r).getResourceSuperType(); will(returnValue("d:e")); + allowing(r).getResourceResolver(); will(returnValue(resolver)); + + allowing(typeResource).getResourceType(); + will(returnValue("x:y")); + allowing(typeResource).getResourceSuperType(); + will(returnValue("t:c")); + + allowing(resolver).getResource("/a"); + will(returnValue(r)); + allowing(resolver).getResource("a/b"); + will(returnValue(null)); + allowing(resolver).getResource("t/c"); + will(returnValue(null)); + allowing(resolver).getResource("d/e"); + will(returnValue(typeResource)); + }}); + assertTrue(ResourceUtil.isA(r, "a:b")); + assertTrue(ResourceUtil.isA(r, "d:e")); + assertFalse(ResourceUtil.isA(r, "x:y")); + assertTrue(ResourceUtil.isA(r, "t:c")); + assertFalse(ResourceUtil.isA(r, "h:p")); + } }