Re: Revisiting the resource super type handling

2009-06-26 Thread Tobias Bocanegra
On Fri, Jun 26, 2009 at 10:30 AM, Carsten Ziegelercziege...@apache.org wrote:
 Hi,

 while changing the script resolution in the last days a little bit to
 make it cacheable, I stumbled across the handling of the resource super
 type.
 The jcr resource implementation checks if the node has the
 sling:resourceSuperType property and returns this value if existent.
 If not, it tries to find a resource under the search paths (usually libs
 and apps) with the resource type converted to a path. So if a resource
 has the type a/b, the resources /apps/a/b and /libs/a/b are tested if
 they exist and contain a resource super type property.

 Other resource implementations like the bundle resource always returns
 null. The fs resource implemenations returns a special resource type for
 the resource super type.

 I think this behaviour is a little bit inconsistent. I would change it
 that if a resource does not know it's super type, it should return null.
 So basically this effects the implementation of the jcr resource.
 The script resolver already checks if the resource super type is null
 and then applies the above algoritm from the jcr resource as well.

 Otherwise each resource implemenation should apply the algorithm to be
 consistent. But I would prefer the first solution.

 While the change is incompatible, I think this doesn't have any real effect.

i agree that the resource should not know about search paths. imo, the
resource resolver should be used for 'resolving' the resource super
type.
regards, toby


Re: Revisiting the resource super type handling

2009-06-26 Thread Felix Meschberger
Hi,

Tobias Bocanegra schrieb:
 On Fri, Jun 26, 2009 at 10:30 AM, Carsten Ziegelercziege...@apache.org 
 wrote:
 Hi,

 while changing the script resolution in the last days a little bit to
 make it cacheable, I stumbled across the handling of the resource super
 type.
 The jcr resource implementation checks if the node has the
 sling:resourceSuperType property and returns this value if existent.
 If not, it tries to find a resource under the search paths (usually libs
 and apps) with the resource type converted to a path. So if a resource
 has the type a/b, the resources /apps/a/b and /libs/a/b are tested if
 they exist and contain a resource super type property.

 Other resource implementations like the bundle resource always returns
 null. The fs resource implemenations returns a special resource type for
 the resource super type.

 I think this behaviour is a little bit inconsistent. I would change it
 that if a resource does not know it's super type, it should return null.
 So basically this effects the implementation of the jcr resource.
 The script resolver already checks if the resource super type is null
 and then applies the above algoritm from the jcr resource as well.

 Otherwise each resource implemenation should apply the algorithm to be
 consistent. But I would prefer the first solution.

 While the change is incompatible, I think this doesn't have any real effect.
 
 i agree that the resource should not know about search paths. imo, the
 resource resolver should be used for 'resolving' the resource super
 type.

Actually, the ResourceResolver *is* used to resolve the super type from
a resource type resource:

   // resource type rel path, e.g. nt/file
   String path = resourceTypeToPath(resourceType);

   // resolve resource type resource
   Resource rtResource = resourceResolver.getResource(path);

The getResource method applies the current search path as described and
required and requested.

Regards
Felix


Re: Revisiting the resource super type handling

2009-06-26 Thread Felix Meschberger
Hi,

Carsten Ziegeler schrieb:
 Hi,
 
 while changing the script resolution in the last days a little bit to
 make it cacheable, I stumbled across the handling of the resource super
 type.
 The jcr resource implementation checks if the node has the
 sling:resourceSuperType property and returns this value if existent.
 If not, it tries to find a resource under the search paths (usually libs
 and apps) with the resource type converted to a path. So if a resource
 has the type a/b, the resources /apps/a/b and /libs/a/b are tested if
 they exist and contain a resource super type property.
 
 Other resource implementations like the bundle resource always returns
 null. The fs resource implemenations returns a special resource type for
 the resource super type.
 
 I think this behaviour is a little bit inconsistent.

I agree, that the behaviour of the Resource.getResourceType()
implementation for the bundle resource and filesystem resource
implementations is inconsistent.

The filesystem provider returns sling/fs/resource as its super type.
IMHO this is an interesting abstraction to apply common behaviour to
filesystem provided resources.

Therefore, I suggest we enhance the bundle resource provider to return
sling/bundle/resource as the resource super type.


 I would change it
 that if a resource does not know it's super type, it should return null.

So it is currently implemented and defined, IIUIC.

 So basically this effects the implementation of the jcr resource.

So the JcrNodeResource returns the value of the sling:resourceSuperType
property if set. If the property is not set, null is just returned. The
JcrPropertyResource returns null immediately, since a property does not
have a property.

 The script resolver already checks if the resource super type is null
 and then applies the above algoritm from the jcr resource as well.

The servlet resolver should first do a Resource.getSuperType(). After
that the resource type (or the resource super type) is used as the basis
for the ResourceUtil.getResourceSuperType(ResourceResolver, String)
method. Right ?

Consequently:

  * ResourceUtil.getResourceSuperType(ResourceResolver, String) remains
   as is resolving the resource super type as the supertype of the
   resource type resource.
  * ResourceUtil.getResourceSuperType(Resource) is removed, since it
   brings no added value (it only has been added yesterday).
  * JcrResourceUtil.getResourceSuperType(ResourceResolver, String) is
   deprecated and is implemented calling the new
   ResourceUtil.getResourceSuperType(ResourceResolver, String)
   method.
  * JcrResourceUtil.getResourceSuperType(Resource) is deprecated and is
   implemented to call Resource.getSuperType() on the resource first
   and then calling ResourceUtil.getSuperType(ResourceResolver,
   resource.getResourceType()) as a fallback.

Is that what you had in mind ?

Regards
Felix

 
 Otherwise each resource implemenation should apply the algorithm to be
 consistent. But I would prefer the first solution.


 
 While the change is incompatible, I think this doesn't have any real effect.
 
 WDYT?