Package org.forgerock.json.resource
Class ResourcePath
- java.lang.Object
-
- org.forgerock.json.resource.ResourcePath
-
- All Implemented Interfaces:
Comparable<ResourcePath>,Iterable<String>
public final class ResourcePath extends Object implements Comparable<ResourcePath>, Iterable<String>
A relative path, or URL, to a resource. A resource path is an ordered list of zero or more path elements in big-endian order. The string representation of a resource path conforms to the URL path encoding rules defined in RFC 3986 section 3.3:
The empty resource path having zero path elements may be obtained by callingpath = path-abempty ; begins with "/" or is empty / ... path-abempty = *( "/" segment ) segment = *pchar pchar = unreserved / pct-encoded / sub-delims / ":" / "@" unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" pct-encoded = "%" HEXDIG HEXDIG sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" ALPHA = %x41-5A / %x61-7A ; A-Z / a-z DIGIT = %x30-39 ; 0-9empty(). Resource paths are case insensitive and empty path elements are not allowed. In addition, resource paths will be automatically trimmed such that any leading or trailing slashes are removed. In other words, all resource paths will be considered to be "relative". At the moment the relative path elements "." and ".." are not supported.New resource paths can be created from their string representation using
resourcePath(String), or by deriving new resource paths from existing values, e.g. usingparent()orchild(Object).Example:
ResourcePath base = ResourcePath.valueOf("commons/rest"); ResourcePath child = base.child("hello world"); child.toString(); // commons/rest/hello%20world ResourcePath user = base.child("users").child(123); user.toString(); // commons/rest/users/123
-
-
Constructor Summary
Constructors Constructor Description ResourcePath()Creates a new empty resource path whose string representation is the empty string and which has zero path elements.ResourcePath(Object... pathElements)Creates a new resource path having the provided path elements.ResourcePath(Collection<? extends Object> pathElements)Creates a new resource path having the provided path elements.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ResourcePathchild(Object pathElement)Creates a new resource path which is a child of this resource path.intcompareTo(ResourcePath o)Compares this resource path with the provided resource path.ResourcePathconcat(String suffix)Creates a new resource path which is a descendant of this resource path.ResourcePathconcat(ResourcePath suffix)Creates a new resource path which is a descendant of this resource path.static ResourcePathempty()Returns the empty resource path whose string representation is the empty string and which has zero path elements.booleanequals(Object obj)Returnstrueifobjis a resource path having the exact same elements as this resource path.static ResourcePathformat(String template, Object... pathElements)Creates a new resource path using the provided path template and unencoded path elements.Stringget(int index)Returns the path element at the specified position in this resource path.inthashCode()Returns a hash code for this resource path.ResourcePathhead(int endIndex)Returns a resource path which is a subsequence of the path elements contained in this resource path beginning with the first element (0) and ending with the element at positionendIndex-1.booleanisEmpty()Returnstrueif this resource path contains no path elements.Iterator<String>iterator()Returns an iterator over the path elements in this resource path.Stringleaf()Returns the last path element in this resource path.ResourcePathparent()Returns the resource path which is the immediate parent of this resource path, ornullif this resource path is empty.static ResourcePathresourcePath(String path)Parses the provided string representation of a resource path.intsize()Returns the number of elements in this resource path, or 0 if it is empty.booleanstartsWith(String prefix)Returnstrueif this resource path is equal to or begins with the provided resource resource path.booleanstartsWith(ResourcePath prefix)Returnstrueif this resource path is equal to or begins with the provided resource resource path.ResourcePathsubSequence(int beginIndex, int endIndex)Returns a resource path which is a subsequence of the path elements contained in this resource path beginning with the element at positionbeginIndexand ending with the element at positionendIndex-1.ResourcePathtail(int beginIndex)Returns a resource path which is a subsequence of the path elements contained in this resource path beginning with the element at positionbeginIndexand ending with the last element in this resource path.StringtoString()Returns the URL path encoded string representation of this resource path.static ResourcePathvalueOf(String path)Parses the provided string representation of a resource path.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Constructor Detail
-
ResourcePath
public ResourcePath()
Creates a new empty resource path whose string representation is the empty string and which has zero path elements. This method is provided in order to comply with the Java Collections Framework recommendations. However, it is recommended that applications useempty()in order to avoid unnecessary memory allocation.
-
ResourcePath
public ResourcePath(Collection<? extends Object> pathElements)
Creates a new resource path having the provided path elements.- Parameters:
pathElements- The unencoded path elements.
-
ResourcePath
public ResourcePath(Object... pathElements)
Creates a new resource path having the provided path elements.- Parameters:
pathElements- The unencoded path elements.
-
-
Method Detail
-
empty
public static ResourcePath empty()
Returns the empty resource path whose string representation is the empty string and which has zero path elements.- Returns:
- The empty resource path.
-
format
public static ResourcePath format(String template, Object... pathElements)
Creates a new resource path using the provided path template and unencoded path elements. This method first URL encodes each of the path elements and then substitutes them into the template usingString.format(String, Object...). Finally, the formatted string is parsed as a resource path usingresourcePath(String).This method may be useful in cases where the structure of a resource path is not known at compile time, for example, it may be obtained from a configuration file. Example usage:
String template = "rest/users/%s" ResourcePath path = ResourcePath.format(template, "bjensen");
- Parameters:
template- The resource path template.pathElements- The path elements to be URL encoded and then substituted into the template.- Returns:
- The formatted template parsed as a resource path.
- Throws:
IllegalArgumentException- If the formatted template contains empty path elements.- See Also:
Paths.urlEncode(Object)
-
resourcePath
public static ResourcePath resourcePath(String path)
Parses the provided string representation of a resource path.- Parameters:
path- The URL-encoded resource path to be parsed.- Returns:
- The provided string representation of a resource path.
- Throws:
IllegalArgumentException- If the resource path contains empty path elements.- See Also:
toString()
-
valueOf
public static ResourcePath valueOf(String path)
Parses the provided string representation of a resource path.- Parameters:
path- The URL-encoded resource path to be parsed.- Returns:
- The provided string representation of a resource path.
- Throws:
IllegalArgumentException- If the resource path contains empty path elements.- See Also:
toString()
-
child
public ResourcePath child(Object pathElement)
Creates a new resource path which is a child of this resource path. The returned resource path will have the same path elements as this resource path and, in addition, the provided path element.- Parameters:
pathElement- The unencoded child path element.- Returns:
- A new resource path which is a child of this resource path.
-
compareTo
public int compareTo(ResourcePath o)
Compares this resource path with the provided resource path. Resource paths are compared case sensitively and ancestors sort before descendants.- Specified by:
compareToin interfaceComparable<ResourcePath>- Parameters:
o-- Returns:
-
concat
public ResourcePath concat(ResourcePath suffix)
Creates a new resource path which is a descendant of this resource path. The returned resource path will have be formed of the concatenation of this resource path and the provided resource path.- Parameters:
suffix- The resource path to be appended to this resource path.- Returns:
- A new resource path which is a descendant of this resource path.
-
concat
public ResourcePath concat(String suffix)
Creates a new resource path which is a descendant of this resource path. The returned resource path will have be formed of the concatenation of this resource path and the provided resource path.- Parameters:
suffix- The resource path to be appended to this resource path.- Returns:
- A new resource path which is a descendant of this resource path.
- Throws:
IllegalArgumentException- If the the suffix contains empty path elements.
-
equals
public boolean equals(Object obj)
Returnstrueifobjis a resource path having the exact same elements as this resource path.
-
get
public String get(int index)
Returns the path element at the specified position in this resource path. The path element at position 0 is the top level element (closest to root).- Parameters:
index- The index of the path element to be returned, where 0 is the top level element.- Returns:
- The path element at the specified position in this resource path.
- Throws:
IndexOutOfBoundsException- If the index is out of range (index < 0 || index >= size()).
-
hashCode
public int hashCode()
Returns a hash code for this resource path.
-
head
public ResourcePath head(int endIndex)
Returns a resource path which is a subsequence of the path elements contained in this resource path beginning with the first element (0) and ending with the element at positionendIndex-1. The returned resource path will therefore have the sizeendIndex. Calling this method is equivalent to:subSequence(0, endIndex);
- Parameters:
endIndex- The end index, exclusive.- Returns:
- A resource path which is a subsequence of the path elements contained in this resource path.
- Throws:
IndexOutOfBoundsException- IfendIndexis bigger thansize().
-
isEmpty
public boolean isEmpty()
Returnstrueif this resource path contains no path elements.- Returns:
trueif this resource path contains no path elements.
-
iterator
public Iterator<String> iterator()
Returns an iterator over the path elements in this resource path. The returned iterator will not support theIterator.remove()method and will return path elements starting with index 0, then 1, then 2, etc.
-
leaf
public String leaf()
Returns the last path element in this resource path. Calling this method is equivalent to:resourcePath.get(resourcePath.size() - 1);
- Returns:
- The last path element in this resource path.
-
parent
public ResourcePath parent()
Returns the resource path which is the immediate parent of this resource path, ornullif this resource path is empty.- Returns:
- The resource path which is the immediate parent of this resource
path, or
nullif this resource path is empty.
-
size
public int size()
Returns the number of elements in this resource path, or 0 if it is empty.- Returns:
- The number of elements in this resource path, or 0 if it is empty.
-
startsWith
public boolean startsWith(ResourcePath prefix)
Returnstrueif this resource path is equal to or begins with the provided resource resource path.- Parameters:
prefix- The resource path prefix.- Returns:
trueif this resource path is equal to or begins with the provided resource resource path.
-
startsWith
public boolean startsWith(String prefix)
Returnstrueif this resource path is equal to or begins with the provided resource resource path.- Parameters:
prefix- The resource path prefix.- Returns:
trueif this resource path is equal to or begins with the provided resource resource path.- Throws:
IllegalArgumentException- If the the prefix contains empty path elements.
-
subSequence
public ResourcePath subSequence(int beginIndex, int endIndex)
Returns a resource path which is a subsequence of the path elements contained in this resource path beginning with the element at positionbeginIndexand ending with the element at positionendIndex-1. The returned resource path will therefore have the sizeendIndex - beginIndex.- Parameters:
beginIndex- The beginning index, inclusive.endIndex- The end index, exclusive.- Returns:
- A resource path which is a subsequence of the path elements contained in this resource path.
- Throws:
IndexOutOfBoundsException- IfbeginIndexis negative, orendIndexis bigger thansize(), or ifbeginIndexis bigger thanendIndex.
-
tail
public ResourcePath tail(int beginIndex)
Returns a resource path which is a subsequence of the path elements contained in this resource path beginning with the element at positionbeginIndexand ending with the last element in this resource path. The returned resource path will therefore have the sizesize() - beginIndex. Calling this method is equivalent to:subSequence(beginIndex, size());
- Parameters:
beginIndex- The beginning index, inclusive.- Returns:
- A resource path which is a subsequence of the path elements contained in this resource path.
- Throws:
IndexOutOfBoundsException- IfbeginIndexis negative, or ifbeginIndexis bigger thansize().
-
toString
public String toString()
Returns the URL path encoded string representation of this resource path.- Overrides:
toStringin classObject- Returns:
- The URL path encoded string representation of this resource path.
- See Also:
resourcePath(String)
-
-