<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (18) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.juneau.internal, class: FilteredMap">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../javadoc.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">// ***************************************************************************************************************************</span>
<span class="source-line-no">002</span><span id="line-2">// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *</span>
<span class="source-line-no">003</span><span id="line-3">// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *</span>
<span class="source-line-no">004</span><span id="line-4">// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *</span>
<span class="source-line-no">005</span><span id="line-5">// * with the License.  You may obtain a copy of the License at                                                              *</span>
<span class="source-line-no">006</span><span id="line-6">// *                                                                                                                         *</span>
<span class="source-line-no">007</span><span id="line-7">// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *</span>
<span class="source-line-no">008</span><span id="line-8">// *                                                                                                                         *</span>
<span class="source-line-no">009</span><span id="line-9">// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *</span>
<span class="source-line-no">010</span><span id="line-10">// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *</span>
<span class="source-line-no">011</span><span id="line-11">// * specific language governing permissions and limitations under the License.                                              *</span>
<span class="source-line-no">012</span><span id="line-12">// ***************************************************************************************************************************</span>
<span class="source-line-no">013</span><span id="line-13">package org.apache.juneau.internal;</span>
<span class="source-line-no">014</span><span id="line-14"></span>
<span class="source-line-no">015</span><span id="line-15">import static org.apache.juneau.common.internal.ArgUtils.*;</span>
<span class="source-line-no">016</span><span id="line-16"></span>
<span class="source-line-no">017</span><span id="line-17">import java.util.*;</span>
<span class="source-line-no">018</span><span id="line-18"></span>
<span class="source-line-no">019</span><span id="line-19">import org.apache.juneau.*;</span>
<span class="source-line-no">020</span><span id="line-20"></span>
<span class="source-line-no">021</span><span id="line-21">/**</span>
<span class="source-line-no">022</span><span id="line-22"> * Wrapper around a map where the key names are overridden.</span>
<span class="source-line-no">023</span><span id="line-23"> *</span>
<span class="source-line-no">024</span><span id="line-24"> * &lt;h5 class='section'&gt;See Also:&lt;/h5&gt;&lt;ul&gt;</span>
<span class="source-line-no">025</span><span id="line-25"></span>
<span class="source-line-no">026</span><span id="line-26"> * &lt;/ul&gt;</span>
<span class="source-line-no">027</span><span id="line-27"> *</span>
<span class="source-line-no">028</span><span id="line-28"> * @param &lt;K&gt; The key class type.</span>
<span class="source-line-no">029</span><span id="line-29"> * @param &lt;V&gt; The value class type.</span>
<span class="source-line-no">030</span><span id="line-30"> */</span>
<span class="source-line-no">031</span><span id="line-31">public final class FilteredMap&lt;K,V&gt; extends AbstractMap&lt;K,V&gt; implements Delegate&lt;Map&lt;K,V&gt;&gt; {</span>
<span class="source-line-no">032</span><span id="line-32"></span>
<span class="source-line-no">033</span><span id="line-33">   final Map&lt;K,V&gt; innerMap;</span>
<span class="source-line-no">034</span><span id="line-34">   final Set&lt;Map.Entry&lt;K,V&gt;&gt; entries;</span>
<span class="source-line-no">035</span><span id="line-35">   final ClassMeta&lt;Map&lt;K,V&gt;&gt; classMeta;</span>
<span class="source-line-no">036</span><span id="line-36"></span>
<span class="source-line-no">037</span><span id="line-37">   /**</span>
<span class="source-line-no">038</span><span id="line-38">    * Constructor.</span>
<span class="source-line-no">039</span><span id="line-39">    *</span>
<span class="source-line-no">040</span><span id="line-40">    * @param classMeta The class type of the map being wrapped.</span>
<span class="source-line-no">041</span><span id="line-41">    * @param innerMap The map being wrapped.  Must not be &lt;jk&gt;null&lt;/jk&gt;.</span>
<span class="source-line-no">042</span><span id="line-42">    * @param keys The keys in the new map.  Must not be &lt;jk&gt;null&lt;/jk&gt;.</span>
<span class="source-line-no">043</span><span id="line-43">    */</span>
<span class="source-line-no">044</span><span id="line-44">   public FilteredMap(ClassMeta&lt;Map&lt;K,V&gt;&gt; classMeta, Map&lt;K,V&gt; innerMap, K[] keys) {</span>
<span class="source-line-no">045</span><span id="line-45">      assertArgNotNull("innerMap", innerMap);</span>
<span class="source-line-no">046</span><span id="line-46">      assertArgNotNull("keys", keys);</span>
<span class="source-line-no">047</span><span id="line-47"></span>
<span class="source-line-no">048</span><span id="line-48">      this.classMeta = classMeta;</span>
<span class="source-line-no">049</span><span id="line-49">      this.innerMap = innerMap;</span>
<span class="source-line-no">050</span><span id="line-50">         List&lt;Map.Entry&lt;K,V&gt;&gt; l = new ArrayList&lt;&gt;(keys.length);</span>
<span class="source-line-no">051</span><span id="line-51">         for (K k : keys)</span>
<span class="source-line-no">052</span><span id="line-52">            if (innerMap.containsKey(k))</span>
<span class="source-line-no">053</span><span id="line-53">               l.add(createEntry(k));</span>
<span class="source-line-no">054</span><span id="line-54">         entries = new ListSet&lt;&gt;(l);</span>
<span class="source-line-no">055</span><span id="line-55">      }</span>
<span class="source-line-no">056</span><span id="line-56"></span>
<span class="source-line-no">057</span><span id="line-57">   private Map.Entry&lt;K,V&gt; createEntry(final K key) {</span>
<span class="source-line-no">058</span><span id="line-58">      return new Map.Entry&lt;&gt;() {</span>
<span class="source-line-no">059</span><span id="line-59"></span>
<span class="source-line-no">060</span><span id="line-60">         @Override /* Map.Entry */</span>
<span class="source-line-no">061</span><span id="line-61">         public K getKey() {</span>
<span class="source-line-no">062</span><span id="line-62">            return key;</span>
<span class="source-line-no">063</span><span id="line-63">         }</span>
<span class="source-line-no">064</span><span id="line-64"></span>
<span class="source-line-no">065</span><span id="line-65">         @Override /* Map.Entry */</span>
<span class="source-line-no">066</span><span id="line-66">         public V getValue() {</span>
<span class="source-line-no">067</span><span id="line-67">            return innerMap.get(key);</span>
<span class="source-line-no">068</span><span id="line-68">         }</span>
<span class="source-line-no">069</span><span id="line-69"></span>
<span class="source-line-no">070</span><span id="line-70">         @Override /* Map.Entry */</span>
<span class="source-line-no">071</span><span id="line-71">         public V setValue(V v) {</span>
<span class="source-line-no">072</span><span id="line-72">            return innerMap.put(key, v);</span>
<span class="source-line-no">073</span><span id="line-73">         }</span>
<span class="source-line-no">074</span><span id="line-74">      };</span>
<span class="source-line-no">075</span><span id="line-75">   }</span>
<span class="source-line-no">076</span><span id="line-76"></span>
<span class="source-line-no">077</span><span id="line-77"></span>
<span class="source-line-no">078</span><span id="line-78">   @Override /* Map */</span>
<span class="source-line-no">079</span><span id="line-79">   public Set&lt;Map.Entry&lt;K,V&gt;&gt; entrySet() {</span>
<span class="source-line-no">080</span><span id="line-80">      return entries;</span>
<span class="source-line-no">081</span><span id="line-81">   }</span>
<span class="source-line-no">082</span><span id="line-82"></span>
<span class="source-line-no">083</span><span id="line-83">   /**</span>
<span class="source-line-no">084</span><span id="line-84">    * A set with ordered entries (a List with a Set API).</span>
<span class="source-line-no">085</span><span id="line-85">    */</span>
<span class="source-line-no">086</span><span id="line-86">   private static final class ListSet&lt;E&gt; extends AbstractSet&lt;E&gt; {</span>
<span class="source-line-no">087</span><span id="line-87"></span>
<span class="source-line-no">088</span><span id="line-88">      private List&lt;E&gt; entries;</span>
<span class="source-line-no">089</span><span id="line-89"></span>
<span class="source-line-no">090</span><span id="line-90">      public ListSet(List&lt;E&gt; entries) {</span>
<span class="source-line-no">091</span><span id="line-91">         this.entries = entries;</span>
<span class="source-line-no">092</span><span id="line-92">      }</span>
<span class="source-line-no">093</span><span id="line-93"></span>
<span class="source-line-no">094</span><span id="line-94">      @Override /* Set */</span>
<span class="source-line-no">095</span><span id="line-95">      public Iterator&lt;E&gt; iterator() {</span>
<span class="source-line-no">096</span><span id="line-96">         return entries.iterator();</span>
<span class="source-line-no">097</span><span id="line-97">      }</span>
<span class="source-line-no">098</span><span id="line-98"></span>
<span class="source-line-no">099</span><span id="line-99">      @Override /* Set */</span>
<span class="source-line-no">100</span><span id="line-100">      public int size() {</span>
<span class="source-line-no">101</span><span id="line-101">         return entries.size();</span>
<span class="source-line-no">102</span><span id="line-102">      }</span>
<span class="source-line-no">103</span><span id="line-103">   }</span>
<span class="source-line-no">104</span><span id="line-104"></span>
<span class="source-line-no">105</span><span id="line-105">   @Override /* Delegate */</span>
<span class="source-line-no">106</span><span id="line-106">   public ClassMeta&lt;Map&lt;K,V&gt;&gt; getClassMeta() {</span>
<span class="source-line-no">107</span><span id="line-107">      return classMeta;</span>
<span class="source-line-no">108</span><span id="line-108">   }</span>
<span class="source-line-no">109</span><span id="line-109">}</span>




























































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