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)
Check source and destination for operationsvoid
clearAuthenticatedProviders()
Clear all authenticated providersvoid
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.static String
createDescendantPath(String path, String descendantName)
Create a child pathvoid
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()
Get the provider storageString[]
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)
Internal methodorg.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.boolean
orderBefore(@NotNull ResourceResolverContext context, @NotNull org.apache.sling.api.resource.Resource parent, @NotNull String name, @Nullable String followingSiblingName)
Order resourcesIterator<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)
Register authetnticated providervoid
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.- Parameters:
isAdmin
- Admin resource resolver?authenticationInfo
- The auth inforesourceProviderTracker
- Tracker for all providers
-
-
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.- Parameters:
context
- The context
-
isLive
public boolean isLive(@NotNull @NotNull ResourceResolverContext context)
Returnstrue
if all providers are live.- Parameters:
context
- The context- Returns:
true
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- Parameters:
context
- The contextparentPath
- The parent pathchild
- The child resource- Returns:
- The parent or
null
-
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)
.- Parameters:
context
- The contextpath
- Resource pathparent
- Parent resourceparameters
- Additional parametersisResolve
- Whether this is a resolve or get call- Returns:
- The resource or
null
-
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.- Parameters:
context
- The contextparent
- The parent resource- Returns:
- Iterator
-
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)
Internal method- Parameters:
context
- The contextnode
- The nodeparent
- The parentrealChildren
- 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 theAuthenticatedResourceProvider.getAttribute(String)
invocation on the providers.- Parameters:
context
- The contextname
- Attribute name- Returns:
- Attribute value or
null
-
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.- Parameters:
context
- The contextpath
- The resource pathproperties
- The resource properties- Returns:
- The new resource
- Throws:
UnsupportedOperationException
- If creation is not allowed/possibleorg.apache.sling.api.resource.PersistenceException
- If creation fails
-
orderBefore
public boolean orderBefore(@NotNull @NotNull ResourceResolverContext context, @NotNull @NotNull org.apache.sling.api.resource.Resource parent, @NotNull @NotNull String name, @Nullable @Nullable String followingSiblingName) throws UnsupportedOperationException, org.apache.sling.api.resource.PersistenceException, IllegalArgumentException
Order resources- Parameters:
context
- The contextparent
- The parentname
- Resource namefollowingSiblingName
- Following sibling name- Returns:
true
if ordering succeeded- Throws:
UnsupportedOperationException
- If the operation is not supported#org.apache.sling.api.resource.PersistenceException
- If ordering failsIllegalArgumentException
- If input parameters are wrong- See Also:
ResourceResolver.orderBefore(Resource, String, String)
-
createDescendantPath
public static final String createDescendantPath(String path, String descendantName)
Create a child path- Parameters:
path
- PathdescendantName
- Child name- Returns:
- Path
-
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.- Parameters:
context
- The contextresource
- The resource to delete- 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.- Parameters:
context
- The context
-
commit
public void commit(ResourceResolverContext context) throws org.apache.sling.api.resource.PersistenceException
Commit changes on all modifiable ResourceProviders.- Parameters:
context
- The context- Throws:
org.apache.sling.api.resource.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<org.apache.sling.api.resource.Resource> findResources(ResourceResolverContext context, String query, String language)
Queries all resource providers and combines the results.- Parameters:
context
- The contextquery
- The querylanguage
- 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 contextquery
- The querylanguage
- 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 contexttype
- The type to adapt to- Returns:
- The object or
null
-
checkSourceAndDest
public AuthenticatedResourceProvider checkSourceAndDest(ResourceResolverContext context, String srcAbsPath, String destAbsPath) throws org.apache.sling.api.resource.PersistenceException
Check source and destination for operations- Parameters:
context
- The contextsrcAbsPath
- The sourcedestAbsPath
- The destination- Returns:
- The responsible provider or
null
- Throws:
org.apache.sling.api.resource.PersistenceException
- If something goes wrong
-
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.- Parameters:
context
- The contextsrcAbsPath
- The sourcedestAbsPath
- The destination- Returns:
- The copied resources
- Throws:
org.apache.sling.api.resource.PersistenceException
- if operation fails
-
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.- Parameters:
context
- The contextsrcAbsPath
- The sourcedestAbsPath
- The destination- Returns:
- The moved resource
- Throws:
org.apache.sling.api.resource.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(org.apache.sling.api.resource.ResourceResolverFactory factory, org.apache.sling.api.resource.ResourceResolver resolver, String resourceType)
Get the parent resource type- Parameters:
factory
- The factoryresolver
- The resolverresourceType
- The type- Returns:
- 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- Type Parameters:
Type
- The type- 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)
Register authetnticated provider- Parameters:
handler
- The handlerproviderState
- The state
-
clearAuthenticatedProviders
public void clearAuthenticatedProviders()
Clear all authenticated providers
-
-