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