Heuristically determine the fully qualified HashFormat implementation class name based on the specified
token.
<p/>
This implementation functions as follows (in order):
<ol>
<li>See if the argument can be used as a lookup key in the {@link #getFormatClassNames() formatClassNames}
map. If a value (a fully qualified class name {@link HashFormat HashFormat} implementation) is found,
{@link ClassUtils#forName(string) lookup} the class and return it.</li>
<li>
Check to see if the token argument is a
{@link ProvidedHashFormat} enum value. If so, acquire the corresponding {@code HashFormat} class and
return it.
</li>
<li>
Check to see if the token argument is itself a fully qualified class name. If so, try to load the class
and return it.
</li>
<li>If the above options do not result in a discovered class, search all all configured
{@link #getSearchPackages() searchPackages} using heuristics defined in the
{@link #getHashFormatClass(string, string) getHashFormatClass(packageName, token)} method documentation
(relaying the {@code token} argument to that method for each configured package).
</li>
</ol>
<p/>
If a class is not discovered via any of the above means, {@code null} is returned to indicate the class
could not be found.
@param token the string token from which a class name will be heuristically determined.
@return the discovered HashFormat class implementation or {@code null} if no class could be heuristically determined.
Heuristically determine the fully qualified HashFormat implementation class name based on the specified token. <p/> This implementation functions as follows (in order): <ol> <li>See if the argument can be used as a lookup key in the {@link #getFormatClassNames() formatClassNames} map. If a value (a fully qualified class name {@link HashFormat HashFormat} implementation) is found, {@link ClassUtils#forName(string) lookup} the class and return it.</li> <li> Check to see if the token argument is a {@link ProvidedHashFormat} enum value. If so, acquire the corresponding {@code HashFormat} class and return it. </li> <li> Check to see if the token argument is itself a fully qualified class name. If so, try to load the class and return it. </li> <li>If the above options do not result in a discovered class, search all all configured {@link #getSearchPackages() searchPackages} using heuristics defined in the {@link #getHashFormatClass(string, string) getHashFormatClass(packageName, token)} method documentation (relaying the {@code token} argument to that method for each configured package). </li> </ol> <p/> If a class is not discovered via any of the above means, {@code null} is returned to indicate the class could not be found.
@param token the string token from which a class name will be heuristically determined. @return the discovered HashFormat class implementation or {@code null} if no class could be heuristically determined.