Regeneration from plexi c4c1721
diff --git a/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html b/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
index 7e89301..3acf5d3 100644
--- a/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
+++ b/coverage/com.google.enterprise.adaptor.GsaCommunicationHandler.html
@@ -12,14 +12,14 @@
<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="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">28</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">163/191</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">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">38/50</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</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">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</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">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</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">3.5;</span>3.5</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">30</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">163/193</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">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">38/50</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</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">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</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">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</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">3.5714285714285716;</span>3.571</td></tr>
</table>
<div class="separator"> </div>
@@ -400,600 +400,602 @@
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover"> 225</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> adaptor.init(<span class="keyword">new</span> AdaptorContextImpl());</pre></td></tr>
<tr> <td class="numLineCover"> 226</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 227</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 228</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to initialize adaptor"</span>, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 229</td> <td class="nbHitsCovered"><a title="Line 229: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 229: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (shuttingDownLatch.await(sleepDurationMillis,</a></pre></td></tr>
-<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 227</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 228</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> ex;</span></pre></td></tr>
+<tr> <td class="numLineCover"> 229</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 230</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.WARNING, <span class="string">"Failed to initialize adaptor"</span>, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 231</td> <td class="nbHitsCovered"><a title="Line 231: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 231: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (shuttingDownLatch.await(sleepDurationMillis,</a></pre></td></tr>
+<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> TimeUnit.MILLISECONDS)) {</pre></td></tr>
-<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Shutdown initiated.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 232</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 234</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> sleepDurationMillis</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="comment">// Shutdown initiated.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 234</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = Math.min(sleepDurationMillis * 2, maxSleepDurationMillis);</pre></td></tr>
-<tr> <td class="numLineCover"> 236</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ensureLatestConfigLoaded();</pre></td></tr>
-<tr> <td class="numLineCover"> 237</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Since we are white-listing particular keys for auto-update, things aren't</span></pre></td></tr>
-<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// ready enough to expose to adaptors.</span></pre></td></tr>
-<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/*if (adaptor instanceof ConfigModificationListener) {</span></pre></td></tr>
-<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> config.addConfigModificationListener(</span></pre></td></tr>
-<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> (ConfigModificationListener) adaptor);</span></pre></td></tr>
-<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> }*/</span></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="numLineCover"> 247</td> <td class="nbHitsCovered"><a title="Line 247: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 247: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (adaptor <span class="keyword">instanceof</span> PollingIncrementalAdaptor) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 248</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> incrementalAdaptorPoller = <span class="keyword">new</span> IncrementalAdaptorPoller(</pre></td></tr>
-<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> (PollingIncrementalAdaptor) adaptor, docIdSender);</pre></td></tr>
-<tr> <td class="numLineCover"> 250</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> incrementalAdaptorPoller.start(</pre></td></tr>
-<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getAdaptorIncrementalPollPeriodMillis());</pre></td></tr>
-<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 254</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> scheduler.start();</pre></td></tr>
-<tr> <td class="numLineCover"> 255</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> sendDocIdsSchedId = scheduler.schedule(</pre></td></tr>
-<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> config.getAdaptorFullListingSchedule(), docIdFullPusher);</pre></td></tr>
-<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 258</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> shuttingDownLatch = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 259</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> TransformPipeline createTransformPipeline() {</pre></td></tr>
-<tr> <td class="numLineCover"> 262</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> createTransformPipeline(config.getTransformPipelineSpec());</pre></td></tr>
-<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> TransformPipeline createTransformPipeline(</pre></td></tr>
-<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> List<Map<String, String>> pipelineConfig) {</pre></td></tr>
-<tr> <td class="numLineCover"> 267</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> List<DocumentTransform> elements = <span class="keyword">new</span> LinkedList<DocumentTransform>();</pre></td></tr>
-<tr> <td class="numLineCover"> 268</td> <td class="nbHitsCovered"><a title="Line 268: Conditional coverage 100% (2/2)."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 268: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map<String, String> element : pipelineConfig) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 269</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String name = element.get(<span class="string">"name"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 270</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String confPrefix = <span class="string">"transform.pipeline."</span> + name + <span class="string">"."</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 271</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> String factoryMethodName = element.get(<span class="string">"factoryMethod"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 272</td> <td class="nbHitsCovered"><a title="Line 272: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 272: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (factoryMethodName == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 273</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
-<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Missing "</span> + confPrefix + <span class="string">"factoryMethod configuration setting"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 276</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">int</span> sepIndex = factoryMethodName.lastIndexOf(<span class="string">"."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 277</td> <td class="nbHitsCovered"><a title="Line 277: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 277: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sepIndex == -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 278</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not separate method name from class "</span></pre></td></tr>
-<tr> <td class="numLine"> 279</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"name"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 280</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 281</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String className = factoryMethodName.substring(0, sepIndex);</pre></td></tr>
-<tr> <td class="numLineCover"> 282</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String methodName = factoryMethodName.substring(sepIndex + 1);</pre></td></tr>
-<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Split {0} into class {1} and method {2}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {factoryMethodName, className, methodName});</pre></td></tr>
-<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Class<?> klass;</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"> 5</td> <td class="src"><pre class="src"> klass = Class.forName(className);</pre></td></tr>
-<tr> <td class="numLineCover"> 288</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (ClassNotFoundException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
-<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"Could not load class for transform "</span> + name, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 291</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Method method;</pre></td></tr>
-<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 294</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> method = klass.getDeclaredMethod(methodName, Map.<span class="keyword">class</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NoSuchMethodException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not find method "</span> + methodName</pre></td></tr>
-<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">" on class "</span> + className, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 299</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Found method {0}"</span>, <span class="keyword">new</span> Object[] {method});</pre></td></tr>
-<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> Object o;</pre></td></tr>
-<tr> <td class="numLine"> 301</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 302</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> o = method.invoke(<span class="keyword">null</span>, Collections.unmodifiableMap(element));</pre></td></tr>
-<tr> <td class="numLineCover"> 303</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Failure while running factory method "</span></pre></td></tr>
-<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + factoryMethodName, ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 306</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"><a title="Line 307: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 307: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> DocumentTransform)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> ClassCastException(o.getClass().getName()</pre></td></tr>
-<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">" is not an instance of DocumentTransform"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> DocumentTransform transform = (DocumentTransform) o;</pre></td></tr>
-<tr> <td class="numLineCover"> 312</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> elements.add(transform);</pre></td></tr>
-<tr> <td class="numLineCover"> 313</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// If we created an empty pipeline, then we don't need the pipeline at all.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"><a title="Line 315: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 315: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> elements.size() > 0 ? <span class="keyword">new</span> TransformPipeline(elements) : <span class="keyword">null</span>;</a></pre></td></tr>
-<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Retrieve our default KeyPair from the default keystore. The key should have</span></pre></td></tr>
-<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * the same password as the keystore.</span></pre></td></tr>
-<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> KeyPair getKeyPair(String alias) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 323</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystoreKey = <span class="string">"javax.net.ssl.keyStore"</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 324</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystorePasswordKey = <span class="string">"javax.net.ssl.keyStorePassword"</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 325</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String keystore = System.getProperty(keystoreKey);</pre></td></tr>
-<tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String keystoreType = System.getProperty(<span class="string">"javax.net.ssl.keyStoreType"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 327</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> KeyStore.getDefaultType());</pre></td></tr>
-<tr> <td class="numLineCover"> 328</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String keystorePassword = System.getProperty(keystorePasswordKey);</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="numLineCover"> 330</td> <td class="nbHitsUncovered"><a title="Line 330: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 330: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystore == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 331</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">"You must set "</span> + keystoreKey);</span></pre></td></tr>
-<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 333</td> <td class="nbHitsUncovered"><a title="Line 333: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 333: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystorePassword == <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 334</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">"You must set "</span> + keystorePasswordKey);</span></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"> </pre></td></tr>
-<tr> <td class="numLineCover"> 337</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> getKeyPair(alias, keystore, keystoreType, keystorePassword);</pre></td></tr>
-<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 339</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> KeyPair getKeyPair(String alias, String keystoreFile,</pre></td></tr>
-<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> String keystoreType, String keystorePasswordStr) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PrivateKey privateKey;</pre></td></tr>
-<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> PublicKey publicKey;</pre></td></tr>
-<tr> <td class="numLine"> 344</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> KeyStore ks = KeyStore.getInstance(keystoreType);</pre></td></tr>
-<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> InputStream ksis = <span class="keyword">new</span> FileInputStream(keystoreFile);</pre></td></tr>
-<tr> <td class="numLineCover"> 347</td> <td class="nbHitsUncovered"><a title="Line 347: Conditional coverage 50% (1/2)."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 347: Conditional coverage 50% (1/2)."> <span class="keyword">char</span>[] keystorePassword = keystorePasswordStr == <span class="keyword">null</span> ? <span class="keyword">null</span></a></span></pre></td></tr>
-<tr> <td class="numLine"> 348</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> : keystorePasswordStr.toCharArray();</pre></td></tr>
-<tr> <td class="numLine"> 349</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> ks.load(ksis, keystorePassword);</pre></td></tr>
-<tr> <td class="numLineCover"> 351</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 352</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> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 353</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CertificateException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 354</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> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 356</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> ksis.close();</pre></td></tr>
-<tr> <td class="numLineCover"> 357</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 358</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> Key key = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 359</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> key = ks.getKey(alias, keystorePassword);</pre></td></tr>
-<tr> <td class="numLineCover"> 361</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 362</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> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 363</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnrecoverableKeyException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 364</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> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 365</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 366</td> <td class="nbHitsCovered"><a title="Line 366: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 366: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (key == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 367</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Could not find key for alias '"</span></pre></td></tr>
-<tr> <td class="numLine"> 368</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + alias + <span class="string">"'"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 370</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> privateKey = (PrivateKey) key;</pre></td></tr>
-<tr> <td class="numLineCover"> 371</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> publicKey = ks.getCertificate(alias).getPublicKey();</pre></td></tr>
-<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (KeyStoreException ex) {</pre></td></tr>
-<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 374</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> KeyPair(publicKey, privateKey);</pre></td></tr>
-<tr> <td class="numLine"> 376</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Useful as a separate method during testing.</span></pre></td></tr>
-<tr> <td class="numLine"> 379</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">void</span> bootstrapOpenSaml() {</pre></td></tr>
-<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> DefaultBootstrap.bootstrap();</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">catch</span> (ConfigurationException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 383</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> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 384</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 385</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 388</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Stop the current services, allowing up to {@code maxDelay} seconds for</span></pre></td></tr>
-<tr> <td class="numLine"> 389</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * things to shutdown.</span></pre></td></tr>
-<tr> <td class="numLine"> 390</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 391</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> stop(<span class="keyword">int</span> maxDelay) {</pre></td></tr>
-<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Prevent new start()s.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 393</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownCount.incrementAndGet();</pre></td></tr>
-<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 395</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> CountDownLatch latch = shuttingDownLatch;</pre></td></tr>
-<tr> <td class="numLineCover"> 396</td> <td class="nbHitsCovered"><a title="Line 396: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 396: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (latch != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Cause existing start() to begin cancelling.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 398</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> latch.countDown();</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="numLineCover"> 400</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> realStop(maxDelay);</pre></td></tr>
-<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Permit new start()s.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 403</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownCount.decrementAndGet();</pre></td></tr>
-<tr> <td class="numLineCover"> 404</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 405</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 406</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> realStop(<span class="keyword">int</span> maxDelay) {</pre></td></tr>
-<tr> <td class="numLineCover"> 408</td> <td class="nbHitsCovered"><a title="Line 408: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 408: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (shutdownHook != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 410</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Runtime.getRuntime().removeShutdownHook(shutdownHook);</pre></td></tr>
-<tr> <td class="numLineCover"> 411</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalStateException ex) {</span></pre></td></tr>
-<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Already executing hook.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> shutdownHook = <span class="keyword">null</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="numLineCover"> 416</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> scheduler.deschedule(sendDocIdsSchedId);</pre></td></tr>
-<tr> <td class="numLineCover"> 417</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> sendDocIdsSchedId = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Stop sendDocIds before scheduler, because scheduler blocks until all</span></pre></td></tr>
-<tr> <td class="numLine"> 419</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// tasks are completed. We want to interrupt sendDocIds so that the</span></pre></td></tr>
-<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// scheduler stops within a reasonable amount of time.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 421</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> docIdFullPusher.stop();</pre></td></tr>
-<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"><a title="Line 422: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 422: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (scheduler.isStarted()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> scheduler.stop();</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="numLineCover"> 425</td> <td class="nbHitsCovered"><a title="Line 425: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 425: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (incrementalAdaptorPoller != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> incrementalAdaptorPoller.cancel();</pre></td></tr>
-<tr> <td class="numLine"> 427</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 428</td> <td class="nbHitsCovered"><a title="Line 428: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 428: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (server != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 429</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> server.stop(maxDelay);</pre></td></tr>
-<tr> <td class="numLineCover"> 430</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> server = <span class="keyword">null</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="numLineCover"> 432</td> <td class="nbHitsCovered"><a title="Line 432: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 432: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (dashboard != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 433</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> dashboard.stop();</pre></td></tr>
-<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> dashboard = <span class="keyword">null</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="numLineCover"> 436</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> adaptor.destroy();</pre></td></tr>
-<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Ensure there is a push running right now. This schedules a new push if one</span></pre></td></tr>
-<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * is not already running. Returns {@code true} if it starts a new push, and</span></pre></td></tr>
-<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * {@code false} otherwise.</span></pre></td></tr>
-<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> checkAndScheduleImmediatePushOfDocIds() {</pre></td></tr>
-<tr> <td class="numLineCover"> 445</td> <td class="nbHitsUncovered"><a title="Line 445: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 445: Conditional coverage 0% (0/2)."> <span class="keyword">return</span> docIdFullPusher.runInNewThread() != <span class="keyword">null</span>;</a></span></pre></td></tr>
-<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 447</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">boolean</span> ensureLatestConfigLoaded() {</pre></td></tr>
-<tr> <td class="numLine"> 449</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config.ensureLatestConfigLoaded();</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">catch</span> (Exception ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 452</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Error while trying to reload configuration"</span>,</span></pre></td></tr>
-<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> ex);</pre></td></tr>
-<tr> <td class="numLineCover"> 454</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"> 455</td> <td class="nbHits"> </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="numLine"> 457</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Runnable that calls {@link DocIdSender#pushDocIds}.</span></pre></td></tr>
-<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> PushRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">volatile</span> GetDocIdsErrorHandler handler</pre></td></tr>
-<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> DefaultGetDocIdsErrorHandler();</pre></td></tr>
-<tr> <td class="numLine"> 464</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLine"> 467</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 468</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> docIdSender.pushDocIdsFromAdaptor(handler);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 469</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InterruptedException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 470</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</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></pre></td></tr>
-<tr> <td class="numLineCover"> 472</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 473</td> <td class="nbHits"> </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"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 475</td> <td class="nbHitsUncovered"><a title="Line 475: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 475: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></span></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">throw</span> <span class="keyword">new</span> NullPointerException();</span></pre></td></tr>
-<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 478</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.handler = handler;</pre></td></tr>
-<tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"> 1</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"> </pre></td></tr>
-<tr> <td class="numLine"> 481</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 482</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> handler;</pre></td></tr>
-<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Runnable that logs an error that {@link PushRunnable} is already executing.</span></pre></td></tr>
-<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AlreadyRunningRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 490</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 491</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLineCover"> 492</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Skipping scheduled push of docIds. The previous invocation "</span></span></pre></td></tr>
-<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"is still running."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 494</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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"> 12</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ShutdownHook <span class="keyword">implements</span> Runnable {</pre></td></tr>
-<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 499</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
-<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Allow three seconds for things to stop.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 501</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 502</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></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"> </pre></td></tr>
-<tr> <td class="numLineCover"> 505</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> GsaConfigModListener <span class="keyword">implements</span> ConfigModificationListener {</pre></td></tr>
-<tr> <td class="numLine"> 506</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> configModified(ConfigModificationEvent ev) {</pre></td></tr>
-<tr> <td class="numLineCover"> 508</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeys = ev.getModifiedKeys();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 509</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (GsaCommunicationHandler.<span class="keyword">this</span>) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 510</td> <td class="nbHitsUncovered"><a title="Line 510: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 510: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (modifiedKeys.contains(<span class="string">"adaptor.fullListingSchedule"</span>)</a></span></pre></td></tr>
-<tr> <td class="numLine"> 511</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> && sendDocIdsSchedId != <span class="keyword">null</span>) {</pre></td></tr>
-<tr> <td class="numLineCover"> 512</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String schedule = ev.getNewConfig().getAdaptorFullListingSchedule();</span></pre></td></tr>
-<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 514</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> scheduler.reschedule(sendDocIdsSchedId, schedule);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 515</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InvalidPatternException ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 516</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Invalid schedule pattern"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 517</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></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="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 236</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> sleepDurationMillis</pre></td></tr>
+<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = Math.min(sleepDurationMillis * 2, maxSleepDurationMillis);</pre></td></tr>
+<tr> <td class="numLineCover"> 238</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ensureLatestConfigLoaded();</pre></td></tr>
+<tr> <td class="numLineCover"> 239</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// List of "safe" keys that can be updated without a restart.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 522</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<String> safeKeys = Arrays.asList(<span class="string">"adaptor.fullListingSchedule"</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Set of "unsafe" keys that have been modified.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 524</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeysRequiringRestart</span></pre></td></tr>
-<tr> <td class="numLine"> 525</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> = <span class="keyword">new</span> HashSet<String>(modifiedKeys);</pre></td></tr>
-<tr> <td class="numLineCover"> 526</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> modifiedKeysRequiringRestart.removeAll(safeKeys);</span></pre></td></tr>
-<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// If there are modified "unsafe" keys, then we restart things to make</span></pre></td></tr>
-<tr> <td class="numLine"> 528</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// sure all the code is up-to-date with the new values.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 529</td> <td class="nbHitsUncovered"><a title="Line 529: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 529: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!modifiedKeysRequiringRestart.isEmpty()) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 530</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Unsafe configuration keys modified. To ensure a sane "</span></span></pre></td></tr>
-<tr> <td class="numLine"> 531</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"state, the adaptor is restarting."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 532</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
-<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 534</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> start();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 535</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 536</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.SEVERE, <span class="string">"Automatic restart failed"</span>, ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 537</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> RuntimeException(ex);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 538</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 539</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Since we are white-listing particular keys for auto-update, things aren't</span></pre></td></tr>
+<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// ready enough to expose to adaptors.</span></pre></td></tr>
+<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/*if (adaptor instanceof ConfigModificationListener) {</span></pre></td></tr>
+<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> config.addConfigModificationListener(</span></pre></td></tr>
+<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> (ConfigModificationListener) adaptor);</span></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"> </pre></td></tr>
+<tr> <td class="numLineCover"> 249</td> <td class="nbHitsCovered"><a title="Line 249: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 249: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (adaptor <span class="keyword">instanceof</span> PollingIncrementalAdaptor) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 250</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> incrementalAdaptorPoller = <span class="keyword">new</span> IncrementalAdaptorPoller(</pre></td></tr>
+<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (PollingIncrementalAdaptor) adaptor, docIdSender);</pre></td></tr>
+<tr> <td class="numLineCover"> 252</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> incrementalAdaptorPoller.start(</pre></td></tr>
+<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getAdaptorIncrementalPollPeriodMillis());</pre></td></tr>
+<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 256</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> scheduler.start();</pre></td></tr>
+<tr> <td class="numLineCover"> 257</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> sendDocIdsSchedId = scheduler.schedule(</pre></td></tr>
+<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> config.getAdaptorFullListingSchedule(), docIdFullPusher);</pre></td></tr>
+<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 260</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> shuttingDownLatch = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 261</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> TransformPipeline createTransformPipeline() {</pre></td></tr>
+<tr> <td class="numLineCover"> 264</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> createTransformPipeline(config.getTransformPipelineSpec());</pre></td></tr>
+<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> TransformPipeline createTransformPipeline(</pre></td></tr>
+<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> List<Map<String, String>> pipelineConfig) {</pre></td></tr>
+<tr> <td class="numLineCover"> 269</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> List<DocumentTransform> elements = <span class="keyword">new</span> LinkedList<DocumentTransform>();</pre></td></tr>
+<tr> <td class="numLineCover"> 270</td> <td class="nbHitsCovered"><a title="Line 270: Conditional coverage 100% (2/2)."> 14</a></td> <td class="src"><pre class="src"> <a title="Line 270: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Map<String, String> element : pipelineConfig) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 271</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String name = element.get(<span class="string">"name"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 272</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String confPrefix = <span class="string">"transform.pipeline."</span> + name + <span class="string">"."</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 273</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> String factoryMethodName = element.get(<span class="string">"factoryMethod"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 274</td> <td class="nbHitsCovered"><a title="Line 274: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 274: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (factoryMethodName == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 275</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
+<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Missing "</span> + confPrefix + <span class="string">"factoryMethod configuration setting"</span>);</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="numLineCover"> 540</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
-<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * This class is thread-safe.</span></pre></td></tr>
-<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLineCover"> 546</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AdaptorContextImpl <span class="keyword">implements</span> AdaptorContext {</pre></td></tr>
-<tr> <td class="numLine"> 547</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 548</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> Config getConfig() {</pre></td></tr>
-<tr> <td class="numLineCover"> 549</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config;</pre></td></tr>
-<tr> <td class="numLine"> 550</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 551</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher getDocIdPusher() {</pre></td></tr>
-<tr> <td class="numLineCover"> 554</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdSender;</pre></td></tr>
-<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 559</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdCodec;</pre></td></tr>
-<tr> <td class="numLine"> 560</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 561</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 562</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 563</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addStatusSource(StatusSource source) {</pre></td></tr>
-<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.addStatusSource(source);</pre></td></tr>
-<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 566</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 567</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 568</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> removeStatusSource(StatusSource source) {</pre></td></tr>
-<tr> <td class="numLineCover"> 569</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.removeStatusSource(source);</pre></td></tr>
-<tr> <td class="numLineCover"> 570</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 571</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 572</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 573</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
-<tr> <td class="numLineCover"> 574</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
-<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> .setGetDocIdsErrorHandler(handler);</pre></td></tr>
-<tr> <td class="numLineCover"> 576</td> <td class="nbHitsCovered"> 1</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"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 579</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsErrorHandler() {</pre></td></tr>
-<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
-<tr> <td class="numLine"> 581</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> .getGetDocIdsErrorHandler();</pre></td></tr>
-<tr> <td class="numLine"> 582</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 583</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 585</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
-<tr> <td class="numLineCover"> 586</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> secureValueCodec;</pre></td></tr>
-<tr> <td class="numLine"> 587</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</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="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Executes Runnable in current thread, but only after setting a thread-local</span></pre></td></tr>
-<tr> <td class="numLine"> 592</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * object. The code that will be run, is expected to take notice of the set</span></pre></td></tr>
-<tr> <td class="numLine"> 593</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * variable and abort immediately. This is a hack.</span></pre></td></tr>
-<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 595</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> SuggestHandlerAbortPolicy</pre></td></tr>
-<tr> <td class="numLine"> 596</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">implements</span> RejectedExecutionHandler {</pre></td></tr>
-<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ThreadLocal<Object> abortImmediately;</pre></td></tr>
-<tr> <td class="numLineCover"> 598</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Object signal = <span class="keyword">new</span> Object();</pre></td></tr>
-<tr> <td class="numLine"> 599</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 600</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">public</span> SuggestHandlerAbortPolicy(ThreadLocal<Object> abortImmediately) {</pre></td></tr>
-<tr> <td class="numLineCover"> 601</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.abortImmediately = abortImmediately;</pre></td></tr>
-<tr> <td class="numLineCover"> 602</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 603</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 604</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> @Override</pre></td></tr>
-<tr> <td class="numLine"> 605</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> rejectedExecution(Runnable r, ThreadPoolExecutor executor) {</pre></td></tr>
-<tr> <td class="numLineCover"> 606</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(signal);</span></pre></td></tr>
-<tr> <td class="numLine"> 607</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 278</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">int</span> sepIndex = factoryMethodName.lastIndexOf(<span class="string">"."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 279</td> <td class="nbHitsCovered"><a title="Line 279: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 279: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (sepIndex == -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 280</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not separate method name from class "</span></pre></td></tr>
+<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"name"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String className = factoryMethodName.substring(0, sepIndex);</pre></td></tr>
+<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> String methodName = factoryMethodName.substring(sepIndex + 1);</pre></td></tr>
+<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Split {0} into class {1} and method {2}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {factoryMethodName, className, methodName});</pre></td></tr>
+<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Class<?> klass;</pre></td></tr>
+<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 608</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> r.run();</span></pre></td></tr>
-<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 610</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(<span class="keyword">null</span>);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 611</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</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>
+<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 5</td> <td class="src"><pre class="src"> klass = Class.forName(className);</pre></td></tr>
+<tr> <td class="numLineCover"> 290</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (ClassNotFoundException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 291</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(</pre></td></tr>
+<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="string">"Could not load class for transform "</span> + name, ex);</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="numLine"> 294</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Method method;</pre></td></tr>
+<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> method = klass.getDeclaredMethod(methodName, Map.<span class="keyword">class</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 297</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NoSuchMethodException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 298</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Could not find method "</span> + methodName</pre></td></tr>
+<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">" on class "</span> + className, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 301</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINE, <span class="string">"Found method {0}"</span>, <span class="keyword">new</span> Object[] {method});</pre></td></tr>
+<tr> <td class="numLine"> 302</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> Object o;</pre></td></tr>
+<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> o = method.invoke(<span class="keyword">null</span>, Collections.unmodifiableMap(element));</pre></td></tr>
+<tr> <td class="numLineCover"> 305</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (Exception ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 306</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(<span class="string">"Failure while running factory method "</span></pre></td></tr>
+<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + factoryMethodName, ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 309</td> <td class="nbHitsCovered"><a title="Line 309: Conditional coverage 100% (2/2)."> 2</a></td> <td class="src"><pre class="src"> <a title="Line 309: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (!(o <span class="keyword">instanceof</span> DocumentTransform)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 310</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> ClassCastException(o.getClass().getName()</pre></td></tr>
+<tr> <td class="numLine"> 311</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">" is not an instance of DocumentTransform"</span>);</pre></td></tr>
+<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 313</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> DocumentTransform transform = (DocumentTransform) o;</pre></td></tr>
+<tr> <td class="numLineCover"> 314</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> elements.add(transform);</pre></td></tr>
+<tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// If we created an empty pipeline, then we don't need the pipeline at all.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 317</td> <td class="nbHitsCovered"><a title="Line 317: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 317: Conditional coverage 100% (2/2)."> <span class="keyword">return</span> elements.size() > 0 ? <span class="keyword">new</span> TransformPipeline(elements) : <span class="keyword">null</span>;</a></pre></td></tr>
+<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 614</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Retrieve our default KeyPair from the default keystore. The key should have</span></pre></td></tr>
+<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * the same password as the keystore.</span></pre></td></tr>
+<tr> <td class="numLine"> 323</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 324</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> KeyPair getKeyPair(String alias) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 325</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystoreKey = <span class="string">"javax.net.ssl.keyStore"</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String keystorePasswordKey = <span class="string">"javax.net.ssl.keyStorePassword"</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 327</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String keystore = System.getProperty(keystoreKey);</pre></td></tr>
+<tr> <td class="numLineCover"> 328</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String keystoreType = System.getProperty(<span class="string">"javax.net.ssl.keyStoreType"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 329</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> KeyStore.getDefaultType());</pre></td></tr>
+<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String keystorePassword = System.getProperty(keystorePasswordKey);</pre></td></tr>
+<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 332</td> <td class="nbHitsUncovered"><a title="Line 332: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 332: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystore == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 333</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">"You must set "</span> + keystoreKey);</span></pre></td></tr>
+<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 335</td> <td class="nbHitsUncovered"><a title="Line 335: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 335: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (keystorePassword == <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 336</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> NullPointerException(<span class="string">"You must set "</span> + keystorePasswordKey);</span></pre></td></tr>
+<tr> <td class="numLine"> 337</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 339</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> getKeyPair(alias, keystore, keystoreType, keystorePassword);</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="numLine"> 341</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> KeyPair getKeyPair(String alias, String keystoreFile,</pre></td></tr>
+<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> String keystoreType, String keystorePasswordStr) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 344</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PrivateKey privateKey;</pre></td></tr>
+<tr> <td class="numLine"> 345</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> PublicKey publicKey;</pre></td></tr>
+<tr> <td class="numLine"> 346</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 347</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> KeyStore ks = KeyStore.getInstance(keystoreType);</pre></td></tr>
+<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 9</td> <td class="src"><pre class="src"> InputStream ksis = <span class="keyword">new</span> FileInputStream(keystoreFile);</pre></td></tr>
+<tr> <td class="numLineCover"> 349</td> <td class="nbHitsUncovered"><a title="Line 349: Conditional coverage 50% (1/2)."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 349: Conditional coverage 50% (1/2)."> <span class="keyword">char</span>[] keystorePassword = keystorePasswordStr == <span class="keyword">null</span> ? <span class="keyword">null</span></a></span></pre></td></tr>
+<tr> <td class="numLine"> 350</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> : keystorePasswordStr.toCharArray();</pre></td></tr>
+<tr> <td class="numLine"> 351</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> ks.load(ksis, keystorePassword);</pre></td></tr>
+<tr> <td class="numLineCover"> 353</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 354</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> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 355</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CertificateException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 356</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> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 358</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> ksis.close();</pre></td></tr>
+<tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> Key key = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 361</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> key = ks.getKey(alias, keystorePassword);</pre></td></tr>
+<tr> <td class="numLineCover"> 363</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (NoSuchAlgorithmException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 364</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> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 365</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnrecoverableKeyException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 366</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> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 367</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 368</td> <td class="nbHitsCovered"><a title="Line 368: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 368: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (key == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 369</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"Could not find key for alias '"</span></pre></td></tr>
+<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + alias + <span class="string">"'"</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="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> privateKey = (PrivateKey) key;</pre></td></tr>
+<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> publicKey = ks.getCertificate(alias).getPublicKey();</pre></td></tr>
+<tr> <td class="numLineCover"> 374</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (KeyStoreException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> RuntimeException(ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 377</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> KeyPair(publicKey, privateKey);</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="comment">// Useful as a separate method during testing.</span></pre></td></tr>
+<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">void</span> bootstrapOpenSaml() {</pre></td></tr>
+<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 383</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> DefaultBootstrap.bootstrap();</pre></td></tr>
+<tr> <td class="numLineCover"> 384</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ConfigurationException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 385</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> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 386</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 387</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 388</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 389</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 390</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Stop the current services, allowing up to {@code maxDelay} seconds for</span></pre></td></tr>
+<tr> <td class="numLine"> 391</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * things to shutdown.</span></pre></td></tr>
+<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> stop(<span class="keyword">int</span> maxDelay) {</pre></td></tr>
+<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Prevent new start()s.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 395</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownCount.incrementAndGet();</pre></td></tr>
+<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 397</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> CountDownLatch latch = shuttingDownLatch;</pre></td></tr>
+<tr> <td class="numLineCover"> 398</td> <td class="nbHitsCovered"><a title="Line 398: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 398: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (latch != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Cause existing start() to begin cancelling.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 400</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> latch.countDown();</pre></td></tr>
+<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 402</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> realStop(maxDelay);</pre></td></tr>
+<tr> <td class="numLine"> 403</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Permit new start()s.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 405</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> shutdownCount.decrementAndGet();</pre></td></tr>
+<tr> <td class="numLineCover"> 406</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 407</td> <td class="nbHitsCovered"> 20</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">private</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> realStop(<span class="keyword">int</span> maxDelay) {</pre></td></tr>
+<tr> <td class="numLineCover"> 410</td> <td class="nbHitsCovered"><a title="Line 410: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 410: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (shutdownHook != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 412</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Runtime.getRuntime().removeShutdownHook(shutdownHook);</pre></td></tr>
+<tr> <td class="numLineCover"> 413</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IllegalStateException ex) {</span></pre></td></tr>
+<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Already executing hook.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 415</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 416</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> shutdownHook = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 418</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> scheduler.deschedule(sendDocIdsSchedId);</pre></td></tr>
+<tr> <td class="numLineCover"> 419</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> sendDocIdsSchedId = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Stop sendDocIds before scheduler, because scheduler blocks until all</span></pre></td></tr>
+<tr> <td class="numLine"> 421</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// tasks are completed. We want to interrupt sendDocIds so that the</span></pre></td></tr>
+<tr> <td class="numLine"> 422</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// scheduler stops within a reasonable amount of time.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> docIdFullPusher.stop();</pre></td></tr>
+<tr> <td class="numLineCover"> 424</td> <td class="nbHitsCovered"><a title="Line 424: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 424: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (scheduler.isStarted()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 425</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> scheduler.stop();</pre></td></tr>
+<tr> <td class="numLine"> 426</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 427</td> <td class="nbHitsCovered"><a title="Line 427: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 427: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (incrementalAdaptorPoller != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 428</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> incrementalAdaptorPoller.cancel();</pre></td></tr>
+<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 430</td> <td class="nbHitsCovered"><a title="Line 430: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 430: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (server != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 431</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> server.stop(maxDelay);</pre></td></tr>
+<tr> <td class="numLineCover"> 432</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> server = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"><a title="Line 434: Conditional coverage 100% (2/2)."> 20</a></td> <td class="src"><pre class="src"> <a title="Line 434: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (dashboard != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 435</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> dashboard.stop();</pre></td></tr>
+<tr> <td class="numLineCover"> 436</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> dashboard = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 438</td> <td class="nbHitsCovered"> 20</td> <td class="src"><pre class="src"> adaptor.destroy();</pre></td></tr>
+<tr> <td class="numLineCover"> 439</td> <td class="nbHitsCovered"> 20</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"> * Ensure there is a push running right now. This schedules a new push if one</span></pre></td></tr>
+<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * is not already running. Returns {@code true} if it starts a new push, and</span></pre></td></tr>
+<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@code false} otherwise.</span></pre></td></tr>
+<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> checkAndScheduleImmediatePushOfDocIds() {</pre></td></tr>
+<tr> <td class="numLineCover"> 447</td> <td class="nbHitsUncovered"><a title="Line 447: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 447: Conditional coverage 0% (0/2)."> <span class="keyword">return</span> docIdFullPusher.runInNewThread() != <span class="keyword">null</span>;</a></span></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="numLine"> 449</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 450</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">boolean</span> ensureLatestConfigLoaded() {</pre></td></tr>
+<tr> <td class="numLine"> 451</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 452</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config.ensureLatestConfigLoaded();</pre></td></tr>
+<tr> <td class="numLineCover"> 453</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 454</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Error while trying to reload configuration"</span>,</span></pre></td></tr>
+<tr> <td class="numLine"> 455</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> ex);</pre></td></tr>
+<tr> <td class="numLineCover"> 456</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"> 457</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 461</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Runnable that calls {@link DocIdSender#pushDocIds}.</span></pre></td></tr>
+<tr> <td class="numLine"> 462</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> PushRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">volatile</span> GetDocIdsErrorHandler handler</pre></td></tr>
+<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> DefaultGetDocIdsErrorHandler();</pre></td></tr>
+<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 467</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
+<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 470</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> docIdSender.pushDocIdsFromAdaptor(handler);</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">catch</span> (InterruptedException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 472</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Thread.currentThread().interrupt();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 473</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 474</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 475</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 477</td> <td class="nbHitsUncovered"><a title="Line 477: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 477: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (handler == <span class="keyword">null</span>) {</a></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 class="keyword">throw</span> <span class="keyword">new</span> NullPointerException();</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="numLineCover"> 480</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.handler = handler;</pre></td></tr>
+<tr> <td class="numLineCover"> 481</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 482</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 484</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> handler;</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="numLine"> 486</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 489</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Runnable that logs an error that {@link PushRunnable} is already executing.</span></pre></td></tr>
+<tr> <td class="numLine"> 490</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AlreadyRunningRunnable <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
+<tr> <td class="numLineCover"> 494</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Skipping scheduled push of docIds. The previous invocation "</span></span></pre></td></tr>
+<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"is still running."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 496</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLineCover"> 499</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> ShutdownHook <span class="keyword">implements</span> Runnable {</pre></td></tr>
+<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> run() {</pre></td></tr>
+<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Allow three seconds for things to stop.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 503</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 504</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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="numLineCover"> 507</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> GsaConfigModListener <span class="keyword">implements</span> ConfigModificationListener {</pre></td></tr>
+<tr> <td class="numLine"> 508</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> configModified(ConfigModificationEvent ev) {</pre></td></tr>
+<tr> <td class="numLineCover"> 510</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeys = ev.getModifiedKeys();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 511</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">synchronized</span> (GsaCommunicationHandler.<span class="keyword">this</span>) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 512</td> <td class="nbHitsUncovered"><a title="Line 512: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 512: Conditional coverage 0% (0/4) [each condition: 0%, 0%]."> <span class="keyword">if</span> (modifiedKeys.contains(<span class="string">"adaptor.fullListingSchedule"</span>)</a></span></pre></td></tr>
+<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> && sendDocIdsSchedId != <span class="keyword">null</span>) {</pre></td></tr>
+<tr> <td class="numLineCover"> 514</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> String schedule = ev.getNewConfig().getAdaptorFullListingSchedule();</span></pre></td></tr>
+<tr> <td class="numLine"> 515</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 516</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> scheduler.reschedule(sendDocIdsSchedId, schedule);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 517</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (InvalidPatternException ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 518</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.WARNING, <span class="string">"Invalid schedule pattern"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 519</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 521</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// List of "safe" keys that can be updated without a restart.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 524</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> List<String> safeKeys = Arrays.asList(<span class="string">"adaptor.fullListingSchedule"</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 525</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Set of "unsafe" keys that have been modified.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 526</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Set<String> modifiedKeysRequiringRestart</span></pre></td></tr>
+<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> = <span class="keyword">new</span> HashSet<String>(modifiedKeys);</pre></td></tr>
+<tr> <td class="numLineCover"> 528</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> modifiedKeysRequiringRestart.removeAll(safeKeys);</span></pre></td></tr>
+<tr> <td class="numLine"> 529</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// If there are modified "unsafe" keys, then we restart things to make</span></pre></td></tr>
+<tr> <td class="numLine"> 530</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// sure all the code is up-to-date with the new values.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 531</td> <td class="nbHitsUncovered"><a title="Line 531: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 531: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!modifiedKeysRequiringRestart.isEmpty()) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 532</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.warning(<span class="string">"Unsafe configuration keys modified. To ensure a sane "</span></span></pre></td></tr>
+<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">"state, the adaptor is restarting."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 534</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> stop(3);</span></pre></td></tr>
+<tr> <td class="numLine"> 535</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 536</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> start();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 537</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (Exception ex) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 538</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> log.log(Level.SEVERE, <span class="string">"Automatic restart failed"</span>, ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 539</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> RuntimeException(ex);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 540</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 542</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></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="numLine"> 545</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 546</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * This class is thread-safe.</span></pre></td></tr>
+<tr> <td class="numLine"> 547</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLineCover"> 548</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">class</span> AdaptorContextImpl <span class="keyword">implements</span> AdaptorContext {</pre></td></tr>
+<tr> <td class="numLine"> 549</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 550</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> Config getConfig() {</pre></td></tr>
+<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> config;</pre></td></tr>
+<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher getDocIdPusher() {</pre></td></tr>
+<tr> <td class="numLineCover"> 556</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdSender;</pre></td></tr>
+<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 559</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 560</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdEncoder getDocIdEncoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> docIdCodec;</pre></td></tr>
+<tr> <td class="numLine"> 562</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 563</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> addStatusSource(StatusSource source) {</pre></td></tr>
+<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.addStatusSource(source);</pre></td></tr>
+<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 568</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 570</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> removeStatusSource(StatusSource source) {</pre></td></tr>
+<tr> <td class="numLineCover"> 571</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> dashboard.removeStatusSource(source);</pre></td></tr>
+<tr> <td class="numLineCover"> 572</td> <td class="nbHitsCovered"> 1</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setGetDocIdsErrorHandler(GetDocIdsErrorHandler handler) {</pre></td></tr>
+<tr> <td class="numLineCover"> 576</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
+<tr> <td class="numLine"> 577</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .setGetDocIdsErrorHandler(handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 578</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 579</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 580</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 581</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> GetDocIdsErrorHandler getGetDocIdsErrorHandler() {</pre></td></tr>
+<tr> <td class="numLineCover"> 582</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ((PushRunnable) docIdFullPusher.getRunnable())</pre></td></tr>
+<tr> <td class="numLine"> 583</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> .getGetDocIdsErrorHandler();</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 587</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> SensitiveValueDecoder getSensitiveValueDecoder() {</pre></td></tr>
+<tr> <td class="numLineCover"> 588</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> secureValueCodec;</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"> }</pre></td></tr>
+<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 592</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 593</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Executes Runnable in current thread, but only after setting a thread-local</span></pre></td></tr>
+<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * object. The code that will be run, is expected to take notice of the set</span></pre></td></tr>
+<tr> <td class="numLine"> 595</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * variable and abort immediately. This is a hack.</span></pre></td></tr>
+<tr> <td class="numLine"> 596</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> SuggestHandlerAbortPolicy</pre></td></tr>
+<tr> <td class="numLine"> 598</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">implements</span> RejectedExecutionHandler {</pre></td></tr>
+<tr> <td class="numLine"> 599</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ThreadLocal<Object> abortImmediately;</pre></td></tr>
+<tr> <td class="numLineCover"> 600</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> Object signal = <span class="keyword">new</span> Object();</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="numLineCover"> 602</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">public</span> SuggestHandlerAbortPolicy(ThreadLocal<Object> abortImmediately) {</pre></td></tr>
+<tr> <td class="numLineCover"> 603</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.abortImmediately = abortImmediately;</pre></td></tr>
+<tr> <td class="numLineCover"> 604</td> <td class="nbHitsCovered"> 6</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"> @Override</pre></td></tr>
+<tr> <td class="numLine"> 607</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> rejectedExecution(Runnable r, ThreadPoolExecutor executor) {</pre></td></tr>
+<tr> <td class="numLineCover"> 608</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(signal);</span></pre></td></tr>
+<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 610</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> r.run();</span></pre></td></tr>
+<tr> <td class="numLine"> 611</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 612</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> abortImmediately.set(<span class="keyword">null</span>);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 613</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLineCover"> 614</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
+<tr> <td class="numLine"> 615</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.IOHelper.html b/coverage/com.google.enterprise.adaptor.IOHelper.html
index 361a684..9ab61a1 100644
--- a/coverage/com.google.enterprise.adaptor.IOHelper.html
+++ b/coverage/com.google.enterprise.adaptor.IOHelper.html
@@ -83,12 +83,12 @@
<tr> <td class="numLineCover"> 33</td> <td class="nbHitsCovered"> 74</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] buffer = <span class="keyword">new</span> <span class="keyword">byte</span>[1024];</pre></td></tr>
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">int</span> read;</pre></td></tr>
-<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"><a title="Line 35: Conditional coverage 100% (2/2)."> 192</a></td> <td class="src"><pre class="src"> <a title="Line 35: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 119</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
+<tr> <td class="numLineCover"> 35</td> <td class="nbHitsCovered"><a title="Line 35: Conditional coverage 100% (2/2)."> 174</a></td> <td class="src"><pre class="src"> <a title="Line 35: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> ((read = in.read(buffer)) != -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 36</td> <td class="nbHitsCovered"> 101</td> <td class="src"><pre class="src"> out.write(buffer, 0, read);</pre></td></tr>
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 71</td> <td class="src"><pre class="src"> out.flush();</pre></td></tr>
-<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 71</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 38</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> out.flush();</pre></td></tr>
+<tr> <td class="numLineCover"> 39</td> <td class="nbHitsCovered"> 72</td> <td class="src"><pre class="src"> }</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="numLine"> 41</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.Journal.html b/coverage/com.google.enterprise.adaptor.Journal.html
index 5223316..8dcdb76 100644
--- a/coverage/com.google.enterprise.adaptor.Journal.html
+++ b/coverage/com.google.enterprise.adaptor.Journal.html
@@ -364,8 +364,8 @@
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> determineTimeResolutionOnce() {</pre></td></tr>
<tr> <td class="numLineCover"> 209</td> <td class="nbHitsCovered"> 740</td> <td class="src"><pre class="src"> <span class="keyword">long</span> time = timeProvider.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLineCover"> 210</td> <td class="nbHitsCovered"> 740</td> <td class="src"><pre class="src"> <span class="keyword">long</span> startTime = time;</pre></td></tr>
-<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"><a title="Line 211: Conditional coverage 100% (2/2)."> 351886</a></td> <td class="src"><pre class="src"> <a title="Line 211: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 351146</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"><a title="Line 211: Conditional coverage 100% (2/2)."> 381315</a></td> <td class="src"><pre class="src"> <a title="Line 211: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (startTime == time) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 380575</td> <td class="src"><pre class="src"> time = timeProvider.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 214</td> <td class="nbHitsCovered"> 740</td> <td class="src"><pre class="src"> <span class="keyword">return</span> time - startTime;</pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html b/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
index 1431d4e..ce737c4 100644
--- a/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
+++ b/coverage/com.google.enterprise.adaptor.SystemTimeProvider.html
@@ -58,7 +58,7 @@
<tr> <td class="numLineCover"> 20</td> <td class="nbHitsCovered"> 83</td> <td class="src"><pre class="src"> <span class="keyword">class</span> SystemTimeProvider <span class="keyword">implements</span> TimeProvider {</pre></td></tr>
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">long</span> currentTimeMillis() {</pre></td></tr>
-<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 350675</td> <td class="src"><pre class="src"> <span class="keyword">return</span> System.currentTimeMillis();</pre></td></tr>
+<tr> <td class="numLineCover"> 22</td> <td class="nbHitsCovered"> 380104</td> <td class="src"><pre class="src"> <span class="keyword">return</span> System.currentTimeMillis();</pre></td></tr>
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
diff --git a/coverage/com.google.enterprise.adaptor.prebuilt.StreamingCommand.html b/coverage/com.google.enterprise.adaptor.prebuilt.StreamingCommand.html
index 6676f8c..36c1ae3 100644
--- a/coverage/com.google.enterprise.adaptor.prebuilt.StreamingCommand.html
+++ b/coverage/com.google.enterprise.adaptor.prebuilt.StreamingCommand.html
@@ -19,7 +19,7 @@
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$InputSourceRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:88px"><span class="text">8/9</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$NoInputSource</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$OutputSink</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">1.5625;</span>1.562</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$OutputSinkRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">9/9</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">1.5625;</span>1.562</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$OutputSinkRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:88px"><span class="text">8/9</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$StreamInputSource</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$StreamOutputSink</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">1.5625;</span>1.562</td></tr>
@@ -319,7 +319,7 @@
<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> sink(InputStream in) <span class="keyword">throws</span> IOException {</pre></td></tr>
<tr> <td class="numLineCover"> 171</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> IOHelper.copyStream(in, out);</pre></td></tr>
-<tr> <td class="numLineCover"> 172</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 172</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
@@ -378,7 +378,7 @@
<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
<tr> <td class="numLineCover"> 208</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> sink.sink(in);</pre></td></tr>
-<tr> <td class="numLineCover"> 209</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (IOException ex) {</pre></td></tr>
+<tr> <td class="numLineCover"> 209</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">// Ignore, but stop thread.</span></pre></td></tr>
<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
index 8e77492..a244cea 100644
--- a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.html
@@ -120,7 +120,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GetDocIdsErrorHandler.html">GetDocIdsErrorHandler</a> <i>(N/A)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(75%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(74%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker</a> <i>(94%)</i></td>
diff --git a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html
index 9955d92..8f27983 100644
--- a/coverage/frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html
+++ b/coverage/frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html
@@ -30,7 +30,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.prebuilt.RecursiveFileIterator.html">RecursiveFileIterator</a> <i>(82%)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand</a> <i>(95%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand</a> <i>(94%)</i></td>
</tr>
</tbody>
</table>
diff --git a/coverage/frame-sourcefiles.html b/coverage/frame-sourcefiles.html
index 06b3a3c..f1d2372 100644
--- a/coverage/frame-sourcefiles.html
+++ b/coverage/frame-sourcefiles.html
@@ -147,7 +147,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GetDocIdsErrorHandler.html">GetDocIdsErrorHandler</a> <i>(N/A)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(75%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a> <i>(74%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker</a> <i>(94%)</i></td>
@@ -240,7 +240,7 @@
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.StatusSource.html">StatusSource</a> <i>(N/A)</i></td>
</tr>
<tr>
-<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand</a> <i>(95%)</i></td>
+<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand</a> <i>(94%)</i></td>
</tr>
<tr>
<td nowrap="nowrap"><a target="summary" href="com.google.enterprise.adaptor.SystemTimeProvider.html">SystemTimeProvider</a> <i>(100%)</i></td>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.html b/coverage/frame-summary-com.google.enterprise.adaptor.html
index 4056d40..ebd4068 100644
--- a/coverage/frame-summary-com.google.enterprise.adaptor.html
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.html
@@ -16,9 +16,9 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</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>
<tbody>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">166</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">600</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">3164/3764</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">205</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1003/1208</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3655352480417755;</span>2.366</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">166</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">602</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">3164/3766</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">205</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1003/1208</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.368146214099217;</span>2.368</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.examples.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.examples.html"'>com.google.enterprise.adaptor.examples</a></td><td class="value">12</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">253</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">72/325</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">52</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">26/78</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.311111111111111;</span>2.311</td></tr>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">16</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">257/403</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">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">65/122</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585714285714286;</span>2.586</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">16</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">147</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">256/403</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">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">65/122</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585714285714286;</span>2.586</td></tr>
</tbody>
</table>
<script type="text/javascript">
@@ -154,14 +154,14 @@
<tr><td><a href="com.google.enterprise.adaptor.GetDocIdsErrorHandler.html">GetDocIdsErrorHandler</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">1.0;</span>1</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">28</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:85px"><span class="text">163/191</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">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">38/50</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</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">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</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">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5;</span>3.5</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</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">3.5;</span>3.5</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">30</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">163/193</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">12</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">38/50</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AdaptorContextImpl</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">12/12</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$AlreadyRunningRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$GsaConfigModListener</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">21</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:4px"><span class="text">1/22</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">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/6</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$PushRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">6/12</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">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">1/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$ShutdownHook</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">2</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">1/3</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">3.5714285714285716;</span>3.571</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.GsaCommunicationHandler.html">GsaCommunicationHandler$SuggestHandlerAbortPolicy</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">5</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:44px"><span class="text">4/9</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">3.5714285714285716;</span>3.571</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">6</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:94px"><span class="text">98/104</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">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">32/32</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.1818181818181817;</span>3.182</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.GsaFeedFileMaker.html">GsaFeedFileMaker$1</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</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">3.1818181818181817;</span>3.182</td></tr>
diff --git a/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html b/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html
index 66fda99..05dd12b 100644
--- a/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html
+++ b/coverage/frame-summary-com.google.enterprise.adaptor.prebuilt.html
@@ -16,7 +16,7 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</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>
<tbody>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">16</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">257/403</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">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">65/122</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585714285714286;</span>2.586</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">16</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">147</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">256/403</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">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">65/122</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585714285714286;</span>2.586</td></tr>
</tbody>
</table>
<script type="text/javascript">
@@ -46,7 +46,7 @@
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$InputSourceRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:88px"><span class="text">8/9</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$NoInputSource</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$OutputSink</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">1.5625;</span>1.562</td></tr>
- <tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$OutputSinkRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">9/9</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">1.5625;</span>1.562</td></tr>
+ <tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$OutputSinkRunnable</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:88px"><span class="text">8/9</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$StreamInputSource</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">1.5625;</span>1.562</td></tr>
<tr><td><a href="com.google.enterprise.adaptor.prebuilt.StreamingCommand.html">StreamingCommand$StreamOutputSink</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">5/5</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">1.5625;</span>1.562</td></tr>
diff --git a/coverage/frame-summary.html b/coverage/frame-summary.html
index 5146901..5cf5600 100644
--- a/coverage/frame-summary.html
+++ b/coverage/frame-summary.html
@@ -16,10 +16,10 @@
<table class="report" id="packageResults">
<thead><tr> <td class="heading">Package</td> <td class="heading"># Classes</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>
<tbody>
- <tr><td><b>All Packages</b></td><td class="value">194</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">999</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">3493/4492</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">314</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">1094/1408</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.380249716231555;</span>2.38</td></tr>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">166</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">600</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">3164/3764</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">205</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1003/1208</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3655352480417755;</span>2.366</td></tr>
+ <tr><td><b>All Packages</b></td><td class="value">194</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">1002</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">3492/4494</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">314</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">1094/1408</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.3825198637911464;</span>2.383</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.html"'>com.google.enterprise.adaptor</a></td><td class="value">166</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">602</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:84px"><span class="text">3164/3766</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">205</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">1003/1208</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.368146214099217;</span>2.368</td></tr>
<tr><td><a href="frame-summary-com.google.enterprise.adaptor.examples.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.examples.html"'>com.google.enterprise.adaptor.examples</a></td><td class="value">12</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">253</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:22px"><span class="text">72/325</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">52</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:33px"><span class="text">26/78</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.311111111111111;</span>2.311</td></tr>
- <tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">16</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">146</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">257/403</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">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">65/122</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585714285714286;</span>2.586</td></tr>
+ <tr><td><a href="frame-summary-com.google.enterprise.adaptor.prebuilt.html" onclick='parent.sourceFileList.location.href="frame-sourcefiles-com.google.enterprise.adaptor.prebuilt.html"'>com.google.enterprise.adaptor.prebuilt</a></td><td class="value">16</td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">147</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:63px"><span class="text">256/403</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">57</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:53px"><span class="text">65/122</span></div></div></td></tr></table></td><td class="value"><span class="hidden">2.585714285714286;</span>2.586</td></tr>
</tbody>
</table>
<script type="text/javascript">