org.codehaus.plexus.util

## Class PathTool

- java.lang.Object
- - org.codehaus.plexus.util.PathTool

    public class PathTool
    extends Object

Path tool contains static methods to assist in determining path-related information such as relative paths.

Version:
  $Id$
Author:
  Pete Kazmier, Vincent Massol, Vincent Siveton

### Constructor Summary

Constructors
Constructor and Description
`PathTool()`

### Method Summary

All Methods Static Methods Concrete Methods
`static String` `calculateLink(String link, String relativePath)` Calculates the appropriate link given the preferred link and the relativePath of the document.
`static String` `getDirectoryComponent(String filename)` Determines the directory component of a filename.
`static String` `getRelativeFilePath(String oldPath, String newPath)` This method can calculate the relative path between two pathes on a file system.
`static String` `getRelativePath(String filename)` Determines the relative path of a filename.
`static String` `getRelativePath(String basedir, String filename)` Determines the relative path of a filename from a base directory.
`static String` `getRelativeWebPath(String oldPath, String newPath)` This method can calculate the relative path between two pathes on a web site.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### PathTool

    public PathTool()

### Method Detail

#### getRelativePath

    public static final String getRelativePath(String basedir,
                                               String filename)

Determines the relative path of a filename from a base directory. This method is useful in building relative links within pages of a web site. It provides similar functionality to Anakia's `$relativePath` context variable. The arguments to this method may contain either forward or backward slashes as file separators. The relative path returned is formed using forward slashes as it is expected this path is to be used as a link in a web page (again mimicking Anakia's behavior).

This method is thread-safe.

     PathTool.getRelativePath( null, null )                                   = ""
     PathTool.getRelativePath( null, "/usr/local/java/bin" )                  = ""
     PathTool.getRelativePath( "/usr/local/", null )                          = ""
     PathTool.getRelativePath( "/usr/local/", "/usr/local/java/bin" )         = ".."
     PathTool.getRelativePath( "/usr/local/", "/usr/local/java/bin/java.sh" ) = "../.."
     PathTool.getRelativePath( "/usr/local/java/bin/java.sh", "/usr/local/" ) = ""

Parameters:
  `basedir` - The base directory.
  `filename` - The filename that is relative to the base directory.
Returns:
  The relative path of the filename from the base directory. This value is not terminated with a forward slash. A zero-length string is returned if: the filename is not relative to the base directory, `basedir` is null or zero-length, or `filename` is null or zero-length.

#### getRelativePath

    public static final String getRelativePath(String filename)

Determines the relative path of a filename. This method is useful in building relative links within pages of a web site. It provides similar functionality to Anakia's `$relativePath` context variable. The argument to this method may contain either forward or backward slashes as file separators. The relative path returned is formed using forward slashes as it is expected this path is to be used as a link in a web page (again mimicking Anakia's behavior).

This method is thread-safe.

Parameters:
  `filename` - The filename to be parsed.
Returns:
  The relative path of the filename. This value is not terminated with a forward slash. A zero-length string is returned if: `filename` is null or zero-length.
See Also:
  `getRelativeFilePath(String, String)`

#### getDirectoryComponent

    public static final String getDirectoryComponent(String filename)

Determines the directory component of a filename. This is useful within DVSL templates when used in conjunction with the DVSL's `$context.getAppValue("infilename")` to get the current directory that is currently being processed.

This method is thread-safe.

     PathTool.getDirectoryComponent( null )                                   = ""
     PathTool.getDirectoryComponent( "/usr/local/java/bin" )                  = "/usr/local/java"
     PathTool.getDirectoryComponent( "/usr/local/java/bin/" )                 = "/usr/local/java/bin"
     PathTool.getDirectoryComponent( "/usr/local/java/bin/java.sh" )          = "/usr/local/java/bin"

Parameters:
  `filename` - The filename to be parsed.
Returns:
  The directory portion of the `filename`. If the filename does not contain a directory component, "." is returned.

#### calculateLink

    public static final String calculateLink(String link,
                                             String relativePath)

Calculates the appropriate link given the preferred link and the relativePath of the document.

     PathTool.calculateLink( "/index.html", "../.." )                                        = "../../index.html"
     PathTool.calculateLink( "http://plexus.codehaus.org/plexus-utils/index.html", "../.." ) = "http://plexus.codehaus.org/plexus-utils/index.html"
     PathTool.calculateLink( "/usr/local/java/bin/java.sh", "../.." )                        = "../../usr/local/java/bin/java.sh"
     PathTool.calculateLink( "../index.html", "/usr/local/java/bin" )                        = "/usr/local/java/bin/../index.html"
     PathTool.calculateLink( "../index.html", "http://plexus.codehaus.org/plexus-utils" )    = "http://plexus.codehaus.org/plexus-utils/../index.html"

Parameters:
  `link` -
  `relativePath` -
Returns:
  String

#### getRelativeWebPath

    public static final String getRelativeWebPath(String oldPath,
                                                  String newPath)

This method can calculate the relative path between two pathes on a web site.

     PathTool.getRelativeWebPath( null, null )                                          = ""
     PathTool.getRelativeWebPath( null, "http://plexus.codehaus.org/" )                 = ""
     PathTool.getRelativeWebPath( "http://plexus.codehaus.org/", null )                 = ""
     PathTool.getRelativeWebPath( "http://plexus.codehaus.org/",
                          "http://plexus.codehaus.org/plexus-utils/index.html" )        = "plexus-utils/index.html"
     PathTool.getRelativeWebPath( "http://plexus.codehaus.org/plexus-utils/index.html",
                          "http://plexus.codehaus.org/"                                 = "../../"

Parameters:
  `oldPath` -
  `newPath` -
Returns:
  a relative web path from `oldPath`.

#### getRelativeFilePath

    public static final String getRelativeFilePath(String oldPath,
                                                   String newPath)

This method can calculate the relative path between two pathes on a file system.

     PathTool.getRelativeFilePath( null, null )                                   = ""
     PathTool.getRelativeFilePath( null, "/usr/local/java/bin" )                  = ""
     PathTool.getRelativeFilePath( "/usr/local", null )                           = ""
     PathTool.getRelativeFilePath( "/usr/local", "/usr/local/java/bin" )          = "java/bin"
     PathTool.getRelativeFilePath( "/usr/local", "/usr/local/java/bin/" )         = "java/bin"
     PathTool.getRelativeFilePath( "/usr/local/java/bin", "/usr/local/" )         = "../.."
     PathTool.getRelativeFilePath( "/usr/local/", "/usr/local/java/bin/java.sh" ) = "java/bin/java.sh"
     PathTool.getRelativeFilePath( "/usr/local/java/bin/java.sh", "/usr/local/" ) = "../../.."
     PathTool.getRelativeFilePath( "/usr/local/", "/bin" )                        = "../../bin"
     PathTool.getRelativeFilePath( "/bin", "/usr/local/" )                        = "../usr/local"

Note: On Windows based system, the `/` character should be replaced by `\` character.

Parameters:
  `oldPath` -
  `newPath` -
Returns:
  a relative file path from `oldPath`.