Class ResourceResolverControl
- java.lang.Object
-
- org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl
-
public class ResourceResolverControl extends Object
This class takes a number ofAuthenticatedResourceProvider
objects and exposes it as one such object. Provider appropriate for the given operation is chosen basing on itsResourceProviderInfo.getPath()
(more specific first) and service ranking. Like a resource resolver itself, this class is not thread safe.
-
-
Constructor Summary
Constructors Constructor Description ResourceResolverControl(boolean isAdmin, Map<String,Object> authenticationInfo, ResourceProviderStorageProvider resourceProviderTracker)
Create a new resource resolver context.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description <AdapterType>
AdapterTypeadaptTo(ResourceResolverContext context, Class<AdapterType> type)
Returns the first non-null result of the adaptTo() method invoked on the providers.AuthenticatedResourceProvider
checkSourceAndDest(ResourceResolverContext context, String srcAbsPath, String destAbsPath)
void
clearAuthenticatedProviders()
void
close()
Close all dynamic resource providers.void
commit(ResourceResolverContext context)
Commit changes on all modifiable ResourceProviders.org.apache.sling.api.resource.Resource
copy(ResourceResolverContext context, String srcAbsPath, String destAbsPath)
Tries to find a resource provider accepting both paths and invokesAuthenticatedResourceProvider.copy(String, String)
method on it.org.apache.sling.api.resource.Resource
create(ResourceResolverContext context, String path, Map<String,Object> properties)
Create a resource.void
delete(ResourceResolverContext context, org.apache.sling.api.resource.Resource resource)
Delete the resource.Iterator<org.apache.sling.api.resource.Resource>
findResources(ResourceResolverContext context, String query, String language)
Queries all resource providers and combines the results.Object
getAttribute(ResourceResolverContext context, String name)
Returns the first non-null result of theAuthenticatedResourceProvider.getAttribute(String)
invocation on the providers.Collection<String>
getAttributeNames(ResourceResolverContext context)
Returns the union of all attribute names.Map<String,Object>
getAuthenticationInfo()
The authentication infoorg.apache.sling.api.resource.Resource
getParent(@NotNull ResourceResolverContext context, @NotNull String parentPath, @NotNull org.apache.sling.api.resource.Resource child)
Returns parent from the most appropriate resource provider accepting the given children.String
getParentResourceType(org.apache.sling.api.resource.ResourceResolverFactory factory, org.apache.sling.api.resource.ResourceResolver resolver, String resourceType)
Get the parent resource typestatic String
getProperty(org.apache.sling.api.resource.Resource res, String propName)
static <Type> Type
getProperty(org.apache.sling.api.resource.Resource res, String propName, Class<Type> type)
Returns the value of the name property of the resource converted to the requestedtype
.org.apache.sling.api.resource.Resource
getResource(ResourceResolverContext context, String path, org.apache.sling.api.resource.Resource parent, Map<String,String> parameters, boolean isResolve)
Returns resource from the most appropriate resource provider.ResourceProviderStorage
getResourceProviderStorage()
String[]
getSupportedLanguages(ResourceResolverContext context)
Return the union of query languages supported by the providers.boolean
hasChanges(ResourceResolverContext context)
Check if any modifiable ResourceProvider has uncommited changes.boolean
isAdmin()
Is this an admin resource resolver?boolean
isClosed()
Is this already closed?boolean
isLive(@NotNull ResourceResolverContext context)
Returnstrue
if all providers are live.Iterator<org.apache.sling.api.resource.Resource>
listChildren(ResourceResolverContext context, org.apache.sling.api.resource.Resource parent)
This method asks all matching resource providers for the children iterators, merges them, addsSyntheticResource
s (seegetResource(ResourceResolverContext, String, Resource, Map, boolean)
for more details), filters out the duplicates and returns the resulting iterator.Iterator<org.apache.sling.api.resource.Resource>
listChildrenInternal(ResourceResolverContext context, Node<ResourceProviderHandler> node, org.apache.sling.api.resource.Resource parent, Iterator<org.apache.sling.api.resource.Resource> realChildren)
org.apache.sling.api.resource.Resource
move(ResourceResolverContext context, String srcAbsPath, String destAbsPath)
Tries to find a resource provider accepting both paths and invokesAuthenticatedResourceProvider.move(String, String)
method on it.Iterator<Map<String,Object>>
queryResources(ResourceResolverContext context, String query, String language)
Queries all resource providers and combines the results.void
refresh(@NotNull ResourceResolverContext context)
Refreshes all refreshable providers as well as the resolver used for resource types.void
registerAuthenticatedProvider(@NotNull ResourceProviderHandler handler, @Nullable Object providerState)
void
revert(ResourceResolverContext context)
Revert changes on all modifiable ResourceProviders.
-
-
-
Constructor Detail
-
ResourceResolverControl
public ResourceResolverControl(boolean isAdmin, Map<String,Object> authenticationInfo, ResourceProviderStorageProvider resourceProviderTracker)
Create a new resource resolver context.
-
-
Method Detail
-
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.
-
isLive
public boolean isLive(@NotNull @NotNull ResourceResolverContext context)
Returnstrue
if all providers are live.
-
getParent
public org.apache.sling.api.resource.Resource getParent(@NotNull @NotNull ResourceResolverContext context, @NotNull @NotNull String parentPath, @NotNull @NotNull org.apache.sling.api.resource.Resource child)
Returns parent from the most appropriate resource provider accepting the given children. In some cases theSyntheticResource
can be returned if no resource provider returns parent for this child. SeegetResource(ResourceResolverContext, String, Resource, Map, boolean)
for more details
-
getResource
public org.apache.sling.api.resource.Resource getResource(ResourceResolverContext context, String path, org.apache.sling.api.resource.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 theSyntheticResource
will be returned to provide a consistent resource tree.The same behaviour occurs in
getParent(ResourceResolverContext, String, Resource)
andlistChildren(ResourceResolverContext, Resource)
.
-
listChildren
public Iterator<org.apache.sling.api.resource.Resource> listChildren(ResourceResolverContext context, org.apache.sling.api.resource.Resource parent)
This method asks all matching resource providers for the children iterators, merges them, addsSyntheticResource
s (seegetResource(ResourceResolverContext, String, Resource, Map, boolean)
for more details), filters out the duplicates and returns the resulting iterator. All transformations are done lazily, during theIterator.hasNext()
invocation on the result.
-
listChildrenInternal
public Iterator<org.apache.sling.api.resource.Resource> listChildrenInternal(ResourceResolverContext context, Node<ResourceProviderHandler> node, org.apache.sling.api.resource.Resource parent, Iterator<org.apache.sling.api.resource.Resource> realChildren)
-
getAttributeNames
public Collection<String> getAttributeNames(ResourceResolverContext context)
Returns the union of all attribute names.
-
getAttribute
public Object getAttribute(ResourceResolverContext context, String name)
Returns the first non-null result of theAuthenticatedResourceProvider.getAttribute(String)
invocation on the providers.
-
create
public org.apache.sling.api.resource.Resource create(ResourceResolverContext context, String path, Map<String,Object> properties) throws org.apache.sling.api.resource.PersistenceException
Create a resource.- Returns:
- The new resource
- Throws:
UnsupportedOperationException
- If creation is not allowed/possibleorg.apache.sling.api.resource.PersistenceException
- If creation fails
-
delete
public void delete(ResourceResolverContext context, org.apache.sling.api.resource.Resource resource) throws org.apache.sling.api.resource.PersistenceException
Delete the resource. Iterate over all modifiable ResourceProviders giving each an opportunity to delete the resource if they are able.- Throws:
NullPointerException
- if resource is nullUnsupportedOperationException
- If deletion is not allowed/possibleorg.apache.sling.api.resource.PersistenceException
- If deletion fails
-
revert
public void revert(ResourceResolverContext context)
Revert changes on all modifiable ResourceProviders.
-
commit
public void commit(ResourceResolverContext context) throws org.apache.sling.api.resource.PersistenceException
Commit changes on all modifiable ResourceProviders.- Throws:
org.apache.sling.api.resource.PersistenceException
-
hasChanges
public boolean hasChanges(ResourceResolverContext context)
Check if any modifiable ResourceProvider has uncommited changes.
-
getSupportedLanguages
public String[] getSupportedLanguages(ResourceResolverContext context)
Return the union of query languages supported by the providers.
-
findResources
public Iterator<org.apache.sling.api.resource.Resource> findResources(ResourceResolverContext context, String query, String language)
Queries all resource providers and combines the results.
-
queryResources
public Iterator<Map<String,Object>> queryResources(ResourceResolverContext context, String query, String language)
Queries all resource providers and combines the results.
-
adaptTo
public <AdapterType> AdapterType adaptTo(ResourceResolverContext context, Class<AdapterType> type)
Returns the first non-null result of the adaptTo() method invoked on the providers.
-
checkSourceAndDest
public AuthenticatedResourceProvider checkSourceAndDest(ResourceResolverContext context, String srcAbsPath, String destAbsPath) throws org.apache.sling.api.resource.PersistenceException
- Throws:
org.apache.sling.api.resource.PersistenceException
-
copy
public org.apache.sling.api.resource.Resource copy(ResourceResolverContext context, String srcAbsPath, String destAbsPath) throws org.apache.sling.api.resource.PersistenceException
Tries to find a resource provider accepting both paths and invokesAuthenticatedResourceProvider.copy(String, String)
method on it. Returns false if there's no such provider.- Throws:
org.apache.sling.api.resource.PersistenceException
-
move
public org.apache.sling.api.resource.Resource move(ResourceResolverContext context, String srcAbsPath, String destAbsPath) throws org.apache.sling.api.resource.PersistenceException
Tries to find a resource provider accepting both paths and invokesAuthenticatedResourceProvider.move(String, String)
method on it. Returns false if there's no such provider.- Throws:
org.apache.sling.api.resource.PersistenceException
-
getResourceProviderStorage
public ResourceProviderStorage getResourceProviderStorage()
-
close
public void close()
Close all dynamic resource providers.
-
getParentResourceType
public String getParentResourceType(org.apache.sling.api.resource.ResourceResolverFactory factory, org.apache.sling.api.resource.ResourceResolver resolver, String resourceType)
Get the parent resource type- See Also:
ResourceResolver.getParentResourceType(java.lang.String)
-
getProperty
public static String getProperty(org.apache.sling.api.resource.Resource res, String propName)
- Parameters:
res
- The resource to access the property frompropName
- The name of the property to access- Returns:
- The property as a
String
ornull
if the property does not exist or cannot be converted into aString
-
getProperty
public static <Type> Type getProperty(org.apache.sling.api.resource.Resource res, String propName, Class<Type> type)
Returns the value of the name property of the resource converted to the requestedtype
.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 sameValueMap
as is used to access the property directly. This generally only works for JCR basedValueMap
instances which provide access to relative path property names. This may not work in non JCRValueMap
, however in non JCR envs there is usually no "jcr:content" child node anyway- Parameters:
res
- The resource to access the property frompropName
- The name of the property to accesstype
- The type into which to convert the property- Returns:
- The property converted to the requested
type
ornull
if the property does not exist or cannot be converted into the requestedtype
-
registerAuthenticatedProvider
public void registerAuthenticatedProvider(@NotNull @NotNull ResourceProviderHandler handler, @Nullable @Nullable Object providerState)
-
clearAuthenticatedProviders
public void clearAuthenticatedProviders()
-
-