blob: 671e934962ae78830d1082dd929dda161a895426 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Coverage Report</title>
<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
<script type="text/javascript" src="js/popup.js"></script>
</head>
<body>
<h5>Coverage Report - org.apache.shiro.config.ReflectionBuilder</h5>
<div class="separator">&nbsp;</div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tr><td><a href="org.apache.shiro.config.ReflectionBuilder.html">ReflectionBuilder</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">80%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:80px"><span class="text">209/259</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">71%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:71px"><span class="text">117/164</span></div></div></td></tr></table></td><td class="value"><span class="hidden">5.032258064516129;</span>5.032</td></tr>
</table>
<div class="separator">&nbsp;</div>
<table cellspacing="0" cellpadding="0" class="src">
<tr> <td class="numLine">&nbsp;1</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment">/*</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;2</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;3</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * or more contributor license agreements. See the NOTICE file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;4</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * distributed with this work for additional information</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;5</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;6</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;7</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * "License"); you may not use this file except in compliance</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;8</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * with the License. You may obtain a copy of the License at</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;9</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;10</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;11</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;12</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;13</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * software distributed under the License is distributed on an</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;14</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;15</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * KIND, either express or implied. See the License for the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;16</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * specific language governing permissions and limitations</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;17</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * under the License.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;18</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;19</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">package</span> org.apache.shiro.config;</pre></td></tr>
<tr> <td class="numLine">&nbsp;20</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;21</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.apache.commons.beanutils.BeanUtils;</pre></td></tr>
<tr> <td class="numLine">&nbsp;22</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.apache.commons.beanutils.PropertyUtils;</pre></td></tr>
<tr> <td class="numLine">&nbsp;23</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.apache.shiro.codec.Base64;</pre></td></tr>
<tr> <td class="numLine">&nbsp;24</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.apache.shiro.codec.Hex;</pre></td></tr>
<tr> <td class="numLine">&nbsp;25</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.apache.shiro.util.*;</pre></td></tr>
<tr> <td class="numLine">&nbsp;26</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.slf4j.Logger;</pre></td></tr>
<tr> <td class="numLine">&nbsp;27</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> org.slf4j.LoggerFactory;</pre></td></tr>
<tr> <td class="numLine">&nbsp;28</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;29</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.beans.PropertyDescriptor;</pre></td></tr>
<tr> <td class="numLine">&nbsp;30</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">import</span> java.util.*;</pre></td></tr>
<tr> <td class="numLine">&nbsp;31</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;32</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;33</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;34</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Object builder that uses reflection and Apache Commons BeanUtils to build objects given a</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;35</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * map of "property values". Typically these come from the Shiro INI configuration and are used</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;36</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * to construct or modify the SecurityManager, its dependencies, and web-based security filters.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;37</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * &lt;p/&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;38</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Recognizes {@link Factory} implementations and will call</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;39</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * {@link org.apache.shiro.util.Factory#getInstance() getInstance} to satisfy any reference to this bean.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;40</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;41</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @since 0.9</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;42</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;43</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="keyword">public</span> <span class="keyword">class</span> ReflectionBuilder {</pre></td></tr>
<tr> <td class="numLine">&nbsp;44</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;45</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//TODO - complete JavaDoc</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;46</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;47</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger log = LoggerFactory.getLogger(ReflectionBuilder.<span class="keyword">class</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;48</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;49</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String OBJECT_REFERENCE_BEGIN_TOKEN = <span class="string">"$"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;50</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String ESCAPED_OBJECT_REFERENCE_BEGIN_TOKEN = <span class="string">"\\$"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;51</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String GLOBAL_PROPERTY_PREFIX = <span class="string">"shiro"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;52</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">char</span> MAP_KEY_VALUE_DELIMITER = <span class="string">':'</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;53</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String HEX_BEGIN_TOKEN = <span class="string">"0x"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;54</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String NULL_VALUE_TOKEN = <span class="string">"null"</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;55</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String EMPTY_STRING_VALUE_TOKEN = <span class="string">"\"\""</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;56</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">char</span> STRING_VALUE_DELIMETER = <span class="string">'"'</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;57</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">char</span> MAP_PROPERTY_BEGIN_TOKEN = <span class="string">'['</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;58</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">char</span> MAP_PROPERTY_END_TOKEN = <span class="string">']'</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;59</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;60</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Map&lt;String, ?&gt; objects;</pre></td></tr>
<tr> <td class="numLine">&nbsp;61</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;62</td> <td class="nbHitsCovered">&nbsp;22</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> ReflectionBuilder() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;63</td> <td class="nbHitsCovered">&nbsp;22</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">this</span>.objects = <span class="keyword">new</span> LinkedHashMap&lt;String, Object&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;64</td> <td class="nbHitsCovered">&nbsp;22</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;65</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;66</td> <td class="nbHitsCovered">&nbsp;26</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> ReflectionBuilder(Map&lt;String, ?&gt; defaults) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;67</td> <td class="nbHitsUncovered"><a title="Line 67: Conditional coverage 50% (1/2).">&nbsp;26</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 67: Conditional coverage 50% (1/2)."> <span class="keyword">this</span>.objects = CollectionUtils.isEmpty(defaults) ? <span class="keyword">new</span> LinkedHashMap&lt;String, Object&gt;() : defaults;</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;68</td> <td class="nbHitsCovered">&nbsp;26</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;69</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;70</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> Map&lt;String, ?&gt; getObjects() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;71</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> objects;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;72</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;73</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;74</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> setObjects(Map&lt;String, ?&gt; objects) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;75</td> <td class="nbHitsUncovered"><a title="Line 75: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 75: Conditional coverage 0% (0/2)."> <span class="keyword">this</span>.objects = CollectionUtils.isEmpty(objects) ? <span class="keyword">new</span> LinkedHashMap&lt;String, Object&gt;() : objects;</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;76</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;77</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;78</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> Object getBean(String id) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;79</td> <td class="nbHitsCovered">&nbsp;21</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> objects.get(id);</pre></td></tr>
<tr> <td class="numLine">&nbsp;80</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;81</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;82</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; @SuppressWarnings({<span class="string">"unchecked"</span>})</pre></td></tr>
<tr> <td class="numLine">&nbsp;83</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> &lt;T&gt; T getBean(String id, Class&lt;T&gt; requiredType) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;84</td> <td class="nbHitsUncovered"><a title="Line 84: Conditional coverage 50% (1/2).">&nbsp;21</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 84: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (requiredType == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;85</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"requiredType argument cannot be null."</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;86</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;87</td> <td class="nbHitsCovered">&nbsp;21</td> <td class="src"><pre class="src">&nbsp; Object bean = getBean(id);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;88</td> <td class="nbHitsUncovered"><a title="Line 88: Conditional coverage 50% (1/2).">&nbsp;21</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 88: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (bean == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;89</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;90</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;91</td> <td class="nbHitsUncovered"><a title="Line 91: Conditional coverage 50% (1/2).">&nbsp;21</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 91: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!requiredType.isAssignableFrom(bean.getClass())) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;92</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Bean with id ["</span> + id + <span class="string">"] is not of the required type ["</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;93</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; requiredType.getName() + <span class="string">"]."</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;94</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;95</td> <td class="nbHitsCovered">&nbsp;21</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> (T) bean;</pre></td></tr>
<tr> <td class="numLine">&nbsp;96</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;97</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;98</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; @SuppressWarnings({<span class="string">"unchecked"</span>})</pre></td></tr>
<tr> <td class="numLine">&nbsp;99</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> Map&lt;String, ?&gt; buildObjects(Map&lt;String, String&gt; kvPairs) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;100</td> <td class="nbHitsUncovered"><a title="Line 100: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;44</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 100: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (kvPairs != <span class="keyword">null</span> &amp;&amp; !kvPairs.isEmpty()) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;101</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;102</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Separate key value pairs into object declarations and property assignment</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;103</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// so that all objects can be created up front</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;104</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;105</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//https://issues.apache.org/jira/browse/SHIRO-85 - need to use LinkedHashMaps here:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;106</td> <td class="nbHitsCovered">&nbsp;40</td> <td class="src"><pre class="src">&nbsp; Map&lt;String, String&gt; instanceMap = <span class="keyword">new</span> LinkedHashMap&lt;String, String&gt;();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;107</td> <td class="nbHitsCovered">&nbsp;40</td> <td class="src"><pre class="src">&nbsp; Map&lt;String, String&gt; propertyMap = <span class="keyword">new</span> LinkedHashMap&lt;String, String&gt;();</pre></td></tr>
<tr> <td class="numLine">&nbsp;108</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;109</td> <td class="nbHitsCovered"><a title="Line 109: Conditional coverage 100% (2/2).">&nbsp;40</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 109: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry&lt;String, String&gt; entry : kvPairs.entrySet()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;110</td> <td class="nbHitsUncovered"><a title="Line 110: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;137</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 110: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (entry.getKey().indexOf(<span class="string">'.'</span>) &lt; 0 || entry.getKey().endsWith(<span class="string">".class"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;111</td> <td class="nbHitsCovered">&nbsp;66</td> <td class="src"><pre class="src">&nbsp; instanceMap.put(entry.getKey(), entry.getValue());</pre></td></tr>
<tr> <td class="numLine">&nbsp;112</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;113</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; propertyMap.put(entry.getKey(), entry.getValue());</pre></td></tr>
<tr> <td class="numLine">&nbsp;114</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;115</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;116</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;117</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Create all instances</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;118</td> <td class="nbHitsCovered"><a title="Line 118: Conditional coverage 100% (2/2).">&nbsp;40</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 118: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry&lt;String, String&gt; entry : instanceMap.entrySet()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;119</td> <td class="nbHitsCovered">&nbsp;66</td> <td class="src"><pre class="src">&nbsp; createNewInstance((Map&lt;String, Object&gt;) objects, entry.getKey(), entry.getValue());</pre></td></tr>
<tr> <td class="numLine">&nbsp;120</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;121</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;122</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// Set all properties</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;123</td> <td class="nbHitsCovered"><a title="Line 123: Conditional coverage 100% (2/2).">&nbsp;40</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 123: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry&lt;String, String&gt; entry : propertyMap.entrySet()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;124</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; applyProperty(entry.getKey(), entry.getValue(), objects);</pre></td></tr>
<tr> <td class="numLine">&nbsp;125</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;126</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;127</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;128</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//SHIRO-413: init method must be called for constructed objects that are Initializable</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;129</td> <td class="nbHitsCovered">&nbsp;42</td> <td class="src"><pre class="src">&nbsp; LifecycleUtils.init(objects.values());</pre></td></tr>
<tr> <td class="numLine">&nbsp;130</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;131</td> <td class="nbHitsCovered">&nbsp;42</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> objects;</pre></td></tr>
<tr> <td class="numLine">&nbsp;132</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;133</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;134</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> createNewInstance(Map&lt;String, Object&gt; objects, String name, String value) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;135</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;136</td> <td class="nbHitsCovered">&nbsp;66</td> <td class="src"><pre class="src">&nbsp; Object currentInstance = objects.get(name);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;137</td> <td class="nbHitsUncovered"><a title="Line 137: Conditional coverage 50% (1/2).">&nbsp;66</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 137: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (currentInstance != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;138</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; log.info(<span class="string">"An instance with name '{}' already exists. "</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;139</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"Redefining this object as a new instance of type {}"</span>, name, value);</pre></td></tr>
<tr> <td class="numLine">&nbsp;140</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;141</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;142</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Object instance;<span class="comment">//name with no property, assume right hand side of equals sign is the class name:</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;143</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;144</td> <td class="nbHitsCovered">&nbsp;66</td> <td class="src"><pre class="src">&nbsp; instance = ClassUtils.newInstance(value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;145</td> <td class="nbHitsCovered"><a title="Line 145: Conditional coverage 100% (2/2).">&nbsp;66</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 145: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (instance <span class="keyword">instanceof</span> Nameable) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;146</td> <td class="nbHitsCovered">&nbsp;14</td> <td class="src"><pre class="src">&nbsp; ((Nameable) instance).setName(name);</pre></td></tr>
<tr> <td class="numLine">&nbsp;147</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;148</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;149</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String msg = <span class="string">"Unable to instantiate class ["</span> + value + <span class="string">"] for object named '"</span> + name + <span class="string">"'. "</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;150</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"Please ensure you've specified the fully qualified class name correctly."</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;151</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(msg, e);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;152</td> <td class="nbHitsCovered">&nbsp;66</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;153</td> <td class="nbHitsCovered">&nbsp;66</td> <td class="src"><pre class="src">&nbsp; objects.put(name, instance);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;154</td> <td class="nbHitsCovered">&nbsp;66</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;155</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;156</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> applyProperty(String key, String value, Map objects) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;157</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;158</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> index = key.indexOf(<span class="string">'.'</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;159</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;160</td> <td class="nbHitsUncovered"><a title="Line 160: Conditional coverage 50% (1/2).">&nbsp;71</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 160: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (index &gt;= 0) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;161</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; String name = key.substring(0, index);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;162</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; String property = key.substring(index + 1, key.length());</pre></td></tr>
<tr> <td class="numLine">&nbsp;163</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;164</td> <td class="nbHitsUncovered"><a title="Line 164: Conditional coverage 50% (1/2).">&nbsp;71</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 164: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (GLOBAL_PROPERTY_PREFIX.equalsIgnoreCase(name)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;165</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; applyGlobalProperty(objects, property, value);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;166</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;167</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; applySingleProperty(objects, name, property, value);</pre></td></tr>
<tr> <td class="numLine">&nbsp;168</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;169</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;170</td> <td class="nbHitsCovered">&nbsp;69</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;171</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"All property keys must contain a '.' character. "</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;172</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"(e.g. myBean.property = value) These should already be separated out by buildObjects()."</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;173</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;174</td> <td class="nbHitsCovered">&nbsp;69</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;175</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;176</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> applyGlobalProperty(Map objects, String property, String value) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;177</td> <td class="nbHitsUncovered"><a title="Line 177: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 177: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Object instance : objects.values()) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;178</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;179</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; PropertyDescriptor pd = PropertyUtils.getPropertyDescriptor(instance, property);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;180</td> <td class="nbHitsUncovered"><a title="Line 180: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 180: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (pd != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;181</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; applyProperty(instance, property, value);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;182</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;183</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;184</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String msg = <span class="string">"Error retrieving property descriptor for instance "</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;185</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"of type ["</span> + instance.getClass().getName() + <span class="string">"] "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;186</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"while setting property ["</span> + property + <span class="string">"]"</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;187</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(msg, e);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;188</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;189</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;190</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;191</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;192</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> applySingleProperty(Map objects, String name, String property, String value) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;193</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; Object instance = objects.get(name);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;194</td> <td class="nbHitsUncovered"><a title="Line 194: Conditional coverage 50% (1/2).">&nbsp;71</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 194: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (property.equals(<span class="string">"class"</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;195</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"Property keys should not contain 'class' properties since these "</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;196</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"should already be separated out by buildObjects()."</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;197</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;198</td> <td class="nbHitsUncovered"><a title="Line 198: Conditional coverage 50% (1/2).">&nbsp;71</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 198: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (instance == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;199</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String msg = <span class="string">"Configuration error. Specified object ["</span> + name + <span class="string">"] with property ["</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;200</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; property + <span class="string">"] without first defining that object's class. Please first "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;201</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"specify the class property first, e.g. myObject = fully_qualified_class_name "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;202</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"and then define additional properties."</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;203</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(msg);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;204</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;205</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;206</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; applyProperty(instance, property, value);</pre></td></tr>
<tr> <td class="numLine">&nbsp;207</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;208</td> <td class="nbHitsCovered">&nbsp;69</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;209</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;210</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">boolean</span> isReference(String value) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;211</td> <td class="nbHitsUncovered"><a title="Line 211: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;84</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 211: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">return</span> value != <span class="keyword">null</span> &amp;&amp; value.startsWith(OBJECT_REFERENCE_BEGIN_TOKEN);</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;212</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;213</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;214</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> String getId(String referenceToken) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;215</td> <td class="nbHitsCovered">&nbsp;38</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> referenceToken.substring(OBJECT_REFERENCE_BEGIN_TOKEN.length());</pre></td></tr>
<tr> <td class="numLine">&nbsp;216</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;217</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;218</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> Object getReferencedObject(String id) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;219</td> <td class="nbHitsUncovered"><a title="Line 219: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;38</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 219: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> Object o = objects != <span class="keyword">null</span> &amp;&amp; !objects.isEmpty() ? objects.get(id) : <span class="keyword">null</span>;</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;220</td> <td class="nbHitsCovered"><a title="Line 220: Conditional coverage 100% (2/2).">&nbsp;38</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 220: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (o == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;221</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; String msg = <span class="string">"The object with id ["</span> + id + <span class="string">"] has not yet been defined and therefore cannot be "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;222</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"referenced. Please ensure objects are defined in the order in which they should be "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;223</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"created and made available for future reference."</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;224</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> UnresolveableReferenceException(msg);</pre></td></tr>
<tr> <td class="numLine">&nbsp;225</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;226</td> <td class="nbHitsCovered">&nbsp;37</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> o;</pre></td></tr>
<tr> <td class="numLine">&nbsp;227</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;228</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;229</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> String unescapeIfNecessary(String value) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;230</td> <td class="nbHitsUncovered"><a title="Line 230: Conditional coverage 75% (3/4) [each condition: 50%, 100%].">&nbsp;46</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 230: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (value != <span class="keyword">null</span> &amp;&amp; value.startsWith(ESCAPED_OBJECT_REFERENCE_BEGIN_TOKEN)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;231</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> value.substring(ESCAPED_OBJECT_REFERENCE_BEGIN_TOKEN.length() - 1);</pre></td></tr>
<tr> <td class="numLine">&nbsp;232</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;233</td> <td class="nbHitsCovered">&nbsp;45</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> value;</pre></td></tr>
<tr> <td class="numLine">&nbsp;234</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;235</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;236</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> Object resolveReference(String reference) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;237</td> <td class="nbHitsCovered">&nbsp;38</td> <td class="src"><pre class="src">&nbsp; String id = getId(reference);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;238</td> <td class="nbHitsCovered">&nbsp;38</td> <td class="src"><pre class="src">&nbsp; log.debug(<span class="string">"Encountered object reference '{}'. Looking up object with id '{}'"</span>, reference, id);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;239</td> <td class="nbHitsCovered">&nbsp;38</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> Object referencedObject = getReferencedObject(id);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;240</td> <td class="nbHitsCovered"><a title="Line 240: Conditional coverage 100% (2/2).">&nbsp;37</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 240: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (referencedObject <span class="keyword">instanceof</span> Factory) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;241</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> ((Factory) referencedObject).getInstance();</pre></td></tr>
<tr> <td class="numLine">&nbsp;242</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;243</td> <td class="nbHitsCovered">&nbsp;36</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> referencedObject;</pre></td></tr>
<tr> <td class="numLine">&nbsp;244</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;245</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;246</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">boolean</span> isTypedProperty(Object object, String propertyName, Class clazz) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;247</td> <td class="nbHitsUncovered"><a title="Line 247: Conditional coverage 50% (1/2).">&nbsp;376</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 247: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (clazz == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;248</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"type (class) argument cannot be null."</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;249</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;250</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;251</td> <td class="nbHitsCovered">&nbsp;376</td> <td class="src"><pre class="src">&nbsp; PropertyDescriptor descriptor = PropertyUtils.getPropertyDescriptor(object, propertyName);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;252</td> <td class="nbHitsUncovered"><a title="Line 252: Conditional coverage 50% (1/2).">&nbsp;376</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 252: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (descriptor == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;253</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String msg = <span class="string">"Property '"</span> + propertyName + <span class="string">"' does not exist for object of "</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;254</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"type "</span> + object.getClass().getName() + <span class="string">"."</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;255</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(msg);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;256</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;257</td> <td class="nbHitsCovered">&nbsp;376</td> <td class="src"><pre class="src">&nbsp; Class propertyClazz = descriptor.getPropertyType();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;258</td> <td class="nbHitsCovered">&nbsp;376</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> clazz.isAssignableFrom(propertyClazz);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;259</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (ConfigurationException ce) {</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;260</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//let it propagate:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;261</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> ce;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;262</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;263</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String msg = <span class="string">"Unable to determine if property ["</span> + propertyName + <span class="string">"] represents a "</span> + clazz.getName();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;264</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(msg, e);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;265</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;266</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;267</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;268</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> Set&lt;?&gt; toSet(String sValue) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;269</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; String[] tokens = StringUtils.split(sValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;270</td> <td class="nbHitsUncovered"><a title="Line 270: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 270: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (tokens == <span class="keyword">null</span> || tokens.length &lt;= 0) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;271</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;272</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;273</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;274</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//SHIRO-423: check to see if the value is a referenced Set already, and if so, return it immediately:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;275</td> <td class="nbHitsUncovered"><a title="Line 275: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 275: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (tokens.length == 1 &amp;&amp; isReference(tokens[0])) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;276</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Object reference = resolveReference(tokens[0]);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;277</td> <td class="nbHitsUncovered"><a title="Line 277: Conditional coverage 50% (1/2).">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 277: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (reference <span class="keyword">instanceof</span> Set) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;278</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> (Set)reference;</pre></td></tr>
<tr> <td class="numLine">&nbsp;279</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;280</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;281</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;282</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Set&lt;String&gt; setTokens = <span class="keyword">new</span> LinkedHashSet&lt;String&gt;(Arrays.asList(tokens));</pre></td></tr>
<tr> <td class="numLine">&nbsp;283</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;284</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//now convert into correct values and/or references:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;285</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Set&lt;Object&gt; values = <span class="keyword">new</span> LinkedHashSet&lt;Object&gt;(setTokens.size());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;286</td> <td class="nbHitsCovered"><a title="Line 286: Conditional coverage 100% (2/2).">&nbsp;1</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 286: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String token : setTokens) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;287</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Object value = resolveValue(token);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;288</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; values.add(value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;289</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;290</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> values;</pre></td></tr>
<tr> <td class="numLine">&nbsp;291</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;292</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;293</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> Map&lt;?, ?&gt; toMap(String sValue) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;294</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; String[] tokens = StringUtils.split(sValue, StringUtils.DEFAULT_DELIMITER_CHAR,</pre></td></tr>
<tr> <td class="numLine">&nbsp;295</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; StringUtils.DEFAULT_QUOTE_CHAR, StringUtils.DEFAULT_QUOTE_CHAR, <span class="keyword">true</span>, <span class="keyword">true</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;296</td> <td class="nbHitsUncovered"><a title="Line 296: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 296: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (tokens == <span class="keyword">null</span> || tokens.length &lt;= 0) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;297</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;298</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;299</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;300</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//SHIRO-423: check to see if the value is a referenced Map already, and if so, return it immediately:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;301</td> <td class="nbHitsUncovered"><a title="Line 301: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 301: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (tokens.length == 1 &amp;&amp; isReference(tokens[0])) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;302</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Object reference = resolveReference(tokens[0]);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;303</td> <td class="nbHitsUncovered"><a title="Line 303: Conditional coverage 50% (1/2).">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 303: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (reference <span class="keyword">instanceof</span> Map) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;304</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> (Map)reference;</pre></td></tr>
<tr> <td class="numLine">&nbsp;305</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;306</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;307</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;308</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Map&lt;String, String&gt; mapTokens = <span class="keyword">new</span> LinkedHashMap&lt;String, String&gt;(tokens.length);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;309</td> <td class="nbHitsCovered"><a title="Line 309: Conditional coverage 100% (2/2).">&nbsp;3</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 309: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String token : tokens) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;310</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; String[] kvPair = StringUtils.split(token, MAP_KEY_VALUE_DELIMITER);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;311</td> <td class="nbHitsUncovered"><a title="Line 311: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 311: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (kvPair == <span class="keyword">null</span> || kvPair.length != 2) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;312</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; String msg = <span class="string">"Map property value ["</span> + sValue + <span class="string">"] contained key-value pair token ["</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;313</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; token + <span class="string">"] that does not properly split to a single key and pair. This must be the "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;314</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"case for all map entries."</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;315</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(msg);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;316</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;317</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; mapTokens.put(kvPair[0], kvPair[1]);</pre></td></tr>
<tr> <td class="numLine">&nbsp;318</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;319</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;320</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//now convert into correct values and/or references:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;321</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Map&lt;Object, Object&gt; map = <span class="keyword">new</span> LinkedHashMap&lt;Object, Object&gt;(mapTokens.size());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;322</td> <td class="nbHitsCovered"><a title="Line 322: Conditional coverage 100% (2/2).">&nbsp;1</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 322: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map.Entry&lt;String, String&gt; entry : mapTokens.entrySet()) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;323</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Object key = resolveValue(entry.getKey());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;324</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Object value = resolveValue(entry.getValue());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;325</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; map.put(key, value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;326</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;327</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> map;</pre></td></tr>
<tr> <td class="numLine">&nbsp;328</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;329</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;330</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// @since 1.2.2</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;331</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">// TODO: make protected in 1.3+</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;332</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Collection&lt;?&gt; toCollection(String sValue) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;333</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;334</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; String[] tokens = StringUtils.split(sValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;335</td> <td class="nbHitsUncovered"><a title="Line 335: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 335: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (tokens == <span class="keyword">null</span> || tokens.length &lt;= 0) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;336</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;337</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;338</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;339</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//SHIRO-423: check to see if the value is a referenced Collection already, and if so, return it immediately:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;340</td> <td class="nbHitsUncovered"><a title="Line 340: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 340: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (tokens.length == 1 &amp;&amp; isReference(tokens[0])) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;341</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Object reference = resolveReference(tokens[0]);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;342</td> <td class="nbHitsCovered"><a title="Line 342: Conditional coverage 100% (2/2).">&nbsp;2</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 342: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (reference <span class="keyword">instanceof</span> Collection) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;343</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> (Collection)reference;</pre></td></tr>
<tr> <td class="numLine">&nbsp;344</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;345</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;346</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;347</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//now convert into correct values and/or references:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;348</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; List&lt;Object&gt; values = <span class="keyword">new</span> ArrayList&lt;Object&gt;(tokens.length);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;349</td> <td class="nbHitsCovered"><a title="Line 349: Conditional coverage 100% (2/2).">&nbsp;6</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 349: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String token : tokens) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;350</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; Object value = resolveValue(token);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;351</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; values.add(value);</pre></td></tr>
<tr> <td class="numLine">&nbsp;352</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;353</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> values;</pre></td></tr>
<tr> <td class="numLine">&nbsp;354</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;355</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;356</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> List&lt;?&gt; toList(String sValue) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;357</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; String[] tokens = StringUtils.split(sValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;358</td> <td class="nbHitsUncovered"><a title="Line 358: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 358: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (tokens == <span class="keyword">null</span> || tokens.length &lt;= 0) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;359</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;360</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;361</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;362</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//SHIRO-423: check to see if the value is a referenced List already, and if so, return it immediately:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;363</td> <td class="nbHitsUncovered"><a title="Line 363: Conditional coverage 75% (3/4) [each condition: 100%, 50%].">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 363: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (tokens.length == 1 &amp;&amp; isReference(tokens[0])) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;364</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; Object reference = resolveReference(tokens[0]);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;365</td> <td class="nbHitsUncovered"><a title="Line 365: Conditional coverage 50% (1/2).">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 365: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (reference <span class="keyword">instanceof</span> List) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;366</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> (List)reference;</pre></td></tr>
<tr> <td class="numLine">&nbsp;367</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;368</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;369</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;370</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//now convert into correct values and/or references:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;371</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; List&lt;Object&gt; values = <span class="keyword">new</span> ArrayList&lt;Object&gt;(tokens.length);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;372</td> <td class="nbHitsCovered"><a title="Line 372: Conditional coverage 100% (2/2).">&nbsp;7</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 372: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String token : tokens) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;373</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; Object value = resolveValue(token);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;374</td> <td class="nbHitsCovered">&nbsp;5</td> <td class="src"><pre class="src">&nbsp; values.add(value);</pre></td></tr>
<tr> <td class="numLine">&nbsp;375</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;376</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> values;</pre></td></tr>
<tr> <td class="numLine">&nbsp;377</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;378</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;379</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">byte</span>[] toBytes(String sValue) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;380</td> <td class="nbHitsUncovered"><a title="Line 380: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 380: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (sValue == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;381</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;382</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;383</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">byte</span>[] bytes;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;384</td> <td class="nbHitsCovered"><a title="Line 384: Conditional coverage 100% (2/2).">&nbsp;2</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 384: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sValue.startsWith(HEX_BEGIN_TOKEN)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;385</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; String hex = sValue.substring(HEX_BEGIN_TOKEN.length());</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;386</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; bytes = Hex.decode(hex);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;387</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;388</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//assume base64 encoded:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;389</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; bytes = Base64.decode(sValue);</pre></td></tr>
<tr> <td class="numLine">&nbsp;390</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;391</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> bytes;</pre></td></tr>
<tr> <td class="numLine">&nbsp;392</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;393</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;394</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> Object resolveValue(String stringValue) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;395</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Object value;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;396</td> <td class="nbHitsCovered"><a title="Line 396: Conditional coverage 100% (2/2).">&nbsp;79</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 396: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isReference(stringValue)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;397</td> <td class="nbHitsCovered">&nbsp;33</td> <td class="src"><pre class="src">&nbsp; value = resolveReference(stringValue);</pre></td></tr>
<tr> <td class="numLine">&nbsp;398</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;399</td> <td class="nbHitsCovered">&nbsp;46</td> <td class="src"><pre class="src">&nbsp; value = unescapeIfNecessary(stringValue);</pre></td></tr>
<tr> <td class="numLine">&nbsp;400</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;401</td> <td class="nbHitsCovered">&nbsp;78</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> value;</pre></td></tr>
<tr> <td class="numLine">&nbsp;402</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;403</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;404</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> String checkForNullOrEmptyLiteral(String stringValue) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;405</td> <td class="nbHitsUncovered"><a title="Line 405: Conditional coverage 50% (1/2).">&nbsp;58</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 405: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (stringValue == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;406</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;407</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;408</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//check if the value is the actual literal string 'null' (expected to be wrapped in quotes):</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;409</td> <td class="nbHitsCovered"><a title="Line 409: Conditional coverage 100% (2/2).">&nbsp;58</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 409: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (stringValue.equals(<span class="string">"\"null\""</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;410</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> NULL_VALUE_TOKEN;</pre></td></tr>
<tr> <td class="numLine">&nbsp;411</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;412</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//or the actual literal string of two quotes '""' (expected to be wrapped in quotes):</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;413</td> <td class="nbHitsCovered"><a title="Line 413: Conditional coverage 100% (2/2).">&nbsp;57</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 413: Conditional coverage 100% (2/2)."> <span class="keyword">else</span> <span class="keyword">if</span> (stringValue.equals(<span class="string">"\"\"\"\""</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;414</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> EMPTY_STRING_VALUE_TOKEN;</pre></td></tr>
<tr> <td class="numLine">&nbsp;415</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;416</td> <td class="nbHitsCovered">&nbsp;56</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> stringValue;</pre></td></tr>
<tr> <td class="numLine">&nbsp;417</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;418</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;419</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;420</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> applyProperty(Object object, String propertyPath, Object value) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;421</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;422</td> <td class="nbHitsCovered">&nbsp;81</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> mapBegin = propertyPath.indexOf(MAP_PROPERTY_BEGIN_TOKEN);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;423</td> <td class="nbHitsCovered">&nbsp;81</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> mapEnd = -1;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;424</td> <td class="nbHitsCovered">&nbsp;81</td> <td class="src"><pre class="src">&nbsp; String mapPropertyPath = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;425</td> <td class="nbHitsCovered">&nbsp;81</td> <td class="src"><pre class="src">&nbsp; String keyString = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;426</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;427</td> <td class="nbHitsCovered">&nbsp;81</td> <td class="src"><pre class="src">&nbsp; String remaining = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;428</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;429</td> <td class="nbHitsCovered"><a title="Line 429: Conditional coverage 100% (2/2).">&nbsp;81</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 429: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (mapBegin &gt;= 0) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;430</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//a map is being referenced in the overall property path. Find just the map's path:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;431</td> <td class="nbHitsCovered">&nbsp;9</td> <td class="src"><pre class="src">&nbsp; mapPropertyPath = propertyPath.substring(0, mapBegin);</pre></td></tr>
<tr> <td class="numLine">&nbsp;432</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//find the end of the map reference:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;433</td> <td class="nbHitsCovered">&nbsp;9</td> <td class="src"><pre class="src">&nbsp; mapEnd = propertyPath.indexOf(MAP_PROPERTY_END_TOKEN, mapBegin);</pre></td></tr>
<tr> <td class="numLine">&nbsp;434</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//find the token in between the [ and the ] (the map/array key or index):</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;435</td> <td class="nbHitsCovered">&nbsp;9</td> <td class="src"><pre class="src">&nbsp; keyString = propertyPath.substring(mapBegin+1, mapEnd);</pre></td></tr>
<tr> <td class="numLine">&nbsp;436</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;437</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//find out if there is more path reference to follow. If not, we're at a terminal of the OGNL expression</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;438</td> <td class="nbHitsCovered"><a title="Line 438: Conditional coverage 100% (2/2).">&nbsp;9</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 438: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (propertyPath.length() &gt; (mapEnd+1)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;439</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; remaining = propertyPath.substring(mapEnd+1);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;440</td> <td class="nbHitsUncovered"><a title="Line 440: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 440: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (remaining.startsWith(<span class="string">"."</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;441</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; remaining = StringUtils.clean(remaining.substring(1));</pre></td></tr>
<tr> <td class="numLine">&nbsp;442</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;443</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;444</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;445</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLineCover">&nbsp;446</td> <td class="nbHitsCovered"><a title="Line 446: Conditional coverage 100% (2/2).">&nbsp;81</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 446: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (remaining == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;447</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//we've terminated the OGNL expression. Check to see if we're assigning a property or a map entry:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;448</td> <td class="nbHitsCovered"><a title="Line 448: Conditional coverage 100% (2/2).">&nbsp;78</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 448: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (keyString == <span class="keyword">null</span>) {</a></pre></td></tr>
<tr> <td class="numLine">&nbsp;449</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//not a map or array value assignment - assign the property directly:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;450</td> <td class="nbHitsCovered">&nbsp;72</td> <td class="src"><pre class="src">&nbsp; setProperty(object, propertyPath, value);</pre></td></tr>
<tr> <td class="numLine">&nbsp;451</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;452</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//we're assigning a map or array entry. Check to see which we should call:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;453</td> <td class="nbHitsCovered"><a title="Line 453: Conditional coverage 100% (2/2).">&nbsp;6</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 453: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isTypedProperty(object, mapPropertyPath, Map.<span class="keyword">class</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;454</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; Map map = (Map)getProperty(object, mapPropertyPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;455</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; Object mapKey = resolveValue(keyString);</pre></td></tr>
<tr> <td class="numLine">&nbsp;456</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//noinspection unchecked</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;457</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; map.put(mapKey, value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;458</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;459</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//must be an array property. Convert the key string to an index:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;460</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> index = Integer.valueOf(keyString);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;461</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; setIndexedProperty(object, mapPropertyPath, index, value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;462</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;463</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;464</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;465</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//property is being referenced as part of a nested path. Find the referenced map/array entry and</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;466</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//recursively call this method with the remaining property path</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;467</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; Object referencedValue = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;468</td> <td class="nbHitsCovered"><a title="Line 468: Conditional coverage 100% (2/2).">&nbsp;3</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 468: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isTypedProperty(object, mapPropertyPath, Map.<span class="keyword">class</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;469</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Map map = (Map)getProperty(object, mapPropertyPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;470</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; Object mapKey = resolveValue(keyString);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;471</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; referencedValue = map.get(mapKey);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;472</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">else</span> {</pre></td></tr>
<tr> <td class="numLine">&nbsp;473</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//must be an array property:</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;474</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">int</span> index = Integer.valueOf(keyString);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;475</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; referencedValue = getIndexedProperty(object, mapPropertyPath, index);</pre></td></tr>
<tr> <td class="numLine">&nbsp;476</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;477</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;478</td> <td class="nbHitsUncovered"><a title="Line 478: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 478: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (referencedValue == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;479</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(<span class="string">"Referenced map/array value '"</span> + mapPropertyPath + <span class="string">"["</span> +</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;480</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; keyString + <span class="string">"]' does not exist."</span>);</pre></td></tr>
<tr> <td class="numLine">&nbsp;481</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;482</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;483</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; applyProperty(referencedValue, remaining, value);</pre></td></tr>
<tr> <td class="numLine">&nbsp;484</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;485</td> <td class="nbHitsCovered">&nbsp;80</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;486</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;487</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> setProperty(Object object, String propertyPath, Object value) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;488</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;489</td> <td class="nbHitsUncovered"><a title="Line 489: Conditional coverage 50% (1/2).">&nbsp;72</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 489: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (log.isTraceEnabled()) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;490</td> <td class="nbHitsCovered">&nbsp;72</td> <td class="src"><pre class="src">&nbsp; log.trace(<span class="string">"Applying property [{}] value [{}] on object of type [{}]"</span>,</pre></td></tr>
<tr> <td class="numLine">&nbsp;491</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">new</span> Object[]{propertyPath, value, object.getClass().getName()});</pre></td></tr>
<tr> <td class="numLine">&nbsp;492</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;493</td> <td class="nbHitsCovered">&nbsp;72</td> <td class="src"><pre class="src">&nbsp; BeanUtils.setProperty(object, propertyPath, value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;494</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; } <span class="keyword">catch</span> (Exception e) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;495</td> <td class="nbHitsUncovered"><a title="Line 495: Conditional coverage 50% (1/2).">&nbsp;1</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 495: Conditional coverage 50% (1/2)."> String msg = <span class="string">"Unable to set property '"</span> + propertyPath + <span class="string">"' with value ["</span> + value + <span class="string">"] on object "</span> +</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;496</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"of type "</span> + (object != <span class="keyword">null</span> ? object.getClass().getName() : <span class="keyword">null</span>) + <span class="string">". If "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;497</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"'"</span> + value + <span class="string">"' is a reference to another (previously defined) object, prefix it with "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;498</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"'"</span> + OBJECT_REFERENCE_BEGIN_TOKEN + <span class="string">"' to indicate that the referenced "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;499</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"object should be used as the actual value. "</span> +</pre></td></tr>
<tr> <td class="numLine">&nbsp;500</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="string">"For example, "</span> + OBJECT_REFERENCE_BEGIN_TOKEN + value;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;501</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(msg, e);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;502</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;503</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;504</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;505</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Object getProperty(Object object, String propertyPath) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;506</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;507</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> PropertyUtils.getProperty(object, propertyPath);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;508</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;509</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(<span class="string">"Unable to access property '"</span> + propertyPath + <span class="string">"'"</span>, e);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;510</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;511</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;512</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;513</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> <span class="keyword">void</span> setIndexedProperty(Object object, String propertyPath, <span class="keyword">int</span> index, Object value) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;514</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;515</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; PropertyUtils.setIndexedProperty(object, propertyPath, index, value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;516</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;517</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(<span class="string">"Unable to set array property '"</span> + propertyPath + <span class="string">"'"</span>, e);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;518</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;519</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;520</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;521</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">private</span> Object getIndexedProperty(Object object, String propertyPath, <span class="keyword">int</span> index) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;522</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;523</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> PropertyUtils.getIndexedProperty(object, propertyPath, index);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;524</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Exception e) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;525</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> ConfigurationException(<span class="string">"Unable to acquire array property '"</span> + propertyPath + <span class="string">"'"</span>, e);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;526</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;527</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;528</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; </pre></td></tr>
<tr> <td class="numLine">&nbsp;529</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">boolean</span> isIndexedPropertyAssignment(String propertyPath) {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;530</td> <td class="nbHitsCovered">&nbsp;70</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> propertyPath.endsWith(<span class="string">""</span> + MAP_PROPERTY_END_TOKEN);</pre></td></tr>
<tr> <td class="numLine">&nbsp;531</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;532</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;533</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> applyProperty(Object object, String propertyName, String stringValue) {</pre></td></tr>
<tr> <td class="numLine">&nbsp;534</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;535</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; Object value;</pre></td></tr>
<tr> <td class="numLine">&nbsp;536</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;537</td> <td class="nbHitsCovered"><a title="Line 537: Conditional coverage 100% (2/2).">&nbsp;72</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 537: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (NULL_VALUE_TOKEN.equals(stringValue)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;538</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; value = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;539</td> <td class="nbHitsCovered"><a title="Line 539: Conditional coverage 100% (2/2).">&nbsp;71</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 539: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (EMPTY_STRING_VALUE_TOKEN.equals(stringValue)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;540</td> <td class="nbHitsCovered">&nbsp;1</td> <td class="src"><pre class="src">&nbsp; value = StringUtils.EMPTY_STRING;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;541</td> <td class="nbHitsCovered"><a title="Line 541: Conditional coverage 100% (2/2).">&nbsp;70</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 541: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isIndexedPropertyAssignment(propertyName)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;542</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; String checked = checkForNullOrEmptyLiteral(stringValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;543</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; value = resolveValue(checked);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;544</td> <td class="nbHitsCovered"><a title="Line 544: Conditional coverage 100% (2/2).">&nbsp;3</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 544: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isTypedProperty(object, propertyName, Set.<span class="keyword">class</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;545</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; value = toSet(stringValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;546</td> <td class="nbHitsCovered"><a title="Line 546: Conditional coverage 100% (2/2).">&nbsp;65</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 546: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isTypedProperty(object, propertyName, Map.<span class="keyword">class</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;547</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; value = toMap(stringValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;548</td> <td class="nbHitsCovered"><a title="Line 548: Conditional coverage 100% (2/2).">&nbsp;63</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 548: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isTypedProperty(object, propertyName, List.<span class="keyword">class</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;549</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; value = toList(stringValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;550</td> <td class="nbHitsCovered"><a title="Line 550: Conditional coverage 100% (2/2).">&nbsp;60</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 550: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isTypedProperty(object, propertyName, Collection.<span class="keyword">class</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;551</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; value = toCollection(stringValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;552</td> <td class="nbHitsCovered"><a title="Line 552: Conditional coverage 100% (2/2).">&nbsp;57</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 552: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isTypedProperty(object, propertyName, <span class="keyword">byte</span>[].<span class="keyword">class</span>)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;553</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; value = toBytes(stringValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;554</td> <td class="nbHitsUncovered"><a title="Line 554: Conditional coverage 50% (1/2).">&nbsp;55</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 554: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (isTypedProperty(object, propertyName, ByteSource.<span class="keyword">class</span>)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;555</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">byte</span>[] bytes = toBytes(stringValue);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;556</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; value = ByteSource.Util.bytes(bytes);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;557</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">else</span> {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;558</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; String checked = checkForNullOrEmptyLiteral(stringValue);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;559</td> <td class="nbHitsCovered">&nbsp;55</td> <td class="src"><pre class="src">&nbsp; value = resolveValue(checked);</pre></td></tr>
<tr> <td class="numLine">&nbsp;560</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;561</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;562</td> <td class="nbHitsCovered">&nbsp;71</td> <td class="src"><pre class="src">&nbsp; applyProperty(object, propertyName, value);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;563</td> <td class="nbHitsCovered">&nbsp;70</td> <td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;564</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;565</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;}</pre></td></tr>
</table>
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1 on 2/25/14 6:20 PM.</div>
</body>
</html>