package org.theonefx.wcframework.mvc.wcweb; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import javax.servlet.http.HttpServletRequest; public class SmartPathMatcher extends PathMatcher { private final Map<String, Map<String, String>> pathValues = new HashMap<String, Map<String,String>>(); public SmartPathMatcher(String expression) { super(expression); } @Override protected int getLevel() { return 2; } @Override public boolean match(String name, HttpServletRequest req) { if (pathValues.containsKey(name)) { return true; } String[] splitedPath = name.split("/"); if (split.length == splitedPath.length) { for (int i = 0; i < split.length; i++) { if (patterns[i] != null) { Matcher matcher = patterns[i].matcher(splitedPath[i]); if (!matcher.find()) { return false; } else { Map<String, String> paramsMap = pathValues.get(name); if (paramsMap == null) { paramsMap = new HashMap<String, String>(); pathValues.put(name, paramsMap); } for (int j = 1; j <= matcher.groupCount(); j++) { String paramName = paramterNames[i][j - 1]; String value = matcher.group(j); paramsMap.put(paramName, value); } } } else { if (!split[i].equals(splitedPath[i])) { return false; } } } return true; } else { return false; } } public Map<String, String> getParamsMap(String key) { return pathValues.get(key); } }