Class PathParser
- All Implemented Interfaces:
Path
If the path that this represents is /usr/bin/../etc/./README
then the actual path, normalized, is /usr/etc/README. Once
the path has been normalized it is possible to acquire the segments as
an array of strings, which allows simple manipulation of the path.
Although RFC 2396 defines the path within a URI to have parameters this
does not extract those parameters this will simply normalize the path and
include the path parameters in the path. If the path is to be converted
into a OS specific file system path that has the parameters extracted
then the AddressParser should be used.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate classThis is used so that thePathParsercan speed up the parsing of the data.private classTheTokenListclass is used to store a list of tokens. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate PathParser.TokenUsed to store the highest directory path.private PathParser.TokenUsed to store consumed file extension.private PathParser.TokenListUsed to store the individual path segments.private PathParser.TokenUsed to store consumed name characters.private PathParser.TokenUsed to store consumed normalized path name. -
Constructor Summary
ConstructorsConstructorDescriptionThe default constructor will create aPathParserthat contains no specifics.PathParser(String path) This is primarily a convineance constructor. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidThis will simply read the characters from the end of the buffer until it encounters the first peroid character.This will return the highest directory that exists within the path.This will return the extension that the file name contains.getName()This will return the full name of the file without the path.getPath()This will return the normalized path.getPath(int from) This will return the normalized path from the specified path segment.getPath(int from, int count) This will return the normalized path from the specified path segment.private StringgetRelative(char[] text, int off, int len) This will return the path as it is relative to the issued path.getRelative(String path) This will return the path as it is relative to the issued path.private StringgetRelative(PathParser path) This is used by thegetRelative(String)to normalize the path string and determine if it contains a highest directory which is shared with the path that is represented by this object.String[]This method is used to break the path into individual parts called segments, see RFC 2396.protected voidinit()This will initialize the parser so that it is in a ready state.private voidname()This will extract the full name of the file without the path.private voidThe normalization of the path is the conversion of the path given into it's actual path by removing the references to the parent directorys and to the current dir.protected voidparse()This will parse the path in such a way that it ensures that at no stage there are trailing back references, using path normalization.private voidpath()This will extract the path of the givenStringafter it has been normalized.private voidsegments()This wil extract each individual segment from the path and also extract the highest directory.toString()This will return the normalized path.
-
Field Details
-
list
Used to store the individual path segments. -
name
Used to store consumed name characters. -
ext
Used to store consumed file extension. -
dir
Used to store the highest directory path. -
path
Used to store consumed normalized path name.
-
-
Constructor Details
-
PathParser
public PathParser()The default constructor will create aPathParserthat contains no specifics. The instance will returnnullfor all the get methods. ThePathParser's get methods may be populated by using the parse method. -
PathParser
This is primarily a convineance constructor. This will parse theStringgiven to extract the specifics. This could be achived by calling the default no-arg constructor and then using the instance to invoke theparsemethod on thatStringto extract the parts.- Parameters:
path- aStringcontaining a path value
-
-
Method Details
-
parse
protected void parse()This will parse the path in such a way that it ensures that at no stage there are trailing back references, using path normalization. The need to remove the back references is so that thisPathParserwill create the sameStringpath given a set of paths that have different back references. For example the paths/path/../pathand/pathare the same path but differentString's.This will NOT parse an immediate back reference as this signifies a path that cannot exist. So a path such as
/../will result in a null for all methods. Paths such as../binwill not be allowed. -
init
protected void init()This will initialize the parser so that it is in a ready state. This allows the parser to be used to parse many paths. This will clear the parse buffer objects and reset the offset to point to the start of the char buffer. The count variable is reset by theParser.parsemethod. -
getExtension
This will return the extension that the file name contains. For example a file namefile.en_US.extensionwill produce an extension ofextension. This will return null if the path contains no file extension.- Specified by:
getExtensionin interfacePath- Returns:
- this will return the extension this path contains
-
getName
This will return the full name of the file without the path. As regargs the definition of the path in RFC 2396 the name would be considered the last path segment. So if the path was/usr/READMEthe name isREADME. Also for directorys the name of the directory in the last path segment is returned. This returns the name without any of the path parameters. As RFC 2396 defines the path to have path parameters after the path segments. -
getPath
This will return the normalized path. The normalized path is the path without any references to its parent or itself. So if the path to be parsed is/usr/../etc/./the path is/etc/. If the path that this represents is a path with an immediate back reference then this will return null. This is the path with all its information even the parameter information if it was defined in the path. -
getPath
This will return the normalized path from the specified path segment. This allows various path parts to be acquired in an efficient means what does not require copy operations of the use ofsubstringinvocations. Of particular interest is the extraction of context based paths. This is the path with all its information even the parameter information if it was defined in the path. -
getPath
This will return the normalized path from the specified path segment. This allows various path parts to be acquired in an efficient means what does not require copy operations of the use ofsubstringinvocations. Of particular interest is the extraction of context based paths. This is the path with all its information even the parameter information if it was defined in the path. -
getDirectory
This will return the highest directory that exists within the path. This is used to that files within the same path can be acquired. An example of that this would do given the path/pub/./bin/READMEwould be to return the highest directory path/pub/bin/. The "/" character will allways be the last character in the path.- Specified by:
getDirectoryin interfacePath- Returns:
- this method will return the highest directory
-
getSegments
This method is used to break the path into individual parts called segments, see RFC 2396. This can be used as an easy way to compare paths and to examine the directory tree that the path points to. For example, if an path was broken from the string/usr/bin/../etcthen the segments returned would beusrandetcas the path is normalized before the segments are extracted.- Specified by:
getSegmentsin interfacePath- Returns:
- return all the path segments within the directory
-
getRelative
This will return the path as it is relative to the issued path. This in effect will chop the start of this path if it's start matches the highest directory of the given path as ofgetDirectory. This is useful if paths that are relative to a specific location are required. To illustrate what this method will do the following example is provided. If this object represented the path string/usr/share/rfc/rfc2396.txtand the issued path was/usr/share/text.txtthen this will return the path string/rfc/rfc2396.txt.- Specified by:
getRelativein interfacePath- Parameters:
path- the path prefix to acquire a relative path- Returns:
- returns a path relative to the one it is given otherwize this method will return null
-
getRelative
This is used by thegetRelative(String)to normalize the path string and determine if it contains a highest directory which is shared with the path that is represented by this object. If the path has leading back references, such as../, then the result of this is null. The returned path begins with a '/'.- Parameters:
path- the path prefix to acquire a relative path- Returns:
- returns a path relative to the one it is given otherwize this method will return null
-
getRelative
This will return the path as it is relative to the issued path. This in effect will chop the start of this path if it's start matches the highest directory of the given path as ofgetDirectory. This is useful if paths that are relative to a specific location are required. To illustrate what this method will do the following example is provided. If this object represented the path string/usr/share/rfc/rfc2396.txtand the issued path was/usr/share/text.txtthen this will return the path string/rfc/rfc2396.txt.- Parameters:
text- the path prefix to acquire a relative pathoff- this is the offset within the text to readlen- this is the number of characters in the path- Returns:
- returns a path relative to the one it is given otherwize this method will return null
-
path
private void path()This will extract the path of the givenStringafter it has been normalized. If the path can not be normalized then the count is set to -1 and the path cannot be extracted. When this happens then the path parameter isnull. -
extension
private void extension()This will simply read the characters from the end of the buffer until it encounters the first peroid character. When this is read it will store the file extension and remove the characters from the buffer. -
segments
private void segments()This wil extract each individual segment from the path and also extract the highest directory. The path segments are basically the strings delimited by the '/' character of a normalized path. As well as extracting the path segments this will also extract the directory of path, that is, the the path up to the last occurance of the '/' character. -
normalize
private void normalize()The normalization of the path is the conversion of the path given into it's actual path by removing the references to the parent directorys and to the current dir. So if the path given was/usr/bin/../etc/./READMEthen the actual path, the normalized path, is/usr/etc/README.This method ensures the if there are an illegal number of back references that the path will be evaluated as empty. This can evaluate any path configuration, this includes any references like
../or/..within the path. -
name
private void name()This will extract the full name of the file without the path. As regards the definition of the path in RFC 2396 the name would be considered the last path segment. So if the path was/usr/READMEthe name isREADME. Also for directorys the name of the directory in the last path segment is returned. This returns the name without any of the path parameters. As RFC 2396 defines the path to have path parameters after the path segments. So the path for the directory "/usr/bin;param=value/;param=value" would result in the name "bin". If the path given was "/" then there will be nothing in the buffer becauseextractwill have removed it. -
toString
This will return the normalized path. The normalized path is the path without any references to its parent or itself. So if the path to be parsed is/usr/../etc/./the path is/etc/. If the path that this represents is a path with an immediate back reference then this will return null. This is the path with all its information even the parameter information if it was defined in the path.
-