| <!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.Ini</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.Ini.html">Ini</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">67%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:67px"><span class="text">92/136</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">63%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">37/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2203389830508473;</span>2.22</td></tr> |
| <tr><td><a href="org.apache.shiro.config.Ini.html">Ini$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></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"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2203389830508473;</span>2.22</td></tr> |
| <tr><td><a href="org.apache.shiro.config.Ini.html">Ini$Section</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">75%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:75px"><span class="text">69/92</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">67%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:67px"><span class="text">39/58</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.2203389830508473;</span>2.22</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.shiro.io.ResourceUtils;</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.shiro.util.CollectionUtils;</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.util.StringUtils;</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.slf4j.Logger;</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.slf4j.LoggerFactory;</pre></td></tr> |
| <tr> <td class="numLine"> 26</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 27</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">import</span> java.io.*;</pre></td></tr> |
| <tr> <td class="numLine"> 28</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"> 29</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 30</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 31</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * A class representing the <a href="http://en.wikipedia.org/wiki/INI_file">INI</a> text configuration format.</span></pre></td></tr> |
| <tr> <td class="numLine"> 32</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 33</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * An Ini instance is a map of {@link Ini.Section Section}s, keyed by section name. Each</span></pre></td></tr> |
| <tr> <td class="numLine"> 34</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * {@code Section} is itself a map of {@code String} name/value pairs. Name/value pairs are guaranteed to be unique</span></pre></td></tr> |
| <tr> <td class="numLine"> 35</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * within each {@code Section} only - not across the entire {@code Ini} instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 36</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 37</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @since 1.0</span></pre></td></tr> |
| <tr> <td class="numLine"> 38</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> Ini <span class="keyword">implements</span> Map<String, Ini.Section> {</pre></td></tr> |
| <tr> <td class="numLine"> 40</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 41</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">transient</span> <span class="keyword">final</span> Logger log = LoggerFactory.getLogger(Ini.<span class="keyword">class</span>);</pre></td></tr> |
| <tr> <td class="numLine"> 42</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </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">static</span> <span class="keyword">final</span> String DEFAULT_SECTION_NAME = <span class="string">""</span>; <span class="comment">//empty string means the first unnamed section</span></pre></td></tr> |
| <tr> <td class="numLine"> 44</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String DEFAULT_CHARSET_NAME = <span class="string">"UTF-8"</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 45</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 46</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String COMMENT_POUND = <span class="string">"#"</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 47</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String COMMENT_SEMICOLON = <span class="string">";"</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 48</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String SECTION_PREFIX = <span class="string">"["</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 49</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String SECTION_SUFFIX = <span class="string">"]"</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 50</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 51</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">char</span> ESCAPE_TOKEN = <span class="string">'\\'</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 52</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </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">final</span> Map<String, Section> sections;</pre></td></tr> |
| <tr> <td class="numLine"> 54</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 55</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 56</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Creates a new empty {@code Ini} instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 57</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 58</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> <span class="keyword">public</span> Ini() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 59</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.sections = <span class="keyword">new</span> LinkedHashMap<String, Section>();</pre></td></tr> |
| <tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> }</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="numLine"> 62</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 63</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Creates a new {@code Ini} instance with the specified defaults.</span></pre></td></tr> |
| <tr> <td class="numLine"> 64</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 65</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param defaults the default sections and/or key-value pairs to copy into the new instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 66</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 67</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Ini(Ini defaults) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 68</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>();</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 69</td> <td class="nbHitsUncovered"><a title="Line 69: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 69: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (defaults == <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 70</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">"Defaults cannot be null."</span>);</span></pre></td></tr> |
| <tr> <td class="numLine"> 71</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 72</td> <td class="nbHitsUncovered"><a title="Line 72: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 72: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (Section section : defaults.getSections()) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 73</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Section copy = <span class="keyword">new</span> Section(section);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 74</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.sections.put(section.getName(), copy);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 75</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 79</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns {@code true} if no sections have been configured, or if there are sections, but the sections themselves</span></pre></td></tr> |
| <tr> <td class="numLine"> 80</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * are all empty, {@code false} otherwise.</span></pre></td></tr> |
| <tr> <td class="numLine"> 81</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 82</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return {@code true} if no sections have been configured, or if there are sections, but the sections themselves</span></pre></td></tr> |
| <tr> <td class="numLine"> 83</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * are all empty, {@code false} otherwise.</span></pre></td></tr> |
| <tr> <td class="numLine"> 84</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 85</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isEmpty() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 86</td> <td class="nbHitsCovered"> 124</td> <td class="src"><pre class="src"> Collection<Section> sections = <span class="keyword">this</span>.sections.values();</pre></td></tr> |
| <tr> <td class="numLineCover"> 87</td> <td class="nbHitsCovered"><a title="Line 87: Conditional coverage 100% (2/2)."> 124</a></td> <td class="src"><pre class="src"> <a title="Line 87: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!sections.isEmpty()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 88</td> <td class="nbHitsUncovered"><a title="Line 88: Conditional coverage 50% (1/2)."> 122</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 88: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (Section section : sections) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 89</td> <td class="nbHitsUncovered"><a title="Line 89: Conditional coverage 50% (1/2)."> 122</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 89: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!section.isEmpty()) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 90</td> <td class="nbHitsCovered"> 122</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 91</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 92</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 93</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 94</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 95</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</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"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 98</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns the names of all sections managed by this {@code Ini} instance or an empty collection if there are</span></pre></td></tr> |
| <tr> <td class="numLine"> 99</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * no sections.</span></pre></td></tr> |
| <tr> <td class="numLine"> 100</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 101</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the names of all sections managed by this {@code Ini} instance or an empty collection if there are</span></pre></td></tr> |
| <tr> <td class="numLine"> 102</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * no sections.</span></pre></td></tr> |
| <tr> <td class="numLine"> 103</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 104</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Set<String> getSectionNames() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 105</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Collections.unmodifiableSet(sections.keySet());</span></pre></td></tr> |
| <tr> <td class="numLine"> 106</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 107</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 108</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 109</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns the sections managed by this {@code Ini} instance or an empty collection if there are</span></pre></td></tr> |
| <tr> <td class="numLine"> 110</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * no sections.</span></pre></td></tr> |
| <tr> <td class="numLine"> 111</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 112</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the sections managed by this {@code Ini} instance or an empty collection if there are</span></pre></td></tr> |
| <tr> <td class="numLine"> 113</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * no sections.</span></pre></td></tr> |
| <tr> <td class="numLine"> 114</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 115</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Collection<Section> getSections() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 116</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> Collections.unmodifiableCollection(sections.values());</pre></td></tr> |
| <tr> <td class="numLine"> 117</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 118</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 119</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 120</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns the {@link Section} with the given name or {@code null} if no section with that name exists.</span></pre></td></tr> |
| <tr> <td class="numLine"> 121</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 122</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param sectionName the name of the section to retrieve.</span></pre></td></tr> |
| <tr> <td class="numLine"> 123</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the {@link Section} with the given name or {@code null} if no section with that name exists.</span></pre></td></tr> |
| <tr> <td class="numLine"> 124</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 125</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Section getSection(String sectionName) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> String name = cleanName(sectionName);</pre></td></tr> |
| <tr> <td class="numLineCover"> 127</td> <td class="nbHitsCovered"> 189</td> <td class="src"><pre class="src"> <span class="keyword">return</span> sections.get(name);</pre></td></tr> |
| <tr> <td class="numLine"> 128</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 129</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 130</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 131</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Ensures a section with the specified name exists, adding a new one if it does not yet exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 132</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 133</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param sectionName the name of the section to ensure existence</span></pre></td></tr> |
| <tr> <td class="numLine"> 134</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the section created if it did not yet exist, or the existing Section that already existed.</span></pre></td></tr> |
| <tr> <td class="numLine"> 135</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 136</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Section addSection(String sectionName) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 137</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> String name = cleanName(sectionName);</pre></td></tr> |
| <tr> <td class="numLineCover"> 138</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> Section section = getSection(name);</pre></td></tr> |
| <tr> <td class="numLineCover"> 139</td> <td class="nbHitsUncovered"><a title="Line 139: Conditional coverage 50% (1/2)."> 30</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 139: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (section == <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 140</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> section = <span class="keyword">new</span> Section(name);</pre></td></tr> |
| <tr> <td class="numLineCover"> 141</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.sections.put(name, section);</pre></td></tr> |
| <tr> <td class="numLine"> 142</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> <span class="keyword">return</span> section;</pre></td></tr> |
| <tr> <td class="numLine"> 144</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 145</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 146</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 147</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Removes the section with the specified name and returns it, or {@code null} if the section did not exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 148</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 149</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param sectionName the name of the section to remove.</span></pre></td></tr> |
| <tr> <td class="numLine"> 150</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the section with the specified name or {@code null} if the section did not exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 151</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 152</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Section removeSection(String sectionName) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 153</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String name = cleanName(sectionName);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 154</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.remove(name);</span></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"> </pre></td></tr> |
| <tr> <td class="numLine"> 157</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> String cleanName(String sectionName) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 158</td> <td class="nbHitsCovered"> 283</td> <td class="src"><pre class="src"> String name = StringUtils.clean(sectionName);</pre></td></tr> |
| <tr> <td class="numLineCover"> 159</td> <td class="nbHitsCovered"><a title="Line 159: Conditional coverage 100% (2/2)."> 283</a></td> <td class="src"><pre class="src"> <a title="Line 159: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (name == <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 160</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> log.trace(<span class="string">"Specified name was null or empty. Defaulting to the default section (name = \"\")"</span>);</pre></td></tr> |
| <tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> name = DEFAULT_SECTION_NAME;</pre></td></tr> |
| <tr> <td class="numLine"> 162</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 163</td> <td class="nbHitsCovered"> 283</td> <td class="src"><pre class="src"> <span class="keyword">return</span> name;</pre></td></tr> |
| <tr> <td class="numLine"> 164</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 165</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 166</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 167</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Sets a name/value pair for the section with the given {@code sectionName}. If the section does not yet exist,</span></pre></td></tr> |
| <tr> <td class="numLine"> 168</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * it will be created. If the {@code sectionName} is null or empty, the name/value pair will be placed in the</span></pre></td></tr> |
| <tr> <td class="numLine"> 169</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * default (unnamed, empty string) section.</span></pre></td></tr> |
| <tr> <td class="numLine"> 170</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 171</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param sectionName the name of the section to add the name/value pair</span></pre></td></tr> |
| <tr> <td class="numLine"> 172</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param propertyName the name of the property to add</span></pre></td></tr> |
| <tr> <td class="numLine"> 173</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param propertyValue the property value</span></pre></td></tr> |
| <tr> <td class="numLine"> 174</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 175</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setSectionProperty(String sectionName, String propertyName, String propertyValue) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 176</td> <td class="nbHitsCovered"> 53</td> <td class="src"><pre class="src"> String name = cleanName(sectionName);</pre></td></tr> |
| <tr> <td class="numLineCover"> 177</td> <td class="nbHitsCovered"> 53</td> <td class="src"><pre class="src"> Section section = getSection(name);</pre></td></tr> |
| <tr> <td class="numLineCover"> 178</td> <td class="nbHitsCovered"><a title="Line 178: Conditional coverage 100% (2/2)."> 53</a></td> <td class="src"><pre class="src"> <a title="Line 178: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (section == <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 179</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> section = addSection(name);</pre></td></tr> |
| <tr> <td class="numLine"> 180</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 181</td> <td class="nbHitsCovered"> 53</td> <td class="src"><pre class="src"> section.put(propertyName, propertyValue);</pre></td></tr> |
| <tr> <td class="numLineCover"> 182</td> <td class="nbHitsCovered"> 53</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 183</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 184</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 185</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns the value of the specified section property, or {@code null} if the section or property do not exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 186</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 187</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param sectionName the name of the section to retrieve to acquire the property value</span></pre></td></tr> |
| <tr> <td class="numLine"> 188</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param propertyName the name of the section property for which to return the value</span></pre></td></tr> |
| <tr> <td class="numLine"> 189</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the value of the specified section property, or {@code null} if the section or property do not exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 190</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 191</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String getSectionProperty(String sectionName, String propertyName) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 192</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Section section = getSection(sectionName);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 193</td> <td class="nbHitsUncovered"><a title="Line 193: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 193: Conditional coverage 0% (0/2)."> <span class="keyword">return</span> section != <span class="keyword">null</span> ? section.get(propertyName) : <span class="keyword">null</span>;</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 194</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 195</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 196</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 197</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns the value of the specified section property, or the {@code defaultValue} if the section or</span></pre></td></tr> |
| <tr> <td class="numLine"> 198</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * property do not exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 199</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 200</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param sectionName the name of the section to add the name/value pair</span></pre></td></tr> |
| <tr> <td class="numLine"> 201</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param propertyName the name of the property to add</span></pre></td></tr> |
| <tr> <td class="numLine"> 202</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param defaultValue the default value to return if the section or property do not exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 203</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the value of the specified section property, or the {@code defaultValue} if the section or</span></pre></td></tr> |
| <tr> <td class="numLine"> 204</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * property do not exist.</span></pre></td></tr> |
| <tr> <td class="numLine"> 205</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 206</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String getSectionProperty(String sectionName, String propertyName, String defaultValue) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 207</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String value = getSectionProperty(sectionName, propertyName);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 208</td> <td class="nbHitsUncovered"><a title="Line 208: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 208: Conditional coverage 0% (0/2)."> <span class="keyword">return</span> value != <span class="keyword">null</span> ? value : defaultValue;</a></span></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"> </pre></td></tr> |
| <tr> <td class="numLine"> 211</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 212</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Creates a new {@code Ini} instance loaded with the INI-formatted data in the resource at the given path. The</span></pre></td></tr> |
| <tr> <td class="numLine"> 213</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * resource path may be any value interpretable by the</span></pre></td></tr> |
| <tr> <td class="numLine"> 214</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * {@link ResourceUtils#getInputStreamForPath(String) ResourceUtils.getInputStreamForPath} method.</span></pre></td></tr> |
| <tr> <td class="numLine"> 215</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 216</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param resourcePath the resource location of the INI data to load when creating the {@code Ini} instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 217</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return a new {@code Ini} instance loaded with the INI-formatted data in the resource at the given path.</span></pre></td></tr> |
| <tr> <td class="numLine"> 218</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @throws ConfigurationException if the path cannot be loaded into an {@code Ini} instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 219</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 220</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> Ini fromResourcePath(String resourcePath) <span class="keyword">throws</span> ConfigurationException {</pre></td></tr> |
| <tr> <td class="numLineCover"> 221</td> <td class="nbHitsUncovered"><a title="Line 221: Conditional coverage 50% (1/2)."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 221: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!StringUtils.hasLength(resourcePath)) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 222</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">"Resource Path argument cannot be null or empty."</span>);</span></pre></td></tr> |
| <tr> <td class="numLine"> 223</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 224</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Ini ini = <span class="keyword">new</span> Ini();</pre></td></tr> |
| <tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> ini.loadFromPath(resourcePath);</pre></td></tr> |
| <tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ini;</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="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 230</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Loads data from the specified resource path into this current {@code Ini} instance. The</span></pre></td></tr> |
| <tr> <td class="numLine"> 231</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * resource path may be any value interpretable by the</span></pre></td></tr> |
| <tr> <td class="numLine"> 232</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * {@link ResourceUtils#getInputStreamForPath(String) ResourceUtils.getInputStreamForPath} method.</span></pre></td></tr> |
| <tr> <td class="numLine"> 233</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 234</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param resourcePath the resource location of the INI data to load into this instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 235</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @throws ConfigurationException if the path cannot be loaded</span></pre></td></tr> |
| <tr> <td class="numLine"> 236</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 237</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> loadFromPath(String resourcePath) <span class="keyword">throws</span> ConfigurationException {</pre></td></tr> |
| <tr> <td class="numLine"> 238</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> InputStream is;</pre></td></tr> |
| <tr> <td class="numLine"> 239</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 240</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> is = ResourceUtils.getInputStreamForPath(resourcePath);</pre></td></tr> |
| <tr> <td class="numLineCover"> 241</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 242</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(e);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 243</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> load(is);</pre></td></tr> |
| <tr> <td class="numLineCover"> 245</td> <td class="nbHitsCovered"> 4</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"> </pre></td></tr> |
| <tr> <td class="numLine"> 247</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 248</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Loads the specified raw INI-formatted text into this instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 249</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 250</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param iniConfig the raw INI-formatted text to load into this instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 251</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @throws ConfigurationException if the text cannot be loaded</span></pre></td></tr> |
| <tr> <td class="numLine"> 252</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 253</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> load(String iniConfig) <span class="keyword">throws</span> ConfigurationException {</pre></td></tr> |
| <tr> <td class="numLineCover"> 254</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> load(<span class="keyword">new</span> Scanner(iniConfig));</pre></td></tr> |
| <tr> <td class="numLineCover"> 255</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</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="numLine"> 257</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 258</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Loads the INI-formatted text backed by the given InputStream into this instance. This implementation will</span></pre></td></tr> |
| <tr> <td class="numLine"> 259</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * close the input stream after it has finished loading. It is expected that the stream's contents are</span></pre></td></tr> |
| <tr> <td class="numLine"> 260</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * UTF-8 encoded.</span></pre></td></tr> |
| <tr> <td class="numLine"> 261</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 262</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param is the {@code InputStream} from which to read the INI-formatted text</span></pre></td></tr> |
| <tr> <td class="numLine"> 263</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @throws ConfigurationException if unable</span></pre></td></tr> |
| <tr> <td class="numLine"> 264</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 265</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> load(InputStream is) <span class="keyword">throws</span> ConfigurationException {</pre></td></tr> |
| <tr> <td class="numLineCover"> 266</td> <td class="nbHitsUncovered"><a title="Line 266: Conditional coverage 50% (1/2)."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 266: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (is == <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 267</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">"InputStream argument cannot be null."</span>);</span></pre></td></tr> |
| <tr> <td class="numLine"> 268</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 269</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> InputStreamReader isr;</pre></td></tr> |
| <tr> <td class="numLine"> 270</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 271</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> isr = <span class="keyword">new</span> InputStreamReader(is, DEFAULT_CHARSET_NAME);</pre></td></tr> |
| <tr> <td class="numLineCover"> 272</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnsupportedEncodingException e) {</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 273</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(e);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 274</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 275</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> load(isr);</pre></td></tr> |
| <tr> <td class="numLineCover"> 276</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 277</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 278</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 279</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Loads the INI-formatted text backed by the given Reader into this instance. This implementation will close the</span></pre></td></tr> |
| <tr> <td class="numLine"> 280</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * reader after it has finished loading.</span></pre></td></tr> |
| <tr> <td class="numLine"> 281</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 282</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param reader the {@code Reader} from which to read the INI-formatted text</span></pre></td></tr> |
| <tr> <td class="numLine"> 283</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 284</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> load(Reader reader) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> Scanner scanner = <span class="keyword">new</span> Scanner(reader);</pre></td></tr> |
| <tr> <td class="numLine"> 286</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 287</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> load(scanner);</pre></td></tr> |
| <tr> <td class="numLine"> 288</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 289</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">try</span> {</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 290</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> scanner.close();</pre></td></tr> |
| <tr> <td class="numLineCover"> 291</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"> 292</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.debug(<span class="string">"Unable to cleanly close the InputStream scanner. Non-critical - ignoring."</span>, e);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 293</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 294</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 296</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 297</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> addSection(String name, StringBuilder content) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"><a title="Line 298: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 298: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (content.length() > 0) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String contentString = content.toString();</pre></td></tr> |
| <tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> String cleaned = StringUtils.clean(contentString);</pre></td></tr> |
| <tr> <td class="numLineCover"> 301</td> <td class="nbHitsUncovered"><a title="Line 301: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 301: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (cleaned != <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> Section section = <span class="keyword">new</span> Section(name, contentString);</pre></td></tr> |
| <tr> <td class="numLineCover"> 303</td> <td class="nbHitsUncovered"><a title="Line 303: Conditional coverage 50% (1/2)."> 13</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> (!section.isEmpty()) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> sections.put(name, section);</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"> 20</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 309</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 310</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 311</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Loads the INI-formatted text backed by the given Scanner. This implementation will close the</span></pre></td></tr> |
| <tr> <td class="numLine"> 312</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * scanner after it has finished loading.</span></pre></td></tr> |
| <tr> <td class="numLine"> 313</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 314</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param scanner the {@code Scanner} from which to read the INI-formatted text</span></pre></td></tr> |
| <tr> <td class="numLine"> 315</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 316</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> load(Scanner scanner) {</pre></td></tr> |
| <tr> <td class="numLine"> 317</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 318</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> String sectionName = DEFAULT_SECTION_NAME;</pre></td></tr> |
| <tr> <td class="numLineCover"> 319</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> StringBuilder sectionContent = <span class="keyword">new</span> StringBuilder();</pre></td></tr> |
| <tr> <td class="numLine"> 320</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 321</td> <td class="nbHitsCovered"><a title="Line 321: Conditional coverage 100% (2/2)."> 146</a></td> <td class="src"><pre class="src"> <a title="Line 321: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (scanner.hasNextLine()) {</a></pre></td></tr> |
| <tr> <td class="numLine"> 322</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> String rawLine = scanner.nextLine();</pre></td></tr> |
| <tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> String line = StringUtils.clean(rawLine);</pre></td></tr> |
| <tr> <td class="numLine"> 325</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"><a title="Line 326: Conditional coverage 100% (6/6) [each condition: 100%, 100%, 100%]."> 137</a></td> <td class="src"><pre class="src"> <a title="Line 326: Conditional coverage 100% (6/6) [each condition: 100%, 100%, 100%]."> <span class="keyword">if</span> (line == <span class="keyword">null</span> || line.startsWith(COMMENT_POUND) || line.startsWith(COMMENT_SEMICOLON)) {</a></pre></td></tr> |
| <tr> <td class="numLine"> 327</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//skip empty lines and comments:</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 328</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</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"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 331</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> String newSectionName = getSectionName(line);</pre></td></tr> |
| <tr> <td class="numLineCover"> 332</td> <td class="nbHitsCovered"><a title="Line 332: Conditional coverage 100% (2/2)."> 38</a></td> <td class="src"><pre class="src"> <a title="Line 332: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (newSectionName != <span class="keyword">null</span>) {</a></pre></td></tr> |
| <tr> <td class="numLine"> 333</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//found a new section - convert the currently buffered one into a Section object</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 334</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> addSection(sectionName, sectionContent);</pre></td></tr> |
| <tr> <td class="numLine"> 335</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 336</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//reset the buffer for the new section:</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> sectionContent = <span class="keyword">new</span> StringBuilder();</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="numLineCover"> 339</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> sectionName = newSectionName;</pre></td></tr> |
| <tr> <td class="numLine"> 340</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 341</td> <td class="nbHitsUncovered"><a title="Line 341: Conditional coverage 50% (1/2)."> 11</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 341: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (log.isDebugEnabled()) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 342</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> log.debug(<span class="string">"Parsing "</span> + SECTION_PREFIX + sectionName + SECTION_SUFFIX);</pre></td></tr> |
| <tr> <td class="numLine"> 343</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 344</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLine"> 345</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//normal line - add it to the existing content buffer:</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> sectionContent.append(rawLine).append(<span class="string">"\n"</span>);</pre></td></tr> |
| <tr> <td class="numLine"> 347</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 349</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 350</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//finish any remaining buffered content:</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 351</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> addSection(sectionName, sectionContent);</pre></td></tr> |
| <tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 353</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 354</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isSectionHeader(String line) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 355</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> String s = StringUtils.clean(line);</pre></td></tr> |
| <tr> <td class="numLineCover"> 356</td> <td class="nbHitsUncovered"><a title="Line 356: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> 38</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 356: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> <span class="keyword">return</span> s != <span class="keyword">null</span> && s.startsWith(SECTION_PREFIX) && s.endsWith(SECTION_SUFFIX);</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 357</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 358</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 359</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> String getSectionName(String line) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> String s = StringUtils.clean(line);</pre></td></tr> |
| <tr> <td class="numLineCover"> 361</td> <td class="nbHitsCovered"><a title="Line 361: Conditional coverage 100% (2/2)."> 38</a></td> <td class="src"><pre class="src"> <a title="Line 361: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isSectionHeader(s)) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> <span class="keyword">return</span> cleanName(s.substring(1, s.length() - 1));</pre></td></tr> |
| <tr> <td class="numLine"> 363</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 364</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 365</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 366</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 367</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> equals(Object obj) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 368</td> <td class="nbHitsUncovered"><a title="Line 368: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 368: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (obj <span class="keyword">instanceof</span> Ini) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 369</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Ini ini = (Ini) obj;</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 370</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.equals(ini.sections);</span></pre></td></tr> |
| <tr> <td class="numLine"> 371</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 372</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 373</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 374</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 375</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 376</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> hashCode() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 377</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.hashCode();</span></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"> </pre></td></tr> |
| <tr> <td class="numLine"> 380</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String toString() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 381</td> <td class="nbHitsUncovered"><a title="Line 381: Conditional coverage 50% (1/2)."> 21</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 381: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (CollectionUtils.isEmpty(<span class="keyword">this</span>.sections)) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 382</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"<empty INI>"</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 383</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 384</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> StringBuilder sb = <span class="keyword">new</span> StringBuilder(<span class="string">"sections="</span>);</pre></td></tr> |
| <tr> <td class="numLineCover"> 385</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">int</span> i = 0;</pre></td></tr> |
| <tr> <td class="numLineCover"> 386</td> <td class="nbHitsCovered"><a title="Line 386: Conditional coverage 100% (2/2)."> 21</a></td> <td class="src"><pre class="src"> <a title="Line 386: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Ini.Section section : <span class="keyword">this</span>.sections.values()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 387</td> <td class="nbHitsCovered"><a title="Line 387: Conditional coverage 100% (2/2)."> 26</a></td> <td class="src"><pre class="src"> <a title="Line 387: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (i > 0) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 388</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> sb.append(<span class="string">","</span>);</pre></td></tr> |
| <tr> <td class="numLine"> 389</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 390</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> sb.append(section.toString());</pre></td></tr> |
| <tr> <td class="numLineCover"> 391</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> i++;</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="numLineCover"> 393</td> <td class="nbHitsCovered"> 21</td> <td class="src"><pre class="src"> <span class="keyword">return</span> sb.toString();</pre></td></tr> |
| <tr> <td class="numLine"> 394</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 395</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 396</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 397</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> size() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 398</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.size();</span></pre></td></tr> |
| <tr> <td class="numLine"> 399</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</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="numLine"> 401</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> containsKey(Object key) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 402</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.containsKey(key);</span></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"> </pre></td></tr> |
| <tr> <td class="numLine"> 405</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> containsValue(Object value) {</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">this</span>.sections.containsValue(value);</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"> </pre></td></tr> |
| <tr> <td class="numLine"> 409</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Section get(Object key) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 410</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.get(key);</span></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"> </pre></td></tr> |
| <tr> <td class="numLine"> 413</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Section put(String key, Section value) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 414</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.put(key, value);</span></pre></td></tr> |
| <tr> <td class="numLine"> 415</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 416</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 417</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Section remove(Object key) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 418</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.sections.remove(key);</span></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"> </pre></td></tr> |
| <tr> <td class="numLine"> 421</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> putAll(Map<? <span class="keyword">extends</span> String, ? <span class="keyword">extends</span> Section> m) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 422</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.sections.putAll(m);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 423</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr> |
| <tr> <td class="numLine"> 424</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 425</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> clear() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 426</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.sections.clear();</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 427</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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="numLine"> 429</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Set<String> keySet() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 430</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Collections.unmodifiableSet(<span class="keyword">this</span>.sections.keySet());</span></pre></td></tr> |
| <tr> <td class="numLine"> 431</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 432</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 433</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Collection<Section> values() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 434</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Collections.unmodifiableCollection(<span class="keyword">this</span>.sections.values());</span></pre></td></tr> |
| <tr> <td class="numLine"> 435</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</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="keyword">public</span> Set<Entry<String, Section>> entrySet() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 438</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> Collections.unmodifiableSet(<span class="keyword">this</span>.sections.entrySet());</span></pre></td></tr> |
| <tr> <td class="numLine"> 439</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 440</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 441</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 442</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * An {@code Ini.Section} is String-key-to-String-value Map, identifiable by a</span></pre></td></tr> |
| <tr> <td class="numLine"> 443</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * {@link #getName() name} unique within an {@link Ini} instance.</span></pre></td></tr> |
| <tr> <td class="numLine"> 444</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 445</td> <td class="nbHitsCovered"> 71</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> Section <span class="keyword">implements</span> Map<String, String> {</pre></td></tr> |
| <tr> <td class="numLine"> 446</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> String name;</pre></td></tr> |
| <tr> <td class="numLine"> 447</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Map<String, String> props;</pre></td></tr> |
| <tr> <td class="numLine"> 448</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Section(String name) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 450</td> <td class="nbHitsUncovered"><a title="Line 450: Conditional coverage 50% (1/2)."> 30</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 450: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (name == <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 451</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">"name"</span>);</span></pre></td></tr> |
| <tr> <td class="numLine"> 452</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.name = name;</pre></td></tr> |
| <tr> <td class="numLineCover"> 454</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.props = <span class="keyword">new</span> LinkedHashMap<String, String>();</pre></td></tr> |
| <tr> <td class="numLineCover"> 455</td> <td class="nbHitsCovered"> 30</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 456</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 457</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> <span class="keyword">private</span> Section(String name, String sectionContent) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 458</td> <td class="nbHitsUncovered"><a title="Line 458: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 458: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (name == <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 459</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">"name"</span>);</span></pre></td></tr> |
| <tr> <td class="numLine"> 460</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.name = name;</pre></td></tr> |
| <tr> <td class="numLine"> 462</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> Map<String,String> props;</pre></td></tr> |
| <tr> <td class="numLineCover"> 463</td> <td class="nbHitsUncovered"><a title="Line 463: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 463: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (StringUtils.hasText(sectionContent) ) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> props = toMapProps(sectionContent);</pre></td></tr> |
| <tr> <td class="numLine"> 465</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 466</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> props = <span class="keyword">new</span> LinkedHashMap<String,String>();</span></pre></td></tr> |
| <tr> <td class="numLine"> 467</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 468</td> <td class="nbHitsUncovered"><a title="Line 468: Conditional coverage 50% (1/2)."> 13</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 468: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> ( props != <span class="keyword">null</span> ) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 469</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.props = props;</pre></td></tr> |
| <tr> <td class="numLine"> 470</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 471</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.props = <span class="keyword">new</span> LinkedHashMap<String,String>();</span></pre></td></tr> |
| <tr> <td class="numLine"> 472</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 474</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 475</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> Section(Section defaults) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 476</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>(defaults.getName());</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 477</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> putAll(defaults.props);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 478</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr> |
| <tr> <td class="numLine"> 479</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 480</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//Protected to access in a test case - NOT considered part of Shiro's public API</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"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isContinued(String line) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 483</td> <td class="nbHitsUncovered"><a title="Line 483: Conditional coverage 50% (1/2)."> 31</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 483: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!StringUtils.hasText(line)) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 484</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 485</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 486</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">int</span> length = line.length();</pre></td></tr> |
| <tr> <td class="numLine"> 487</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//find the number of backslashes at the end of the line. If an even number, the</span></pre></td></tr> |
| <tr> <td class="numLine"> 488</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//backslashes are considered escaped. If an odd number, the line is considered continued on the next line</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 31</td> <td class="src"><pre class="src"> <span class="keyword">int</span> backslashCount = 0;</pre></td></tr> |
| <tr> <td class="numLineCover"> 490</td> <td class="nbHitsUncovered"><a title="Line 490: Conditional coverage 50% (1/2)."> 38</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 490: Conditional coverage 50% (1/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = length - 1; i > 0; i--) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"><a title="Line 491: Conditional coverage 100% (2/2)."> 38</a></td> <td class="src"><pre class="src"> <a title="Line 491: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (line.charAt(i) == ESCAPE_TOKEN) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 492</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> backslashCount++;</pre></td></tr> |
| <tr> <td class="numLine"> 493</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLine"> 494</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 495</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 496</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 497</td> <td class="nbHitsCovered"><a title="Line 497: Conditional coverage 100% (2/2)."> 31</a></td> <td class="src"><pre class="src"> <a title="Line 497: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> backslashCount % 2 != 0;</a></pre></td></tr> |
| <tr> <td class="numLine"> 498</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 499</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 500</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isKeyValueSeparatorChar(<span class="keyword">char</span> c) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 501</td> <td class="nbHitsCovered"><a title="Line 501: Conditional coverage 100% (6/6) [each condition: 100%, 100%, 100%]."> 627</a></td> <td class="src"><pre class="src"> <a title="Line 501: Conditional coverage 100% (6/6) [each condition: 100%, 100%, 100%]."> <span class="keyword">return</span> Character.isWhitespace(c) || c == <span class="string">':'</span> || c == <span class="string">'='</span>;</a></pre></td></tr> |
| <tr> <td class="numLine"> 502</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 503</td> <td class="nbHits"> </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"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isCharEscaped(CharSequence s, <span class="keyword">int</span> index) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 505</td> <td class="nbHitsUncovered"><a title="Line 505: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 97</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 505: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">return</span> index > 0 && s.charAt(index - 1) == ESCAPE_TOKEN;</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 506</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 507</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 508</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//Protected to access in a test case - NOT considered part of Shiro's public API</span></pre></td></tr> |
| <tr> <td class="numLine"> 509</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> String[] splitKeyValue(String keyValueLine) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 510</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> String line = StringUtils.clean(keyValueLine);</pre></td></tr> |
| <tr> <td class="numLineCover"> 511</td> <td class="nbHitsUncovered"><a title="Line 511: Conditional coverage 50% (1/2)."> 36</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 511: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (line == <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 512</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"> 513</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 514</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> StringBuilder keyBuffer = <span class="keyword">new</span> StringBuilder();</pre></td></tr> |
| <tr> <td class="numLineCover"> 515</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> StringBuilder valueBuffer = <span class="keyword">new</span> StringBuilder();</pre></td></tr> |
| <tr> <td class="numLine"> 516</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 517</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> buildingKey = <span class="keyword">true</span>; <span class="comment">//we'll build the value next:</span></pre></td></tr> |
| <tr> <td class="numLine"> 518</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 519</td> <td class="nbHitsCovered"><a title="Line 519: Conditional coverage 100% (2/2)."> 1040</a></td> <td class="src"><pre class="src"> <a title="Line 519: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < line.length(); i++) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 520</td> <td class="nbHitsCovered"> 1004</td> <td class="src"><pre class="src"> <span class="keyword">char</span> c = line.charAt(i);</pre></td></tr> |
| <tr> <td class="numLine"> 521</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 522</td> <td class="nbHitsCovered"><a title="Line 522: Conditional coverage 100% (2/2)."> 1004</a></td> <td class="src"><pre class="src"> <a title="Line 522: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (buildingKey) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 523</td> <td class="nbHitsUncovered"><a title="Line 523: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 530</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 523: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (isKeyValueSeparatorChar(c) && !isCharEscaped(line, i)) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 524</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> buildingKey = <span class="keyword">false</span>;<span class="comment">//now start building the value</span></pre></td></tr> |
| <tr> <td class="numLine"> 525</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 526</td> <td class="nbHitsCovered"> 495</td> <td class="src"><pre class="src"> keyBuffer.append(c);</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"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 529</td> <td class="nbHitsUncovered"><a title="Line 529: Conditional coverage 83% (5/6) [each condition: 100%, 100%, 50%]."> 474</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 529: Conditional coverage 83% (5/6) [each condition: 100%, 100%, 50%]."> <span class="keyword">if</span> (valueBuffer.length() == 0 && isKeyValueSeparatorChar(c) && !isCharEscaped(line, i)) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 530</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//swallow the separator chars before we start building the value</span></pre></td></tr> |
| <tr> <td class="numLine"> 531</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"> 412</td> <td class="src"><pre class="src"> valueBuffer.append(c);</pre></td></tr> |
| <tr> <td class="numLine"> 533</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</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"> }</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"> 36</td> <td class="src"><pre class="src"> String key = StringUtils.clean(keyBuffer.toString());</pre></td></tr> |
| <tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> String value = StringUtils.clean(valueBuffer.toString());</pre></td></tr> |
| <tr> <td class="numLine"> 539</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 540</td> <td class="nbHitsUncovered"><a title="Line 540: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> 36</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 540: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (key == <span class="keyword">null</span> || value == <span class="keyword">null</span>) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 541</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> String msg = <span class="string">"Line argument must contain a key and a value. Only one string token was found."</span>;</pre></td></tr> |
| <tr> <td class="numLineCover"> 542</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(msg);</pre></td></tr> |
| <tr> <td class="numLine"> 543</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 544</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 545</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> log.trace(<span class="string">"Discovered key/value pair: {}={}"</span>, key, value);</pre></td></tr> |
| <tr> <td class="numLine"> 546</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 547</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> String[]{key, value};</pre></td></tr> |
| <tr> <td class="numLine"> 548</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 549</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 550</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> Map<String, String> toMapProps(String content) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> Map<String, String> props = <span class="keyword">new</span> LinkedHashMap<String, String>();</pre></td></tr> |
| <tr> <td class="numLine"> 552</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> String line;</pre></td></tr> |
| <tr> <td class="numLineCover"> 553</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> StringBuilder lineBuffer = <span class="keyword">new</span> StringBuilder();</pre></td></tr> |
| <tr> <td class="numLineCover"> 554</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> Scanner scanner = <span class="keyword">new</span> Scanner(content);</pre></td></tr> |
| <tr> <td class="numLineCover"> 555</td> <td class="nbHitsCovered"><a title="Line 555: Conditional coverage 100% (2/2)."> 40</a></td> <td class="src"><pre class="src"> <a title="Line 555: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (scanner.hasNextLine()) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 556</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> line = StringUtils.clean(scanner.nextLine());</pre></td></tr> |
| <tr> <td class="numLineCover"> 557</td> <td class="nbHitsCovered"><a title="Line 557: Conditional coverage 100% (2/2)."> 27</a></td> <td class="src"><pre class="src"> <a title="Line 557: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (isContinued(line)) {</a></pre></td></tr> |
| <tr> <td class="numLine"> 558</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">//strip off the last continuation backslash:</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 559</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> line = line.substring(0, line.length() - 1);</pre></td></tr> |
| <tr> <td class="numLineCover"> 560</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> lineBuffer.append(line);</pre></td></tr> |
| <tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 562</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> lineBuffer.append(line);</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="numLineCover"> 565</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> line = lineBuffer.toString();</pre></td></tr> |
| <tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> lineBuffer = <span class="keyword">new</span> StringBuilder();</pre></td></tr> |
| <tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> String[] kvPair = splitKeyValue(line);</pre></td></tr> |
| <tr> <td class="numLineCover"> 568</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> props.put(kvPair[0], kvPair[1]);</pre></td></tr> |
| <tr> <td class="numLineCover"> 569</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 570</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 571</td> <td class="nbHitsCovered"> 13</td> <td class="src"><pre class="src"> <span class="keyword">return</span> props;</pre></td></tr> |
| <tr> <td class="numLine"> 572</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 573</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 574</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String getName() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 575</td> <td class="nbHitsCovered"> 28</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.name;</pre></td></tr> |
| <tr> <td class="numLine"> 576</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 577</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 578</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> clear() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 579</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.props.clear();</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 580</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr> |
| <tr> <td class="numLine"> 581</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 582</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> containsKey(Object key) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 583</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.props.containsKey(key);</span></pre></td></tr> |
| <tr> <td class="numLine"> 584</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 585</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 586</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> containsValue(Object value) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 587</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.props.containsValue(value);</span></pre></td></tr> |
| <tr> <td class="numLine"> 588</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 589</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 590</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Set<Entry<String, String>> entrySet() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 591</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.props.entrySet();</pre></td></tr> |
| <tr> <td class="numLine"> 592</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 593</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 594</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String get(Object key) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 595</td> <td class="nbHitsCovered"> 35</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.props.get(key);</pre></td></tr> |
| <tr> <td class="numLine"> 596</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 597</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 598</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isEmpty() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 599</td> <td class="nbHitsCovered"> 225</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.props.isEmpty();</pre></td></tr> |
| <tr> <td class="numLine"> 600</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 601</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 602</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Set<String> keySet() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 603</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.props.keySet();</pre></td></tr> |
| <tr> <td class="numLine"> 604</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 605</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 606</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String put(String key, String value) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 607</td> <td class="nbHitsCovered"> 73</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.props.put(key, value);</pre></td></tr> |
| <tr> <td class="numLine"> 608</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 609</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 610</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> putAll(Map<? <span class="keyword">extends</span> String, ? <span class="keyword">extends</span> String> m) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 611</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.props.putAll(m);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 612</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr> |
| <tr> <td class="numLine"> 613</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 614</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String remove(Object key) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 615</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.props.remove(key);</span></pre></td></tr> |
| <tr> <td class="numLine"> 616</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 617</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 618</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> size() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 619</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">this</span>.props.size();</pre></td></tr> |
| <tr> <td class="numLine"> 620</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 621</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 622</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> Collection<String> values() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 623</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.props.values();</span></pre></td></tr> |
| <tr> <td class="numLine"> 624</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 625</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 626</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> String toString() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 627</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> String name = getName();</pre></td></tr> |
| <tr> <td class="numLineCover"> 628</td> <td class="nbHitsUncovered"><a title="Line 628: Conditional coverage 50% (1/2)."> 26</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 628: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (DEFAULT_SECTION_NAME.equals(name)) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 629</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"<default>"</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 630</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 631</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> <span class="keyword">return</span> name;</pre></td></tr> |
| <tr> <td class="numLine"> 632</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 633</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 634</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 635</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> equals(Object obj) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 636</td> <td class="nbHitsUncovered"><a title="Line 636: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 636: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (obj <span class="keyword">instanceof</span> Section) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 637</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Section other = (Section) obj;</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 638</td> <td class="nbHitsUncovered"><a title="Line 638: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 638: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">return</span> getName().equals(other.getName()) && <span class="keyword">this</span>.props.equals(other.props);</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 639</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 640</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 641</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 642</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 643</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> @Override</pre></td></tr> |
| <tr> <td class="numLine"> 644</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> hashCode() {</pre></td></tr> |
| <tr> <td class="numLineCover"> 645</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">this</span>.name.hashCode() * 31 + <span class="keyword">this</span>.props.hashCode();</span></pre></td></tr> |
| <tr> <td class="numLine"> 646</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 647</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 648</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 649</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> |