org.eclipse.jetty.http
Class PathMap

java.lang.Object
  extended by java.util.AbstractMap<K,V>
      extended by java.util.HashMap
          extended by org.eclipse.jetty.http.PathMap
All Implemented Interfaces:
Externalizable, Serializable, Cloneable, Map

public class PathMap
extends HashMap
implements Externalizable

URI path map to Object. This mapping implements the path specification recommended in the 2.2 Servlet API. Path specifications can be of the following forms:

 /foo/bar           - an exact path specification.
 /foo/*             - a prefix path specification (must end '/*').
 *.ext              - a suffix path specification.
 /                  - the default path specification.       
 
Matching is performed in the following order
  • Exact match.
  • Longest prefix match.
  • Longest suffix match.
  • default. Multiple path specifications can be mapped by providing a list of specifications. By default this class uses characters ":," as path separators, unless configured differently by calling the static method @see PathMap#setPathSpecSeparators(String)

    Special characters within paths such as '?� and ';' are not treated specially as it is assumed they would have been either encoded in the original URL or stripped from the path.

    This class is not synchronized. If concurrent modifications are possible then it should be synchronized at a higher level.

    See Also:
    Serialized Form

    Nested Class Summary
    static class PathMap.Entry
               
     
    Constructor Summary
    PathMap()
              Construct empty PathMap.
    PathMap(boolean nodefault)
              Construct empty PathMap.
    PathMap(int capacity)
              Construct empty PathMap.
    PathMap(Map m)
              Construct from dictionary PathMap.
     
    Method Summary
     void clear()
               
     boolean containsMatch(String path)
              Return whether the path matches any entries in the PathMap, excluding the default entry
     Object getLazyMatches(String path)
              Get all entries matched by the path.
     PathMap.Entry getMatch(String path)
              Get the entry mapped by the best specification.
     List getMatches(String path)
              Get all entries matched by the path.
     Object match(String path)
              Get object matched by the path.
    static boolean match(String pathSpec, String path)
               
    static boolean match(String pathSpec, String path, boolean noDefault)
               
    static String pathInfo(String pathSpec, String path)
              Return the portion of a path that is after a path spec.
    static String pathMatch(String pathSpec, String path)
              Return the portion of a path that matches a path spec.
     Object put(Object pathSpec, Object object)
              Add a single path match to the PathMap.
     void readExternal(ObjectInput in)
               
    static String relativePath(String base, String pathSpec, String path)
              Relative path.
     Object remove(Object pathSpec)
               
    static void setPathSpecSeparators(String s)
              Set the path spec separator.
     void writeExternal(ObjectOutput out)
               
     
    Methods inherited from class java.util.HashMap
    clone, containsKey, containsValue, entrySet, get, isEmpty, keySet, putAll, size, values
     
    Methods inherited from class java.util.AbstractMap
    equals, hashCode, toString
     
    Methods inherited from class java.lang.Object
    finalize, getClass, notify, notifyAll, wait, wait, wait
     
    Methods inherited from interface java.util.Map
    equals, hashCode
     

    Constructor Detail

    PathMap

    public PathMap()
    Construct empty PathMap.


    PathMap

    public PathMap(boolean nodefault)
    Construct empty PathMap.


    PathMap

    public PathMap(int capacity)
    Construct empty PathMap.


    PathMap

    public PathMap(Map m)
    Construct from dictionary PathMap.

    Method Detail

    setPathSpecSeparators

    public static void setPathSpecSeparators(String s)
    Set the path spec separator. Multiple path specification may be included in a single string if they are separated by the characters set in this string. By default this class uses ":," characters as path separators.

    Parameters:
    s - separators

    writeExternal

    public void writeExternal(ObjectOutput out)
                       throws IOException
    Specified by:
    writeExternal in interface Externalizable
    Throws:
    IOException

    readExternal

    public void readExternal(ObjectInput in)
                      throws IOException,
                             ClassNotFoundException
    Specified by:
    readExternal in interface Externalizable
    Throws:
    IOException
    ClassNotFoundException

    put

    public Object put(Object pathSpec,
                      Object object)
    Add a single path match to the PathMap.

    Specified by:
    put in interface Map
    Overrides:
    put in class HashMap
    Parameters:
    pathSpec - The path specification, or comma separated list of path specifications.
    object - The object the path maps to

    match

    public Object match(String path)
    Get object matched by the path.

    Parameters:
    path - the path.
    Returns:
    Best matched object or null.

    getMatch

    public PathMap.Entry getMatch(String path)
    Get the entry mapped by the best specification.

    Parameters:
    path - the path.
    Returns:
    Map.Entry of the best matched or null.

    getLazyMatches

    public Object getLazyMatches(String path)
    Get all entries matched by the path. Best match first.

    Parameters:
    path - Path to match
    Returns:
    LazyList of Map.Entry instances key=pathSpec

    getMatches

    public List getMatches(String path)
    Get all entries matched by the path. Best match first.

    Parameters:
    path - Path to match
    Returns:
    List of Map.Entry instances key=pathSpec

    containsMatch

    public boolean containsMatch(String path)
    Return whether the path matches any entries in the PathMap, excluding the default entry

    Parameters:
    path - Path to match
    Returns:
    Whether the PathMap contains any entries that match this

    remove

    public Object remove(Object pathSpec)
    Specified by:
    remove in interface Map
    Overrides:
    remove in class HashMap

    clear

    public void clear()
    Specified by:
    clear in interface Map
    Overrides:
    clear in class HashMap

    match

    public static boolean match(String pathSpec,
                                String path)
                         throws IllegalArgumentException
    Returns:
    true if match.
    Throws:
    IllegalArgumentException

    match

    public static boolean match(String pathSpec,
                                String path,
                                boolean noDefault)
                         throws IllegalArgumentException
    Returns:
    true if match.
    Throws:
    IllegalArgumentException

    pathMatch

    public static String pathMatch(String pathSpec,
                                   String path)
    Return the portion of a path that matches a path spec.

    Returns:
    null if no match at all.

    pathInfo

    public static String pathInfo(String pathSpec,
                                  String path)
    Return the portion of a path that is after a path spec.

    Returns:
    The path info string

    relativePath

    public static String relativePath(String base,
                                      String pathSpec,
                                      String path)
    Relative path.

    Parameters:
    base - The base the path is relative to.
    pathSpec - The spec of the path segment to ignore.
    path - the additional path
    Returns:
    base plus path with pathspec removed


    Copyright © 1995-2009 Mort Bay Consulting. All Rights Reserved.