<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<span class="sourceLineNo">014</span> * See the license for the specific language governing permissions and<a name="line.14"></a>
<span class="sourceLineNo">015</span> * limitations under the license.<a name="line.15"></a>
<span class="sourceLineNo">016</span> */<a name="line.16"></a>
<span class="sourceLineNo">017</span>package org.apache.logging.log4j.message;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.util.AbstractMap;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.util.Collections;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.Map;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.TreeMap;<a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.logging.log4j.util.BiConsumer;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.logging.log4j.util.Chars;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.logging.log4j.util.EnglishEnums;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.logging.log4j.util.IndexedReadOnlyStringMap;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.logging.log4j.util.IndexedStringMap;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.logging.log4j.util.MultiFormatStringBuilderFormattable;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.logging.log4j.util.PerformanceSensitive;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.logging.log4j.util.ReadOnlyStringMap;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.logging.log4j.util.SortedArrayStringMap;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.logging.log4j.util.StringBuilders;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.logging.log4j.util.Strings;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.logging.log4j.util.TriConsumer;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
<span class="sourceLineNo">038</span> * Represents a Message that consists of a Map.<a name="line.38"></a>
<span class="sourceLineNo">039</span> * &lt;p&gt;<a name="line.39"></a>
<span class="sourceLineNo">040</span> * Thread-safety note: the contents of this message can be modified after construction.<a name="line.40"></a>
<span class="sourceLineNo">041</span> * When using asynchronous loggers and appenders it is not recommended to modify this message after the message is<a name="line.41"></a>
<span class="sourceLineNo">042</span> * logged, because it is undefined whether the logged message string will contain the old values or the modified<a name="line.42"></a>
<span class="sourceLineNo">043</span> * values.<a name="line.43"></a>
<span class="sourceLineNo">044</span> * &lt;/p&gt;<a name="line.44"></a>
<span class="sourceLineNo">045</span> * &lt;p&gt;<a name="line.45"></a>
<span class="sourceLineNo">046</span> * This class was pulled up from {@link StringMapMessage} to allow for Objects as values.<a name="line.46"></a>
<span class="sourceLineNo">047</span> * &lt;/p&gt;<a name="line.47"></a>
<span class="sourceLineNo">048</span> * @param &lt;M&gt; Allow subclasses to use fluent APIs and override methods that return instances of subclasses.<a name="line.48"></a>
<span class="sourceLineNo">049</span> * @param &lt;V&gt; The value type<a name="line.49"></a>
<span class="sourceLineNo">050</span> */<a name="line.50"></a>
<span class="sourceLineNo">051</span>@PerformanceSensitive("allocation")<a name="line.51"></a>
<span class="sourceLineNo">052</span>@AsynchronouslyFormattable<a name="line.52"></a>
<span class="sourceLineNo">053</span>public class MapMessage&lt;M extends MapMessage&lt;M, V&gt;, V&gt; implements MultiFormatStringBuilderFormattable {<a name="line.53"></a>
<span class="sourceLineNo">054</span><a name="line.54"></a>
<span class="sourceLineNo">055</span>    private static final long serialVersionUID = -5031471831131487120L;<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>    /**<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * When set as the format specifier causes the Map to be formatted as XML.<a name="line.58"></a>
<span class="sourceLineNo">059</span>     */<a name="line.59"></a>
<span class="sourceLineNo">060</span>    public enum MapFormat {<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span>        /** The map should be formatted as XML. */<a name="line.62"></a>
<span class="sourceLineNo">063</span>        XML,<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>        /** The map should be formatted as JSON. */<a name="line.65"></a>
<span class="sourceLineNo">066</span>        JSON,<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>        /** The map should be formatted the same as documented by {@link AbstractMap#toString()}. */<a name="line.68"></a>
<span class="sourceLineNo">069</span>        JAVA,<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span>        /**<a name="line.71"></a>
<span class="sourceLineNo">072</span>         * The map should be formatted the same as documented by {@link AbstractMap#toString()} but without quotes.<a name="line.72"></a>
<span class="sourceLineNo">073</span>         *<a name="line.73"></a>
<span class="sourceLineNo">074</span>         * @since 2.11.2<a name="line.74"></a>
<span class="sourceLineNo">075</span>         */<a name="line.75"></a>
<span class="sourceLineNo">076</span>        JAVA_UNQUOTED;<a name="line.76"></a>
<span class="sourceLineNo">077</span><a name="line.77"></a>
<span class="sourceLineNo">078</span>        /**<a name="line.78"></a>
<span class="sourceLineNo">079</span>         * Maps a format name to an {@link MapFormat} while ignoring case.<a name="line.79"></a>
<span class="sourceLineNo">080</span>         *<a name="line.80"></a>
<span class="sourceLineNo">081</span>         * @param format a MapFormat name<a name="line.81"></a>
<span class="sourceLineNo">082</span>         * @return a MapFormat<a name="line.82"></a>
<span class="sourceLineNo">083</span>         */<a name="line.83"></a>
<span class="sourceLineNo">084</span>        public static MapFormat lookupIgnoreCase(final String format) {<a name="line.84"></a>
<span class="sourceLineNo">085</span>            return XML.name().equalsIgnoreCase(format) ? XML //<a name="line.85"></a>
<span class="sourceLineNo">086</span>                    : JSON.name().equalsIgnoreCase(format) ? JSON //<a name="line.86"></a>
<span class="sourceLineNo">087</span>                    : JAVA.name().equalsIgnoreCase(format) ? JAVA //<a name="line.87"></a>
<span class="sourceLineNo">088</span>                    : JAVA_UNQUOTED.name().equalsIgnoreCase(format) ? JAVA_UNQUOTED //<a name="line.88"></a>
<span class="sourceLineNo">089</span>                    : null;<a name="line.89"></a>
<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span>        /**<a name="line.92"></a>
<span class="sourceLineNo">093</span>         * All {@code MapFormat} names.<a name="line.93"></a>
<span class="sourceLineNo">094</span>         *<a name="line.94"></a>
<span class="sourceLineNo">095</span>         * @return All {@code MapFormat} names.<a name="line.95"></a>
<span class="sourceLineNo">096</span>         */<a name="line.96"></a>
<span class="sourceLineNo">097</span>        public static String[] names() {<a name="line.97"></a>
<span class="sourceLineNo">098</span>            return new String[] {XML.name(), JSON.name(), JAVA.name(), JAVA_UNQUOTED.name()};<a name="line.98"></a>
<span class="sourceLineNo">099</span>        }<a name="line.99"></a>
<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>    private final IndexedStringMap data;<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>    /**<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * Constructs a new instance.<a name="line.105"></a>
<span class="sourceLineNo">106</span>     */<a name="line.106"></a>
<span class="sourceLineNo">107</span>    public MapMessage() {<a name="line.107"></a>
<span class="sourceLineNo">108</span>        this.data = new SortedArrayStringMap();<a name="line.108"></a>
<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>    /**<a name="line.111"></a>
<span class="sourceLineNo">112</span>     * Constructs a new instance.<a name="line.112"></a>
<span class="sourceLineNo">113</span>     *<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * @param  initialCapacity the initial capacity.<a name="line.114"></a>
<span class="sourceLineNo">115</span>     */<a name="line.115"></a>
<span class="sourceLineNo">116</span>    public MapMessage(final int initialCapacity) {<a name="line.116"></a>
<span class="sourceLineNo">117</span>        this.data = new SortedArrayStringMap(initialCapacity);<a name="line.117"></a>
<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span>    /**<a name="line.120"></a>
<span class="sourceLineNo">121</span>     * Constructs a new instance based on an existing {@link Map}.<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * @param map The Map.<a name="line.122"></a>
<span class="sourceLineNo">123</span>     */<a name="line.123"></a>
<span class="sourceLineNo">124</span>    public MapMessage(final Map&lt;String, V&gt; map) {<a name="line.124"></a>
<span class="sourceLineNo">125</span>        this.data = new SortedArrayStringMap(map);<a name="line.125"></a>
<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
<span class="sourceLineNo">127</span><a name="line.127"></a>
<span class="sourceLineNo">128</span>    @Override<a name="line.128"></a>
<span class="sourceLineNo">129</span>    public String[] getFormats() {<a name="line.129"></a>
<span class="sourceLineNo">130</span>        return MapFormat.names();<a name="line.130"></a>
<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>    /**<a name="line.133"></a>
<span class="sourceLineNo">134</span>     * Returns the data elements as if they were parameters on the logging event.<a name="line.134"></a>
<span class="sourceLineNo">135</span>     * @return the data elements.<a name="line.135"></a>
<span class="sourceLineNo">136</span>     */<a name="line.136"></a>
<span class="sourceLineNo">137</span>    @Override<a name="line.137"></a>
<span class="sourceLineNo">138</span>    public Object[] getParameters() {<a name="line.138"></a>
<span class="sourceLineNo">139</span>        final Object[] result = new Object[data.size()];<a name="line.139"></a>
<span class="sourceLineNo">140</span>        for (int i = 0; i &lt; data.size(); i++) {<a name="line.140"></a>
<span class="sourceLineNo">141</span>            result[i] = data.getValueAt(i);<a name="line.141"></a>
<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
<span class="sourceLineNo">143</span>        return result;<a name="line.143"></a>
<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span>    /**<a name="line.146"></a>
<span class="sourceLineNo">147</span>     * Returns the message.<a name="line.147"></a>
<span class="sourceLineNo">148</span>     * @return the message.<a name="line.148"></a>
<span class="sourceLineNo">149</span>     */<a name="line.149"></a>
<span class="sourceLineNo">150</span>    @Override<a name="line.150"></a>
<span class="sourceLineNo">151</span>    public String getFormat() {<a name="line.151"></a>
<span class="sourceLineNo">152</span>        return Strings.EMPTY;<a name="line.152"></a>
<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span>    /**<a name="line.155"></a>
<span class="sourceLineNo">156</span>     * Returns the message data as an unmodifiable Map.<a name="line.156"></a>
<span class="sourceLineNo">157</span>     * @return the message data as an unmodifiable map.<a name="line.157"></a>
<span class="sourceLineNo">158</span>     */<a name="line.158"></a>
<span class="sourceLineNo">159</span>    @SuppressWarnings("unchecked")<a name="line.159"></a>
<span class="sourceLineNo">160</span>    public Map&lt;String, V&gt; getData() {<a name="line.160"></a>
<span class="sourceLineNo">161</span>        final TreeMap&lt;String, V&gt; result = new TreeMap&lt;&gt;(); // returned map must be sorted<a name="line.161"></a>
<span class="sourceLineNo">162</span>        for (int i = 0; i &lt; data.size(); i++) {<a name="line.162"></a>
<span class="sourceLineNo">163</span>            // The Eclipse compiler does not need the typecast to V, but the Oracle compiler sure does.<a name="line.163"></a>
<span class="sourceLineNo">164</span>            result.put(data.getKeyAt(i), (V) data.getValueAt(i));<a name="line.164"></a>
<span class="sourceLineNo">165</span>        }<a name="line.165"></a>
<span class="sourceLineNo">166</span>        return Collections.unmodifiableMap(result);<a name="line.166"></a>
<span class="sourceLineNo">167</span>    }<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span>    /**<a name="line.169"></a>
<span class="sourceLineNo">170</span>     * Returns a read-only view of the message data.<a name="line.170"></a>
<span class="sourceLineNo">171</span>     * @return the read-only message data.<a name="line.171"></a>
<span class="sourceLineNo">172</span>     */<a name="line.172"></a>
<span class="sourceLineNo">173</span>    public IndexedReadOnlyStringMap getIndexedReadOnlyStringMap() {<a name="line.173"></a>
<span class="sourceLineNo">174</span>        return data;<a name="line.174"></a>
<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>    /**<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * Clear the data.<a name="line.178"></a>
<span class="sourceLineNo">179</span>     */<a name="line.179"></a>
<span class="sourceLineNo">180</span>    public void clear() {<a name="line.180"></a>
<span class="sourceLineNo">181</span>        data.clear();<a name="line.181"></a>
<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span>    /**<a name="line.184"></a>
<span class="sourceLineNo">185</span>     * Returns {@code true} if this data structure contains the specified key, {@code false} otherwise.<a name="line.185"></a>
<span class="sourceLineNo">186</span>     *<a name="line.186"></a>
<span class="sourceLineNo">187</span>     * @param key the key whose presence to check. May be {@code null}.<a name="line.187"></a>
<span class="sourceLineNo">188</span>     * @return {@code true} if this data structure contains the specified key, {@code false} otherwise<a name="line.188"></a>
<span class="sourceLineNo">189</span>     * @since 2.9<a name="line.189"></a>
<span class="sourceLineNo">190</span>     */<a name="line.190"></a>
<span class="sourceLineNo">191</span>    public boolean containsKey(final String key) {<a name="line.191"></a>
<span class="sourceLineNo">192</span>        return data.containsKey(key);<a name="line.192"></a>
<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>    /**<a name="line.195"></a>
<span class="sourceLineNo">196</span>     * Adds an item to the data Map.<a name="line.196"></a>
<span class="sourceLineNo">197</span>     * @param candidateKey The name of the data item.<a name="line.197"></a>
<span class="sourceLineNo">198</span>     * @param value The value of the data item.<a name="line.198"></a>
<span class="sourceLineNo">199</span>     */<a name="line.199"></a>
<span class="sourceLineNo">200</span>    public void put(final String candidateKey, final String value) {<a name="line.200"></a>
<span class="sourceLineNo">201</span>        if (value == null) {<a name="line.201"></a>
<span class="sourceLineNo">202</span>            throw new IllegalArgumentException("No value provided for key " + candidateKey);<a name="line.202"></a>
<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
<span class="sourceLineNo">204</span>        final String key = toKey(candidateKey);<a name="line.204"></a>
<span class="sourceLineNo">205</span>        validate(key, value);<a name="line.205"></a>
<span class="sourceLineNo">206</span>        data.putValue(key, value);<a name="line.206"></a>
<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>    /**<a name="line.209"></a>
<span class="sourceLineNo">210</span>     * Adds all the elements from the specified Map.<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * @param map The Map to add.<a name="line.211"></a>
<span class="sourceLineNo">212</span>     */<a name="line.212"></a>
<span class="sourceLineNo">213</span>    public void putAll(final Map&lt;String, String&gt; map) {<a name="line.213"></a>
<span class="sourceLineNo">214</span>        for (final Map.Entry&lt;String, String&gt; entry : map.entrySet()) {<a name="line.214"></a>
<span class="sourceLineNo">215</span>            data.putValue(entry.getKey(), entry.getValue());<a name="line.215"></a>
<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>    /**<a name="line.219"></a>
<span class="sourceLineNo">220</span>     * Retrieves the value of the element with the specified key or null if the key is not present.<a name="line.220"></a>
<span class="sourceLineNo">221</span>     * @param key The name of the element.<a name="line.221"></a>
<span class="sourceLineNo">222</span>     * @return The value of the element or null if the key is not present.<a name="line.222"></a>
<span class="sourceLineNo">223</span>     */<a name="line.223"></a>
<span class="sourceLineNo">224</span>    public String get(final String key) {<a name="line.224"></a>
<span class="sourceLineNo">225</span>        final Object result = data.getValue(key);<a name="line.225"></a>
<span class="sourceLineNo">226</span>        return ParameterFormatter.deepToString(result);<a name="line.226"></a>
<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
<span class="sourceLineNo">228</span><a name="line.228"></a>
<span class="sourceLineNo">229</span>    /**<a name="line.229"></a>
<span class="sourceLineNo">230</span>     * Removes the element with the specified name.<a name="line.230"></a>
<span class="sourceLineNo">231</span>     * @param key The name of the element.<a name="line.231"></a>
<span class="sourceLineNo">232</span>     * @return The previous value of the element.<a name="line.232"></a>
<span class="sourceLineNo">233</span>     */<a name="line.233"></a>
<span class="sourceLineNo">234</span>    public String remove(final String key) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>        final String result = get(key);<a name="line.235"></a>
<span class="sourceLineNo">236</span>        data.remove(key);<a name="line.236"></a>
<span class="sourceLineNo">237</span>        return result;<a name="line.237"></a>
<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
<span class="sourceLineNo">239</span><a name="line.239"></a>
<span class="sourceLineNo">240</span>    /**<a name="line.240"></a>
<span class="sourceLineNo">241</span>     * Formats the Structured data as described in &lt;a href="https://tools.ietf.org/html/rfc5424"&gt;RFC 5424&lt;/a&gt;.<a name="line.241"></a>
<span class="sourceLineNo">242</span>     *<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * @return The formatted String.<a name="line.243"></a>
<span class="sourceLineNo">244</span>     */<a name="line.244"></a>
<span class="sourceLineNo">245</span>    public String asString() {<a name="line.245"></a>
<span class="sourceLineNo">246</span>        return format((MapFormat) null, new StringBuilder()).toString();<a name="line.246"></a>
<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>    /**<a name="line.249"></a>
<span class="sourceLineNo">250</span>     * Formats the Structured data as described in &lt;a href="https://tools.ietf.org/html/rfc5424"&gt;RFC 5424&lt;/a&gt;.<a name="line.250"></a>
<span class="sourceLineNo">251</span>     *<a name="line.251"></a>
<span class="sourceLineNo">252</span>     * @param format The format identifier.<a name="line.252"></a>
<span class="sourceLineNo">253</span>     * @return The formatted String.<a name="line.253"></a>
<span class="sourceLineNo">254</span>     */<a name="line.254"></a>
<span class="sourceLineNo">255</span>    public String asString(final String format) {<a name="line.255"></a>
<span class="sourceLineNo">256</span>        try {<a name="line.256"></a>
<span class="sourceLineNo">257</span>            return format(EnglishEnums.valueOf(MapFormat.class, format), new StringBuilder()).toString();<a name="line.257"></a>
<span class="sourceLineNo">258</span>        } catch (final IllegalArgumentException ex) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>            return asString();<a name="line.259"></a>
<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * Performs the given action for each key-value pair in this data structure<a name="line.264"></a>
<span class="sourceLineNo">265</span>     * until all entries have been processed or the action throws an exception.<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * &lt;p&gt;<a name="line.266"></a>
<span class="sourceLineNo">267</span>     * Some implementations may not support structural modifications (adding new elements or removing elements) while<a name="line.267"></a>
<span class="sourceLineNo">268</span>     * iterating over the contents. In such implementations, attempts to add or remove elements from the<a name="line.268"></a>
<span class="sourceLineNo">269</span>     * {@code BiConsumer}'s {@link BiConsumer#accept(Object, Object)} accept} method may cause a<a name="line.269"></a>
<span class="sourceLineNo">270</span>     * {@code ConcurrentModificationException} to be thrown.<a name="line.270"></a>
<span class="sourceLineNo">271</span>     * &lt;/p&gt;<a name="line.271"></a>
<span class="sourceLineNo">272</span>     *<a name="line.272"></a>
<span class="sourceLineNo">273</span>     * @param action The action to be performed for each key-value pair in this collection<a name="line.273"></a>
<span class="sourceLineNo">274</span>     * @param &lt;CV&gt; type of the consumer value<a name="line.274"></a>
<span class="sourceLineNo">275</span>     * @throws java.util.ConcurrentModificationException some implementations may not support structural modifications<a name="line.275"></a>
<span class="sourceLineNo">276</span>     *          to this data structure while iterating over the contents with {@link #forEach(BiConsumer)} or<a name="line.276"></a>
<span class="sourceLineNo">277</span>     *          {@link #forEach(TriConsumer, Object)}.<a name="line.277"></a>
<span class="sourceLineNo">278</span>     * @see ReadOnlyStringMap#forEach(BiConsumer)<a name="line.278"></a>
<span class="sourceLineNo">279</span>     * @since 2.9<a name="line.279"></a>
<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
<span class="sourceLineNo">281</span>    public &lt;CV&gt; void forEach(final BiConsumer&lt;String, ? super CV&gt; action) {<a name="line.281"></a>
<span class="sourceLineNo">282</span>        data.forEach(action);<a name="line.282"></a>
<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>    /**<a name="line.285"></a>
<span class="sourceLineNo">286</span>     * Performs the given action for each key-value pair in this data structure<a name="line.286"></a>
<span class="sourceLineNo">287</span>     * until all entries have been processed or the action throws an exception.<a name="line.287"></a>
<span class="sourceLineNo">288</span>     * &lt;p&gt;<a name="line.288"></a>
<span class="sourceLineNo">289</span>     * The third parameter lets callers pass in a stateful object to be modified with the key-value pairs,<a name="line.289"></a>
<span class="sourceLineNo">290</span>     * so the TriConsumer implementation itself can be stateless and potentially reusable.<a name="line.290"></a>
<span class="sourceLineNo">291</span>     * &lt;/p&gt;<a name="line.291"></a>
<span class="sourceLineNo">292</span>     * &lt;p&gt;<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * Some implementations may not support structural modifications (adding new elements or removing elements) while<a name="line.293"></a>
<span class="sourceLineNo">294</span>     * iterating over the contents. In such implementations, attempts to add or remove elements from the<a name="line.294"></a>
<span class="sourceLineNo">295</span>     * {@code TriConsumer}'s {@link TriConsumer#accept(Object, Object, Object) accept} method may cause a<a name="line.295"></a>
<span class="sourceLineNo">296</span>     * {@code ConcurrentModificationException} to be thrown.<a name="line.296"></a>
<span class="sourceLineNo">297</span>     * &lt;/p&gt;<a name="line.297"></a>
<span class="sourceLineNo">298</span>     *<a name="line.298"></a>
<span class="sourceLineNo">299</span>     * @param action The action to be performed for each key-value pair in this collection<a name="line.299"></a>
<span class="sourceLineNo">300</span>     * @param state the object to be passed as the third parameter to each invocation on the specified<a name="line.300"></a>
<span class="sourceLineNo">301</span>     *          triconsumer<a name="line.301"></a>
<span class="sourceLineNo">302</span>     * @param &lt;CV&gt; type of the consumer value<a name="line.302"></a>
<span class="sourceLineNo">303</span>     * @param &lt;S&gt; type of the third parameter<a name="line.303"></a>
<span class="sourceLineNo">304</span>     * @throws java.util.ConcurrentModificationException some implementations may not support structural modifications<a name="line.304"></a>
<span class="sourceLineNo">305</span>     *          to this data structure while iterating over the contents with {@link #forEach(BiConsumer)} or<a name="line.305"></a>
<span class="sourceLineNo">306</span>     *          {@link #forEach(TriConsumer, Object)}.<a name="line.306"></a>
<span class="sourceLineNo">307</span>     * @see ReadOnlyStringMap#forEach(TriConsumer, Object)<a name="line.307"></a>
<span class="sourceLineNo">308</span>     * @since 2.9<a name="line.308"></a>
<span class="sourceLineNo">309</span>     */<a name="line.309"></a>
<span class="sourceLineNo">310</span>    public &lt;CV, S&gt; void forEach(final TriConsumer&lt;String, ? super CV, S&gt; action, final S state) {<a name="line.310"></a>
<span class="sourceLineNo">311</span>        data.forEach(action, state);<a name="line.311"></a>
<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
<span class="sourceLineNo">313</span><a name="line.313"></a>
<span class="sourceLineNo">314</span>    /**<a name="line.314"></a>
<span class="sourceLineNo">315</span>     * Formats the Structured data as described in &lt;a href="https://tools.ietf.org/html/rfc5424"&gt;RFC 5424&lt;/a&gt;.<a name="line.315"></a>
<span class="sourceLineNo">316</span>     *<a name="line.316"></a>
<span class="sourceLineNo">317</span>     * @param format The format identifier.<a name="line.317"></a>
<span class="sourceLineNo">318</span>     * @return The formatted String.<a name="line.318"></a>
<span class="sourceLineNo">319</span>     */<a name="line.319"></a>
<span class="sourceLineNo">320</span>    private StringBuilder format(final MapFormat format, final StringBuilder sb) {<a name="line.320"></a>
<span class="sourceLineNo">321</span>        if (format == null) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>            appendMap(sb);<a name="line.322"></a>
<span class="sourceLineNo">323</span>        } else {<a name="line.323"></a>
<span class="sourceLineNo">324</span>            switch (format) {<a name="line.324"></a>
<span class="sourceLineNo">325</span>                case XML : {<a name="line.325"></a>
<span class="sourceLineNo">326</span>                    asXml(sb);<a name="line.326"></a>
<span class="sourceLineNo">327</span>                    break;<a name="line.327"></a>
<span class="sourceLineNo">328</span>                }<a name="line.328"></a>
<span class="sourceLineNo">329</span>                case JSON : {<a name="line.329"></a>
<span class="sourceLineNo">330</span>                    asJson(sb);<a name="line.330"></a>
<span class="sourceLineNo">331</span>                    break;<a name="line.331"></a>
<span class="sourceLineNo">332</span>                }<a name="line.332"></a>
<span class="sourceLineNo">333</span>                case JAVA : {<a name="line.333"></a>
<span class="sourceLineNo">334</span>                    asJava(sb);<a name="line.334"></a>
<span class="sourceLineNo">335</span>                    break;<a name="line.335"></a>
<span class="sourceLineNo">336</span>                }<a name="line.336"></a>
<span class="sourceLineNo">337</span>                case JAVA_UNQUOTED:<a name="line.337"></a>
<span class="sourceLineNo">338</span>                    asJavaUnquoted(sb);<a name="line.338"></a>
<span class="sourceLineNo">339</span>                    break;<a name="line.339"></a>
<span class="sourceLineNo">340</span>                default : {<a name="line.340"></a>
<span class="sourceLineNo">341</span>                    appendMap(sb);<a name="line.341"></a>
<span class="sourceLineNo">342</span>                }<a name="line.342"></a>
<span class="sourceLineNo">343</span>            }<a name="line.343"></a>
<span class="sourceLineNo">344</span>        }<a name="line.344"></a>
<span class="sourceLineNo">345</span>        return sb;<a name="line.345"></a>
<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
<span class="sourceLineNo">347</span><a name="line.347"></a>
<span class="sourceLineNo">348</span>    /**<a name="line.348"></a>
<span class="sourceLineNo">349</span>     * Formats this message as an XML fragment String into the given builder.<a name="line.349"></a>
<span class="sourceLineNo">350</span>     *<a name="line.350"></a>
<span class="sourceLineNo">351</span>     * @param sb format into this builder.<a name="line.351"></a>
<span class="sourceLineNo">352</span>     */<a name="line.352"></a>
<span class="sourceLineNo">353</span>    public void asXml(final StringBuilder sb) {<a name="line.353"></a>
<span class="sourceLineNo">354</span>        sb.append("&lt;Map&gt;\n");<a name="line.354"></a>
<span class="sourceLineNo">355</span>        for (int i = 0; i &lt; data.size(); i++) {<a name="line.355"></a>
<span class="sourceLineNo">356</span>            sb.append("  &lt;Entry key=\"")<a name="line.356"></a>
<span class="sourceLineNo">357</span>                    .append(data.getKeyAt(i))<a name="line.357"></a>
<span class="sourceLineNo">358</span>                    .append("\"&gt;");<a name="line.358"></a>
<span class="sourceLineNo">359</span>            final int size = sb.length();<a name="line.359"></a>
<span class="sourceLineNo">360</span>            ParameterFormatter.recursiveDeepToString(data.getValueAt(i), sb, null);<a name="line.360"></a>
<span class="sourceLineNo">361</span>            StringBuilders.escapeXml(sb, size);<a name="line.361"></a>
<span class="sourceLineNo">362</span>            sb.append("&lt;/Entry&gt;\n");<a name="line.362"></a>
<span class="sourceLineNo">363</span>        }<a name="line.363"></a>
<span class="sourceLineNo">364</span>        sb.append("&lt;/Map&gt;");<a name="line.364"></a>
<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>    /**<a name="line.367"></a>
<span class="sourceLineNo">368</span>     * Formats the message and return it.<a name="line.368"></a>
<span class="sourceLineNo">369</span>     * @return the formatted message.<a name="line.369"></a>
<span class="sourceLineNo">370</span>     */<a name="line.370"></a>
<span class="sourceLineNo">371</span>    @Override<a name="line.371"></a>
<span class="sourceLineNo">372</span>    public String getFormattedMessage() {<a name="line.372"></a>
<span class="sourceLineNo">373</span>        return asString();<a name="line.373"></a>
<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
<span class="sourceLineNo">375</span><a name="line.375"></a>
<span class="sourceLineNo">376</span>    /**<a name="line.376"></a>
<span class="sourceLineNo">377</span>     *<a name="line.377"></a>
<span class="sourceLineNo">378</span>     * @param formats<a name="line.378"></a>
<span class="sourceLineNo">379</span>     *            An array of Strings that provide extra information about how to format the message. MapMessage uses<a name="line.379"></a>
<span class="sourceLineNo">380</span>     *            the first format specifier it recognizes. The supported formats are XML, JSON, and JAVA. The default<a name="line.380"></a>
<span class="sourceLineNo">381</span>     *            format is key1="value1" key2="value2" as required by &lt;a href="https://tools.ietf.org/html/rfc5424"&gt;RFC<a name="line.381"></a>
<span class="sourceLineNo">382</span>     *            5424&lt;/a&gt; messages.<a name="line.382"></a>
<span class="sourceLineNo">383</span>     *<a name="line.383"></a>
<span class="sourceLineNo">384</span>     * @return The formatted message.<a name="line.384"></a>
<span class="sourceLineNo">385</span>     */<a name="line.385"></a>
<span class="sourceLineNo">386</span>    @Override<a name="line.386"></a>
<span class="sourceLineNo">387</span>    public String getFormattedMessage(final String[] formats) {<a name="line.387"></a>
<span class="sourceLineNo">388</span>        return format(getFormat(formats), new StringBuilder()).toString();<a name="line.388"></a>
<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
<span class="sourceLineNo">390</span><a name="line.390"></a>
<span class="sourceLineNo">391</span>    private MapFormat getFormat(final String[] formats) {<a name="line.391"></a>
<span class="sourceLineNo">392</span>        if (formats == null || formats.length == 0) {<a name="line.392"></a>
<span class="sourceLineNo">393</span>            return null;<a name="line.393"></a>
<span class="sourceLineNo">394</span>        }<a name="line.394"></a>
<span class="sourceLineNo">395</span>        for (int i = 0; i &lt; formats.length; i++) {<a name="line.395"></a>
<span class="sourceLineNo">396</span>            final MapFormat mapFormat = MapFormat.lookupIgnoreCase(formats[i]);<a name="line.396"></a>
<span class="sourceLineNo">397</span>            if (mapFormat != null) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>                return mapFormat;<a name="line.398"></a>
<span class="sourceLineNo">399</span>            }<a name="line.399"></a>
<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
<span class="sourceLineNo">401</span>        return null;<a name="line.401"></a>
<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
<span class="sourceLineNo">403</span><a name="line.403"></a>
<span class="sourceLineNo">404</span>    protected void appendMap(final StringBuilder sb) {<a name="line.404"></a>
<span class="sourceLineNo">405</span>        for (int i = 0; i &lt; data.size(); i++) {<a name="line.405"></a>
<span class="sourceLineNo">406</span>            if (i &gt; 0) {<a name="line.406"></a>
<span class="sourceLineNo">407</span>                sb.append(' ');<a name="line.407"></a>
<span class="sourceLineNo">408</span>            }<a name="line.408"></a>
<span class="sourceLineNo">409</span>            sb.append(data.getKeyAt(i)).append(Chars.EQ).append(Chars.DQUOTE);<a name="line.409"></a>
<span class="sourceLineNo">410</span>            ParameterFormatter.recursiveDeepToString(data.getValueAt(i), sb, null);<a name="line.410"></a>
<span class="sourceLineNo">411</span>            sb.append(Chars.DQUOTE);<a name="line.411"></a>
<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
<span class="sourceLineNo">414</span><a name="line.414"></a>
<span class="sourceLineNo">415</span>    protected void asJson(final StringBuilder sb) {<a name="line.415"></a>
<span class="sourceLineNo">416</span>        MapMessageJsonFormatter.format(sb, data);<a name="line.416"></a>
<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
<span class="sourceLineNo">418</span><a name="line.418"></a>
<span class="sourceLineNo">419</span>    protected void asJavaUnquoted(final StringBuilder sb) {<a name="line.419"></a>
<span class="sourceLineNo">420</span>        asJava(sb, false);<a name="line.420"></a>
<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
<span class="sourceLineNo">422</span><a name="line.422"></a>
<span class="sourceLineNo">423</span>    protected void asJava(final StringBuilder sb) {<a name="line.423"></a>
<span class="sourceLineNo">424</span>        asJava(sb, true);<a name="line.424"></a>
<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
<span class="sourceLineNo">426</span><a name="line.426"></a>
<span class="sourceLineNo">427</span>    private void asJava(final StringBuilder sb, boolean quoted) {<a name="line.427"></a>
<span class="sourceLineNo">428</span>        sb.append('{');<a name="line.428"></a>
<span class="sourceLineNo">429</span>        for (int i = 0; i &lt; data.size(); i++) {<a name="line.429"></a>
<span class="sourceLineNo">430</span>            if (i &gt; 0) {<a name="line.430"></a>
<span class="sourceLineNo">431</span>                sb.append(", ");<a name="line.431"></a>
<span class="sourceLineNo">432</span>            }<a name="line.432"></a>
<span class="sourceLineNo">433</span>            sb.append(data.getKeyAt(i)).append(Chars.EQ);<a name="line.433"></a>
<span class="sourceLineNo">434</span>            if (quoted) {<a name="line.434"></a>
<span class="sourceLineNo">435</span>                sb.append(Chars.DQUOTE);<a name="line.435"></a>
<span class="sourceLineNo">436</span>            }<a name="line.436"></a>
<span class="sourceLineNo">437</span>            ParameterFormatter.recursiveDeepToString(data.getValueAt(i), sb, null);<a name="line.437"></a>
<span class="sourceLineNo">438</span>            if (quoted) {<a name="line.438"></a>
<span class="sourceLineNo">439</span>                sb.append(Chars.DQUOTE);<a name="line.439"></a>
<span class="sourceLineNo">440</span>            }<a name="line.440"></a>
<span class="sourceLineNo">441</span>        }<a name="line.441"></a>
<span class="sourceLineNo">442</span>        sb.append('}');<a name="line.442"></a>
<span class="sourceLineNo">443</span>    }<a name="line.443"></a>
<span class="sourceLineNo">444</span><a name="line.444"></a>
<span class="sourceLineNo">445</span>    /**<a name="line.445"></a>
<span class="sourceLineNo">446</span>     * Constructs a new instance based on an existing Map.<a name="line.446"></a>
<span class="sourceLineNo">447</span>     * @param map The Map.<a name="line.447"></a>
<span class="sourceLineNo">448</span>     * @return A new MapMessage<a name="line.448"></a>
<span class="sourceLineNo">449</span>     */<a name="line.449"></a>
<span class="sourceLineNo">450</span>    @SuppressWarnings("unchecked")<a name="line.450"></a>
<span class="sourceLineNo">451</span>    public M newInstance(final Map&lt;String, V&gt; map) {<a name="line.451"></a>
<span class="sourceLineNo">452</span>        return (M) new MapMessage&lt;&gt;(map);<a name="line.452"></a>
<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
<span class="sourceLineNo">454</span><a name="line.454"></a>
<span class="sourceLineNo">455</span>    @Override<a name="line.455"></a>
<span class="sourceLineNo">456</span>    public String toString() {<a name="line.456"></a>
<span class="sourceLineNo">457</span>        return asString();<a name="line.457"></a>
<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
<span class="sourceLineNo">459</span><a name="line.459"></a>
<span class="sourceLineNo">460</span>    @Override<a name="line.460"></a>
<span class="sourceLineNo">461</span>    public void formatTo(final StringBuilder buffer) {<a name="line.461"></a>
<span class="sourceLineNo">462</span>        format((MapFormat) null, buffer);<a name="line.462"></a>
<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
<span class="sourceLineNo">464</span><a name="line.464"></a>
<span class="sourceLineNo">465</span>    @Override<a name="line.465"></a>
<span class="sourceLineNo">466</span>    public void formatTo(final String[] formats, final StringBuilder buffer) {<a name="line.466"></a>
<span class="sourceLineNo">467</span>        format(getFormat(formats), buffer);<a name="line.467"></a>
<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
<span class="sourceLineNo">469</span><a name="line.469"></a>
<span class="sourceLineNo">470</span>    @Override<a name="line.470"></a>
<span class="sourceLineNo">471</span>    public boolean equals(final Object o) {<a name="line.471"></a>
<span class="sourceLineNo">472</span>        if (this == o) {<a name="line.472"></a>
<span class="sourceLineNo">473</span>            return true;<a name="line.473"></a>
<span class="sourceLineNo">474</span>        }<a name="line.474"></a>
<span class="sourceLineNo">475</span>        if (o == null || this.getClass() != o.getClass()) {<a name="line.475"></a>
<span class="sourceLineNo">476</span>            return false;<a name="line.476"></a>
<span class="sourceLineNo">477</span>        }<a name="line.477"></a>
<span class="sourceLineNo">478</span><a name="line.478"></a>
<span class="sourceLineNo">479</span>        final MapMessage&lt;?, ?&gt; that = (MapMessage&lt;?, ?&gt;) o;<a name="line.479"></a>
<span class="sourceLineNo">480</span><a name="line.480"></a>
<span class="sourceLineNo">481</span>        return this.data.equals(that.data);<a name="line.481"></a>
<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
<span class="sourceLineNo">483</span><a name="line.483"></a>
<span class="sourceLineNo">484</span>    @Override<a name="line.484"></a>
<span class="sourceLineNo">485</span>    public int hashCode() {<a name="line.485"></a>
<span class="sourceLineNo">486</span>        return data.hashCode();<a name="line.486"></a>
<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
<span class="sourceLineNo">489</span>    /**<a name="line.489"></a>
<span class="sourceLineNo">490</span>     * Always returns null.<a name="line.490"></a>
<span class="sourceLineNo">491</span>     *<a name="line.491"></a>
<span class="sourceLineNo">492</span>     * @return null<a name="line.492"></a>
<span class="sourceLineNo">493</span>     */<a name="line.493"></a>
<span class="sourceLineNo">494</span>    @Override<a name="line.494"></a>
<span class="sourceLineNo">495</span>    public Throwable getThrowable() {<a name="line.495"></a>
<span class="sourceLineNo">496</span>        return null;<a name="line.496"></a>
<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
<span class="sourceLineNo">498</span><a name="line.498"></a>
<span class="sourceLineNo">499</span>    /**<a name="line.499"></a>
<span class="sourceLineNo">500</span>     * Default implementation does nothing.<a name="line.500"></a>
<span class="sourceLineNo">501</span>     *<a name="line.501"></a>
<span class="sourceLineNo">502</span>     * @since 2.9<a name="line.502"></a>
<span class="sourceLineNo">503</span>     */<a name="line.503"></a>
<span class="sourceLineNo">504</span>    protected void validate(final String key, final boolean value) {<a name="line.504"></a>
<span class="sourceLineNo">505</span>        // do nothing<a name="line.505"></a>
<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
<span class="sourceLineNo">507</span><a name="line.507"></a>
<span class="sourceLineNo">508</span>    /**<a name="line.508"></a>
<span class="sourceLineNo">509</span>     * Default implementation does nothing.<a name="line.509"></a>
<span class="sourceLineNo">510</span>     *<a name="line.510"></a>
<span class="sourceLineNo">511</span>     * @since 2.9<a name="line.511"></a>
<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
<span class="sourceLineNo">513</span>    protected void validate(final String key, final byte value) {<a name="line.513"></a>
<span class="sourceLineNo">514</span>        // do nothing<a name="line.514"></a>
<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
<span class="sourceLineNo">516</span><a name="line.516"></a>
<span class="sourceLineNo">517</span>    /**<a name="line.517"></a>
<span class="sourceLineNo">518</span>     * Default implementation does nothing.<a name="line.518"></a>
<span class="sourceLineNo">519</span>     *<a name="line.519"></a>
<span class="sourceLineNo">520</span>     * @since 2.9<a name="line.520"></a>
<span class="sourceLineNo">521</span>     */<a name="line.521"></a>
<span class="sourceLineNo">522</span>    protected void validate(final String key, final char value) {<a name="line.522"></a>
<span class="sourceLineNo">523</span>        // do nothing<a name="line.523"></a>
<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
<span class="sourceLineNo">525</span><a name="line.525"></a>
<span class="sourceLineNo">526</span>    /**<a name="line.526"></a>
<span class="sourceLineNo">527</span>     * Default implementation does nothing.<a name="line.527"></a>
<span class="sourceLineNo">528</span>     *<a name="line.528"></a>
<span class="sourceLineNo">529</span>     * @since 2.9<a name="line.529"></a>
<span class="sourceLineNo">530</span>     */<a name="line.530"></a>
<span class="sourceLineNo">531</span>    protected void validate(final String key, final double value) {<a name="line.531"></a>
<span class="sourceLineNo">532</span>        // do nothing<a name="line.532"></a>
<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
<span class="sourceLineNo">534</span><a name="line.534"></a>
<span class="sourceLineNo">535</span>    /**<a name="line.535"></a>
<span class="sourceLineNo">536</span>     * Default implementation does nothing.<a name="line.536"></a>
<span class="sourceLineNo">537</span>     *<a name="line.537"></a>
<span class="sourceLineNo">538</span>     * @since 2.9<a name="line.538"></a>
<span class="sourceLineNo">539</span>     */<a name="line.539"></a>
<span class="sourceLineNo">540</span>    protected void validate(final String key, final float value) {<a name="line.540"></a>
<span class="sourceLineNo">541</span>        // do nothing<a name="line.541"></a>
<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
<span class="sourceLineNo">543</span><a name="line.543"></a>
<span class="sourceLineNo">544</span>    /**<a name="line.544"></a>
<span class="sourceLineNo">545</span>     * Default implementation does nothing.<a name="line.545"></a>
<span class="sourceLineNo">546</span>     *<a name="line.546"></a>
<span class="sourceLineNo">547</span>     * @since 2.9<a name="line.547"></a>
<span class="sourceLineNo">548</span>     */<a name="line.548"></a>
<span class="sourceLineNo">549</span>    protected void validate(final String key, final int value) {<a name="line.549"></a>
<span class="sourceLineNo">550</span>        // do nothing<a name="line.550"></a>
<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
<span class="sourceLineNo">552</span><a name="line.552"></a>
<span class="sourceLineNo">553</span>    /**<a name="line.553"></a>
<span class="sourceLineNo">554</span>     * Default implementation does nothing.<a name="line.554"></a>
<span class="sourceLineNo">555</span>     *<a name="line.555"></a>
<span class="sourceLineNo">556</span>     * @since 2.9<a name="line.556"></a>
<span class="sourceLineNo">557</span>     */<a name="line.557"></a>
<span class="sourceLineNo">558</span>    protected void validate(final String key, final long value) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>        // do nothing<a name="line.559"></a>
<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
<span class="sourceLineNo">561</span><a name="line.561"></a>
<span class="sourceLineNo">562</span>    /**<a name="line.562"></a>
<span class="sourceLineNo">563</span>     * Default implementation does nothing.<a name="line.563"></a>
<span class="sourceLineNo">564</span>     *<a name="line.564"></a>
<span class="sourceLineNo">565</span>     * @since 2.9<a name="line.565"></a>
<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
<span class="sourceLineNo">567</span>    protected void validate(final String key, final Object value) {<a name="line.567"></a>
<span class="sourceLineNo">568</span>        // do nothing<a name="line.568"></a>
<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>    /**<a name="line.571"></a>
<span class="sourceLineNo">572</span>     * Default implementation does nothing.<a name="line.572"></a>
<span class="sourceLineNo">573</span>     *<a name="line.573"></a>
<span class="sourceLineNo">574</span>     * @since 2.9<a name="line.574"></a>
<span class="sourceLineNo">575</span>     */<a name="line.575"></a>
<span class="sourceLineNo">576</span>    protected void validate(final String key, final short value) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>        // do nothing<a name="line.577"></a>
<span class="sourceLineNo">578</span>    }<a name="line.578"></a>
<span class="sourceLineNo">579</span><a name="line.579"></a>
<span class="sourceLineNo">580</span>    /**<a name="line.580"></a>
<span class="sourceLineNo">581</span>     * Default implementation does nothing.<a name="line.581"></a>
<span class="sourceLineNo">582</span>     *<a name="line.582"></a>
<span class="sourceLineNo">583</span>     * @since 2.9<a name="line.583"></a>
<span class="sourceLineNo">584</span>     */<a name="line.584"></a>
<span class="sourceLineNo">585</span>    protected void validate(final String key, final String value) {<a name="line.585"></a>
<span class="sourceLineNo">586</span>        // do nothing<a name="line.586"></a>
<span class="sourceLineNo">587</span>    }<a name="line.587"></a>
<span class="sourceLineNo">588</span><a name="line.588"></a>
<span class="sourceLineNo">589</span>    /**<a name="line.589"></a>
<span class="sourceLineNo">590</span>     * Allows subclasses to change a candidate key to an actual key.<a name="line.590"></a>
<span class="sourceLineNo">591</span>     *<a name="line.591"></a>
<span class="sourceLineNo">592</span>     * @param candidateKey The candidate key.<a name="line.592"></a>
<span class="sourceLineNo">593</span>     * @return The candidate key.<a name="line.593"></a>
<span class="sourceLineNo">594</span>     * @since 2.12<a name="line.594"></a>
<span class="sourceLineNo">595</span>     */<a name="line.595"></a>
<span class="sourceLineNo">596</span>    protected String toKey(final String candidateKey) {<a name="line.596"></a>
<span class="sourceLineNo">597</span>        return candidateKey;<a name="line.597"></a>
<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
<span class="sourceLineNo">599</span><a name="line.599"></a>
<span class="sourceLineNo">600</span>    /**<a name="line.600"></a>
<span class="sourceLineNo">601</span>     * Adds an item to the data Map.<a name="line.601"></a>
<span class="sourceLineNo">602</span>     * @param candidateKey The name of the data item.<a name="line.602"></a>
<span class="sourceLineNo">603</span>     * @param value The value of the data item.<a name="line.603"></a>
<span class="sourceLineNo">604</span>     * @return this object<a name="line.604"></a>
<span class="sourceLineNo">605</span>     * @since 2.9<a name="line.605"></a>
<span class="sourceLineNo">606</span>     */<a name="line.606"></a>
<span class="sourceLineNo">607</span>    @SuppressWarnings("unchecked")<a name="line.607"></a>
<span class="sourceLineNo">608</span>    public M with(final String candidateKey, final boolean value) {<a name="line.608"></a>
<span class="sourceLineNo">609</span>        final String key = toKey(candidateKey);<a name="line.609"></a>
<span class="sourceLineNo">610</span>        validate(key, value);<a name="line.610"></a>
<span class="sourceLineNo">611</span>        data.putValue(key, value);<a name="line.611"></a>
<span class="sourceLineNo">612</span>        return (M) this;<a name="line.612"></a>
<span class="sourceLineNo">613</span>    }<a name="line.613"></a>
<span class="sourceLineNo">614</span><a name="line.614"></a>
<span class="sourceLineNo">615</span>    /**<a name="line.615"></a>
<span class="sourceLineNo">616</span>     * Adds an item to the data Map.<a name="line.616"></a>
<span class="sourceLineNo">617</span>     * @param candidateKey The name of the data item.<a name="line.617"></a>
<span class="sourceLineNo">618</span>     * @param value The value of the data item.<a name="line.618"></a>
<span class="sourceLineNo">619</span>     * @return this object<a name="line.619"></a>
<span class="sourceLineNo">620</span>     * @since 2.9<a name="line.620"></a>
<span class="sourceLineNo">621</span>     */<a name="line.621"></a>
<span class="sourceLineNo">622</span>    @SuppressWarnings("unchecked")<a name="line.622"></a>
<span class="sourceLineNo">623</span>    public M with(final String candidateKey, final byte value) {<a name="line.623"></a>
<span class="sourceLineNo">624</span>        final String key = toKey(candidateKey);<a name="line.624"></a>
<span class="sourceLineNo">625</span>        validate(key, value);<a name="line.625"></a>
<span class="sourceLineNo">626</span>        data.putValue(key, value);<a name="line.626"></a>
<span class="sourceLineNo">627</span>        return (M) this;<a name="line.627"></a>
<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
<span class="sourceLineNo">629</span><a name="line.629"></a>
<span class="sourceLineNo">630</span>    /**<a name="line.630"></a>
<span class="sourceLineNo">631</span>     * Adds an item to the data Map.<a name="line.631"></a>
<span class="sourceLineNo">632</span>     * @param candidateKey The name of the data item.<a name="line.632"></a>
<span class="sourceLineNo">633</span>     * @param value The value of the data item.<a name="line.633"></a>
<span class="sourceLineNo">634</span>     * @return this object<a name="line.634"></a>
<span class="sourceLineNo">635</span>     * @since 2.9<a name="line.635"></a>
<span class="sourceLineNo">636</span>     */<a name="line.636"></a>
<span class="sourceLineNo">637</span>    @SuppressWarnings("unchecked")<a name="line.637"></a>
<span class="sourceLineNo">638</span>    public M with(final String candidateKey, final char value) {<a name="line.638"></a>
<span class="sourceLineNo">639</span>        final String key = toKey(candidateKey);<a name="line.639"></a>
<span class="sourceLineNo">640</span>        validate(key, value);<a name="line.640"></a>
<span class="sourceLineNo">641</span>        data.putValue(key, value);<a name="line.641"></a>
<span class="sourceLineNo">642</span>        return (M) this;<a name="line.642"></a>
<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
<span class="sourceLineNo">644</span><a name="line.644"></a>
<span class="sourceLineNo">645</span><a name="line.645"></a>
<span class="sourceLineNo">646</span>    /**<a name="line.646"></a>
<span class="sourceLineNo">647</span>     * Adds an item to the data Map.<a name="line.647"></a>
<span class="sourceLineNo">648</span>     * @param candidateKey The name of the data item.<a name="line.648"></a>
<span class="sourceLineNo">649</span>     * @param value The value of the data item.<a name="line.649"></a>
<span class="sourceLineNo">650</span>     * @return this object<a name="line.650"></a>
<span class="sourceLineNo">651</span>     * @since 2.9<a name="line.651"></a>
<span class="sourceLineNo">652</span>     */<a name="line.652"></a>
<span class="sourceLineNo">653</span>    @SuppressWarnings("unchecked")<a name="line.653"></a>
<span class="sourceLineNo">654</span>    public M with(final String candidateKey, final double value) {<a name="line.654"></a>
<span class="sourceLineNo">655</span>        final String key = toKey(candidateKey);<a name="line.655"></a>
<span class="sourceLineNo">656</span>        validate(key, value);<a name="line.656"></a>
<span class="sourceLineNo">657</span>        data.putValue(key, value);<a name="line.657"></a>
<span class="sourceLineNo">658</span>        return (M) this;<a name="line.658"></a>
<span class="sourceLineNo">659</span>    }<a name="line.659"></a>
<span class="sourceLineNo">660</span><a name="line.660"></a>
<span class="sourceLineNo">661</span>    /**<a name="line.661"></a>
<span class="sourceLineNo">662</span>     * Adds an item to the data Map.<a name="line.662"></a>
<span class="sourceLineNo">663</span>     * @param candidateKey The name of the data item.<a name="line.663"></a>
<span class="sourceLineNo">664</span>     * @param value The value of the data item.<a name="line.664"></a>
<span class="sourceLineNo">665</span>     * @return this object<a name="line.665"></a>
<span class="sourceLineNo">666</span>     * @since 2.9<a name="line.666"></a>
<span class="sourceLineNo">667</span>     */<a name="line.667"></a>
<span class="sourceLineNo">668</span>    @SuppressWarnings("unchecked")<a name="line.668"></a>
<span class="sourceLineNo">669</span>    public M with(final String candidateKey, final float value) {<a name="line.669"></a>
<span class="sourceLineNo">670</span>        final String key = toKey(candidateKey);<a name="line.670"></a>
<span class="sourceLineNo">671</span>        validate(key, value);<a name="line.671"></a>
<span class="sourceLineNo">672</span>        data.putValue(key, value);<a name="line.672"></a>
<span class="sourceLineNo">673</span>        return (M) this;<a name="line.673"></a>
<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
<span class="sourceLineNo">675</span><a name="line.675"></a>
<span class="sourceLineNo">676</span>    /**<a name="line.676"></a>
<span class="sourceLineNo">677</span>     * Adds an item to the data Map.<a name="line.677"></a>
<span class="sourceLineNo">678</span>     * @param candidateKey The name of the data item.<a name="line.678"></a>
<span class="sourceLineNo">679</span>     * @param value The value of the data item.<a name="line.679"></a>
<span class="sourceLineNo">680</span>     * @return this object<a name="line.680"></a>
<span class="sourceLineNo">681</span>     * @since 2.9<a name="line.681"></a>
<span class="sourceLineNo">682</span>     */<a name="line.682"></a>
<span class="sourceLineNo">683</span>    @SuppressWarnings("unchecked")<a name="line.683"></a>
<span class="sourceLineNo">684</span>    public M with(final String candidateKey, final int value) {<a name="line.684"></a>
<span class="sourceLineNo">685</span>        final String key = toKey(candidateKey);<a name="line.685"></a>
<span class="sourceLineNo">686</span>        validate(key, value);<a name="line.686"></a>
<span class="sourceLineNo">687</span>        data.putValue(key, value);<a name="line.687"></a>
<span class="sourceLineNo">688</span>        return (M) this;<a name="line.688"></a>
<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
<span class="sourceLineNo">690</span><a name="line.690"></a>
<span class="sourceLineNo">691</span>    /**<a name="line.691"></a>
<span class="sourceLineNo">692</span>     * Adds an item to the data Map.<a name="line.692"></a>
<span class="sourceLineNo">693</span>     * @param candidateKey The name of the data item.<a name="line.693"></a>
<span class="sourceLineNo">694</span>     * @param value The value of the data item.<a name="line.694"></a>
<span class="sourceLineNo">695</span>     * @return this object<a name="line.695"></a>
<span class="sourceLineNo">696</span>     * @since 2.9<a name="line.696"></a>
<span class="sourceLineNo">697</span>     */<a name="line.697"></a>
<span class="sourceLineNo">698</span>    @SuppressWarnings("unchecked")<a name="line.698"></a>
<span class="sourceLineNo">699</span>    public M with(final String candidateKey, final long value) {<a name="line.699"></a>
<span class="sourceLineNo">700</span>        final String key = toKey(candidateKey);<a name="line.700"></a>
<span class="sourceLineNo">701</span>        validate(key, value);<a name="line.701"></a>
<span class="sourceLineNo">702</span>        data.putValue(key, value);<a name="line.702"></a>
<span class="sourceLineNo">703</span>        return (M) this;<a name="line.703"></a>
<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
<span class="sourceLineNo">705</span><a name="line.705"></a>
<span class="sourceLineNo">706</span>    /**<a name="line.706"></a>
<span class="sourceLineNo">707</span>     * Adds an item to the data Map.<a name="line.707"></a>
<span class="sourceLineNo">708</span>     * @param candidateKey The name of the data item.<a name="line.708"></a>
<span class="sourceLineNo">709</span>     * @param value The value of the data item.<a name="line.709"></a>
<span class="sourceLineNo">710</span>     * @return this object<a name="line.710"></a>
<span class="sourceLineNo">711</span>     * @since 2.9<a name="line.711"></a>
<span class="sourceLineNo">712</span>     */<a name="line.712"></a>
<span class="sourceLineNo">713</span>    @SuppressWarnings("unchecked")<a name="line.713"></a>
<span class="sourceLineNo">714</span>    public M with(final String candidateKey, final Object value) {<a name="line.714"></a>
<span class="sourceLineNo">715</span>        final String key = toKey(candidateKey);<a name="line.715"></a>
<span class="sourceLineNo">716</span>        validate(key, value);<a name="line.716"></a>
<span class="sourceLineNo">717</span>        data.putValue(key, value);<a name="line.717"></a>
<span class="sourceLineNo">718</span>        return (M) this;<a name="line.718"></a>
<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
<span class="sourceLineNo">720</span><a name="line.720"></a>
<span class="sourceLineNo">721</span>    /**<a name="line.721"></a>
<span class="sourceLineNo">722</span>     * Adds an item to the data Map.<a name="line.722"></a>
<span class="sourceLineNo">723</span>     * @param candidateKey The name of the data item.<a name="line.723"></a>
<span class="sourceLineNo">724</span>     * @param value The value of the data item.<a name="line.724"></a>
<span class="sourceLineNo">725</span>     * @return this object<a name="line.725"></a>
<span class="sourceLineNo">726</span>     * @since 2.9<a name="line.726"></a>
<span class="sourceLineNo">727</span>     */<a name="line.727"></a>
<span class="sourceLineNo">728</span>    @SuppressWarnings("unchecked")<a name="line.728"></a>
<span class="sourceLineNo">729</span>    public M with(final String candidateKey, final short value) {<a name="line.729"></a>
<span class="sourceLineNo">730</span>        final String key = toKey(candidateKey);<a name="line.730"></a>
<span class="sourceLineNo">731</span>        validate(key, value);<a name="line.731"></a>
<span class="sourceLineNo">732</span>        data.putValue(key, value);<a name="line.732"></a>
<span class="sourceLineNo">733</span>        return (M) this;<a name="line.733"></a>
<span class="sourceLineNo">734</span>    }<a name="line.734"></a>
<span class="sourceLineNo">735</span><a name="line.735"></a>
<span class="sourceLineNo">736</span>    /**<a name="line.736"></a>
<span class="sourceLineNo">737</span>     * Adds an item to the data Map in fluent style.<a name="line.737"></a>
<span class="sourceLineNo">738</span>     * @param candidateKey The name of the data item.<a name="line.738"></a>
<span class="sourceLineNo">739</span>     * @param value The value of the data item.<a name="line.739"></a>
<span class="sourceLineNo">740</span>     * @return {@code this}<a name="line.740"></a>
<span class="sourceLineNo">741</span>     */<a name="line.741"></a>
<span class="sourceLineNo">742</span>    @SuppressWarnings("unchecked")<a name="line.742"></a>
<span class="sourceLineNo">743</span>    public M with(final String candidateKey, final String value) {<a name="line.743"></a>
<span class="sourceLineNo">744</span>        final String key = toKey(candidateKey);<a name="line.744"></a>
<span class="sourceLineNo">745</span>        put(key, value);<a name="line.745"></a>
<span class="sourceLineNo">746</span>        return (M) this;<a name="line.746"></a>
<span class="sourceLineNo">747</span>    }<a name="line.747"></a>
<span class="sourceLineNo">748</span><a name="line.748"></a>
<span class="sourceLineNo">749</span>}<a name="line.749"></a>




























































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