--- /dev/null
+/*\r
+ * Copyright 2002-2007 the original author or authors.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package org.argeo.slc.repo.internal.springutil;\r
+\r
+/**\r
+ * Strategy interface for <code>String</code>-based path matching.\r
+ * \r
+ * <p>Used by <code>org.springframework.core.io.support.PathMatchingResourcePatternResolver</code>,\r
+ * {@link org.springframework.web.servlet.handler.AbstractUrlHandlerMapping},\r
+ * {@link org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver},\r
+ * and {@link org.springframework.web.servlet.mvc.WebContentInterceptor}.\r
+ *\r
+ * <p>The default implementation is {@link AntPathMatcher}, supporting the\r
+ * Ant-style pattern syntax.\r
+ *\r
+ * @author Juergen Hoeller\r
+ * @since 1.2\r
+ * @see AntPathMatcher\r
+ */\r
+public interface PathMatcher {\r
+\r
+ /**\r
+ * Does the given <code>path</code> represent a pattern that can be matched\r
+ * by an implementation of this interface?\r
+ * <p>If the return value is <code>false</code>, then the {@link #match}\r
+ * method does not have to be used because direct equality comparisons\r
+ * on the static path Strings will lead to the same result.\r
+ * @param path the path String to check\r
+ * @return <code>true</code> if the given <code>path</code> represents a pattern\r
+ */\r
+ boolean isPattern(String path);\r
+\r
+ /**\r
+ * Match the given <code>path</code> against the given <code>pattern</code>,\r
+ * according to this PathMatcher's matching strategy.\r
+ * @param pattern the pattern to match against\r
+ * @param path the path String to test\r
+ * @return <code>true</code> if the supplied <code>path</code> matched,\r
+ * <code>false</code> if it didn't\r
+ */\r
+ boolean match(String pattern, String path);\r
+\r
+ /**\r
+ * Match the given <code>path</code> against the corresponding part of the given\r
+ * <code>pattern</code>, according to this PathMatcher's matching strategy.\r
+ * <p>Determines whether the pattern at least matches as far as the given base\r
+ * path goes, assuming that a full path may then match as well.\r
+ * @param pattern the pattern to match against\r
+ * @param path the path String to test\r
+ * @return <code>true</code> if the supplied <code>path</code> matched,\r
+ * <code>false</code> if it didn't\r
+ */\r
+ boolean matchStart(String pattern, String path);\r
+\r
+ /**\r
+ * Given a pattern and a full path, determine the pattern-mapped part.\r
+ * <p>This method is supposed to find out which part of the path is matched\r
+ * dynamically through an actual pattern, that is, it strips off a statically\r
+ * defined leading path from the given full path, returning only the actually\r
+ * pattern-matched part of the path.\r
+ * <p>For example: For "myroot/*.html" as pattern and "myroot/myfile.html"\r
+ * as full path, this method should return "myfile.html". The detailed\r
+ * determination rules are specified to this PathMatcher's matching strategy.\r
+ * <p>A simple implementation may return the given full path as-is in case\r
+ * of an actual pattern, and the empty String in case of the pattern not\r
+ * containing any dynamic parts (i.e. the <code>pattern</code> parameter being\r
+ * a static path that wouldn't qualify as an actual {@link #isPattern pattern}).\r
+ * A sophisticated implementation will differentiate between the static parts\r
+ * and the dynamic parts of the given path pattern.\r
+ * @param pattern the path pattern\r
+ * @param path the full path to introspect\r
+ * @return the pattern-mapped part of the given <code>path</code>\r
+ * (never <code>null</code>)\r
+ */\r
+ String extractPathWithinPattern(String pattern, String path);\r
+\r
+}\r