<!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.subject;</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.CollectionUtils;</a>
<span class="sourceLineNo">022</span><a id="line.22"></a>
<span class="sourceLineNo">023</span><a id="line.23">import java.util.*;</a>
<span class="sourceLineNo">024</span><a id="line.24"></a>
<span class="sourceLineNo">025</span><a id="line.25">/**</a>
<span class="sourceLineNo">026</span><a id="line.26"> * Default implementation of the {@link PrincipalMap} interface.</a>
<span class="sourceLineNo">027</span><a id="line.27"> *</a>
<span class="sourceLineNo">028</span><a id="line.28"> * *EXPERIMENTAL for Shiro 1.2 - DO NOT USE YET*</a>
<span class="sourceLineNo">029</span><a id="line.29"> *</a>
<span class="sourceLineNo">030</span><a id="line.30"> * @author Les Hazlewood</a>
<span class="sourceLineNo">031</span><a id="line.31"> * @since 1.2</a>
<span class="sourceLineNo">032</span><a id="line.32"> */</a>
<span class="sourceLineNo">033</span><a id="line.33">public class SimplePrincipalMap implements PrincipalMap {</a>
<span class="sourceLineNo">034</span><a id="line.34"></a>
<span class="sourceLineNo">035</span><a id="line.35">    //Key: realm name, Value: map of principals specific to that realm</a>
<span class="sourceLineNo">036</span><a id="line.36">    //                        internal map - key: principal name, value: principal</a>
<span class="sourceLineNo">037</span><a id="line.37">    private Map&lt;String, Map&lt;String, Object&gt;&gt; realmPrincipals;</a>
<span class="sourceLineNo">038</span><a id="line.38"></a>
<span class="sourceLineNo">039</span><a id="line.39">    //maintains the principals from all realms plus any that are modified via the Map modification methods</a>
<span class="sourceLineNo">040</span><a id="line.40">    //this ensures a fast lookup of any named principal instead of needing to iterate over</a>
<span class="sourceLineNo">041</span><a id="line.41">    //the realmPrincipals for each lookup.</a>
<span class="sourceLineNo">042</span><a id="line.42">    private Map&lt;String, Object&gt; combinedPrincipals;</a>
<span class="sourceLineNo">043</span><a id="line.43"></a>
<span class="sourceLineNo">044</span><a id="line.44">    public SimplePrincipalMap() {</a>
<span class="sourceLineNo">045</span><a id="line.45">        this(null);</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">    public SimplePrincipalMap(Map&lt;String, Map&lt;String, Object&gt;&gt; backingMap) {</a>
<span class="sourceLineNo">049</span><a id="line.49">        if (!CollectionUtils.isEmpty(backingMap)) {</a>
<span class="sourceLineNo">050</span><a id="line.50">            this.realmPrincipals = backingMap;</a>
<span class="sourceLineNo">051</span><a id="line.51">            for (Map&lt;String, Object&gt; principals : this.realmPrincipals.values()) {</a>
<span class="sourceLineNo">052</span><a id="line.52">                if (!CollectionUtils.isEmpty(principals) ) {</a>
<span class="sourceLineNo">053</span><a id="line.53">                    ensureCombinedPrincipals().putAll(principals);</a>
<span class="sourceLineNo">054</span><a id="line.54">                }</a>
<span class="sourceLineNo">055</span><a id="line.55">            }</a>
<span class="sourceLineNo">056</span><a id="line.56">        }</a>
<span class="sourceLineNo">057</span><a id="line.57">    }</a>
<span class="sourceLineNo">058</span><a id="line.58"></a>
<span class="sourceLineNo">059</span><a id="line.59">    public int size() {</a>
<span class="sourceLineNo">060</span><a id="line.60">        return CollectionUtils.size(this.combinedPrincipals);</a>
<span class="sourceLineNo">061</span><a id="line.61">    }</a>
<span class="sourceLineNo">062</span><a id="line.62"></a>
<span class="sourceLineNo">063</span><a id="line.63">    protected Map&lt;String, Object&gt; ensureCombinedPrincipals() {</a>
<span class="sourceLineNo">064</span><a id="line.64">        if (this.combinedPrincipals == null) {</a>
<span class="sourceLineNo">065</span><a id="line.65">            this.combinedPrincipals = new HashMap&lt;String, Object&gt;();</a>
<span class="sourceLineNo">066</span><a id="line.66">        }</a>
<span class="sourceLineNo">067</span><a id="line.67">        return this.combinedPrincipals;</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">    public boolean containsKey(Object o) {</a>
<span class="sourceLineNo">071</span><a id="line.71">        return this.combinedPrincipals != null &amp;&amp; this.combinedPrincipals.containsKey(o);</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">    public boolean containsValue(Object o) {</a>
<span class="sourceLineNo">075</span><a id="line.75">        return this.combinedPrincipals != null &amp;&amp; this.combinedPrincipals.containsKey(o);</a>
<span class="sourceLineNo">076</span><a id="line.76">    }</a>
<span class="sourceLineNo">077</span><a id="line.77"></a>
<span class="sourceLineNo">078</span><a id="line.78">    public Object get(Object o) {</a>
<span class="sourceLineNo">079</span><a id="line.79">        return this.combinedPrincipals != null &amp;&amp; this.combinedPrincipals.containsKey(o);</a>
<span class="sourceLineNo">080</span><a id="line.80">    }</a>
<span class="sourceLineNo">081</span><a id="line.81"></a>
<span class="sourceLineNo">082</span><a id="line.82">    public Object put(String s, Object o) {</a>
<span class="sourceLineNo">083</span><a id="line.83">        return ensureCombinedPrincipals().put(s, o);</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">    public Object remove(Object o) {</a>
<span class="sourceLineNo">087</span><a id="line.87">        return this.combinedPrincipals != null ? this.combinedPrincipals.remove(o) : null;</a>
<span class="sourceLineNo">088</span><a id="line.88">    }</a>
<span class="sourceLineNo">089</span><a id="line.89"></a>
<span class="sourceLineNo">090</span><a id="line.90">    public void putAll(Map&lt;? extends String, ?&gt; map) {</a>
<span class="sourceLineNo">091</span><a id="line.91">        if (!CollectionUtils.isEmpty(map)) {</a>
<span class="sourceLineNo">092</span><a id="line.92">            ensureCombinedPrincipals().putAll(map);</a>
<span class="sourceLineNo">093</span><a id="line.93">        }</a>
<span class="sourceLineNo">094</span><a id="line.94">    }</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; keySet() {</a>
<span class="sourceLineNo">097</span><a id="line.97">        return CollectionUtils.isEmpty(this.combinedPrincipals) ?</a>
<span class="sourceLineNo">098</span><a id="line.98">                Collections.&lt;String&gt;emptySet() :</a>
<span class="sourceLineNo">099</span><a id="line.99">                Collections.unmodifiableSet(this.combinedPrincipals.keySet());</a>
<span class="sourceLineNo">100</span><a id="line.100">    }</a>
<span class="sourceLineNo">101</span><a id="line.101"></a>
<span class="sourceLineNo">102</span><a id="line.102">    public Collection&lt;Object&gt; values() {</a>
<span class="sourceLineNo">103</span><a id="line.103">        return CollectionUtils.isEmpty(this.combinedPrincipals) ?</a>
<span class="sourceLineNo">104</span><a id="line.104">                Collections.emptySet() :</a>
<span class="sourceLineNo">105</span><a id="line.105">                Collections.unmodifiableCollection(this.combinedPrincipals.values());</a>
<span class="sourceLineNo">106</span><a id="line.106">    }</a>
<span class="sourceLineNo">107</span><a id="line.107"></a>
<span class="sourceLineNo">108</span><a id="line.108">    public Set&lt;Entry&lt;String, Object&gt;&gt; entrySet() {</a>
<span class="sourceLineNo">109</span><a id="line.109">        return CollectionUtils.isEmpty(this.combinedPrincipals) ?</a>
<span class="sourceLineNo">110</span><a id="line.110">                Collections.&lt;Entry&lt;String,Object&gt;&gt;emptySet() :</a>
<span class="sourceLineNo">111</span><a id="line.111">                Collections.unmodifiableSet(this.combinedPrincipals.entrySet());</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 void clear() {</a>
<span class="sourceLineNo">115</span><a id="line.115">        this.realmPrincipals = null;</a>
<span class="sourceLineNo">116</span><a id="line.116">        this.combinedPrincipals = 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">    public Object getPrimaryPrincipal() {</a>
<span class="sourceLineNo">120</span><a id="line.120">        //heuristic - just use the first one we come across:</a>
<span class="sourceLineNo">121</span><a id="line.121">        return !CollectionUtils.isEmpty(this.combinedPrincipals) ?</a>
<span class="sourceLineNo">122</span><a id="line.122">                this.combinedPrincipals.values().iterator().next() :</a>
<span class="sourceLineNo">123</span><a id="line.123">                null;</a>
<span class="sourceLineNo">124</span><a id="line.124">    }</a>
<span class="sourceLineNo">125</span><a id="line.125"></a>
<span class="sourceLineNo">126</span><a id="line.126">    public &lt;T&gt; T oneByType(Class&lt;T&gt; type) {</a>
<span class="sourceLineNo">127</span><a id="line.127">        if (CollectionUtils.isEmpty(this.combinedPrincipals)) {</a>
<span class="sourceLineNo">128</span><a id="line.128">            return null;</a>
<span class="sourceLineNo">129</span><a id="line.129">        }</a>
<span class="sourceLineNo">130</span><a id="line.130">        for( Object value : this.combinedPrincipals.values()) {</a>
<span class="sourceLineNo">131</span><a id="line.131">            if (type.isInstance(value) ) {</a>
<span class="sourceLineNo">132</span><a id="line.132">                return type.cast(value);</a>
<span class="sourceLineNo">133</span><a id="line.133">            }</a>
<span class="sourceLineNo">134</span><a id="line.134">        }</a>
<span class="sourceLineNo">135</span><a id="line.135">        return null;</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">    public &lt;T&gt; Collection&lt;T&gt; byType(Class&lt;T&gt; type) {</a>
<span class="sourceLineNo">139</span><a id="line.139">        if (CollectionUtils.isEmpty(this.combinedPrincipals)) {</a>
<span class="sourceLineNo">140</span><a id="line.140">            return Collections.emptySet();</a>
<span class="sourceLineNo">141</span><a id="line.141">        }</a>
<span class="sourceLineNo">142</span><a id="line.142">        Collection&lt;T&gt; instances = null;</a>
<span class="sourceLineNo">143</span><a id="line.143">        for( Object value : this.combinedPrincipals.values()) {</a>
<span class="sourceLineNo">144</span><a id="line.144">            if (type.isInstance(value) ) {</a>
<span class="sourceLineNo">145</span><a id="line.145">                if (instances == null) {</a>
<span class="sourceLineNo">146</span><a id="line.146">                    instances = new ArrayList&lt;T&gt;();</a>
<span class="sourceLineNo">147</span><a id="line.147">                }</a>
<span class="sourceLineNo">148</span><a id="line.148">                instances.add(type.cast(value));</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">        return instances != null ? instances : Collections.&lt;T&gt;emptyList();</a>
<span class="sourceLineNo">152</span><a id="line.152">    }</a>
<span class="sourceLineNo">153</span><a id="line.153"></a>
<span class="sourceLineNo">154</span><a id="line.154">    public List asList() {</a>
<span class="sourceLineNo">155</span><a id="line.155">        if (CollectionUtils.isEmpty(this.combinedPrincipals)) {</a>
<span class="sourceLineNo">156</span><a id="line.156">            return Collections.emptyList();</a>
<span class="sourceLineNo">157</span><a id="line.157">        }</a>
<span class="sourceLineNo">158</span><a id="line.158">        List&lt;Object&gt; list = new ArrayList&lt;Object&gt;(this.combinedPrincipals.size());</a>
<span class="sourceLineNo">159</span><a id="line.159">        list.addAll(this.combinedPrincipals.values());</a>
<span class="sourceLineNo">160</span><a id="line.160">        return list;</a>
<span class="sourceLineNo">161</span><a id="line.161">    }</a>
<span class="sourceLineNo">162</span><a id="line.162"></a>
<span class="sourceLineNo">163</span><a id="line.163">    public Set asSet() {</a>
<span class="sourceLineNo">164</span><a id="line.164">        if (CollectionUtils.isEmpty(this.combinedPrincipals)) {</a>
<span class="sourceLineNo">165</span><a id="line.165">            return Collections.emptySet();</a>
<span class="sourceLineNo">166</span><a id="line.166">        }</a>
<span class="sourceLineNo">167</span><a id="line.167">        Set&lt;Object&gt; set = new HashSet&lt;Object&gt;(this.combinedPrincipals.size());</a>
<span class="sourceLineNo">168</span><a id="line.168">        set.addAll(this.combinedPrincipals.values());</a>
<span class="sourceLineNo">169</span><a id="line.169">        return set;</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">    public Collection fromRealm(String realmName) {</a>
<span class="sourceLineNo">173</span><a id="line.173">        if (CollectionUtils.isEmpty(this.realmPrincipals)) {</a>
<span class="sourceLineNo">174</span><a id="line.174">            return Collections.emptySet();</a>
<span class="sourceLineNo">175</span><a id="line.175">        }</a>
<span class="sourceLineNo">176</span><a id="line.176">        Map&lt;String,Object&gt; principals = this.realmPrincipals.get(realmName);</a>
<span class="sourceLineNo">177</span><a id="line.177">        if (CollectionUtils.isEmpty(principals)) {</a>
<span class="sourceLineNo">178</span><a id="line.178">            return Collections.emptySet();</a>
<span class="sourceLineNo">179</span><a id="line.179">        }</a>
<span class="sourceLineNo">180</span><a id="line.180">        return Collections.unmodifiableCollection(principals.values());</a>
<span class="sourceLineNo">181</span><a id="line.181">    }</a>
<span class="sourceLineNo">182</span><a id="line.182"></a>
<span class="sourceLineNo">183</span><a id="line.183">    public Set&lt;String&gt; getRealmNames() {</a>
<span class="sourceLineNo">184</span><a id="line.184">        if (CollectionUtils.isEmpty(this.realmPrincipals)) {</a>
<span class="sourceLineNo">185</span><a id="line.185">            return Collections.emptySet();</a>
<span class="sourceLineNo">186</span><a id="line.186">        }</a>
<span class="sourceLineNo">187</span><a id="line.187">        return Collections.unmodifiableSet(this.realmPrincipals.keySet());</a>
<span class="sourceLineNo">188</span><a id="line.188">    }</a>
<span class="sourceLineNo">189</span><a id="line.189"></a>
<span class="sourceLineNo">190</span><a id="line.190">    public boolean isEmpty() {</a>
<span class="sourceLineNo">191</span><a id="line.191">        return CollectionUtils.isEmpty(this.combinedPrincipals);</a>
<span class="sourceLineNo">192</span><a id="line.192">    }</a>
<span class="sourceLineNo">193</span><a id="line.193"></a>
<span class="sourceLineNo">194</span><a id="line.194">    public Iterator iterator() {</a>
<span class="sourceLineNo">195</span><a id="line.195">        return asList().iterator();</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">    public Map&lt;String, Object&gt; getRealmPrincipals(String name) {</a>
<span class="sourceLineNo">199</span><a id="line.199">        if (this.realmPrincipals == null) {</a>
<span class="sourceLineNo">200</span><a id="line.200">            return null;</a>
<span class="sourceLineNo">201</span><a id="line.201">        }</a>
<span class="sourceLineNo">202</span><a id="line.202">        Map&lt;String,Object&gt; principals = this.realmPrincipals.get(name);</a>
<span class="sourceLineNo">203</span><a id="line.203">        if (principals == null) {</a>
<span class="sourceLineNo">204</span><a id="line.204">            return null;</a>
<span class="sourceLineNo">205</span><a id="line.205">        }</a>
<span class="sourceLineNo">206</span><a id="line.206">        return Collections.unmodifiableMap(principals);</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">    public Map&lt;String,Object&gt; setRealmPrincipals(String realmName, Map&lt;String, Object&gt; principals) {</a>
<span class="sourceLineNo">210</span><a id="line.210">        if (realmName == null) {</a>
<span class="sourceLineNo">211</span><a id="line.211">            throw new NullPointerException("realmName argument cannot be null.");</a>
<span class="sourceLineNo">212</span><a id="line.212">        }</a>
<span class="sourceLineNo">213</span><a id="line.213">        if (this.realmPrincipals == null) {</a>
<span class="sourceLineNo">214</span><a id="line.214">            if (!CollectionUtils.isEmpty(principals)) {</a>
<span class="sourceLineNo">215</span><a id="line.215">                this.realmPrincipals = new HashMap&lt;String,Map&lt;String,Object&gt;&gt;();</a>
<span class="sourceLineNo">216</span><a id="line.216">                return this.realmPrincipals.put(realmName, new HashMap&lt;String,Object&gt;(principals));</a>
<span class="sourceLineNo">217</span><a id="line.217">            } else {</a>
<span class="sourceLineNo">218</span><a id="line.218">                return null;</a>
<span class="sourceLineNo">219</span><a id="line.219">            }</a>
<span class="sourceLineNo">220</span><a id="line.220">        } else {</a>
<span class="sourceLineNo">221</span><a id="line.221">            Map&lt;String,Object&gt; existingPrincipals = this.realmPrincipals.remove(realmName);</a>
<span class="sourceLineNo">222</span><a id="line.222">            if (!CollectionUtils.isEmpty(principals)) {</a>
<span class="sourceLineNo">223</span><a id="line.223">                this.realmPrincipals.put(realmName, new HashMap&lt;String,Object&gt;(principals));</a>
<span class="sourceLineNo">224</span><a id="line.224">            }</a>
<span class="sourceLineNo">225</span><a id="line.225">            return existingPrincipals;</a>
<span class="sourceLineNo">226</span><a id="line.226">        }</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">    public Object setRealmPrincipal(String realmName, String principalName, Object principal) {</a>
<span class="sourceLineNo">230</span><a id="line.230">        if (realmName == null) {</a>
<span class="sourceLineNo">231</span><a id="line.231">            throw new NullPointerException("realmName argument cannot be null.");</a>
<span class="sourceLineNo">232</span><a id="line.232">        }</a>
<span class="sourceLineNo">233</span><a id="line.233">        if (principalName == null) {</a>
<span class="sourceLineNo">234</span><a id="line.234">            throw new NullPointerException(("principalName argument cannot be null."));</a>
<span class="sourceLineNo">235</span><a id="line.235">        }</a>
<span class="sourceLineNo">236</span><a id="line.236">        if (principal == null) {</a>
<span class="sourceLineNo">237</span><a id="line.237">            return removeRealmPrincipal(realmName, principalName);</a>
<span class="sourceLineNo">238</span><a id="line.238">        }</a>
<span class="sourceLineNo">239</span><a id="line.239">        if (this.realmPrincipals == null) {</a>
<span class="sourceLineNo">240</span><a id="line.240">            this.realmPrincipals = new HashMap&lt;String,Map&lt;String,Object&gt;&gt;();</a>
<span class="sourceLineNo">241</span><a id="line.241">        }</a>
<span class="sourceLineNo">242</span><a id="line.242">        Map&lt;String,Object&gt; principals = this.realmPrincipals.get(realmName);</a>
<span class="sourceLineNo">243</span><a id="line.243">        if (principals == null) {</a>
<span class="sourceLineNo">244</span><a id="line.244">            principals = new HashMap&lt;String,Object&gt;();</a>
<span class="sourceLineNo">245</span><a id="line.245">            this.realmPrincipals.put(realmName, principals);</a>
<span class="sourceLineNo">246</span><a id="line.246">        }</a>
<span class="sourceLineNo">247</span><a id="line.247">        return principals.put(principalName, principal);</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">    public Object getRealmPrincipal(String realmName, String principalName) {</a>
<span class="sourceLineNo">251</span><a id="line.251">        if (realmName == null) {</a>
<span class="sourceLineNo">252</span><a id="line.252">            throw new NullPointerException("realmName argument cannot be null.");</a>
<span class="sourceLineNo">253</span><a id="line.253">        }</a>
<span class="sourceLineNo">254</span><a id="line.254">        if (principalName == null) {</a>
<span class="sourceLineNo">255</span><a id="line.255">            throw new NullPointerException(("principalName argument cannot be null."));</a>
<span class="sourceLineNo">256</span><a id="line.256">        }</a>
<span class="sourceLineNo">257</span><a id="line.257">        if (this.realmPrincipals == null) {</a>
<span class="sourceLineNo">258</span><a id="line.258">            return null;</a>
<span class="sourceLineNo">259</span><a id="line.259">        }</a>
<span class="sourceLineNo">260</span><a id="line.260">        Map&lt;String,Object&gt; principals = this.realmPrincipals.get(realmName);</a>
<span class="sourceLineNo">261</span><a id="line.261">        if (principals != null) {</a>
<span class="sourceLineNo">262</span><a id="line.262">            return principals.get(principalName);</a>
<span class="sourceLineNo">263</span><a id="line.263">        }</a>
<span class="sourceLineNo">264</span><a id="line.264">        return null;</a>
<span class="sourceLineNo">265</span><a id="line.265">    }</a>
<span class="sourceLineNo">266</span><a id="line.266"></a>
<span class="sourceLineNo">267</span><a id="line.267">    public Object removeRealmPrincipal(String realmName, String principalName) {</a>
<span class="sourceLineNo">268</span><a id="line.268">        if (realmName == null) {</a>
<span class="sourceLineNo">269</span><a id="line.269">            throw new NullPointerException("realmName argument cannot be null.");</a>
<span class="sourceLineNo">270</span><a id="line.270">        }</a>
<span class="sourceLineNo">271</span><a id="line.271">        if (principalName == null) {</a>
<span class="sourceLineNo">272</span><a id="line.272">            throw new NullPointerException(("principalName argument cannot be null."));</a>
<span class="sourceLineNo">273</span><a id="line.273">        }</a>
<span class="sourceLineNo">274</span><a id="line.274">        if (this.realmPrincipals == null) {</a>
<span class="sourceLineNo">275</span><a id="line.275">            return null;</a>
<span class="sourceLineNo">276</span><a id="line.276">        }</a>
<span class="sourceLineNo">277</span><a id="line.277">        Map&lt;String,Object&gt; principals = this.realmPrincipals.get(realmName);</a>
<span class="sourceLineNo">278</span><a id="line.278">        if (principals != null) {</a>
<span class="sourceLineNo">279</span><a id="line.279">            return principals.remove(principalName);</a>
<span class="sourceLineNo">280</span><a id="line.280">        }</a>
<span class="sourceLineNo">281</span><a id="line.281">        return null;</a>
<span class="sourceLineNo">282</span><a id="line.282">    }</a>
<span class="sourceLineNo">283</span><a id="line.283">}</a>




























































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