<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.crypto.hash.format;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.util.ClassUtils;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.util.StringUtils;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.util.UnknownClassException;</a>
<span class="sourceLineNo">024</span><a id="line.24"></a>
<span class="sourceLineNo">025</span><a id="line.25">import java.util.HashMap;</a>
<span class="sourceLineNo">026</span><a id="line.26">import java.util.HashSet;</a>
<span class="sourceLineNo">027</span><a id="line.27">import java.util.Map;</a>
<span class="sourceLineNo">028</span><a id="line.28">import java.util.Set;</a>
<span class="sourceLineNo">029</span><a id="line.29"></a>
<span class="sourceLineNo">030</span><a id="line.30">/**</a>
<span class="sourceLineNo">031</span><a id="line.31"> * This default {@code HashFormatFactory} implementation heuristically determines a {@code HashFormat} class to</a>
<span class="sourceLineNo">032</span><a id="line.32"> * instantiate based on the input argument and returns a new instance of the discovered class.  The heuristics are</a>
<span class="sourceLineNo">033</span><a id="line.33"> * detailed in the {@link #getInstance(String) getInstance} method documentation.</a>
<span class="sourceLineNo">034</span><a id="line.34"> *</a>
<span class="sourceLineNo">035</span><a id="line.35"> * @since 1.2</a>
<span class="sourceLineNo">036</span><a id="line.36"> */</a>
<span class="sourceLineNo">037</span><a id="line.37">public class DefaultHashFormatFactory implements HashFormatFactory {</a>
<span class="sourceLineNo">038</span><a id="line.38"></a>
<span class="sourceLineNo">039</span><a id="line.39">    private Map&lt;String, String&gt; formatClassNames; //id - to - fully qualified class name</a>
<span class="sourceLineNo">040</span><a id="line.40"></a>
<span class="sourceLineNo">041</span><a id="line.41">    private Set&lt;String&gt; searchPackages; //packages to search for HashFormat implementations</a>
<span class="sourceLineNo">042</span><a id="line.42"></a>
<span class="sourceLineNo">043</span><a id="line.43">    public DefaultHashFormatFactory() {</a>
<span class="sourceLineNo">044</span><a id="line.44">        this.searchPackages = new HashSet&lt;String&gt;();</a>
<span class="sourceLineNo">045</span><a id="line.45">        this.formatClassNames = new HashMap&lt;String, String&gt;();</a>
<span class="sourceLineNo">046</span><a id="line.46">    }</a>
<span class="sourceLineNo">047</span><a id="line.47"></a>
<span class="sourceLineNo">048</span><a id="line.48">    /**</a>
<span class="sourceLineNo">049</span><a id="line.49">     * Returns a {@code hashFormatAlias}-to-&lt;code&gt;fullyQualifiedHashFormatClassNameImplementation&lt;/code&gt; map.</a>
<span class="sourceLineNo">050</span><a id="line.50">     * &lt;p/&gt;</a>
<span class="sourceLineNo">051</span><a id="line.51">     * This map will be used by the {@link #getInstance(String) getInstance} implementation:  that method's argument</a>
<span class="sourceLineNo">052</span><a id="line.52">     * will be used as a lookup key to this map.  If the map returns a value, that value will be used to instantiate</a>
<span class="sourceLineNo">053</span><a id="line.53">     * and return a new {@code HashFormat} instance.</a>
<span class="sourceLineNo">054</span><a id="line.54">     * &lt;h3&gt;Defaults&lt;/h3&gt;</a>
<span class="sourceLineNo">055</span><a id="line.55">     * Shiro's default HashFormat implementations (as listed by the {@link ProvidedHashFormat} enum) will</a>
<span class="sourceLineNo">056</span><a id="line.56">     * be searched automatically independently of this map.  You only need to populate this map with custom</a>
<span class="sourceLineNo">057</span><a id="line.57">     * {@code HashFormat} implementations that are &lt;em&gt;not&lt;/em&gt; already represented by a {@code ProvidedHashFormat}.</a>
<span class="sourceLineNo">058</span><a id="line.58">     * &lt;h3&gt;Efficiency&lt;/h3&gt;</a>
<span class="sourceLineNo">059</span><a id="line.59">     * Populating this map will be more efficient than configuring {@link #getSearchPackages() searchPackages},</a>
<span class="sourceLineNo">060</span><a id="line.60">     * but search packages may be more convenient depending on the number of {@code HashFormat} implementations that</a>
<span class="sourceLineNo">061</span><a id="line.61">     * need to be supported by this factory.</a>
<span class="sourceLineNo">062</span><a id="line.62">     *</a>
<span class="sourceLineNo">063</span><a id="line.63">     * @return a {@code hashFormatAlias}-to-&lt;code&gt;fullyQualifiedHashFormatClassNameImplementation&lt;/code&gt; map.</a>
<span class="sourceLineNo">064</span><a id="line.64">     */</a>
<span class="sourceLineNo">065</span><a id="line.65">    public Map&lt;String, String&gt; getFormatClassNames() {</a>
<span class="sourceLineNo">066</span><a id="line.66">        return formatClassNames;</a>
<span class="sourceLineNo">067</span><a id="line.67">    }</a>
<span class="sourceLineNo">068</span><a id="line.68"></a>
<span class="sourceLineNo">069</span><a id="line.69">    /**</a>
<span class="sourceLineNo">070</span><a id="line.70">     * Sets the {@code hash-format-alias}-to-{@code fullyQualifiedHashFormatClassNameImplementation} map to be used in</a>
<span class="sourceLineNo">071</span><a id="line.71">     * the {@link #getInstance(String)} implementation.  See the {@link #getFormatClassNames()} JavaDoc for more</a>
<span class="sourceLineNo">072</span><a id="line.72">     * information.</a>
<span class="sourceLineNo">073</span><a id="line.73">     * &lt;h3&gt;Efficiency&lt;/h3&gt;</a>
<span class="sourceLineNo">074</span><a id="line.74">     * Populating this map will be more efficient than configuring {@link #getSearchPackages() searchPackages},</a>
<span class="sourceLineNo">075</span><a id="line.75">     * but search packages may be more convenient depending on the number of {@code HashFormat} implementations that</a>
<span class="sourceLineNo">076</span><a id="line.76">     * need to be supported by this factory.</a>
<span class="sourceLineNo">077</span><a id="line.77">     *</a>
<span class="sourceLineNo">078</span><a id="line.78">     * @param formatClassNames the {@code hash-format-alias}-to-{@code fullyQualifiedHashFormatClassNameImplementation}</a>
<span class="sourceLineNo">079</span><a id="line.79">     *                         map to be used in the {@link #getInstance(String)} implementation.</a>
<span class="sourceLineNo">080</span><a id="line.80">     */</a>
<span class="sourceLineNo">081</span><a id="line.81">    public void setFormatClassNames(Map&lt;String, String&gt; formatClassNames) {</a>
<span class="sourceLineNo">082</span><a id="line.82">        this.formatClassNames = formatClassNames;</a>
<span class="sourceLineNo">083</span><a id="line.83">    }</a>
<span class="sourceLineNo">084</span><a id="line.84"></a>
<span class="sourceLineNo">085</span><a id="line.85">    /**</a>
<span class="sourceLineNo">086</span><a id="line.86">     * Returns a set of package names that can be searched for {@link HashFormat} implementations according to</a>
<span class="sourceLineNo">087</span><a id="line.87">     * heuristics defined in the {@link #getHashFormatClass(String, String) getHashFormat(packageName, token)} JavaDoc.</a>
<span class="sourceLineNo">088</span><a id="line.88">     * &lt;h3&gt;Efficiency&lt;/h3&gt;</a>
<span class="sourceLineNo">089</span><a id="line.89">     * Configuring this property is not as efficient as configuring a {@link #getFormatClassNames() formatClassNames}</a>
<span class="sourceLineNo">090</span><a id="line.90">     * map, but it may be more convenient depending on the number of {@code HashFormat} implementations that</a>
<span class="sourceLineNo">091</span><a id="line.91">     * need to be supported by this factory.</a>
<span class="sourceLineNo">092</span><a id="line.92">     *</a>
<span class="sourceLineNo">093</span><a id="line.93">     * @return a set of package names that can be searched for {@link HashFormat} implementations</a>
<span class="sourceLineNo">094</span><a id="line.94">     * @see #getHashFormatClass(String, String)</a>
<span class="sourceLineNo">095</span><a id="line.95">     */</a>
<span class="sourceLineNo">096</span><a id="line.96">    public Set&lt;String&gt; getSearchPackages() {</a>
<span class="sourceLineNo">097</span><a id="line.97">        return searchPackages;</a>
<span class="sourceLineNo">098</span><a id="line.98">    }</a>
<span class="sourceLineNo">099</span><a id="line.99"></a>
<span class="sourceLineNo">100</span><a id="line.100">    /**</a>
<span class="sourceLineNo">101</span><a id="line.101">     * Sets a set of package names that can be searched for {@link HashFormat} implementations according to</a>
<span class="sourceLineNo">102</span><a id="line.102">     * heuristics defined in the {@link #getHashFormatClass(String, String) getHashFormat(packageName, token)} JavaDoc.</a>
<span class="sourceLineNo">103</span><a id="line.103">     * &lt;h3&gt;Efficiency&lt;/h3&gt;</a>
<span class="sourceLineNo">104</span><a id="line.104">     * Configuring this property is not as efficient as configuring a {@link #getFormatClassNames() formatClassNames}</a>
<span class="sourceLineNo">105</span><a id="line.105">     * map, but it may be more convenient depending on the number of {@code HashFormat} implementations that</a>
<span class="sourceLineNo">106</span><a id="line.106">     * need to be supported by this factory.</a>
<span class="sourceLineNo">107</span><a id="line.107">     *</a>
<span class="sourceLineNo">108</span><a id="line.108">     * @param searchPackages a set of package names that can be searched for {@link HashFormat} implementations</a>
<span class="sourceLineNo">109</span><a id="line.109">     */</a>
<span class="sourceLineNo">110</span><a id="line.110">    public void setSearchPackages(Set&lt;String&gt; searchPackages) {</a>
<span class="sourceLineNo">111</span><a id="line.111">        this.searchPackages = searchPackages;</a>
<span class="sourceLineNo">112</span><a id="line.112">    }</a>
<span class="sourceLineNo">113</span><a id="line.113"></a>
<span class="sourceLineNo">114</span><a id="line.114">    public HashFormat getInstance(String in) {</a>
<span class="sourceLineNo">115</span><a id="line.115">        if (in == null) {</a>
<span class="sourceLineNo">116</span><a id="line.116">            return null;</a>
<span class="sourceLineNo">117</span><a id="line.117">        }</a>
<span class="sourceLineNo">118</span><a id="line.118"></a>
<span class="sourceLineNo">119</span><a id="line.119">        HashFormat hashFormat = null;</a>
<span class="sourceLineNo">120</span><a id="line.120">        Class clazz = null;</a>
<span class="sourceLineNo">121</span><a id="line.121"></a>
<span class="sourceLineNo">122</span><a id="line.122">        //NOTE: this code block occurs BEFORE calling getHashFormatClass(in) on purpose as a performance</a>
<span class="sourceLineNo">123</span><a id="line.123">        //optimization.  If the input arg is an MCF-formatted string, there will be many unnecessary ClassLoader</a>
<span class="sourceLineNo">124</span><a id="line.124">        //misses which can be slow.  By checking the MCF-formatted option, we can significantly improve performance</a>
<span class="sourceLineNo">125</span><a id="line.125">        if (in.startsWith(ModularCryptFormat.TOKEN_DELIMITER)) {</a>
<span class="sourceLineNo">126</span><a id="line.126">            //odds are high that the input argument is not a fully qualified class name or a format key (e.g. 'hex',</a>
<span class="sourceLineNo">127</span><a id="line.127">            //base64' or 'shiro1').  Try to find the key and lookup via that:</a>
<span class="sourceLineNo">128</span><a id="line.128">            String test = in.substring(ModularCryptFormat.TOKEN_DELIMITER.length());</a>
<span class="sourceLineNo">129</span><a id="line.129">            String[] tokens = test.split("\\" + ModularCryptFormat.TOKEN_DELIMITER);</a>
<span class="sourceLineNo">130</span><a id="line.130">            //the MCF ID is always the first token in the delimited string:</a>
<span class="sourceLineNo">131</span><a id="line.131">            String possibleMcfId = (tokens != null &amp;&amp; tokens.length &gt; 0) ? tokens[0] : null;</a>
<span class="sourceLineNo">132</span><a id="line.132">            if (possibleMcfId != null) {</a>
<span class="sourceLineNo">133</span><a id="line.133">                //found a possible MCF ID - test it using our heuristics to see if we can find a corresponding class:</a>
<span class="sourceLineNo">134</span><a id="line.134">                clazz = getHashFormatClass(possibleMcfId);</a>
<span class="sourceLineNo">135</span><a id="line.135">            }</a>
<span class="sourceLineNo">136</span><a id="line.136">        }</a>
<span class="sourceLineNo">137</span><a id="line.137"></a>
<span class="sourceLineNo">138</span><a id="line.138">        if (clazz == null) {</a>
<span class="sourceLineNo">139</span><a id="line.139">            //not an MCF-formatted string - use the unaltered input arg and go through our heuristics:</a>
<span class="sourceLineNo">140</span><a id="line.140">            clazz = getHashFormatClass(in);</a>
<span class="sourceLineNo">141</span><a id="line.141">        }</a>
<span class="sourceLineNo">142</span><a id="line.142"></a>
<span class="sourceLineNo">143</span><a id="line.143">        if (clazz != null) {</a>
<span class="sourceLineNo">144</span><a id="line.144">            //we found a HashFormat class - instantiate it:</a>
<span class="sourceLineNo">145</span><a id="line.145">            hashFormat = newHashFormatInstance(clazz);</a>
<span class="sourceLineNo">146</span><a id="line.146">        }</a>
<span class="sourceLineNo">147</span><a id="line.147"></a>
<span class="sourceLineNo">148</span><a id="line.148">        return hashFormat;</a>
<span class="sourceLineNo">149</span><a id="line.149">    }</a>
<span class="sourceLineNo">150</span><a id="line.150"></a>
<span class="sourceLineNo">151</span><a id="line.151">    /**</a>
<span class="sourceLineNo">152</span><a id="line.152">     * Heuristically determine the fully qualified HashFormat implementation class name based on the specified</a>
<span class="sourceLineNo">153</span><a id="line.153">     * token.</a>
<span class="sourceLineNo">154</span><a id="line.154">     * &lt;p/&gt;</a>
<span class="sourceLineNo">155</span><a id="line.155">     * This implementation functions as follows (in order):</a>
<span class="sourceLineNo">156</span><a id="line.156">     * &lt;ol&gt;</a>
<span class="sourceLineNo">157</span><a id="line.157">     * &lt;li&gt;See if the argument can be used as a lookup key in the {@link #getFormatClassNames() formatClassNames}</a>
<span class="sourceLineNo">158</span><a id="line.158">     * map.  If a value (a fully qualified class name {@link HashFormat HashFormat} implementation) is found,</a>
<span class="sourceLineNo">159</span><a id="line.159">     * {@link ClassUtils#forName(String) lookup} the class and return it.&lt;/li&gt;</a>
<span class="sourceLineNo">160</span><a id="line.160">     * &lt;li&gt;</a>
<span class="sourceLineNo">161</span><a id="line.161">     * Check to see if the token argument is a</a>
<span class="sourceLineNo">162</span><a id="line.162">     * {@link ProvidedHashFormat} enum value.  If so, acquire the corresponding {@code HashFormat} class and</a>
<span class="sourceLineNo">163</span><a id="line.163">     * return it.</a>
<span class="sourceLineNo">164</span><a id="line.164">     * &lt;/li&gt;</a>
<span class="sourceLineNo">165</span><a id="line.165">     * &lt;li&gt;</a>
<span class="sourceLineNo">166</span><a id="line.166">     * Check to see if the token argument is itself a fully qualified class name.  If so, try to load the class</a>
<span class="sourceLineNo">167</span><a id="line.167">     * and return it.</a>
<span class="sourceLineNo">168</span><a id="line.168">     * &lt;/li&gt;</a>
<span class="sourceLineNo">169</span><a id="line.169">     * &lt;li&gt;If the above options do not result in a discovered class, search all all configured</a>
<span class="sourceLineNo">170</span><a id="line.170">     * {@link #getSearchPackages() searchPackages} using heuristics defined in the</a>
<span class="sourceLineNo">171</span><a id="line.171">     * {@link #getHashFormatClass(String, String) getHashFormatClass(packageName, token)} method documentation</a>
<span class="sourceLineNo">172</span><a id="line.172">     * (relaying the {@code token} argument to that method for each configured package).</a>
<span class="sourceLineNo">173</span><a id="line.173">     * &lt;/li&gt;</a>
<span class="sourceLineNo">174</span><a id="line.174">     * &lt;/ol&gt;</a>
<span class="sourceLineNo">175</span><a id="line.175">     * &lt;p/&gt;</a>
<span class="sourceLineNo">176</span><a id="line.176">     * If a class is not discovered via any of the above means, {@code null} is returned to indicate the class</a>
<span class="sourceLineNo">177</span><a id="line.177">     * could not be found.</a>
<span class="sourceLineNo">178</span><a id="line.178">     *</a>
<span class="sourceLineNo">179</span><a id="line.179">     * @param token the string token from which a class name will be heuristically determined.</a>
<span class="sourceLineNo">180</span><a id="line.180">     * @return the discovered HashFormat class implementation or {@code null} if no class could be heuristically determined.</a>
<span class="sourceLineNo">181</span><a id="line.181">     */</a>
<span class="sourceLineNo">182</span><a id="line.182">    protected Class getHashFormatClass(String token) {</a>
<span class="sourceLineNo">183</span><a id="line.183"></a>
<span class="sourceLineNo">184</span><a id="line.184">        Class clazz = null;</a>
<span class="sourceLineNo">185</span><a id="line.185"></a>
<span class="sourceLineNo">186</span><a id="line.186">        //check to see if the token is a configured FQCN alias.  This is faster than searching packages,</a>
<span class="sourceLineNo">187</span><a id="line.187">        //so we try this first:</a>
<span class="sourceLineNo">188</span><a id="line.188">        if (this.formatClassNames != null) {</a>
<span class="sourceLineNo">189</span><a id="line.189">            String value = this.formatClassNames.get(token);</a>
<span class="sourceLineNo">190</span><a id="line.190">            if (value != null) {</a>
<span class="sourceLineNo">191</span><a id="line.191">                //found an alias - see if the value is a class:</a>
<span class="sourceLineNo">192</span><a id="line.192">                clazz = lookupHashFormatClass(value);</a>
<span class="sourceLineNo">193</span><a id="line.193">            }</a>
<span class="sourceLineNo">194</span><a id="line.194">        }</a>
<span class="sourceLineNo">195</span><a id="line.195"></a>
<span class="sourceLineNo">196</span><a id="line.196">        //check to see if the token is one of Shiro's provided FQCN aliases (again, faster than searching):</a>
<span class="sourceLineNo">197</span><a id="line.197">        if (clazz == null) {</a>
<span class="sourceLineNo">198</span><a id="line.198">            ProvidedHashFormat provided = ProvidedHashFormat.byId(token);</a>
<span class="sourceLineNo">199</span><a id="line.199">            if (provided != null) {</a>
<span class="sourceLineNo">200</span><a id="line.200">                clazz = provided.getHashFormatClass();</a>
<span class="sourceLineNo">201</span><a id="line.201">            }</a>
<span class="sourceLineNo">202</span><a id="line.202">        }</a>
<span class="sourceLineNo">203</span><a id="line.203"></a>
<span class="sourceLineNo">204</span><a id="line.204">        if (clazz == null) {</a>
<span class="sourceLineNo">205</span><a id="line.205">            //check to see if 'token' was a FQCN itself:</a>
<span class="sourceLineNo">206</span><a id="line.206">            clazz = lookupHashFormatClass(token);</a>
<span class="sourceLineNo">207</span><a id="line.207">        }</a>
<span class="sourceLineNo">208</span><a id="line.208"></a>
<span class="sourceLineNo">209</span><a id="line.209">        if (clazz == null) {</a>
<span class="sourceLineNo">210</span><a id="line.210">            //token wasn't a FQCN or a FQCN alias - try searching in configured packages:</a>
<span class="sourceLineNo">211</span><a id="line.211">            if (this.searchPackages != null) {</a>
<span class="sourceLineNo">212</span><a id="line.212">                for (String packageName : this.searchPackages) {</a>
<span class="sourceLineNo">213</span><a id="line.213">                    clazz = getHashFormatClass(packageName, token);</a>
<span class="sourceLineNo">214</span><a id="line.214">                    if (clazz != null) {</a>
<span class="sourceLineNo">215</span><a id="line.215">                        //found it:</a>
<span class="sourceLineNo">216</span><a id="line.216">                        break;</a>
<span class="sourceLineNo">217</span><a id="line.217">                    }</a>
<span class="sourceLineNo">218</span><a id="line.218">                }</a>
<span class="sourceLineNo">219</span><a id="line.219">            }</a>
<span class="sourceLineNo">220</span><a id="line.220">        }</a>
<span class="sourceLineNo">221</span><a id="line.221"></a>
<span class="sourceLineNo">222</span><a id="line.222">        if (clazz != null) {</a>
<span class="sourceLineNo">223</span><a id="line.223">            assertHashFormatImpl(clazz);</a>
<span class="sourceLineNo">224</span><a id="line.224">        }</a>
<span class="sourceLineNo">225</span><a id="line.225"></a>
<span class="sourceLineNo">226</span><a id="line.226">        return clazz;</a>
<span class="sourceLineNo">227</span><a id="line.227">    }</a>
<span class="sourceLineNo">228</span><a id="line.228"></a>
<span class="sourceLineNo">229</span><a id="line.229">    /**</a>
<span class="sourceLineNo">230</span><a id="line.230">     * Heuristically determine the fully qualified {@code HashFormat} implementation class name in the specified</a>
<span class="sourceLineNo">231</span><a id="line.231">     * package based on the provided token.</a>
<span class="sourceLineNo">232</span><a id="line.232">     * &lt;p/&gt;</a>
<span class="sourceLineNo">233</span><a id="line.233">     * The token is expected to be a relevant fragment of an unqualified class name in the specified package.</a>
<span class="sourceLineNo">234</span><a id="line.234">     * A 'relevant fragment' can be one of the following:</a>
<span class="sourceLineNo">235</span><a id="line.235">     * &lt;ul&gt;</a>
<span class="sourceLineNo">236</span><a id="line.236">     * &lt;li&gt;The {@code HashFormat} implementation unqualified class name&lt;/li&gt;</a>
<span class="sourceLineNo">237</span><a id="line.237">     * &lt;li&gt;The prefix of an unqualified class name ending with the text {@code Format}.  The first character of</a>
<span class="sourceLineNo">238</span><a id="line.238">     * this prefix can be upper or lower case and both options will be tried.&lt;/li&gt;</a>
<span class="sourceLineNo">239</span><a id="line.239">     * &lt;li&gt;The prefix of an unqualified class name ending with the text {@code HashFormat}.  The first character of</a>
<span class="sourceLineNo">240</span><a id="line.240">     * this prefix can be upper or lower case and both options will be tried.&lt;/li&gt;</a>
<span class="sourceLineNo">241</span><a id="line.241">     * &lt;li&gt;The prefix of an unqualified class name ending with the text {@code CryptoFormat}.  The first character</a>
<span class="sourceLineNo">242</span><a id="line.242">     * of this prefix can be upper or lower case and both options will be tried.&lt;/li&gt;</a>
<span class="sourceLineNo">243</span><a id="line.243">     * &lt;/ul&gt;</a>
<span class="sourceLineNo">244</span><a id="line.244">     * &lt;p/&gt;</a>
<span class="sourceLineNo">245</span><a id="line.245">     * Some examples:</a>
<span class="sourceLineNo">246</span><a id="line.246">     * &lt;table&gt;</a>
<span class="sourceLineNo">247</span><a id="line.247">     * &lt;tr&gt;</a>
<span class="sourceLineNo">248</span><a id="line.248">     * &lt;th&gt;Package Name&lt;/th&gt;</a>
<span class="sourceLineNo">249</span><a id="line.249">     * &lt;th&gt;Token&lt;/th&gt;</a>
<span class="sourceLineNo">250</span><a id="line.250">     * &lt;th&gt;Expected Output Class&lt;/th&gt;</a>
<span class="sourceLineNo">251</span><a id="line.251">     * &lt;th&gt;Notes&lt;/th&gt;</a>
<span class="sourceLineNo">252</span><a id="line.252">     * &lt;/tr&gt;</a>
<span class="sourceLineNo">253</span><a id="line.253">     * &lt;tr&gt;</a>
<span class="sourceLineNo">254</span><a id="line.254">     * &lt;td&gt;{@code com.foo.whatever}&lt;/td&gt;</a>
<span class="sourceLineNo">255</span><a id="line.255">     * &lt;td&gt;{@code MyBarFormat}&lt;/td&gt;</a>
<span class="sourceLineNo">256</span><a id="line.256">     * &lt;td&gt;{@code com.foo.whatever.MyBarFormat}&lt;/td&gt;</a>
<span class="sourceLineNo">257</span><a id="line.257">     * &lt;td&gt;Token is a complete unqualified class name&lt;/td&gt;</a>
<span class="sourceLineNo">258</span><a id="line.258">     * &lt;/tr&gt;</a>
<span class="sourceLineNo">259</span><a id="line.259">     * &lt;tr&gt;</a>
<span class="sourceLineNo">260</span><a id="line.260">     * &lt;td&gt;{@code com.foo.whatever}&lt;/td&gt;</a>
<span class="sourceLineNo">261</span><a id="line.261">     * &lt;td&gt;{@code Bar}&lt;/td&gt;</a>
<span class="sourceLineNo">262</span><a id="line.262">     * &lt;td&gt;{@code com.foo.whatever.BarFormat} &lt;em&gt;or&lt;/em&gt; {@code com.foo.whatever.BarHashFormat} &lt;em&gt;or&lt;/em&gt;</a>
<span class="sourceLineNo">263</span><a id="line.263">     * {@code com.foo.whatever.BarCryptFormat}&lt;/td&gt;</a>
<span class="sourceLineNo">264</span><a id="line.264">     * &lt;td&gt;The token is only part of the unqualified class name - i.e. all characters in front of the {@code *Format}</a>
<span class="sourceLineNo">265</span><a id="line.265">     * {@code *HashFormat} or {@code *CryptFormat} suffix.  Note that the {@code *Format} variant will be tried before</a>
<span class="sourceLineNo">266</span><a id="line.266">     * {@code *HashFormat} and then finally {@code *CryptFormat}&lt;/td&gt;</a>
<span class="sourceLineNo">267</span><a id="line.267">     * &lt;/tr&gt;</a>
<span class="sourceLineNo">268</span><a id="line.268">     * &lt;tr&gt;</a>
<span class="sourceLineNo">269</span><a id="line.269">     * &lt;td&gt;{@code com.foo.whatever}&lt;/td&gt;</a>
<span class="sourceLineNo">270</span><a id="line.270">     * &lt;td&gt;{@code bar}&lt;/td&gt;</a>
<span class="sourceLineNo">271</span><a id="line.271">     * &lt;td&gt;{@code com.foo.whatever.BarFormat} &lt;em&gt;or&lt;/em&gt; {@code com.foo.whatever.BarHashFormat} &lt;em&gt;or&lt;/em&gt;</a>
<span class="sourceLineNo">272</span><a id="line.272">     * {@code com.foo.whatever.BarCryptFormat}&lt;/td&gt;</a>
<span class="sourceLineNo">273</span><a id="line.273">     * &lt;td&gt;Exact same output as the above {@code Bar} input example. (The token differs only by the first character)&lt;/td&gt;</a>
<span class="sourceLineNo">274</span><a id="line.274">     * &lt;/tr&gt;</a>
<span class="sourceLineNo">275</span><a id="line.275">     * &lt;/table&gt;</a>
<span class="sourceLineNo">276</span><a id="line.276">     *</a>
<span class="sourceLineNo">277</span><a id="line.277">     * @param packageName the package to search for matching {@code HashFormat} implementations.</a>
<span class="sourceLineNo">278</span><a id="line.278">     * @param token       the string token from which a class name will be heuristically determined.</a>
<span class="sourceLineNo">279</span><a id="line.279">     * @return the discovered HashFormat class implementation or {@code null} if no class could be heuristically determined.</a>
<span class="sourceLineNo">280</span><a id="line.280">     */</a>
<span class="sourceLineNo">281</span><a id="line.281">    protected Class getHashFormatClass(String packageName, String token) {</a>
<span class="sourceLineNo">282</span><a id="line.282">        String test = token;</a>
<span class="sourceLineNo">283</span><a id="line.283">        Class clazz = null;</a>
<span class="sourceLineNo">284</span><a id="line.284">        String pkg = packageName == null ? "" : packageName;</a>
<span class="sourceLineNo">285</span><a id="line.285"></a>
<span class="sourceLineNo">286</span><a id="line.286">        //1. Assume the arg is a fully qualified class name in the classpath:</a>
<span class="sourceLineNo">287</span><a id="line.287">        clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">288</span><a id="line.288"></a>
<span class="sourceLineNo">289</span><a id="line.289">        if (clazz == null) {</a>
<span class="sourceLineNo">290</span><a id="line.290">            test = pkg + "." + token;</a>
<span class="sourceLineNo">291</span><a id="line.291">            clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">292</span><a id="line.292">        }</a>
<span class="sourceLineNo">293</span><a id="line.293"></a>
<span class="sourceLineNo">294</span><a id="line.294">        if (clazz == null) {</a>
<span class="sourceLineNo">295</span><a id="line.295">            test = pkg + "." + StringUtils.uppercaseFirstChar(token) + "Format";</a>
<span class="sourceLineNo">296</span><a id="line.296">            clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">297</span><a id="line.297">        }</a>
<span class="sourceLineNo">298</span><a id="line.298"></a>
<span class="sourceLineNo">299</span><a id="line.299">        if (clazz == null) {</a>
<span class="sourceLineNo">300</span><a id="line.300">            test = pkg + "." + token + "Format";</a>
<span class="sourceLineNo">301</span><a id="line.301">            clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">302</span><a id="line.302">        }</a>
<span class="sourceLineNo">303</span><a id="line.303"></a>
<span class="sourceLineNo">304</span><a id="line.304">        if (clazz == null) {</a>
<span class="sourceLineNo">305</span><a id="line.305">            test = pkg + "." + StringUtils.uppercaseFirstChar(token) + "HashFormat";</a>
<span class="sourceLineNo">306</span><a id="line.306">            clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">307</span><a id="line.307">        }</a>
<span class="sourceLineNo">308</span><a id="line.308"></a>
<span class="sourceLineNo">309</span><a id="line.309">        if (clazz == null) {</a>
<span class="sourceLineNo">310</span><a id="line.310">            test = pkg + "." + token + "HashFormat";</a>
<span class="sourceLineNo">311</span><a id="line.311">            clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">312</span><a id="line.312">        }</a>
<span class="sourceLineNo">313</span><a id="line.313"></a>
<span class="sourceLineNo">314</span><a id="line.314">        if (clazz == null) {</a>
<span class="sourceLineNo">315</span><a id="line.315">            test = pkg + "." + StringUtils.uppercaseFirstChar(token) + "CryptFormat";</a>
<span class="sourceLineNo">316</span><a id="line.316">            clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">317</span><a id="line.317">        }</a>
<span class="sourceLineNo">318</span><a id="line.318"></a>
<span class="sourceLineNo">319</span><a id="line.319">        if (clazz == null) {</a>
<span class="sourceLineNo">320</span><a id="line.320">            test = pkg + "." + token + "CryptFormat";</a>
<span class="sourceLineNo">321</span><a id="line.321">            clazz = lookupHashFormatClass(test);</a>
<span class="sourceLineNo">322</span><a id="line.322">        }</a>
<span class="sourceLineNo">323</span><a id="line.323"></a>
<span class="sourceLineNo">324</span><a id="line.324">        if (clazz == null) {</a>
<span class="sourceLineNo">325</span><a id="line.325">            return null; //ran out of options</a>
<span class="sourceLineNo">326</span><a id="line.326">        }</a>
<span class="sourceLineNo">327</span><a id="line.327"></a>
<span class="sourceLineNo">328</span><a id="line.328">        assertHashFormatImpl(clazz);</a>
<span class="sourceLineNo">329</span><a id="line.329"></a>
<span class="sourceLineNo">330</span><a id="line.330">        return clazz;</a>
<span class="sourceLineNo">331</span><a id="line.331">    }</a>
<span class="sourceLineNo">332</span><a id="line.332"></a>
<span class="sourceLineNo">333</span><a id="line.333">    protected Class lookupHashFormatClass(String name) {</a>
<span class="sourceLineNo">334</span><a id="line.334">        try {</a>
<span class="sourceLineNo">335</span><a id="line.335">            return ClassUtils.forName(name);</a>
<span class="sourceLineNo">336</span><a id="line.336">        } catch (UnknownClassException ignored) {</a>
<span class="sourceLineNo">337</span><a id="line.337">        }</a>
<span class="sourceLineNo">338</span><a id="line.338"></a>
<span class="sourceLineNo">339</span><a id="line.339">        return null;</a>
<span class="sourceLineNo">340</span><a id="line.340">    }</a>
<span class="sourceLineNo">341</span><a id="line.341"></a>
<span class="sourceLineNo">342</span><a id="line.342">    protected final void assertHashFormatImpl(Class clazz) {</a>
<span class="sourceLineNo">343</span><a id="line.343">        if (!HashFormat.class.isAssignableFrom(clazz) || clazz.isInterface()) {</a>
<span class="sourceLineNo">344</span><a id="line.344">            throw new IllegalArgumentException("Discovered class [" + clazz.getName() + "] is not a " +</a>
<span class="sourceLineNo">345</span><a id="line.345">                    HashFormat.class.getName() + " implementation.");</a>
<span class="sourceLineNo">346</span><a id="line.346">        }</a>
<span class="sourceLineNo">347</span><a id="line.347"></a>
<span class="sourceLineNo">348</span><a id="line.348">    }</a>
<span class="sourceLineNo">349</span><a id="line.349"></a>
<span class="sourceLineNo">350</span><a id="line.350">    protected final HashFormat newHashFormatInstance(Class clazz) {</a>
<span class="sourceLineNo">351</span><a id="line.351">        assertHashFormatImpl(clazz);</a>
<span class="sourceLineNo">352</span><a id="line.352">        return (HashFormat) ClassUtils.newInstance(clazz);</a>
<span class="sourceLineNo">353</span><a id="line.353">    }</a>
<span class="sourceLineNo">354</span><a id="line.354">}</a>




























































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