Class FSRL
- Direct Known Subclasses:
FSRLRoot
Used to locate a resource (by name) on a "filesystem", in a recursively nested fashion.
The string format of FSRLs is fstype
+ "://" + path
+ optional_MD5
[ + "|" pipe + FSRL
]*
See fromPartString(FSRL, String)
for more format info.
Read the string format from right-to-left for easiest understanding... ie. "file://z|y://x" reads as "file x inside a filesystem y inside a container file z".
FSRL instances are immutable and thread-safe.
Examples (pipes shown in red since they are hard to see):
- file://dir/subdir -- simplest example, locates a file on local computer filesystem.
- file://dir/subdir/example.zip|zip://readme.txt -- points to a file named "readme.txt" in a zip file.
- file://dir/subdir/example.zip|zip://dir/nested.tar|tar://file.txt -- points to a file inside a TAR archive, which is inside a ZIP archive, which is on the local filesystem.
- file://dir/subdir/example.zip?MD5=1234567|zip://readme.txt?MD5=987654 -- points to a file named "readme.txt" (with a MD5 hash) in a zip file (that has another MD5 hash).
See FSRLRoot
for examples of how FSRL and FSRLRoot's are related.
FSRL's can be created either piecemeal, from the bottom up, starting with a root filesystem
FSRL and calling appendPath(String)
or FSRLRoot.nestedFS(FSRL, String)
methods
to create deeper and deeper nested FSRLs,
or
FSRL's can be created from strings using fromString(String)
.
FSRLs that have a MD5 value are "fully qualified"
.
-
Field Summary
-
Constructor Summary
ModifierConstructorDescriptionprotected
Protected constructor called by static factory methods such asfromString(String)
or methods that return a new instance such aswithPath(String)
.protected
Protected constructor called by static factory methods such asfromString(String)
or methods that return a new instance such aswithPath(String)
. -
Method Summary
Modifier and TypeMethodDescriptionappendPath
(String relPath) protected void
appendToStringBuilder
(StringBuilder sb, boolean recurse, boolean includeParams, boolean includeFSRoot) static FSRL
convertRootToContainer
(FSRL fsrl) Ensures that a FSRL instance is a file type reference by converting any FSRLRoots into the container file that hosts the FSRLRoot.boolean
static FSRL
fromProgram
(Program program) static FSRL
fromString
(FSRL parent, String fsrlStr) Creates aFSRL
from a raw string.static FSRL
fromString
(String fsrlStr) Creates aFSRL
from a raw string.getFS()
Returns theFSRLRoot
object that represents the entirefilesystem
for this FSRL.getMD5()
Returns the MD5 string associated with this file.getName()
Returns the name portion of this FSRL's path, everything after the last '/'getName
(int nestedDepth) Returns the name portion of the FSRL part at parent depthnestedDepth
, where 0 is ourself (equiv to just callinggetName()
, 1 is the parent container's name, etc.int
getPath()
Returns the full path/filename of this FSRL.int
hashCode()
boolean
isDescendantOf
(FSRL potentialParent) Returnstrue
if this object is a child or descendant of the specifiedpotentialParent
parameter.boolean
isEquivalent
(FSRL other) Returns true if the twoFSRL
s are the same, excluding any MD5 values.boolean
isEquivalent
(String fsrlStr) Returns true if the two FSRLs are the same, excluding any MD5 values.boolean
isMD5Equal
(String otherMD5) Tests specified MD5 value against MD5 in this FSRL.makeNested
(String fstype) Creates a newFSRLRoot
instance that is a child of this FSRL.split()
Returns a string containing the full FSRL, without FS "fstype://" portionsReturns a string containing the full FSRL, excluding MD5 portions.toString()
Returns a string containing the full FSRL.Returns a string containing just the currentFSRL
protocol and path.Creates a newFSRL
instance using the same path and other metadata present in thecopyPath
instance.static void
writeToProgramInfo
(Program program, FSRL fsrl) Writes a FSRL value to aProgram
's properties.
-
Field Details
-
PARAM_MD5
- See Also:
-
FSRL_OPTION_NAME
- See Also:
-
parent
-
path
-
-
Constructor Details
-
FSRL
Protected constructor called by static factory methods such asfromString(String)
or methods that return a new instance such aswithPath(String)
.- Parameters:
parent
- FSRL parent, null if this instance is root FSRLRootpath
- String path, meaning dependent on context
-
FSRL
Protected constructor called by static factory methods such asfromString(String)
or methods that return a new instance such aswithPath(String)
.- Parameters:
parent
- FSRL parent, null if this instance is root FSRLRootpath
- String path, meaning dependent on contextmd5
- hex string with the md5 hash of the file this FSRL points to, null ok.
-
-
Method Details
-
fromProgram
-
writeToProgramInfo
Writes a FSRL value to aProgram
's properties. -
fromString
Creates aFSRL
from a raw string. The parent portions of the FSRL are not intern()'d so will not be shared with other FSRL instances.See
fromPartString(FSRL, String)
for details of character encoding fixups.- Parameters:
fsrlStr
- something like "fstype://path/path|fs2type://path2/path2|etc://etc/etc"- Returns:
- new
FSRL
instance, never null - Throws:
MalformedURLException
- if empty string or bad format
-
fromString
Creates aFSRL
from a raw string.See
fromPartString(FSRL, String)
for details of character encoding fixups.- Parameters:
parent
- ParentFSRL
fsrlStr
- something like "fstype://path/path|fs2type://path2/path2|etc://etc/etc"- Returns:
- new
FSRL
instance, never null - Throws:
MalformedURLException
- if empty string or bad format
-
convertRootToContainer
Ensures that a FSRL instance is a file type reference by converting any FSRLRoots into the container file that hosts the FSRLRoot.- Parameters:
fsrl
- FSRL or FSRLRoot instance to possibly convert- Returns:
- original FSRL if already a normal FSRL, or the container if it was a FSRLRoot
-
getFS
Returns theFSRLRoot
object that represents the entirefilesystem
for this FSRL.Never returns NULL, and calling getFS() on a
FSRLRoot
object returns itself. -
getNestingDepth
public int getNestingDepth()Returns the number ofFSRLRoot
s there are in thisFSRL
.A single level FSRL such as "file://path" will return 1.
A two level FSRL such as "file://path|subfs://path2" will return 2.
etc.- Returns:
- number of levels in this FSRL, min value returned is 1.
-
getPath
Returns the full path/filename of this FSRL. Does not include parent filesystem path or info."file://path|subfs://subpath/blah" returns "/subpath/blah"
May return null if this instance is a
FSRLRoot
. -
getName
Returns the name portion of this FSRL's path, everything after the last '/'"file://path/name.ext" returns "name.ext"
- Returns:
- name portion of this FSRL path, or null if path is null also.
-
getName
Returns the name portion of the FSRL part at parent depthnestedDepth
, where 0 is ourself (equiv to just callinggetName()
, 1 is the parent container's name, etc.- Parameters:
nestedDepth
- relative parent index of FSRL part to query, 0 == this instance.- Returns:
- name portion of the path of the specified FSRL part.
- Throws:
IOException
- if nestedDepth is larger than number of FSRL parent parts.
-
getMD5
Returns the MD5 string associated with this file.NULL if no MD5 value present.
- Returns:
- md5 string associated with this file object, or null if not present.
-
isMD5Equal
Tests specified MD5 value against MD5 in this FSRL.- Parameters:
otherMD5
- md5 in a hex string- Returns:
- boolean true if equal, or that both are null, false otherwise
-
withMD5
- Parameters:
newMD5
- string md5- Returns:
- new
FSRL
instance with the same path and the specified md5 value, or if newMD5 is same as existing, returns this
-
withPath
Creates a newFSRL
instance, using the sameFSRLRoot
as this instance, but with a new path.See also
appendPath(String)
.- Parameters:
newpath
- string path- Returns:
- new
FSRL
instance with the specified path.
-
withPath
Creates a newFSRL
instance using the same path and other metadata present in thecopyPath
instance.Used when re-root'ing a FSRL path onto another parent object (usually during intern()'ing)
- Parameters:
copyPath
- another FSRL to copy path and md5 from- Returns:
- new FSRL instance
-
appendPath
Creates a newFSRL
instance, using the sameFSRLRoot
as this instance, combining the currentpath
with therelPath
value.- Parameters:
relPath
- relative path string to append, '/'s will be automatically added- Returns:
- new
FSRL
instance with additional path appended.
-
makeNested
Creates a newFSRLRoot
instance that is a child of this FSRL.See
FSRLRoot.nestedFS(FSRL, FSRLRoot)
andFSRLRoot.nestedFS(FSRL, String)
.- Parameters:
fstype
- file system type string.- Returns:
- new
FSRLRoot
instance
-
toString
Returns a string containing the full FSRL.Example: "file://path|subfs://blah?MD5=1234567"
-
toPrettyString
Returns a string containing the full FSRL, excluding MD5 portions.- Returns:
- string with full FSRL, excluding MD5 portions.
-
toPrettyFullpathString
Returns a string containing the full FSRL, without FS "fstype://" portionsExample:
"fsrl://path/filename?MD5=1234|subfsrl://subpath/subfile"
will result in
"path/filename|subpath/subfile"
.- Returns:
- formatted string such as: "path/filename|subpath/subfile"
-
appendToStringBuilder
protected void appendToStringBuilder(StringBuilder sb, boolean recurse, boolean includeParams, boolean includeFSRoot) -
toStringPart
Returns a string containing just the currentFSRL
protocol and path.Example: "file://path|subfs://blah?MD5=123456" returns "subfs://blah?MD5=123456"
- Returns:
- string containing just the current
FSRL
protocol and path.
-
split
-
isEquivalent
Returns true if the two FSRLs are the same, excluding any MD5 values.- Parameters:
fsrlStr
- string-ifiedFSRL
- Returns:
- boolean true if this instance is the same as the specified string-ified fsrl, ignoring any md5 values.
-
isEquivalent
Returns true if the twoFSRL
s are the same, excluding any MD5 values.- Parameters:
other
-FSRL
to compare with- Returns:
- boolean true if this instance is the same as the specified FSRL, ignoring any md5 values.
-
isDescendantOf
Returnstrue
if this object is a child or descendant of the specifiedpotentialParent
parameter. -
hashCode
public int hashCode() -
equals
-