Regeneration from plexi 7537877
diff --git a/coverage/com.google.enterprise.adaptor.CommandStreamParser.html b/coverage/com.google.enterprise.adaptor.CommandStreamParser.html
index 763ed94..778ee55 100644
--- a/coverage/com.google.enterprise.adaptor.CommandStreamParser.html
+++ b/coverage/com.google.enterprise.adaptor.CommandStreamParser.html
@@ -652,7 +652,7 @@
<tr> <td class="numLineCover"> 351</td> <td class="nbHitsUncovered"><a title="Line 351: Conditional coverage 50% (1/2)."> 7</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 351: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!docId.equals(foundDocId)) {</a></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> IOException(<span class="string">"requested document "</span> + docId + <span class="string">" does not match retrieved "</span></span></pre></td></tr>
<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">"document "</span> + foundDocId + <span class="string">"."</span>);</pre></td></tr>
+ <td class="src"><pre class="src"> + <span class="string">"document "</span> + foundDocId + <span class="string">"."</span>);</pre></td></tr>
<tr> <td class="numLine"> 354</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
<tr> <td class="numLineCover"> 355</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
@@ -673,361 +673,363 @@
<tr> <td class="numLineCover"> 367</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> IOException(<span class="string">"meta-name must be immediately followed by meta-value"</span>);</span></pre></td></tr>
<tr> <td class="numLine"> 368</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 369</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.log(Level.FINEST, <span class="string">"Retriever: {0} has metadata {1}"</span>,</pre></td></tr>
+<tr> <td class="numLineCover"> 369</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> log.log(Level.FINEST, <span class="string">"Retriever: {0} has metadata {1}={2}"</span>,</pre></td></tr>
<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {docId.getUniqueId(), command.getArgument()});</pre></td></tr>
-<tr> <td class="numLineCover"> 371</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> response.addMetadata(metaName, command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 373</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {docId.getUniqueId(), metaName,</pre></td></tr>
+<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> command.getArgument()});</pre></td></tr>
+<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> response.addMetadata(metaName, command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> UP_TO_DATE:</pre></td></tr>
-<tr> <td class="numLineCover"> 374</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINEST, <span class="string">"Retriever: {0} is up to date."</span>, docId.getUniqueId());</pre></td></tr>
-<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> response.respondNotModified();</pre></td></tr>
-<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> log.log(Level.FINEST, <span class="string">"Retriever: {0} is up to date."</span>, docId.getUniqueId());</pre></td></tr>
+<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> response.respondNotModified();</pre></td></tr>
+<tr> <td class="numLineCover"> 377</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> NOT_FOUND:</pre></td></tr>
-<tr> <td class="numLineCover"> 378</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> response.respondNotFound();</span></pre></td></tr>
-<tr> <td class="numLineCover"> 379</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">break</span>;</span></pre></td></tr>
-<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 379</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> response.respondNotFound();</span></pre></td></tr>
+<tr> <td class="numLineCover"> 380</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">break</span>;</span></pre></td></tr>
+<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">case</span> MIME_TYPE:</pre></td></tr>
-<tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINEST, <span class="string">"Retriever: {0} has mime-type {1}"</span>,</pre></td></tr>
-<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 382</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> log.log(Level.FINEST, <span class="string">"Retriever: {0} has mime-type {1}"</span>,</pre></td></tr>
+<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">new</span> Object[] {docId.getUniqueId(), command.getArgument()});</pre></td></tr>
-<tr> <td class="numLineCover"> 383</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> response.setContentType(command.getArgument());</pre></td></tr>
-<tr> <td class="numLineCover"> 384</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 385</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 384</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> response.setContentType(command.getArgument());</pre></td></tr>
+<tr> <td class="numLineCover"> 385</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
-<tr> <td class="numLineCover"> 386</td> <td class="nbHitsUncovered"><a title="Line 386: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 386: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Retriever Error: invalid operation: '"</span> + command.getOperation() +</a></span></pre></td></tr>
-<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> (command.hasArgument() ? <span class="string">"' with argument: '"</span> + command.getArgument() + <span class="string">"'"</span> : <span class="string">"'"</span>));</pre></td></tr>
+<tr> <td class="numLineCover"> 387</td> <td class="nbHitsUncovered"><a title="Line 387: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 387: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Retriever Error: invalid operation: '"</span> + command.getOperation() +</a></span></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="numLineCover"> 389</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 390</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 391</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Parse a listing response, sending results to {@code pusher}. If {@code handler} is {@code</span></pre></td></tr>
-<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * null}, then {@code pusher}'s default handler will be used. In case of failure sending in</span></pre></td></tr>
-<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * {@code pusher}, the rest of the input stream may not be read.</span></pre></td></tr>
-<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return {@code null} on success, otherwise the first Record to fail</span></pre></td></tr>
-<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher.Record readFromLister(DocIdPusher pusher, PushErrorHandler handler)</pre></td></tr>
-<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException, InterruptedException {</pre></td></tr>
-<tr> <td class="numLineCover"> 402</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> ArrayList<DocIdPusher.Record> result = <span class="keyword">new</span> ArrayList<DocIdPusher.Record>();</pre></td></tr>
-<tr> <td class="numLineCover"> 403</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> DocIdPusher.Record.Builder builder = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 404</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> Command command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 405</td> <td class="nbHits"> </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"> <span class="comment">// Starting out at end-of-stream so don't send anything.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 407</td> <td class="nbHitsCovered"><a title="Line 407: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 407: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 408</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// The first operation must be a doc ID.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 412</td> <td class="nbHitsCovered"><a title="Line 412: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 412: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command.getOperation() != Operation.ID) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Lister Error: the first operator must be a document ID. "</span></pre></td></tr>
-<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + <span class="string">" Instead encountered '"</span> + command.getOperation() + <span class="string">"'."</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"><a title="Line 416: Conditional coverage 100% (2/2)."> 30031</a></td> <td class="src"><pre class="src"> <a title="Line 416: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (command != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 417</td> <td class="nbHitsUncovered"><a title="Line 417: Conditional coverage 50% (7/14)."> 30023</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 417: Conditional coverage 50% (7/14)."> <span class="keyword">switch</span> (command.getOperation()) {</a></span></pre></td></tr>
-<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> ID:</pre></td></tr>
-<tr> <td class="numLineCover"> 419</td> <td class="nbHitsCovered"><a title="Line 419: Conditional coverage 100% (2/2)."> 30015</a></td> <td class="src"><pre class="src"> <a title="Line 419: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (builder != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 420</td> <td class="nbHitsCovered"> 30007</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
-<tr> <td class="numLine"> 421</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// TODO(ejona): make threshold smarter.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"><a title="Line 422: Conditional coverage 100% (2/2)."> 30007</a></td> <td class="src"><pre class="src"> <a title="Line 422: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (result.size() >= 10000) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> DocIdPusher.Record errorRecord = pusher.pushRecords(result, handler);</pre></td></tr>
-<tr> <td class="numLineCover"> 424</td> <td class="nbHitsUncovered"><a title="Line 424: Conditional coverage 50% (1/2)."> 3</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 424: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (errorRecord != <span class="keyword">null</span>) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 425</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> errorRecord;</span></pre></td></tr>
-<tr> <td class="numLine"> 426</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 427</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> result.clear();</pre></td></tr>
-<tr> <td class="numLine"> 428</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 430</td> <td class="nbHitsCovered"> 30015</td> <td class="src"><pre class="src"> builder = <span class="keyword">new</span> DocIdPusher.Record.Builder(<span class="keyword">new</span> DocId(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 431</td> <td class="nbHitsCovered"> 30015</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> LAST_MODIFIED:</pre></td></tr>
-<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Convert seconds to milliseconds for Date constructor.</span></pre></td></tr>
-<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setLastModified(<span class="keyword">new</span> Date(Long.parseLong(command.getArgument()) * 1000));</pre></td></tr>
-<tr> <td class="numLineCover"> 435</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> RESULT_LINK:</pre></td></tr>
-<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 438</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setResultLink(<span class="keyword">new</span> URI(command.getArgument()));</pre></td></tr>
-<tr> <td class="numLineCover"> 439</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (URISyntaxException e) {</span></pre></td></tr>
-<tr> <td class="numLineCover"> 440</td> <td class="nbHitsUncovered"><a title="Line 440: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 440: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Lister Error: invalid URL: '"</span> + command.getOperation()</a></span></pre></td></tr>
-<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + (command.hasArgument() ? <span class="string">"' with argument: '"</span></pre></td></tr>
-<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + command.getArgument() + <span class="string">"'"</span> : <span class="string">"'"</span>), e);</pre></td></tr>
-<tr> <td class="numLineCover"> 443</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> CRAWL_IMMEDIATELY:</pre></td></tr>
-<tr> <td class="numLineCover"> 446</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setCrawlImmediately(<span class="keyword">true</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 447</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> CRAWL_ONCE:</pre></td></tr>
-<tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setCrawlOnce(<span class="keyword">true</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 451</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> LOCK:</pre></td></tr>
-<tr> <td class="numLineCover"> 452</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> builder.setLock(<span class="keyword">true</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 454</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">case</span> DELETE:</pre></td></tr>
-<tr> <td class="numLineCover"> 455</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> builder.setDeleteFromIndex(<span class="keyword">true</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 456</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 457</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
-<tr> <td class="numLineCover"> 458</td> <td class="nbHitsUncovered"><a title="Line 458: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 458: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Lister Error: invalid operation: '"</span> + command.getOperation() +</a></span></pre></td></tr>
-<tr> <td class="numLine"> 459</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> (command.hasArgument() ? <span class="string">"' with argument: '"</span> + command.getArgument() + <span class="string">"'"</span> : <span class="string">"'"</span>));</pre></td></tr>
-<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 389</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 30023</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
-<tr> <td class="numLine"> 462</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 390</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLine"> 391</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
-<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">return</span> pusher.pushRecords(result, handler);</pre></td></tr>
-<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 392</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 467</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Read a command from the command stream</span></pre></td></tr>
-<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Parse a listing response, sending results to {@code pusher}. If {@code handler} is {@code</span></pre></td></tr>
+<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * null}, then {@code pusher}'s default handler will be used. In case of failure sending in</span></pre></td></tr>
+<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * {@code pusher}, the rest of the input stream may not be read.</span></pre></td></tr>
+<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
-<tr> <td class="numLine"> 470</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @return The next command from the command stream. for end-of-steam null is returned.</span></pre></td></tr>
-<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * @throws IOException on stream read error</span></pre></td></tr>
-<tr> <td class="numLine"> 472</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return {@code null} on success, otherwise the first Record to fail</span></pre></td></tr>
+<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
-<tr> <td class="numLine"> 473</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> Command readCommand() <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">public</span> DocIdPusher.Record readFromLister(DocIdPusher pusher, PushErrorHandler handler)</pre></td></tr>
+<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">throws</span> IOException, InterruptedException {</pre></td></tr>
+<tr> <td class="numLineCover"> 403</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> ArrayList<DocIdPusher.Record> result = <span class="keyword">new</span> ArrayList<DocIdPusher.Record>();</pre></td></tr>
+<tr> <td class="numLineCover"> 404</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> DocIdPusher.Record.Builder builder = <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 405</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> Command command = readCommand();</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="numLineCover"> 475</td> <td class="nbHitsCovered"> 30091</td> <td class="src"><pre class="src"> Command result = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 477</td> <td class="nbHitsCovered"><a title="Line 477: Conditional coverage 100% (2/2)."> 60160</a></td> <td class="src"><pre class="src"> <a title="Line 477: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (result == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 478</td> <td class="nbHitsCovered"> 30093</td> <td class="src"><pre class="src"> String commandTokens[] = parseNextLine();</pre></td></tr>
-<tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"><a title="Line 479: Conditional coverage 100% (2/2)."> 30089</a></td> <td class="src"><pre class="src"> <a title="Line 479: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 480</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 481</td> <td class="nbHitsCovered"><a title="Line 481: Conditional coverage 100% (2/2)."> 30070</a></td> <td class="src"><pre class="src"> <a title="Line 481: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> ((commandTokens[0].equals(<span class="string">"repository-unavailable"</span>))) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 482</td> <td class="nbHitsUncovered"><a title="Line 482: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 482: Conditional coverage 50% (1/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Error: repository unavailable. "</span></a></span></pre></td></tr>
-<tr> <td class="numLine"> 483</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> + (commandTokens.length > 1 ? commandTokens[1] : <span class="string">""</span>));</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="numLineCover"> 486</td> <td class="nbHitsCovered"> 30069</td> <td class="src"><pre class="src"> Operation operation = STRING_TO_OPERATION.get(commandTokens[0]);</pre></td></tr>
-<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// Skip over unrecognized commands</span></pre></td></tr>
-<tr> <td class="numLineCover"> 488</td> <td class="nbHitsCovered"><a title="Line 488: Conditional coverage 100% (2/2)."> 30069</a></td> <td class="src"><pre class="src"> <a title="Line 488: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (operation == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLine"> 489</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// TODO(johnfelton) add a warning about an unrecognized command</span></pre></td></tr>
-<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
-<tr> <td class="numLine"> 491</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 493</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> String argument = <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 495</td> <td class="nbHitsCovered"><a title="Line 495: Conditional coverage 100% (2/2)."> 30067</a></td> <td class="src"><pre class="src"> <a title="Line 495: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens.length > 1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 496</td> <td class="nbHitsCovered"> 30051</td> <td class="src"><pre class="src"> argument = commandTokens[1];</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"> 30067</td> <td class="src"><pre class="src"> result = <span class="keyword">new</span> Command(operation, argument);</pre></td></tr>
-<tr> <td class="numLineCover"> 500</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 501</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
-<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> String[] parseNextLine() <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 505</td> <td class="nbHitsCovered"> 30093</td> <td class="src"><pre class="src"> checkHeader();</pre></td></tr>
-<tr> <td class="numLineCover"> 506</td> <td class="nbHitsCovered"> 30089</td> <td class="src"><pre class="src"> String line = <span class="string">""</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 507</td> <td class="nbHitsCovered"><a title="Line 507: Conditional coverage 100% (2/2)."> 60183</a></td> <td class="src"><pre class="src"> <a title="Line 507: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (line.length() == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 508</td> <td class="nbHitsCovered"> 30113</td> <td class="src"><pre class="src"> line = readCharsUntilMarker(delimiter);</pre></td></tr>
-<tr> <td class="numLine"> 509</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// On End-Of-Stream return the end-message command</span></pre></td></tr>
-<tr> <td class="numLineCover"> 510</td> <td class="nbHitsCovered"><a title="Line 510: Conditional coverage 100% (2/2)."> 30113</a></td> <td class="src"><pre class="src"> <a title="Line 510: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (line == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 511</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 512</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment">// If nothing is between the last delimiter and this one then exit ID list mode</span></pre></td></tr>
-<tr> <td class="numLineCover"> 514</td> <td class="nbHitsCovered"><a title="Line 514: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30094</a></td> <td class="src"><pre class="src"> <a title="Line 514: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (inIdList && line.length() == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 515</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> inIdList = <span class="keyword">false</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 516</td> <td class="nbHitsCovered"><a title="Line 516: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30093</a></td> <td class="src"><pre class="src"> <a title="Line 516: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (!inIdList && line.equals(<span class="string">"id-list"</span>)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 517</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> inIdList = <span class="keyword">true</span>;</pre></td></tr>
-<tr> <td class="numLineCover"> 518</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> line = <span class="string">""</span>; <span class="comment">// loop again</span></pre></td></tr>
-<tr> <td class="numLine"> 519</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Starting out at end-of-stream so don't send anything.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 408</td> <td class="nbHitsCovered"><a title="Line 408: Conditional coverage 100% (2/2)."> 10</a></td> <td class="src"><pre class="src"> <a title="Line 408: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 409</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 521</td> <td class="nbHitsCovered"><a title="Line 521: Conditional coverage 100% (2/2)."> 30070</a></td> <td class="src"><pre class="src"> <a title="Line 521: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (inIdList) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 522</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> String[]{<span class="string">"id"</span>, line};</pre></td></tr>
-<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 524</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> <span class="keyword">return</span> line.split(<span class="string">"="</span>, 2);</pre></td></tr>
-<tr> <td class="numLine"> 525</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 526</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// The first operation must be a doc ID.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"><a title="Line 413: Conditional coverage 100% (2/2)."> 9</a></td> <td class="src"><pre class="src"> <a title="Line 413: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (command.getOperation() != Operation.ID) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Lister Error: the first operator must be a document ID. "</span></pre></td></tr>
+<tr> <td class="numLine"> 415</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + <span class="string">" Instead encountered '"</span> + command.getOperation() + <span class="string">"'."</span>);</pre></td></tr>
+<tr> <td class="numLine"> 416</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 417</td> <td class="nbHitsCovered"><a title="Line 417: Conditional coverage 100% (2/2)."> 30031</a></td> <td class="src"><pre class="src"> <a title="Line 417: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (command != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 418</td> <td class="nbHitsUncovered"><a title="Line 418: Conditional coverage 50% (7/14)."> 30023</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 418: Conditional coverage 50% (7/14)."> <span class="keyword">switch</span> (command.getOperation()) {</a></span></pre></td></tr>
+<tr> <td class="numLine"> 419</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> ID:</pre></td></tr>
+<tr> <td class="numLineCover"> 420</td> <td class="nbHitsCovered"><a title="Line 420: Conditional coverage 100% (2/2)."> 30015</a></td> <td class="src"><pre class="src"> <a title="Line 420: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (builder != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 421</td> <td class="nbHitsCovered"> 30007</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
+<tr> <td class="numLine"> 422</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// TODO(ejona): make threshold smarter.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"><a title="Line 423: Conditional coverage 100% (2/2)."> 30007</a></td> <td class="src"><pre class="src"> <a title="Line 423: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (result.size() >= 10000) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 424</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> DocIdPusher.Record errorRecord = pusher.pushRecords(result, handler);</pre></td></tr>
+<tr> <td class="numLineCover"> 425</td> <td class="nbHitsUncovered"><a title="Line 425: Conditional coverage 50% (1/2)."> 3</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 425: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (errorRecord != <span class="keyword">null</span>) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 426</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> errorRecord;</span></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"> 3</td> <td class="src"><pre class="src"> result.clear();</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="numLine"> 430</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 431</td> <td class="nbHitsCovered"> 30015</td> <td class="src"><pre class="src"> builder = <span class="keyword">new</span> DocIdPusher.Record.Builder(<span class="keyword">new</span> DocId(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 432</td> <td class="nbHitsCovered"> 30015</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> LAST_MODIFIED:</pre></td></tr>
+<tr> <td class="numLine"> 434</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Convert seconds to milliseconds for Date constructor.</span></pre></td></tr>
+<tr> <td class="numLineCover"> 435</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setLastModified(<span class="keyword">new</span> Date(Long.parseLong(command.getArgument()) * 1000));</pre></td></tr>
+<tr> <td class="numLineCover"> 436</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 437</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> RESULT_LINK:</pre></td></tr>
+<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 439</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setResultLink(<span class="keyword">new</span> URI(command.getArgument()));</pre></td></tr>
+<tr> <td class="numLineCover"> 440</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (URISyntaxException e) {</span></pre></td></tr>
+<tr> <td class="numLineCover"> 441</td> <td class="nbHitsUncovered"><a title="Line 441: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 441: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Lister Error: invalid URL: '"</span> + command.getOperation()</a></span></pre></td></tr>
+<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + (command.hasArgument() ? <span class="string">"' with argument: '"</span></pre></td></tr>
+<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + command.getArgument() + <span class="string">"'"</span> : <span class="string">"'"</span>), e);</pre></td></tr>
+<tr> <td class="numLineCover"> 444</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> CRAWL_IMMEDIATELY:</pre></td></tr>
+<tr> <td class="numLineCover"> 447</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setCrawlImmediately(<span class="keyword">true</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 448</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 449</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> CRAWL_ONCE:</pre></td></tr>
+<tr> <td class="numLineCover"> 450</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> builder.setCrawlOnce(<span class="keyword">true</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 451</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> LOCK:</pre></td></tr>
+<tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> builder.setLock(<span class="keyword">true</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 454</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 455</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">case</span> DELETE:</pre></td></tr>
+<tr> <td class="numLineCover"> 456</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> builder.setDeleteFromIndex(<span class="keyword">true</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 457</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 458</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr>
+<tr> <td class="numLineCover"> 459</td> <td class="nbHitsUncovered"><a title="Line 459: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 459: Conditional coverage 0% (0/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Lister Error: invalid operation: '"</span> + command.getOperation() +</a></span></pre></td></tr>
+<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> (command.hasArgument() ? <span class="string">"' with argument: '"</span> + command.getArgument() + <span class="string">"'"</span> : <span class="string">"'"</span>));</pre></td></tr>
+<tr> <td class="numLine"> 461</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 30023</td> <td class="src"><pre class="src"> command = readCommand();</pre></td></tr>
+<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> result.add(builder.build());</pre></td></tr>
+<tr> <td class="numLineCover"> 465</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">return</span> pusher.pushRecords(result, handler);</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"> </pre></td></tr>
+<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
-<tr> <td class="numLine"> 528</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="comment"> * Read and verify the data format header if needed.</span></pre></td></tr>
-<tr> <td class="numLine"> 529</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 469</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Read a command from the command stream</span></pre></td></tr>
+<tr> <td class="numLine"> 470</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
+<tr> <td class="numLine"> 471</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @return The next command from the command stream. for end-of-steam null is returned.</span></pre></td></tr>
+<tr> <td class="numLine"> 472</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * @throws IOException on stream read error</span></pre></td></tr>
+<tr> <td class="numLine"> 473</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> Command readCommand() <span class="keyword">throws</span> IOException {</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="numLineCover"> 476</td> <td class="nbHitsCovered"> 30091</td> <td class="src"><pre class="src"> Command result = <span class="keyword">null</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"><a title="Line 478: Conditional coverage 100% (2/2)."> 60160</a></td> <td class="src"><pre class="src"> <a title="Line 478: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (result == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"> 30093</td> <td class="src"><pre class="src"> String commandTokens[] = parseNextLine();</pre></td></tr>
+<tr> <td class="numLineCover"> 480</td> <td class="nbHitsCovered"><a title="Line 480: Conditional coverage 100% (2/2)."> 30089</a></td> <td class="src"><pre class="src"> <a title="Line 480: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 481</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 482</td> <td class="nbHitsCovered"><a title="Line 482: Conditional coverage 100% (2/2)."> 30070</a></td> <td class="src"><pre class="src"> <a title="Line 482: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> ((commandTokens[0].equals(<span class="string">"repository-unavailable"</span>))) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 483</td> <td class="nbHitsUncovered"><a title="Line 483: Conditional coverage 50% (1/2)."> 1</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 483: Conditional coverage 50% (1/2)."> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Error: repository unavailable. "</span></a></span></pre></td></tr>
+<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> + (commandTokens.length > 1 ? commandTokens[1] : <span class="string">""</span>));</pre></td></tr>
+<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 487</td> <td class="nbHitsCovered"> 30069</td> <td class="src"><pre class="src"> Operation operation = STRING_TO_OPERATION.get(commandTokens[0]);</pre></td></tr>
+<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// Skip over unrecognized commands</span></pre></td></tr>
+<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"><a title="Line 489: Conditional coverage 100% (2/2)."> 30069</a></td> <td class="src"><pre class="src"> <a title="Line 489: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (operation == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLine"> 490</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// TODO(johnfelton) add a warning about an unrecognized command</span></pre></td></tr>
+<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">continue</span>;</pre></td></tr>
+<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 494</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> String argument = <span class="keyword">null</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="numLineCover"> 496</td> <td class="nbHitsCovered"><a title="Line 496: Conditional coverage 100% (2/2)."> 30067</a></td> <td class="src"><pre class="src"> <a title="Line 496: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (commandTokens.length > 1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 497</td> <td class="nbHitsCovered"> 30051</td> <td class="src"><pre class="src"> argument = commandTokens[1];</pre></td></tr>
+<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 499</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 500</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> result = <span class="keyword">new</span> Command(operation, argument);</pre></td></tr>
+<tr> <td class="numLineCover"> 501</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 502</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</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="numLine"> 505</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> String[] parseNextLine() <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 506</td> <td class="nbHitsCovered"> 30093</td> <td class="src"><pre class="src"> checkHeader();</pre></td></tr>
+<tr> <td class="numLineCover"> 507</td> <td class="nbHitsCovered"> 30089</td> <td class="src"><pre class="src"> String line = <span class="string">""</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 508</td> <td class="nbHitsCovered"><a title="Line 508: Conditional coverage 100% (2/2)."> 60183</a></td> <td class="src"><pre class="src"> <a title="Line 508: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (line.length() == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 509</td> <td class="nbHitsCovered"> 30113</td> <td class="src"><pre class="src"> line = readCharsUntilMarker(delimiter);</pre></td></tr>
+<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// On End-Of-Stream return the end-message command</span></pre></td></tr>
+<tr> <td class="numLineCover"> 511</td> <td class="nbHitsCovered"><a title="Line 511: Conditional coverage 100% (2/2)."> 30113</a></td> <td class="src"><pre class="src"> <a title="Line 511: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (line == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 512</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 514</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">// If nothing is between the last delimiter and this one then exit ID list mode</span></pre></td></tr>
+<tr> <td class="numLineCover"> 515</td> <td class="nbHitsCovered"><a title="Line 515: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30094</a></td> <td class="src"><pre class="src"> <a title="Line 515: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (inIdList && line.length() == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 516</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> inIdList = <span class="keyword">false</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 517</td> <td class="nbHitsCovered"><a title="Line 517: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30093</a></td> <td class="src"><pre class="src"> <a title="Line 517: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> } <span class="keyword">else</span> <span class="keyword">if</span> (!inIdList && line.equals(<span class="string">"id-list"</span>)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 518</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> inIdList = <span class="keyword">true</span>;</pre></td></tr>
+<tr> <td class="numLineCover"> 519</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> line = <span class="string">""</span>; <span class="comment">// loop again</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="numLine"> 521</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 522</td> <td class="nbHitsCovered"><a title="Line 522: Conditional coverage 100% (2/2)."> 30070</a></td> <td class="src"><pre class="src"> <a title="Line 522: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (inIdList) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 523</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> String[]{<span class="string">"id"</span>, line};</pre></td></tr>
+<tr> <td class="numLine"> 524</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 525</td> <td class="nbHitsCovered"> 30067</td> <td class="src"><pre class="src"> <span class="keyword">return</span> line.split(<span class="string">"="</span>, 2);</pre></td></tr>
+<tr> <td class="numLine"> 526</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 528</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
+<tr> <td class="numLine"> 529</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> * Read and verify the data format header if needed.</span></pre></td></tr>
<tr> <td class="numLine"> 530</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
+<tr> <td class="numLine"> 531</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> checkHeader() <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 531</td> <td class="nbHitsCovered"><a title="Line 531: Conditional coverage 100% (2/2)."> 30095</a></td> <td class="src"><pre class="src"> <a title="Line 531: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">this</span>.delimiter != <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"> 30069</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
-<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"><a title="Line 532: Conditional coverage 100% (2/2)."> 30095</a></td> <td class="src"><pre class="src"> <a title="Line 532: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (<span class="keyword">this</span>.delimiter != <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 533</td> <td class="nbHitsCovered"> 30069</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
<tr> <td class="numLine"> 534</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 535</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 535</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> String line = readCharsUntilMarker(<span class="string">"["</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 536</td> <td class="nbHitsUncovered"><a title="Line 536: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> 26</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 536: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> <span class="keyword">if</span> ((line == <span class="keyword">null</span>) || (line.length() < HEADER_PREFIX.length()) ||</a></span></pre></td></tr>
-<tr> <td class="numLine"> 537</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 536</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> String line = readCharsUntilMarker(<span class="string">"["</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 537</td> <td class="nbHitsUncovered"><a title="Line 537: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> 26</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 537: Conditional coverage 66% (4/6) [each condition: 50%, 100%, 50%]."> <span class="keyword">if</span> ((line == <span class="keyword">null</span>) || (line.length() < HEADER_PREFIX.length()) ||</a></span></pre></td></tr>
+<tr> <td class="numLine"> 538</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> !line.substring(0, HEADER_PREFIX.length()).equals(HEADER_PREFIX)) {</pre></td></tr>
-<tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Adaptor data must begin with '"</span> + HEADER_PREFIX + <span class="string">"'"</span>);</pre></td></tr>
-<tr> <td class="numLine"> 539</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 539</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Adaptor data must begin with '"</span> + HEADER_PREFIX + <span class="string">"'"</span>);</pre></td></tr>
<tr> <td class="numLine"> 540</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</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"> 541</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> String versionNumberString = line.substring(HEADER_PREFIX.length());</pre></td></tr>
-<tr> <td class="numLineCover"> 542</td> <td class="nbHitsUncovered"><a title="Line 542: Conditional coverage 50% (1/2)."> 25</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 542: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (versionNumberString.length() < 3) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 543</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> IOException(<span class="string">"Format version '"</span> + versionNumberString + <span class="string">"' is invalid. "</span> +</span></pre></td></tr>
-<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="string">"The version must be at least one digit with one leading space and one trailing space."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 542</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> String versionNumberString = line.substring(HEADER_PREFIX.length());</pre></td></tr>
+<tr> <td class="numLineCover"> 543</td> <td class="nbHitsUncovered"><a title="Line 543: Conditional coverage 50% (1/2)."> 25</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 543: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (versionNumberString.length() < 3) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 544</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> IOException(<span class="string">"Format version '"</span> + versionNumberString + <span class="string">"' is invalid. "</span> +</span></pre></td></tr>
<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <td class="src"><pre class="src"> <span class="string">"The version must be at least one digit with one leading space and one trailing space."</span>);</pre></td></tr>
<tr> <td class="numLine"> 546</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 547</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> delimiter = readCharsUntilMarker(<span class="string">"]"</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 548</td> <td class="nbHitsUncovered"><a title="Line 548: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> 25</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 548: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> ((delimiter == <span class="keyword">null</span>) || (delimiter.length() < 1)) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 549</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Delimiter must be at least one character long."</span>);</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"> 547</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 548</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> delimiter = readCharsUntilMarker(<span class="string">"]"</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 549</td> <td class="nbHitsUncovered"><a title="Line 549: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> 25</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 549: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> ((delimiter == <span class="keyword">null</span>) || (delimiter.length() < 1)) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 550</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Delimiter must be at least one character long."</span>);</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="numLineCover"> 552</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> Pattern pattern = Pattern.compile(DISALLOWED_DELIMITER_CHARS_REGEX);</pre></td></tr>
-<tr> <td class="numLineCover"> 553</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> Matcher matcher = pattern.matcher(delimiter);</pre></td></tr>
-<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 555</td> <td class="nbHitsCovered"><a title="Line 555: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 555: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (matcher.find()) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 556</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Invalid character in delimiter."</span>);</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"> 552</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLineCover"> 553</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> Pattern pattern = Pattern.compile(DISALLOWED_DELIMITER_CHARS_REGEX);</pre></td></tr>
+<tr> <td class="numLineCover"> 554</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> Matcher matcher = pattern.matcher(delimiter);</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="numLineCover"> 556</td> <td class="nbHitsCovered"><a title="Line 556: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 556: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (matcher.find()) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 557</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Invalid character in delimiter."</span>);</pre></td></tr>
<tr> <td class="numLine"> 558</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> </pre></td></tr>
+ <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"> <span class="keyword">try</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 560</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> versionNumber = Integer.parseInt(versionNumberString.trim());</pre></td></tr>
-<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NumberFormatException e) {</pre></td></tr>
-<tr> <td class="numLineCover"> 562</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Format version '"</span> + versionNumberString + <span class="string">"' is invalid."</span>);</pre></td></tr>
-<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLine"> 565</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 560</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
+<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 23</td> <td class="src"><pre class="src"> versionNumber = Integer.parseInt(versionNumberString.trim());</pre></td></tr>
+<tr> <td class="numLineCover"> 562</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> } <span class="keyword">catch</span> (NumberFormatException e) {</pre></td></tr>
+<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"Format version '"</span> + versionNumberString + <span class="string">"' is invalid."</span>);</pre></td></tr>
+<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"> 22</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"> <span class="keyword">private</span> <span class="keyword">byte</span>[] readBytesUntilMarker(<span class="keyword">byte</span>[] marker) <span class="keyword">throws</span> IOException {</pre></td></tr>
+ <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"> <span class="keyword">private</span> <span class="keyword">byte</span>[] readBytesUntilMarker(<span class="keyword">byte</span>[] marker) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLine"> 569</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 569</td> <td class="nbHitsUncovered"><a title="Line 569: Conditional coverage 50% (1/2)."> 30164</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 569: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (marker.length == 0) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 570</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> IOException(<span class="string">"Internal Error: Marker length must be greater than zero."</span>);</span></pre></td></tr>
-<tr> <td class="numLine"> 571</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 570</td> <td class="nbHitsUncovered"><a title="Line 570: Conditional coverage 50% (1/2)."> 30164</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 570: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (marker.length == 0) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 571</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> IOException(<span class="string">"Internal Error: Marker length must be greater than zero."</span>);</span></pre></td></tr>
+<tr> <td class="numLine"> 572</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 572</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> ByteArrayOutputStream byteArrayOutputStream = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
-<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">int</span> matchPosition = 0;</pre></td></tr>
-<tr> <td class="numLineCover"> 574</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">int</span> nextByte = 0;</pre></td></tr>
-<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> ByteArrayOutputStream byteArrayOutputStream = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
+<tr> <td class="numLineCover"> 574</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">int</span> matchPosition = 0;</pre></td></tr>
+<tr> <td class="numLineCover"> 575</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">int</span> nextByte = 0;</pre></td></tr>
+<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> </pre></td></tr>
-<tr> <td class="numLineCover"> 576</td> <td class="nbHitsCovered"><a title="Line 576: Conditional coverage 100% (2/2)."> 380886</a></td> <td class="src"><pre class="src"> <a title="Line 576: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (matchPosition < marker.length) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 577</td> <td class="nbHitsCovered"> 350747</td> <td class="src"><pre class="src"> nextByte = inputStream.read();</pre></td></tr>
-<tr> <td class="numLineCover"> 578</td> <td class="nbHitsCovered"><a title="Line 578: Conditional coverage 100% (2/2)."> 350747</a></td> <td class="src"><pre class="src"> <a title="Line 578: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (nextByte == ((<span class="keyword">int</span>) marker[matchPosition] & 0xff)) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 579</td> <td class="nbHitsCovered"> 30184</td> <td class="src"><pre class="src"> matchPosition += 1;</pre></td></tr>
-<tr> <td class="numLine"> 580</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 577</td> <td class="nbHitsCovered"><a title="Line 577: Conditional coverage 100% (2/2)."> 380886</a></td> <td class="src"><pre class="src"> <a title="Line 577: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (matchPosition < marker.length) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 578</td> <td class="nbHitsCovered"> 350747</td> <td class="src"><pre class="src"> nextByte = inputStream.read();</pre></td></tr>
+<tr> <td class="numLineCover"> 579</td> <td class="nbHitsCovered"><a title="Line 579: Conditional coverage 100% (2/2)."> 350747</a></td> <td class="src"><pre class="src"> <a title="Line 579: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (nextByte == ((<span class="keyword">int</span>) marker[matchPosition] & 0xff)) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"> 30184</td> <td class="src"><pre class="src"> matchPosition += 1;</pre></td></tr>
+<tr> <td class="numLine"> 581</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 581</td> <td class="nbHitsUncovered"><a title="Line 581: Conditional coverage 50% (1/2)."> 320563</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 581: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (matchPosition > 0) {</a></span></pre></td></tr>
-<tr> <td class="numLineCover"> 582</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> byteArrayOutputStream.write(marker, 0, matchPosition);</span></pre></td></tr>
-<tr> <td class="numLineCover"> 583</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> matchPosition = 0;</span></pre></td></tr>
-<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 582</td> <td class="nbHitsUncovered"><a title="Line 582: Conditional coverage 50% (1/2)."> 320563</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 582: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (matchPosition > 0) {</a></span></pre></td></tr>
+<tr> <td class="numLineCover"> 583</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> byteArrayOutputStream.write(marker, 0, matchPosition);</span></pre></td></tr>
+<tr> <td class="numLineCover"> 584</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> matchPosition = 0;</span></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="numLineCover"> 585</td> <td class="nbHitsCovered"><a title="Line 585: Conditional coverage 100% (2/2)."> 320563</a></td> <td class="src"><pre class="src"> <a title="Line 585: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (nextByte == -1) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 586</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
-<tr> <td class="numLine"> 587</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 586</td> <td class="nbHitsCovered"><a title="Line 586: Conditional coverage 100% (2/2)."> 320563</a></td> <td class="src"><pre class="src"> <a title="Line 586: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (nextByte == -1) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 587</td> <td class="nbHitsCovered"> 25</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
+<tr> <td class="numLine"> 588</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 588</td> <td class="nbHitsCovered"> 320538</td> <td class="src"><pre class="src"> byteArrayOutputStream.write(nextByte);</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="numLineCover"> 589</td> <td class="nbHitsCovered"> 320538</td> <td class="src"><pre class="src"> byteArrayOutputStream.write(nextByte);</pre></td></tr>
<tr> <td class="numLine"> 590</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+ <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"> }</pre></td></tr>
-<tr> <td class="numLineCover"> 592</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] result = byteArrayOutputStream.toByteArray();</pre></td></tr>
-<tr> <td class="numLineCover"> 593</td> <td class="nbHitsCovered"><a title="Line 593: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30164</a></td> <td class="src"><pre class="src"> <a title="Line 593: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (nextByte == -1 && result.length == 0) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 594</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
-<tr> <td class="numLine"> 595</td> <td class="nbHits"> </td>
+<tr> <td class="numLineCover"> 593</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] result = byteArrayOutputStream.toByteArray();</pre></td></tr>
+<tr> <td class="numLineCover"> 594</td> <td class="nbHitsCovered"><a title="Line 594: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 30164</a></td> <td class="src"><pre class="src"> <a title="Line 594: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (nextByte == -1 && result.length == 0) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 595</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 596</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
-<tr> <td class="numLineCover"> 596</td> <td class="nbHitsCovered"> 30145</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
-<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 597</td> <td class="nbHitsCovered"> 30145</td> <td class="src"><pre class="src"> <span class="keyword">return</span> result;</pre></td></tr>
<tr> <td class="numLine"> 598</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> }</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="numLine"> 600</td> <td class="nbHits"> </td>
- <td class="src"><pre class="src"> <span class="keyword">private</span> String readCharsUntilMarker(String marker) <span class="keyword">throws</span> IOException {</pre></td></tr>
-<tr> <td class="numLineCover"> 601</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] byteMarker = marker.getBytes(CHARSET);</pre></td></tr>
-<tr> <td class="numLineCover"> 602</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] bytes = readBytesUntilMarker(byteMarker);</pre></td></tr>
-<tr> <td class="numLineCover"> 603</td> <td class="nbHitsCovered"><a title="Line 603: Conditional coverage 100% (2/2)."> 30164</a></td> <td class="src"><pre class="src"> <a title="Line 603: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes == <span class="keyword">null</span>) {</a></pre></td></tr>
-<tr> <td class="numLineCover"> 604</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</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="numLineCover"> 606</td> <td class="nbHitsCovered"> 30145</td> <td class="src"><pre class="src"> <span class="keyword">return</span> CHARSET.newDecoder().decode(ByteBuffer.wrap(bytes)).toString();</pre></td></tr>
-<tr> <td class="numLine"> 607</td> <td class="nbHits"> </td>
+<tr> <td class="numLine"> 599</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 600</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> </pre></td></tr>
+<tr> <td class="numLine"> 601</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> <span class="keyword">private</span> String readCharsUntilMarker(String marker) <span class="keyword">throws</span> IOException {</pre></td></tr>
+<tr> <td class="numLineCover"> 602</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] byteMarker = marker.getBytes(CHARSET);</pre></td></tr>
+<tr> <td class="numLineCover"> 603</td> <td class="nbHitsCovered"> 30164</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] bytes = readBytesUntilMarker(byteMarker);</pre></td></tr>
+<tr> <td class="numLineCover"> 604</td> <td class="nbHitsCovered"><a title="Line 604: Conditional coverage 100% (2/2)."> 30164</a></td> <td class="src"><pre class="src"> <a title="Line 604: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytes == <span class="keyword">null</span>) {</a></pre></td></tr>
+<tr> <td class="numLineCover"> 605</td> <td class="nbHitsCovered"> 19</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">null</span>;</pre></td></tr>
+<tr> <td class="numLine"> 606</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLineCover"> 607</td> <td class="nbHitsCovered"> 30145</td> <td class="src"><pre class="src"> <span class="keyword">return</span> CHARSET.newDecoder().decode(ByteBuffer.wrap(bytes)).toString();</pre></td></tr>
<tr> <td class="numLine"> 608</td> <td class="nbHits"> </td>
+ <td class="src"><pre class="src"> }</pre></td></tr>
+<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
<td class="src"><pre class="src"> }</pre></td></tr>
</table>
diff --git a/coverage/com.google.enterprise.adaptor.IOHelper.html b/coverage/com.google.enterprise.adaptor.IOHelper.html
index 0cca416..d2471d1 100644
--- a/coverage/com.google.enterprise.adaptor.IOHelper.html
+++ b/coverage/com.google.enterprise.adaptor.IOHelper.html
@@ -83,8 +83,8 @@
<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)."> 185</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"> 112</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)."> 184</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"> 111</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"> 72</td> <td class="src"><pre class="src"> out.flush();</pre></td></tr>
diff --git a/coverage/com.google.enterprise.adaptor.Journal.html b/coverage/com.google.enterprise.adaptor.Journal.html
index 11911c9..04e36f3 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"> 750</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"> 750</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)."> 321537</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"> 320787</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)."> 293882</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"> 293132</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"> 750</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 7156e93..72d1ee3 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"> 306</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"> 320430</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"> 292775</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>