<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="de">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>package org.apache.archiva.configuration.util;<a name="line.1"></a>
<span class="sourceLineNo">002</span><a name="line.2"></a>
<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
<span class="sourceLineNo">013</span> *<a name="line.13"></a>
<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
<span class="sourceLineNo">020</span> */<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.File;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.nio.file.Path;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.nio.file.Paths;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
<span class="sourceLineNo">027</span> *<a name="line.27"></a>
<span class="sourceLineNo">028</span> * This provides a path matcher like in the SelectorUtils of the ant project.<a name="line.28"></a>
<span class="sourceLineNo">029</span> *<a name="line.29"></a>
<span class="sourceLineNo">030</span> * Using code from apache ant org.apache.tools.ant.types.selectors.SelectorUtils to remove the ant dependency for code<a name="line.30"></a>
<span class="sourceLineNo">031</span> * compilation.<a name="line.31"></a>
<span class="sourceLineNo">032</span> * See https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/types/selectors/SelectorUtils.java<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * @author Martin Stockhammer &lt;martin_s@apache.org&gt;<a name="line.34"></a>
<span class="sourceLineNo">035</span> *<a name="line.35"></a>
<span class="sourceLineNo">036</span> *<a name="line.36"></a>
<span class="sourceLineNo">037</span> */<a name="line.37"></a>
<span class="sourceLineNo">038</span>public class PathMatcher<a name="line.38"></a>
<span class="sourceLineNo">039</span>{<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>    private static final String DEEP_TREE_MATCH = "**";<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
<span class="sourceLineNo">045</span>     * Tests whether or not a string matches against a pattern.<a name="line.45"></a>
<span class="sourceLineNo">046</span>     * The pattern may contain two special characters:&lt;br&gt;<a name="line.46"></a>
<span class="sourceLineNo">047</span>     * '*' means zero or more characters&lt;br&gt;<a name="line.47"></a>
<span class="sourceLineNo">048</span>     * '?' means one and only one character<a name="line.48"></a>
<span class="sourceLineNo">049</span>     *<a name="line.49"></a>
<span class="sourceLineNo">050</span>     * @param pattern The pattern to match against.<a name="line.50"></a>
<span class="sourceLineNo">051</span>     *                Must not be &lt;code&gt;null&lt;/code&gt;.<a name="line.51"></a>
<span class="sourceLineNo">052</span>     * @param str     The string which must be matched against the pattern.<a name="line.52"></a>
<span class="sourceLineNo">053</span>     *                Must not be &lt;code&gt;null&lt;/code&gt;.<a name="line.53"></a>
<span class="sourceLineNo">054</span>     *<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * @return &lt;code&gt;true&lt;/code&gt; if the string matches against the pattern,<a name="line.55"></a>
<span class="sourceLineNo">056</span>     *         or &lt;code&gt;false&lt;/code&gt; otherwise.<a name="line.56"></a>
<span class="sourceLineNo">057</span>     */<a name="line.57"></a>
<span class="sourceLineNo">058</span>    public static boolean match(String pattern, String str) {<a name="line.58"></a>
<span class="sourceLineNo">059</span>        return match(pattern, str, true);<a name="line.59"></a>
<span class="sourceLineNo">060</span>    }<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>    /**<a name="line.63"></a>
<span class="sourceLineNo">064</span>     * Tests whether or not a string matches against a pattern.<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * The pattern may contain two special characters:&lt;br&gt;<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * '*' means zero or more characters&lt;br&gt;<a name="line.66"></a>
<span class="sourceLineNo">067</span>     * '?' means one and only one character<a name="line.67"></a>
<span class="sourceLineNo">068</span>     *<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * @param pattern The pattern to match against.<a name="line.69"></a>
<span class="sourceLineNo">070</span>     *                Must not be &lt;code&gt;null&lt;/code&gt;.<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * @param str     The string which must be matched against the pattern.<a name="line.71"></a>
<span class="sourceLineNo">072</span>     *                Must not be &lt;code&gt;null&lt;/code&gt;.<a name="line.72"></a>
<span class="sourceLineNo">073</span>     * @param caseSensitive Whether or not matching should be performed<a name="line.73"></a>
<span class="sourceLineNo">074</span>     *                        case sensitively.<a name="line.74"></a>
<span class="sourceLineNo">075</span>     *<a name="line.75"></a>
<span class="sourceLineNo">076</span>     *<a name="line.76"></a>
<span class="sourceLineNo">077</span>     * @return &lt;code&gt;true&lt;/code&gt; if the string matches against the pattern,<a name="line.77"></a>
<span class="sourceLineNo">078</span>     *         or &lt;code&gt;false&lt;/code&gt; otherwise.<a name="line.78"></a>
<span class="sourceLineNo">079</span>     */<a name="line.79"></a>
<span class="sourceLineNo">080</span>    public static boolean match(String pattern, String str,<a name="line.80"></a>
<span class="sourceLineNo">081</span>                                boolean caseSensitive) {<a name="line.81"></a>
<span class="sourceLineNo">082</span>        char[] patArr = pattern.toCharArray();<a name="line.82"></a>
<span class="sourceLineNo">083</span>        char[] strArr = str.toCharArray();<a name="line.83"></a>
<span class="sourceLineNo">084</span>        int patIdxStart = 0;<a name="line.84"></a>
<span class="sourceLineNo">085</span>        int patIdxEnd = patArr.length - 1;<a name="line.85"></a>
<span class="sourceLineNo">086</span>        int strIdxStart = 0;<a name="line.86"></a>
<span class="sourceLineNo">087</span>        int strIdxEnd = strArr.length - 1;<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>        boolean containsStar = false;<a name="line.89"></a>
<span class="sourceLineNo">090</span>        for (char ch : patArr) {<a name="line.90"></a>
<span class="sourceLineNo">091</span>            if (ch == '*') {<a name="line.91"></a>
<span class="sourceLineNo">092</span>                containsStar = true;<a name="line.92"></a>
<span class="sourceLineNo">093</span>                break;<a name="line.93"></a>
<span class="sourceLineNo">094</span>            }<a name="line.94"></a>
<span class="sourceLineNo">095</span>        }<a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96"></a>
<span class="sourceLineNo">097</span>        if (!containsStar) {<a name="line.97"></a>
<span class="sourceLineNo">098</span>            // No '*'s, so we make a shortcut<a name="line.98"></a>
<span class="sourceLineNo">099</span>            if (patIdxEnd != strIdxEnd) {<a name="line.99"></a>
<span class="sourceLineNo">100</span>                return false; // Pattern and string do not have the same size<a name="line.100"></a>
<span class="sourceLineNo">101</span>            }<a name="line.101"></a>
<span class="sourceLineNo">102</span>            for (int i = 0; i &lt;= patIdxEnd; i++) {<a name="line.102"></a>
<span class="sourceLineNo">103</span>                char ch = patArr[i];<a name="line.103"></a>
<span class="sourceLineNo">104</span>                if (ch != '?' &amp;&amp; different(caseSensitive, ch, strArr[i])) {<a name="line.104"></a>
<span class="sourceLineNo">105</span>                    return false; // Character mismatch<a name="line.105"></a>
<span class="sourceLineNo">106</span>                }<a name="line.106"></a>
<span class="sourceLineNo">107</span>            }<a name="line.107"></a>
<span class="sourceLineNo">108</span>            return true; // String matches against pattern<a name="line.108"></a>
<span class="sourceLineNo">109</span>        }<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>        if (patIdxEnd == 0) {<a name="line.111"></a>
<span class="sourceLineNo">112</span>            return true; // Pattern contains only '*', which matches anything<a name="line.112"></a>
<span class="sourceLineNo">113</span>        }<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>        // Process characters before first star<a name="line.115"></a>
<span class="sourceLineNo">116</span>        while (true) {<a name="line.116"></a>
<span class="sourceLineNo">117</span>            char ch = patArr[patIdxStart];<a name="line.117"></a>
<span class="sourceLineNo">118</span>            if (ch == '*' || strIdxStart &gt; strIdxEnd) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>                break;<a name="line.119"></a>
<span class="sourceLineNo">120</span>            }<a name="line.120"></a>
<span class="sourceLineNo">121</span>            if (ch != '?'<a name="line.121"></a>
<span class="sourceLineNo">122</span>                &amp;&amp; different(caseSensitive, ch, strArr[strIdxStart])) {<a name="line.122"></a>
<span class="sourceLineNo">123</span>                return false; // Character mismatch<a name="line.123"></a>
<span class="sourceLineNo">124</span>            }<a name="line.124"></a>
<span class="sourceLineNo">125</span>            patIdxStart++;<a name="line.125"></a>
<span class="sourceLineNo">126</span>            strIdxStart++;<a name="line.126"></a>
<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
<span class="sourceLineNo">128</span>        if (strIdxStart &gt; strIdxEnd) {<a name="line.128"></a>
<span class="sourceLineNo">129</span>            // All characters in the string are used. Check if only '*'s are<a name="line.129"></a>
<span class="sourceLineNo">130</span>            // left in the pattern. If so, we succeeded. Otherwise failure.<a name="line.130"></a>
<span class="sourceLineNo">131</span>            return allStars(patArr, patIdxStart, patIdxEnd);<a name="line.131"></a>
<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>        // Process characters after last star<a name="line.134"></a>
<span class="sourceLineNo">135</span>        while (true) {<a name="line.135"></a>
<span class="sourceLineNo">136</span>            char ch = patArr[patIdxEnd];<a name="line.136"></a>
<span class="sourceLineNo">137</span>            if (ch == '*' || strIdxStart &gt; strIdxEnd) {<a name="line.137"></a>
<span class="sourceLineNo">138</span>                break;<a name="line.138"></a>
<span class="sourceLineNo">139</span>            }<a name="line.139"></a>
<span class="sourceLineNo">140</span>            if (ch != '?' &amp;&amp; different(caseSensitive, ch, strArr[strIdxEnd])) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>                return false; // Character mismatch<a name="line.141"></a>
<span class="sourceLineNo">142</span>            }<a name="line.142"></a>
<span class="sourceLineNo">143</span>            patIdxEnd--;<a name="line.143"></a>
<span class="sourceLineNo">144</span>            strIdxEnd--;<a name="line.144"></a>
<span class="sourceLineNo">145</span>        }<a name="line.145"></a>
<span class="sourceLineNo">146</span>        if (strIdxStart &gt; strIdxEnd) {<a name="line.146"></a>
<span class="sourceLineNo">147</span>            // All characters in the string are used. Check if only '*'s are<a name="line.147"></a>
<span class="sourceLineNo">148</span>            // left in the pattern. If so, we succeeded. Otherwise failure.<a name="line.148"></a>
<span class="sourceLineNo">149</span>            return allStars(patArr, patIdxStart, patIdxEnd);<a name="line.149"></a>
<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>        // process pattern between stars. padIdxStart and patIdxEnd point<a name="line.152"></a>
<span class="sourceLineNo">153</span>        // always to a '*'.<a name="line.153"></a>
<span class="sourceLineNo">154</span>        while (patIdxStart != patIdxEnd &amp;&amp; strIdxStart &lt;= strIdxEnd) {<a name="line.154"></a>
<span class="sourceLineNo">155</span>            int patIdxTmp = -1;<a name="line.155"></a>
<span class="sourceLineNo">156</span>            for (int i = patIdxStart + 1; i &lt;= patIdxEnd; i++) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>                if (patArr[i] == '*') {<a name="line.157"></a>
<span class="sourceLineNo">158</span>                    patIdxTmp = i;<a name="line.158"></a>
<span class="sourceLineNo">159</span>                    break;<a name="line.159"></a>
<span class="sourceLineNo">160</span>                }<a name="line.160"></a>
<span class="sourceLineNo">161</span>            }<a name="line.161"></a>
<span class="sourceLineNo">162</span>            if (patIdxTmp == patIdxStart + 1) {<a name="line.162"></a>
<span class="sourceLineNo">163</span>                // Two stars next to each other, skip the first one.<a name="line.163"></a>
<span class="sourceLineNo">164</span>                patIdxStart++;<a name="line.164"></a>
<span class="sourceLineNo">165</span>                continue;<a name="line.165"></a>
<span class="sourceLineNo">166</span>            }<a name="line.166"></a>
<span class="sourceLineNo">167</span>            // Find the pattern between padIdxStart &amp; padIdxTmp in str between<a name="line.167"></a>
<span class="sourceLineNo">168</span>            // strIdxStart &amp; strIdxEnd<a name="line.168"></a>
<span class="sourceLineNo">169</span>            int patLength = (patIdxTmp - patIdxStart - 1);<a name="line.169"></a>
<span class="sourceLineNo">170</span>            int strLength = (strIdxEnd - strIdxStart + 1);<a name="line.170"></a>
<span class="sourceLineNo">171</span>            int foundIdx = -1;<a name="line.171"></a>
<span class="sourceLineNo">172</span>            strLoop:<a name="line.172"></a>
<span class="sourceLineNo">173</span>            for (int i = 0; i &lt;= strLength - patLength; i++) {<a name="line.173"></a>
<span class="sourceLineNo">174</span>                for (int j = 0; j &lt; patLength; j++) {<a name="line.174"></a>
<span class="sourceLineNo">175</span>                    char ch = patArr[patIdxStart + j + 1];<a name="line.175"></a>
<span class="sourceLineNo">176</span>                    if (ch != '?' &amp;&amp; different(caseSensitive, ch,<a name="line.176"></a>
<span class="sourceLineNo">177</span>                        strArr[strIdxStart + i + j])) {<a name="line.177"></a>
<span class="sourceLineNo">178</span>                        continue strLoop;<a name="line.178"></a>
<span class="sourceLineNo">179</span>                    }<a name="line.179"></a>
<span class="sourceLineNo">180</span>                }<a name="line.180"></a>
<span class="sourceLineNo">181</span>                foundIdx = strIdxStart + i;<a name="line.181"></a>
<span class="sourceLineNo">182</span>                break;<a name="line.182"></a>
<span class="sourceLineNo">183</span>            }<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>            if (foundIdx == -1) {<a name="line.185"></a>
<span class="sourceLineNo">186</span>                return false;<a name="line.186"></a>
<span class="sourceLineNo">187</span>            }<a name="line.187"></a>
<span class="sourceLineNo">188</span>            patIdxStart = patIdxTmp;<a name="line.188"></a>
<span class="sourceLineNo">189</span>            strIdxStart = foundIdx + patLength;<a name="line.189"></a>
<span class="sourceLineNo">190</span>        }<a name="line.190"></a>
<span class="sourceLineNo">191</span><a name="line.191"></a>
<span class="sourceLineNo">192</span>        // All characters in the string are used. Check if only '*'s are left<a name="line.192"></a>
<span class="sourceLineNo">193</span>        // in the pattern. If so, we succeeded. Otherwise failure.<a name="line.193"></a>
<span class="sourceLineNo">194</span>        return allStars(patArr, patIdxStart, patIdxEnd);<a name="line.194"></a>
<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
<span class="sourceLineNo">196</span><a name="line.196"></a>
<span class="sourceLineNo">197</span>    private static boolean allStars(char[] chars, int start, int end) {<a name="line.197"></a>
<span class="sourceLineNo">198</span>        for (int i = start; i &lt;= end; ++i) {<a name="line.198"></a>
<span class="sourceLineNo">199</span>            if (chars[i] != '*') {<a name="line.199"></a>
<span class="sourceLineNo">200</span>                return false;<a name="line.200"></a>
<span class="sourceLineNo">201</span>            }<a name="line.201"></a>
<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
<span class="sourceLineNo">203</span>        return true;<a name="line.203"></a>
<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
<span class="sourceLineNo">205</span><a name="line.205"></a>
<span class="sourceLineNo">206</span>    private static boolean different(<a name="line.206"></a>
<span class="sourceLineNo">207</span>        boolean caseSensitive, char ch, char other) {<a name="line.207"></a>
<span class="sourceLineNo">208</span>        return caseSensitive<a name="line.208"></a>
<span class="sourceLineNo">209</span>            ? ch != other<a name="line.209"></a>
<span class="sourceLineNo">210</span>            : Character.toUpperCase(ch) != Character.toUpperCase(other);<a name="line.210"></a>
<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>    /**<a name="line.213"></a>
<span class="sourceLineNo">214</span>     * Tests whether or not a given path matches a given pattern.<a name="line.214"></a>
<span class="sourceLineNo">215</span>     *<a name="line.215"></a>
<span class="sourceLineNo">216</span>     * If you need to call this method multiple times with the same<a name="line.216"></a>
<span class="sourceLineNo">217</span>     * pattern you should rather use TokenizedPath<a name="line.217"></a>
<span class="sourceLineNo">218</span>     *<a name="line.218"></a>
<span class="sourceLineNo">219</span>     *<a name="line.219"></a>
<span class="sourceLineNo">220</span>     * @param pattern The pattern to match against. Must not be<a name="line.220"></a>
<span class="sourceLineNo">221</span>     *                &lt;code&gt;null&lt;/code&gt;.<a name="line.221"></a>
<span class="sourceLineNo">222</span>     * @param str     The path to match, as a String. Must not be<a name="line.222"></a>
<span class="sourceLineNo">223</span>     *                &lt;code&gt;null&lt;/code&gt;.<a name="line.223"></a>
<span class="sourceLineNo">224</span>     *<a name="line.224"></a>
<span class="sourceLineNo">225</span>     * @return &lt;code&gt;true&lt;/code&gt; if the pattern matches against the string,<a name="line.225"></a>
<span class="sourceLineNo">226</span>     *         or &lt;code&gt;false&lt;/code&gt; otherwise.<a name="line.226"></a>
<span class="sourceLineNo">227</span>     */<a name="line.227"></a>
<span class="sourceLineNo">228</span>    public static boolean matchPath(String pattern, String str) {<a name="line.228"></a>
<span class="sourceLineNo">229</span>        String[] patDirs = tokenizePathAsArray(pattern);<a name="line.229"></a>
<span class="sourceLineNo">230</span>        return matchPath(patDirs, tokenizePathAsArray(str), true);<a name="line.230"></a>
<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>    /**<a name="line.233"></a>
<span class="sourceLineNo">234</span>     * Tests whether or not a given path matches a given pattern.<a name="line.234"></a>
<span class="sourceLineNo">235</span>     *<a name="line.235"></a>
<span class="sourceLineNo">236</span>     * If you need to call this method multiple times with the same<a name="line.236"></a>
<span class="sourceLineNo">237</span>     * pattern you should rather use TokenizedPattern<a name="line.237"></a>
<span class="sourceLineNo">238</span>     *<a name="line.238"></a>
<span class="sourceLineNo">239</span>     * @param pattern The pattern to match against. Must not be<a name="line.239"></a>
<span class="sourceLineNo">240</span>     *                &lt;code&gt;null&lt;/code&gt;.<a name="line.240"></a>
<span class="sourceLineNo">241</span>     * @param str     The path to match, as a String. Must not be<a name="line.241"></a>
<span class="sourceLineNo">242</span>     *                &lt;code&gt;null&lt;/code&gt;.<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * @param isCaseSensitive Whether or not matching should be performed<a name="line.243"></a>
<span class="sourceLineNo">244</span>     *                        case sensitively.<a name="line.244"></a>
<span class="sourceLineNo">245</span>     *<a name="line.245"></a>
<span class="sourceLineNo">246</span>     * @return &lt;code&gt;true&lt;/code&gt; if the pattern matches against the string,<a name="line.246"></a>
<span class="sourceLineNo">247</span>     *         or &lt;code&gt;false&lt;/code&gt; otherwise.<a name="line.247"></a>
<span class="sourceLineNo">248</span>     */<a name="line.248"></a>
<span class="sourceLineNo">249</span>    public static boolean matchPath(String pattern, String str,<a name="line.249"></a>
<span class="sourceLineNo">250</span>                                    boolean isCaseSensitive) {<a name="line.250"></a>
<span class="sourceLineNo">251</span>        String[] patDirs = tokenizePathAsArray(pattern);<a name="line.251"></a>
<span class="sourceLineNo">252</span>        return matchPath(patDirs, tokenizePathAsArray(str), isCaseSensitive);<a name="line.252"></a>
<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
<span class="sourceLineNo">254</span><a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>    static String[] tokenizePathAsArray(String path) {<a name="line.256"></a>
<span class="sourceLineNo">257</span>        Path root = null;<a name="line.257"></a>
<span class="sourceLineNo">258</span>        Path fsPath = Paths.get( path );<a name="line.258"></a>
<span class="sourceLineNo">259</span><a name="line.259"></a>
<span class="sourceLineNo">260</span>        if ( fsPath.isAbsolute()) {<a name="line.260"></a>
<span class="sourceLineNo">261</span>            root = fsPath.getRoot( );<a name="line.261"></a>
<span class="sourceLineNo">262</span>            path = root.relativize( fsPath ).toString();<a name="line.262"></a>
<span class="sourceLineNo">263</span>        }<a name="line.263"></a>
<span class="sourceLineNo">264</span>        char sep = File.separatorChar;<a name="line.264"></a>
<span class="sourceLineNo">265</span>        int start = 0;<a name="line.265"></a>
<span class="sourceLineNo">266</span>        int len = path.length();<a name="line.266"></a>
<span class="sourceLineNo">267</span>        int count = 0;<a name="line.267"></a>
<span class="sourceLineNo">268</span>        for (int pos = 0; pos &lt; len; pos++) {<a name="line.268"></a>
<span class="sourceLineNo">269</span>            if (path.charAt(pos) == sep) {<a name="line.269"></a>
<span class="sourceLineNo">270</span>                if (pos != start) {<a name="line.270"></a>
<span class="sourceLineNo">271</span>                    count++;<a name="line.271"></a>
<span class="sourceLineNo">272</span>                }<a name="line.272"></a>
<span class="sourceLineNo">273</span>                start = pos + 1;<a name="line.273"></a>
<span class="sourceLineNo">274</span>            }<a name="line.274"></a>
<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
<span class="sourceLineNo">276</span>        if (len != start) {<a name="line.276"></a>
<span class="sourceLineNo">277</span>            count++;<a name="line.277"></a>
<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
<span class="sourceLineNo">279</span>        String[] l = new String[count + ((root == null) ? 0 : 1)];<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>        if (root != null) {<a name="line.281"></a>
<span class="sourceLineNo">282</span>            l[0] = root.toString();<a name="line.282"></a>
<span class="sourceLineNo">283</span>            count = 1;<a name="line.283"></a>
<span class="sourceLineNo">284</span>        } else {<a name="line.284"></a>
<span class="sourceLineNo">285</span>            count = 0;<a name="line.285"></a>
<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
<span class="sourceLineNo">287</span>        start = 0;<a name="line.287"></a>
<span class="sourceLineNo">288</span>        for (int pos = 0; pos &lt; len; pos++) {<a name="line.288"></a>
<span class="sourceLineNo">289</span>            if (path.charAt(pos) == sep) {<a name="line.289"></a>
<span class="sourceLineNo">290</span>                if (pos != start) {<a name="line.290"></a>
<span class="sourceLineNo">291</span>                    String tok = path.substring(start, pos);<a name="line.291"></a>
<span class="sourceLineNo">292</span>                    l[count++] = tok;<a name="line.292"></a>
<span class="sourceLineNo">293</span>                }<a name="line.293"></a>
<span class="sourceLineNo">294</span>                start = pos + 1;<a name="line.294"></a>
<span class="sourceLineNo">295</span>            }<a name="line.295"></a>
<span class="sourceLineNo">296</span>        }<a name="line.296"></a>
<span class="sourceLineNo">297</span>        if (len != start) {<a name="line.297"></a>
<span class="sourceLineNo">298</span>            String tok = path.substring(start);<a name="line.298"></a>
<span class="sourceLineNo">299</span>            l[count/*++*/] = tok;<a name="line.299"></a>
<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
<span class="sourceLineNo">301</span>        return l;<a name="line.301"></a>
<span class="sourceLineNo">302</span>    }<a name="line.302"></a>
<span class="sourceLineNo">303</span><a name="line.303"></a>
<span class="sourceLineNo">304</span>    /**<a name="line.304"></a>
<span class="sourceLineNo">305</span>     * Core implementation of matchPath.  It is isolated so that it<a name="line.305"></a>
<span class="sourceLineNo">306</span>     * can be called from TokenizedPattern.<a name="line.306"></a>
<span class="sourceLineNo">307</span>     */<a name="line.307"></a>
<span class="sourceLineNo">308</span>    public static boolean matchPath( String[] tokenizedPattern, String[] strDirs,<a name="line.308"></a>
<span class="sourceLineNo">309</span>                                      boolean isCaseSensitive ) {<a name="line.309"></a>
<span class="sourceLineNo">310</span>        int patIdxStart = 0;<a name="line.310"></a>
<span class="sourceLineNo">311</span>        int patIdxEnd = tokenizedPattern.length - 1;<a name="line.311"></a>
<span class="sourceLineNo">312</span>        int strIdxStart = 0;<a name="line.312"></a>
<span class="sourceLineNo">313</span>        int strIdxEnd = strDirs.length - 1;<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>        // up to first '**'<a name="line.315"></a>
<span class="sourceLineNo">316</span>        while (patIdxStart &lt;= patIdxEnd &amp;&amp; strIdxStart &lt;= strIdxEnd) {<a name="line.316"></a>
<span class="sourceLineNo">317</span>            String patDir = tokenizedPattern[patIdxStart];<a name="line.317"></a>
<span class="sourceLineNo">318</span>            if (patDir.equals(DEEP_TREE_MATCH)) {<a name="line.318"></a>
<span class="sourceLineNo">319</span>                break;<a name="line.319"></a>
<span class="sourceLineNo">320</span>            }<a name="line.320"></a>
<span class="sourceLineNo">321</span>            if (!match(patDir, strDirs[strIdxStart], isCaseSensitive)) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>                return false;<a name="line.322"></a>
<span class="sourceLineNo">323</span>            }<a name="line.323"></a>
<span class="sourceLineNo">324</span>            patIdxStart++;<a name="line.324"></a>
<span class="sourceLineNo">325</span>            strIdxStart++;<a name="line.325"></a>
<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
<span class="sourceLineNo">327</span>        if (strIdxStart &gt; strIdxEnd) {<a name="line.327"></a>
<span class="sourceLineNo">328</span>            // String is exhausted<a name="line.328"></a>
<span class="sourceLineNo">329</span>            for (int i = patIdxStart; i &lt;= patIdxEnd; i++) {<a name="line.329"></a>
<span class="sourceLineNo">330</span>                if (!tokenizedPattern[i].equals(DEEP_TREE_MATCH)) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>                    return false;<a name="line.331"></a>
<span class="sourceLineNo">332</span>                }<a name="line.332"></a>
<span class="sourceLineNo">333</span>            }<a name="line.333"></a>
<span class="sourceLineNo">334</span>            return true;<a name="line.334"></a>
<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
<span class="sourceLineNo">336</span>        if (patIdxStart &gt; patIdxEnd) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>            // String not exhausted, but pattern is. Failure.<a name="line.337"></a>
<span class="sourceLineNo">338</span>            return false;<a name="line.338"></a>
<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
<span class="sourceLineNo">340</span><a name="line.340"></a>
<span class="sourceLineNo">341</span>        // up to last '**'<a name="line.341"></a>
<span class="sourceLineNo">342</span>        while (patIdxStart &lt;= patIdxEnd &amp;&amp; strIdxStart &lt;= strIdxEnd) {<a name="line.342"></a>
<span class="sourceLineNo">343</span>            String patDir = tokenizedPattern[patIdxEnd];<a name="line.343"></a>
<span class="sourceLineNo">344</span>            if (patDir.equals(DEEP_TREE_MATCH)) {<a name="line.344"></a>
<span class="sourceLineNo">345</span>                break;<a name="line.345"></a>
<span class="sourceLineNo">346</span>            }<a name="line.346"></a>
<span class="sourceLineNo">347</span>            if (!match(patDir, strDirs[strIdxEnd], isCaseSensitive)) {<a name="line.347"></a>
<span class="sourceLineNo">348</span>                return false;<a name="line.348"></a>
<span class="sourceLineNo">349</span>            }<a name="line.349"></a>
<span class="sourceLineNo">350</span>            patIdxEnd--;<a name="line.350"></a>
<span class="sourceLineNo">351</span>            strIdxEnd--;<a name="line.351"></a>
<span class="sourceLineNo">352</span>        }<a name="line.352"></a>
<span class="sourceLineNo">353</span>        if (strIdxStart &gt; strIdxEnd) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>            // String is exhausted<a name="line.354"></a>
<span class="sourceLineNo">355</span>            for (int i = patIdxStart; i &lt;= patIdxEnd; i++) {<a name="line.355"></a>
<span class="sourceLineNo">356</span>                if (!tokenizedPattern[i].equals(DEEP_TREE_MATCH)) {<a name="line.356"></a>
<span class="sourceLineNo">357</span>                    return false;<a name="line.357"></a>
<span class="sourceLineNo">358</span>                }<a name="line.358"></a>
<span class="sourceLineNo">359</span>            }<a name="line.359"></a>
<span class="sourceLineNo">360</span>            return true;<a name="line.360"></a>
<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>        while (patIdxStart != patIdxEnd &amp;&amp; strIdxStart &lt;= strIdxEnd) {<a name="line.363"></a>
<span class="sourceLineNo">364</span>            int patIdxTmp = -1;<a name="line.364"></a>
<span class="sourceLineNo">365</span>            for (int i = patIdxStart + 1; i &lt;= patIdxEnd; i++) {<a name="line.365"></a>
<span class="sourceLineNo">366</span>                if (tokenizedPattern[i].equals(DEEP_TREE_MATCH)) {<a name="line.366"></a>
<span class="sourceLineNo">367</span>                    patIdxTmp = i;<a name="line.367"></a>
<span class="sourceLineNo">368</span>                    break;<a name="line.368"></a>
<span class="sourceLineNo">369</span>                }<a name="line.369"></a>
<span class="sourceLineNo">370</span>            }<a name="line.370"></a>
<span class="sourceLineNo">371</span>            if (patIdxTmp == patIdxStart + 1) {<a name="line.371"></a>
<span class="sourceLineNo">372</span>                // '**/**' situation, so skip one<a name="line.372"></a>
<span class="sourceLineNo">373</span>                patIdxStart++;<a name="line.373"></a>
<span class="sourceLineNo">374</span>                continue;<a name="line.374"></a>
<span class="sourceLineNo">375</span>            }<a name="line.375"></a>
<span class="sourceLineNo">376</span>            // Find the pattern between padIdxStart &amp; padIdxTmp in str between<a name="line.376"></a>
<span class="sourceLineNo">377</span>            // strIdxStart &amp; strIdxEnd<a name="line.377"></a>
<span class="sourceLineNo">378</span>            int patLength = (patIdxTmp - patIdxStart - 1);<a name="line.378"></a>
<span class="sourceLineNo">379</span>            int strLength = (strIdxEnd - strIdxStart + 1);<a name="line.379"></a>
<span class="sourceLineNo">380</span>            int foundIdx = -1;<a name="line.380"></a>
<span class="sourceLineNo">381</span>            strLoop:<a name="line.381"></a>
<span class="sourceLineNo">382</span>            for (int i = 0; i &lt;= strLength - patLength; i++) {<a name="line.382"></a>
<span class="sourceLineNo">383</span>                for (int j = 0; j &lt; patLength; j++) {<a name="line.383"></a>
<span class="sourceLineNo">384</span>                    String subPat = tokenizedPattern[patIdxStart + j + 1];<a name="line.384"></a>
<span class="sourceLineNo">385</span>                    String subStr = strDirs[strIdxStart + i + j];<a name="line.385"></a>
<span class="sourceLineNo">386</span>                    if (!match(subPat, subStr, isCaseSensitive)) {<a name="line.386"></a>
<span class="sourceLineNo">387</span>                        continue strLoop;<a name="line.387"></a>
<span class="sourceLineNo">388</span>                    }<a name="line.388"></a>
<span class="sourceLineNo">389</span>                }<a name="line.389"></a>
<span class="sourceLineNo">390</span>                foundIdx = strIdxStart + i;<a name="line.390"></a>
<span class="sourceLineNo">391</span>                break;<a name="line.391"></a>
<span class="sourceLineNo">392</span>            }<a name="line.392"></a>
<span class="sourceLineNo">393</span>            if (foundIdx == -1) {<a name="line.393"></a>
<span class="sourceLineNo">394</span>                return false;<a name="line.394"></a>
<span class="sourceLineNo">395</span>            }<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>            patIdxStart = patIdxTmp;<a name="line.397"></a>
<span class="sourceLineNo">398</span>            strIdxStart = foundIdx + patLength;<a name="line.398"></a>
<span class="sourceLineNo">399</span>        }<a name="line.399"></a>
<span class="sourceLineNo">400</span><a name="line.400"></a>
<span class="sourceLineNo">401</span>        for (int i = patIdxStart; i &lt;= patIdxEnd; i++) {<a name="line.401"></a>
<span class="sourceLineNo">402</span>            if (!DEEP_TREE_MATCH.equals(tokenizedPattern[i])) {<a name="line.402"></a>
<span class="sourceLineNo">403</span>                return false;<a name="line.403"></a>
<span class="sourceLineNo">404</span>            }<a name="line.404"></a>
<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
<span class="sourceLineNo">406</span>        return true;<a name="line.406"></a>
<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
<span class="sourceLineNo">410</span>}<a name="line.410"></a>




























































</pre>
</div>
</body>
</html>