Class ResourceResolverControl

java.lang.Object
org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl

public class ResourceResolverControl extends Object
This class takes a number of AuthenticatedResourceProvider objects and exposes it as one such object. Provider appropriate for the given operation is chosen basing on its ResourceProviderInfo.getPath() (more specific first) and service ranking. Like a resource resolver itself, this class is not thread safe.
  • Constructor Details

    • ResourceResolverControl

      public ResourceResolverControl(boolean isAdmin, Map<String,Object> authenticationInfo, ResourceProviderStorageProvider resourceProviderTracker)
      Create a new resource resolver context.
      Parameters:
      isAdmin - Admin resource resolver?
      authenticationInfo - The auth info
      resourceProviderTracker - Tracker for all providers
  • Method Details

    • isAdmin

      public boolean isAdmin()
      Is this an admin resource resolver?
      Returns:
      true if it is an admin resource resolver
    • getAuthenticationInfo

      public Map<String,Object> getAuthenticationInfo()
      The authentication info
      Returns:
      The map with the auth info
    • isClosed

      public boolean isClosed()
      Is this already closed?
      Returns:
      true if it is closed.
    • refresh

      public void refresh(@NotNull @NotNull ResourceResolverContext context)
      Refreshes all refreshable providers as well as the resolver used for resource types.
      Parameters:
      context - The context
    • isLive

      public boolean isLive(@NotNull @NotNull ResourceResolverContext context)
      Returns true if all providers are live.
      Parameters:
      context - The context
      Returns:
      true if all providers are live
    • getParent

      public Resource getParent(@NotNull @NotNull ResourceResolverContext context, @NotNull @NotNull String parentPath, @NotNull @NotNull Resource child)
      Returns parent from the most appropriate resource provider accepting the given children. In some cases the SyntheticResource can be returned if no resource provider returns parent for this child. See getResource(ResourceResolverContext, String, Resource, Map, boolean) for more details
      Parameters:
      context - The context
      parentPath - The parent path
      child - The child resource
      Returns:
      The parent or null
    • getResource

      public Resource getResource(ResourceResolverContext context, String path, Resource parent, Map<String,String> parameters, boolean isResolve)
      Returns resource from the most appropriate resource provider.

      If there's no such provider and the path is a part of some resource provider path, then the SyntheticResource will be returned. For instance, if we have resource provider under /libs/sling/servlet/default/GET.servlet and no resource provider returns a resource for /libs/sling/servlet/default, then the SyntheticResource will be returned to provide a consistent resource tree.

      The same behaviour occurs in getParent(ResourceResolverContext, String, Resource) and listChildren(ResourceResolverContext, Resource).

      Parameters:
      context - The context
      path - Resource path
      parent - Parent resource
      parameters - Additional parameters
      isResolve - Whether this is a resolve or get call
      Returns:
      The resource or null
    • listChildren

      public Iterator<Resource> listChildren(ResourceResolverContext context, Resource parent)
      This method asks all matching resource providers for the children iterators, merges them, adds SyntheticResources (see getResource(ResourceResolverContext, String, Resource, Map, boolean) for more details), filters out the duplicates and returns the resulting iterator. All transformations are done lazily, during the Iterator.hasNext() invocation on the result.
      Parameters:
      context - The context
      parent - The parent resource
      Returns:
      Iterator
    • listChildrenInternal

      public Iterator<Resource> listChildrenInternal(ResourceResolverContext context, Node<ResourceProviderHandler> node, Resource parent, Iterator<Resource> realChildren)
      Internal method
      Parameters:
      context - The context
      node - The node
      parent - The parent
      realChildren - The children
      Returns:
      The children
    • getAttributeNames

      public Collection<String> getAttributeNames(ResourceResolverContext context)
      Returns the union of all attribute names.
      Parameters:
      context - The context
      Returns:
      The attribute names
    • getAttribute

      public Object getAttribute(ResourceResolverContext context, String name)
      Returns the first non-null result of the AuthenticatedResourceProvider.getAttribute(String) invocation on the providers.
      Parameters:
      context - The context
      name - Attribute name
      Returns:
      Attribute value or null
    • create

      public Resource create(ResourceResolverContext context, String path, Map<String,Object> properties) throws PersistenceException
      Create a resource.
      Parameters:
      context - The context
      path - The resource path
      properties - The resource properties
      Returns:
      The new resource
      Throws:
      UnsupportedOperationException - If creation is not allowed/possible
      PersistenceException - If creation fails
    • orderBefore

      public boolean orderBefore(@NotNull @NotNull ResourceResolverContext context, @NotNull @NotNull Resource parent, @NotNull @NotNull String name, @Nullable @Nullable String followingSiblingName) throws UnsupportedOperationException, PersistenceException, IllegalArgumentException
      Order resources
      Parameters:
      context - The context
      parent - The parent
      name - Resource name
      followingSiblingName - Following sibling name
      Returns:
      true if ordering succeeded
      Throws:
      UnsupportedOperationException - If the operation is not supported#
      PersistenceException - If ordering fails
      IllegalArgumentException - If input parameters are wrong
      See Also:
    • createDescendantPath

      public static final String createDescendantPath(String path, String descendantName)
      Create a child path
      Parameters:
      path - Path
      descendantName - Child name
      Returns:
      Path
    • delete

      public void delete(ResourceResolverContext context, Resource resource) throws PersistenceException
      Delete the resource. Iterate over all modifiable ResourceProviders giving each an opportunity to delete the resource if they are able.
      Parameters:
      context - The context
      resource - The resource to delete
      Throws:
      NullPointerException - if resource is null
      UnsupportedOperationException - If deletion is not allowed/possible
      PersistenceException - If deletion fails
    • revert

      public void revert(ResourceResolverContext context)
      Revert changes on all modifiable ResourceProviders.
      Parameters:
      context - The context
    • commit

      public void commit(ResourceResolverContext context) throws PersistenceException
      Commit changes on all modifiable ResourceProviders.
      Parameters:
      context - The context
      Throws:
      PersistenceException - If operation fails
    • hasChanges

      public boolean hasChanges(ResourceResolverContext context)
      Check if any modifiable ResourceProvider has uncommited changes.
      Parameters:
      context - The context
      Returns:
      true if there are uncommited changes
    • getSupportedLanguages

      public String[] getSupportedLanguages(ResourceResolverContext context)
      Return the union of query languages supported by the providers.
      Parameters:
      context - The context
      Returns:
      The supported query languages
    • findResources

      public Iterator<Resource> findResources(ResourceResolverContext context, String query, String language)
      Queries all resource providers and combines the results.
      Parameters:
      context - The context
      query - The query
      language - The language
      Returns:
      The result
    • queryResources

      public Iterator<Map<String,Object>> queryResources(ResourceResolverContext context, String query, String language)
      Queries all resource providers and combines the results.
      Parameters:
      context - The context
      query - The query
      language - The language
      Returns:
      The result
    • adaptTo

      public <AdapterType> AdapterType adaptTo(ResourceResolverContext context, Class<AdapterType> type)
      Returns the first non-null result of the adaptTo() method invoked on the providers.
      Type Parameters:
      AdapterType - The type to adapt to
      Parameters:
      context - The context
      type - The type to adapt to
      Returns:
      The object or null
    • checkSourceAndDest

      public AuthenticatedResourceProvider checkSourceAndDest(ResourceResolverContext context, String srcAbsPath, String destAbsPath) throws PersistenceException
      Check source and destination for operations
      Parameters:
      context - The context
      srcAbsPath - The source
      destAbsPath - The destination
      Returns:
      The responsible provider or null
      Throws:
      PersistenceException - If something goes wrong
    • copy

      public Resource copy(ResourceResolverContext context, String srcAbsPath, String destAbsPath) throws PersistenceException
      Tries to find a resource provider accepting both paths and invokes AuthenticatedResourceProvider.copy(String, String) method on it. Returns false if there's no such provider.
      Parameters:
      context - The context
      srcAbsPath - The source
      destAbsPath - The destination
      Returns:
      The copied resources
      Throws:
      PersistenceException - if operation fails
    • move

      public Resource move(ResourceResolverContext context, String srcAbsPath, String destAbsPath) throws PersistenceException
      Tries to find a resource provider accepting both paths and invokes AuthenticatedResourceProvider.move(String, String) method on it. Returns false if there's no such provider.
      Parameters:
      context - The context
      srcAbsPath - The source
      destAbsPath - The destination
      Returns:
      The moved resource
      Throws:
      PersistenceException - if operation fails
    • getResourceProviderStorage

      public ResourceProviderStorage getResourceProviderStorage()
      Get the provider storage
      Returns:
      The provider storage
    • close

      public void close()
      Close all dynamic resource providers.
    • getParentResourceType

      public String getParentResourceType(ResourceResolverFactory factory, ResourceResolver resolver, String resourceType)
      Get the parent resource type
      Parameters:
      factory - The factory
      resolver - The resolver
      resourceType - The type
      Returns:
      The parent resource type
      See Also:
    • getProperty

      public static String getProperty(Resource res, String propName)
      Parameters:
      res - The resource to access the property from
      propName - The name of the property to access
      Returns:
      The property as a String or null if the property does not exist or cannot be converted into a String
    • getProperty

      public static <Type> Type getProperty(Resource res, String propName, Class<Type> type)
      Returns the value of the name property of the resource converted to the requested type.

      If the resource itself does not have the property, the property is looked up in the jcr:content child node. This access is done through the same ValueMap as is used to access the property directly. This generally only works for JCR based ValueMap instances which provide access to relative path property names. This may not work in non JCR ValueMap, however in non JCR envs there is usually no "jcr:content" child node anyway

      Type Parameters:
      Type - The type
      Parameters:
      res - The resource to access the property from
      propName - The name of the property to access
      type - The type into which to convert the property
      Returns:
      The property converted to the requested type or null if the property does not exist or cannot be converted into the requested type
    • registerAuthenticatedProvider

      public void registerAuthenticatedProvider(@NotNull @NotNull ResourceProviderHandler handler, @Nullable @Nullable Object providerState)
      Register authetnticated provider
      Parameters:
      handler - The handler
      providerState - The state
    • clearAuthenticatedProviders

      public void clearAuthenticatedProviders()
      Clear all authenticated providers