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);
}
}