Package org.apache.sling.api.resource
Class ResourceUtil
- java.lang.Object
-
- org.apache.sling.api.resource.ResourceUtil
-
public class ResourceUtil extends java.lang.Object
TheResourceUtil
class provides helper methods dealing with resources.This class is not intended to be extended or instantiated because it just provides static utility methods not intended to be overwritten.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ResourceUtil.BatchResourceRemover
A batch resource remover deletes resources in batches.
-
Constructor Summary
Constructors Constructor Description ResourceUtil()
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static <T> @NotNull java.util.Iterator<T>
adaptTo(@NotNull java.util.Iterator<Resource> iterator, java.lang.Class<T> type)
Return an iterator for objects of the specified type.static java.lang.String
createUniqueChildName(Resource parent, java.lang.String name)
Create a unique name for a child of theparent
.static @Nullable java.lang.String
findResourceSuperType(@NotNull Resource resource)
Deprecated.static @NotNull ResourceUtil.BatchResourceRemover
getBatchResourceRemover(int threshold)
Create a batch resource remover.static @NotNull java.lang.String
getName(@NotNull java.lang.String path)
Utility method returns the name of the givenpath
, which is normalized bynormalize(String)
before resolving the name.static @NotNull java.lang.String
getName(@NotNull Resource rsrc)
Deprecated.since 2.1.0, useResource.getName()
insteadstatic @NotNull Resource
getOrCreateResource(@NotNull ResourceResolver resolver, @NotNull java.lang.String path, java.lang.String resourceType, java.lang.String intermediateResourceType, boolean autoCommit)
Creates or gets the resource at the given path.static @NotNull Resource
getOrCreateResource(@NotNull ResourceResolver resolver, @NotNull java.lang.String path, java.util.Map<java.lang.String,java.lang.Object> resourceProperties, java.lang.String intermediateResourceType, boolean autoCommit)
Creates or gets the resource at the given path.static @Nullable java.lang.String
getParent(@NotNull java.lang.String path)
Utility method returns the parent path of the givenpath
, which is normalized bynormalize(String)
before resolving the parent.static @Nullable Resource
getParent(@NotNull Resource rsrc)
Deprecated.since 2.1.0, useResource.getParent()
insteadstatic java.lang.String
getParent(java.lang.String path, int level)
Utility method returns the ancestor's path at the givenlevel
relative topath
, which is normalized bynormalize(String)
before resolving the ancestor.static @Nullable java.lang.String
getResourceSuperType(@NotNull ResourceResolver resourceResolver, java.lang.String resourceType)
Deprecated.static @NotNull ValueMap
getValueMap(Resource res)
Returns anValueMap
object for the givenResource
.static boolean
isA(@NotNull Resource resource, java.lang.String resourceType)
Deprecated.static boolean
isNonExistingResource(@NotNull Resource res)
Returnstrue
if the resourceres
is a non-existing resource.static boolean
isStarResource(@NotNull Resource res)
Returnstrue
if the resourceres
is a "star resource".static boolean
isSyntheticResource(@NotNull Resource res)
Returnstrue
if the resourceres
is a synthetic resource.static @NotNull java.util.Iterator<Resource>
listChildren(@NotNull Resource parent)
Deprecated.since 2.1.0, useResource.listChildren()
insteadstatic @Nullable java.lang.String
normalize(@NotNull java.lang.String path)
Resolves relative path segments '.' and '..' in the absolute path.static @NotNull java.lang.String
resourceTypeToPath(@NotNull java.lang.String type)
Helper method, which returns the given resource type as returned from theResource.getResourceType()
as a relative path.static @NotNull Resource
unwrap(@NotNull Resource rsrc)
Unwrap the resource and return the wrapped implementation.
-
-
-
Method Detail
-
normalize
@Nullable public static @Nullable java.lang.String normalize(@NotNull @NotNull java.lang.String path)
Resolves relative path segments '.' and '..' in the absolute path. Returnsnull
if not possible (.. points above root) or if path is not absolute.- Parameters:
path
- The path to normalize- Returns:
- The normalized path or
null
.
-
getParent
@Nullable public static @Nullable java.lang.String getParent(@NotNull @NotNull java.lang.String path)
Utility method returns the parent path of the givenpath
, which is normalized bynormalize(String)
before resolving the parent.- Parameters:
path
- The path whose parent is to be returned.- Returns:
null
ifpath
is the root path (/
) or ifpath
is a single name containing no slash (/
) characters.- Throws:
java.lang.IllegalArgumentException
- If the path cannot be normalized by thenormalize(String)
method.java.lang.NullPointerException
- Ifpath
isnull
.
-
getParent
public static java.lang.String getParent(java.lang.String path, int level)
Utility method returns the ancestor's path at the givenlevel
relative topath
, which is normalized bynormalize(String)
before resolving the ancestor.level
= 0 returns thepath
.level
= 1 returns the parent ofpath
, if it exists,null
otherwise.level
= 2 returns the grandparent ofpath
, if it exists,null
otherwise.
- Parameters:
path
- The path whose ancestor is to be returned.level
- The relative level of the ancestor, relative topath
.- Returns:
null
ifpath
doesn't have an ancestor at the specifiedlevel
.- Throws:
java.lang.IllegalArgumentException
- If the path cannot be normalized by thenormalize(String)
method or iflevel
< 0.java.lang.NullPointerException
- Ifpath
isnull
.- Since:
- 2.2 (Sling API Bundle 2.2.0)
-
getParent
@Deprecated @Nullable public static @Nullable Resource getParent(@NotNull @NotNull Resource rsrc)
Deprecated.since 2.1.0, useResource.getParent()
insteadUtility method returns the parent resource of the resource.- Parameters:
rsrc
- The resource to get the parent of.- Returns:
- The parent resource or null if the rsrc is the root.
- Throws:
java.lang.NullPointerException
- Ifrsrc
isnull
.SlingException
- If an error occurs trying to get the resource object from the path.java.lang.IllegalStateException
- if the resource resolver has already been closed}.
-
getName
@Deprecated @NotNull public static @NotNull java.lang.String getName(@NotNull @NotNull Resource rsrc)
Deprecated.since 2.1.0, useResource.getName()
insteadUtility method returns the name of the resource.- Parameters:
rsrc
- The resource to get the name from.- Returns:
- The name of the resource
- Throws:
java.lang.NullPointerException
- Ifrsrc
isnull
.
-
getName
@NotNull public static @NotNull java.lang.String getName(@NotNull @NotNull java.lang.String path)
Utility method returns the name of the givenpath
, which is normalized bynormalize(String)
before resolving the name.- Parameters:
path
- The path whose name (the last path element) is to be returned.- Returns:
- The empty string if
path
is the root path (/
) or ifpath
is a single name containing no slash (/
) characters. - Throws:
java.lang.IllegalArgumentException
- If the path cannot be normalized by thenormalize(String)
method.java.lang.NullPointerException
- Ifpath
isnull
.
-
isSyntheticResource
public static boolean isSyntheticResource(@NotNull @NotNull Resource res)
Returnstrue
if the resourceres
is a synthetic resource.This method checks whether the resource is an instance of the
org.apache.sling.resource.SyntheticResource
class.- Parameters:
res
- TheResource
to check whether it is a synthetic resource.- Returns:
true
ifres
is a synthetic resource.false
is returned ifres
isnull
or not an instance of theorg.apache.sling.resource.SyntheticResource
class.
-
isStarResource
public static boolean isStarResource(@NotNull @NotNull Resource res)
Returnstrue
if the resourceres
is a "star resource". A star resource is a resource returned from theResourceResolver.resolve(HttpServletRequest)
whose path terminates in a/*
. Generally such resource result from requests to something like/some/path/*
or/some/path/*.html
which may be used web applications to uniformly handle resources to be created.This method checks whether the resource path ends with a
/*
indicating such a star resource.- Parameters:
res
- TheResource
to check whether it is a star resource.- Returns:
true
ifres
is to be considered a star resource.- Throws:
java.lang.NullPointerException
- ifres
isnull
.
-
isNonExistingResource
public static boolean isNonExistingResource(@NotNull @NotNull Resource res)
Returnstrue
if the resourceres
is a non-existing resource.This method checks the resource type of the resource to match the well-known resource type
sling:nonexisting
of theNonExistingResource
class defined in the Sling API.- Parameters:
res
- TheResource
to check whether it is a non-existing resource.- Returns:
true
ifres
is to be considered a non-existing resource.- Throws:
java.lang.NullPointerException
- ifres
isnull
.
-
listChildren
@Deprecated @NotNull public static @NotNull java.util.Iterator<Resource> listChildren(@NotNull @NotNull Resource parent)
Deprecated.since 2.1.0, useResource.listChildren()
insteadReturns anIterator
ofResource
objects loaded from the children of the givenResource
.This is a convenience method for
ResourceResolver.listChildren(Resource)
.- Parameters:
parent
- TheResource
whose children are requested.- Returns:
- An
Iterator
ofResource
objects. - Throws:
java.lang.NullPointerException
- Ifparent
isnull
.java.lang.IllegalStateException
- if the resource resolver has already been closed}.SlingException
- If any error occurs acquiring the child resource iterator.- See Also:
ResourceResolver.listChildren(Resource)
-
getValueMap
@NotNull public static @NotNull ValueMap getValueMap(Resource res)
Returns anValueMap
object for the givenResource
. This method callsResource.getValueMap()
. Ifnull
is provided as the resource an empty map is returned as well.For backward compatibility reasons the map returned is not immutable, but it is not recommend to rely on this behavior.
- Parameters:
res
- TheResource
to adapt to the value map.- Returns:
- A value map.
-
resourceTypeToPath
@NotNull public static @NotNull java.lang.String resourceTypeToPath(@NotNull @NotNull java.lang.String type)
Helper method, which returns the given resource type as returned from theResource.getResourceType()
as a relative path.- Parameters:
type
- The resource type to be converted into a path- Returns:
- The resource type as a path.
- Since:
- 2.0.6 (Sling API Bundle 2.0.6)
-
getResourceSuperType
@Deprecated @Nullable public static @Nullable java.lang.String getResourceSuperType(@NotNull @NotNull ResourceResolver resourceResolver, java.lang.String resourceType)
Deprecated.Returns the super type of the given resource type. This method converts the resource type to a resource path by callingresourceTypeToPath(String)
and uses theresourceResolver
to get the corresponding resource. If the resource exists, theResource.getResourceSuperType()
method is called.- Parameters:
resourceResolver
- TheResourceResolver
used to access the resource whose path (relative or absolute) is given by theresourceType
parameter.resourceType
- The resource type whose super type is to be returned. This type is turned into a path by calling theresourceTypeToPath(String)
method before trying to get the resource through theresourceResolver
.- Returns:
- the super type of the
resourceType
ornull
if the resource type does not exists or returnsnull
for its super type. - Throws:
java.lang.IllegalStateException
- if the resource resolver has already been closed}.- Since:
- 2.0.6 (Sling API Bundle 2.0.6)
-
findResourceSuperType
@Deprecated @Nullable public static @Nullable java.lang.String findResourceSuperType(@NotNull @NotNull Resource resource)
Deprecated.Returns the super type of the given resource. This method checks first if the resource itself knows its super type by callingResource.getResourceSuperType()
. If that returnsnull
getResourceSuperType(ResourceResolver, String)
is invoked with the resource type of the resource.- Parameters:
resource
- The resource to return the resource super type for.- Returns:
- the super type of the
resource
ornull
if no super type could be computed. - Throws:
java.lang.IllegalStateException
- if the resource resolver has already been closed}.- Since:
- 2.0.6 (Sling API Bundle 2.0.6)
-
isA
@Deprecated public static boolean isA(@NotNull @NotNull Resource resource, java.lang.String resourceType)
Deprecated.Check if the resource is of the given type. This method first checks the resource type of the resource, then its super resource type and continues to go up the resource super type hierarchy. In case the type of the given resource or the given resource type starts with one of the resource resolver's search paths it is converted to a relative resource type by stripping off the resource resolver's search path before doing the comparison.- Parameters:
resource
- the resource to checkresourceType
- the resource type to check the resource against- Returns:
false
ifresource
isnull
. Otherwise returns the result of callingResource.isResourceType(String)
with the givenresourceType
.- Throws:
java.lang.IllegalStateException
- if the resource resolver has already been closed}.- Since:
- 2.0.6 (Sling API Bundle 2.0.6)
-
adaptTo
@NotNull public static <T> @NotNull java.util.Iterator<T> adaptTo(@NotNull @NotNull java.util.Iterator<Resource> iterator, java.lang.Class<T> type)
Return an iterator for objects of the specified type. A new iterator is returned which tries to adapt the provided resources to the given type (usingAdaptable.adaptTo(Class)
. If a resource in the original iterator is not adaptable to the given class, this object is skipped. This implies that the number of objects returned by the new iterator might be less than the number of resource objects.- Type Parameters:
T
- The adapted type- Parameters:
iterator
- A resource iterator.type
- The adapted type- Returns:
- An iterator of the adapted objects
- Since:
- 2.0.6 (Sling API Bundle 2.0.6)
-
getOrCreateResource
@NotNull public static @NotNull Resource getOrCreateResource(@NotNull @NotNull ResourceResolver resolver, @NotNull @NotNull java.lang.String path, java.lang.String resourceType, java.lang.String intermediateResourceType, boolean autoCommit) throws PersistenceException
Creates or gets the resource at the given path.- Parameters:
resolver
- The resource resolver to use for creationpath
- The full path to be createdresourceType
- The optional resource type of the final resource to createintermediateResourceType
- THe optional resource type of all intermediate resourcesautoCommit
- If set to true, a commit is performed after each resource creation.- Returns:
- The resource for the path.
- Throws:
SlingException
- If an error occurs trying to get/create the resource object from the path.java.lang.IllegalStateException
- if the resource resolver has already been closed}.PersistenceException
- If a persistence error occurs.- Since:
- 2.3.0 (Sling API Bundle 2.4.0)
-
getOrCreateResource
@NotNull public static @NotNull Resource getOrCreateResource(@NotNull @NotNull ResourceResolver resolver, @NotNull @NotNull java.lang.String path, java.util.Map<java.lang.String,java.lang.Object> resourceProperties, java.lang.String intermediateResourceType, boolean autoCommit) throws PersistenceException
Creates or gets the resource at the given path. If an exception occurs, it retries the operation up to five times if autoCommit is enabled. In this case,ResourceResolver.revert()
is called on the resolver before the creation is retried.- Parameters:
resolver
- The resource resolver to use for creationpath
- The full path to be createdresourceProperties
- The optional resource properties of the final resource to createintermediateResourceType
- THe optional resource type of all intermediate resourcesautoCommit
- If set to true, a commit is performed after each resource creation.- Returns:
- The resource for the path.
- Throws:
SlingException
- If an error occurs trying to get/create the resource object from the path.java.lang.IllegalStateException
- if the resource resolver has already been closed}.PersistenceException
- If a persistence error occurs.- Since:
- 2.3.0 (Sling API Bundle 2.4.0)
-
createUniqueChildName
public static java.lang.String createUniqueChildName(Resource parent, java.lang.String name) throws PersistenceException
Create a unique name for a child of theparent
. Creates a unique name and test if child already exists. If child resource with the same name exists, iterate until a unique one is found.- Parameters:
parent
- The parent resourcename
- The name of the child resource- Returns:
- a unique non-existing name for child resource for a given
parent
- Throws:
PersistenceException
- if it can not find unique name for child resource.java.lang.NullPointerException
- ifparent
is nulljava.lang.IllegalStateException
- if the resource resolver has already been closed}.- Since:
- 2.5 (Sling API Bundle 2.7.0)
-
unwrap
@NotNull public static @NotNull Resource unwrap(@NotNull @NotNull Resource rsrc)
Unwrap the resource and return the wrapped implementation.- Parameters:
rsrc
- The resource to unwrap- Returns:
- The unwrapped resource
- Since:
- 2.5 (Sling API Bundle 2.7.0)
-
getBatchResourceRemover
@NotNull public static @NotNull ResourceUtil.BatchResourceRemover getBatchResourceRemover(int threshold)
Create a batch resource remover. A batch resource remove can be used to delete resources in batches. Once the passed in threshold of deleted resources is reached, an intermediate commit is called on the resource resolver. In addition the batch remover deletes a resource recursively. Once all resources to delete are passed to the remover, a final commit needs to be call on the resource resolver.- Parameters:
threshold
- The threshold for the intermediate saves.- Returns:
- A new batch resource remover. Since 2.6
-
-