<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /* Copyright 2005-2006 Tim Fennell<a name="line.1"></a>
<FONT color="green">002</FONT>     *<a name="line.2"></a>
<FONT color="green">003</FONT>     * Licensed under the Apache License, Version 2.0 (the "License");<a name="line.3"></a>
<FONT color="green">004</FONT>     * you may not use this file except in compliance with the License.<a name="line.4"></a>
<FONT color="green">005</FONT>     * You may obtain a copy of the License at<a name="line.5"></a>
<FONT color="green">006</FONT>     *<a name="line.6"></a>
<FONT color="green">007</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.7"></a>
<FONT color="green">008</FONT>     *<a name="line.8"></a>
<FONT color="green">009</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.9"></a>
<FONT color="green">010</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.10"></a>
<FONT color="green">011</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.11"></a>
<FONT color="green">012</FONT>     * See the License for the specific language governing permissions and<a name="line.12"></a>
<FONT color="green">013</FONT>     * limitations under the License.<a name="line.13"></a>
<FONT color="green">014</FONT>     */<a name="line.14"></a>
<FONT color="green">015</FONT>    package org.apache.logging.log4j.core.config.plugins;<a name="line.15"></a>
<FONT color="green">016</FONT>    <a name="line.16"></a>
<FONT color="green">017</FONT>    import org.apache.logging.log4j.Logger;<a name="line.17"></a>
<FONT color="green">018</FONT>    import org.apache.logging.log4j.status.StatusLogger;<a name="line.18"></a>
<FONT color="green">019</FONT>    <a name="line.19"></a>
<FONT color="green">020</FONT>    import java.io.File;<a name="line.20"></a>
<FONT color="green">021</FONT>    import java.io.FileInputStream;<a name="line.21"></a>
<FONT color="green">022</FONT>    import java.io.IOException;<a name="line.22"></a>
<FONT color="green">023</FONT>    import java.lang.annotation.Annotation;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.net.URI;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.net.URL;<a name="line.25"></a>
<FONT color="green">026</FONT>    import java.net.URLDecoder;<a name="line.26"></a>
<FONT color="green">027</FONT>    import java.util.Enumeration;<a name="line.27"></a>
<FONT color="green">028</FONT>    import java.util.HashSet;<a name="line.28"></a>
<FONT color="green">029</FONT>    import java.util.Set;<a name="line.29"></a>
<FONT color="green">030</FONT>    import java.util.jar.JarEntry;<a name="line.30"></a>
<FONT color="green">031</FONT>    import java.util.jar.JarInputStream;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>    /**<a name="line.33"></a>
<FONT color="green">034</FONT>     * &lt;p&gt;ResolverUtil is used to locate classes that are available in the/a class path and meet<a name="line.34"></a>
<FONT color="green">035</FONT>     * arbitrary conditions. The two most common conditions are that a class implements/extends<a name="line.35"></a>
<FONT color="green">036</FONT>     * another class, or that is it annotated with a specific annotation. However, through the use<a name="line.36"></a>
<FONT color="green">037</FONT>     * of the {@link Test} class it is possible to search using arbitrary conditions.&lt;/p&gt;<a name="line.37"></a>
<FONT color="green">038</FONT>     *<a name="line.38"></a>
<FONT color="green">039</FONT>     * &lt;p&gt;A ClassLoader is used to locate all locations (directories and jar files) in the class<a name="line.39"></a>
<FONT color="green">040</FONT>     * path that contain classes within certain packages, and then to load those classes and<a name="line.40"></a>
<FONT color="green">041</FONT>     * check them. By default the ClassLoader returned by<a name="line.41"></a>
<FONT color="green">042</FONT>     *  {@code Thread.currentThread().getContextClassLoader()} is used, but this can be overridden<a name="line.42"></a>
<FONT color="green">043</FONT>     * by calling {@link #setClassLoader(ClassLoader)} prior to invoking any of the {@code find()}<a name="line.43"></a>
<FONT color="green">044</FONT>     * methods.&lt;/p&gt;<a name="line.44"></a>
<FONT color="green">045</FONT>     *<a name="line.45"></a>
<FONT color="green">046</FONT>     * &lt;p&gt;General searches are initiated by calling the<a name="line.46"></a>
<FONT color="green">047</FONT>     * {@link #find(org.apache.logging.log4j.core..util.ResolverUtil.Test, String...)} ()} method and supplying<a name="line.47"></a>
<FONT color="green">048</FONT>     * a package name and a Test instance. This will cause the named package &lt;b&gt;and all sub-packages&lt;/b&gt;<a name="line.48"></a>
<FONT color="green">049</FONT>     * to be scanned for classes that meet the test. There are also utility methods for the common<a name="line.49"></a>
<FONT color="green">050</FONT>     * use cases of scanning multiple packages for extensions of particular classes, or classes<a name="line.50"></a>
<FONT color="green">051</FONT>     * annotated with a specific annotation.&lt;/p&gt;<a name="line.51"></a>
<FONT color="green">052</FONT>     *<a name="line.52"></a>
<FONT color="green">053</FONT>     * &lt;p&gt;The standard usage pattern for the ResolverUtil class is as follows:&lt;/p&gt;<a name="line.53"></a>
<FONT color="green">054</FONT>     *<a name="line.54"></a>
<FONT color="green">055</FONT>     *&lt;pre&gt;<a name="line.55"></a>
<FONT color="green">056</FONT>     *ResolverUtil&amp;lt;ActionBean&amp;gt; resolver = new ResolverUtil&amp;lt;ActionBean&amp;gt;();<a name="line.56"></a>
<FONT color="green">057</FONT>     *resolver.findImplementation(ActionBean.class, pkg1, pkg2);<a name="line.57"></a>
<FONT color="green">058</FONT>     *resolver.find(new CustomTest(), pkg1);<a name="line.58"></a>
<FONT color="green">059</FONT>     *resolver.find(new CustomTest(), pkg2);<a name="line.59"></a>
<FONT color="green">060</FONT>     *Collection&amp;lt;ActionBean&amp;gt; beans = resolver.getClasses();<a name="line.60"></a>
<FONT color="green">061</FONT>     *&lt;/pre&gt;<a name="line.61"></a>
<FONT color="green">062</FONT>     *<a name="line.62"></a>
<FONT color="green">063</FONT>     * &lt;p&gt;This class was copied from Stripes - http://stripes.mc4j.org/confluence/display/stripes/Home<a name="line.63"></a>
<FONT color="green">064</FONT>     * &lt;/p&gt;<a name="line.64"></a>
<FONT color="green">065</FONT>     *<a name="line.65"></a>
<FONT color="green">066</FONT>     * @author Tim Fennell<a name="line.66"></a>
<FONT color="green">067</FONT>     * @param &lt;T&gt; The type of the Class that can be returned.<a name="line.67"></a>
<FONT color="green">068</FONT>     */<a name="line.68"></a>
<FONT color="green">069</FONT>    public class ResolverUtil&lt;T&gt; {<a name="line.69"></a>
<FONT color="green">070</FONT>        /** An instance of Log to use for logging in this class. */<a name="line.70"></a>
<FONT color="green">071</FONT>        private static final Logger LOG = StatusLogger.getLogger();<a name="line.71"></a>
<FONT color="green">072</FONT>    <a name="line.72"></a>
<FONT color="green">073</FONT>        /** The set of matches being accumulated. */<a name="line.73"></a>
<FONT color="green">074</FONT>        private Set&lt;Class&lt;? extends T&gt;&gt; classMatches = new HashSet&lt;Class&lt;?extends T&gt;&gt;();<a name="line.74"></a>
<FONT color="green">075</FONT>    <a name="line.75"></a>
<FONT color="green">076</FONT>        /** The set of matches being accumulated. */<a name="line.76"></a>
<FONT color="green">077</FONT>        private Set&lt;URI&gt; resourceMatches = new HashSet&lt;URI&gt;();<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>         * The ClassLoader to use when looking for classes. If null then the ClassLoader returned<a name="line.80"></a>
<FONT color="green">081</FONT>         * by Thread.currentThread().getContextClassLoader() will be used.<a name="line.81"></a>
<FONT color="green">082</FONT>         */<a name="line.82"></a>
<FONT color="green">083</FONT>        private ClassLoader classloader;<a name="line.83"></a>
<FONT color="green">084</FONT>    <a name="line.84"></a>
<FONT color="green">085</FONT>        /**<a name="line.85"></a>
<FONT color="green">086</FONT>         * Provides access to the classes discovered so far. If no calls have been made to<a name="line.86"></a>
<FONT color="green">087</FONT>         * any of the {@code find()} methods, this set will be empty.<a name="line.87"></a>
<FONT color="green">088</FONT>         *<a name="line.88"></a>
<FONT color="green">089</FONT>         * @return the set of classes that have been discovered.<a name="line.89"></a>
<FONT color="green">090</FONT>         */<a name="line.90"></a>
<FONT color="green">091</FONT>        public Set&lt;Class&lt;? extends T&gt;&gt; getClasses() {<a name="line.91"></a>
<FONT color="green">092</FONT>            return classMatches;<a name="line.92"></a>
<FONT color="green">093</FONT>        }<a name="line.93"></a>
<FONT color="green">094</FONT>    <a name="line.94"></a>
<FONT color="green">095</FONT>        /**<a name="line.95"></a>
<FONT color="green">096</FONT>         * Return the matching resources.<a name="line.96"></a>
<FONT color="green">097</FONT>         * @return A Set of URIs that match the criteria.<a name="line.97"></a>
<FONT color="green">098</FONT>         */<a name="line.98"></a>
<FONT color="green">099</FONT>        public Set&lt;URI&gt; getResources() {<a name="line.99"></a>
<FONT color="green">100</FONT>            return resourceMatches;<a name="line.100"></a>
<FONT color="green">101</FONT>        }<a name="line.101"></a>
<FONT color="green">102</FONT>    <a name="line.102"></a>
<FONT color="green">103</FONT>    <a name="line.103"></a>
<FONT color="green">104</FONT>        /**<a name="line.104"></a>
<FONT color="green">105</FONT>         * Returns the classloader that will be used for scanning for classes. If no explicit<a name="line.105"></a>
<FONT color="green">106</FONT>         * ClassLoader has been set by the calling, the context class loader will be used.<a name="line.106"></a>
<FONT color="green">107</FONT>         *<a name="line.107"></a>
<FONT color="green">108</FONT>         * @return the ClassLoader that will be used to scan for classes<a name="line.108"></a>
<FONT color="green">109</FONT>         */<a name="line.109"></a>
<FONT color="green">110</FONT>        public ClassLoader getClassLoader() {<a name="line.110"></a>
<FONT color="green">111</FONT>            return classloader == null ? Thread.currentThread().getContextClassLoader() : classloader;<a name="line.111"></a>
<FONT color="green">112</FONT>        }<a name="line.112"></a>
<FONT color="green">113</FONT>    <a name="line.113"></a>
<FONT color="green">114</FONT>        /**<a name="line.114"></a>
<FONT color="green">115</FONT>         * Sets an explicit ClassLoader that should be used when scanning for classes. If none<a name="line.115"></a>
<FONT color="green">116</FONT>         * is set then the context classloader will be used.<a name="line.116"></a>
<FONT color="green">117</FONT>         *<a name="line.117"></a>
<FONT color="green">118</FONT>         * @param classloader a ClassLoader to use when scanning for classes<a name="line.118"></a>
<FONT color="green">119</FONT>         */<a name="line.119"></a>
<FONT color="green">120</FONT>        public void setClassLoader(ClassLoader classloader) { this.classloader = classloader; }<a name="line.120"></a>
<FONT color="green">121</FONT>    <a name="line.121"></a>
<FONT color="green">122</FONT>        /**<a name="line.122"></a>
<FONT color="green">123</FONT>         * Attempts to discover classes that are assignable to the type provided. In the case<a name="line.123"></a>
<FONT color="green">124</FONT>         * that an interface is provided this method will collect implementations. In the case<a name="line.124"></a>
<FONT color="green">125</FONT>         * of a non-interface class, subclasses will be collected.  Accumulated classes can be<a name="line.125"></a>
<FONT color="green">126</FONT>         * accessed by calling {@link #getClasses()}.<a name="line.126"></a>
<FONT color="green">127</FONT>         *<a name="line.127"></a>
<FONT color="green">128</FONT>         * @param parent the class of interface to find subclasses or implementations of<a name="line.128"></a>
<FONT color="green">129</FONT>         * @param packageNames one or more package names to scan (including subpackages) for classes<a name="line.129"></a>
<FONT color="green">130</FONT>         */<a name="line.130"></a>
<FONT color="green">131</FONT>        public void findImplementations(Class parent, String... packageNames) {<a name="line.131"></a>
<FONT color="green">132</FONT>            if (packageNames == null) {<a name="line.132"></a>
<FONT color="green">133</FONT>                return;<a name="line.133"></a>
<FONT color="green">134</FONT>            }<a name="line.134"></a>
<FONT color="green">135</FONT>    <a name="line.135"></a>
<FONT color="green">136</FONT>            Test test = new IsA(parent);<a name="line.136"></a>
<FONT color="green">137</FONT>            for (String pkg : packageNames) {<a name="line.137"></a>
<FONT color="green">138</FONT>                findInPackage(test, pkg);<a name="line.138"></a>
<FONT color="green">139</FONT>            }<a name="line.139"></a>
<FONT color="green">140</FONT>        }<a name="line.140"></a>
<FONT color="green">141</FONT>    <a name="line.141"></a>
<FONT color="green">142</FONT>        /**<a name="line.142"></a>
<FONT color="green">143</FONT>         * Attempts to discover classes who's name ends with the provided suffix. Accumulated classes can be<a name="line.143"></a>
<FONT color="green">144</FONT>         * accessed by calling {@link #getClasses()}.<a name="line.144"></a>
<FONT color="green">145</FONT>         *<a name="line.145"></a>
<FONT color="green">146</FONT>         * @param suffix The class name suffix to match<a name="line.146"></a>
<FONT color="green">147</FONT>         * @param packageNames one or more package names to scan (including subpackages) for classes<a name="line.147"></a>
<FONT color="green">148</FONT>         */<a name="line.148"></a>
<FONT color="green">149</FONT>        public void findSuffix(String suffix, String... packageNames) {<a name="line.149"></a>
<FONT color="green">150</FONT>            if (packageNames == null) {<a name="line.150"></a>
<FONT color="green">151</FONT>                return;<a name="line.151"></a>
<FONT color="green">152</FONT>            }<a name="line.152"></a>
<FONT color="green">153</FONT>    <a name="line.153"></a>
<FONT color="green">154</FONT>            Test test = new NameEndsWith(suffix);<a name="line.154"></a>
<FONT color="green">155</FONT>            for (String pkg : packageNames) {<a name="line.155"></a>
<FONT color="green">156</FONT>                findInPackage(test, pkg);<a name="line.156"></a>
<FONT color="green">157</FONT>            }<a name="line.157"></a>
<FONT color="green">158</FONT>        }<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>         * Attempts to discover classes that are annotated with to the annotation. Accumulated<a name="line.161"></a>
<FONT color="green">162</FONT>         * classes can be accessed by calling {@link #getClasses()}.<a name="line.162"></a>
<FONT color="green">163</FONT>         *<a name="line.163"></a>
<FONT color="green">164</FONT>         * @param annotation the annotation that should be present on matching classes<a name="line.164"></a>
<FONT color="green">165</FONT>         * @param packageNames one or more package names to scan (including subpackages) for classes<a name="line.165"></a>
<FONT color="green">166</FONT>         */<a name="line.166"></a>
<FONT color="green">167</FONT>        public void findAnnotated(Class&lt;? extends Annotation&gt; annotation, String... packageNames) {<a name="line.167"></a>
<FONT color="green">168</FONT>            if (packageNames == null) {<a name="line.168"></a>
<FONT color="green">169</FONT>                return;<a name="line.169"></a>
<FONT color="green">170</FONT>            }<a name="line.170"></a>
<FONT color="green">171</FONT>    <a name="line.171"></a>
<FONT color="green">172</FONT>            Test test = new AnnotatedWith(annotation);<a name="line.172"></a>
<FONT color="green">173</FONT>            for (String pkg : packageNames) {<a name="line.173"></a>
<FONT color="green">174</FONT>                findInPackage(test, pkg);<a name="line.174"></a>
<FONT color="green">175</FONT>            }<a name="line.175"></a>
<FONT color="green">176</FONT>        }<a name="line.176"></a>
<FONT color="green">177</FONT>    <a name="line.177"></a>
<FONT color="green">178</FONT>        public void findNamedResource(String name, String... pathNames) {<a name="line.178"></a>
<FONT color="green">179</FONT>            if (pathNames == null) {<a name="line.179"></a>
<FONT color="green">180</FONT>                return;<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>            Test test = new NameIs(name);<a name="line.183"></a>
<FONT color="green">184</FONT>            for (String pkg : pathNames) {<a name="line.184"></a>
<FONT color="green">185</FONT>                findInPackage(test, pkg);<a name="line.185"></a>
<FONT color="green">186</FONT>            }<a name="line.186"></a>
<FONT color="green">187</FONT>        }<a name="line.187"></a>
<FONT color="green">188</FONT>    <a name="line.188"></a>
<FONT color="green">189</FONT>        /**<a name="line.189"></a>
<FONT color="green">190</FONT>         * Attempts to discover classes that pass the test. Accumulated<a name="line.190"></a>
<FONT color="green">191</FONT>         * classes can be accessed by calling {@link #getClasses()}.<a name="line.191"></a>
<FONT color="green">192</FONT>         *<a name="line.192"></a>
<FONT color="green">193</FONT>         * @param test the test to determine matching classes<a name="line.193"></a>
<FONT color="green">194</FONT>         * @param packageNames one or more package names to scan (including subpackages) for classes<a name="line.194"></a>
<FONT color="green">195</FONT>         */<a name="line.195"></a>
<FONT color="green">196</FONT>        public void find(Test test, String... packageNames) {<a name="line.196"></a>
<FONT color="green">197</FONT>            if (packageNames == null) {<a name="line.197"></a>
<FONT color="green">198</FONT>                return;<a name="line.198"></a>
<FONT color="green">199</FONT>            }<a name="line.199"></a>
<FONT color="green">200</FONT>    <a name="line.200"></a>
<FONT color="green">201</FONT>            for (String pkg : packageNames) {<a name="line.201"></a>
<FONT color="green">202</FONT>                findInPackage(test, pkg);<a name="line.202"></a>
<FONT color="green">203</FONT>            }<a name="line.203"></a>
<FONT color="green">204</FONT>        }<a name="line.204"></a>
<FONT color="green">205</FONT>    <a name="line.205"></a>
<FONT color="green">206</FONT>        /**<a name="line.206"></a>
<FONT color="green">207</FONT>         * Scans for classes starting at the package provided and descending into subpackages.<a name="line.207"></a>
<FONT color="green">208</FONT>         * Each class is offered up to the Test as it is discovered, and if the Test returns<a name="line.208"></a>
<FONT color="green">209</FONT>         * true the class is retained.  Accumulated classes can be fetched by calling<a name="line.209"></a>
<FONT color="green">210</FONT>         * {@link #getClasses()}.<a name="line.210"></a>
<FONT color="green">211</FONT>         *<a name="line.211"></a>
<FONT color="green">212</FONT>         * @param test an instance of {@link Test} that will be used to filter classes<a name="line.212"></a>
<FONT color="green">213</FONT>         * @param packageName the name of the package from which to start scanning for<a name="line.213"></a>
<FONT color="green">214</FONT>         *        classes, e.g. {@code net.sourceforge.stripes}<a name="line.214"></a>
<FONT color="green">215</FONT>         */<a name="line.215"></a>
<FONT color="green">216</FONT>        public void findInPackage(Test test, String packageName) {<a name="line.216"></a>
<FONT color="green">217</FONT>            packageName = packageName.replace('.', '/');<a name="line.217"></a>
<FONT color="green">218</FONT>            ClassLoader loader = getClassLoader();<a name="line.218"></a>
<FONT color="green">219</FONT>            Enumeration&lt;URL&gt; urls;<a name="line.219"></a>
<FONT color="green">220</FONT>    <a name="line.220"></a>
<FONT color="green">221</FONT>            try {<a name="line.221"></a>
<FONT color="green">222</FONT>                urls = loader.getResources(packageName);<a name="line.222"></a>
<FONT color="green">223</FONT>            } catch (IOException ioe) {<a name="line.223"></a>
<FONT color="green">224</FONT>                LOG.warn("Could not read package: " + packageName, ioe);<a name="line.224"></a>
<FONT color="green">225</FONT>                return;<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>            while (urls.hasMoreElements()) {<a name="line.228"></a>
<FONT color="green">229</FONT>                try {<a name="line.229"></a>
<FONT color="green">230</FONT>                    String urlPath = urls.nextElement().getFile();<a name="line.230"></a>
<FONT color="green">231</FONT>                    urlPath = URLDecoder.decode(urlPath, "UTF-8");<a name="line.231"></a>
<FONT color="green">232</FONT>    <a name="line.232"></a>
<FONT color="green">233</FONT>                    // If it's a file in a directory, trim the stupid file: spec<a name="line.233"></a>
<FONT color="green">234</FONT>                    if (urlPath.startsWith("file:")) {<a name="line.234"></a>
<FONT color="green">235</FONT>                        urlPath = urlPath.substring(5);<a name="line.235"></a>
<FONT color="green">236</FONT>                    }<a name="line.236"></a>
<FONT color="green">237</FONT>    <a name="line.237"></a>
<FONT color="green">238</FONT>                    // Else it's in a JAR, grab the path to the jar<a name="line.238"></a>
<FONT color="green">239</FONT>                    if (urlPath.indexOf('!') &gt; 0) {<a name="line.239"></a>
<FONT color="green">240</FONT>                        urlPath = urlPath.substring(0, urlPath.indexOf('!'));<a name="line.240"></a>
<FONT color="green">241</FONT>                    }<a name="line.241"></a>
<FONT color="green">242</FONT>    <a name="line.242"></a>
<FONT color="green">243</FONT>                    LOG.info("Scanning for classes in [" + urlPath + "] matching criteria: " + test);<a name="line.243"></a>
<FONT color="green">244</FONT>                    File file = new File(urlPath);<a name="line.244"></a>
<FONT color="green">245</FONT>                    if (file.isDirectory()) {<a name="line.245"></a>
<FONT color="green">246</FONT>                        loadImplementationsInDirectory(test, packageName, file);<a name="line.246"></a>
<FONT color="green">247</FONT>                    } else {<a name="line.247"></a>
<FONT color="green">248</FONT>                        loadImplementationsInJar(test, packageName, file);<a name="line.248"></a>
<FONT color="green">249</FONT>                    }<a name="line.249"></a>
<FONT color="green">250</FONT>                } catch (IOException ioe) {<a name="line.250"></a>
<FONT color="green">251</FONT>                    LOG.warn("could not read entries", ioe);<a name="line.251"></a>
<FONT color="green">252</FONT>                }<a name="line.252"></a>
<FONT color="green">253</FONT>            }<a name="line.253"></a>
<FONT color="green">254</FONT>        }<a name="line.254"></a>
<FONT color="green">255</FONT>    <a name="line.255"></a>
<FONT color="green">256</FONT>    <a name="line.256"></a>
<FONT color="green">257</FONT>        /**<a name="line.257"></a>
<FONT color="green">258</FONT>         * Finds matches in a physical directory on a filesystem.  Examines all<a name="line.258"></a>
<FONT color="green">259</FONT>         * files within a directory - if the File object is not a directory, and ends with &lt;i&gt;.class&lt;/i&gt;<a name="line.259"></a>
<FONT color="green">260</FONT>         * the file is loaded and tested to see if it is acceptable according to the Test.  Operates<a name="line.260"></a>
<FONT color="green">261</FONT>         * recursively to find classes within a folder structure matching the package structure.<a name="line.261"></a>
<FONT color="green">262</FONT>         *<a name="line.262"></a>
<FONT color="green">263</FONT>         * @param test a Test used to filter the classes that are discovered<a name="line.263"></a>
<FONT color="green">264</FONT>         * @param parent the package name up to this directory in the package hierarchy.  E.g. if<a name="line.264"></a>
<FONT color="green">265</FONT>         *        /classes is in the classpath and we wish to examine files in /classes/org/apache then<a name="line.265"></a>
<FONT color="green">266</FONT>         *        the values of &lt;i&gt;parent&lt;/i&gt; would be &lt;i&gt;org/apache&lt;/i&gt;<a name="line.266"></a>
<FONT color="green">267</FONT>         * @param location a File object representing a directory<a name="line.267"></a>
<FONT color="green">268</FONT>         */<a name="line.268"></a>
<FONT color="green">269</FONT>        private void loadImplementationsInDirectory(Test test, String parent, File location) {<a name="line.269"></a>
<FONT color="green">270</FONT>            File[] files = location.listFiles();<a name="line.270"></a>
<FONT color="green">271</FONT>            StringBuilder builder;<a name="line.271"></a>
<FONT color="green">272</FONT>    <a name="line.272"></a>
<FONT color="green">273</FONT>            for (File file : files) {<a name="line.273"></a>
<FONT color="green">274</FONT>                builder = new StringBuilder();<a name="line.274"></a>
<FONT color="green">275</FONT>                builder.append(parent).append("/").append(file.getName());<a name="line.275"></a>
<FONT color="green">276</FONT>                String packageOrClass = parent == null ? file.getName() : builder.toString();<a name="line.276"></a>
<FONT color="green">277</FONT>    <a name="line.277"></a>
<FONT color="green">278</FONT>                if (file.isDirectory()) {<a name="line.278"></a>
<FONT color="green">279</FONT>                    loadImplementationsInDirectory(test, packageOrClass, file);<a name="line.279"></a>
<FONT color="green">280</FONT>                } else if (isTestApplicable(test, file.getName())) {<a name="line.280"></a>
<FONT color="green">281</FONT>                    addIfMatching(test, packageOrClass);<a name="line.281"></a>
<FONT color="green">282</FONT>                }<a name="line.282"></a>
<FONT color="green">283</FONT>            }<a name="line.283"></a>
<FONT color="green">284</FONT>        }<a name="line.284"></a>
<FONT color="green">285</FONT>    <a name="line.285"></a>
<FONT color="green">286</FONT>        private boolean isTestApplicable(Test test, String path) {<a name="line.286"></a>
<FONT color="green">287</FONT>            return test.doesMatchResource() || path.endsWith(".class") &amp;&amp; test.doesMatchClass();<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>        /**<a name="line.290"></a>
<FONT color="green">291</FONT>         * Finds matching classes within a jar files that contains a folder structure<a name="line.291"></a>
<FONT color="green">292</FONT>         * matching the package structure.  If the File is not a JarFile or does not exist a warning<a name="line.292"></a>
<FONT color="green">293</FONT>         * will be logged, but no error will be raised.<a name="line.293"></a>
<FONT color="green">294</FONT>         *<a name="line.294"></a>
<FONT color="green">295</FONT>         * @param test a Test used to filter the classes that are discovered<a name="line.295"></a>
<FONT color="green">296</FONT>         * @param parent the parent package under which classes must be in order to be considered<a name="line.296"></a>
<FONT color="green">297</FONT>         * @param jarfile the jar file to be examined for classes<a name="line.297"></a>
<FONT color="green">298</FONT>         */<a name="line.298"></a>
<FONT color="green">299</FONT>        private void loadImplementationsInJar(Test test, String parent, File jarfile) {<a name="line.299"></a>
<FONT color="green">300</FONT>    <a name="line.300"></a>
<FONT color="green">301</FONT>            try {<a name="line.301"></a>
<FONT color="green">302</FONT>                JarEntry entry;<a name="line.302"></a>
<FONT color="green">303</FONT>                JarInputStream jarStream = new JarInputStream(new FileInputStream(jarfile));<a name="line.303"></a>
<FONT color="green">304</FONT>    <a name="line.304"></a>
<FONT color="green">305</FONT>                while ((entry = jarStream.getNextJarEntry()) != null) {<a name="line.305"></a>
<FONT color="green">306</FONT>                    String name = entry.getName();<a name="line.306"></a>
<FONT color="green">307</FONT>                    if (!entry.isDirectory() &amp;&amp; name.startsWith(parent) &amp;&amp; isTestApplicable(test, name)) {<a name="line.307"></a>
<FONT color="green">308</FONT>                        addIfMatching(test, name);<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>            } catch (IOException ioe) {<a name="line.311"></a>
<FONT color="green">312</FONT>                LOG.error("Could not search jar file '" + jarfile + "' for classes matching criteria: " +<a name="line.312"></a>
<FONT color="green">313</FONT>                          test + " due to an IOException", ioe);<a name="line.313"></a>
<FONT color="green">314</FONT>            }<a name="line.314"></a>
<FONT color="green">315</FONT>        }<a name="line.315"></a>
<FONT color="green">316</FONT>    <a name="line.316"></a>
<FONT color="green">317</FONT>        /**<a name="line.317"></a>
<FONT color="green">318</FONT>         * Add the class designated by the fully qualified class name provided to the set of<a name="line.318"></a>
<FONT color="green">319</FONT>         * resolved classes if and only if it is approved by the Test supplied.<a name="line.319"></a>
<FONT color="green">320</FONT>         *<a name="line.320"></a>
<FONT color="green">321</FONT>         * @param test the test used to determine if the class matches<a name="line.321"></a>
<FONT color="green">322</FONT>         * @param fqn the fully qualified name of a class<a name="line.322"></a>
<FONT color="green">323</FONT>         */<a name="line.323"></a>
<FONT color="green">324</FONT>        protected void addIfMatching(Test test, String fqn) {<a name="line.324"></a>
<FONT color="green">325</FONT>            try {<a name="line.325"></a>
<FONT color="green">326</FONT>                ClassLoader loader = getClassLoader();<a name="line.326"></a>
<FONT color="green">327</FONT>                if (test.doesMatchClass()) {<a name="line.327"></a>
<FONT color="green">328</FONT>                    String externalName = fqn.substring(0, fqn.indexOf('.')).replace('/', '.');<a name="line.328"></a>
<FONT color="green">329</FONT>                    if (LOG.isDebugEnabled()) {<a name="line.329"></a>
<FONT color="green">330</FONT>                        LOG.debug("Checking to see if class " + externalName + " matches criteria [" + test + "]");<a name="line.330"></a>
<FONT color="green">331</FONT>                    }<a name="line.331"></a>
<FONT color="green">332</FONT>    <a name="line.332"></a>
<FONT color="green">333</FONT>                    Class type = loader.loadClass(externalName);<a name="line.333"></a>
<FONT color="green">334</FONT>                    if (test.matches(type)) {<a name="line.334"></a>
<FONT color="green">335</FONT>                        classMatches.add((Class&lt;T&gt;) type);<a name="line.335"></a>
<FONT color="green">336</FONT>                    }<a name="line.336"></a>
<FONT color="green">337</FONT>                }<a name="line.337"></a>
<FONT color="green">338</FONT>                if (test.doesMatchResource()) {<a name="line.338"></a>
<FONT color="green">339</FONT>                    URL url = loader.getResource(fqn);<a name="line.339"></a>
<FONT color="green">340</FONT>                    if (url == null) {<a name="line.340"></a>
<FONT color="green">341</FONT>                        url = loader.getResource(fqn.substring(1));<a name="line.341"></a>
<FONT color="green">342</FONT>                    }<a name="line.342"></a>
<FONT color="green">343</FONT>                    if (url != null &amp;&amp; test.matches(url.toURI())) {<a name="line.343"></a>
<FONT color="green">344</FONT>                        resourceMatches.add(url.toURI());<a name="line.344"></a>
<FONT color="green">345</FONT>                    }<a name="line.345"></a>
<FONT color="green">346</FONT>                }<a name="line.346"></a>
<FONT color="green">347</FONT>            } catch (Throwable t) {<a name="line.347"></a>
<FONT color="green">348</FONT>                LOG.warn("Could not examine class '" + fqn + "' due to a " +<a name="line.348"></a>
<FONT color="green">349</FONT>                         t.getClass().getName() + " with message: " + t.getMessage());<a name="line.349"></a>
<FONT color="green">350</FONT>            }<a name="line.350"></a>
<FONT color="green">351</FONT>        }<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 simple interface that specifies how to test classes to determine if they<a name="line.354"></a>
<FONT color="green">355</FONT>         * are to be included in the results produced by the ResolverUtil.<a name="line.355"></a>
<FONT color="green">356</FONT>         */<a name="line.356"></a>
<FONT color="green">357</FONT>        public interface Test {<a name="line.357"></a>
<FONT color="green">358</FONT>            /**<a name="line.358"></a>
<FONT color="green">359</FONT>             * Will be called repeatedly with candidate classes. Must return True if a class<a name="line.359"></a>
<FONT color="green">360</FONT>             * is to be included in the results, false otherwise.<a name="line.360"></a>
<FONT color="green">361</FONT>             * @param type The Class to match against.<a name="line.361"></a>
<FONT color="green">362</FONT>             * @return true if the Class matches.<a name="line.362"></a>
<FONT color="green">363</FONT>             */<a name="line.363"></a>
<FONT color="green">364</FONT>            boolean matches(Class type);<a name="line.364"></a>
<FONT color="green">365</FONT>    <a name="line.365"></a>
<FONT color="green">366</FONT>            /**<a name="line.366"></a>
<FONT color="green">367</FONT>             * Test for a resource.<a name="line.367"></a>
<FONT color="green">368</FONT>             * @param resource The URI to the resource.<a name="line.368"></a>
<FONT color="green">369</FONT>             * @return true if the resource matches.<a name="line.369"></a>
<FONT color="green">370</FONT>             */<a name="line.370"></a>
<FONT color="green">371</FONT>            boolean matches(URI resource);<a name="line.371"></a>
<FONT color="green">372</FONT>    <a name="line.372"></a>
<FONT color="green">373</FONT>            boolean doesMatchClass();<a name="line.373"></a>
<FONT color="green">374</FONT>            boolean doesMatchResource();<a name="line.374"></a>
<FONT color="green">375</FONT>        }<a name="line.375"></a>
<FONT color="green">376</FONT>    <a name="line.376"></a>
<FONT color="green">377</FONT>        /**<a name="line.377"></a>
<FONT color="green">378</FONT>         * Test against a Class.<a name="line.378"></a>
<FONT color="green">379</FONT>         */<a name="line.379"></a>
<FONT color="green">380</FONT>        public abstract static class ClassTest implements Test {<a name="line.380"></a>
<FONT color="green">381</FONT>            public boolean matches(URI resource) {<a name="line.381"></a>
<FONT color="green">382</FONT>                throw new UnsupportedOperationException();<a name="line.382"></a>
<FONT color="green">383</FONT>            }<a name="line.383"></a>
<FONT color="green">384</FONT>    <a name="line.384"></a>
<FONT color="green">385</FONT>            public boolean doesMatchClass() {<a name="line.385"></a>
<FONT color="green">386</FONT>                return true;<a name="line.386"></a>
<FONT color="green">387</FONT>            }<a name="line.387"></a>
<FONT color="green">388</FONT>            public boolean doesMatchResource() {<a name="line.388"></a>
<FONT color="green">389</FONT>                return false;<a name="line.389"></a>
<FONT color="green">390</FONT>            }<a name="line.390"></a>
<FONT color="green">391</FONT>        }<a name="line.391"></a>
<FONT color="green">392</FONT>    <a name="line.392"></a>
<FONT color="green">393</FONT>        /**<a name="line.393"></a>
<FONT color="green">394</FONT>         * Test against a resource.<a name="line.394"></a>
<FONT color="green">395</FONT>         */<a name="line.395"></a>
<FONT color="green">396</FONT>        public abstract static class ResourceTest implements Test {<a name="line.396"></a>
<FONT color="green">397</FONT>            public boolean matches(Class cls) {<a name="line.397"></a>
<FONT color="green">398</FONT>                throw new UnsupportedOperationException();<a name="line.398"></a>
<FONT color="green">399</FONT>            }<a name="line.399"></a>
<FONT color="green">400</FONT>    <a name="line.400"></a>
<FONT color="green">401</FONT>            public boolean doesMatchClass() {<a name="line.401"></a>
<FONT color="green">402</FONT>                return false;<a name="line.402"></a>
<FONT color="green">403</FONT>            }<a name="line.403"></a>
<FONT color="green">404</FONT>            public boolean doesMatchResource() {<a name="line.404"></a>
<FONT color="green">405</FONT>                return true;<a name="line.405"></a>
<FONT color="green">406</FONT>            }<a name="line.406"></a>
<FONT color="green">407</FONT>        }<a name="line.407"></a>
<FONT color="green">408</FONT>    <a name="line.408"></a>
<FONT color="green">409</FONT>        /**<a name="line.409"></a>
<FONT color="green">410</FONT>         * A Test that checks to see if each class is assignable to the provided class. Note<a name="line.410"></a>
<FONT color="green">411</FONT>         * that this test will match the parent type itself if it is presented for matching.<a name="line.411"></a>
<FONT color="green">412</FONT>         */<a name="line.412"></a>
<FONT color="green">413</FONT>        public static class IsA extends ClassTest {<a name="line.413"></a>
<FONT color="green">414</FONT>            private Class parent;<a name="line.414"></a>
<FONT color="green">415</FONT>    <a name="line.415"></a>
<FONT color="green">416</FONT>            /**<a name="line.416"></a>
<FONT color="green">417</FONT>             * Constructs an IsA test using the supplied Class as the parent class/interface.<a name="line.417"></a>
<FONT color="green">418</FONT>             * @param parentType The parent class to check for.<a name="line.418"></a>
<FONT color="green">419</FONT>             */<a name="line.419"></a>
<FONT color="green">420</FONT>            public IsA(Class parentType) { this.parent = parentType; }<a name="line.420"></a>
<FONT color="green">421</FONT>    <a name="line.421"></a>
<FONT color="green">422</FONT>            /**<a name="line.422"></a>
<FONT color="green">423</FONT>             * Returns true if type is assignable to the parent type supplied in the constructor.<a name="line.423"></a>
<FONT color="green">424</FONT>             * @param type The Class to check.<a name="line.424"></a>
<FONT color="green">425</FONT>             * @return true if the Class matches.<a name="line.425"></a>
<FONT color="green">426</FONT>             */<a name="line.426"></a>
<FONT color="green">427</FONT>            public boolean matches(Class type) {<a name="line.427"></a>
<FONT color="green">428</FONT>                return type != null &amp;&amp; parent.isAssignableFrom(type);<a name="line.428"></a>
<FONT color="green">429</FONT>            }<a name="line.429"></a>
<FONT color="green">430</FONT>    <a name="line.430"></a>
<FONT color="green">431</FONT>            @Override<a name="line.431"></a>
<FONT color="green">432</FONT>            public String toString() {<a name="line.432"></a>
<FONT color="green">433</FONT>                return "is assignable to " + parent.getSimpleName();<a name="line.433"></a>
<FONT color="green">434</FONT>            }<a name="line.434"></a>
<FONT color="green">435</FONT>        }<a name="line.435"></a>
<FONT color="green">436</FONT>    <a name="line.436"></a>
<FONT color="green">437</FONT>        /**<a name="line.437"></a>
<FONT color="green">438</FONT>         * A Test that checks to see if each class name ends with the provided suffix.<a name="line.438"></a>
<FONT color="green">439</FONT>         */<a name="line.439"></a>
<FONT color="green">440</FONT>        public static class NameEndsWith extends ClassTest {<a name="line.440"></a>
<FONT color="green">441</FONT>            private String suffix;<a name="line.441"></a>
<FONT color="green">442</FONT>    <a name="line.442"></a>
<FONT color="green">443</FONT>            /**<a name="line.443"></a>
<FONT color="green">444</FONT>             * Constructs a NameEndsWith test using the supplied suffix.<a name="line.444"></a>
<FONT color="green">445</FONT>             * @param suffix the String suffix to check for.<a name="line.445"></a>
<FONT color="green">446</FONT>             */<a name="line.446"></a>
<FONT color="green">447</FONT>            public NameEndsWith(String suffix) { this.suffix = suffix; }<a name="line.447"></a>
<FONT color="green">448</FONT>    <a name="line.448"></a>
<FONT color="green">449</FONT>            /**<a name="line.449"></a>
<FONT color="green">450</FONT>             * Returns true if type name ends with the suffix supplied in the constructor.<a name="line.450"></a>
<FONT color="green">451</FONT>             * @param type The Class to check.<a name="line.451"></a>
<FONT color="green">452</FONT>             * @return true if the Class matches.<a name="line.452"></a>
<FONT color="green">453</FONT>             */<a name="line.453"></a>
<FONT color="green">454</FONT>            public boolean matches(Class type) {<a name="line.454"></a>
<FONT color="green">455</FONT>                return type != null &amp;&amp; type.getName().endsWith(suffix);<a name="line.455"></a>
<FONT color="green">456</FONT>            }<a name="line.456"></a>
<FONT color="green">457</FONT>    <a name="line.457"></a>
<FONT color="green">458</FONT>            @Override<a name="line.458"></a>
<FONT color="green">459</FONT>            public String toString() {<a name="line.459"></a>
<FONT color="green">460</FONT>                return "ends with the suffix " + suffix;<a name="line.460"></a>
<FONT color="green">461</FONT>            }<a name="line.461"></a>
<FONT color="green">462</FONT>        }<a name="line.462"></a>
<FONT color="green">463</FONT>    <a name="line.463"></a>
<FONT color="green">464</FONT>        /**<a name="line.464"></a>
<FONT color="green">465</FONT>         * A Test that checks to see if each class is annotated with a specific annotation. If it<a name="line.465"></a>
<FONT color="green">466</FONT>         * is, then the test returns true, otherwise false.<a name="line.466"></a>
<FONT color="green">467</FONT>         */<a name="line.467"></a>
<FONT color="green">468</FONT>        public static class AnnotatedWith extends ClassTest {<a name="line.468"></a>
<FONT color="green">469</FONT>            private Class&lt;? extends Annotation&gt; annotation;<a name="line.469"></a>
<FONT color="green">470</FONT>    <a name="line.470"></a>
<FONT color="green">471</FONT>            /**<a name="line.471"></a>
<FONT color="green">472</FONT>             * Constructs an AnnotatedWith test for the specified annotation type.<a name="line.472"></a>
<FONT color="green">473</FONT>             * @param annotation The annotation to check for.<a name="line.473"></a>
<FONT color="green">474</FONT>             */<a name="line.474"></a>
<FONT color="green">475</FONT>            public AnnotatedWith(Class&lt;? extends Annotation&gt; annotation) {<a name="line.475"></a>
<FONT color="green">476</FONT>                this.annotation = annotation;<a name="line.476"></a>
<FONT color="green">477</FONT>            }<a name="line.477"></a>
<FONT color="green">478</FONT>    <a name="line.478"></a>
<FONT color="green">479</FONT>            /**<a name="line.479"></a>
<FONT color="green">480</FONT>             * Returns true if the type is annotated with the class provided to the constructor.<a name="line.480"></a>
<FONT color="green">481</FONT>             * @param type the Class to match against.<a name="line.481"></a>
<FONT color="green">482</FONT>             * @return true if the Classes match.<a name="line.482"></a>
<FONT color="green">483</FONT>             */<a name="line.483"></a>
<FONT color="green">484</FONT>            public boolean matches(Class type) {<a name="line.484"></a>
<FONT color="green">485</FONT>                return type != null &amp;&amp; type.isAnnotationPresent(annotation);<a name="line.485"></a>
<FONT color="green">486</FONT>            }<a name="line.486"></a>
<FONT color="green">487</FONT>    <a name="line.487"></a>
<FONT color="green">488</FONT>            @Override<a name="line.488"></a>
<FONT color="green">489</FONT>            public String toString() {<a name="line.489"></a>
<FONT color="green">490</FONT>                return "annotated with @" + annotation.getSimpleName();<a name="line.490"></a>
<FONT color="green">491</FONT>            }<a name="line.491"></a>
<FONT color="green">492</FONT>        }<a name="line.492"></a>
<FONT color="green">493</FONT>    <a name="line.493"></a>
<FONT color="green">494</FONT>        /**<a name="line.494"></a>
<FONT color="green">495</FONT>         * A Test that checks to see if the class name matches.<a name="line.495"></a>
<FONT color="green">496</FONT>         */<a name="line.496"></a>
<FONT color="green">497</FONT>        public static class NameIs extends ResourceTest {<a name="line.497"></a>
<FONT color="green">498</FONT>            private String name;<a name="line.498"></a>
<FONT color="green">499</FONT>    <a name="line.499"></a>
<FONT color="green">500</FONT>            public NameIs(String name) { this.name = "/" + name; }<a name="line.500"></a>
<FONT color="green">501</FONT>    <a name="line.501"></a>
<FONT color="green">502</FONT>            public boolean matches(URI resource) {<a name="line.502"></a>
<FONT color="green">503</FONT>                return (resource.getPath().endsWith(name));<a name="line.503"></a>
<FONT color="green">504</FONT>            }<a name="line.504"></a>
<FONT color="green">505</FONT>    <a name="line.505"></a>
<FONT color="green">506</FONT>            @Override public String toString() {<a name="line.506"></a>
<FONT color="green">507</FONT>                return "named " + name;<a name="line.507"></a>
<FONT color="green">508</FONT>            }<a name="line.508"></a>
<FONT color="green">509</FONT>        }<a name="line.509"></a>
<FONT color="green">510</FONT>    }<a name="line.510"></a>




























































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