package com.revolsys.ui.web.controller; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.springframework.util.PathMatcher; import com.revolsys.util.CompareUtil; public class UriTemplatePathMatcher implements PathMatcher { @Override public String combine(final String arg0, final String arg1) { // TODO Auto-generated method stub return null; } @Override public String extractPathWithinPattern(final String pattern, final String path) { if (matchStart(pattern, path)) { return path; } else { return ""; } } @Override public Map<String, String> extractUriTemplateVariables(final String pattern, final String path) { final Map<String, String> variables = new LinkedHashMap<>(); return variables; } private Matcher getMatcher(final String pattern, final String path) { String regex = pattern; // regex = regex.replaceAll("\\*\\*", "(.*)"); regex = regex.replaceAll("\\*", "([^/]+)"); regex = regex.replaceAll("\\(\\[\\^/\\]\\+\\)\\(\\[\\^/\\]\\+\\)", "(.*)"); regex = regex.replaceAll("\\?", "(.?)"); regex = regex.replaceAll("\\{[^\\}]+\\}", "([^/]+)"); final Pattern rePattern = Pattern.compile(regex); final Matcher matcher = rePattern.matcher(path); return matcher; } @Override public Comparator<String> getPatternComparator(final String arg0) { return new Comparator<String>() { @Override public int compare(final String pattern1, final String Pattern2) { // TODO improve return -CompareUtil.compare(pattern1.length(), Pattern2.length()); } }; } @Override public boolean isPattern(final String path) { return path.contains("{") || path.contains("*") || path.contains("?"); } @Override public boolean match(final String pattern, final String path) { final Matcher matcher = getMatcher(pattern, path); return matcher.matches(); } @Override public boolean matchStart(final String pattern, final String path) { final Matcher matcher = getMatcher(pattern, path); if (matcher.find()) { return matcher.start() == 0; } else { return false; } } }