<!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.util;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import java.util.Collection;</a>
<span class="sourceLineNo">022</span><a id="line.22">import java.util.Map;</a>
<span class="sourceLineNo">023</span><a id="line.23"></a>
<span class="sourceLineNo">024</span><a id="line.24">/**</a>
<span class="sourceLineNo">025</span><a id="line.25"> * Assertion utility class that assists in validating arguments.</a>
<span class="sourceLineNo">026</span><a id="line.26"> * Useful for identifying programmer errors early and clearly at runtime.</a>
<span class="sourceLineNo">027</span><a id="line.27"> * Usage also reduces a program's</a>
<span class="sourceLineNo">028</span><a id="line.28"> * &lt;a href="http://en.wikipedia.org/wiki/Cyclomatic_complexity"&gt;cyclomatic complexity&lt;/a&gt;.</a>
<span class="sourceLineNo">029</span><a id="line.29"> *</a>
<span class="sourceLineNo">030</span><a id="line.30"> * &lt;p&gt;For example, if the contract of a public method states it does not</a>
<span class="sourceLineNo">031</span><a id="line.31"> * allow &lt;code&gt;null&lt;/code&gt; arguments, Assert can be used to validate that</a>
<span class="sourceLineNo">032</span><a id="line.32"> * contract. Doing this clearly indicates a contract violation when it</a>
<span class="sourceLineNo">033</span><a id="line.33"> * occurs and protects the class's invariants.</a>
<span class="sourceLineNo">034</span><a id="line.34"> *</a>
<span class="sourceLineNo">035</span><a id="line.35"> * &lt;p&gt;Typically used to validate method arguments rather than configuration</a>
<span class="sourceLineNo">036</span><a id="line.36"> * properties, to check for cases that are usually programmer errors rather than</a>
<span class="sourceLineNo">037</span><a id="line.37"> * configuration errors. In contrast to config initialization code, there is</a>
<span class="sourceLineNo">038</span><a id="line.38"> * usally no point in falling back to defaults in such methods.</a>
<span class="sourceLineNo">039</span><a id="line.39"> *</a>
<span class="sourceLineNo">040</span><a id="line.40"> * &lt;p&gt;This class is similar to JUnit's assertion library. If an argument value is</a>
<span class="sourceLineNo">041</span><a id="line.41"> * deemed invalid, an {@link IllegalArgumentException} is thrown (typically).</a>
<span class="sourceLineNo">042</span><a id="line.42"> * For example:</a>
<span class="sourceLineNo">043</span><a id="line.43"> *</a>
<span class="sourceLineNo">044</span><a id="line.44"> * &lt;pre class="code"&gt;</a>
<span class="sourceLineNo">045</span><a id="line.45"> * Assert.notNull(clazz, "The class must not be null");</a>
<span class="sourceLineNo">046</span><a id="line.46"> * Assert.isTrue(i &gt; 0, "The value must be greater than zero");&lt;/pre&gt;</a>
<span class="sourceLineNo">047</span><a id="line.47"> *</a>
<span class="sourceLineNo">048</span><a id="line.48"> * Mainly for internal use within the framework; consider Jakarta's Commons Lang</a>
<span class="sourceLineNo">049</span><a id="line.49"> * &gt;= 2.0 for a more comprehensive suite of assertion utilities.</a>
<span class="sourceLineNo">050</span><a id="line.50"> * &lt;p/&gt;</a>
<span class="sourceLineNo">051</span><a id="line.51"> * &lt;em&gt;Gratefully borrowed from the Spring Framework, also Apache 2.0 licensed&lt;/em&gt;</a>
<span class="sourceLineNo">052</span><a id="line.52"> *</a>
<span class="sourceLineNo">053</span><a id="line.53"> * @author Keith Donald</a>
<span class="sourceLineNo">054</span><a id="line.54"> * @author Juergen Hoeller</a>
<span class="sourceLineNo">055</span><a id="line.55"> * @author Colin Sampaleanu</a>
<span class="sourceLineNo">056</span><a id="line.56"> * @author Rob Harrop</a>
<span class="sourceLineNo">057</span><a id="line.57"> * @since 1.3</a>
<span class="sourceLineNo">058</span><a id="line.58"> */</a>
<span class="sourceLineNo">059</span><a id="line.59">public abstract class Assert {</a>
<span class="sourceLineNo">060</span><a id="line.60"></a>
<span class="sourceLineNo">061</span><a id="line.61">    /**</a>
<span class="sourceLineNo">062</span><a id="line.62">     * Assert a boolean expression, throwing &lt;code&gt;IllegalArgumentException&lt;/code&gt;</a>
<span class="sourceLineNo">063</span><a id="line.63">     * if the test result is &lt;code&gt;false&lt;/code&gt;.</a>
<span class="sourceLineNo">064</span><a id="line.64">     * &lt;pre class="code"&gt;Assert.isTrue(i &amp;gt; 0, "The value must be greater than zero");&lt;/pre&gt;</a>
<span class="sourceLineNo">065</span><a id="line.65">     * @param expression a boolean expression</a>
<span class="sourceLineNo">066</span><a id="line.66">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">067</span><a id="line.67">     * @throws IllegalArgumentException if expression is &lt;code&gt;false&lt;/code&gt;</a>
<span class="sourceLineNo">068</span><a id="line.68">     */</a>
<span class="sourceLineNo">069</span><a id="line.69">    public static void isTrue(boolean expression, String message) {</a>
<span class="sourceLineNo">070</span><a id="line.70">        if (!expression) {</a>
<span class="sourceLineNo">071</span><a id="line.71">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">072</span><a id="line.72">        }</a>
<span class="sourceLineNo">073</span><a id="line.73">    }</a>
<span class="sourceLineNo">074</span><a id="line.74"></a>
<span class="sourceLineNo">075</span><a id="line.75">    /**</a>
<span class="sourceLineNo">076</span><a id="line.76">     * Assert a boolean expression, throwing &lt;code&gt;IllegalArgumentException&lt;/code&gt;</a>
<span class="sourceLineNo">077</span><a id="line.77">     * if the test result is &lt;code&gt;false&lt;/code&gt;.</a>
<span class="sourceLineNo">078</span><a id="line.78">     * &lt;pre class="code"&gt;Assert.isTrue(i &amp;gt; 0);&lt;/pre&gt;</a>
<span class="sourceLineNo">079</span><a id="line.79">     * @param expression a boolean expression</a>
<span class="sourceLineNo">080</span><a id="line.80">     * @throws IllegalArgumentException if expression is &lt;code&gt;false&lt;/code&gt;</a>
<span class="sourceLineNo">081</span><a id="line.81">     */</a>
<span class="sourceLineNo">082</span><a id="line.82">    public static void isTrue(boolean expression) {</a>
<span class="sourceLineNo">083</span><a id="line.83">        isTrue(expression, "[Assertion failed] - this expression must be true");</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">    /**</a>
<span class="sourceLineNo">087</span><a id="line.87">     * Assert that an object is &lt;code&gt;null&lt;/code&gt; .</a>
<span class="sourceLineNo">088</span><a id="line.88">     * &lt;pre class="code"&gt;Assert.isNull(value, "The value must be null");&lt;/pre&gt;</a>
<span class="sourceLineNo">089</span><a id="line.89">     * @param object the object to check</a>
<span class="sourceLineNo">090</span><a id="line.90">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">091</span><a id="line.91">     * @throws IllegalArgumentException if the object is not &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">092</span><a id="line.92">     */</a>
<span class="sourceLineNo">093</span><a id="line.93">    public static void isNull(Object object, String message) {</a>
<span class="sourceLineNo">094</span><a id="line.94">        if (object != null) {</a>
<span class="sourceLineNo">095</span><a id="line.95">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">096</span><a id="line.96">        }</a>
<span class="sourceLineNo">097</span><a id="line.97">    }</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">     * Assert that an object is &lt;code&gt;null&lt;/code&gt; .</a>
<span class="sourceLineNo">101</span><a id="line.101">     * &lt;pre class="code"&gt;Assert.isNull(value);&lt;/pre&gt;</a>
<span class="sourceLineNo">102</span><a id="line.102">     * @param object the object to check</a>
<span class="sourceLineNo">103</span><a id="line.103">     * @throws IllegalArgumentException if the object is not &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">104</span><a id="line.104">     */</a>
<span class="sourceLineNo">105</span><a id="line.105">    public static void isNull(Object object) {</a>
<span class="sourceLineNo">106</span><a id="line.106">        isNull(object, "[Assertion failed] - the object argument must be null");</a>
<span class="sourceLineNo">107</span><a id="line.107">    }</a>
<span class="sourceLineNo">108</span><a id="line.108"></a>
<span class="sourceLineNo">109</span><a id="line.109">    /**</a>
<span class="sourceLineNo">110</span><a id="line.110">     * Assert that an object is not &lt;code&gt;null&lt;/code&gt; .</a>
<span class="sourceLineNo">111</span><a id="line.111">     * &lt;pre class="code"&gt;Assert.notNull(clazz, "The class must not be null");&lt;/pre&gt;</a>
<span class="sourceLineNo">112</span><a id="line.112">     * @param object the object to check</a>
<span class="sourceLineNo">113</span><a id="line.113">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">114</span><a id="line.114">     * @throws IllegalArgumentException if the object is &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">115</span><a id="line.115">     */</a>
<span class="sourceLineNo">116</span><a id="line.116">    public static void notNull(Object object, String message) {</a>
<span class="sourceLineNo">117</span><a id="line.117">        if (object == null) {</a>
<span class="sourceLineNo">118</span><a id="line.118">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">119</span><a id="line.119">        }</a>
<span class="sourceLineNo">120</span><a id="line.120">    }</a>
<span class="sourceLineNo">121</span><a id="line.121"></a>
<span class="sourceLineNo">122</span><a id="line.122">    /**</a>
<span class="sourceLineNo">123</span><a id="line.123">     * Assert that an object is not &lt;code&gt;null&lt;/code&gt; .</a>
<span class="sourceLineNo">124</span><a id="line.124">     * &lt;pre class="code"&gt;Assert.notNull(clazz);&lt;/pre&gt;</a>
<span class="sourceLineNo">125</span><a id="line.125">     * @param object the object to check</a>
<span class="sourceLineNo">126</span><a id="line.126">     * @throws IllegalArgumentException if the object is &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">127</span><a id="line.127">     */</a>
<span class="sourceLineNo">128</span><a id="line.128">    public static void notNull(Object object) {</a>
<span class="sourceLineNo">129</span><a id="line.129">        notNull(object, "[Assertion failed] - this argument is required; it must not be null");</a>
<span class="sourceLineNo">130</span><a id="line.130">    }</a>
<span class="sourceLineNo">131</span><a id="line.131"></a>
<span class="sourceLineNo">132</span><a id="line.132">    /**</a>
<span class="sourceLineNo">133</span><a id="line.133">     * Assert that the given String is not empty; that is,</a>
<span class="sourceLineNo">134</span><a id="line.134">     * it must not be &lt;code&gt;null&lt;/code&gt; and not the empty String.</a>
<span class="sourceLineNo">135</span><a id="line.135">     * &lt;pre class="code"&gt;Assert.hasLength(name, "Name must not be empty");&lt;/pre&gt;</a>
<span class="sourceLineNo">136</span><a id="line.136">     * @param text the String to check</a>
<span class="sourceLineNo">137</span><a id="line.137">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">138</span><a id="line.138">     * @see StringUtils#hasLength</a>
<span class="sourceLineNo">139</span><a id="line.139">     */</a>
<span class="sourceLineNo">140</span><a id="line.140">    public static void hasLength(String text, String message) {</a>
<span class="sourceLineNo">141</span><a id="line.141">        if (!StringUtils.hasLength(text)) {</a>
<span class="sourceLineNo">142</span><a id="line.142">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">143</span><a id="line.143">        }</a>
<span class="sourceLineNo">144</span><a id="line.144">    }</a>
<span class="sourceLineNo">145</span><a id="line.145"></a>
<span class="sourceLineNo">146</span><a id="line.146">    /**</a>
<span class="sourceLineNo">147</span><a id="line.147">     * Assert that the given String is not empty; that is,</a>
<span class="sourceLineNo">148</span><a id="line.148">     * it must not be &lt;code&gt;null&lt;/code&gt; and not the empty String.</a>
<span class="sourceLineNo">149</span><a id="line.149">     * &lt;pre class="code"&gt;Assert.hasLength(name);&lt;/pre&gt;</a>
<span class="sourceLineNo">150</span><a id="line.150">     * @param text the String to check</a>
<span class="sourceLineNo">151</span><a id="line.151">     * @see StringUtils#hasLength</a>
<span class="sourceLineNo">152</span><a id="line.152">     */</a>
<span class="sourceLineNo">153</span><a id="line.153">    public static void hasLength(String text) {</a>
<span class="sourceLineNo">154</span><a id="line.154">        hasLength(text,</a>
<span class="sourceLineNo">155</span><a id="line.155">                "[Assertion failed] - this String argument must have length; it must not be null or empty");</a>
<span class="sourceLineNo">156</span><a id="line.156">    }</a>
<span class="sourceLineNo">157</span><a id="line.157"></a>
<span class="sourceLineNo">158</span><a id="line.158">    /**</a>
<span class="sourceLineNo">159</span><a id="line.159">     * Assert that the given String has valid text content; that is, it must not</a>
<span class="sourceLineNo">160</span><a id="line.160">     * be &lt;code&gt;null&lt;/code&gt; and must contain at least one non-whitespace character.</a>
<span class="sourceLineNo">161</span><a id="line.161">     * &lt;pre class="code"&gt;Assert.hasText(name, "'name' must not be empty");&lt;/pre&gt;</a>
<span class="sourceLineNo">162</span><a id="line.162">     * @param text the String to check</a>
<span class="sourceLineNo">163</span><a id="line.163">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">164</span><a id="line.164">     * @see StringUtils#hasText</a>
<span class="sourceLineNo">165</span><a id="line.165">     */</a>
<span class="sourceLineNo">166</span><a id="line.166">    public static void hasText(String text, String message) {</a>
<span class="sourceLineNo">167</span><a id="line.167">        if (!StringUtils.hasText(text)) {</a>
<span class="sourceLineNo">168</span><a id="line.168">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">169</span><a id="line.169">        }</a>
<span class="sourceLineNo">170</span><a id="line.170">    }</a>
<span class="sourceLineNo">171</span><a id="line.171"></a>
<span class="sourceLineNo">172</span><a id="line.172">    /**</a>
<span class="sourceLineNo">173</span><a id="line.173">     * Assert that the given String has valid text content; that is, it must not</a>
<span class="sourceLineNo">174</span><a id="line.174">     * be &lt;code&gt;null&lt;/code&gt; and must contain at least one non-whitespace character.</a>
<span class="sourceLineNo">175</span><a id="line.175">     * &lt;pre class="code"&gt;Assert.hasText(name, "'name' must not be empty");&lt;/pre&gt;</a>
<span class="sourceLineNo">176</span><a id="line.176">     * @param text the String to check</a>
<span class="sourceLineNo">177</span><a id="line.177">     * @see StringUtils#hasText</a>
<span class="sourceLineNo">178</span><a id="line.178">     */</a>
<span class="sourceLineNo">179</span><a id="line.179">    public static void hasText(String text) {</a>
<span class="sourceLineNo">180</span><a id="line.180">        hasText(text,</a>
<span class="sourceLineNo">181</span><a id="line.181">                "[Assertion failed] - this String argument must have text; it must not be null, empty, or blank");</a>
<span class="sourceLineNo">182</span><a id="line.182">    }</a>
<span class="sourceLineNo">183</span><a id="line.183"></a>
<span class="sourceLineNo">184</span><a id="line.184">    /**</a>
<span class="sourceLineNo">185</span><a id="line.185">     * Assert that the given text does not contain the given substring.</a>
<span class="sourceLineNo">186</span><a id="line.186">     * &lt;pre class="code"&gt;Assert.doesNotContain(name, "rod", "Name must not contain 'rod'");&lt;/pre&gt;</a>
<span class="sourceLineNo">187</span><a id="line.187">     * @param textToSearch the text to search</a>
<span class="sourceLineNo">188</span><a id="line.188">     * @param substring the substring to find within the text</a>
<span class="sourceLineNo">189</span><a id="line.189">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">190</span><a id="line.190">     */</a>
<span class="sourceLineNo">191</span><a id="line.191">    public static void doesNotContain(String textToSearch, String substring, String message) {</a>
<span class="sourceLineNo">192</span><a id="line.192">        if (StringUtils.hasLength(textToSearch) &amp;&amp; StringUtils.hasLength(substring) &amp;&amp;</a>
<span class="sourceLineNo">193</span><a id="line.193">                textToSearch.indexOf(substring) != -1) {</a>
<span class="sourceLineNo">194</span><a id="line.194">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">195</span><a id="line.195">        }</a>
<span class="sourceLineNo">196</span><a id="line.196">    }</a>
<span class="sourceLineNo">197</span><a id="line.197"></a>
<span class="sourceLineNo">198</span><a id="line.198">    /**</a>
<span class="sourceLineNo">199</span><a id="line.199">     * Assert that the given text does not contain the given substring.</a>
<span class="sourceLineNo">200</span><a id="line.200">     * &lt;pre class="code"&gt;Assert.doesNotContain(name, "rod");&lt;/pre&gt;</a>
<span class="sourceLineNo">201</span><a id="line.201">     * @param textToSearch the text to search</a>
<span class="sourceLineNo">202</span><a id="line.202">     * @param substring the substring to find within the text</a>
<span class="sourceLineNo">203</span><a id="line.203">     */</a>
<span class="sourceLineNo">204</span><a id="line.204">    public static void doesNotContain(String textToSearch, String substring) {</a>
<span class="sourceLineNo">205</span><a id="line.205">        doesNotContain(textToSearch, substring,</a>
<span class="sourceLineNo">206</span><a id="line.206">                "[Assertion failed] - this String argument must not contain the substring [" + substring + "]");</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"></a>
<span class="sourceLineNo">210</span><a id="line.210">    /**</a>
<span class="sourceLineNo">211</span><a id="line.211">     * Assert that an array has elements; that is, it must not be</a>
<span class="sourceLineNo">212</span><a id="line.212">     * &lt;code&gt;null&lt;/code&gt; and must have at least one element.</a>
<span class="sourceLineNo">213</span><a id="line.213">     * &lt;pre class="code"&gt;Assert.notEmpty(array, "The array must have elements");&lt;/pre&gt;</a>
<span class="sourceLineNo">214</span><a id="line.214">     * @param array the array to check</a>
<span class="sourceLineNo">215</span><a id="line.215">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">216</span><a id="line.216">     * @throws IllegalArgumentException if the object array is &lt;code&gt;null&lt;/code&gt; or has no elements</a>
<span class="sourceLineNo">217</span><a id="line.217">     */</a>
<span class="sourceLineNo">218</span><a id="line.218">    public static void notEmpty(Object[] array, String message) {</a>
<span class="sourceLineNo">219</span><a id="line.219">        if (array == null || array.length == 0) {</a>
<span class="sourceLineNo">220</span><a id="line.220">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">221</span><a id="line.221">        }</a>
<span class="sourceLineNo">222</span><a id="line.222">    }</a>
<span class="sourceLineNo">223</span><a id="line.223"></a>
<span class="sourceLineNo">224</span><a id="line.224">    /**</a>
<span class="sourceLineNo">225</span><a id="line.225">     * Assert that an array has elements; that is, it must not be</a>
<span class="sourceLineNo">226</span><a id="line.226">     * &lt;code&gt;null&lt;/code&gt; and must have at least one element.</a>
<span class="sourceLineNo">227</span><a id="line.227">     * &lt;pre class="code"&gt;Assert.notEmpty(array);&lt;/pre&gt;</a>
<span class="sourceLineNo">228</span><a id="line.228">     * @param array the array to check</a>
<span class="sourceLineNo">229</span><a id="line.229">     * @throws IllegalArgumentException if the object array is &lt;code&gt;null&lt;/code&gt; or has no elements</a>
<span class="sourceLineNo">230</span><a id="line.230">     */</a>
<span class="sourceLineNo">231</span><a id="line.231">    public static void notEmpty(Object[] array) {</a>
<span class="sourceLineNo">232</span><a id="line.232">        notEmpty(array, "[Assertion failed] - this array must not be empty: it must contain at least 1 element");</a>
<span class="sourceLineNo">233</span><a id="line.233">    }</a>
<span class="sourceLineNo">234</span><a id="line.234"></a>
<span class="sourceLineNo">235</span><a id="line.235">    /**</a>
<span class="sourceLineNo">236</span><a id="line.236">     * Assert that an array has no null elements.</a>
<span class="sourceLineNo">237</span><a id="line.237">     * Note: Does not complain if the array is empty!</a>
<span class="sourceLineNo">238</span><a id="line.238">     * &lt;pre class="code"&gt;Assert.noNullElements(array, "The array must have non-null elements");&lt;/pre&gt;</a>
<span class="sourceLineNo">239</span><a id="line.239">     * @param array the array to check</a>
<span class="sourceLineNo">240</span><a id="line.240">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">241</span><a id="line.241">     * @throws IllegalArgumentException if the object array contains a &lt;code&gt;null&lt;/code&gt; element</a>
<span class="sourceLineNo">242</span><a id="line.242">     */</a>
<span class="sourceLineNo">243</span><a id="line.243">    public static void noNullElements(Object[] array, String message) {</a>
<span class="sourceLineNo">244</span><a id="line.244">        if (array != null) {</a>
<span class="sourceLineNo">245</span><a id="line.245">            for (int i = 0; i &lt; array.length; i++) {</a>
<span class="sourceLineNo">246</span><a id="line.246">                if (array[i] == null) {</a>
<span class="sourceLineNo">247</span><a id="line.247">                    throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">248</span><a id="line.248">                }</a>
<span class="sourceLineNo">249</span><a id="line.249">            }</a>
<span class="sourceLineNo">250</span><a id="line.250">        }</a>
<span class="sourceLineNo">251</span><a id="line.251">    }</a>
<span class="sourceLineNo">252</span><a id="line.252"></a>
<span class="sourceLineNo">253</span><a id="line.253">    /**</a>
<span class="sourceLineNo">254</span><a id="line.254">     * Assert that an array has no null elements.</a>
<span class="sourceLineNo">255</span><a id="line.255">     * Note: Does not complain if the array is empty!</a>
<span class="sourceLineNo">256</span><a id="line.256">     * &lt;pre class="code"&gt;Assert.noNullElements(array);&lt;/pre&gt;</a>
<span class="sourceLineNo">257</span><a id="line.257">     * @param array the array to check</a>
<span class="sourceLineNo">258</span><a id="line.258">     * @throws IllegalArgumentException if the object array contains a &lt;code&gt;null&lt;/code&gt; element</a>
<span class="sourceLineNo">259</span><a id="line.259">     */</a>
<span class="sourceLineNo">260</span><a id="line.260">    public static void noNullElements(Object[] array) {</a>
<span class="sourceLineNo">261</span><a id="line.261">        noNullElements(array, "[Assertion failed] - this array must not contain any null elements");</a>
<span class="sourceLineNo">262</span><a id="line.262">    }</a>
<span class="sourceLineNo">263</span><a id="line.263"></a>
<span class="sourceLineNo">264</span><a id="line.264">    /**</a>
<span class="sourceLineNo">265</span><a id="line.265">     * Assert that a collection has elements; that is, it must not be</a>
<span class="sourceLineNo">266</span><a id="line.266">     * &lt;code&gt;null&lt;/code&gt; and must have at least one element.</a>
<span class="sourceLineNo">267</span><a id="line.267">     * &lt;pre class="code"&gt;Assert.notEmpty(collection, "Collection must have elements");&lt;/pre&gt;</a>
<span class="sourceLineNo">268</span><a id="line.268">     * @param collection the collection to check</a>
<span class="sourceLineNo">269</span><a id="line.269">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">270</span><a id="line.270">     * @throws IllegalArgumentException if the collection is &lt;code&gt;null&lt;/code&gt; or has no elements</a>
<span class="sourceLineNo">271</span><a id="line.271">     */</a>
<span class="sourceLineNo">272</span><a id="line.272">    public static void notEmpty(Collection collection, String message) {</a>
<span class="sourceLineNo">273</span><a id="line.273">        if (isEmpty(collection)) {</a>
<span class="sourceLineNo">274</span><a id="line.274">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">275</span><a id="line.275">        }</a>
<span class="sourceLineNo">276</span><a id="line.276">    }</a>
<span class="sourceLineNo">277</span><a id="line.277"></a>
<span class="sourceLineNo">278</span><a id="line.278">    /**</a>
<span class="sourceLineNo">279</span><a id="line.279">     * Assert that a collection has elements; that is, it must not be</a>
<span class="sourceLineNo">280</span><a id="line.280">     * &lt;code&gt;null&lt;/code&gt; and must have at least one element.</a>
<span class="sourceLineNo">281</span><a id="line.281">     * &lt;pre class="code"&gt;Assert.notEmpty(collection, "Collection must have elements");&lt;/pre&gt;</a>
<span class="sourceLineNo">282</span><a id="line.282">     * @param collection the collection to check</a>
<span class="sourceLineNo">283</span><a id="line.283">     * @throws IllegalArgumentException if the collection is &lt;code&gt;null&lt;/code&gt; or has no elements</a>
<span class="sourceLineNo">284</span><a id="line.284">     */</a>
<span class="sourceLineNo">285</span><a id="line.285">    public static void notEmpty(Collection collection) {</a>
<span class="sourceLineNo">286</span><a id="line.286">        notEmpty(collection,</a>
<span class="sourceLineNo">287</span><a id="line.287">                "[Assertion failed] - this collection must not be empty: it must contain at least 1 element");</a>
<span class="sourceLineNo">288</span><a id="line.288">    }</a>
<span class="sourceLineNo">289</span><a id="line.289"></a>
<span class="sourceLineNo">290</span><a id="line.290">    /**</a>
<span class="sourceLineNo">291</span><a id="line.291">     * Assert that a Map has entries; that is, it must not be &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">292</span><a id="line.292">     * and must have at least one entry.</a>
<span class="sourceLineNo">293</span><a id="line.293">     * &lt;pre class="code"&gt;Assert.notEmpty(map, "Map must have entries");&lt;/pre&gt;</a>
<span class="sourceLineNo">294</span><a id="line.294">     * @param map the map to check</a>
<span class="sourceLineNo">295</span><a id="line.295">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">296</span><a id="line.296">     * @throws IllegalArgumentException if the map is &lt;code&gt;null&lt;/code&gt; or has no entries</a>
<span class="sourceLineNo">297</span><a id="line.297">     */</a>
<span class="sourceLineNo">298</span><a id="line.298">    public static void notEmpty(Map map, String message) {</a>
<span class="sourceLineNo">299</span><a id="line.299">        if (isEmpty(map)) {</a>
<span class="sourceLineNo">300</span><a id="line.300">            throw new IllegalArgumentException(message);</a>
<span class="sourceLineNo">301</span><a id="line.301">        }</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">    /**</a>
<span class="sourceLineNo">305</span><a id="line.305">     * Assert that a Map has entries; that is, it must not be &lt;code&gt;null&lt;/code&gt;</a>
<span class="sourceLineNo">306</span><a id="line.306">     * and must have at least one entry.</a>
<span class="sourceLineNo">307</span><a id="line.307">     * &lt;pre class="code"&gt;Assert.notEmpty(map);&lt;/pre&gt;</a>
<span class="sourceLineNo">308</span><a id="line.308">     * @param map the map to check</a>
<span class="sourceLineNo">309</span><a id="line.309">     * @throws IllegalArgumentException if the map is &lt;code&gt;null&lt;/code&gt; or has no entries</a>
<span class="sourceLineNo">310</span><a id="line.310">     */</a>
<span class="sourceLineNo">311</span><a id="line.311">    public static void notEmpty(Map map) {</a>
<span class="sourceLineNo">312</span><a id="line.312">        notEmpty(map, "[Assertion failed] - this map must not be empty; it must contain at least one entry");</a>
<span class="sourceLineNo">313</span><a id="line.313">    }</a>
<span class="sourceLineNo">314</span><a id="line.314"></a>
<span class="sourceLineNo">315</span><a id="line.315"></a>
<span class="sourceLineNo">316</span><a id="line.316">    /**</a>
<span class="sourceLineNo">317</span><a id="line.317">     * Assert that the provided object is an instance of the provided class.</a>
<span class="sourceLineNo">318</span><a id="line.318">     * &lt;pre class="code"&gt;Assert.instanceOf(Foo.class, foo);&lt;/pre&gt;</a>
<span class="sourceLineNo">319</span><a id="line.319">     * @param clazz the required class</a>
<span class="sourceLineNo">320</span><a id="line.320">     * @param obj the object to check</a>
<span class="sourceLineNo">321</span><a id="line.321">     * @throws IllegalArgumentException if the object is not an instance of clazz</a>
<span class="sourceLineNo">322</span><a id="line.322">     * @see Class#isInstance</a>
<span class="sourceLineNo">323</span><a id="line.323">     */</a>
<span class="sourceLineNo">324</span><a id="line.324">    public static void isInstanceOf(Class clazz, Object obj) {</a>
<span class="sourceLineNo">325</span><a id="line.325">        isInstanceOf(clazz, obj, "");</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">    /**</a>
<span class="sourceLineNo">329</span><a id="line.329">     * Assert that the provided object is an instance of the provided class.</a>
<span class="sourceLineNo">330</span><a id="line.330">     * &lt;pre class="code"&gt;Assert.instanceOf(Foo.class, foo);&lt;/pre&gt;</a>
<span class="sourceLineNo">331</span><a id="line.331">     * @param type the type to check against</a>
<span class="sourceLineNo">332</span><a id="line.332">     * @param obj the object to check</a>
<span class="sourceLineNo">333</span><a id="line.333">     * @param message a message which will be prepended to the message produced by</a>
<span class="sourceLineNo">334</span><a id="line.334">     * the function itself, and which may be used to provide context. It should</a>
<span class="sourceLineNo">335</span><a id="line.335">     * normally end in a ": " or ". " so that the function generate message looks</a>
<span class="sourceLineNo">336</span><a id="line.336">     * ok when prepended to it.</a>
<span class="sourceLineNo">337</span><a id="line.337">     * @throws IllegalArgumentException if the object is not an instance of clazz</a>
<span class="sourceLineNo">338</span><a id="line.338">     * @see Class#isInstance</a>
<span class="sourceLineNo">339</span><a id="line.339">     */</a>
<span class="sourceLineNo">340</span><a id="line.340">    public static void isInstanceOf(Class type, Object obj, String message) {</a>
<span class="sourceLineNo">341</span><a id="line.341">        notNull(type, "Type to check against must not be null");</a>
<span class="sourceLineNo">342</span><a id="line.342">        if (!type.isInstance(obj)) {</a>
<span class="sourceLineNo">343</span><a id="line.343">            throw new IllegalArgumentException(message +</a>
<span class="sourceLineNo">344</span><a id="line.344">                    "Object of class [" + (obj != null ? obj.getClass().getName() : "null") +</a>
<span class="sourceLineNo">345</span><a id="line.345">                    "] must be an instance of " + type);</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">     * Assert that &lt;code&gt;superType.isAssignableFrom(subType)&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;.</a>
<span class="sourceLineNo">351</span><a id="line.351">     * &lt;pre class="code"&gt;Assert.isAssignable(Number.class, myClass);&lt;/pre&gt;</a>
<span class="sourceLineNo">352</span><a id="line.352">     * @param superType the super type to check</a>
<span class="sourceLineNo">353</span><a id="line.353">     * @param subType the sub type to check</a>
<span class="sourceLineNo">354</span><a id="line.354">     * @throws IllegalArgumentException if the classes are not assignable</a>
<span class="sourceLineNo">355</span><a id="line.355">     */</a>
<span class="sourceLineNo">356</span><a id="line.356">    public static void isAssignable(Class superType, Class subType) {</a>
<span class="sourceLineNo">357</span><a id="line.357">        isAssignable(superType, subType, "");</a>
<span class="sourceLineNo">358</span><a id="line.358">    }</a>
<span class="sourceLineNo">359</span><a id="line.359"></a>
<span class="sourceLineNo">360</span><a id="line.360">    /**</a>
<span class="sourceLineNo">361</span><a id="line.361">     * Assert that &lt;code&gt;superType.isAssignableFrom(subType)&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;.</a>
<span class="sourceLineNo">362</span><a id="line.362">     * &lt;pre class="code"&gt;Assert.isAssignable(Number.class, myClass);&lt;/pre&gt;</a>
<span class="sourceLineNo">363</span><a id="line.363">     * @param superType the super type to check against</a>
<span class="sourceLineNo">364</span><a id="line.364">     * @param subType the sub type to check</a>
<span class="sourceLineNo">365</span><a id="line.365">     * @param message a message which will be prepended to the message produced by</a>
<span class="sourceLineNo">366</span><a id="line.366">     * the function itself, and which may be used to provide context. It should</a>
<span class="sourceLineNo">367</span><a id="line.367">     * normally end in a ": " or ". " so that the function generate message looks</a>
<span class="sourceLineNo">368</span><a id="line.368">     * ok when prepended to it.</a>
<span class="sourceLineNo">369</span><a id="line.369">     * @throws IllegalArgumentException if the classes are not assignable</a>
<span class="sourceLineNo">370</span><a id="line.370">     */</a>
<span class="sourceLineNo">371</span><a id="line.371">    public static void isAssignable(Class superType, Class subType, String message) {</a>
<span class="sourceLineNo">372</span><a id="line.372">        notNull(superType, "Type to check against must not be null");</a>
<span class="sourceLineNo">373</span><a id="line.373">        if (subType == null || !superType.isAssignableFrom(subType)) {</a>
<span class="sourceLineNo">374</span><a id="line.374">            throw new IllegalArgumentException(message + subType + " is not assignable to " + superType);</a>
<span class="sourceLineNo">375</span><a id="line.375">        }</a>
<span class="sourceLineNo">376</span><a id="line.376">    }</a>
<span class="sourceLineNo">377</span><a id="line.377"></a>
<span class="sourceLineNo">378</span><a id="line.378"></a>
<span class="sourceLineNo">379</span><a id="line.379">    /**</a>
<span class="sourceLineNo">380</span><a id="line.380">     * Assert a boolean expression, throwing &lt;code&gt;IllegalStateException&lt;/code&gt;</a>
<span class="sourceLineNo">381</span><a id="line.381">     * if the test result is &lt;code&gt;false&lt;/code&gt;. Call isTrue if you wish to</a>
<span class="sourceLineNo">382</span><a id="line.382">     * throw IllegalArgumentException on an assertion failure.</a>
<span class="sourceLineNo">383</span><a id="line.383">     * &lt;pre class="code"&gt;Assert.state(id == null, "The id property must not already be initialized");&lt;/pre&gt;</a>
<span class="sourceLineNo">384</span><a id="line.384">     * @param expression a boolean expression</a>
<span class="sourceLineNo">385</span><a id="line.385">     * @param message the exception message to use if the assertion fails</a>
<span class="sourceLineNo">386</span><a id="line.386">     * @throws IllegalStateException if expression is &lt;code&gt;false&lt;/code&gt;</a>
<span class="sourceLineNo">387</span><a id="line.387">     */</a>
<span class="sourceLineNo">388</span><a id="line.388">    public static void state(boolean expression, String message) {</a>
<span class="sourceLineNo">389</span><a id="line.389">        if (!expression) {</a>
<span class="sourceLineNo">390</span><a id="line.390">            throw new IllegalStateException(message);</a>
<span class="sourceLineNo">391</span><a id="line.391">        }</a>
<span class="sourceLineNo">392</span><a id="line.392">    }</a>
<span class="sourceLineNo">393</span><a id="line.393"></a>
<span class="sourceLineNo">394</span><a id="line.394">    /**</a>
<span class="sourceLineNo">395</span><a id="line.395">     * Assert a boolean expression, throwing {@link IllegalStateException}</a>
<span class="sourceLineNo">396</span><a id="line.396">     * if the test result is &lt;code&gt;false&lt;/code&gt;.</a>
<span class="sourceLineNo">397</span><a id="line.397">     * &lt;p&gt;Call {@link #isTrue(boolean)} if you wish to</a>
<span class="sourceLineNo">398</span><a id="line.398">     * throw {@link IllegalArgumentException} on an assertion failure.</a>
<span class="sourceLineNo">399</span><a id="line.399">     * &lt;pre class="code"&gt;Assert.state(id == null);&lt;/pre&gt;</a>
<span class="sourceLineNo">400</span><a id="line.400">     * @param expression a boolean expression</a>
<span class="sourceLineNo">401</span><a id="line.401">     * @throws IllegalStateException if the supplied expression is &lt;code&gt;false&lt;/code&gt;</a>
<span class="sourceLineNo">402</span><a id="line.402">     */</a>
<span class="sourceLineNo">403</span><a id="line.403">    public static void state(boolean expression) {</a>
<span class="sourceLineNo">404</span><a id="line.404">        state(expression, "[Assertion failed] - this state invariant must be true");</a>
<span class="sourceLineNo">405</span><a id="line.405">    }</a>
<span class="sourceLineNo">406</span><a id="line.406"></a>
<span class="sourceLineNo">407</span><a id="line.407"></a>
<span class="sourceLineNo">408</span><a id="line.408">    //////////////////////////</a>
<span class="sourceLineNo">409</span><a id="line.409">    // From CollectionUtils //</a>
<span class="sourceLineNo">410</span><a id="line.410">    //////////////////////////</a>
<span class="sourceLineNo">411</span><a id="line.411">    // CollectionUtils cannot be removed from shiro-core until 2.0 as it has a dependency on PrincipalCollection</a>
<span class="sourceLineNo">412</span><a id="line.412"></a>
<span class="sourceLineNo">413</span><a id="line.413">    private static boolean isEmpty(Map m) {</a>
<span class="sourceLineNo">414</span><a id="line.414">        return m == null || m.isEmpty();</a>
<span class="sourceLineNo">415</span><a id="line.415">    }</a>
<span class="sourceLineNo">416</span><a id="line.416"></a>
<span class="sourceLineNo">417</span><a id="line.417">    private static boolean isEmpty(Collection c) {</a>
<span class="sourceLineNo">418</span><a id="line.418">        return c == null || c.isEmpty();</a>
<span class="sourceLineNo">419</span><a id="line.419">    }</a>
<span class="sourceLineNo">420</span><a id="line.420"></a>
<span class="sourceLineNo">421</span><a id="line.421">}</a>




























































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