Merge tag 'v2.3.20' into testing
[gpl/argeo-jcr.git] / org.argeo.slc.repo / src / org / argeo / slc / repo / internal / springutil / PathMatcher.java
diff --git a/org.argeo.slc.repo/src/org/argeo/slc/repo/internal/springutil/PathMatcher.java b/org.argeo.slc.repo/src/org/argeo/slc/repo/internal/springutil/PathMatcher.java
new file mode 100644 (file)
index 0000000..9fc1f22
--- /dev/null
@@ -0,0 +1,91 @@
+/*\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