<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<FONT color="green">007</FONT>     * "License"); you may not use this file except in compliance<a name="line.7"></a>
<FONT color="green">008</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<FONT color="green">013</FONT>     * software distributed under the License is distributed on an<a name="line.13"></a>
<FONT color="green">014</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<FONT color="green">015</FONT>     * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<FONT color="green">016</FONT>     * specific language governing permissions and limitations<a name="line.16"></a>
<FONT color="green">017</FONT>     * under the License.<a name="line.17"></a>
<FONT color="green">018</FONT>     */<a name="line.18"></a>
<FONT color="green">019</FONT>    package org.apache.shiro.util;<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    /**<a name="line.21"></a>
<FONT color="green">022</FONT>     * &lt;p&gt;PathMatcher implementation for Ant-style path patterns.<a name="line.22"></a>
<FONT color="green">023</FONT>     * Examples are provided below.&lt;/p&gt;<a name="line.23"></a>
<FONT color="green">024</FONT>     *<a name="line.24"></a>
<FONT color="green">025</FONT>     * &lt;p&gt;Part of this mapping code has been kindly borrowed from<a name="line.25"></a>
<FONT color="green">026</FONT>     * &lt;a href="http://ant.apache.org"&gt;Apache Ant&lt;/a&gt;.<a name="line.26"></a>
<FONT color="green">027</FONT>     *<a name="line.27"></a>
<FONT color="green">028</FONT>     * &lt;p&gt;The mapping matches URLs using the following rules:&lt;br&gt;<a name="line.28"></a>
<FONT color="green">029</FONT>     * &lt;ul&gt;<a name="line.29"></a>
<FONT color="green">030</FONT>     * &lt;li&gt;? matches one character&lt;/li&gt;<a name="line.30"></a>
<FONT color="green">031</FONT>     * &lt;li&gt;* matches zero or more characters&lt;/li&gt;<a name="line.31"></a>
<FONT color="green">032</FONT>     * &lt;li&gt;** matches zero or more 'directories' in a path&lt;/li&gt;<a name="line.32"></a>
<FONT color="green">033</FONT>     * &lt;/ul&gt;<a name="line.33"></a>
<FONT color="green">034</FONT>     *<a name="line.34"></a>
<FONT color="green">035</FONT>     * &lt;p&gt;Some examples:&lt;br&gt;<a name="line.35"></a>
<FONT color="green">036</FONT>     * &lt;ul&gt;<a name="line.36"></a>
<FONT color="green">037</FONT>     * &lt;li&gt;&lt;code&gt;com/t?st.jsp&lt;/code&gt; - matches &lt;code&gt;com/test.jsp&lt;/code&gt; but also<a name="line.37"></a>
<FONT color="green">038</FONT>     * &lt;code&gt;com/tast.jsp&lt;/code&gt; or &lt;code&gt;com/txst.jsp&lt;/code&gt;&lt;/li&gt;<a name="line.38"></a>
<FONT color="green">039</FONT>     * &lt;li&gt;&lt;code&gt;com/*.jsp&lt;/code&gt; - matches all &lt;code&gt;.jsp&lt;/code&gt; files in the<a name="line.39"></a>
<FONT color="green">040</FONT>     * &lt;code&gt;com&lt;/code&gt; directory&lt;/li&gt;<a name="line.40"></a>
<FONT color="green">041</FONT>     * &lt;li&gt;&lt;code&gt;com/&amp;#42;&amp;#42;/test.jsp&lt;/code&gt; - matches all &lt;code&gt;test.jsp&lt;/code&gt;<a name="line.41"></a>
<FONT color="green">042</FONT>     * files underneath the &lt;code&gt;com&lt;/code&gt; path&lt;/li&gt;<a name="line.42"></a>
<FONT color="green">043</FONT>     * &lt;li&gt;&lt;code&gt;org/apache/shiro/&amp;#42;&amp;#42;/*.jsp&lt;/code&gt; - matches all &lt;code&gt;.jsp&lt;/code&gt;<a name="line.43"></a>
<FONT color="green">044</FONT>     * files underneath the &lt;code&gt;org/apache/shiro&lt;/code&gt; path&lt;/li&gt;<a name="line.44"></a>
<FONT color="green">045</FONT>     * &lt;li&gt;&lt;code&gt;org/&amp;#42;&amp;#42;/servlet/bla.jsp&lt;/code&gt; - matches<a name="line.45"></a>
<FONT color="green">046</FONT>     * &lt;code&gt;org/apache/shiro/servlet/bla.jsp&lt;/code&gt; but also<a name="line.46"></a>
<FONT color="green">047</FONT>     * &lt;code&gt;org/apache/shiro/testing/servlet/bla.jsp&lt;/code&gt; and<a name="line.47"></a>
<FONT color="green">048</FONT>     * &lt;code&gt;org/servlet/bla.jsp&lt;/code&gt;&lt;/li&gt;<a name="line.48"></a>
<FONT color="green">049</FONT>     * &lt;/ul&gt;<a name="line.49"></a>
<FONT color="green">050</FONT>     *<a name="line.50"></a>
<FONT color="green">051</FONT>     * &lt;p&gt;&lt;b&gt;N.B.&lt;/b&gt;: This class was borrowed (with much appreciation) from the<a name="line.51"></a>
<FONT color="green">052</FONT>     * &lt;a href="http://www.springframework.org"&gt;Spring Framework&lt;/a&gt; with modifications.  We didn't want to reinvent the<a name="line.52"></a>
<FONT color="green">053</FONT>     * wheel of great work they've done, but also didn't want to force every Shiro user to depend on Spring&lt;/p&gt;<a name="line.53"></a>
<FONT color="green">054</FONT>     *<a name="line.54"></a>
<FONT color="green">055</FONT>     * &lt;p&gt;As per the Apache 2.0 license, the original copyright notice and all author and copyright information have<a name="line.55"></a>
<FONT color="green">056</FONT>     * remained in tact.&lt;/p&gt;<a name="line.56"></a>
<FONT color="green">057</FONT>     *<a name="line.57"></a>
<FONT color="green">058</FONT>     * @since 16.07.2003<a name="line.58"></a>
<FONT color="green">059</FONT>     */<a name="line.59"></a>
<FONT color="green">060</FONT>    public class AntPathMatcher implements PatternMatcher {<a name="line.60"></a>
<FONT color="green">061</FONT>    <a name="line.61"></a>
<FONT color="green">062</FONT>        //TODO - complete JavaDoc<a name="line.62"></a>
<FONT color="green">063</FONT>    <a name="line.63"></a>
<FONT color="green">064</FONT>        /**<a name="line.64"></a>
<FONT color="green">065</FONT>         * Default path separator: "/"<a name="line.65"></a>
<FONT color="green">066</FONT>         */<a name="line.66"></a>
<FONT color="green">067</FONT>        public static final String DEFAULT_PATH_SEPARATOR = "/";<a name="line.67"></a>
<FONT color="green">068</FONT>    <a name="line.68"></a>
<FONT color="green">069</FONT>        private String pathSeparator = DEFAULT_PATH_SEPARATOR;<a name="line.69"></a>
<FONT color="green">070</FONT>    <a name="line.70"></a>
<FONT color="green">071</FONT>    <a name="line.71"></a>
<FONT color="green">072</FONT>        /**<a name="line.72"></a>
<FONT color="green">073</FONT>         * Set the path separator to use for pattern parsing.<a name="line.73"></a>
<FONT color="green">074</FONT>         * Default is "/", as in Ant.<a name="line.74"></a>
<FONT color="green">075</FONT>         */<a name="line.75"></a>
<FONT color="green">076</FONT>        public void setPathSeparator(String pathSeparator) {<a name="line.76"></a>
<FONT color="green">077</FONT>            this.pathSeparator = (pathSeparator != null ? pathSeparator : DEFAULT_PATH_SEPARATOR);<a name="line.77"></a>
<FONT color="green">078</FONT>        }<a name="line.78"></a>
<FONT color="green">079</FONT>    <a name="line.79"></a>
<FONT color="green">080</FONT>    <a name="line.80"></a>
<FONT color="green">081</FONT>        public boolean isPattern(String path) {<a name="line.81"></a>
<FONT color="green">082</FONT>            return (path.indexOf('*') != -1 || path.indexOf('?') != -1);<a name="line.82"></a>
<FONT color="green">083</FONT>        }<a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>        public boolean matches(String pattern, String source) {<a name="line.85"></a>
<FONT color="green">086</FONT>            return match(pattern, source);<a name="line.86"></a>
<FONT color="green">087</FONT>        }<a name="line.87"></a>
<FONT color="green">088</FONT>    <a name="line.88"></a>
<FONT color="green">089</FONT>        public boolean match(String pattern, String path) {<a name="line.89"></a>
<FONT color="green">090</FONT>            return doMatch(pattern, path, true);<a name="line.90"></a>
<FONT color="green">091</FONT>        }<a name="line.91"></a>
<FONT color="green">092</FONT>    <a name="line.92"></a>
<FONT color="green">093</FONT>        public boolean matchStart(String pattern, String path) {<a name="line.93"></a>
<FONT color="green">094</FONT>            return doMatch(pattern, path, false);<a name="line.94"></a>
<FONT color="green">095</FONT>        }<a name="line.95"></a>
<FONT color="green">096</FONT>    <a name="line.96"></a>
<FONT color="green">097</FONT>    <a name="line.97"></a>
<FONT color="green">098</FONT>        /**<a name="line.98"></a>
<FONT color="green">099</FONT>         * Actually match the given &lt;code&gt;path&lt;/code&gt; against the given &lt;code&gt;pattern&lt;/code&gt;.<a name="line.99"></a>
<FONT color="green">100</FONT>         *<a name="line.100"></a>
<FONT color="green">101</FONT>         * @param pattern   the pattern to match against<a name="line.101"></a>
<FONT color="green">102</FONT>         * @param path      the path String to test<a name="line.102"></a>
<FONT color="green">103</FONT>         * @param fullMatch whether a full pattern match is required<a name="line.103"></a>
<FONT color="green">104</FONT>         *                  (else a pattern match as far as the given base path goes is sufficient)<a name="line.104"></a>
<FONT color="green">105</FONT>         * @return &lt;code&gt;true&lt;/code&gt; if the supplied &lt;code&gt;path&lt;/code&gt; matched,<a name="line.105"></a>
<FONT color="green">106</FONT>         *         &lt;code&gt;false&lt;/code&gt; if it didn't<a name="line.106"></a>
<FONT color="green">107</FONT>         */<a name="line.107"></a>
<FONT color="green">108</FONT>        protected boolean doMatch(String pattern, String path, boolean fullMatch) {<a name="line.108"></a>
<FONT color="green">109</FONT>            if (path.startsWith(this.pathSeparator) != pattern.startsWith(this.pathSeparator)) {<a name="line.109"></a>
<FONT color="green">110</FONT>                return false;<a name="line.110"></a>
<FONT color="green">111</FONT>            }<a name="line.111"></a>
<FONT color="green">112</FONT>    <a name="line.112"></a>
<FONT color="green">113</FONT>            String[] pattDirs = StringUtils.tokenizeToStringArray(pattern, this.pathSeparator);<a name="line.113"></a>
<FONT color="green">114</FONT>            String[] pathDirs = StringUtils.tokenizeToStringArray(path, this.pathSeparator);<a name="line.114"></a>
<FONT color="green">115</FONT>    <a name="line.115"></a>
<FONT color="green">116</FONT>            int pattIdxStart = 0;<a name="line.116"></a>
<FONT color="green">117</FONT>            int pattIdxEnd = pattDirs.length - 1;<a name="line.117"></a>
<FONT color="green">118</FONT>            int pathIdxStart = 0;<a name="line.118"></a>
<FONT color="green">119</FONT>            int pathIdxEnd = pathDirs.length - 1;<a name="line.119"></a>
<FONT color="green">120</FONT>    <a name="line.120"></a>
<FONT color="green">121</FONT>            // Match all elements up to the first **<a name="line.121"></a>
<FONT color="green">122</FONT>            while (pattIdxStart &lt;= pattIdxEnd &amp;&amp; pathIdxStart &lt;= pathIdxEnd) {<a name="line.122"></a>
<FONT color="green">123</FONT>                String patDir = pattDirs[pattIdxStart];<a name="line.123"></a>
<FONT color="green">124</FONT>                if ("**".equals(patDir)) {<a name="line.124"></a>
<FONT color="green">125</FONT>                    break;<a name="line.125"></a>
<FONT color="green">126</FONT>                }<a name="line.126"></a>
<FONT color="green">127</FONT>                if (!matchStrings(patDir, pathDirs[pathIdxStart])) {<a name="line.127"></a>
<FONT color="green">128</FONT>                    return false;<a name="line.128"></a>
<FONT color="green">129</FONT>                }<a name="line.129"></a>
<FONT color="green">130</FONT>                pattIdxStart++;<a name="line.130"></a>
<FONT color="green">131</FONT>                pathIdxStart++;<a name="line.131"></a>
<FONT color="green">132</FONT>            }<a name="line.132"></a>
<FONT color="green">133</FONT>    <a name="line.133"></a>
<FONT color="green">134</FONT>            if (pathIdxStart &gt; pathIdxEnd) {<a name="line.134"></a>
<FONT color="green">135</FONT>                // Path is exhausted, only match if rest of pattern is * or **'s<a name="line.135"></a>
<FONT color="green">136</FONT>                if (pattIdxStart &gt; pattIdxEnd) {<a name="line.136"></a>
<FONT color="green">137</FONT>                    return (pattern.endsWith(this.pathSeparator) ?<a name="line.137"></a>
<FONT color="green">138</FONT>                            path.endsWith(this.pathSeparator) : !path.endsWith(this.pathSeparator));<a name="line.138"></a>
<FONT color="green">139</FONT>                }<a name="line.139"></a>
<FONT color="green">140</FONT>                if (!fullMatch) {<a name="line.140"></a>
<FONT color="green">141</FONT>                    return true;<a name="line.141"></a>
<FONT color="green">142</FONT>                }<a name="line.142"></a>
<FONT color="green">143</FONT>                if (pattIdxStart == pattIdxEnd &amp;&amp; pattDirs[pattIdxStart].equals("*") &amp;&amp;<a name="line.143"></a>
<FONT color="green">144</FONT>                        path.endsWith(this.pathSeparator)) {<a name="line.144"></a>
<FONT color="green">145</FONT>                    return true;<a name="line.145"></a>
<FONT color="green">146</FONT>                }<a name="line.146"></a>
<FONT color="green">147</FONT>                for (int i = pattIdxStart; i &lt;= pattIdxEnd; i++) {<a name="line.147"></a>
<FONT color="green">148</FONT>                    if (!pattDirs[i].equals("**")) {<a name="line.148"></a>
<FONT color="green">149</FONT>                        return false;<a name="line.149"></a>
<FONT color="green">150</FONT>                    }<a name="line.150"></a>
<FONT color="green">151</FONT>                }<a name="line.151"></a>
<FONT color="green">152</FONT>                return true;<a name="line.152"></a>
<FONT color="green">153</FONT>            } else if (pattIdxStart &gt; pattIdxEnd) {<a name="line.153"></a>
<FONT color="green">154</FONT>                // String not exhausted, but pattern is. Failure.<a name="line.154"></a>
<FONT color="green">155</FONT>                return false;<a name="line.155"></a>
<FONT color="green">156</FONT>            } else if (!fullMatch &amp;&amp; "**".equals(pattDirs[pattIdxStart])) {<a name="line.156"></a>
<FONT color="green">157</FONT>                // Path start definitely matches due to "**" part in pattern.<a name="line.157"></a>
<FONT color="green">158</FONT>                return true;<a name="line.158"></a>
<FONT color="green">159</FONT>            }<a name="line.159"></a>
<FONT color="green">160</FONT>    <a name="line.160"></a>
<FONT color="green">161</FONT>            // up to last '**'<a name="line.161"></a>
<FONT color="green">162</FONT>            while (pattIdxStart &lt;= pattIdxEnd &amp;&amp; pathIdxStart &lt;= pathIdxEnd) {<a name="line.162"></a>
<FONT color="green">163</FONT>                String patDir = pattDirs[pattIdxEnd];<a name="line.163"></a>
<FONT color="green">164</FONT>                if (patDir.equals("**")) {<a name="line.164"></a>
<FONT color="green">165</FONT>                    break;<a name="line.165"></a>
<FONT color="green">166</FONT>                }<a name="line.166"></a>
<FONT color="green">167</FONT>                if (!matchStrings(patDir, pathDirs[pathIdxEnd])) {<a name="line.167"></a>
<FONT color="green">168</FONT>                    return false;<a name="line.168"></a>
<FONT color="green">169</FONT>                }<a name="line.169"></a>
<FONT color="green">170</FONT>                pattIdxEnd--;<a name="line.170"></a>
<FONT color="green">171</FONT>                pathIdxEnd--;<a name="line.171"></a>
<FONT color="green">172</FONT>            }<a name="line.172"></a>
<FONT color="green">173</FONT>            if (pathIdxStart &gt; pathIdxEnd) {<a name="line.173"></a>
<FONT color="green">174</FONT>                // String is exhausted<a name="line.174"></a>
<FONT color="green">175</FONT>                for (int i = pattIdxStart; i &lt;= pattIdxEnd; i++) {<a name="line.175"></a>
<FONT color="green">176</FONT>                    if (!pattDirs[i].equals("**")) {<a name="line.176"></a>
<FONT color="green">177</FONT>                        return false;<a name="line.177"></a>
<FONT color="green">178</FONT>                    }<a name="line.178"></a>
<FONT color="green">179</FONT>                }<a name="line.179"></a>
<FONT color="green">180</FONT>                return true;<a name="line.180"></a>
<FONT color="green">181</FONT>            }<a name="line.181"></a>
<FONT color="green">182</FONT>    <a name="line.182"></a>
<FONT color="green">183</FONT>            while (pattIdxStart != pattIdxEnd &amp;&amp; pathIdxStart &lt;= pathIdxEnd) {<a name="line.183"></a>
<FONT color="green">184</FONT>                int patIdxTmp = -1;<a name="line.184"></a>
<FONT color="green">185</FONT>                for (int i = pattIdxStart + 1; i &lt;= pattIdxEnd; i++) {<a name="line.185"></a>
<FONT color="green">186</FONT>                    if (pattDirs[i].equals("**")) {<a name="line.186"></a>
<FONT color="green">187</FONT>                        patIdxTmp = i;<a name="line.187"></a>
<FONT color="green">188</FONT>                        break;<a name="line.188"></a>
<FONT color="green">189</FONT>                    }<a name="line.189"></a>
<FONT color="green">190</FONT>                }<a name="line.190"></a>
<FONT color="green">191</FONT>                if (patIdxTmp == pattIdxStart + 1) {<a name="line.191"></a>
<FONT color="green">192</FONT>                    // '**/**' situation, so skip one<a name="line.192"></a>
<FONT color="green">193</FONT>                    pattIdxStart++;<a name="line.193"></a>
<FONT color="green">194</FONT>                    continue;<a name="line.194"></a>
<FONT color="green">195</FONT>                }<a name="line.195"></a>
<FONT color="green">196</FONT>                // Find the pattern between padIdxStart &amp; padIdxTmp in str between<a name="line.196"></a>
<FONT color="green">197</FONT>                // strIdxStart &amp; strIdxEnd<a name="line.197"></a>
<FONT color="green">198</FONT>                int patLength = (patIdxTmp - pattIdxStart - 1);<a name="line.198"></a>
<FONT color="green">199</FONT>                int strLength = (pathIdxEnd - pathIdxStart + 1);<a name="line.199"></a>
<FONT color="green">200</FONT>                int foundIdx = -1;<a name="line.200"></a>
<FONT color="green">201</FONT>    <a name="line.201"></a>
<FONT color="green">202</FONT>                strLoop:<a name="line.202"></a>
<FONT color="green">203</FONT>                for (int i = 0; i &lt;= strLength - patLength; i++) {<a name="line.203"></a>
<FONT color="green">204</FONT>                    for (int j = 0; j &lt; patLength; j++) {<a name="line.204"></a>
<FONT color="green">205</FONT>                        String subPat = (String) pattDirs[pattIdxStart + j + 1];<a name="line.205"></a>
<FONT color="green">206</FONT>                        String subStr = (String) pathDirs[pathIdxStart + i + j];<a name="line.206"></a>
<FONT color="green">207</FONT>                        if (!matchStrings(subPat, subStr)) {<a name="line.207"></a>
<FONT color="green">208</FONT>                            continue strLoop;<a name="line.208"></a>
<FONT color="green">209</FONT>                        }<a name="line.209"></a>
<FONT color="green">210</FONT>                    }<a name="line.210"></a>
<FONT color="green">211</FONT>                    foundIdx = pathIdxStart + i;<a name="line.211"></a>
<FONT color="green">212</FONT>                    break;<a name="line.212"></a>
<FONT color="green">213</FONT>                }<a name="line.213"></a>
<FONT color="green">214</FONT>    <a name="line.214"></a>
<FONT color="green">215</FONT>                if (foundIdx == -1) {<a name="line.215"></a>
<FONT color="green">216</FONT>                    return false;<a name="line.216"></a>
<FONT color="green">217</FONT>                }<a name="line.217"></a>
<FONT color="green">218</FONT>    <a name="line.218"></a>
<FONT color="green">219</FONT>                pattIdxStart = patIdxTmp;<a name="line.219"></a>
<FONT color="green">220</FONT>                pathIdxStart = foundIdx + patLength;<a name="line.220"></a>
<FONT color="green">221</FONT>            }<a name="line.221"></a>
<FONT color="green">222</FONT>    <a name="line.222"></a>
<FONT color="green">223</FONT>            for (int i = pattIdxStart; i &lt;= pattIdxEnd; i++) {<a name="line.223"></a>
<FONT color="green">224</FONT>                if (!pattDirs[i].equals("**")) {<a name="line.224"></a>
<FONT color="green">225</FONT>                    return false;<a name="line.225"></a>
<FONT color="green">226</FONT>                }<a name="line.226"></a>
<FONT color="green">227</FONT>            }<a name="line.227"></a>
<FONT color="green">228</FONT>    <a name="line.228"></a>
<FONT color="green">229</FONT>            return true;<a name="line.229"></a>
<FONT color="green">230</FONT>        }<a name="line.230"></a>
<FONT color="green">231</FONT>    <a name="line.231"></a>
<FONT color="green">232</FONT>        /**<a name="line.232"></a>
<FONT color="green">233</FONT>         * Tests whether or not a string matches against a pattern.<a name="line.233"></a>
<FONT color="green">234</FONT>         * The pattern may contain two special characters:&lt;br&gt;<a name="line.234"></a>
<FONT color="green">235</FONT>         * '*' means zero or more characters&lt;br&gt;<a name="line.235"></a>
<FONT color="green">236</FONT>         * '?' means one and only one character<a name="line.236"></a>
<FONT color="green">237</FONT>         *<a name="line.237"></a>
<FONT color="green">238</FONT>         * @param pattern pattern to match against.<a name="line.238"></a>
<FONT color="green">239</FONT>         *                Must not be &lt;code&gt;null&lt;/code&gt;.<a name="line.239"></a>
<FONT color="green">240</FONT>         * @param str     string which must be matched against the pattern.<a name="line.240"></a>
<FONT color="green">241</FONT>         *                Must not be &lt;code&gt;null&lt;/code&gt;.<a name="line.241"></a>
<FONT color="green">242</FONT>         * @return &lt;code&gt;true&lt;/code&gt; if the string matches against the<a name="line.242"></a>
<FONT color="green">243</FONT>         *         pattern, or &lt;code&gt;false&lt;/code&gt; otherwise.<a name="line.243"></a>
<FONT color="green">244</FONT>         */<a name="line.244"></a>
<FONT color="green">245</FONT>        private boolean matchStrings(String pattern, String str) {<a name="line.245"></a>
<FONT color="green">246</FONT>            char[] patArr = pattern.toCharArray();<a name="line.246"></a>
<FONT color="green">247</FONT>            char[] strArr = str.toCharArray();<a name="line.247"></a>
<FONT color="green">248</FONT>            int patIdxStart = 0;<a name="line.248"></a>
<FONT color="green">249</FONT>            int patIdxEnd = patArr.length - 1;<a name="line.249"></a>
<FONT color="green">250</FONT>            int strIdxStart = 0;<a name="line.250"></a>
<FONT color="green">251</FONT>            int strIdxEnd = strArr.length - 1;<a name="line.251"></a>
<FONT color="green">252</FONT>            char ch;<a name="line.252"></a>
<FONT color="green">253</FONT>    <a name="line.253"></a>
<FONT color="green">254</FONT>            boolean containsStar = false;<a name="line.254"></a>
<FONT color="green">255</FONT>            for (char aPatArr : patArr) {<a name="line.255"></a>
<FONT color="green">256</FONT>                if (aPatArr == '*') {<a name="line.256"></a>
<FONT color="green">257</FONT>                    containsStar = true;<a name="line.257"></a>
<FONT color="green">258</FONT>                    break;<a name="line.258"></a>
<FONT color="green">259</FONT>                }<a name="line.259"></a>
<FONT color="green">260</FONT>            }<a name="line.260"></a>
<FONT color="green">261</FONT>    <a name="line.261"></a>
<FONT color="green">262</FONT>            if (!containsStar) {<a name="line.262"></a>
<FONT color="green">263</FONT>                // No '*'s, so we make a shortcut<a name="line.263"></a>
<FONT color="green">264</FONT>                if (patIdxEnd != strIdxEnd) {<a name="line.264"></a>
<FONT color="green">265</FONT>                    return false; // Pattern and string do not have the same size<a name="line.265"></a>
<FONT color="green">266</FONT>                }<a name="line.266"></a>
<FONT color="green">267</FONT>                for (int i = 0; i &lt;= patIdxEnd; i++) {<a name="line.267"></a>
<FONT color="green">268</FONT>                    ch = patArr[i];<a name="line.268"></a>
<FONT color="green">269</FONT>                    if (ch != '?') {<a name="line.269"></a>
<FONT color="green">270</FONT>                        if (ch != strArr[i]) {<a name="line.270"></a>
<FONT color="green">271</FONT>                            return false;// Character mismatch<a name="line.271"></a>
<FONT color="green">272</FONT>                        }<a name="line.272"></a>
<FONT color="green">273</FONT>                    }<a name="line.273"></a>
<FONT color="green">274</FONT>                }<a name="line.274"></a>
<FONT color="green">275</FONT>                return true; // String matches against pattern<a name="line.275"></a>
<FONT color="green">276</FONT>            }<a name="line.276"></a>
<FONT color="green">277</FONT>    <a name="line.277"></a>
<FONT color="green">278</FONT>    <a name="line.278"></a>
<FONT color="green">279</FONT>            if (patIdxEnd == 0) {<a name="line.279"></a>
<FONT color="green">280</FONT>                return true; // Pattern contains only '*', which matches anything<a name="line.280"></a>
<FONT color="green">281</FONT>            }<a name="line.281"></a>
<FONT color="green">282</FONT>    <a name="line.282"></a>
<FONT color="green">283</FONT>            // Process characters before first star<a name="line.283"></a>
<FONT color="green">284</FONT>            while ((ch = patArr[patIdxStart]) != '*' &amp;&amp; strIdxStart &lt;= strIdxEnd) {<a name="line.284"></a>
<FONT color="green">285</FONT>                if (ch != '?') {<a name="line.285"></a>
<FONT color="green">286</FONT>                    if (ch != strArr[strIdxStart]) {<a name="line.286"></a>
<FONT color="green">287</FONT>                        return false;// Character mismatch<a name="line.287"></a>
<FONT color="green">288</FONT>                    }<a name="line.288"></a>
<FONT color="green">289</FONT>                }<a name="line.289"></a>
<FONT color="green">290</FONT>                patIdxStart++;<a name="line.290"></a>
<FONT color="green">291</FONT>                strIdxStart++;<a name="line.291"></a>
<FONT color="green">292</FONT>            }<a name="line.292"></a>
<FONT color="green">293</FONT>            if (strIdxStart &gt; strIdxEnd) {<a name="line.293"></a>
<FONT color="green">294</FONT>                // All characters in the string are used. Check if only '*'s are<a name="line.294"></a>
<FONT color="green">295</FONT>                // left in the pattern. If so, we succeeded. Otherwise failure.<a name="line.295"></a>
<FONT color="green">296</FONT>                for (int i = patIdxStart; i &lt;= patIdxEnd; i++) {<a name="line.296"></a>
<FONT color="green">297</FONT>                    if (patArr[i] != '*') {<a name="line.297"></a>
<FONT color="green">298</FONT>                        return false;<a name="line.298"></a>
<FONT color="green">299</FONT>                    }<a name="line.299"></a>
<FONT color="green">300</FONT>                }<a name="line.300"></a>
<FONT color="green">301</FONT>                return true;<a name="line.301"></a>
<FONT color="green">302</FONT>            }<a name="line.302"></a>
<FONT color="green">303</FONT>    <a name="line.303"></a>
<FONT color="green">304</FONT>            // Process characters after last star<a name="line.304"></a>
<FONT color="green">305</FONT>            while ((ch = patArr[patIdxEnd]) != '*' &amp;&amp; strIdxStart &lt;= strIdxEnd) {<a name="line.305"></a>
<FONT color="green">306</FONT>                if (ch != '?') {<a name="line.306"></a>
<FONT color="green">307</FONT>                    if (ch != strArr[strIdxEnd]) {<a name="line.307"></a>
<FONT color="green">308</FONT>                        return false;// Character mismatch<a name="line.308"></a>
<FONT color="green">309</FONT>                    }<a name="line.309"></a>
<FONT color="green">310</FONT>                }<a name="line.310"></a>
<FONT color="green">311</FONT>                patIdxEnd--;<a name="line.311"></a>
<FONT color="green">312</FONT>                strIdxEnd--;<a name="line.312"></a>
<FONT color="green">313</FONT>            }<a name="line.313"></a>
<FONT color="green">314</FONT>            if (strIdxStart &gt; strIdxEnd) {<a name="line.314"></a>
<FONT color="green">315</FONT>                // All characters in the string are used. Check if only '*'s are<a name="line.315"></a>
<FONT color="green">316</FONT>                // left in the pattern. If so, we succeeded. Otherwise failure.<a name="line.316"></a>
<FONT color="green">317</FONT>                for (int i = patIdxStart; i &lt;= patIdxEnd; i++) {<a name="line.317"></a>
<FONT color="green">318</FONT>                    if (patArr[i] != '*') {<a name="line.318"></a>
<FONT color="green">319</FONT>                        return false;<a name="line.319"></a>
<FONT color="green">320</FONT>                    }<a name="line.320"></a>
<FONT color="green">321</FONT>                }<a name="line.321"></a>
<FONT color="green">322</FONT>                return true;<a name="line.322"></a>
<FONT color="green">323</FONT>            }<a name="line.323"></a>
<FONT color="green">324</FONT>    <a name="line.324"></a>
<FONT color="green">325</FONT>            // process pattern between stars. padIdxStart and patIdxEnd point<a name="line.325"></a>
<FONT color="green">326</FONT>            // always to a '*'.<a name="line.326"></a>
<FONT color="green">327</FONT>            while (patIdxStart != patIdxEnd &amp;&amp; strIdxStart &lt;= strIdxEnd) {<a name="line.327"></a>
<FONT color="green">328</FONT>                int patIdxTmp = -1;<a name="line.328"></a>
<FONT color="green">329</FONT>                for (int i = patIdxStart + 1; i &lt;= patIdxEnd; i++) {<a name="line.329"></a>
<FONT color="green">330</FONT>                    if (patArr[i] == '*') {<a name="line.330"></a>
<FONT color="green">331</FONT>                        patIdxTmp = i;<a name="line.331"></a>
<FONT color="green">332</FONT>                        break;<a name="line.332"></a>
<FONT color="green">333</FONT>                    }<a name="line.333"></a>
<FONT color="green">334</FONT>                }<a name="line.334"></a>
<FONT color="green">335</FONT>                if (patIdxTmp == patIdxStart + 1) {<a name="line.335"></a>
<FONT color="green">336</FONT>                    // Two stars next to each other, skip the first one.<a name="line.336"></a>
<FONT color="green">337</FONT>                    patIdxStart++;<a name="line.337"></a>
<FONT color="green">338</FONT>                    continue;<a name="line.338"></a>
<FONT color="green">339</FONT>                }<a name="line.339"></a>
<FONT color="green">340</FONT>                // Find the pattern between padIdxStart &amp; padIdxTmp in str between<a name="line.340"></a>
<FONT color="green">341</FONT>                // strIdxStart &amp; strIdxEnd<a name="line.341"></a>
<FONT color="green">342</FONT>                int patLength = (patIdxTmp - patIdxStart - 1);<a name="line.342"></a>
<FONT color="green">343</FONT>                int strLength = (strIdxEnd - strIdxStart + 1);<a name="line.343"></a>
<FONT color="green">344</FONT>                int foundIdx = -1;<a name="line.344"></a>
<FONT color="green">345</FONT>                strLoop:<a name="line.345"></a>
<FONT color="green">346</FONT>                for (int i = 0; i &lt;= strLength - patLength; i++) {<a name="line.346"></a>
<FONT color="green">347</FONT>                    for (int j = 0; j &lt; patLength; j++) {<a name="line.347"></a>
<FONT color="green">348</FONT>                        ch = patArr[patIdxStart + j + 1];<a name="line.348"></a>
<FONT color="green">349</FONT>                        if (ch != '?') {<a name="line.349"></a>
<FONT color="green">350</FONT>                            if (ch != strArr[strIdxStart + i + j]) {<a name="line.350"></a>
<FONT color="green">351</FONT>                                continue strLoop;<a name="line.351"></a>
<FONT color="green">352</FONT>                            }<a name="line.352"></a>
<FONT color="green">353</FONT>                        }<a name="line.353"></a>
<FONT color="green">354</FONT>                    }<a name="line.354"></a>
<FONT color="green">355</FONT>    <a name="line.355"></a>
<FONT color="green">356</FONT>                    foundIdx = strIdxStart + i;<a name="line.356"></a>
<FONT color="green">357</FONT>                    break;<a name="line.357"></a>
<FONT color="green">358</FONT>                }<a name="line.358"></a>
<FONT color="green">359</FONT>    <a name="line.359"></a>
<FONT color="green">360</FONT>                if (foundIdx == -1) {<a name="line.360"></a>
<FONT color="green">361</FONT>                    return false;<a name="line.361"></a>
<FONT color="green">362</FONT>                }<a name="line.362"></a>
<FONT color="green">363</FONT>    <a name="line.363"></a>
<FONT color="green">364</FONT>                patIdxStart = patIdxTmp;<a name="line.364"></a>
<FONT color="green">365</FONT>                strIdxStart = foundIdx + patLength;<a name="line.365"></a>
<FONT color="green">366</FONT>            }<a name="line.366"></a>
<FONT color="green">367</FONT>    <a name="line.367"></a>
<FONT color="green">368</FONT>            // All characters in the string are used. Check if only '*'s are left<a name="line.368"></a>
<FONT color="green">369</FONT>            // in the pattern. If so, we succeeded. Otherwise failure.<a name="line.369"></a>
<FONT color="green">370</FONT>            for (int i = patIdxStart; i &lt;= patIdxEnd; i++) {<a name="line.370"></a>
<FONT color="green">371</FONT>                if (patArr[i] != '*') {<a name="line.371"></a>
<FONT color="green">372</FONT>                    return false;<a name="line.372"></a>
<FONT color="green">373</FONT>                }<a name="line.373"></a>
<FONT color="green">374</FONT>            }<a name="line.374"></a>
<FONT color="green">375</FONT>    <a name="line.375"></a>
<FONT color="green">376</FONT>            return true;<a name="line.376"></a>
<FONT color="green">377</FONT>        }<a name="line.377"></a>
<FONT color="green">378</FONT>    <a name="line.378"></a>
<FONT color="green">379</FONT>        /**<a name="line.379"></a>
<FONT color="green">380</FONT>         * Given a pattern and a full path, determine the pattern-mapped part.<a name="line.380"></a>
<FONT color="green">381</FONT>         * &lt;p&gt;For example:<a name="line.381"></a>
<FONT color="green">382</FONT>         * &lt;ul&gt;<a name="line.382"></a>
<FONT color="green">383</FONT>         * &lt;li&gt;'&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt; -&gt; ''&lt;/li&gt;<a name="line.383"></a>
<FONT color="green">384</FONT>         * &lt;li&gt;'&lt;code&gt;/docs/*&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit&lt;/code&gt; -&gt; '&lt;code&gt;cvs/commit&lt;/code&gt;'&lt;/li&gt;<a name="line.384"></a>
<FONT color="green">385</FONT>         * &lt;li&gt;'&lt;code&gt;/docs/cvs/*.html&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt; -&gt; '&lt;code&gt;commit.html&lt;/code&gt;'&lt;/li&gt;<a name="line.385"></a>
<FONT color="green">386</FONT>         * &lt;li&gt;'&lt;code&gt;/docs/**&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit&lt;/code&gt; -&gt; '&lt;code&gt;cvs/commit&lt;/code&gt;'&lt;/li&gt;<a name="line.386"></a>
<FONT color="green">387</FONT>         * &lt;li&gt;'&lt;code&gt;/docs/**\/*.html&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt; -&gt; '&lt;code&gt;cvs/commit.html&lt;/code&gt;'&lt;/li&gt;<a name="line.387"></a>
<FONT color="green">388</FONT>         * &lt;li&gt;'&lt;code&gt;/*.html&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt; -&gt; '&lt;code&gt;docs/cvs/commit.html&lt;/code&gt;'&lt;/li&gt;<a name="line.388"></a>
<FONT color="green">389</FONT>         * &lt;li&gt;'&lt;code&gt;*.html&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt; -&gt; '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt;'&lt;/li&gt;<a name="line.389"></a>
<FONT color="green">390</FONT>         * &lt;li&gt;'&lt;code&gt;*&lt;/code&gt;' and '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt; -&gt; '&lt;code&gt;/docs/cvs/commit.html&lt;/code&gt;'&lt;/li&gt;<a name="line.390"></a>
<FONT color="green">391</FONT>         * &lt;/ul&gt;<a name="line.391"></a>
<FONT color="green">392</FONT>         * &lt;p&gt;Assumes that {@link #match} returns &lt;code&gt;true&lt;/code&gt; for '&lt;code&gt;pattern&lt;/code&gt;'<a name="line.392"></a>
<FONT color="green">393</FONT>         * and '&lt;code&gt;path&lt;/code&gt;', but does &lt;strong&gt;not&lt;/strong&gt; enforce this.<a name="line.393"></a>
<FONT color="green">394</FONT>         */<a name="line.394"></a>
<FONT color="green">395</FONT>        public String extractPathWithinPattern(String pattern, String path) {<a name="line.395"></a>
<FONT color="green">396</FONT>            String[] patternParts = StringUtils.tokenizeToStringArray(pattern, this.pathSeparator);<a name="line.396"></a>
<FONT color="green">397</FONT>            String[] pathParts = StringUtils.tokenizeToStringArray(path, this.pathSeparator);<a name="line.397"></a>
<FONT color="green">398</FONT>    <a name="line.398"></a>
<FONT color="green">399</FONT>            StringBuilder buffer = new StringBuilder();<a name="line.399"></a>
<FONT color="green">400</FONT>    <a name="line.400"></a>
<FONT color="green">401</FONT>            // Add any path parts that have a wildcarded pattern part.<a name="line.401"></a>
<FONT color="green">402</FONT>            int puts = 0;<a name="line.402"></a>
<FONT color="green">403</FONT>            for (int i = 0; i &lt; patternParts.length; i++) {<a name="line.403"></a>
<FONT color="green">404</FONT>                String patternPart = patternParts[i];<a name="line.404"></a>
<FONT color="green">405</FONT>                if ((patternPart.indexOf('*') &gt; -1 || patternPart.indexOf('?') &gt; -1) &amp;&amp; pathParts.length &gt;= i + 1) {<a name="line.405"></a>
<FONT color="green">406</FONT>                    if (puts &gt; 0 || (i == 0 &amp;&amp; !pattern.startsWith(this.pathSeparator))) {<a name="line.406"></a>
<FONT color="green">407</FONT>                        buffer.append(this.pathSeparator);<a name="line.407"></a>
<FONT color="green">408</FONT>                    }<a name="line.408"></a>
<FONT color="green">409</FONT>                    buffer.append(pathParts[i]);<a name="line.409"></a>
<FONT color="green">410</FONT>                    puts++;<a name="line.410"></a>
<FONT color="green">411</FONT>                }<a name="line.411"></a>
<FONT color="green">412</FONT>            }<a name="line.412"></a>
<FONT color="green">413</FONT>    <a name="line.413"></a>
<FONT color="green">414</FONT>            // Append any trailing path parts.<a name="line.414"></a>
<FONT color="green">415</FONT>            for (int i = patternParts.length; i &lt; pathParts.length; i++) {<a name="line.415"></a>
<FONT color="green">416</FONT>                if (puts &gt; 0 || i &gt; 0) {<a name="line.416"></a>
<FONT color="green">417</FONT>                    buffer.append(this.pathSeparator);<a name="line.417"></a>
<FONT color="green">418</FONT>                }<a name="line.418"></a>
<FONT color="green">419</FONT>                buffer.append(pathParts[i]);<a name="line.419"></a>
<FONT color="green">420</FONT>            }<a name="line.420"></a>
<FONT color="green">421</FONT>    <a name="line.421"></a>
<FONT color="green">422</FONT>            return buffer.toString();<a name="line.422"></a>
<FONT color="green">423</FONT>        }<a name="line.423"></a>
<FONT color="green">424</FONT>    <a name="line.424"></a>
<FONT color="green">425</FONT>    }<a name="line.425"></a>




























































</PRE>
</BODY>
</HTML>
