Class AntPathMatcher
- java.lang.Object
-
- com.jalios.util.AntPathMatcher
-
public class AntPathMatcher extends java.lang.Object
PathMatcher implementation for Ant-style path patterns. Examples are provided below.Part of this mapping code has been kindly borrowed from Apache Ant.
The mapping matches URLs using the following rules:
- ? matches one character
- * matches zero or more characters
- ** matches zero or more 'directories' in a path
Some examples:
com/t?st.jsp
- matchescom/test.jsp
but alsocom/tast.jsp
orcom/txst.jsp
-
com/*.jsp
- matches all.jsp
files in thecom
directory com/**/test.jsp
- matches alltest.jsp
files underneath thecom
pathorg/springframework/**/*.jsp
- matches all.jsp
files underneath theorg/springframework
pathorg/**/servlet/bla.jsp
- matchesorg/springframework/servlet/bla.jsp
but alsoorg/springframework/testing/servlet/bla.jsp
andorg/servlet/bla.jsp
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
DEFAULT_PATH_SEPARATOR
Default path separator: "/"
-
Constructor Summary
Constructors Constructor Description AntPathMatcher()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
combine(java.lang.String pattern1, java.lang.String pattern2)
Combines two patterns into a new pattern that is returned.protected boolean
doMatch(java.lang.String pattern, java.lang.String path, boolean fullMatch, java.util.Map<java.lang.String,java.lang.String> uriTemplateVariables)
Actually match the givenpath
against the givenpattern
.java.lang.String
extractPathWithinPattern(java.lang.String pattern, java.lang.String path)
Given a pattern and a full path, determine the pattern-mapped part.java.util.Map<java.lang.String,java.lang.String>
extractUriTemplateVariables(java.lang.String pattern, java.lang.String path)
java.util.Comparator<java.lang.String>
getPatternComparator(java.lang.String path)
Given a full path, returns aComparator
suitable for sorting patterns in order of explicitness.boolean
isPattern(java.lang.String path)
boolean
match(java.lang.String pattern, java.lang.String path)
boolean
matchStart(java.lang.String pattern, java.lang.String path)
void
setPathSeparator(java.lang.String pathSeparator)
Set the path separator to use for pattern parsing.void
setTrimTokens(boolean trimTokens)
Whether to trim tokenized paths and patterns.
-
-
-
Field Detail
-
DEFAULT_PATH_SEPARATOR
public static final java.lang.String DEFAULT_PATH_SEPARATOR
Default path separator: "/"- See Also:
- Constant Field Values
-
-
Method Detail
-
setPathSeparator
public void setPathSeparator(java.lang.String pathSeparator)
Set the path separator to use for pattern parsing. Default is "/", as in Ant.
-
setTrimTokens
public void setTrimTokens(boolean trimTokens)
Whether to trim tokenized paths and patterns.
-
isPattern
public boolean isPattern(java.lang.String path)
-
match
public boolean match(java.lang.String pattern, java.lang.String path)
-
matchStart
public boolean matchStart(java.lang.String pattern, java.lang.String path)
-
doMatch
protected boolean doMatch(java.lang.String pattern, java.lang.String path, boolean fullMatch, java.util.Map<java.lang.String,java.lang.String> uriTemplateVariables)
Actually match the givenpath
against the givenpattern
.- Parameters:
pattern
- the pattern to match againstpath
- the path String to testfullMatch
- whether a full pattern match is required (else a pattern match as far as the given base path goes is sufficient)- Returns:
true
if the suppliedpath
matched,false
if it didn't
-
extractPathWithinPattern
public java.lang.String extractPathWithinPattern(java.lang.String pattern, java.lang.String path)
Given a pattern and a full path, determine the pattern-mapped part.For example:
- '
/docs/cvs/commit.html
' and '/docs/cvs/commit.html
-> '' - '
/docs/*
' and '/docs/cvs/commit
-> 'cvs/commit
' - '
/docs/cvs/*.html
' and '/docs/cvs/commit.html
-> 'commit.html
' - '
/docs/**
' and '/docs/cvs/commit
-> 'cvs/commit
' - '
/docs/**\/*.html
' and '/docs/cvs/commit.html
-> 'cvs/commit.html
' - '
/*.html
' and '/docs/cvs/commit.html
-> 'docs/cvs/commit.html
' - '
*.html
' and '/docs/cvs/commit.html
-> '/docs/cvs/commit.html
' - '
*
' and '/docs/cvs/commit.html
-> '/docs/cvs/commit.html
'
Assumes that
match(java.lang.String, java.lang.String)
returnstrue
for 'pattern
' and 'path
', but does not enforce this. - '
-
extractUriTemplateVariables
public java.util.Map<java.lang.String,java.lang.String> extractUriTemplateVariables(java.lang.String pattern, java.lang.String path)
-
combine
public java.lang.String combine(java.lang.String pattern1, java.lang.String pattern2)
Combines two patterns into a new pattern that is returned.This implementation simply concatenates the two patterns, unless the first pattern contains a file extension match (such as
*.html
. In that case, the second pattern should be included in the first, or anIllegalArgumentException
is thrown.For example:
combine examples Pattern 1 Pattern 2 Result /hotels null
/hotels null
/hotels /hotels /hotels /bookings /hotels/bookings /hotels bookings /hotels/bookings /hotels/* /bookings /hotels/bookings /hotels/** /bookings /hotels/**/bookings /hotels {hotel} /hotels/{hotel} /hotels/* {hotel} /hotels/{hotel} /hotels/** {hotel} /hotels/**/{hotel} /*.html /hotels.html /hotels.html /*.html /hotels /hotels.html /*.html /*.txt IllegalArgumentException - Parameters:
pattern1
- the first patternpattern2
- the second pattern- Returns:
- the combination of the two patterns
- Throws:
java.lang.IllegalArgumentException
- when the two patterns cannot be combined
-
getPatternComparator
public java.util.Comparator<java.lang.String> getPatternComparator(java.lang.String path)
Given a full path, returns aComparator
suitable for sorting patterns in order of explicitness.The returned
Comparator
will sort a list so that more specific patterns (without uri templates or wild cards) come before generic patterns. So given a list with the following patterns:/hotels/new
/hotels/ hotel
/hotels/*
The full path given as parameter is used to test for exact matches. So when the given path is
/hotels/2
, the pattern/hotels/2
will be sorted before/hotels/1
.- Parameters:
path
- the full path to use for comparison- Returns:
- a comparator capable of sorting patterns in order of explicitness
-
-