1 package de.juplo.thymeproxy;
4 import java.util.Comparator;
5 import java.util.HashMap;
7 import java.util.regex.Matcher;
8 import java.util.regex.Pattern;
9 import java.util.regex.PatternSyntaxException;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12 import org.springframework.util.PathMatcher;
20 public class RegexPathMatcher implements PathMatcher
22 private final static Logger LOG =
23 LoggerFactory.getLogger(RegexPathMatcher.class);
26 private int flags = 0;
27 private Map<String, Pattern> patternCache = new HashMap<>();
30 public RegexPathMatcher()
34 public RegexPathMatcher(int flags)
40 protected boolean compilePattern(String string)
44 Pattern pattern = Pattern.compile(string, flags);
45 patternCache.put(string, pattern);
48 catch(PatternSyntaxException e)
50 LOG.debug("\"{}\" is no valid pattern: {}", string, e.getMessage());
57 public boolean isPattern(String path)
59 if (path.startsWith("^") || path.endsWith("$"))
62 if (patternCache.containsKey(path))
65 return compilePattern(path);
69 public boolean match(String pattern, String path)
71 if (!patternCache.containsKey(pattern))
72 compilePattern(pattern);
73 Matcher matcher = patternCache.get(pattern).matcher(path);
74 return matcher.matches();
78 public boolean matchStart(String pattern, String path)
80 if (!patternCache.containsKey(pattern))
81 compilePattern(pattern);
82 Matcher matcher = patternCache.get(pattern).matcher(path);
86 return matcher.start() == 0;
90 public String extractPathWithinPattern(String pattern, String path)
96 public Map<String, String> extractUriTemplateVariables(String pattern, String path)
98 return new HashMap<>();
102 public Comparator<String> getPatternComparator(String path)
104 return new Comparator<String>()
107 public int compare(String a, String b)
109 return b.length() - a.length();
115 public String combine(String a, String b)
117 boolean literal = (flags & Pattern.LITERAL) == Pattern.LITERAL;
118 String pattern = a + (literal ? "" : ".*") + b;
119 if (!isPattern(pattern))
120 throw new IllegalArgumentException("Cannot combine pattern " + a + " with pattern " + b);