documentation version 1.4.5

This commit is contained in:
Jeremy Long
2017-01-22 17:22:46 -05:00
parent a1b5e3f7b0
commit 615f6e3750
1583 changed files with 55974 additions and 52631 deletions

View File

@@ -12,7 +12,7 @@
<div class="separator">&nbsp;</div>
<table class="report">
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
<tr><td><a href="org.owasp.dependencycheck.data.update.EngineVersionCheck.html">EngineVersionCheck</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">43%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:43px"><span class="text">35/81</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">42%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:42px"><span class="text">12/28</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.714285714285714;</span>4.714</td></tr>
<tr><td><a href="org.owasp.dependencycheck.data.update.EngineVersionCheck.html">EngineVersionCheck</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">41%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:41px"><span class="text">35/85</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">35%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:35px"><span class="text">12/34</span></div></div></td></tr></table></td><td class="value"><span class="hidden">5.142857142857143;</span>5.143</td></tr>
</table>
<div class="separator">&nbsp;</div>
@@ -213,201 +213,215 @@
<td class="src"><pre class="src">&nbsp; <span class="keyword">public</span> <span class="keyword">void</span> update() <span class="keyword">throws</span> UpdateException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;101</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;102</td> <td class="nbHitsUncovered"><a title="Line 102: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 102: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (Settings.getBoolean(Settings.KEYS.AUTO_UPDATE)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;103</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; openDatabase();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;104</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Begin Engine Version Check"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;105</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> DatabaseProperties properties = cveDB.getDatabaseProperties();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;106</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">long</span> lastChecked = Long.parseLong(properties.getProperty(ENGINE_VERSION_CHECKED_ON, <span class="string">"0"</span>));</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;107</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">long</span> now = System.currentTimeMillis();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;108</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; updateToVersion = properties.getProperty(CURRENT_ENGINE_RELEASE, <span class="string">""</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;109</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> String currentVersion = Settings.getString(Settings.KEYS.APPLICATION_VERSION, <span class="string">"0.0.0"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;110</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Last checked: {}"</span>, lastChecked);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;111</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Now: {}"</span>, now);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;112</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Current version: {}"</span>, currentVersion);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;113</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">boolean</span> updateNeeded = shouldUpdate(lastChecked, now, properties, currentVersion);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;114</td> <td class="nbHitsUncovered"><a title="Line 114: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 114: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (updateNeeded) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;115</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.warn(<span class="string">"A new version of dependency-check is available. Consider updating to version {}."</span>,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;116</td> <td class="nbHits">&nbsp;</td>
<tr> <td class="numLineCover">&nbsp;102</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">boolean</span> autoupdate = Settings.getBoolean(Settings.KEYS.AUTO_UPDATE, <span class="keyword">true</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;103</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">boolean</span> enabled = Settings.getBoolean(Settings.KEYS.UPDATE_VERSION_CHECK_ENABLED, <span class="keyword">true</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;104</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> String original = Settings.getString(Settings.KEYS.CVE_ORIGINAL_MODIFIED_20_URL);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;105</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> String current = Settings.getString(Settings.KEYS.CVE_MODIFIED_20_URL);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;106</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;107</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Only update if auto-update is enabled, the engine check is</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;108</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * enabled, and the NVD CVE URLs have not been modified (i.e. the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;109</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * user has not configured them to point to an internal source).</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;110</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;111</td> <td class="nbHitsUncovered"><a title="Line 111: Conditional coverage 0% (0/8) [each condition: 0%, 0%, 0%, 0%].">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 111: Conditional coverage 0% (0/8) [each condition: 0%, 0%, 0%, 0%]."> <span class="keyword">if</span> (enabled &amp;&amp; autoupdate &amp;&amp; original != <span class="keyword">null</span> &amp;&amp; original.equals(current)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;112</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; openDatabase();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;113</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Begin Engine Version Check"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;114</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> DatabaseProperties properties = cveDB.getDatabaseProperties();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;115</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">long</span> lastChecked = Long.parseLong(properties.getProperty(ENGINE_VERSION_CHECKED_ON, <span class="string">"0"</span>));</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;116</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">long</span> now = System.currentTimeMillis();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;117</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; updateToVersion = properties.getProperty(CURRENT_ENGINE_RELEASE, <span class="string">""</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;118</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> String currentVersion = Settings.getString(Settings.KEYS.APPLICATION_VERSION, <span class="string">"0.0.0"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;119</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Last checked: {}"</span>, lastChecked);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;120</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Now: {}"</span>, now);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;121</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Current version: {}"</span>, currentVersion);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;122</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">final</span> <span class="keyword">boolean</span> updateNeeded = shouldUpdate(lastChecked, now, properties, currentVersion);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;123</td> <td class="nbHitsUncovered"><a title="Line 123: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 123: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (updateNeeded) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;124</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.warn(<span class="string">"A new version of dependency-check is available. Consider updating to version {}."</span>,</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;125</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; updateToVersion);</pre></td></tr>
<tr> <td class="numLine">&nbsp;117</td> <td class="nbHits">&nbsp;</td>
<tr> <td class="numLine">&nbsp;126</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;118</td> <td class="nbHits">&nbsp;</td>
<tr> <td class="numLine">&nbsp;127</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;119</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (DatabaseException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;120</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Database Exception opening databases to retrieve properties"</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;121</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> UpdateException(<span class="string">"Error occurred updating database properties."</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;122</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (InvalidSettingException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;123</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to determine if autoupdate is enabled"</span>, ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;124</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">finally</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;125</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; closeDatabase();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;126</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;127</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;128</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;129</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;130</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Determines if a new version of the dependency-check engine has been</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;131</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * released.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;132</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;128</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (DatabaseException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;129</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Database Exception opening databases to retrieve properties"</span>, ex);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;130</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">throw</span> <span class="keyword">new</span> UpdateException(<span class="string">"Error occurred updating database properties."</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;131</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (InvalidSettingException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;132</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to determine if autoupdate is enabled"</span>, ex);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;133</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param lastChecked the epoch time of the last version check</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;134</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param now the current epoch time</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;135</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param properties the database properties object</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;136</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param currentVersion the current version of dependency-check</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;137</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return &lt;code&gt;true&lt;/code&gt; if a newer version of the database has been</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;138</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * released; otherwise &lt;code&gt;false&lt;/code&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;139</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws UpdateException thrown if there is an error connecting to the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;140</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * github documentation site or accessing the local database.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;141</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;142</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">boolean</span> shouldUpdate(<span class="keyword">final</span> <span class="keyword">long</span> lastChecked, <span class="keyword">final</span> <span class="keyword">long</span> now, <span class="keyword">final</span> DatabaseProperties properties,</pre></td></tr>
<tr> <td class="numLine">&nbsp;143</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; String currentVersion) <span class="keyword">throws</span> UpdateException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;144</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//check every 30 days if we know there is an update, otherwise check every 7 days</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;145</td> <td class="nbHitsCovered">&nbsp;7</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> checkRange = 30;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;146</td> <td class="nbHitsCovered"><a title="Line 146: Conditional coverage 100% (2/2).">&nbsp;7</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 146: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!DateUtil.withinDateRange(lastChecked, now, checkRange)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;147</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Checking web for new version."</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;148</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String currentRelease = getCurrentReleaseVersion();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;149</td> <td class="nbHitsUncovered"><a title="Line 149: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 149: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (currentRelease != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;150</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> DependencyVersion v = <span class="keyword">new</span> DependencyVersion(currentRelease);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;151</td> <td class="nbHitsUncovered"><a title="Line 151: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 151: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (v.getVersionParts() != <span class="keyword">null</span> &amp;&amp; v.getVersionParts().size() &gt;= 3) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;152</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; updateToVersion = v.toString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;153</td> <td class="nbHitsUncovered"><a title="Line 153: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 153: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!currentRelease.equals(updateToVersion)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;154</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; properties.save(CURRENT_ENGINE_RELEASE, updateToVersion);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;155</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;156</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; properties.save(ENGINE_VERSION_CHECKED_ON, Long.toString(now));</pre></td></tr>
<tr> <td class="numLine">&nbsp;157</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;158</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;159</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Current Release: {}"</span>, updateToVersion);</pre></td></tr>
<tr> <td class="numLine">&nbsp;160</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;161</td> <td class="nbHitsUncovered"><a title="Line 161: Conditional coverage 50% (1/2).">&nbsp;7</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 161: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (updateToVersion == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;162</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to obtain current release"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;163</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;164</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;165</td> <td class="nbHitsCovered">&nbsp;7</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> DependencyVersion running = <span class="keyword">new</span> DependencyVersion(currentVersion);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;166</td> <td class="nbHitsCovered">&nbsp;7</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> DependencyVersion released = <span class="keyword">new</span> DependencyVersion(updateToVersion);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;167</td> <td class="nbHitsCovered"><a title="Line 167: Conditional coverage 100% (2/2).">&nbsp;7</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 167: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (running.compareTo(released) &lt; 0) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;168</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Upgrade recommended"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;169</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;170</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;171</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Upgrade not needed"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;172</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;173</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;174</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;175</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;176</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Opens the CVE and CPE data stores.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;177</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;178</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws DatabaseException thrown if a data store cannot be opened</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;179</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;180</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">final</span> <span class="keyword">void</span> openDatabase() <span class="keyword">throws</span> DatabaseException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;181</td> <td class="nbHitsUncovered"><a title="Line 181: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 181: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (cveDB != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;182</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;183</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;184</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB = <span class="keyword">new</span> CveDB();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;185</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB.open();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;186</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;187</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;188</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;189</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Closes the CVE and CPE data stores.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;190</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;191</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> closeDatabase() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;192</td> <td class="nbHitsUncovered"><a title="Line 192: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 192: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (cveDB != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;193</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;194</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB.close();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;195</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB = <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;196</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Throwable ignore) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;197</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.trace(<span class="string">"Error closing the cveDB"</span>, ignore);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;198</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;199</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;200</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;201</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;202</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;203</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Retrieves the current released version number from the github</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;204</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * documentation site.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;205</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;206</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the current released version number</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;207</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;208</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> String getCurrentReleaseVersion() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;209</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; HttpURLConnection conn = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;210</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;211</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String str = Settings.getString(Settings.KEYS.ENGINE_VERSION_CHECK_URL, <span class="string">"http://jeremylong.github.io/DependencyCheck/current.txt"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;212</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> URL url = <span class="keyword">new</span> URL(str);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;213</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; conn = URLConnectionFactory.createHttpURLConnection(url);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;214</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; conn.connect();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;215</td> <td class="nbHitsUncovered"><a title="Line 215: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 215: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (conn.getResponseCode() != 200) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;216</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;217</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;218</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String releaseVersion = IOUtils.toString(conn.getInputStream(), <span class="string">"UTF-8"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;219</td> <td class="nbHitsUncovered"><a title="Line 219: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 219: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (releaseVersion != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;220</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> releaseVersion.trim();</pre></td></tr>
<tr> <td class="numLine">&nbsp;221</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;222</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (MalformedURLException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;223</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to retrieve current release version of dependency-check - malformed url?"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;224</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (URLConnectionFailureException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;225</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to retrieve current release version of dependency-check - connection failed"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;226</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;227</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to retrieve current release version of dependency-check - i/o exception"</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;228</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">finally</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;229</td> <td class="nbHitsUncovered"><a title="Line 229: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 229: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (conn != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;230</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; conn.disconnect();</pre></td></tr>
<tr> <td class="numLine">&nbsp;231</td> <td class="nbHits">&nbsp;</td>
<tr> <td class="numLineCover">&nbsp;134</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; closeDatabase();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;135</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;136</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;137</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;138</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;139</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Determines if a new version of the dependency-check engine has been</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;140</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * released.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;141</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;142</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param lastChecked the epoch time of the last version check</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;143</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param now the current epoch time</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;144</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param properties the database properties object</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;145</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @param currentVersion the current version of dependency-check</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;146</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return &lt;code&gt;true&lt;/code&gt; if a newer version of the database has been</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;147</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * released; otherwise &lt;code&gt;false&lt;/code&gt;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;148</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws UpdateException thrown if there is an error connecting to the</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;149</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * github documentation site or accessing the local database.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;150</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;151</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">boolean</span> shouldUpdate(<span class="keyword">final</span> <span class="keyword">long</span> lastChecked, <span class="keyword">final</span> <span class="keyword">long</span> now, <span class="keyword">final</span> DatabaseProperties properties,</pre></td></tr>
<tr> <td class="numLine">&nbsp;152</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; String currentVersion) <span class="keyword">throws</span> UpdateException {</pre></td></tr>
<tr> <td class="numLine">&nbsp;153</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">//check every 30 days if we know there is an update, otherwise check every 7 days</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;154</td> <td class="nbHitsCovered">&nbsp;7</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> <span class="keyword">int</span> checkRange = 30;</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;155</td> <td class="nbHitsCovered"><a title="Line 155: Conditional coverage 100% (2/2).">&nbsp;7</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 155: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!DateUtil.withinDateRange(lastChecked, now, checkRange)) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;156</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Checking web for new version."</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;157</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String currentRelease = getCurrentReleaseVersion();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;158</td> <td class="nbHitsUncovered"><a title="Line 158: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 158: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (currentRelease != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;159</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> DependencyVersion v = <span class="keyword">new</span> DependencyVersion(currentRelease);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;160</td> <td class="nbHitsUncovered"><a title="Line 160: Conditional coverage 50% (2/4) [each condition: 50%, 50%].">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 160: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (v.getVersionParts() != <span class="keyword">null</span> &amp;&amp; v.getVersionParts().size() &gt;= 3) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;161</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; updateToVersion = v.toString();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;162</td> <td class="nbHitsUncovered"><a title="Line 162: Conditional coverage 50% (1/2).">&nbsp;2</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 162: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!currentRelease.equals(updateToVersion)) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;163</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; properties.save(CURRENT_ENGINE_RELEASE, updateToVersion);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;164</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;165</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; properties.save(ENGINE_VERSION_CHECKED_ON, Long.toString(now));</pre></td></tr>
<tr> <td class="numLine">&nbsp;166</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;167</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;232</td> <td class="nbHits">&nbsp;</td>
<tr> <td class="numLineCover">&nbsp;168</td> <td class="nbHitsCovered">&nbsp;2</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Current Release: {}"</span>, updateToVersion);</pre></td></tr>
<tr> <td class="numLine">&nbsp;169</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;233</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;234</td> <td class="nbHits">&nbsp;</td>
<tr> <td class="numLineCover">&nbsp;170</td> <td class="nbHitsUncovered"><a title="Line 170: Conditional coverage 50% (1/2).">&nbsp;7</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 170: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (updateToVersion == <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;171</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to obtain current release"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;172</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;173</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;174</td> <td class="nbHitsCovered">&nbsp;7</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> DependencyVersion running = <span class="keyword">new</span> DependencyVersion(currentVersion);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;175</td> <td class="nbHitsCovered">&nbsp;7</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> DependencyVersion released = <span class="keyword">new</span> DependencyVersion(updateToVersion);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;176</td> <td class="nbHitsCovered"><a title="Line 176: Conditional coverage 100% (2/2).">&nbsp;7</a></td> <td class="src"><pre class="src">&nbsp;<a title="Line 176: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (running.compareTo(released) &lt; 0) {</a></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;177</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Upgrade recommended"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;178</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;179</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;180</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; LOGGER.debug(<span class="string">"Upgrade not needed"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;181</td> <td class="nbHitsCovered">&nbsp;4</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;182</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;235</td> <td class="nbHits">&nbsp;</td>
<tr> <td class="numLine">&nbsp;183</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;184</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;185</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Opens the CVE and CPE data stores.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;186</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;187</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @throws DatabaseException thrown if a data store cannot be opened</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;188</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;189</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">final</span> <span class="keyword">void</span> openDatabase() <span class="keyword">throws</span> DatabaseException {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;190</td> <td class="nbHitsUncovered"><a title="Line 190: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 190: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (cveDB != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;191</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;192</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;193</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB = <span class="keyword">new</span> CveDB();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;194</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB.open();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;195</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;196</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;197</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;198</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Closes the CVE and CPE data stores.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;199</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;200</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> <span class="keyword">void</span> closeDatabase() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;201</td> <td class="nbHitsUncovered"><a title="Line 201: Conditional coverage 0% (0/2).">&nbsp;0</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 201: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (cveDB != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLine">&nbsp;202</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;203</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB.close();</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;204</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; cveDB = <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;205</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (Throwable ignore) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;206</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.trace(<span class="string">"Error closing the cveDB"</span>, ignore);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;207</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;208</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;209</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; }</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;210</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;</pre></td></tr>
<tr> <td class="numLine">&nbsp;211</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="comment">/**</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;212</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * Retrieves the current released version number from the github</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;213</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * documentation site.</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;214</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> *</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;215</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> * @return the current released version number</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;216</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;<span class="comment"> */</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;217</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">protected</span> String getCurrentReleaseVersion() {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;218</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; HttpURLConnection conn = <span class="keyword">null</span>;</pre></td></tr>
<tr> <td class="numLine">&nbsp;219</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;220</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String str = Settings.getString(Settings.KEYS.ENGINE_VERSION_CHECK_URL, <span class="string">"http://jeremylong.github.io/DependencyCheck/current.txt"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;221</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> URL url = <span class="keyword">new</span> URL(str);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;222</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; conn = URLConnectionFactory.createHttpURLConnection(url);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;223</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; conn.connect();</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;224</td> <td class="nbHitsUncovered"><a title="Line 224: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 224: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (conn.getResponseCode() != 200) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;225</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;226</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;227</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">final</span> String releaseVersion = IOUtils.toString(conn.getInputStream(), <span class="string">"UTF-8"</span>);</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;228</td> <td class="nbHitsUncovered"><a title="Line 228: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 228: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (releaseVersion != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;229</td> <td class="nbHitsCovered">&nbsp;6</td> <td class="src"><pre class="src">&nbsp; <span class="keyword">return</span> releaseVersion.trim();</pre></td></tr>
<tr> <td class="numLine">&nbsp;230</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;231</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (MalformedURLException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;232</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to retrieve current release version of dependency-check - malformed url?"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;233</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (URLConnectionFailureException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;234</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to retrieve current release version of dependency-check - connection failed"</span>);</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;235</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;236</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; LOGGER.debug(<span class="string">"Unable to retrieve current release version of dependency-check - i/o exception"</span>);</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;237</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; } <span class="keyword">finally</span> {</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;238</td> <td class="nbHitsUncovered"><a title="Line 238: Conditional coverage 50% (1/2).">&nbsp;3</a></td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp;<a title="Line 238: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (conn != <span class="keyword">null</span>) {</a></span></pre></td></tr>
<tr> <td class="numLineCover">&nbsp;239</td> <td class="nbHitsCovered">&nbsp;3</td> <td class="src"><pre class="src">&nbsp; conn.disconnect();</pre></td></tr>
<tr> <td class="numLine">&nbsp;240</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;241</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLineCover">&nbsp;242</td> <td class="nbHitsUncovered">&nbsp;0</td> <td class="src"><pre class="src"><span class="srcUncovered">&nbsp; <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
<tr> <td class="numLine">&nbsp;243</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp; }</pre></td></tr>
<tr> <td class="numLine">&nbsp;244</td> <td class="nbHits">&nbsp;</td>
<td class="src"><pre class="src">&nbsp;}</pre></td></tr>
</table>
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 2.1.1 on 11/5/16 7:41 AM.</div>
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 2.1.1 on 1/22/17 4:19 PM.</div>
</body>
</html>