Hi,

Each ResourceProvider is responsible for setting up resources
themselves, including setting the resource type. For example the
BundleResourceProvider sets the resource type to nt:file or nt:folder
depending on whether the resource is a file or folder.

The JcrResourceProvider now uses the ResourceTypeProvider service to
enhance its resource type resolution:
   (1) check sling:resourceType property
   (2) check ResourceTypeProvider services
   (3) take primary node type

Your (remaining) problem probably is the resource type of non-existing
resources which is currently hard coded to sling:nonexisting and it is
also defined in the API that a non existing resource has the
sling:nonexisting resource type.

It might be conceivable though to set the resourceSuperType of such
non-existing resources to something configurable. To do this I would
suggest to introduce a new service interface, which would be called when
the ResourceResolver is about to create the NonExistingResource.

Regards
Felix

Ian Boston schrieb:
> 
> On 3 Jun 2009, at 09:26, Felix Meschberger wrote:
> 
>> Not in the sense of "inheriting the resource type from the parent node
>> if none is set".
>>
>> But: We have a ResourceTypeProvider service interface, which you may
>> implement. This provider is called by the JcrResourceProvider if a node
>> has no sling:resourceType property.
>>
>> In a custom resource provider, you could find a sling:resourceType
>> property up the ancestors of the node to build inheritance this way.
>>
>> HTH
> 
> Felix,
> 
> Yes It does to a degree
> 
> I had a look at that interface and it works if there is a Node, but URL
> does not directly map to the JCR path either because the JCR path doesnt
> exist yet, or because there is mapping between the URL and the JCR path,
> then there is no Node, so the JcrResourceType doesnt get called.
> 
> What *would* work is something like
> 
> /**
>  * Provide a resource type for resource paths which do not have
>  * resourceType.
>  */
> public interface ResourceTypeProvider {
> 
>     /**
>      * Return the resource type to use for the node.
>      * @param absPath The node.
>      * @return The resource type to use or null.
>      */
>     String getResourceTypeForPath(String absPath) throws
> RepositoryException;
> }
> 
> That would also get rid of the need for my patch local on 
> ResourceProvider registrations (classifier)
> 
> Ian
> 
> 
>>
>>
>> Regards
>> Felix
> 
> 

Reply via email to