Class ResourceResolverControl
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 Summary
ConstructorDescriptionResourceResolverControl
(boolean isAdmin, Map<String, Object> authenticationInfo, ResourceProviderStorageProvider resourceProviderTracker) Create a new resource resolver context. -
Method Summary
Modifier and TypeMethodDescription<AdapterType>
AdapterTypeadaptTo
(ResourceResolverContext context, Class<AdapterType> type) Returns the first non-null result of the adaptTo() method invoked on the providers.checkSourceAndDest
(ResourceResolverContext context, String srcAbsPath, String destAbsPath) Check source and destination for operationsvoid
Clear all authenticated providersvoid
close()
Close all dynamic resource providers.void
commit
(ResourceResolverContext context) Commit changes on all modifiable ResourceProviders.copy
(ResourceResolverContext context, String srcAbsPath, String destAbsPath) Tries to find a resource provider accepting both paths and invokesAuthenticatedResourceProvider.copy(String, String)
method on it.Create a resource.static final String
createDescendantPath
(String path, String descendantName) Create a child pathvoid
delete
(ResourceResolverContext context, Resource resource) Delete the resource.findResources
(ResourceResolverContext context, String query, String language) Queries all resource providers and combines the results.getAttribute
(ResourceResolverContext context, String name) Returns the first non-null result of theAuthenticatedResourceProvider.getAttribute(String)
invocation on the providers.getAttributeNames
(ResourceResolverContext context) Returns the union of all attribute names.The authentication infogetParent
(@NotNull ResourceResolverContext context, @NotNull String parentPath, @NotNull Resource child) Returns parent from the most appropriate resource provider accepting the given children.getParentResourceType
(ResourceResolverFactory factory, ResourceResolver resolver, String resourceType) Get the parent resource typestatic String
getProperty
(Resource res, String propName) static <Type> Type
getProperty
(Resource res, String propName, Class<Type> type) Returns the value of the name property of the resource converted to the requestedtype
.getResource
(ResourceResolverContext context, String path, Resource parent, Map<String, String> parameters, boolean isResolve) Returns resource from the most appropriate resource provider.Get the provider storageString[]
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.listChildren
(ResourceResolverContext context, 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.listChildrenInternal
(ResourceResolverContext context, Node<ResourceProviderHandler> node, Resource parent, Iterator<Resource> realChildren) Internal methodmove
(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 Resource parent, @NotNull String name, @Nullable String followingSiblingName) Order resourcesqueryResources
(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 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 inforesourceProviderTracker
- 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
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
Refreshes all refreshable providers as well as the resolver used for resource types.- Parameters:
context
- The context
-
isLive
Returnstrue
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 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 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 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
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<Resource> listChildrenInternal(ResourceResolverContext context, Node<ResourceProviderHandler> node, Resource parent, Iterator<Resource> realChildren) Internal method- Parameters:
context
- The contextnode
- The nodeparent
- The parentrealChildren
- The children- Returns:
- The children
-
getAttributeNames
Returns the union of all attribute names.- Parameters:
context
- The context- Returns:
- The attribute names
-
getAttribute
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 Resource create(ResourceResolverContext context, String path, Map<String, Object> properties) throws PersistenceExceptionCreate a resource.- Parameters:
context
- The contextpath
- The resource pathproperties
- The resource properties- Returns:
- The new resource
- Throws:
UnsupportedOperationException
- If creation is not allowed/possiblePersistenceException
- 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 contextparent
- The parentname
- Resource namefollowingSiblingName
- Following sibling name- Returns:
true
if ordering succeeded- Throws:
UnsupportedOperationException
- If the operation is not supported#PersistenceException
- If ordering failsIllegalArgumentException
- If input parameters are wrong- See Also:
-
createDescendantPath
Create a child path- Parameters:
path
- PathdescendantName
- Child name- Returns:
- Path
-
delete
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/possiblePersistenceException
- If deletion fails
-
revert
Revert changes on all modifiable ResourceProviders.- Parameters:
context
- The context
-
commit
Commit changes on all modifiable ResourceProviders.- Parameters:
context
- The context- Throws:
PersistenceException
- If operation fails
-
hasChanges
Check if any modifiable ResourceProvider has uncommited changes.- Parameters:
context
- The context- Returns:
true
if there are uncommited changes
-
getSupportedLanguages
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 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
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 PersistenceException Check source and destination for operations- Parameters:
context
- The contextsrcAbsPath
- The sourcedestAbsPath
- 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 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:
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 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:
PersistenceException
- if operation fails
-
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 factoryresolver
- The resolverresourceType
- The type- Returns:
- The parent resource type
- See Also:
-
getProperty
- 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
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
-